{"version":3,"sources":["jsdelivr-header.js","/npm/@itentialopensource/adapter-silverpeak@1.0.1/adapter.js"],"names":[],"mappings":"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","file":"/npm/@itentialopensource/adapter-silverpeak@1.0.1/adapter.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/@itentialopensource/adapter-silverpeak@1.0.1/adapter.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","/* @copyright Itential, LLC 2019 (pre-modifications) */\n\n/* eslint import/no-dynamic-require: warn */\n/* eslint object-curly-newline: warn */\n/* eslint no-underscore-dangle: warn  */\n/* eslint default-param-last: warn  */\n/* eslint camelcase: warn  */\n\n// Set globals\n/* global log */\n\n/* Required libraries.  */\nconst path = require('path');\n\n/* Fetch in the other needed components for the this Adaptor */\nconst AdapterBaseCl = require(path.join(__dirname, 'adapterBase.js'));\n\n/**\n * This is the adapter/interface into Silverpeak\n */\n\n/* GENERAL ADAPTER FUNCTIONS */\nclass Silverpeak extends AdapterBaseCl {\n  /**\n   * Silverpeak Adapter\n   * @constructor\n   */\n  /* Working on changing the way we do Emit methods due to size and time constrainsts\n  constructor(prongid, properties) {\n    // Instantiate the AdapterBase super class\n    super(prongid, properties);\n\n    const restFunctionNames = this.getWorkflowFunctions();\n\n    // Dynamically bind emit functions\n    for (let i = 0; i < restFunctionNames.length; i += 1) {\n      // Bind function to have name fnNameEmit for fnName\n      const version = restFunctionNames[i].match(/__v[0-9]+/);\n      const baseFnName = restFunctionNames[i].replace(/__v[0-9]+/, '');\n      const fnNameEmit = version ? `${baseFnName}Emit${version}` : `${baseFnName}Emit`;\n      this[fnNameEmit] = function (...args) {\n        // extract the callback\n        const callback = args[args.length - 1];\n        // slice the callback from args so we can insert our own\n        const functionArgs = args.slice(0, args.length - 1);\n        // create a random name for the listener\n        const eventName = `${restFunctionNames[i]}:${Math.random().toString(36)}`;\n        // tell the calling class to start listening\n        callback({ event: eventName, status: 'received' });\n        // store parent for use of this context later\n        const parent = this;\n        // store emission function\n        const func = function (val, err) {\n          parent.removeListener(eventName, func);\n          parent.emit(eventName, val, err);\n        };\n        // Use apply to call the function in a specific context\n        this[restFunctionNames[i]].apply(this, functionArgs.concat([func])); // eslint-disable-line prefer-spread\n      };\n    }\n\n    // Uncomment if you have things to add to the constructor like using your own properties.\n    // Otherwise the constructor in the adapterBase will be used.\n    // Capture my own properties - they need to be defined in propertiesSchema.json\n    // if (this.allProps && this.allProps.myownproperty) {\n    //   mypropvariable = this.allProps.myownproperty;\n    // }\n  }\n  */\n\n  /**\n   * @callback healthCallback\n   * @param {Object} reqObj - the request to send into the healthcheck\n   * @param {Callback} callback - The results of the call\n   */\n  healthCheck(reqObj, callback) {\n    // you can modify what is passed into the healthcheck by changing things in the newReq\n    let newReq = null;\n    if (reqObj) {\n      newReq = Object.assign(...reqObj);\n    }\n    super.healthCheck(newReq, callback);\n  }\n\n  /**\n   * @iapGetAdapterWorkflowFunctions\n   */\n  iapGetAdapterWorkflowFunctions(inIgnore) {\n    let myIgnore = [\n      'healthCheck',\n      'iapGetAdapterWorkflowFunctions',\n      'hasEntities',\n      'getAuthorization'\n    ];\n    if (!inIgnore && Array.isArray(inIgnore)) {\n      myIgnore = inIgnore;\n    } else if (!inIgnore && typeof inIgnore === 'string') {\n      myIgnore = [inIgnore];\n    }\n\n    // The generic adapter functions should already be ignored (e.g. healthCheck)\n    // you can add specific methods that you do not want to be workflow functions to ignore like below\n    // myIgnore.push('myMethodNotInWorkflow');\n\n    return super.iapGetAdapterWorkflowFunctions(myIgnore);\n  }\n\n  /**\n   * iapUpdateAdapterConfiguration is used to update any of the adapter configuration files. This\n   * allows customers to make changes to adapter configuration without having to be on the\n   * file system.\n   *\n   * @function iapUpdateAdapterConfiguration\n   * @param {string} configFile - the name of the file being updated (required)\n   * @param {Object} changes - an object containing all of the changes = formatted like the configuration file (required)\n   * @param {string} entity - the entity to be changed, if an action, schema or mock data file (optional)\n   * @param {string} type - the type of entity file to change, (action, schema, mock) (optional)\n   * @param {string} action - the action to be changed, if an action, schema or mock data file (optional)\n   * @param {boolean} replace - true to replace entire mock data, false to merge/append\n   * @param {Callback} callback - The results of the call\n   */\n  iapUpdateAdapterConfiguration(configFile, changes, entity, type, action, replace, callback) {\n    const meth = 'adapter-iapUpdateAdapterConfiguration';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    super.iapUpdateAdapterConfiguration(configFile, changes, entity, type, action, replace, callback);\n  }\n\n  /**\n    * @summary Suspends adapter\n    *\n    * @function iapSuspendAdapter\n    * @param {Callback} callback - callback function\n    */\n  iapSuspendAdapter(mode, callback) {\n    const meth = 'adapter-iapSuspendAdapter';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    try {\n      return super.iapSuspendAdapter(mode, callback);\n    } catch (error) {\n      log.error(`${origin}: ${error}`);\n      return callback(null, error);\n    }\n  }\n\n  /**\n    * @summary Unsuspends adapter\n    *\n    * @function iapUnsuspendAdapter\n    * @param {Callback} callback - callback function\n    */\n  iapUnsuspendAdapter(callback) {\n    const meth = 'adapter-iapUnsuspendAdapter';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    try {\n      return super.iapUnsuspendAdapter(callback);\n    } catch (error) {\n      log.error(`${origin}: ${error}`);\n      return callback(null, error);\n    }\n  }\n\n  /**\n    * @summary Get the Adapter Queue\n    *\n    * @function iapGetAdapterQueue\n    * @param {Callback} callback - callback function\n    */\n  iapGetAdapterQueue(callback) {\n    const meth = 'adapter-iapGetAdapterQueue';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    return super.iapGetAdapterQueue(callback);\n  }\n\n  /* SCRIPT CALLS */\n  /**\n   * See if the API path provided is found in this adapter\n   *\n   * @function iapFindAdapterPath\n   * @param {string} apiPath - the api path to check on\n   * @param {Callback} callback - The results of the call\n   */\n  iapFindAdapterPath(apiPath, callback) {\n    const meth = 'adapter-iapFindAdapterPath';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    super.iapFindAdapterPath(apiPath, callback);\n  }\n\n  /**\n   * @summary Runs troubleshoot scripts for adapter\n   *\n   * @function iapTroubleshootAdapter\n   * @param {Object} props - the connection, healthcheck and authentication properties\n   *\n   * @param {Callback} callback - The results of the call\n   */\n  iapTroubleshootAdapter(props, callback) {\n    const meth = 'adapter-iapTroubleshootAdapter';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    try {\n      return super.iapTroubleshootAdapter(props, this, callback);\n    } catch (error) {\n      log.error(`${origin}: ${error}`);\n      return callback(null, error);\n    }\n  }\n\n  /**\n    * @summary runs healthcheck script for adapter\n    *\n    * @function iapRunAdapterHealthcheck\n    * @param {Adapter} adapter - adapter instance to troubleshoot\n    * @param {Callback} callback - callback function\n    */\n  iapRunAdapterHealthcheck(callback) {\n    const meth = 'adapter-iapRunAdapterHealthcheck';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    try {\n      return super.iapRunAdapterHealthcheck(this, callback);\n    } catch (error) {\n      log.error(`${origin}: ${error}`);\n      return callback(null, error);\n    }\n  }\n\n  /**\n    * @summary runs connectivity check script for adapter\n    *\n    * @function iapRunAdapterConnectivity\n    * @param {Callback} callback - callback function\n    */\n  iapRunAdapterConnectivity(callback) {\n    const meth = 'adapter-iapRunAdapterConnectivity';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    try {\n      return super.iapRunAdapterConnectivity(callback);\n    } catch (error) {\n      log.error(`${origin}: ${error}`);\n      return callback(null, error);\n    }\n  }\n\n  /**\n    * @summary runs basicGet script for adapter\n    *\n    * @function iapRunAdapterBasicGet\n    * @param {number} maxCalls - how many GET endpoints to test (optional)\n    * @param {Callback} callback - callback function\n    */\n  iapRunAdapterBasicGet(maxCalls, callback) {\n    const meth = 'adapter-iapRunAdapterBasicGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    try {\n      return super.iapRunAdapterBasicGet(maxCalls, callback);\n    } catch (error) {\n      log.error(`${origin}: ${error}`);\n      return callback(null, error);\n    }\n  }\n\n  /**\n   * @summary moves entites into Mongo DB\n   *\n   * @function iapMoveAdapterEntitiesToDB\n   * @param {getCallback} callback - a callback function to return the result (Generics)\n   *                                  or the error\n   */\n  iapMoveAdapterEntitiesToDB(callback) {\n    const meth = 'adapter-iapMoveAdapterEntitiesToDB';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    try {\n      return super.iapMoveAdapterEntitiesToDB(callback);\n    } catch (err) {\n      log.error(`${origin}: ${err}`);\n      return callback(null, err);\n    }\n  }\n\n  /**\n   * @summary Deactivate adapter tasks\n   *\n   * @function iapDeactivateTasks\n   *\n   * @param {Array} tasks - List of tasks to deactivate\n   * @param {Callback} callback\n   */\n  iapDeactivateTasks(tasks, callback) {\n    const meth = 'adapter-iapDeactivateTasks';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    try {\n      return super.iapDeactivateTasks(tasks, callback);\n    } catch (err) {\n      log.error(`${origin}: ${err}`);\n      return callback(null, err);\n    }\n  }\n\n  /**\n   * @summary Activate adapter tasks that have previously been deactivated\n   *\n   * @function iapActivateTasks\n   *\n   * @param {Array} tasks - List of tasks to activate\n   * @param {Callback} callback\n   */\n  iapActivateTasks(tasks, callback) {\n    const meth = 'adapter-iapActivateTasks';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    try {\n      return super.iapActivateTasks(tasks, callback);\n    } catch (err) {\n      log.error(`${origin}: ${err}`);\n      return callback(null, err);\n    }\n  }\n\n  /* CACHE CALLS */\n  /**\n   * @summary Populate the cache for the given entities\n   *\n   * @function iapPopulateEntityCache\n   * @param {String/Array of Strings} entityType - the entity type(s) to populate\n   * @param {Callback} callback - whether the cache was updated or not for each entity type\n   *\n   * @returns status of the populate\n   */\n  iapPopulateEntityCache(entityTypes, callback) {\n    const meth = 'adapter-iapPopulateEntityCache';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    try {\n      return super.iapPopulateEntityCache(entityTypes, callback);\n    } catch (err) {\n      log.error(`${origin}: ${err}`);\n      return callback(null, err);\n    }\n  }\n\n  /**\n   * @summary Retrieves data from cache for specified entity type\n   *\n   * @function iapRetrieveEntitiesCache\n   * @param {String} entityType - entity of which to retrieve\n   * @param {Object} options - settings of which data to return and how to return it\n   * @param {Callback} callback - the data if it was retrieved\n   */\n  iapRetrieveEntitiesCache(entityType, options, callback) {\n    const meth = 'adapter-iapCheckEiapRetrieveEntitiesCachentityCached';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    try {\n      return super.iapRetrieveEntitiesCache(entityType, options, callback);\n    } catch (err) {\n      log.error(`${origin}: ${err}`);\n      return callback(null, err);\n    }\n  }\n\n  /* BROKER CALLS */\n  /**\n   * @summary Determines if this adapter supports any in a list of entities\n   *\n   * @function hasEntities\n   * @param {String} entityType - the entity type to check for\n   * @param {Array} entityList - the list of entities we are looking for\n   *\n   * @param {Callback} callback - A map where the entity is the key and the\n   *                              value is true or false\n   */\n  hasEntities(entityType, entityList, callback) {\n    const meth = 'adapter-hasEntities';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    try {\n      return super.hasEntities(entityType, entityList, callback);\n    } catch (err) {\n      log.error(`${origin}: ${err}`);\n      return callback(null, err);\n    }\n  }\n\n  /**\n   * @summary Get Appliance that match the deviceName\n   *\n   * @function getDevice\n   * @param {String} deviceName - the deviceName to find (required)\n   *\n   * @param {getCallback} callback - a callback function to return the result\n   *                                 (appliance) or the error\n   */\n  getDevice(deviceName, callback) {\n    const meth = 'adapter-getDevice';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    try {\n      return super.getDevice(deviceName, callback);\n    } catch (err) {\n      log.error(`${origin}: ${err}`);\n      return callback(null, err);\n    }\n  }\n\n  /**\n   * @summary Get Appliances that match the filter\n   *\n   * @function getDevicesFiltered\n   * @param {Object} options - the data to use to filter the appliances (optional)\n   *\n   * @param {getCallback} callback - a callback function to return the result\n   *                                 (appliances) or the error\n   */\n  getDevicesFiltered(options, callback) {\n    const meth = 'adapter-getDevicesFiltered';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    try {\n      return super.getDevicesFiltered(options, callback);\n    } catch (err) {\n      log.error(`${origin}: ${err}`);\n      return callback(null, err);\n    }\n  }\n\n  /**\n   * @summary Gets the status for the provided appliance\n   *\n   * @function isAlive\n   * @param {String} deviceName - the deviceName of the appliance. (required)\n   *\n   * @param {configCallback} callback - callback function to return the result\n   *                                    (appliance isAlive) or the error\n   */\n  isAlive(deviceName, callback) {\n    const meth = 'adapter-isAlive';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    try {\n      return super.isAlive(deviceName, callback);\n    } catch (err) {\n      log.error(`${origin}: ${err}`);\n      return callback(null, err);\n    }\n  }\n\n  /**\n   * @summary Gets a config for the provided Appliance\n   *\n   * @function getConfig\n   * @param {String} deviceName - the deviceName of the appliance. (required)\n   * @param {String} format - the desired format of the config. (optional)\n   *\n   * @param {configCallback} callback - callback function to return the result\n   *                                    (appliance config) or the error\n   */\n  getConfig(deviceName, format, callback) {\n    const meth = 'adapter-getConfig';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    try {\n      return super.getConfig(deviceName, format, callback);\n    } catch (err) {\n      log.error(`${origin}: ${err}`);\n      return callback(null, err);\n    }\n  }\n\n  /**\n   * @summary Gets the device count from the system\n   *\n   * @function iapGetDeviceCount\n   *\n   * @param {getCallback} callback - callback function to return the result\n   *                                    (count) or the error\n   */\n  iapGetDeviceCount(callback) {\n    const meth = 'adapter-iapGetDeviceCount';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    try {\n      return super.iapGetDeviceCount(callback);\n    } catch (err) {\n      log.error(`${origin}: ${err}`);\n      return callback(null, err);\n    }\n  }\n\n  /* GENERIC ADAPTER REQUEST - allows extension of adapter without new calls being added */\n  /**\n   * Makes the requested generic call\n   *\n   * @function iapExpandedGenericAdapterRequest\n   * @param {Object} metadata - metadata for the call (optional).\n   *                 Can be a stringified Object.\n   * @param {String} uriPath - the path of the api call - do not include the host, port, base path or version (optional)\n   * @param {String} restMethod - the rest method (GET, POST, PUT, PATCH, DELETE) (optional)\n   * @param {Object} pathVars - the parameters to be put within the url path (optional).\n   *                 Can be a stringified Object.\n   * @param {Object} queryData - the parameters to be put on the url (optional).\n   *                 Can be a stringified Object.\n   * @param {Object} requestBody - the body to add to the request (optional).\n   *                 Can be a stringified Object.\n   * @param {Object} addlHeaders - additional headers to be put on the call (optional).\n   *                 Can be a stringified Object.\n   * @param {getCallback} callback - a callback function to return the result (Generics)\n   *                 or the error\n   */\n  iapExpandedGenericAdapterRequest(metadata, uriPath, restMethod, pathVars, queryData, requestBody, addlHeaders, callback) {\n    const meth = 'adapter-iapExpandedGenericAdapterRequest';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    try {\n      return super.iapExpandedGenericAdapterRequest(metadata, uriPath, restMethod, pathVars, queryData, requestBody, addlHeaders, callback);\n    } catch (err) {\n      log.error(`${origin}: ${err}`);\n      return callback(null, err);\n    }\n  }\n\n  /**\n   * Makes the requested generic call\n   *\n   * @function genericAdapterRequest\n   * @param {String} uriPath - the path of the api call - do not include the host, port, base path or version (required)\n   * @param {String} restMethod - the rest method (GET, POST, PUT, PATCH, DELETE) (required)\n   * @param {Object} queryData - the parameters to be put on the url (optional).\n   *                 Can be a stringified Object.\n   * @param {Object} requestBody - the body to add to the request (optional).\n   *                 Can be a stringified Object.\n   * @param {Object} addlHeaders - additional headers to be put on the call (optional).\n   *                 Can be a stringified Object.\n   * @param {getCallback} callback - a callback function to return the result (Generics)\n   *                 or the error\n   */\n  genericAdapterRequest(uriPath, restMethod, queryData, requestBody, addlHeaders, callback) {\n    const meth = 'adapter-genericAdapterRequest';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    try {\n      return super.genericAdapterRequest(uriPath, restMethod, queryData, requestBody, addlHeaders, callback);\n    } catch (err) {\n      log.error(`${origin}: ${err}`);\n      return callback(null, err);\n    }\n  }\n\n  /**\n   * Makes the requested generic call with no base path or version\n   *\n   * @function genericAdapterRequestNoBasePath\n   * @param {String} uriPath - the path of the api call - do not include the host, port, base path or version (required)\n   * @param {String} restMethod - the rest method (GET, POST, PUT, PATCH, DELETE) (required)\n   * @param {Object} queryData - the parameters to be put on the url (optional).\n   *                 Can be a stringified Object.\n   * @param {Object} requestBody - the body to add to the request (optional).\n   *                 Can be a stringified Object.\n   * @param {Object} addlHeaders - additional headers to be put on the call (optional).\n   *                 Can be a stringified Object.\n   * @param {getCallback} callback - a callback function to return the result (Generics)\n   *                 or the error\n   */\n  genericAdapterRequestNoBasePath(uriPath, restMethod, queryData, requestBody, addlHeaders, callback) {\n    const meth = 'adapter-genericAdapterRequestNoBasePath';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    try {\n      return super.genericAdapterRequestNoBasePath(uriPath, restMethod, queryData, requestBody, addlHeaders, callback);\n    } catch (err) {\n      log.error(`${origin}: ${err}`);\n      return callback(null, err);\n    }\n  }\n\n  /* INVENTORY CALLS */\n  /**\n   * @summary run the adapter lint script to return the results.\n   *\n   * @function iapRunAdapterLint\n   * @param {Callback} callback - callback function\n   */\n  iapRunAdapterLint(callback) {\n    const meth = 'adapter-iapRunAdapterLint';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    return super.iapRunAdapterLint(callback);\n  }\n\n  /**\n   * @summary run the adapter test scripts (baseunit and unit) to return the results.\n   *    can not run integration as there can be implications with that.\n   *\n   * @function iapRunAdapterTests\n   * @param {Callback} callback - callback function\n   */\n  iapRunAdapterTests(callback) {\n    const meth = 'adapter-iapRunAdapterTests';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    return super.iapRunAdapterTests(callback);\n  }\n\n  /**\n   * @summary provide inventory information abbout the adapter\n   *\n   * @function iapGetAdapterInventory\n   * @param {Callback} callback - callback function\n   */\n  iapGetAdapterInventory(callback) {\n    const meth = 'adapter-iapGetAdapterInventory';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    return super.iapGetAdapterInventory(callback);\n  }\n\n  /**\n   * @callback healthCallback\n   * @param {Object} result - the result of the get request (contains an id and a status)\n   */\n  /**\n   * @callback getCallback\n   * @param {Object} result - the result of the get request (entity/ies)\n   * @param {String} error - any error that occurred\n   */\n  /**\n   * @callback createCallback\n   * @param {Object} item - the newly created entity\n   * @param {String} error - any error that occurred\n   */\n  /**\n   * @callback updateCallback\n   * @param {String} status - the status of the update action\n   * @param {String} error - any error that occurred\n   */\n  /**\n   * @callback deleteCallback\n   * @param {String} status - the status of the delete action\n   * @param {String} error - any error that occurred\n   */\n\n  /**\n   * @summary Get action/audit log entries.\n   *\n   * @function actionAndAuditLogEntries\n   * @param {number} startTime - Long(Signed 64 bits) value of milliseconds since EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of milliseconds since EPOCH time indicating the ending time boundary of data time range\n   * @param {number} limit - Number of rows to fetch\n   * @param {number} logLevel - 0=Debug, 1=Info, 2=Error\n   * @param {string} appliance - Appliance ID\n   * @param {string} username - Username\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  actionAndAuditLogEntries(startTime, endTime, limit, logLevel, appliance, username, callback) {\n    const meth = 'adapter-actionAndAuditLogEntries';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (limit === undefined || limit === null || limit === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['limit'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (logLevel === undefined || logLevel === null || logLevel === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['logLevel'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, limit, logLevel, appliance, username };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Action', 'actionAndAuditLogEntries', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['actionAndAuditLogEntries'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Cancel action guid key\n   *\n   * @function actionCancel\n   * @param {string} key - action key (guid)\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  actionCancel(key, callback) {\n    const meth = 'adapter-actionCancel';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (key === undefined || key === null || key === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['key'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { key };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Action', 'actionCancel', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['actionCancel'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get status of a particular action using guid key\n   *\n   * @function actionStatus\n   * @param {string} key - action key (guid)\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  actionStatus(key, callback) {\n    const meth = 'adapter-actionStatus';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (key === undefined || key === null || key === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['key'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { key };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Action', 'actionStatus', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['actionStatus'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Acknowledges alarms on appliance whose sequence IDs are provided in the request body\n   *\n   * @function alarmAcknowledgement\n   * @param {string} neId - Appliance ID\n   * @param {object} alarmAcknowledgementBody - alarmAcknowledgementBody param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  alarmAcknowledgement(neId, alarmAcknowledgementBody, callback) {\n    const meth = 'adapter-alarmAcknowledgement';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neId === undefined || neId === null || neId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (alarmAcknowledgementBody === undefined || alarmAcknowledgementBody === null || alarmAcknowledgementBody === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['alarmAcknowledgementBody'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [neId];\n    const bodyVars = alarmAcknowledgementBody;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Alarm', 'alarmAcknowledgement', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['alarmAcknowledgement'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Acknowledges alarms whose IDs are provided in the request body\n   *\n   * @function gmsAlarmAcknowledgement\n   * @param {object} gmsAlarmAcknowledgementBody - gmsAlarmAcknowledgementBody param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  gmsAlarmAcknowledgement(gmsAlarmAcknowledgementBody, callback) {\n    const meth = 'adapter-gmsAlarmAcknowledgement';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (gmsAlarmAcknowledgementBody === undefined || gmsAlarmAcknowledgementBody === null || gmsAlarmAcknowledgementBody === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['gmsAlarmAcknowledgementBody'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = gmsAlarmAcknowledgementBody;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Alarm', 'gmsAlarmAcknowledgement', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['gmsAlarmAcknowledgement'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Returns active, historical, or all alarms for appliances whose ids provided in the request body\n   *\n   * @function alarmApplianceGetPost\n   * @param {object} applianceAlarmGetPostBody - applianceAlarmGetPostBody param\n   * @param {string} view - active=current alarms, closed=historical alarms, all=both active and historical alarms\n   * @param {string} severity - Filters by alarm severity\n   * @param {boolean} orderBySeverity - order by alarm severity\n   * @param {number} maxAlarms - max Alarms\n   * @param {number} from - Long(Signed 64 bits) value of milliseconds since EPOCH time indicating the starting time boundary of data time range\n   * @param {number} to - Long(Signed 64 bits) value of milliseconds since EPOCH time indicating the ending time boundary of data time range\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  alarmApplianceGetPost(applianceAlarmGetPostBody, view = 'active', severity = 'warning', orderBySeverity, maxAlarms, from, to, callback) {\n    const meth = 'adapter-alarmApplianceGetPost';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (applianceAlarmGetPostBody === undefined || applianceAlarmGetPostBody === null || applianceAlarmGetPostBody === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['applianceAlarmGetPostBody'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { view, severity, orderBySeverity, maxAlarms, from, to };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = applianceAlarmGetPostBody;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Alarm', 'alarmApplianceGetPost', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['alarmApplianceGetPost'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Clears alarms whose sequence IDs are provided in the request body\n   *\n   * @function alarmClearance\n   * @param {string} neId - Appliance ID\n   * @param {object} alarmClearanceBody - alarmClearanceBody param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  alarmClearance(neId, alarmClearanceBody, callback) {\n    const meth = 'adapter-alarmClearance';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neId === undefined || neId === null || neId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (alarmClearanceBody === undefined || alarmClearanceBody === null || alarmClearanceBody === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['alarmClearanceBody'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [neId];\n    const bodyVars = alarmClearanceBody;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Alarm', 'alarmClearance', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['alarmClearance'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Clears alarms whose IDs are provided in the request body\n   *\n   * @function gmsAlarmClearance\n   * @param {object} gmsAlarmClearanceBody - gmsAlarmClearanceBody param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  gmsAlarmClearance(gmsAlarmClearanceBody, callback) {\n    const meth = 'adapter-gmsAlarmClearance';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (gmsAlarmClearanceBody === undefined || gmsAlarmClearanceBody === null || gmsAlarmClearanceBody === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['gmsAlarmClearanceBody'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = gmsAlarmClearanceBody;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Alarm', 'gmsAlarmClearance', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['gmsAlarmClearance'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Returns summary of active alarms for each appliance\n   *\n   * @function allApplianceAlarmSummary\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  allApplianceAlarmSummary(callback) {\n    const meth = 'adapter-allApplianceAlarmSummary';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Alarm', 'allApplianceAlarmSummary', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['allApplianceAlarmSummary'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Returns summary of active alarms for the appliance\n   *\n   * @function applianceAlarmSummary\n   * @param {string} neId - Appliance ID\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  applianceAlarmSummary(neId, callback) {\n    const meth = 'adapter-applianceAlarmSummary';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neId === undefined || neId === null || neId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [neId];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Alarm', 'applianceAlarmSummary', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['applianceAlarmSummary'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Delete all customized alarm severity\n   *\n   * @function customSeverityDelete\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  customSeverityDelete(callback) {\n    const meth = 'adapter-customSeverityDelete';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Alarm', 'customSeverityDelete', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['customSeverityDelete'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get all customized alarm severity\n   *\n   * @function customSeverityGet\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  customSeverityGet(callback) {\n    const meth = 'adapter-customSeverityGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Alarm', 'customSeverityGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['customSeverityGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Create customized alarm severities\n   *\n   * @function customSeverityPOST\n   * @param {object} requestBody - Request body is an object in which keys are alarmTypeIds and values are Severities\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  customSeverityPOST(requestBody, callback) {\n    const meth = 'adapter-customSeverityPOST';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (requestBody === undefined || requestBody === null || requestBody === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['requestBody'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = requestBody;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Alarm', 'customSeverityPOST', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['customSeverityPOST'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Update customized alarm severities\n   *\n   * @function customSeverityPut\n   * @param {object} requestBody - Request body is an object in which keys are alarmTypeIds and values are Severities\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  customSeverityPut(requestBody, callback) {\n    const meth = 'adapter-customSeverityPut';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (requestBody === undefined || requestBody === null || requestBody === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['requestBody'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = requestBody;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Alarm', 'customSeverityPut', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['customSeverityPut'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Delete alarm severity config by alarmTypeId\n   *\n   * @function singleCustomSeverityDelete\n   * @param {number} alarmTypeId - Alarm type id\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  singleCustomSeverityDelete(alarmTypeId, callback) {\n    const meth = 'adapter-singleCustomSeverityDelete';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (alarmTypeId === undefined || alarmTypeId === null || alarmTypeId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['alarmTypeId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [alarmTypeId];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Alarm', 'singleCustomSeverityDelete', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['singleCustomSeverityDelete'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get alarm severity config by alarmTypeId\n   *\n   * @function singleCustomSeverityGet\n   * @param {number} alarmTypeId - Alarm type id\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  singleCustomSeverityGet(alarmTypeId, callback) {\n    const meth = 'adapter-singleCustomSeverityGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (alarmTypeId === undefined || alarmTypeId === null || alarmTypeId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['alarmTypeId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [alarmTypeId];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Alarm', 'singleCustomSeverityGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['singleCustomSeverityGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Delete alarm email delay configuration\n   *\n   * @function alarmEmailDelayDelete\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  alarmEmailDelayDelete(callback) {\n    const meth = 'adapter-alarmEmailDelayDelete';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Alarm', 'alarmEmailDelayDelete', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['alarmEmailDelayDelete'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get alarm email delay configuration\n   *\n   * @function alarmEmailDelayGet\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  alarmEmailDelayGet(callback) {\n    const meth = 'adapter-alarmEmailDelayGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Alarm', 'alarmEmailDelayGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['alarmEmailDelayGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Create alarm email delay configuration\n   *\n   * @function alarmEmailDelayPost\n   * @param {object} requestBody - requestBody param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  alarmEmailDelayPost(requestBody, callback) {\n    const meth = 'adapter-alarmEmailDelayPost';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (requestBody === undefined || requestBody === null || requestBody === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['requestBody'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = requestBody;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Alarm', 'alarmEmailDelayPost', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['alarmEmailDelayPost'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Update alarm email delay configuration\n   *\n   * @function alarmEmailDelayPut\n   * @param {object} requestBody - requestBody param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  alarmEmailDelayPut(requestBody, callback) {\n    const meth = 'adapter-alarmEmailDelayPut';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (requestBody === undefined || requestBody === null || requestBody === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['requestBody'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = requestBody;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Alarm', 'alarmEmailDelayPut', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['alarmEmailDelayPut'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get Orchestrator and appliance alarm descriptions\n   *\n   * @function alarmDescGet\n   * @param {string} format - format=csv, ask browser to download a file of Orchestrator alarm descriptions in .csv format.\n   * @param {boolean} defaultParam - default=true, export alarm descriptions with default values, default=false, export alarm descriptions with customized values\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  alarmDescGet(format, defaultParam, callback) {\n    const meth = 'adapter-alarmDescGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { format, defaultParam };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Alarm', 'alarmDescGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['alarmDescGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Returns active, closed/historical, or all Orchestrator alarms\n   *\n   * @function alarmGms\n   * @param {string} view - active=current alarms, closed=historical alarms, all=both active and historical alarms\n   * @param {string} severity - Filters by alarm severity\n   * @param {number} from - Long(Signed 64 bits) value of milliseconds since EPOCH time indicating the starting time boundary of data time range\n   * @param {number} to - Long(Signed 64 bits) value of milliseconds since EPOCH time indicating the ending time boundary of data time range\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  alarmGms(view = 'active', severity = 'warning', from, to, callback) {\n    const meth = 'adapter-alarmGms';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { view, severity, from, to };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Alarm', 'alarmGms', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['alarmGms'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Returns alarm notification\n   *\n   * @function alarmNotification\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  alarmNotification(callback) {\n    const meth = 'adapter-alarmNotification';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Alarm', 'alarmNotification', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['alarmNotification'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Set alarm notification\n   *\n   * @function postAlarmNotification\n   * @param {object} alarmNotification - alarmNotification param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  postAlarmNotification(alarmNotification, callback) {\n    const meth = 'adapter-postAlarmNotification';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (alarmNotification === undefined || alarmNotification === null || alarmNotification === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['alarmNotification'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = alarmNotification;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Alarm', 'postAlarmNotification', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['postAlarmNotification'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Returns summary of active Orchestrator alarms as well as summary of active alarms across all appliances\n   *\n   * @function alarmSummary\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  alarmSummary(callback) {\n    const meth = 'adapter-alarmSummary';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Alarm', 'alarmSummary', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['alarmSummary'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Returns summary of active Orchestrator alarms or summary of active alarms across all appliances\n   *\n   * @function alarmSummaryType\n   * @param {string} type - Alarm Type\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  alarmSummaryType(type = 'gms', callback) {\n    const meth = 'adapter-alarmSummaryType';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (type === undefined || type === null || type === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['type'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [type];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Alarm', 'alarmSummaryType', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['alarmSummaryType'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Delete disabled alarms configuration\n   *\n   * @function deleteDisabledAlarmsConfig\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  deleteDisabledAlarmsConfig(callback) {\n    const meth = 'adapter-deleteDisabledAlarmsConfig';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Alarm', 'deleteDisabledAlarmsConfig', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['deleteDisabledAlarmsConfig'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get all disabled alarms configuration\n   *\n   * @function getAllDisabledAlarmsConfig\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getAllDisabledAlarmsConfig(callback) {\n    const meth = 'adapter-getAllDisabledAlarmsConfig';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Alarm', 'getAllDisabledAlarmsConfig', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getAllDisabledAlarmsConfig'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Update disabled alarms configuration\n   *\n   * @function updateDisabledAlarmsConfig\n   * @param {object} requestBody - 'action' can be 'ENABLE' or 'DISABLE'. All the fields are required.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  updateDisabledAlarmsConfig(requestBody, callback) {\n    const meth = 'adapter-updateDisabledAlarmsConfig';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (requestBody === undefined || requestBody === null || requestBody === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['requestBody'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = requestBody;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Alarm', 'updateDisabledAlarmsConfig', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['updateDisabledAlarmsConfig'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Returns information about appliance(s) managed by Orchestrator\n   *\n   * @function applianceGET\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  applianceGET(callback) {\n    const meth = 'adapter-applianceGET';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Appliance', 'applianceGET', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['applianceGET'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Gets Admin Distance configurations\n   *\n   * @function adminDistanceConfig\n   * @param {string} neId - Internal Id of the appliance from which you want to retrieve config information, usually look like '0.NE'.\n   * @param {boolean} cached - Get data from cache (true) or from appliance (false).\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  adminDistanceConfig(neId, cached, callback) {\n    const meth = 'adapter-adminDistanceConfig';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neId === undefined || neId === null || neId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (cached === undefined || cached === null || cached === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['cached'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [neId, cached];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Appliance', 'adminDistanceConfig', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['adminDistanceConfig'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get the all approved appliances\n   *\n   * @function approvedAppliance\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  approvedAppliance(callback) {\n    const meth = 'adapter-approvedAppliance';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Appliance', 'approvedAppliance', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['approvedAppliance'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Backup appliance configuration to Orchestrator database\n   *\n   * @function backupPost\n   * @param {object} operation - List of appliance primary keys and comments.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  backupPost(operation, callback) {\n    const meth = 'adapter-backupPost';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = operation;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Appliance', 'backupPost', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['backupPost'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Delete one specified backup record from the database table.\n   *\n   * @function backupDelete\n   * @param {number} backupFilePk - Primary key of the backup record.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  backupDelete(backupFilePk, callback) {\n    const meth = 'adapter-backupDelete';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (backupFilePk === undefined || backupFilePk === null || backupFilePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['backupFilePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [backupFilePk];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Appliance', 'backupDelete', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['backupDelete'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get backup history.\n   *\n   * @function backupGet\n   * @param {string} neId - Primary key of the appliance\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  backupGet(neId, callback) {\n    const meth = 'adapter-backupGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neId === undefined || neId === null || neId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [neId];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Appliance', 'backupGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['backupGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Change one or more appliances' group\n   *\n   * @function applianceChgGr\n   * @param {string} groupPk - group primary key\n   * @param {object} appliancePrimaryKeys - An array of appliance primary keys\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  applianceChgGr(groupPk, appliancePrimaryKeys, callback) {\n    const meth = 'adapter-applianceChgGr';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (groupPk === undefined || groupPk === null || groupPk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['groupPk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (appliancePrimaryKeys === undefined || appliancePrimaryKeys === null || appliancePrimaryKeys === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['appliancePrimaryKeys'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [groupPk];\n    const bodyVars = appliancePrimaryKeys;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Appliance', 'applianceChgGr', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['applianceChgGr'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Change a user's password on appliance.\n   *\n   * @function changeAppliancePassword\n   * @param {string} nePk - The nepk of the appliance.\n   * @param {string} username - The username you want to change the password for\n   * @param {object} password - An object with the password you want to apply\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  changeAppliancePassword(nePk, username, password, callback) {\n    const meth = 'adapter-changeAppliancePassword';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (username === undefined || username === null || username === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['username'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (password === undefined || password === null || password === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['password'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [nePk, username];\n    const bodyVars = password;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Appliance', 'changeAppliancePassword', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['changeAppliancePassword'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Delete for rediscovery.\n   *\n   * @function deleteForRediscovery\n   * @param {string} nePk - nePk.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  deleteForRediscovery(nePk, callback) {\n    const meth = 'adapter-deleteForRediscovery';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [nePk];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Appliance', 'deleteForRediscovery', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['deleteForRediscovery'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get the all denied appliances\n   *\n   * @function deniedAppliance\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  deniedAppliance(callback) {\n    const meth = 'adapter-deniedAppliance';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Appliance', 'deniedAppliance', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['deniedAppliance'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Returns the all discovered appliances\n   *\n   * @function getAllDiscoveredAppliances\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getAllDiscoveredAppliances(callback) {\n    const meth = 'adapter-getAllDiscoveredAppliances';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Appliance', 'getAllDiscoveredAppliances', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getAllDiscoveredAppliances'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Add discovered appliances to Orchestrator\n   *\n   * @function addDiscoveredApplianceToOrchestrator\n   * @param {string} key - Primary key of discovered appliance.\n   * @param {object} id - group ID\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  addDiscoveredApplianceToOrchestrator(key, id, callback) {\n    const meth = 'adapter-addDiscoveredApplianceToOrchestrator';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (key === undefined || key === null || key === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['key'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (id === undefined || id === null || id === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['id'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [key];\n    const bodyVars = id;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Appliance', 'addDiscoveredApplianceToOrchestrator', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['addDiscoveredApplianceToOrchestrator'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Add and approve discovered appliances\n   *\n   * @function approveDiscoveredAppliances\n   * @param {string} key - Primary key of discovered appliance.\n   * @param {object} id - group ID\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  approveDiscoveredAppliances(key, id, callback) {\n    const meth = 'adapter-approveDiscoveredAppliances';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (key === undefined || key === null || key === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['key'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (id === undefined || id === null || id === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['id'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [key];\n    const bodyVars = id;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Appliance', 'approveDiscoveredAppliances', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['approveDiscoveredAppliances'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Deny discovered appliances.\n   *\n   * @function denyDiscoveredAppliances\n   * @param {string} id - Primary key of the discovered appliance.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  denyDiscoveredAppliances(id, callback) {\n    const meth = 'adapter-denyDiscoveredAppliances';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (id === undefined || id === null || id === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['id'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [id];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Appliance', 'denyDiscoveredAppliances', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['denyDiscoveredAppliances'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Trigger discovered appliances update\n   *\n   * @function updateDiscoveredAppliances\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  updateDiscoveredAppliances(callback) {\n    const meth = 'adapter-updateDiscoveredAppliances';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Appliance', 'updateDiscoveredAppliances', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['updateDiscoveredAppliances'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Gets DNS Cache configurations\n   *\n   * @function dnsCacheConfig\n   * @param {string} neId - neId is the device key assigned by Orchestrator, usually look like '0.NE'.\n   * @param {boolean} cached - Get data from cache (true) or from appliance (false).\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  dnsCacheConfig(neId, cached, callback) {\n    const meth = 'adapter-dnsCacheConfig';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neId === undefined || neId === null || neId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (cached === undefined || cached === null || cached === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['cached'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [neId, cached];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Appliance', 'dnsCacheConfig', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['dnsCacheConfig'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Delete the extra information of an appliance\n   *\n   * @function deleteApplianceExtraInfo\n   * @param {string} nePk - The nePk of the appliance\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  deleteApplianceExtraInfo(nePk, callback) {\n    const meth = 'adapter-deleteApplianceExtraInfo';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [nePk];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Appliance', 'deleteApplianceExtraInfo', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['deleteApplianceExtraInfo'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get the extra information of an appliance\n   *\n   * @function getApplianceExtraInfo\n   * @param {string} nePk - The nePk of the appliance\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getApplianceExtraInfo(nePk, callback) {\n    const meth = 'adapter-getApplianceExtraInfo';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [nePk];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Appliance', 'getApplianceExtraInfo', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getApplianceExtraInfo'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Saves the extra information for the appliance\n   *\n   * @function saveApplianceExtraInfo\n   * @param {object} applianceExtraInfo - applianceExtraInfo param\n   * @param {string} nePk - The nePk of the appliance\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  saveApplianceExtraInfo(applianceExtraInfo, nePk, callback) {\n    const meth = 'adapter-saveApplianceExtraInfo';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (applianceExtraInfo === undefined || applianceExtraInfo === null || applianceExtraInfo === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['applianceExtraInfo'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [nePk];\n    const bodyVars = applianceExtraInfo;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Appliance', 'saveApplianceExtraInfo', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['saveApplianceExtraInfo'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Lists the Bridge Interfaces State and pass through Tx Interface\n   *\n   * @function bridgeInterfaceState\n   * @param {string} neId - neId is the device key assigned by Orchestrator, usually look like '0.NE'.\n   * @param {boolean} cached - Get data from cache (true) or from appliance (false).\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  bridgeInterfaceState(neId, cached, callback) {\n    const meth = 'adapter-bridgeInterfaceState';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neId === undefined || neId === null || neId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (cached === undefined || cached === null || cached === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['cached'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [neId, cached];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Appliance', 'bridgeInterfaceState', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['bridgeInterfaceState'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary To verify or change a Network Role (mesh / hub / spoke) for appliances\n   *\n   * @function networkRoleAndSiteGet\n   * @param {string} neId - neId is the device key assigned by Orchestrator, usually look like '0.NE'.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  networkRoleAndSiteGet(neId, callback) {\n    const meth = 'adapter-networkRoleAndSiteGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neId === undefined || neId === null || neId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [neId];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Appliance', 'networkRoleAndSiteGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['networkRoleAndSiteGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary To verify or change a Network Role (mesh / hub / spoke) for appliances and to assign them to a site\n   *\n   * @function networkRoleAndSitePost\n   * @param {string} neId - neId is the device key assigned by Orchestrator, usually look like '0.NE'.\n   * @param {object} postNetworkRulesAndSites - The data to post to this API\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  networkRoleAndSitePost(neId, postNetworkRulesAndSites, callback) {\n    const meth = 'adapter-networkRoleAndSitePost';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neId === undefined || neId === null || neId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (postNetworkRulesAndSites === undefined || postNetworkRulesAndSites === null || postNetworkRulesAndSites === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['postNetworkRulesAndSites'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [neId];\n    const bodyVars = postNetworkRulesAndSites;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Appliance', 'networkRoleAndSitePost', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['networkRoleAndSitePost'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get all peer priority data on the appliance\n   *\n   * @function peerPriorityGet\n   * @param {string} neId - Internal Id of the appliance from which you want to retrieve status information\n   * @param {boolean} cached - Get data from cache (true) or from appliance (false)\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  peerPriorityGet(neId, cached, callback) {\n    const meth = 'adapter-peerPriorityGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neId === undefined || neId === null || neId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (cached === undefined || cached === null || cached === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['cached'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [neId, cached];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Appliance', 'peerPriorityGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['peerPriorityGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Lists appliances ( appliance primary keys) that are queued on the Orchestrator for deletion.\n   *\n   * @function checkAppliancesQueuedForDeletion\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  checkAppliancesQueuedForDeletion(callback) {\n    const meth = 'adapter-checkAppliancesQueuedForDeletion';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Appliance', 'checkAppliancesQueuedForDeletion', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['checkAppliancesQueuedForDeletion'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary To communicate with appliance GET APIs directly.\n   *\n   * @function applianceGetAPI\n   * @param {string} nePk - The nepk of the appliance.\n   * @param {string} url - The API url part behind 'rest/json/' of the appliance.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  applianceGetAPI(nePk, url, callback) {\n    const meth = 'adapter-applianceGetAPI';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (url === undefined || url === null || url === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['url'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [nePk, url];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Appliance', 'applianceGetAPI', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['applianceGetAPI'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary To communicate with appliance POST APIs directly.\n   *\n   * @function appliancePostAPI\n   * @param {string} nePk - The nepk of the appliance.\n   * @param {string} url - The API url part behind 'rest/json/' of the appliance.\n   * @param {object} data - The data to post to the API of the appliance.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  appliancePostAPI(nePk, url, data, callback) {\n    const meth = 'adapter-appliancePostAPI';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (url === undefined || url === null || url === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['url'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (data === undefined || data === null || data === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['data'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [nePk, url];\n    const bodyVars = data;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Appliance', 'appliancePostAPI', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['appliancePostAPI'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Restore the appliance from the specified back.\n   *\n   * @function applianceRestore\n   * @param {object} operation - Backup file\n   * @param {string} nePk - Appliance primary key\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  applianceRestore(operation, nePk, callback) {\n    const meth = 'adapter-applianceRestore';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (operation === undefined || operation === null || operation === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['operation'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [nePk];\n    const bodyVars = operation;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Appliance', 'applianceRestore', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['applianceRestore'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Save the configuration changes in memory to a file for an array of appliances in Orchestrator\n   *\n   * @function saveChanges\n   * @param {object} saveChangesPostBody - JSON object containing an array of neIds\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  saveChanges(saveChangesPostBody, callback) {\n    const meth = 'adapter-saveChanges';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (saveChangesPostBody === undefined || saveChangesPostBody === null || saveChangesPostBody === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['saveChangesPostBody'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = saveChangesPostBody;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Appliance', 'saveChanges', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['saveChanges'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Save the configuration changes in memory to a file for an appliances in Orchestrator\n   *\n   * @function postApplianceSaveChangesNePk\n   * @param {string} nePk - The neId.\n   * @param {object} saveChangesPostBody - This JSON object should contain nothing.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  postApplianceSaveChangesNePk(nePk, saveChangesPostBody, callback) {\n    const meth = 'adapter-postApplianceSaveChangesNePk';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (saveChangesPostBody === undefined || saveChangesPostBody === null || saveChangesPostBody === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['saveChangesPostBody'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [nePk];\n    const bodyVars = saveChangesPostBody;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Appliance', 'postApplianceSaveChangesNePk', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['postApplianceSaveChangesNePk'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary To get stats config which will be synchronized to appliances.\n   *\n   * @function statsConfigGet\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  statsConfigGet(callback) {\n    const meth = 'adapter-statsConfigGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Appliance', 'statsConfigGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['statsConfigGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary To modify stats config which will be synchronized to appliances.\n   *\n   * @function statsConfigPost\n   * @param {object} statsConfigPostData - The config data to set for this API.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  statsConfigPost(statsConfigPostData, callback) {\n    const meth = 'adapter-statsConfigPost';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (statsConfigPostData === undefined || statsConfigPostData === null || statsConfigPostData === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['statsConfigPostData'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = statsConfigPostData;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Appliance', 'statsConfigPost', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['statsConfigPost'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary To get default stats config which will be synchronized to appliances.\n   *\n   * @function statsConfigDefaultGet\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  statsConfigDefaultGet(callback) {\n    const meth = 'adapter-statsConfigDefaultGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Appliance', 'statsConfigDefaultGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['statsConfigDefaultGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get wan next hop health config on the appliance\n   *\n   * @function wanNextHopHealthGet\n   * @param {string} neId - Internal Id of the appliance from which you want to retrieve config information\n   * @param {boolean} cached - Get data from cache (true) or from appliance (false)\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  wanNextHopHealthGet(neId, cached, callback) {\n    const meth = 'adapter-wanNextHopHealthGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neId === undefined || neId === null || neId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (cached === undefined || cached === null || cached === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['cached'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [neId, cached];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Appliance', 'wanNextHopHealthGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['wanNextHopHealthGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Delete an appliance from network.\n   *\n   * @function applianceDel\n   * @param {string} nePk - nePk.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  applianceDel(nePk, callback) {\n    const meth = 'adapter-applianceDel';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [nePk];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Appliance', 'applianceDel', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['applianceDel'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get appliance information\n   *\n   * @function applianceGetOne\n   * @param {string} nePk - the primary key of appliance\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  applianceGetOne(nePk, callback) {\n    const meth = 'adapter-applianceGetOne';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [nePk];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Appliance', 'applianceGetOne', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['applianceGetOne'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Modify an appliance's IP address, username, password, networkRole, and webProtocol.\n   *\n   * @function applianceChg\n   * @param {string} nePk - Appliance primary key\n   * @param {object} applianceInfo - Appliance information\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  applianceChg(nePk, applianceInfo, callback) {\n    const meth = 'adapter-applianceChg';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (applianceInfo === undefined || applianceInfo === null || applianceInfo === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['applianceInfo'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [nePk];\n    const bodyVars = applianceInfo;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Appliance', 'applianceChg', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['applianceChg'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Synchronize a list of appliances.\n   *\n   * @function resyncAppliance\n   * @param {object} applianceKeys - JSON object containing list of appliance keys\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  resyncAppliance(applianceKeys, callback) {\n    const meth = 'adapter-resyncAppliance';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (applianceKeys === undefined || applianceKeys === null || applianceKeys === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['applianceKeys'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = applianceKeys;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('ApplianceResync', 'resyncAppliance', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['resyncAppliance'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Returns VXOA software versions information\n   *\n   * @function appliancesSoftwareVersions\n   * @param {string} nePK - nePK is the device key assigned by Orchestrator, usually look like '0.NE'.\n   * @param {boolean} cached - Get data from cache (true) or from appliance (false).\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  appliancesSoftwareVersions(nePK, cached, callback) {\n    const meth = 'adapter-appliancesSoftwareVersions';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (nePK === undefined || nePK === null || nePK === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePK'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (cached === undefined || cached === null || cached === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['cached'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [nePK, cached];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('AppliancesSoftwareVersions', 'appliancesSoftwareVersions', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['appliancesSoftwareVersions'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get all built-in and user-defined applications\n   *\n   * @function applicationGet\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  applicationGet(callback) {\n    const meth = 'adapter-applicationGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Application', 'applicationGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['applicationGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get all built-in applications from all appliance\n   *\n   * @function builtin\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  builtin(callback) {\n    const meth = 'adapter-builtin';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Application', 'builtin', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['builtin'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get all userDefined applications from all appliance\n   *\n   * @function userDefined\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  userDefined(callback) {\n    const meth = 'adapter-userDefined';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Application', 'userDefined', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['userDefined'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get all user-defined application group on appliance\n   *\n   * @function userDefinedConfig\n   * @param {string} neId - Internal Id of the appliance from which you want to retrieve status information\n   * @param {boolean} cached - Get data from cache (true) or from appliance (false).\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  userDefinedConfig(neId, cached, callback) {\n    const meth = 'adapter-userDefinedConfig';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neId === undefined || neId === null || neId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (cached === undefined || cached === null || cached === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['cached'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [neId, cached];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Application', 'userDefinedConfig', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['userDefinedConfig'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary return user defined application groups\n   *\n   * @function appTagsGet\n   * @param {string} resourceKey - resourceKey param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  appTagsGet(resourceKey, callback) {\n    const meth = 'adapter-appTagsGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (resourceKey === undefined || resourceKey === null || resourceKey === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['resourceKey'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { resourceKey };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('ApplicationDefinition', 'appTagsGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['appTagsGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Create user defined application groups\n   *\n   * @function appTagsPost\n   * @param {object} appTagsBody - appTagsBody param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  appTagsPost(appTagsBody, callback) {\n    const meth = 'adapter-appTagsPost';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (appTagsBody === undefined || appTagsBody === null || appTagsBody === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['appTagsBody'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = appTagsBody;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('ApplicationDefinition', 'appTagsPost', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['appTagsPost'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Search application groups based on wildcard and limit\n   *\n   * @function appGroupSearchPost\n   * @param {object} searchWildcard - searchWildcard param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  appGroupSearchPost(searchWildcard, callback) {\n    const meth = 'adapter-appGroupSearchPost';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (searchWildcard === undefined || searchWildcard === null || searchWildcard === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['searchWildcard'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = searchWildcard;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('ApplicationDefinition', 'appGroupSearchPost', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['appGroupSearchPost'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Change mode to application groups and user defined applications\n   *\n   * @function appTagsModePost\n   * @param {string} mode - either 'old' or 'new'\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  appTagsModePost(mode, callback) {\n    const meth = 'adapter-appTagsModePost';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (mode === undefined || mode === null || mode === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['mode'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('ApplicationDefinition', 'appTagsModePost', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['appTagsModePost'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Search applications based on wildcard and limit\n   *\n   * @function appSearchPost\n   * @param {object} searchWildcard - searchWildcard param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  appSearchPost(searchWildcard, callback) {\n    const meth = 'adapter-appSearchPost';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (searchWildcard === undefined || searchWildcard === null || searchWildcard === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['searchWildcard'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = searchWildcard;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('ApplicationDefinition', 'appSearchPost', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['appSearchPost'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary return user defined data for Compound classification\n   *\n   * @function compoundGet\n   * @param {string} resourceKey - resourceKey param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  compoundGet(resourceKey, callback) {\n    const meth = 'adapter-compoundGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (resourceKey === undefined || resourceKey === null || resourceKey === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['resourceKey'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { resourceKey };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('ApplicationDefinition', 'compoundGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['compoundGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Change the order of user defined application related to Compound data\n   *\n   * @function compoundReorderPost\n   * @param {array} compoundIdsConfig - an array of comma separated ids. Please excludes ids greater than 50000. Please check the get api to find those ids.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  compoundReorderPost(compoundIdsConfig, callback) {\n    const meth = 'adapter-compoundReorderPost';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (compoundIdsConfig === undefined || compoundIdsConfig === null || compoundIdsConfig === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['compoundIdsConfig'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = { compoundIdsConfig };\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('ApplicationDefinition', 'compoundReorderPost', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['compoundReorderPost'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Delete user defined application related to Compound data\n   *\n   * @function compoundDelete\n   * @param {number} id - id\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  compoundDelete(id, callback) {\n    const meth = 'adapter-compoundDelete';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (id === undefined || id === null || id === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['id'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('ApplicationDefinition', 'compoundDelete', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['compoundDelete'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Create/modify user defined application related to Compound data\n   *\n   * @function compoundPost\n   * @param {number} id - id\n   * @param {object} compoundConfig - compoundConfig param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  compoundPost(id, compoundConfig, callback) {\n    const meth = 'adapter-compoundPost';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (id === undefined || id === null || id === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['id'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (compoundConfig === undefined || compoundConfig === null || compoundConfig === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['compoundConfig'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = compoundConfig;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('ApplicationDefinition', 'compoundPost', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['compoundPost'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary return user defined data for Domain Name classification\n   *\n   * @function dnsGet\n   * @param {string} resourceKey - resourceKey param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  dnsGet(resourceKey, callback) {\n    const meth = 'adapter-dnsGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (resourceKey === undefined || resourceKey === null || resourceKey === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['resourceKey'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { resourceKey };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('ApplicationDefinition', 'dnsGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['dnsGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Delete user defined application related to Domain Name\n   *\n   * @function dnsDelete\n   * @param {string} domain - domain\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  dnsDelete(domain, callback) {\n    const meth = 'adapter-dnsDelete';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (domain === undefined || domain === null || domain === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['domain'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('ApplicationDefinition', 'dnsDelete', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['dnsDelete'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Create/modify user defined application related to Domain Name\n   *\n   * @function dnsPost\n   * @param {string} domain - domain\n   * @param {object} dnsConfig - dnsConfig param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  dnsPost(domain, dnsConfig, callback) {\n    const meth = 'adapter-dnsPost';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (domain === undefined || domain === null || domain === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['domain'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (dnsConfig === undefined || dnsConfig === null || dnsConfig === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['dnsConfig'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = dnsConfig;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('ApplicationDefinition', 'dnsPost', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['dnsPost'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary return user defined data for Address Map classification\n   *\n   * @function ipIntelligenceGet\n   * @param {string} resourceKey - resourceKey param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  ipIntelligenceGet(resourceKey, callback) {\n    const meth = 'adapter-ipIntelligenceGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (resourceKey === undefined || resourceKey === null || resourceKey === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['resourceKey'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { resourceKey };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('ApplicationDefinition', 'ipIntelligenceGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['ipIntelligenceGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Delete user defined application related to Address Map\n   *\n   * @function ipIntelligenceDelete\n   * @param {number} ipStart - starting ip, IPv4 address in 32-bit integer format\n   * @param {number} ipEnd - ending ip, IPv4 address in 32-bit integer format\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  ipIntelligenceDelete(ipStart, ipEnd, callback) {\n    const meth = 'adapter-ipIntelligenceDelete';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (ipStart === undefined || ipStart === null || ipStart === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['ipStart'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (ipEnd === undefined || ipEnd === null || ipEnd === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['ipEnd'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('ApplicationDefinition', 'ipIntelligenceDelete', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['ipIntelligenceDelete'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Create/modify user defined application related to Address Map\n   *\n   * @function ipIntelligencePost\n   * @param {number} ipStart - starting ip, IPv4 address in 32-bit integer format\n   * @param {number} ipEnd - ending ip, IPv4 address in 32-bit integer format\n   * @param {object} ipIntelligenceConfig - ipIntelligenceConfig param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  ipIntelligencePost(ipStart, ipEnd, ipIntelligenceConfig, callback) {\n    const meth = 'adapter-ipIntelligencePost';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (ipStart === undefined || ipStart === null || ipStart === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['ipStart'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (ipEnd === undefined || ipEnd === null || ipEnd === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['ipEnd'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (ipIntelligenceConfig === undefined || ipIntelligenceConfig === null || ipIntelligenceConfig === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['ipIntelligenceConfig'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = ipIntelligenceConfig;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('ApplicationDefinition', 'ipIntelligencePost', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['ipIntelligencePost'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary return legacy UDA configuration on each appliance\n   *\n   * @function legacyUdaGet\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  legacyUdaGet(callback) {\n    const meth = 'adapter-legacyUdaGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('ApplicationDefinition', 'legacyUdaGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['legacyUdaGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary return user defined data for Meter Flow classification\n   *\n   * @function meterFlowGet\n   * @param {string} resourceKey - resourceKey param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  meterFlowGet(resourceKey, callback) {\n    const meth = 'adapter-meterFlowGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (resourceKey === undefined || resourceKey === null || resourceKey === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['resourceKey'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { resourceKey };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('ApplicationDefinition', 'meterFlowGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['meterFlowGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Delete user defined application related to Meter Flow\n   *\n   * @function meterFlowDelete\n   * @param {string} flowType - flow type, e.g. MF\n   * @param {number} mid - id\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  meterFlowDelete(flowType, mid, callback) {\n    const meth = 'adapter-meterFlowDelete';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (flowType === undefined || flowType === null || flowType === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['flowType'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (mid === undefined || mid === null || mid === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['mid'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('ApplicationDefinition', 'meterFlowDelete', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['meterFlowDelete'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Create/modify user defined application related to Meter Flow\n   *\n   * @function meterFlowPost\n   * @param {string} flowType - flow type, e.g. MF\n   * @param {number} mid - id\n   * @param {object} meterFlowConfig - meterFlowConfig param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  meterFlowPost(flowType, mid, meterFlowConfig, callback) {\n    const meth = 'adapter-meterFlowPost';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (flowType === undefined || flowType === null || flowType === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['flowType'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (mid === undefined || mid === null || mid === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['mid'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (meterFlowConfig === undefined || meterFlowConfig === null || meterFlowConfig === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['meterFlowConfig'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = meterFlowConfig;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('ApplicationDefinition', 'meterFlowPost', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['meterFlowPost'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary return user defined data for IP/TCP/UDP classification\n   *\n   * @function portProtocolGet\n   * @param {string} resourceKey - resourceKey param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  portProtocolGet(resourceKey, callback) {\n    const meth = 'adapter-portProtocolGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (resourceKey === undefined || resourceKey === null || resourceKey === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['resourceKey'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { resourceKey };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('ApplicationDefinition', 'portProtocolGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['portProtocolGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Delete user defined application related to IP Protocol, TCP Port, UDP Port\n   *\n   * @function portProtocolDelete\n   * @param {number} port - port number\n   * @param {number} protocol - protocol number\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  portProtocolDelete(port, protocol, callback) {\n    const meth = 'adapter-portProtocolDelete';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (port === undefined || port === null || port === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['port'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (protocol === undefined || protocol === null || protocol === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['protocol'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('ApplicationDefinition', 'portProtocolDelete', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['portProtocolDelete'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Create/modify user defined application related to IP Protocol, TCP Port, UDP Port\n   *\n   * @function portProtocolPost\n   * @param {number} port - port number\n   * @param {number} protocol - protocol number\n   * @param {object} portProtocolConfig - portProtocolConfig param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  portProtocolPost(port, protocol, portProtocolConfig, callback) {\n    const meth = 'adapter-portProtocolPost';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (port === undefined || port === null || port === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['port'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (protocol === undefined || protocol === null || protocol === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['protocol'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (portProtocolConfig === undefined || portProtocolConfig === null || portProtocolConfig === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['portProtocolConfig'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = portProtocolConfig;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('ApplicationDefinition', 'portProtocolPost', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['portProtocolPost'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary return user defined data for SaaS classification\n   *\n   * @function saasGet\n   * @param {string} resourceKey - resourceKey param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  saasGet(resourceKey, callback) {\n    const meth = 'adapter-saasGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (resourceKey === undefined || resourceKey === null || resourceKey === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['resourceKey'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { resourceKey };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('ApplicationDefinition', 'saasGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['saasGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Delete user defined application related to SaaS data\n   *\n   * @function saasDelete\n   * @param {number} id - id\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  saasDelete(id, callback) {\n    const meth = 'adapter-saasDelete';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (id === undefined || id === null || id === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['id'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('ApplicationDefinition', 'saasDelete', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['saasDelete'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Create/modify user defined application related to SaaS data\n   *\n   * @function postApplicationDefinitionSaasClassificationId\n   * @param {number} id - id\n   * @param {object} saasConfig - saasConfig param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  postApplicationDefinitionSaasClassificationId(id, saasConfig, callback) {\n    const meth = 'adapter-postApplicationDefinitionSaasClassificationId';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (id === undefined || id === null || id === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['id'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (saasConfig === undefined || saasConfig === null || saasConfig === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['saasConfig'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = saasConfig;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('ApplicationDefinition', 'postApplicationDefinitionSaasClassificationId', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['postApplicationDefinitionSaasClassificationId'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get all applicationGroups on a appliance\n   *\n   * @function applicationGroups\n   * @param {string} neId - Internal Id of the appliance from which you want to retrieve status information\n   * @param {boolean} cached - Get data from cache (true) or from appliance (false).\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  applicationGroups(neId, cached, callback) {\n    const meth = 'adapter-applicationGroups';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neId === undefined || neId === null || neId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (cached === undefined || cached === null || cached === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['cached'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [neId, cached];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('ApplicationGroups', 'applicationGroups', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['applicationGroups'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Returns bandwidth stats about applications\n   *\n   * @function applicationTrends\n   * @param {number} startDate - Beginning date for stats in milliseconds\n   * @param {number} endDate - End date for stats in milliseconds\n   * @param {string} traffic - Traffic type\n   * @param {string} bound - Traffic direction\n   * @param {string} nePKList - List of appliances IDs like so: 0.NE,1.NE\n   * @param {boolean} customRangeUsed - Indicates if custom date rage is used\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  applicationTrends(startDate, endDate, traffic = 'optimized_traffic', bound = 'inbound', nePKList, customRangeUsed, callback) {\n    const meth = 'adapter-applicationTrends';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (startDate === undefined || startDate === null || startDate === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startDate'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endDate === undefined || endDate === null || endDate === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endDate'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (traffic === undefined || traffic === null || traffic === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['traffic'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (bound === undefined || bound === null || bound === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['bound'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (nePKList === undefined || nePKList === null || nePKList === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePKList'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startDate, endDate, traffic, bound, nePKList, customRangeUsed };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('ApplicationTrends', 'applicationTrends', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['applicationTrends'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get the authentication order and authorization information\n   *\n   * @function auth\n   * @param {string} neId - neId is the device key assigned by Orchestrator, usually look like '0.NE'.\n   * @param {boolean} cached - Get data from cache (true) or from appliance (false).\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  auth(neId, cached, callback) {\n    const meth = 'adapter-auth';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neId === undefined || neId === null || neId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (cached === undefined || cached === null || cached === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['cached'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { cached };\n    const queryParams = {};\n    const pathVars = [neId];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('AuthRadiusTacacs', 'auth', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['auth'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Use this api to login to Orchestrator using FORM post. Commonly used to embed orchestrator UI or proxy orchestrator login via a web proxy.\n   *\n   * @function authentication\n   * @param {string} user - User id. Sent as a query param when login form is submitted\n   * @param {string} password - Password. Sent as a query param when login form is submitted\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  authentication(user, password, callback) {\n    const meth = 'adapter-authentication';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (user === undefined || user === null || user === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['user'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (password === undefined || password === null || password === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['password'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Authentication', 'authentication', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['authentication'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get the current authentication status of the HTTP session\n   *\n   * @function getAuthenticationLoginStatus\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getAuthenticationLoginStatus(callback) {\n    const meth = 'adapter-getAuthenticationLoginStatus';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Authentication', 'getAuthenticationLoginStatus', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getAuthenticationLoginStatus'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Send a 2-factor code to user's mailbox for 2-factor authentication\n   *\n   * @function postAuthenticationLoginToken\n   * @param {object} requestLoginToken - Json object containing user id and password, sent as user authentication information when user want to receive 2-factor code\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  postAuthenticationLoginToken(requestLoginToken, callback) {\n    const meth = 'adapter-postAuthenticationLoginToken';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (requestLoginToken === undefined || requestLoginToken === null || requestLoginToken === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['requestLoginToken'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = requestLoginToken;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Authentication', 'postAuthenticationLoginToken', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['postAuthenticationLoginToken'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Logout of current HTTP session\n   *\n   * @function getAuthenticationLogout\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getAuthenticationLogout(callback) {\n    const meth = 'adapter-getAuthenticationLogout';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Authentication', 'getAuthenticationLogout', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getAuthenticationLogout'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Authenticate user's password only, but doesn't mark user's status as login\n   *\n   * @function postAuthenticationPasswordValidation\n   * @param {object} loginToken - Json object containing user id and password, sent as query param when user want to validate user's password\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  postAuthenticationPasswordValidation(loginToken, callback) {\n    const meth = 'adapter-postAuthenticationPasswordValidation';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (loginToken === undefined || loginToken === null || loginToken === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['loginToken'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = loginToken;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Authentication', 'postAuthenticationPasswordValidation', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['postAuthenticationPasswordValidation'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Check the two factor authentication methods the user requires to login\n   *\n   * @function userAuthType\n   * @param {object} loginToken - Json object containing user id and password\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  userAuthType(loginToken, callback) {\n    const meth = 'adapter-userAuthType';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (loginToken === undefined || loginToken === null || loginToken === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['loginToken'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = loginToken;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Authentication', 'userAuthType', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['userAuthType'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Check the two factor authentication methods the user has active using a reset password token\n   *\n   * @function userAuthTypeToken\n   * @param {object} resetPasswordToken - Json object containing the reset password token\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  userAuthTypeToken(resetPasswordToken, callback) {\n    const meth = 'adapter-userAuthTypeToken';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (resetPasswordToken === undefined || resetPasswordToken === null || resetPasswordToken === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['resetPasswordToken'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = resetPasswordToken;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Authentication', 'userAuthTypeToken', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['userAuthTypeToken'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Returns Orchestrator avc Mode\n   *\n   * @function avcMode\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  avcMode(callback) {\n    const meth = 'adapter-avcMode';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('AvcMode', 'avcMode', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['avcMode'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Lists the banner messages on each appliance\n   *\n   * @function bannerInfo\n   * @param {string} neId - neId is the device key assigned by Orchestrator, usually look like '0.NE'.\n   * @param {boolean} cached - Get data from cache (true) or from appliance (false).\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  bannerInfo(neId, cached, callback) {\n    const meth = 'adapter-bannerInfo';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neId === undefined || neId === null || neId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (cached === undefined || cached === null || cached === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['cached'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [neId, cached];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Banners', 'bannerInfo', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['bannerInfo'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get specific neighbor configuration data.\n   *\n   * @function getNeighbor\n   * @param {string} neId - neId of the appliance\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getNeighbor(neId, callback) {\n    const meth = 'adapter-getNeighbor';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neId === undefined || neId === null || neId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [neId];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Bgp', 'getNeighbor', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getNeighbor'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get BGP system configuration data.\n   *\n   * @function getBGPSystemConfig\n   * @param {string} neId - neId of the appliance\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getBGPSystemConfig(neId, callback) {\n    const meth = 'adapter-getBGPSystemConfig';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neId === undefined || neId === null || neId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [neId];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Bgp', 'getBGPSystemConfig', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getBGPSystemConfig'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get specific appliance bgp state details.\n   *\n   * @function bGPState\n   * @param {string} neId - neId of the appliance\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  bGPState(neId, callback) {\n    const meth = 'adapter-bGPState';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neId === undefined || neId === null || neId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [neId];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Bgp', 'bGPState', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['bGPState'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Delete all text brand customization configurations\n   *\n   * @function textCustomizationConfigDelete\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  textCustomizationConfigDelete(callback) {\n    const meth = 'adapter-textCustomizationConfigDelete';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('BrandCustomization', 'textCustomizationConfigDelete', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['textCustomizationConfigDelete'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get text brand customization configurations\n   *\n   * @function textCustomizationConfigGet\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  textCustomizationConfigGet(callback) {\n    const meth = 'adapter-textCustomizationConfigGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('BrandCustomization', 'textCustomizationConfigGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['textCustomizationConfigGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Create new text brand customization configurations\n   *\n   * @function textCustomizationConfigPost\n   * @param {object} requestBody - POST body is an object of text customization configuration object\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  textCustomizationConfigPost(requestBody, callback) {\n    const meth = 'adapter-textCustomizationConfigPost';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (requestBody === undefined || requestBody === null || requestBody === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['requestBody'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = requestBody;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('BrandCustomization', 'textCustomizationConfigPost', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['textCustomizationConfigPost'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Update text brand customization configurations\n   *\n   * @function textCustomizationConfigPut\n   * @param {object} requestBody - PUT body is an object of text customization configuration object\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  textCustomizationConfigPut(requestBody, callback) {\n    const meth = 'adapter-textCustomizationConfigPut';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (requestBody === undefined || requestBody === null || requestBody === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['requestBody'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = requestBody;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('BrandCustomization', 'textCustomizationConfigPut', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['textCustomizationConfigPut'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Return file names for all the uploaded images\n   *\n   * @function fileNameGet\n   * @param {boolean} metaData - Sub-resource type\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  fileNameGet(metaData, callback) {\n    const meth = 'adapter-fileNameGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (metaData === undefined || metaData === null || metaData === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['metaData'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { metaData };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('BrandCustomization', 'fileNameGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['fileNameGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Delete image for given type of brand customization and restore default\n   *\n   * @function imageDelete\n   * @param {string} type - The type of customization. e.g. 'backgroundImage'.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  imageDelete(type, callback) {\n    const meth = 'adapter-imageDelete';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (type === undefined || type === null || type === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['type'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [type];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('BrandCustomization', 'imageDelete', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['imageDelete'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Upload image for given type of brand customization\n   *\n   * @function imagePost\n   * @param {string} type - The type of customization. e.g. 'backgroundImage'.\n   * @param {string} qqfile - File name\n   * @param {file} qqfileFormData - Image file\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  imagePost(type, qqfile, qqfileFormData, callback) {\n    const meth = 'adapter-imagePost';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (type === undefined || type === null || type === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['type'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (qqfile === undefined || qqfile === null || qqfile === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['qqfile'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (qqfileFormData === undefined || qqfileFormData === null || qqfileFormData === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['qqfileFormData'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { qqfile };\n    const queryParams = {};\n    const pathVars = [type];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('BrandCustomization', 'imagePost', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['imagePost'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Update image for given type of brand customization\n   *\n   * @function putBrandCustomizationImageType\n   * @param {string} type - The type of customization. e.g. 'backgroundImage'.\n   * @param {string} qqfile - File name\n   * @param {file} qqfileFormData - Image file\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  putBrandCustomizationImageType(type, qqfile, qqfileFormData, callback) {\n    const meth = 'adapter-putBrandCustomizationImageType';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (type === undefined || type === null || type === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['type'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (qqfile === undefined || qqfile === null || qqfile === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['qqfile'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (qqfileFormData === undefined || qqfileFormData === null || qqfileFormData === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['qqfileFormData'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { qqfile };\n    const queryParams = {};\n    const pathVars = [type];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('BrandCustomization', 'putBrandCustomizationImageType', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['putBrandCustomizationImageType'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Broadcasts CLI commands to all the selected appliances\n   *\n   * @function broadcastCliPost\n   * @param {object} operation - The data to post to this API\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  broadcastCliPost(operation, callback) {\n    const meth = 'adapter-broadcastCliPost';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (operation === undefined || operation === null || operation === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['operation'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = operation;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('BroadcastCli', 'broadcastCliPost', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['broadcastCliPost'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Toggles bypass mode - only effective on NX appliances\n   *\n   * @function bypassPost\n   * @param {object} operation - The data to post to this API\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  bypassPost(operation, callback) {\n    const meth = 'adapter-bypassPost';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (operation === undefined || operation === null || operation === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['operation'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = operation;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Bypass', 'bypassPost', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['bypassPost'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get bypass mode settings of one appliance in Orchestrator.\n   *\n   * @function bypassGet\n   * @param {string} nePk - The neId of the appliance in Orchestrator.\n   * @param {boolean} cached - Whether to get the info from Orchestrator database.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  bypassGet(nePk, cached, callback) {\n    const meth = 'adapter-bypassGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (cached === undefined || cached === null || cached === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['cached'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [nePk, cached];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Bypass', 'bypassGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['bypassGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get all built in applications\n   *\n   * @function builtinAppGet\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  builtinAppGet(callback) {\n    const meth = 'adapter-builtinAppGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Cache', 'builtinAppGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['builtinAppGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get all appliances' interface endpoints' information including IP addresses.\n   *\n   * @function interfaceGet\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  interfaceGet(callback) {\n    const meth = 'adapter-interfaceGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Cache', 'interfaceGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['interfaceGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Gets the user applications\n   *\n   * @function userAppGet\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  userAppGet(callback) {\n    const meth = 'adapter-userAppGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Cache', 'userAppGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['userAppGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get SaaS Optimization configuration information for appliance\n   *\n   * @function cloudAppsConfig\n   * @param {string} neId - Unique key assigned by Orchestrator to each appliance, for eg: '0.NE'\n   * @param {boolean} cached - Get data from cache (true) or from appliance (false)\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  cloudAppsConfig(neId, cached, callback) {\n    const meth = 'adapter-cloudAppsConfig';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neId === undefined || neId === null || neId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (cached === undefined || cached === null || cached === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['cached'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [neId, cached];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('CloudApplications', 'cloudAppsConfig', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['cloudAppsConfig'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get reachability/RTT values for SaaS App subnets enabled for advertisement\n   *\n   * @function cloudAppsMonitor\n   * @param {string} neId - Unique key assigned by Orchestrator to each appliance, for eg: '0.NE'\n   * @param {boolean} cached - Get data from cache (true) or from appliance (false)\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  cloudAppsMonitor(neId, cached, callback) {\n    const meth = 'adapter-cloudAppsMonitor';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neId === undefined || neId === null || neId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (cached === undefined || cached === null || cached === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['cached'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [neId, cached];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('CloudApplications', 'cloudAppsMonitor', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['cloudAppsMonitor'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get disks information.\n   *\n   * @function disks\n   * @param {string} neId - neId is the device key assigned by Orchestrator, usually look like '0.NE'.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  disks(neId, callback) {\n    const meth = 'adapter-disks';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neId === undefined || neId === null || neId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [neId];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('ConfigReportDisk', 'disks', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['disks'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Gets Orchestrator database partition details\n   *\n   * @function dbPartition\n   * @param {string} table - Name of the table\n   * @param {string} partition - Name of the partition\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  dbPartition(table, partition, callback) {\n    const meth = 'adapter-dbPartition';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { table, partition };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('DbPartition', 'dbPartition', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['dbPartition'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Deletes the table's partition\n   *\n   * @function deletePartition\n   * @param {string} table - Name of the table\n   * @param {string} partition - Name of the partition\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  deletePartition(table, partition, callback) {\n    const meth = 'adapter-deletePartition';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (table === undefined || table === null || table === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['table'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (partition === undefined || partition === null || partition === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['partition'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [table, partition];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('DbPartition', 'deletePartition', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['deletePartition'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Cancel download the file\n   *\n   * @function cancel\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  cancel(callback) {\n    const meth = 'adapter-cancel';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('DebugFiles', 'cancel', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['cancel'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Delete the Orchestrator debug file\n   *\n   * @function deleteGMSDebugFile\n   * @param {object} deleteGMSDebugFile - The name of the orchestrator debug file\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  deleteGMSDebugFile(deleteGMSDebugFile, callback) {\n    const meth = 'adapter-deleteGMSDebugFile';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (deleteGMSDebugFile === undefined || deleteGMSDebugFile === null || deleteGMSDebugFile === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['deleteGMSDebugFile'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = deleteGMSDebugFile;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('DebugFiles', 'deleteGMSDebugFile', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['deleteGMSDebugFile'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Delete the debug file on the appliance\n   *\n   * @function deleteNeFile\n   * @param {string} nePk - nePk is the device key assigned by Orchestrator, usually look like '0.NE'.\n   * @param {object} deleteInfoClass - The info of the deleted file\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  deleteNeFile(nePk, deleteInfoClass, callback) {\n    const meth = 'adapter-deleteNeFile';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (deleteInfoClass === undefined || deleteInfoClass === null || deleteInfoClass === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['deleteInfoClass'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [nePk];\n    const bodyVars = deleteInfoClass;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('DebugFiles', 'deleteNeFile', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['deleteNeFile'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get the proxy config settings\n   *\n   * @function getProxyConfig\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getProxyConfig(callback) {\n    const meth = 'adapter-getProxyConfig';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('DebugFiles', 'getProxyConfig', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getProxyConfig'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Set the proxy config settings\n   *\n   * @function setProxyConfig\n   * @param {object} proxyConfig - The proxy config settings\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  setProxyConfig(proxyConfig, callback) {\n    const meth = 'adapter-setProxyConfig';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (proxyConfig === undefined || proxyConfig === null || proxyConfig === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['proxyConfig'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = proxyConfig;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('DebugFiles', 'setProxyConfig', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['setProxyConfig'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get the debug files\n   *\n   * @function debugFiles\n   * @param {string} nePk - nePk is the device key assigned by Orchestrator, usually look like '0.NE'.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  debugFiles(nePk, callback) {\n    const meth = 'adapter-debugFiles';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [nePk];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('DebugFiles', 'debugFiles', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['debugFiles'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Validate deployment configuration\n   *\n   * @function validateDeployment\n   * @param {string} nePk - The appliance ne pk.\n   * @param {object} deployment - The deployment configuration to validate on the appliance\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  validateDeployment(nePk, deployment, callback) {\n    const meth = 'adapter-validateDeployment';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (deployment === undefined || deployment === null || deployment === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['deployment'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [nePk];\n    const bodyVars = deployment;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Deployment', 'validateDeployment', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['validateDeployment'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Validate deployment configuration for a discovered appliance.\n   *\n   * @function validateDiscoveredDeployment\n   * @param {string} discoveredApplianceId - The ID of the discovered appliance\n   * @param {object} deployment - The deployment configuration to validate on the appliance\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  validateDiscoveredDeployment(discoveredApplianceId, deployment, callback) {\n    const meth = 'adapter-validateDiscoveredDeployment';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (discoveredApplianceId === undefined || discoveredApplianceId === null || discoveredApplianceId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['discoveredApplianceId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (deployment === undefined || deployment === null || deployment === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['deployment'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [discoveredApplianceId];\n    const bodyVars = deployment;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Deployment', 'validateDiscoveredDeployment', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['validateDiscoveredDeployment'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get the deployment configuration of the appliance, does a direct call to the appliance.\n   *\n   * @function getApplianceDeployment\n   * @param {string} nePk - The appliance ne pk.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getApplianceDeployment(nePk, callback) {\n    const meth = 'adapter-getApplianceDeployment';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [nePk];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Deployment', 'getApplianceDeployment', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getApplianceDeployment'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get orchestrator DHCP settings\n   *\n   * @function dhcpConfigGet\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  dhcpConfigGet(callback) {\n    const meth = 'adapter-dhcpConfigGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('DhcpConfig', 'dhcpConfigGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['dhcpConfigGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Save orchestrator DHCP settings\n   *\n   * @function dhcpConfigPost\n   * @param {object} dhcpConfigPost - JSON object containing DHCP settings\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  dhcpConfigPost(dhcpConfigPost, callback) {\n    const meth = 'adapter-dhcpConfigPost';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (dhcpConfigPost === undefined || dhcpConfigPost === null || dhcpConfigPost === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['dhcpConfigPost'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = dhcpConfigPost;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('DhcpConfig', 'dhcpConfigPost', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['dhcpConfigPost'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get DHCP leases information.\n   *\n   * @function dhcpdLeases\n   * @param {string} neId - Unique key assigned by Orchestrator to each appliance, for eg: '0.NE'\n   * @param {boolean} cached - Get data from cache (true) or from appliance (false)\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  dhcpdLeases(neId, cached, callback) {\n    const meth = 'adapter-dhcpdLeases';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neId === undefined || neId === null || neId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (cached === undefined || cached === null || cached === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['cached'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [neId, cached];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('DhcpConfig', 'dhcpdLeases', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['dhcpdLeases'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get list of reserved subnets from the DHCP pool\n   *\n   * @function dhcpReservationsGet\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  dhcpReservationsGet(callback) {\n    const meth = 'adapter-dhcpReservationsGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('DhcpConfig', 'dhcpReservationsGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['dhcpReservationsGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Reserve a subnet in the DHCP pool\n   *\n   * @function dhcpReservationsPost\n   * @param {object} dhcpConfigPost - JSON object containing DHCP pool reservation data\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  dhcpReservationsPost(dhcpConfigPost, callback) {\n    const meth = 'adapter-dhcpReservationsPost';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (dhcpConfigPost === undefined || dhcpConfigPost === null || dhcpConfigPost === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['dhcpConfigPost'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = dhcpConfigPost;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('DhcpConfig', 'dhcpReservationsPost', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['dhcpReservationsPost'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Update DHCP pool reservations list. This api can be used to clear up local reservations (that have not been configured on appliance yet)\n   *\n   * @function dhcpReservationsGmsPost\n   * @param {array} dhcpConfigGmsPost - JSON object containing DHCP pool reservation data\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  dhcpReservationsGmsPost(dhcpConfigGmsPost, callback) {\n    const meth = 'adapter-dhcpReservationsGmsPost';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (dhcpConfigGmsPost === undefined || dhcpConfigGmsPost === null || dhcpConfigGmsPost === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['dhcpConfigGmsPost'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = { dhcpConfigGmsPost };\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('DhcpConfig', 'dhcpReservationsGmsPost', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['dhcpReservationsGmsPost'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Remove all DHCP pool reservations\n   *\n   * @function dhcpConfigResetPost\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  dhcpConfigResetPost(callback) {\n    const meth = 'adapter-dhcpConfigResetPost';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('DhcpConfig', 'dhcpConfigResetPost', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['dhcpConfigResetPost'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get dhcpd leases report of failover state\n   *\n   * @function dhcpdFailoverStates\n   * @param {string} neId - Unique key assigned by Orchestrator to each appliance, for eg: '0.NE'\n   * @param {boolean} cached - Get data from cache (true) or from appliance (false)\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  dhcpdFailoverStates(neId, cached, callback) {\n    const meth = 'adapter-dhcpdFailoverStates';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neId === undefined || neId === null || neId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (cached === undefined || cached === null || cached === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['cached'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [neId, cached];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('DhcpConfig', 'dhcpdFailoverStates', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['dhcpdFailoverStates'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get the DNS proxy config\n   *\n   * @function dnsProxyConfigGet\n   * @param {string} neId - Unique key assigned by Orchestrator to each appliance, for eg: '0.NE'\n   * @param {boolean} cached - Get data from cache (true) or from appliance (false)\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  dnsProxyConfigGet(neId, cached, callback) {\n    const meth = 'adapter-dnsProxyConfigGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neId === undefined || neId === null || neId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (cached === undefined || cached === null || cached === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['cached'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [neId, cached];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('DnsProxy', 'dnsProxyConfigGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['dnsProxyConfigGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Delete all tunnel exceptions\n   *\n   * @function tunnelExceptionDelete\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  tunnelExceptionDelete(callback) {\n    const meth = 'adapter-tunnelExceptionDelete';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Exception', 'tunnelExceptionDelete', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['tunnelExceptionDelete'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get all tunnel exceptions\n   *\n   * @function tunnelExceptionGet\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  tunnelExceptionGet(callback) {\n    const meth = 'adapter-tunnelExceptionGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Exception', 'tunnelExceptionGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['tunnelExceptionGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Create tunnel exceptions\n   *\n   * @function tunnelExceptionPost\n   * @param {array} requestBody - Array of tunnel Exception entry, 'id' of the exception must be 0 or not present\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  tunnelExceptionPost(requestBody, callback) {\n    const meth = 'adapter-tunnelExceptionPost';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (requestBody === undefined || requestBody === null || requestBody === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['requestBody'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = { requestBody };\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Exception', 'tunnelExceptionPost', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['tunnelExceptionPost'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Update tunnel exceptions\n   *\n   * @function tunnelExceptionPut\n   * @param {array} requestBody - Array of tunnel exception entries, 'id's of entries must be valid existing\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  tunnelExceptionPut(requestBody, callback) {\n    const meth = 'adapter-tunnelExceptionPut';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (requestBody === undefined || requestBody === null || requestBody === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['requestBody'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = { requestBody };\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Exception', 'tunnelExceptionPut', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['tunnelExceptionPut'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Delete single tunnel exceptions\n   *\n   * @function tunnelExceptionSingleDelete\n   * @param {number} id - The valid id of the an existing tunnel exception.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  tunnelExceptionSingleDelete(id, callback) {\n    const meth = 'adapter-tunnelExceptionSingleDelete';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (id === undefined || id === null || id === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['id'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [id];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Exception', 'tunnelExceptionSingleDelete', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['tunnelExceptionSingleDelete'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Update a single tunnel exceptions\n   *\n   * @function tunnelExceptionSingleUpdate\n   * @param {number} id - The valid id of the an existing tunnel exception.\n   * @param {object} requestBody - Tunnel exception entry\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  tunnelExceptionSingleUpdate(id, requestBody, callback) {\n    const meth = 'adapter-tunnelExceptionSingleUpdate';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (id === undefined || id === null || id === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['id'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (requestBody === undefined || requestBody === null || requestBody === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['requestBody'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [id];\n    const bodyVars = requestBody;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Exception', 'tunnelExceptionSingleUpdate', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['tunnelExceptionSingleUpdate'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary This API is to be used with fineuploader.js plugin. See fineuploader.com\n   *\n   * @function fileCreation\n   * @param {string} type - Type of upload\n   * @param {string} qqfile - Name of the file\n   * @param {string} qqfileFormData - Name of the file\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  fileCreation(type = 'upgradeGms', qqfile, qqfileFormData, callback) {\n    const meth = 'adapter-fileCreation';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (type === undefined || type === null || type === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['type'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (qqfile === undefined || qqfile === null || qqfile === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['qqfile'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (qqfileFormData === undefined || qqfileFormData === null || qqfileFormData === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['qqfileFormData'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { type, qqfile };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('FileCreation', 'fileCreation', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['fileCreation'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Returns the so far accumulated bandwidth stats about the flow\n   *\n   * @function flowBandwidthStats\n   * @param {string} neId - Appliance ID\n   * @param {number} id - Flow ID\n   * @param {number} seq - Flow sequence number\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  flowBandwidthStats(neId, id, seq, callback) {\n    const meth = 'adapter-flowBandwidthStats';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neId === undefined || neId === null || neId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (id === undefined || id === null || id === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['id'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (seq === undefined || seq === null || seq === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['seq'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { id, seq };\n    const queryParams = {};\n    const pathVars = [neId];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Flow', 'flowBandwidthStats', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['flowBandwidthStats'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Returns flow details\n   *\n   * @function flowDetails\n   * @param {string} neId - Appliance ID\n   * @param {number} id - Flow ID\n   * @param {number} seq - Flow sequence number\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  flowDetails(neId, id, seq, callback) {\n    const meth = 'adapter-flowDetails';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neId === undefined || neId === null || neId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (id === undefined || id === null || id === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['id'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (seq === undefined || seq === null || seq === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['seq'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { id, seq };\n    const queryParams = {};\n    const pathVars = [neId];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Flow', 'flowDetails', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['flowDetails'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Returns more detailed info about the flow\n   *\n   * @function flowDetails2\n   * @param {string} neId - Appliance ID\n   * @param {number} id - Flow ID\n   * @param {number} seq - Flow sequence number\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  flowDetails2(neId, id, seq, callback) {\n    const meth = 'adapter-flowDetails2';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neId === undefined || neId === null || neId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (id === undefined || id === null || id === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['id'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (seq === undefined || seq === null || seq === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['seq'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { id, seq };\n    const queryParams = {};\n    const pathVars = [neId];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Flow', 'flowDetails2', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['flowDetails2'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Reclassifies the flow(s)\n   *\n   * @function flowsReclassification\n   * @param {string} neId - Appliance ID\n   * @param {object} flowsReClassificationBody - flowsReClassificationBody param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  flowsReclassification(neId, flowsReClassificationBody, callback) {\n    const meth = 'adapter-flowsReclassification';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neId === undefined || neId === null || neId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (flowsReClassificationBody === undefined || flowsReClassificationBody === null || flowsReClassificationBody === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['flowsReClassificationBody'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [neId];\n    const bodyVars = flowsReClassificationBody;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Flow', 'flowsReclassification', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['flowsReclassification'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Resets the flow(s)\n   *\n   * @function flowsReset\n   * @param {string} neId - Appliance ID\n   * @param {object} flowsResetBody - flowsResetBody param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  flowsReset(neId, flowsResetBody, callback) {\n    const meth = 'adapter-flowsReset';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neId === undefined || neId === null || neId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (flowsResetBody === undefined || flowsResetBody === null || flowsResetBody === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['flowsResetBody'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [neId];\n    const bodyVars = flowsResetBody;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Flow', 'flowsReset', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['flowsReset'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Returns active, inactive, or both types of flows on the appliance based on the query parameters supplied\n   *\n   * @function flows\n   * @param {string} neId - Appliance ID\n   * @param {string} ip1 - First IP endpoint\n   * @param {number} mask1 - Mask for ip1\n   * @param {number} port1 - Port of first IP endpoint\n   * @param {string} ip2 - Second IP endpoint\n   * @param {number} mask2 - Mask for ip2\n   * @param {number} port2 - Port of second IP endpoint\n   * @param {boolean} ipEitherFlag - Enable directionality for IP. If true, ip1 will be treated as the source IP, and ip2 will be treated as the destination IP\n   * @param {boolean} portEitherFlag - Enable directionality for port. If true, port1 will be treated as the source port, and port2 will be treated as the destination port\n   * @param {string} application - Application specific flows. Drop-down only shows built-in apps and not user-defined apps\n   * @param {string} applicationGroup - Application groups. Drop-down only shows a small subset of application groups\n   * @param {string} protocol - Application protocol\n   * @param {number} vlan - Virtual LAN ID\n   * @param {string} dscp - DSCP marking\n   * @param {string} overlays - Overlay ID. Multiple values must be separated with \"|\". E.g. \"1|2\"\n   * @param {string} transport - Transport type. Accepted values: \"fabric\", \"underlay\", \"breakout\". Multiple values must be separated with \"|\". E.g. \"fabric|underlay\". Note: Fabric refers to SD-WAN.\n   * @param {array} services - Service name. Third party services should be formatted with an asterisk symbol at the end in order to filter by prefix instead of finding a complete match. Multiple servi...(description truncated)\n   * @param {string} zone1 - Flows to zone1. Values: \"any\", \"0\" (default), \"zone_id\"\n   * @param {string} zone2 - Flows from zone2. Values: \"any\", \"0\" (default), \"zone_id\"\n   * @param {string} zoneEither - Flows either to zoneEither or from zoneEither. Values: \"any\", \"0\" (default), \"zone_id\"\n   * @param {string} filter - Flow categories\n   * @param {boolean} edgeHA - Edge HA flows. \"True\" to include, \"False\" to exclude\n   * @param {boolean} builtIn - Built-in policy flows. \"True\" to include, \"False\" to exclude\n   * @param {string} uptime - Active and ended flow timing. If not specified, it defaults to \"anytime\" plus \"term\"\n   * @param {string} bytes - Bytes transferred\n   * @param {string} duration - Flows that have lasted less than (\" \") the specified duration (in minutes). Value should be \"any\" or a number formatted with a \" \" in front of a value between 0 and 18446...(description truncated)\n   * @param {string} anytimeSlowFlows - Slow Flows flag. If this flag is present, it will show slow flows only\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  flows(neId, ip1, mask1, port1, ip2, mask2, port2, ipEitherFlag, portEitherFlag, application = '3par', applicationGroup = 'Accommodation_and_Hotels', protocol = 'ip', vlan, dscp, overlays, transport, services, zone1, zone2, zoneEither, filter = 'all', edgeHA = 'false', builtIn = 'false', uptime = 'anytime', bytes = 'total', duration, anytimeSlowFlows, callback) {\n    const meth = 'adapter-flows';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neId === undefined || neId === null || neId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { ip1, mask1, port1, ip2, mask2, port2, ipEitherFlag, portEitherFlag, application, applicationGroup, protocol, vlan, dscp, overlays, transport, services, zone1, zone2, zoneEither, filter, edgeHA, builtIn, uptime, bytes, duration, anytimeSlowFlows };\n    const queryParams = {};\n    const pathVars = [neId];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Flow', 'flows', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['flows'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get Orchestrator advanced properties\n   *\n   * @function getAdvProp\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getAdvProp(callback) {\n    const meth = 'adapter-getAdvProp';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'getAdvProp', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getAdvProp'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Update Orchestrator advanced properties\n   *\n   * @function postAdvProp\n   * @param {object} advancedProperties - JSON object for Orchestrator Advanced Properties.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  postAdvProp(advancedProperties, callback) {\n    const meth = 'adapter-postAdvProp';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (advancedProperties === undefined || advancedProperties === null || advancedProperties === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['advancedProperties'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = advancedProperties;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'postAdvProp', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['postAdvProp'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get Orchestrator metadata of the advanced properties\n   *\n   * @function getGmsAdvancedPropertiesMetadata\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getGmsAdvancedPropertiesMetadata(callback) {\n    const meth = 'adapter-getGmsAdvancedPropertiesMetadata';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'getGmsAdvancedPropertiesMetadata', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getGmsAdvancedPropertiesMetadata'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get all preconfigurations\n   *\n   * @function getPreconfigurations\n   * @param {string} filter - Any additional filters to be applied\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getPreconfigurations(filter = 'names', callback) {\n    const meth = 'adapter-getPreconfigurations';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { filter };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'getPreconfigurations', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getPreconfigurations'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Create a preconfiguration\n   *\n   * @function createPreconfiguration\n   * @param {object} createPreconfig - createPreconfig param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  createPreconfiguration(createPreconfig, callback) {\n    const meth = 'adapter-createPreconfiguration';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (createPreconfig === undefined || createPreconfig === null || createPreconfig === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['createPreconfig'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = createPreconfig;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'createPreconfiguration', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['createPreconfiguration'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get the default preconfiguration, this contains the template YAML which has all possible configuration items. You will have to base64 decode configData to see the YAML in plain text\n   *\n   * @function getDefaultPreconfigurations\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getDefaultPreconfigurations(callback) {\n    const meth = 'adapter-getDefaultPreconfigurations';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'getDefaultPreconfigurations', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getDefaultPreconfigurations'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get the first matching preconfiguration, matching by serial then tag\n   *\n   * @function getMatchingPreconfiguration\n   * @param {object} matchPreconfig - matchPreconfig param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getMatchingPreconfiguration(matchPreconfig, callback) {\n    const meth = 'adapter-getMatchingPreconfiguration';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (matchPreconfig === undefined || matchPreconfig === null || matchPreconfig === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['matchPreconfig'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = matchPreconfig;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'getMatchingPreconfiguration', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getMatchingPreconfiguration'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get the first matching preconfiguration, matching by serial then tag\n   *\n   * @function postGmsAppliancePreconfigurationValidate\n   * @param {object} createPreconfig - createPreconfig param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  postGmsAppliancePreconfigurationValidate(createPreconfig, callback) {\n    const meth = 'adapter-postGmsAppliancePreconfigurationValidate';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (createPreconfig === undefined || createPreconfig === null || createPreconfig === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['createPreconfig'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = createPreconfig;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'postGmsAppliancePreconfigurationValidate', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['postGmsAppliancePreconfigurationValidate'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Delete one preconfiguration\n   *\n   * @function deletePreconfiguration\n   * @param {string} preconfigId - The ID of the preconfiguration\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  deletePreconfiguration(preconfigId, callback) {\n    const meth = 'adapter-deletePreconfiguration';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (preconfigId === undefined || preconfigId === null || preconfigId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['preconfigId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [preconfigId];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'deletePreconfiguration', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['deletePreconfiguration'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get one preconfiguration\n   *\n   * @function getPreconfiguration\n   * @param {string} preconfigId - The ID of the preconfiguration\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getPreconfiguration(preconfigId, callback) {\n    const meth = 'adapter-getPreconfiguration';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (preconfigId === undefined || preconfigId === null || preconfigId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['preconfigId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [preconfigId];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'getPreconfiguration', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getPreconfiguration'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Modify one preconfiguration\n   *\n   * @function modifyPreconfiguration\n   * @param {object} createPreconfig - createPreconfig param\n   * @param {string} preconfigId - The ID of the preconfiguration\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  modifyPreconfiguration(createPreconfig, preconfigId, callback) {\n    const meth = 'adapter-modifyPreconfiguration';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (createPreconfig === undefined || createPreconfig === null || createPreconfig === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['createPreconfig'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (preconfigId === undefined || preconfigId === null || preconfigId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['preconfigId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [preconfigId];\n    const bodyVars = createPreconfig;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'modifyPreconfiguration', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['modifyPreconfiguration'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get the apply status of a preconfiguration\n   *\n   * @function getPreconfigurationApplyStatus\n   * @param {string} preconfigId - The ID of the preconfiguration\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getPreconfigurationApplyStatus(preconfigId, callback) {\n    const meth = 'adapter-getPreconfigurationApplyStatus';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (preconfigId === undefined || preconfigId === null || preconfigId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['preconfigId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [preconfigId];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'getPreconfigurationApplyStatus', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getPreconfigurationApplyStatus'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Apply preconfiguration to discovered appliance\n   *\n   * @function applyDiscoveredPreconfiguration\n   * @param {string} preconfigId - The ID of the preconfiguration\n   * @param {string} discoveredId - The ID of the target discovered appliance\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  applyDiscoveredPreconfiguration(preconfigId, discoveredId, callback) {\n    const meth = 'adapter-applyDiscoveredPreconfiguration';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (preconfigId === undefined || preconfigId === null || preconfigId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['preconfigId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (discoveredId === undefined || discoveredId === null || discoveredId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['discoveredId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [preconfigId, discoveredId];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'applyDiscoveredPreconfiguration', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['applyDiscoveredPreconfiguration'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Apply preconfiguration to an already managed appliance\n   *\n   * @function applyManagedPreconfiguration\n   * @param {string} preconfigId - The ID of the preconfiguration\n   * @param {string} nePk - The ID of the target managed appliance\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  applyManagedPreconfiguration(preconfigId, nePk, callback) {\n    const meth = 'adapter-applyManagedPreconfiguration';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (preconfigId === undefined || preconfigId === null || preconfigId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['preconfigId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [preconfigId, nePk];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'applyManagedPreconfiguration', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['applyManagedPreconfiguration'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Return or sends crash history of all the appliances\n   *\n   * @function crashHistory\n   * @param {string} action - if the value is empty it returns all the appliance history otherwise it will send all the crash reports to portal\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  crashHistory(action, callback) {\n    const meth = 'adapter-crashHistory';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { action };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'crashHistory', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['crashHistory'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Return or sends reboot history of all the appliances\n   *\n   * @function rebootHistory\n   * @param {string} action - if the value is empty it returns all the appliance history otherwise it will send all the reboot reports to portal\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  rebootHistory(action, callback) {\n    const meth = 'adapter-rebootHistory';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { action };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'rebootHistory', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['rebootHistory'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get the handle for the currently applying wizard.\n   *\n   * @function getApplyApplianceWizard\n   * @param {string} nePk - The nePk of the appliance\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getApplyApplianceWizard(nePk, callback) {\n    const meth = 'adapter-getApplyApplianceWizard';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [nePk];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'getApplyApplianceWizard', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getApplyApplianceWizard'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Applies the wizard to an appliance in the background\n   *\n   * @function applyApplianceWizard\n   * @param {object} applyWizardPost - applyWizardPost param\n   * @param {string} nePk - The nePk of the appliance\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  applyApplianceWizard(applyWizardPost, nePk, callback) {\n    const meth = 'adapter-applyApplianceWizard';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (applyWizardPost === undefined || applyWizardPost === null || applyWizardPost === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['applyWizardPost'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [nePk];\n    const bodyVars = applyWizardPost;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'applyApplianceWizard', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['applyApplianceWizard'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Returns orchestrator backup information\n   *\n   * @function gmsBackupGet\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  gmsBackupGet(callback) {\n    const meth = 'adapter-gmsBackupGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'gmsBackupGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['gmsBackupGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary add or update orchestrator backup config data\n   *\n   * @function gmsBackupConfig\n   * @param {object} gmsBackConfig - gmsBackConfig param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  gmsBackupConfig(gmsBackConfig, callback) {\n    const meth = 'adapter-gmsBackupConfig';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (gmsBackConfig === undefined || gmsBackConfig === null || gmsBackConfig === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['gmsBackConfig'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = gmsBackConfig;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'gmsBackupConfig', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['gmsBackupConfig'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Create blueprint template\n   *\n   * @function goldenOrchestratorExport\n   * @param {string} mode - 'template' or 'migration'\n   * @param {string} download - any value would be considered true\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  goldenOrchestratorExport(mode, download, callback) {\n    const meth = 'adapter-goldenOrchestratorExport';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (mode === undefined || mode === null || mode === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['mode'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (download === undefined || download === null || download === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['download'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [mode, download];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'goldenOrchestratorExport', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['goldenOrchestratorExport'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Test the orchestrator backup remote server whether can connect.\n   *\n   * @function gmsBackupTestConnection\n   * @param {object} gmsBackConfig - gmsBackConfig param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  gmsBackupTestConnection(gmsBackConfig, callback) {\n    const meth = 'adapter-gmsBackupTestConnection';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (gmsBackConfig === undefined || gmsBackConfig === null || gmsBackConfig === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['gmsBackConfig'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = gmsBackConfig;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'gmsBackupTestConnection', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['gmsBackupTestConnection'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Returns the configuration for Discovery\n   *\n   * @function getDiscoveryConfig\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getDiscoveryConfig(callback) {\n    const meth = 'adapter-getDiscoveryConfig';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'getDiscoveryConfig', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getDiscoveryConfig'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Updates the discovery configuration with the object passed. Note: Replaces the whole configuration with the configuration passed\n   *\n   * @function updateDiscoveryConfig\n   * @param {array} emails - An array of email addresses to send the discovery (discovered, approved and denied EdgeConnects) email to.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  updateDiscoveryConfig(emails, callback) {\n    const meth = 'adapter-updateDiscoveryConfig';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (emails === undefined || emails === null || emails === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['emails'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = { emails };\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'updateDiscoveryConfig', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['updateDiscoveryConfig'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Returns the configuration for the dynamic topology tab.\n   *\n   * @function getDynamicTopologyConfig\n   * @param {string} userName - The username you want to retrieve the topology config for\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getDynamicTopologyConfig(userName, callback) {\n    const meth = 'adapter-getDynamicTopologyConfig';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { userName };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'getDynamicTopologyConfig', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getDynamicTopologyConfig'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Updates the dynamic topology configuration for the given user\n   *\n   * @function updateDynamicTopologyConfig\n   * @param {string} userName - The username you want to update the topology config for\n   * @param {object} request - The topology configuration to save, where the user's username is the key.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  updateDynamicTopologyConfig(userName, request, callback) {\n    const meth = 'adapter-updateDynamicTopologyConfig';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (userName === undefined || userName === null || userName === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['userName'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (request === undefined || request === null || request === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['request'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { userName };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = request;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'updateDynamicTopologyConfig', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['updateDynamicTopologyConfig'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Deprecated. Use the GET /gms/dynamicTopologyConfig with the userName query parameter\n   *\n   * @function getUserDynamicTopologyConfig\n   * @param {string} username - The username of the user to retrieve the dynamic topology configuration of.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getUserDynamicTopologyConfig(username, callback) {\n    const meth = 'adapter-getUserDynamicTopologyConfig';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (username === undefined || username === null || username === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['username'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [username];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'getUserDynamicTopologyConfig', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getUserDynamicTopologyConfig'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Deprecated. Use POST /gms/dynamicTopologyConfig with the username query parameter\n   *\n   * @function saveDynamicTopologyConfig\n   * @param {string} username - The username to save the configuration under.\n   * @param {object} request - The dynamic topology configuration to save, where the user's username is the key.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  saveDynamicTopologyConfig(username, request, callback) {\n    const meth = 'adapter-saveDynamicTopologyConfig';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (username === undefined || username === null || username === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['username'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (request === undefined || request === null || request === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['request'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [username];\n    const bodyVars = request;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'saveDynamicTopologyConfig', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['saveDynamicTopologyConfig'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Gets setting for GMS registration on appliance\n   *\n   * @function mgmInterfaceByGet\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  mgmInterfaceByGet(callback) {\n    const meth = 'adapter-mgmInterfaceByGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'mgmInterfaceByGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['mgmInterfaceByGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary update setting for GMS registration on appliance\n   *\n   * @function mgmInterfaceByPost\n   * @param {object} dnsDetails - Json object containing primary dns,secondary dns and domain name\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  mgmInterfaceByPost(dnsDetails, callback) {\n    const meth = 'adapter-mgmInterfaceByPost';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (dnsDetails === undefined || dnsDetails === null || dnsDetails === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['dnsDetails'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = dnsDetails;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'mgmInterfaceByPost', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['mgmInterfaceByPost'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Gets setting for GMS registration on appliance\n   *\n   * @function getGmsGmsRegistration2\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getGmsGmsRegistration2(callback) {\n    const meth = 'adapter-getGmsGmsRegistration2';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'getGmsGmsRegistration2', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getGmsGmsRegistration2'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary update setting for GMS registration on appliance\n   *\n   * @function postGmsGmsRegistration2\n   * @param {object} dnsDetails - Json object containing the custom default IP (if you don't want to use the Orchestrator's internal IP), and the specific label configuration (not required)\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  postGmsGmsRegistration2(dnsDetails, callback) {\n    const meth = 'adapter-postGmsGmsRegistration2';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (dnsDetails === undefined || dnsDetails === null || dnsDetails === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['dnsDetails'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = dnsDetails;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'postGmsGmsRegistration2', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['postGmsGmsRegistration2'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get appliance positions on a map for topology\n   *\n   * @function allGRNodeGet\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  allGRNodeGet(callback) {\n    const meth = 'adapter-allGRNodeGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'allGRNodeGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['allGRNodeGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Update appliance position by nePk\n   *\n   * @function grNodeUpdateByNePk\n   * @param {string} nePk - The appliance's nePk\n   * @param {object} gRNodeUpdatePostBody - Position object\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  grNodeUpdateByNePk(nePk, gRNodeUpdatePostBody, callback) {\n    const meth = 'adapter-grNodeUpdateByNePk';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (gRNodeUpdatePostBody === undefined || gRNodeUpdatePostBody === null || gRNodeUpdatePostBody === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['gRNodeUpdatePostBody'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [nePk];\n    const bodyVars = gRNodeUpdatePostBody;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'grNodeUpdateByNePk', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['grNodeUpdateByNePk'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get appliance position by graphical node primary key\n   *\n   * @function grNodeGet\n   * @param {string} grNodePk - Graphical node primary key\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  grNodeGet(grNodePk, callback) {\n    const meth = 'adapter-grNodeGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (grNodePk === undefined || grNodePk === null || grNodePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['grNodePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [grNodePk];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'grNodeGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['grNodeGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Update appliance position\n   *\n   * @function grNodeUpdate\n   * @param {string} grNodePk - Graphical node primary key\n   * @param {object} gRNodeUpdatePostBody - Position object\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  grNodeUpdate(grNodePk, gRNodeUpdatePostBody, callback) {\n    const meth = 'adapter-grNodeUpdate';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (grNodePk === undefined || grNodePk === null || grNodePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['grNodePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (gRNodeUpdatePostBody === undefined || gRNodeUpdatePostBody === null || gRNodeUpdatePostBody === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['gRNodeUpdatePostBody'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [grNodePk];\n    const bodyVars = gRNodeUpdatePostBody;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'grNodeUpdate', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['grNodeUpdate'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get all orchestrator groups. A group is a logical collection of appliances managed by orchestrator\n   *\n   * @function allGroupsGet\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  allGroupsGet(callback) {\n    const meth = 'adapter-allGroupsGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'allGroupsGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['allGroupsGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Add new group\n   *\n   * @function groupAdd\n   * @param {object} groupNewPostBody - Group information\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  groupAdd(groupNewPostBody, callback) {\n    const meth = 'adapter-groupAdd';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (groupNewPostBody === undefined || groupNewPostBody === null || groupNewPostBody === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['groupNewPostBody'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = groupNewPostBody;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'groupAdd', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['groupAdd'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get root group\n   *\n   * @function rootGroupGet\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  rootGroupGet(callback) {\n    const meth = 'adapter-rootGroupGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'rootGroupGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['rootGroupGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Delete a group\n   *\n   * @function groupDelete\n   * @param {string} id - group primary key\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  groupDelete(id, callback) {\n    const meth = 'adapter-groupDelete';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (id === undefined || id === null || id === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['id'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [id];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'groupDelete', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['groupDelete'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get a single group\n   *\n   * @function groupGet\n   * @param {string} id - group primary key. Looks like \"10.Network\"\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  groupGet(id, callback) {\n    const meth = 'adapter-groupGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (id === undefined || id === null || id === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['id'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [id];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'groupGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['groupGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Update a group\n   *\n   * @function groupUpdate\n   * @param {string} id - group primary key. Looks like \"10.Network\"\n   * @param {object} groupUpdatePostBody - group information\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  groupUpdate(id, groupUpdatePostBody, callback) {\n    const meth = 'adapter-groupUpdate';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (id === undefined || id === null || id === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['id'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (groupUpdatePostBody === undefined || groupUpdatePostBody === null || groupUpdatePostBody === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['groupUpdatePostBody'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [id];\n    const bodyVars = groupUpdatePostBody;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'groupUpdate', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['groupUpdate'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary upload the intermediate certs, certificate and key files\n   *\n   * @function httpsCertificateValidation\n   * @param {object} certificateKeyData - A JSON object representing intermediate certs, certificate and key files\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  httpsCertificateValidation(certificateKeyData, callback) {\n    const meth = 'adapter-httpsCertificateValidation';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (certificateKeyData === undefined || certificateKeyData === null || certificateKeyData === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['certificateKeyData'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = certificateKeyData;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'httpsCertificateValidation', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['httpsCertificateValidation'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Validate the certificate and key\n   *\n   * @function postGmsHttpsCertificateValidation\n   * @param {object} certificateKeyData - A JSON object representing certificate and key files\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  postGmsHttpsCertificateValidation(certificateKeyData, callback) {\n    const meth = 'adapter-postGmsHttpsCertificateValidation';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (certificateKeyData === undefined || certificateKeyData === null || certificateKeyData === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['certificateKeyData'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = certificateKeyData;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'postGmsHttpsCertificateValidation', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['postGmsHttpsCertificateValidation'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Returns all the interface labels saved\n   *\n   * @function getInterfaceLabels\n   * @param {boolean} active - Boolean flag to return only the active (active = true) or only inactive (acive = false)\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getInterfaceLabels(active, callback) {\n    const meth = 'adapter-getInterfaceLabels';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { active };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'getInterfaceLabels', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getInterfaceLabels'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Save interface labels, will completely replace the current implementation.\n   *\n   * @function postInterfaceLabels\n   * @param {object} newLabels - Object of labels you wish to save (will overwrite the current lan labels list). To remove a label, set the 'active' to false.\n   * @param {boolean} deleteDependencies - Whether or not you want to delete the labels from port profiles and templates using it\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  postInterfaceLabels(newLabels, deleteDependencies, callback) {\n    const meth = 'adapter-postInterfaceLabels';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (newLabels === undefined || newLabels === null || newLabels === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['newLabels'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { deleteDependencies };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = newLabels;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'postInterfaceLabels', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['postInterfaceLabels'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Returns all the labels for the given type\n   *\n   * @function getLabelsForType\n   * @param {string} type - The type of interface that you want to retrieve the list of labels of [wan, lan].\n   * @param {boolean} active - Boolean flag to return only the active (active = true) or only inactive (acive = false)\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getLabelsForType(type = 'wan', active, callback) {\n    const meth = 'adapter-getLabelsForType';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (type === undefined || type === null || type === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['type'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { active };\n    const queryParams = {};\n    const pathVars = [type];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'getLabelsForType', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getLabelsForType'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get the internal subnets\n   *\n   * @function getInternalSubnets\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getInternalSubnets(callback) {\n    const meth = 'adapter-getInternalSubnets';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'getInternalSubnets', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getInternalSubnets'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Save internal subnets\n   *\n   * @function saveInternalSubnets\n   * @param {string} body - body param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  saveInternalSubnets(body, callback) {\n    const meth = 'adapter-saveInternalSubnets';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = { body };\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'saveInternalSubnets', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['saveInternalSubnets'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get the IP addresses of the dropped requests to this server\n   *\n   * @function getIPWhitelistDrops\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getIPWhitelistDrops(callback) {\n    const meth = 'adapter-getIPWhitelistDrops';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'getIPWhitelistDrops', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getIPWhitelistDrops'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get the external IP/mask white list\n   *\n   * @function getExternalIPWhitelist\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getExternalIPWhitelist(callback) {\n    const meth = 'adapter-getExternalIPWhitelist';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'getExternalIPWhitelist', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getExternalIPWhitelist'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Set the external IP/mask white list\n   *\n   * @function setExternalIPWhitelist\n   * @param {array} subnets - This is the list of external subnet addresses allowed to access this server.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  setExternalIPWhitelist(subnets, callback) {\n    const meth = 'adapter-setExternalIPWhitelist';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (subnets === undefined || subnets === null || subnets === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['subnets'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = { subnets };\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'setExternalIPWhitelist', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['setExternalIPWhitelist'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get all the scheduled jobs in Orchestrator\n   *\n   * @function scheduledJobsGet\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  scheduledJobsGet(callback) {\n    const meth = 'adapter-scheduledJobsGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'scheduledJobsGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['scheduledJobsGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Schedule a new job in Orchestrator\n   *\n   * @function scheduledJob2Post\n   * @param {object} scheduledJobs2Post - scheduledJobs2Post param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  scheduledJob2Post(scheduledJobs2Post, callback) {\n    const meth = 'adapter-scheduledJob2Post';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (scheduledJobs2Post === undefined || scheduledJobs2Post === null || scheduledJobs2Post === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['scheduledJobs2Post'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = scheduledJobs2Post;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'scheduledJob2Post', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['scheduledJob2Post'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get the historical jobs by parameter. If all parameter is empty. Get 1000 latest historical jobs entities.\n   *\n   * @function historicalJobsGet\n   * @param {number} lastXDays - Jobs ended in last x days, Can combine use with scheduleId\n   * @param {number} scheduleId - get historical Jobs by scheduleId\n   * @param {number} latest - get latest historical Job, Can combine use with scheduleId\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  historicalJobsGet(lastXDays, scheduleId, latest, callback) {\n    const meth = 'adapter-historicalJobsGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { lastXDays, scheduleId, latest };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'historicalJobsGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['historicalJobsGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get the historical job by Id.\n   *\n   * @function historicalJobsGetById\n   * @param {string} jobId - Get historical Job by Id.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  historicalJobsGetById(jobId, callback) {\n    const meth = 'adapter-historicalJobsGetById';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (jobId === undefined || jobId === null || jobId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['jobId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [jobId];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'historicalJobsGetById', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['historicalJobsGetById'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Deletes a schedule job\n   *\n   * @function scheduledJobDelete\n   * @param {string} jobId - jobId param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  scheduledJobDelete(jobId, callback) {\n    const meth = 'adapter-scheduledJobDelete';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (jobId === undefined || jobId === null || jobId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['jobId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [jobId];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'scheduledJobDelete', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['scheduledJobDelete'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get scheduled jobs list for one specified appliance based on the nePk Id\n   *\n   * @function scheduledJob2Get\n   * @param {string} jobId - jobId param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  scheduledJob2Get(jobId, callback) {\n    const meth = 'adapter-scheduledJob2Get';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (jobId === undefined || jobId === null || jobId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['jobId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [jobId];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'scheduledJob2Get', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['scheduledJob2Get'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Modify a scheduled job.\n   *\n   * @function scheduledJobModify\n   * @param {string} jobId - The id of the job.\n   * @param {object} scheduledJob2Post - scheduledJob2Post param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  scheduledJobModify(jobId, scheduledJob2Post, callback) {\n    const meth = 'adapter-scheduledJobModify';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (jobId === undefined || jobId === null || jobId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['jobId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (scheduledJob2Post === undefined || scheduledJob2Post === null || scheduledJob2Post === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['scheduledJob2Post'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [jobId];\n    const bodyVars = scheduledJob2Post;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'scheduledJobModify', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['scheduledJobModify'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Stop a scheduled job\n   *\n   * @function stopJob\n   * @param {string} jobId - jobId param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  stopJob(jobId, callback) {\n    const meth = 'adapter-stopJob';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (jobId === undefined || jobId === null || jobId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['jobId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [jobId];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'stopJob', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['stopJob'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary All the checked menu items with different menu type names\n   *\n   * @function getAllMenuItems\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getAllMenuItems(callback) {\n    const meth = 'adapter-getAllMenuItems';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'getAllMenuItems', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getAllMenuItems'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Store or update the checked menu items for a special menu type name\n   *\n   * @function addMenuType\n   * @param {object} newMenuType - newMenuType param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  addMenuType(newMenuType, callback) {\n    const meth = 'adapter-addMenuType';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (newMenuType === undefined || newMenuType === null || newMenuType === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['newMenuType'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = newMenuType;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'addMenuType', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['addMenuType'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Configure users for menu types and set default menu type for monitoring users\n   *\n   * @function updateMenuTypeItems\n   * @param {object} usersUpdate - usersUpdate param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  updateMenuTypeItems(usersUpdate, callback) {\n    const meth = 'adapter-updateMenuTypeItems';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (usersUpdate === undefined || usersUpdate === null || usersUpdate === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['usersUpdate'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = usersUpdate;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'updateMenuTypeItems', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['updateMenuTypeItems'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Delete the a special menu type, including its checked menu items and configured users\n   *\n   * @function deleteExistingMenuType\n   * @param {string} menuTypeName - menuTypeName param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  deleteExistingMenuType(menuTypeName, callback) {\n    const meth = 'adapter-deleteExistingMenuType';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (menuTypeName === undefined || menuTypeName === null || menuTypeName === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['menuTypeName'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [menuTypeName];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'deleteExistingMenuType', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['deleteExistingMenuType'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get the list of appliances associated with all overlays\n   *\n   * @function getAllOverlayApplianceAssociations\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getAllOverlayApplianceAssociations(callback) {\n    const meth = 'adapter-getAllOverlayApplianceAssociations';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'getAllOverlayApplianceAssociations', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getAllOverlayApplianceAssociations'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Add appliances to overlays\n   *\n   * @function addOverlayApplianceAssociations\n   * @param {object} associations - associations param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  addOverlayApplianceAssociations(associations, callback) {\n    const meth = 'adapter-addOverlayApplianceAssociations';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (associations === undefined || associations === null || associations === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['associations'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = associations;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'addOverlayApplianceAssociations', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['addOverlayApplianceAssociations'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Remove appliances from overlays\n   *\n   * @function removeAppliancesFromOverlays\n   * @param {object} appliancesToRemove - appliancesToRemove param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  removeAppliancesFromOverlays(appliancesToRemove, callback) {\n    const meth = 'adapter-removeAppliancesFromOverlays';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (appliancesToRemove === undefined || appliancesToRemove === null || appliancesToRemove === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['appliancesToRemove'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = appliancesToRemove;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'removeAppliancesFromOverlays', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['removeAppliancesFromOverlays'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get appliances in an overlay\n   *\n   * @function getAppliancesForOverlay\n   * @param {string} overlayId - overlayId param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getAppliancesForOverlay(overlayId, callback) {\n    const meth = 'adapter-getAppliancesForOverlay';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (overlayId === undefined || overlayId === null || overlayId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['overlayId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [overlayId];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'getAppliancesForOverlay', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getAppliancesForOverlay'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Remove an appliance from an overlay\n   *\n   * @function deleteOverlayApplianceAssociation\n   * @param {string} overlayId - overlayId param\n   * @param {string} nePk - nePk param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  deleteOverlayApplianceAssociation(overlayId, nePk, callback) {\n    const meth = 'adapter-deleteOverlayApplianceAssociation';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (overlayId === undefined || overlayId === null || overlayId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['overlayId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [overlayId, nePk];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'deleteOverlayApplianceAssociation', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['deleteOverlayApplianceAssociation'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary All the overlays stored in the Orchestrator\n   *\n   * @function getAllOverlays\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getAllOverlays(callback) {\n    const meth = 'adapter-getAllOverlays';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'getAllOverlays', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getAllOverlays'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Saves a new overlay to the Orchestrator\n   *\n   * @function addNewOverlay\n   * @param {object} newOverlay - newOverlay param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  addNewOverlay(newOverlay, callback) {\n    const meth = 'adapter-addNewOverlay';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (newOverlay === undefined || newOverlay === null || newOverlay === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['newOverlay'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = newOverlay;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'addNewOverlay', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['addNewOverlay'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get the max number of overlays\n   *\n   * @function getMaxNumberOfOverlays\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getMaxNumberOfOverlays(callback) {\n    const meth = 'adapter-getMaxNumberOfOverlays';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'getMaxNumberOfOverlays', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getMaxNumberOfOverlays'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary All the overlays stored in the Orchestrator keyed by overlayId and regionId\n   *\n   * @function getAllRegionalOverlays\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getAllRegionalOverlays(callback) {\n    const meth = 'adapter-getAllRegionalOverlays';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'getAllRegionalOverlays', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getAllRegionalOverlays'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Post regional overlay configurations\n   *\n   * @function postAllRegionalOverlays\n   * @param {object} allOverlays - allOverlays param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  postAllRegionalOverlays(allOverlays, callback) {\n    const meth = 'adapter-postAllRegionalOverlays';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (allOverlays === undefined || allOverlays === null || allOverlays === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['allOverlays'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = allOverlays;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'postAllRegionalOverlays', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['postAllRegionalOverlays'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get regional overlay by overlayId and regionId\n   *\n   * @function getRegionalOverlay\n   * @param {string} overlayId - overlayId param\n   * @param {string} regionId - regionId param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getRegionalOverlay(overlayId, regionId, callback) {\n    const meth = 'adapter-getRegionalOverlay';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (overlayId === undefined || overlayId === null || overlayId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['overlayId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (regionId === undefined || regionId === null || regionId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['regionId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [overlayId, regionId];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'getRegionalOverlay', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getRegionalOverlay'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Modify regional overlay\n   *\n   * @function modifyRegionalOverlay\n   * @param {string} overlayId - overlayId param\n   * @param {string} regionId - regionId param\n   * @param {object} overlayConfig - overlayConfig param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  modifyRegionalOverlay(overlayId, regionId, overlayConfig, callback) {\n    const meth = 'adapter-modifyRegionalOverlay';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (overlayId === undefined || overlayId === null || overlayId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['overlayId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (regionId === undefined || regionId === null || regionId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['regionId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (overlayConfig === undefined || overlayConfig === null || overlayConfig === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['overlayConfig'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [overlayId, regionId];\n    const bodyVars = overlayConfig;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'modifyRegionalOverlay', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['modifyRegionalOverlay'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Deletes the overlay from the Orchestrator. Removes any appliances from the overlay and deletes any reports specifically for this overlay.\n   *\n   * @function deleteExistingOverlay\n   * @param {string} overlayId - overlayId param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  deleteExistingOverlay(overlayId, callback) {\n    const meth = 'adapter-deleteExistingOverlay';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (overlayId === undefined || overlayId === null || overlayId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['overlayId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [overlayId];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'deleteExistingOverlay', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['deleteExistingOverlay'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Returns one overlay that has the id of the passed overlayId parameter\n   *\n   * @function getOverlay\n   * @param {string} overlayId - overlayId param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getOverlay(overlayId, callback) {\n    const meth = 'adapter-getOverlay';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (overlayId === undefined || overlayId === null || overlayId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['overlayId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [overlayId];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'getOverlay', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getOverlay'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Update the properties of an existing overlay\n   *\n   * @function updateExistingOverlay\n   * @param {string} overlayId - overlayId param\n   * @param {object} updatedOverlay - updatedOverlay param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  updateExistingOverlay(overlayId, updatedOverlay, callback) {\n    const meth = 'adapter-updateExistingOverlay';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (overlayId === undefined || overlayId === null || overlayId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['overlayId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (updatedOverlay === undefined || updatedOverlay === null || updatedOverlay === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['updatedOverlay'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [overlayId];\n    const bodyVars = updatedOverlay;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'updateExistingOverlay', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['updateExistingOverlay'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get the overlay priority order\n   *\n   * @function getOverlayPriorityMap\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getOverlayPriorityMap(callback) {\n    const meth = 'adapter-getOverlayPriorityMap';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'getOverlayPriorityMap', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getOverlayPriorityMap'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Change the overlay priorities\n   *\n   * @function saveOverlayPriority\n   * @param {object} overlayPriority - overlayPriority param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  saveOverlayPriority(overlayPriority, callback) {\n    const meth = 'adapter-saveOverlayPriority';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (overlayPriority === undefined || overlayPriority === null || overlayPriority === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['overlayPriority'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = overlayPriority;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'saveOverlayPriority', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['saveOverlayPriority'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Returns the configured timezone for scheduled jobs and reports\n   *\n   * @function getScheduleTimezone\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getScheduleTimezone(callback) {\n    const meth = 'adapter-getScheduleTimezone';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'getScheduleTimezone', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getScheduleTimezone'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Updates the schedule timezone used with for the scheduled jobs and reports.\n   *\n   * @function updateScheduleTimezone\n   * @param {string} defaultTimezone - The timezone to set for the scheduled jobs and reports.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  updateScheduleTimezone(defaultTimezone, callback) {\n    const meth = 'adapter-updateScheduleTimezone';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (defaultTimezone === undefined || defaultTimezone === null || defaultTimezone === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['defaultTimezone'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = { defaultTimezone };\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'updateScheduleTimezone', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['updateScheduleTimezone'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Returns all the services\n   *\n   * @function getServices\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getServices(callback) {\n    const meth = 'adapter-getServices';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'getServices', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getServices'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Save the service list\n   *\n   * @function saveServices\n   * @param {object} newServices - Object of services you wish to save.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  saveServices(newServices, callback) {\n    const meth = 'adapter-saveServices';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (newServices === undefined || newServices === null || newServices === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['newServices'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = newServices;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'saveServices', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['saveServices'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Returns information of auto logout and max login session\n   *\n   * @function sessionTimeout\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  sessionTimeout(callback) {\n    const meth = 'adapter-sessionTimeout';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'sessionTimeout', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['sessionTimeout'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Update auto logout and max login session\n   *\n   * @function putGmsSessionTimeout\n   * @param {object} sessionDetail - sessionDetail param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  putGmsSessionTimeout(sessionDetail, callback) {\n    const meth = 'adapter-putGmsSessionTimeout';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (sessionDetail === undefined || sessionDetail === null || sessionDetail === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['sessionDetail'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = sessionDetail;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'putGmsSessionTimeout', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['putGmsSessionTimeout'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Gets stats collection enable/disable details\n   *\n   * @function statsCollection\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  statsCollection(callback) {\n    const meth = 'adapter-statsCollection';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'statsCollection', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['statsCollection'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Used to enable/disable stats collection by orchestrator\n   *\n   * @function postGmsStatsCollection\n   * @param {object} statsCollection - Json object for enable/disable stats collection by orchestrator\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  postGmsStatsCollection(statsCollection, callback) {\n    const meth = 'adapter-postGmsStatsCollection';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (statsCollection === undefined || statsCollection === null || statsCollection === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['statsCollection'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = statsCollection;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'postGmsStatsCollection', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['postGmsStatsCollection'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary To get default values for stats collection\n   *\n   * @function statsCollectionDefault\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  statsCollectionDefault(callback) {\n    const meth = 'adapter-statsCollectionDefault';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'statsCollectionDefault', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['statsCollectionDefault'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Returns all the Third Party Services\n   *\n   * @function getThirdPartyServices\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getThirdPartyServices(callback) {\n    const meth = 'adapter-getThirdPartyServices';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'getThirdPartyServices', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getThirdPartyServices'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Returns the configuration for the topology tab. The key in the configuration will be the username.\n   *\n   * @function getDefaultTopologyConfig\n   * @param {string} userName - The username you want to retrieve the topology config for\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getDefaultTopologyConfig(userName, callback) {\n    const meth = 'adapter-getDefaultTopologyConfig';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { userName };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'getDefaultTopologyConfig', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getDefaultTopologyConfig'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Updates the topology configuration for the given user\n   *\n   * @function updateTopologyConfig\n   * @param {string} userName - The username you want to update the topology config for\n   * @param {object} request - The topology configuration to save, where the user's username is the key.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  updateTopologyConfig(userName, request, callback) {\n    const meth = 'adapter-updateTopologyConfig';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (userName === undefined || userName === null || userName === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['userName'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (request === undefined || request === null || request === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['request'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { userName };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = request;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'updateTopologyConfig', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['updateTopologyConfig'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Update the map image\n   *\n   * @function saveMapImage\n   * @param {object} defaultParam - The map image to save.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  saveMapImage(defaultParam, callback) {\n    const meth = 'adapter-saveMapImage';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (defaultParam === undefined || defaultParam === null || defaultParam === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['defaultParam'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = defaultParam;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'saveMapImage', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['saveMapImage'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Deprecated. Use GET /gms/topologyConfig with the username query parameter\n   *\n   * @function getUserTopologyConfig\n   * @param {string} username - The username of the user to retrieve the topology configuration of.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getUserTopologyConfig(username, callback) {\n    const meth = 'adapter-getUserTopologyConfig';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (username === undefined || username === null || username === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['username'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [username];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'getUserTopologyConfig', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getUserTopologyConfig'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Deprecated. Use POST /gms/topologyConfig with the username query parameter\n   *\n   * @function saveTopologyConfig\n   * @param {string} username - The username to save the configuration under.\n   * @param {object} request - The topology configuration to save, where the user's username is the key.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  saveTopologyConfig(username, request, callback) {\n    const meth = 'adapter-saveTopologyConfig';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (username === undefined || username === null || username === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['username'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (request === undefined || request === null || request === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['request'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [username];\n    const bodyVars = request;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'saveTopologyConfig', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['saveTopologyConfig'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get the list of all tunnel group appliance lists\n   *\n   * @function getAllTunnelGroupApplianceAssociations\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getAllTunnelGroupApplianceAssociations(callback) {\n    const meth = 'adapter-getAllTunnelGroupApplianceAssociations';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'getAllTunnelGroupApplianceAssociations', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getAllTunnelGroupApplianceAssociations'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Add appliances to tunnel groups\n   *\n   * @function addTunnelGroupApplianceAssociations\n   * @param {object} associations - associations param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  addTunnelGroupApplianceAssociations(associations, callback) {\n    const meth = 'adapter-addTunnelGroupApplianceAssociations';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (associations === undefined || associations === null || associations === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['associations'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = associations;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'addTunnelGroupApplianceAssociations', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['addTunnelGroupApplianceAssociations'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get appliances in a tunnel group\n   *\n   * @function getAppliancesForTunnelGroup\n   * @param {string} tunnelGroupId - tunnelGroupId param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getAppliancesForTunnelGroup(tunnelGroupId, callback) {\n    const meth = 'adapter-getAppliancesForTunnelGroup';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (tunnelGroupId === undefined || tunnelGroupId === null || tunnelGroupId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['tunnelGroupId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [tunnelGroupId];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'getAppliancesForTunnelGroup', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getAppliancesForTunnelGroup'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Remove an appliance from a tunnel group\n   *\n   * @function deleteTunnelGroupApplianceAssociation\n   * @param {string} tunnelGroupId - tunnelGroupId param\n   * @param {string} nePk - nePk param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  deleteTunnelGroupApplianceAssociation(tunnelGroupId, nePk, callback) {\n    const meth = 'adapter-deleteTunnelGroupApplianceAssociation';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (tunnelGroupId === undefined || tunnelGroupId === null || tunnelGroupId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['tunnelGroupId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [tunnelGroupId, nePk];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'deleteTunnelGroupApplianceAssociation', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['deleteTunnelGroupApplianceAssociation'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Returns all the tunnel group configurations stored in the Orchestrator\n   *\n   * @function getAllTunnelGroups\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getAllTunnelGroups(callback) {\n    const meth = 'adapter-getAllTunnelGroups';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'getAllTunnelGroups', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getAllTunnelGroups'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Saves a new tunnel group configuration to the Orchestrator\n   *\n   * @function addNewTunnelGroup\n   * @param {object} newTunnelGroup - newTunnelGroup param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  addNewTunnelGroup(newTunnelGroup, callback) {\n    const meth = 'adapter-addNewTunnelGroup';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (newTunnelGroup === undefined || newTunnelGroup === null || newTunnelGroup === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['newTunnelGroup'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = newTunnelGroup;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'addNewTunnelGroup', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['addNewTunnelGroup'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Deletes the tunnel group from the Orchestrator. Removes any appliances from the tunnel group.\n   *\n   * @function deleteExistingTunnelGroup\n   * @param {string} id - id param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  deleteExistingTunnelGroup(id, callback) {\n    const meth = 'adapter-deleteExistingTunnelGroup';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (id === undefined || id === null || id === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['id'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [id];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'deleteExistingTunnelGroup', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['deleteExistingTunnelGroup'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Returns one tunnel group that matches the ID given\n   *\n   * @function getTunnelGroup\n   * @param {string} id - id param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getTunnelGroup(id, callback) {\n    const meth = 'adapter-getTunnelGroup';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (id === undefined || id === null || id === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['id'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [id];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'getTunnelGroup', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getTunnelGroup'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Update the properties of an existing tunnel group\n   *\n   * @function updateExistingTunnelGroup\n   * @param {string} id - id param\n   * @param {object} updatedTunnelGroup - updatedTunnelGroup param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  updateExistingTunnelGroup(id, updatedTunnelGroup, callback) {\n    const meth = 'adapter-updateExistingTunnelGroup';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (id === undefined || id === null || id === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['id'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (updatedTunnelGroup === undefined || updatedTunnelGroup === null || updatedTunnelGroup === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['updatedTunnelGroup'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [id];\n    const bodyVars = updatedTunnelGroup;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'updateExistingTunnelGroup', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['updateExistingTunnelGroup'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get the tunnel group management properties\n   *\n   * @function getTunnelGroupProperties\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getTunnelGroupProperties(callback) {\n    const meth = 'adapter-getTunnelGroupProperties';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'getTunnelGroupProperties', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getTunnelGroupProperties'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Set the tunnel group management properties\n   *\n   * @function setTunnelGroupProperties\n   * @param {object} tunnelGroupProperties - tunnelGroupProperties param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  setTunnelGroupProperties(tunnelGroupProperties, callback) {\n    const meth = 'adapter-setTunnelGroupProperties';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (tunnelGroupProperties === undefined || tunnelGroupProperties === null || tunnelGroupProperties === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['tunnelGroupProperties'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = tunnelGroupProperties;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'setTunnelGroupProperties', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['setTunnelGroupProperties'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Returns available orchestrator versions\n   *\n   * @function versionInfo\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  versionInfo(callback) {\n    const meth = 'adapter-versionInfo';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gms', 'versionInfo', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['versionInfo'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Returns all Orchestrator configs\n   *\n   * @function gmsConfig\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  gmsConfig(callback) {\n    const meth = 'adapter-gmsConfig';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('GmsConfig', 'gmsConfig', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['gmsConfig'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Creates an Orchestrator config\n   *\n   * @function postGmsConfig\n   * @param {object} gmsConfigCreation - gmsConfigCreation param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  postGmsConfig(gmsConfigCreation, callback) {\n    const meth = 'adapter-postGmsConfig';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (gmsConfigCreation === undefined || gmsConfigCreation === null || gmsConfigCreation === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['gmsConfigCreation'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = gmsConfigCreation;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('GmsConfig', 'postGmsConfig', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['postGmsConfig'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Deletes an Orchestrator config\n   *\n   * @function deleteGmsConfigBase\n   * @param {string} base - resource name\n   * @param {string} resourceKey - if provided, it will only delete the sub-resource\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  deleteGmsConfigBase(base, resourceKey, callback) {\n    const meth = 'adapter-deleteGmsConfigBase';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (base === undefined || base === null || base === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['base'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { resourceKey };\n    const queryParams = {};\n    const pathVars = [base];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('GmsConfig', 'deleteGmsConfigBase', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['deleteGmsConfigBase'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Returns specific Orchestrator config. But a specific Orchestrator config could have multiple sub-resources, that's why it returns an array. However, If \"resourceKey\" is  provided, response will be an object(sub-resource) instead of an array\n   *\n   * @function getGmsConfigBase\n   * @param {string} base - name resource\n   * @param {string} resourceKey - if provided, response will be an object instead of an array\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getGmsConfigBase(base, resourceKey, callback) {\n    const meth = 'adapter-getGmsConfigBase';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (base === undefined || base === null || base === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['base'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { resourceKey };\n    const queryParams = {};\n    const pathVars = [base];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('GmsConfig', 'getGmsConfigBase', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getGmsConfigBase'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Updates a versioned Orchestrator config. Current resource version number needs to be provided when updating\n   *\n   * @function putGmsConfigBase\n   * @param {string} base - resource name\n   * @param {string} resourceKey - if provided, it will update the sub-resource\n   * @param {object} gmsConfigUpdate - gmsConfigUpdate param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  putGmsConfigBase(base, resourceKey, gmsConfigUpdate, callback) {\n    const meth = 'adapter-putGmsConfigBase';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (base === undefined || base === null || base === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['base'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (gmsConfigUpdate === undefined || gmsConfigUpdate === null || gmsConfigUpdate === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['gmsConfigUpdate'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { resourceKey };\n    const queryParams = {};\n    const pathVars = [base];\n    const bodyVars = gmsConfigUpdate;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('GmsConfig', 'putGmsConfigBase', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['putGmsConfigBase'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get the host name of orchestrator.\n   *\n   * @function hostnameByGet\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  hostnameByGet(callback) {\n    const meth = 'adapter-hostnameByGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('GmsHostname', 'hostnameByGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['hostnameByGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get current license key and information\n   *\n   * @function licenseByGet\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  licenseByGet(callback) {\n    const meth = 'adapter-licenseByGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('GmsLicense', 'licenseByGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['licenseByGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Set Orchestrator license key\n   *\n   * @function licenseByPut\n   * @param {object} licenseKey - Orchestrator license key\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  licenseByPut(licenseKey, callback) {\n    const meth = 'adapter-licenseByPut';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (licenseKey === undefined || licenseKey === null || licenseKey === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['licenseKey'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = licenseKey;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('GmsLicense', 'licenseByPut', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['licenseByPut'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Validate a new license key\n   *\n   * @function validateKey\n   * @param {string} licenseKey - License key to validate\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  validateKey(licenseKey, callback) {\n    const meth = 'adapter-validateKey';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (licenseKey === undefined || licenseKey === null || licenseKey === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['licenseKey'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { licenseKey };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('GmsLicense', 'validateKey', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['validateKey'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Returns Orchestrator Operating system type\n   *\n   * @function osInfo\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  osInfo(callback) {\n    const meth = 'adapter-osInfo';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('GmsOperatingSystem', 'osInfo', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['osInfo'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get current Radius or TACACS+ configuration\n   *\n   * @function gmsRemoteAuthGet\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  gmsRemoteAuthGet(callback) {\n    const meth = 'adapter-gmsRemoteAuthGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('GmsRemoteAuth', 'gmsRemoteAuthGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['gmsRemoteAuthGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Modify Radius or TACACS+ configuration\n   *\n   * @function gmsRemoteAuthPost\n   * @param {object} remoteAuthData - remoteAuthData param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  gmsRemoteAuthPost(remoteAuthData, callback) {\n    const meth = 'adapter-gmsRemoteAuthPost';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (remoteAuthData === undefined || remoteAuthData === null || remoteAuthData === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['remoteAuthData'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = remoteAuthData;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('GmsRemoteAuth', 'gmsRemoteAuthPost', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['gmsRemoteAuthPost'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Delete custom SMTP\n   *\n   * @function sMTP\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  sMTP(callback) {\n    const meth = 'adapter-sMTP';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('GmsSMTP', 'sMTP', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['sMTP'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Gets SMTP details\n   *\n   * @function getGmsSMTP\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getGmsSMTP(callback) {\n    const meth = 'adapter-getGmsSMTP';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('GmsSMTP', 'getGmsSMTP', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getGmsSMTP'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary used to set SMTP settings\n   *\n   * @function sMTPPost\n   * @param {object} sMTPDetails - Json object for setting values of SMPT user name, password, email server address etc...\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  sMTPPost(sMTPDetails, callback) {\n    const meth = 'adapter-sMTPPost';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (sMTPDetails === undefined || sMTPDetails === null || sMTPDetails === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['sMTPDetails'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = sMTPDetails;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('GmsSMTP', 'sMTPPost', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['sMTPPost'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Delete unverified emails\n   *\n   * @function delUnverifiedEmails\n   * @param {array} emails - a list of unverified email addresses to delete\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  delUnverifiedEmails(emails, callback) {\n    const meth = 'adapter-delUnverifiedEmails';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (emails === undefined || emails === null || emails === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['emails'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = { emails };\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('GmsSMTP', 'delUnverifiedEmails', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['delUnverifiedEmails'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Send a verification email to an email address\n   *\n   * @function sendVerificationEmail\n   * @param {string} address - the address to whom will the email be sent\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  sendVerificationEmail(address, callback) {\n    const meth = 'adapter-sendVerificationEmail';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (address === undefined || address === null || address === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['address'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { address };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('GmsSMTP', 'sendVerificationEmail', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['sendVerificationEmail'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary used to send test mail\n   *\n   * @function sMTPTestMail\n   * @param {object} sMTPDetails - Json object for setting values of SMPT user name, password, email server address etc...\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  sMTPTestMail(sMTPDetails, callback) {\n    const meth = 'adapter-sMTPTestMail';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (sMTPDetails === undefined || sMTPDetails === null || sMTPDetails === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['sMTPDetails'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = sMTPDetails;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('GmsSMTP', 'sMTPTestMail', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['sMTPTestMail'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get unverified email addresses\n   *\n   * @function listUnverifiedEmails\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  listUnverifiedEmails(callback) {\n    const meth = 'adapter-listUnverifiedEmails';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('GmsSMTP', 'listUnverifiedEmails', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['listUnverifiedEmails'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary verify an email address\n   *\n   * @function verifyEmailAddress\n   * @param {string} id - The secure random string in the verification email to identify an email address\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  verifyEmailAddress(id, callback) {\n    const meth = 'adapter-verifyEmailAddress';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (id === undefined || id === null || id === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['id'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { id };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('GmsSMTP', 'verifyEmailAddress', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['verifyEmailAddress'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Returns orchestrator server information such as used disk hostname, up time, version etc...\n   *\n   * @function gmsBriefInfo\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  gmsBriefInfo(callback) {\n    const meth = 'adapter-gmsBriefInfo';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gmsserver', 'gmsBriefInfo', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['gmsBriefInfo'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Returns hello message.\n   *\n   * @function hello\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  hello(callback) {\n    const meth = 'adapter-hello';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gmsserver', 'hello', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['hello'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Returns orchestrator server information such as used disk space, hostname,release etc...\n   *\n   * @function gmsServerInfo\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  gmsServerInfo(callback) {\n    const meth = 'adapter-gmsServerInfo';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gmsserver', 'gmsServerInfo', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['gmsServerInfo'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Returns orchestrator server information such as used disk hostname, up time, version etc...\n   *\n   * @function gmsPingInfo\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  gmsPingInfo(callback) {\n    const meth = 'adapter-gmsPingInfo';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Gmsserver', 'gmsPingInfo', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['gmsPingInfo'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Returns a collection of appliances paired in a HA configuration\n   *\n   * @function haGroupsGet\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  haGroupsGet(callback) {\n    const meth = 'adapter-haGroupsGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('HaGroups', 'haGroupsGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['haGroupsGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Modify appliances paired in a HA configuration\n   *\n   * @function haGroupsPost\n   * @param {object} haGroups - JSON object containing collection of appliances paired in a HA configuration\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  haGroupsPost(haGroups, callback) {\n    const meth = 'adapter-haGroupsPost';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (haGroups === undefined || haGroups === null || haGroups === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['haGroups'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = haGroups;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('HaGroups', 'haGroupsPost', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['haGroupsPost'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Returns health summary of all appliances\n   *\n   * @function healthSummary\n   * @param {object} healthSummaryGetPostBody - healthSummaryGetPostBody param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  healthSummary(healthSummaryGetPostBody, callback) {\n    const meth = 'adapter-healthSummary';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (healthSummaryGetPostBody === undefined || healthSummaryGetPostBody === null || healthSummaryGetPostBody === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['healthSummaryGetPostBody'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = healthSummaryGetPostBody;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Health', 'healthSummary', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['healthSummary'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Returns summary of alarms for a given appliance for that time period\n   *\n   * @function getHealthAlarmPeriodSummary\n   * @param {number} from - Long(Signed 64 bits) value of milliseconds since EPOCH time indicating the starting time boundary of data time range\n   * @param {number} to - Long(Signed 64 bits) value of milliseconds since EPOCH time indicating the ending time boundary of data time range\n   * @param {string} applianceId - Appliance ID\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getHealthAlarmPeriodSummary(from, to, applianceId, callback) {\n    const meth = 'adapter-getHealthAlarmPeriodSummary';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (from === undefined || from === null || from === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['from'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (to === undefined || to === null || to === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['to'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (applianceId === undefined || applianceId === null || applianceId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['applianceId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { from, to, applianceId };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Health', 'getHealthAlarmPeriodSummary', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getHealthAlarmPeriodSummary'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Returns summary of jitter for a given appliance for that time period\n   *\n   * @function jitterPeriodSummary\n   * @param {number} time - Long(Signed 64 bits) value of seconds since EPOCH time indicating the starting time boundary of data time range\n   * @param {number} overlayId - Overlay id. -1 == all overlays\n   * @param {string} applianceId - Appliance ID\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  jitterPeriodSummary(time, overlayId, applianceId, callback) {\n    const meth = 'adapter-jitterPeriodSummary';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (time === undefined || time === null || time === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['time'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (overlayId === undefined || overlayId === null || overlayId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['overlayId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (applianceId === undefined || applianceId === null || applianceId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['applianceId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { time, overlayId, applianceId };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Health', 'jitterPeriodSummary', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['jitterPeriodSummary'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Returns summary of latency for a given appliance for that time period\n   *\n   * @function latencyPeriodSummary\n   * @param {number} time - Long(Signed 64 bits) value of seconds since EPOCH time indicating the starting time boundary of data time range\n   * @param {number} overlayId - Overlay id. -1 == all overlays\n   * @param {string} applianceId - Appliance ID\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  latencyPeriodSummary(time, overlayId, applianceId, callback) {\n    const meth = 'adapter-latencyPeriodSummary';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (time === undefined || time === null || time === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['time'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (overlayId === undefined || overlayId === null || overlayId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['overlayId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (applianceId === undefined || applianceId === null || applianceId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['applianceId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { time, overlayId, applianceId };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Health', 'latencyPeriodSummary', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['latencyPeriodSummary'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Returns summary of loss for a given appliance for that time period\n   *\n   * @function lossPeriodSummary\n   * @param {number} time - Long(Signed 64 bits) value of seconds since EPOCH time indicating the starting time boundary of data time range\n   * @param {number} overlayId - Overlay id. -1 == all overlays\n   * @param {string} applianceId - Appliance ID\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  lossPeriodSummary(time, overlayId, applianceId, callback) {\n    const meth = 'adapter-lossPeriodSummary';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (time === undefined || time === null || time === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['time'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (overlayId === undefined || overlayId === null || overlayId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['overlayId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (applianceId === undefined || applianceId === null || applianceId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['applianceId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { time, overlayId, applianceId };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Health', 'lossPeriodSummary', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['lossPeriodSummary'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Returns summary of mos for a given appliance for that time period\n   *\n   * @function mosPeriodSummary\n   * @param {number} time - Long(Signed 64 bits) value of seconds since EPOCH time indicating the starting time boundary of data time range\n   * @param {number} overlayId - Overlay id. -1 == all overlays\n   * @param {string} applianceId - Appliance ID\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  mosPeriodSummary(time, overlayId, applianceId, callback) {\n    const meth = 'adapter-mosPeriodSummary';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (time === undefined || time === null || time === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['time'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (overlayId === undefined || overlayId === null || overlayId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['overlayId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (applianceId === undefined || applianceId === null || applianceId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['applianceId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { time, overlayId, applianceId };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Health', 'mosPeriodSummary', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['mosPeriodSummary'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary add/updates the gms hostname\n   *\n   * @function applyHostname\n   * @param {string} nePk - The appliance's ne pk\n   * @param {object} hostName - Json object containing the appliance host name\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  applyHostname(nePk, hostName, callback) {\n    const meth = 'adapter-applyHostname';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (hostName === undefined || hostName === null || hostName === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['hostName'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [nePk];\n    const bodyVars = hostName;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Hostname', 'applyHostname', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['applyHostname'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Clear idle time\n   *\n   * @function idleTime\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  idleTime(callback) {\n    const meth = 'adapter-idleTime';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Idle', 'idleTime', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['idleTime'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Increment idle time\n   *\n   * @function getIdleIncrement\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getIdleIncrement(callback) {\n    const meth = 'adapter-getIdleIncrement';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Idle', 'getIdleIncrement', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getIdleIncrement'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get UDP IPSec key status for all appliances\n   *\n   * @function ikeless\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  ikeless(callback) {\n    const meth = 'adapter-ikeless';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('IkelessSeedStatus', 'ikeless', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['ikeless'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Pushes the active interface labels on Orchestrator to appliance\n   *\n   * @function applyLabelsToAppliance\n   * @param {string} nePk - The nePk of the appliance you wish to apply the labels to\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  applyLabelsToAppliance(nePk, callback) {\n    const meth = 'adapter-applyLabelsToAppliance';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [nePk];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('InterfaceLabels', 'applyLabelsToAppliance', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['applyLabelsToAppliance'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get node configuration data from Orchestrator database or from the specified appliance.\n   *\n   * @function interfaceState\n   * @param {boolean} cached - True means to get data from Orchestrator database, and false means to get data from appliance.\n   * @param {string} neId - The node Id of the appliance.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  interfaceState(cached, neId, callback) {\n    const meth = 'adapter-interfaceState';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (cached === undefined || cached === null || cached === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['cached'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (neId === undefined || neId === null || neId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { cached };\n    const queryParams = {};\n    const pathVars = [neId];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('InterfaceState', 'interfaceState', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['interfaceState'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Retrieves NX licensed appliances\n   *\n   * @function licensing\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  licensing(callback) {\n    const meth = 'adapter-licensing';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('License', 'licensing', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['licensing'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Retrieves portal licensed appliances\n   *\n   * @function getLicensePortalAppliance\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getLicensePortalAppliance(callback) {\n    const meth = 'adapter-getLicensePortalAppliance';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('License', 'getLicensePortalAppliance', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getLicensePortalAppliance'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Grant an appliance a base license via Cloud Portal\n   *\n   * @function grant\n   * @param {string} nePk - Appliance primary key\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  grant(nePk, callback) {\n    const meth = 'adapter-grant';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [nePk];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('License', 'grant', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['grant'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Delete an appliance's license token via the appliance\n   *\n   * @function deleteLicenseToken\n   * @param {string} nePk - Appliance primary key\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  deleteLicenseToken(nePk, callback) {\n    const meth = 'adapter-deleteLicenseToken';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [nePk];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('License', 'deleteLicenseToken', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['deleteLicenseToken'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Revoke an appliance a base license via Cloud Portal\n   *\n   * @function postLicensePortalApplianceRevokeNePk\n   * @param {string} nePk - Appliance primary key\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  postLicensePortalApplianceRevokeNePk(nePk, callback) {\n    const meth = 'adapter-postLicensePortalApplianceRevokeNePk';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [nePk];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('License', 'postLicensePortalApplianceRevokeNePk', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['postLicensePortalApplianceRevokeNePk'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Changes appliance boost and plus settings\n   *\n   * @function postLicensePortalEcNePk\n   * @param {string} nePk - Appliance primary key\n   * @param {object} applianceInfo - Appliance boost and plus information\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  postLicensePortalEcNePk(nePk, applianceInfo, callback) {\n    const meth = 'adapter-postLicensePortalEcNePk';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (applianceInfo === undefined || applianceInfo === null || applianceInfo === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['applianceInfo'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [nePk];\n    const bodyVars = applianceInfo;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('License', 'postLicensePortalEcNePk', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['postLicensePortalEcNePk'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Retrieves summary of portal licensed appliances\n   *\n   * @function getLicensePortalSummary\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getLicensePortalSummary(callback) {\n    const meth = 'adapter-getLicensePortalSummary';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('License', 'getLicensePortalSummary', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getLicensePortalSummary'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Retrieves VX licensed appliances\n   *\n   * @function getLicenseVx\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getLicenseVx(callback) {\n    const meth = 'adapter-getLicenseVx';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('License', 'getLicenseVx', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getLicenseVx'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary POST operation to start link integrity test between two appliances.\n   *\n   * @function linkIntegrityTestRun\n   * @param {object} linkIntegrityTestRun - JSON object that contains the setups for link integrity test.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  linkIntegrityTestRun(linkIntegrityTestRun, callback) {\n    const meth = 'adapter-linkIntegrityTestRun';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (linkIntegrityTestRun === undefined || linkIntegrityTestRun === null || linkIntegrityTestRun === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['linkIntegrityTestRun'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = linkIntegrityTestRun;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('LinkIntegrityTest', 'linkIntegrityTestRun', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['linkIntegrityTestRun'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Operation to retrieve current link integrity test status for desired appliance.\n   *\n   * @function linkIntegrityStatus\n   * @param {string} neId - Internal ID of the appliance from which you want to retrieve status information.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  linkIntegrityStatus(neId, callback) {\n    const meth = 'adapter-linkIntegrityStatus';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neId === undefined || neId === null || neId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [neId];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('LinkIntegrityTest', 'linkIntegrityStatus', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['linkIntegrityStatus'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Lookup the latitude,longitude of an address\n   *\n   * @function addressLookup\n   * @param {string} address - A string that represents the address to query\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  addressLookup(address, callback) {\n    const meth = 'adapter-addressLookup';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (address === undefined || address === null || address === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['address'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [address];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Location', 'addressLookup', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['addressLookup'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get logging settings form appliance or gmsdb\n   *\n   * @function getLoggingSettings\n   * @param {string} neId - neId is the device key assigned by Orchestrator, usually look like '0.NE'.\n   * @param {boolean} cached - If true, get settings from gmsdb, otherwise get from appliance.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getLoggingSettings(neId, cached, callback) {\n    const meth = 'adapter-getLoggingSettings';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neId === undefined || neId === null || neId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (cached === undefined || cached === null || cached === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['cached'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { cached };\n    const queryParams = {};\n    const pathVars = [neId];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Logging', 'getLoggingSettings', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getLoggingSettings'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Returns all the current sessions\n   *\n   * @function sessions\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  sessions(callback) {\n    const meth = 'adapter-sessions';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('LoginSessions', 'sessions', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['sessions'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get maintenance mode appliances\n   *\n   * @function getMaintenanceMode\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getMaintenanceMode(callback) {\n    const meth = 'adapter-getMaintenanceMode';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('MaintenanceMode', 'getMaintenanceMode', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getMaintenanceMode'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Set maintenance mode for appliances\n   *\n   * @function setMaintenanceMode\n   * @param {object} maintenanceModePostBody - Maintenance Mode Configuration\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  setMaintenanceMode(maintenanceModePostBody, callback) {\n    const meth = 'adapter-setMaintenanceMode';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (maintenanceModePostBody === undefined || maintenanceModePostBody === null || maintenanceModePostBody === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['maintenanceModePostBody'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = maintenanceModePostBody;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('MaintenanceMode', 'setMaintenanceMode', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['setMaintenanceMode'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Delete certain uploaded map\n   *\n   * @function deleteUploadedMap\n   * @param {string} imageName - name of file to be deleted\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  deleteUploadedMap(imageName, callback) {\n    const meth = 'adapter-deleteUploadedMap';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (imageName === undefined || imageName === null || imageName === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['imageName'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = { imageName };\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Maps', 'deleteUploadedMap', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['deleteUploadedMap'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get list of uploaded maps\n   *\n   * @function getUploadedMaps\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getUploadedMaps(callback) {\n    const meth = 'adapter-getUploadedMaps';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Maps', 'getUploadedMaps', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getUploadedMaps'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get multicast config info on the appliance\n   *\n   * @function multicastConfigGet\n   * @param {string} neId - Unique key assigned by Orchestrator to each appliance, for eg: '0.NE'\n   * @param {boolean} cached - Get data from cache (true) or from appliance (false)\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  multicastConfigGet(neId, cached, callback) {\n    const meth = 'adapter-multicastConfigGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neId === undefined || neId === null || neId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (cached === undefined || cached === null || cached === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['cached'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [neId, cached];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Multicast', 'multicastConfigGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['multicastConfigGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get multicast enabled info on the appliance\n   *\n   * @function multicastEnableGet\n   * @param {string} neId - Unique key assigned by Orchestrator to each appliance, for eg: '0.NE'\n   * @param {boolean} cached - Get data from cache (true) or from appliance (false)\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  multicastEnableGet(neId, cached, callback) {\n    const meth = 'adapter-multicastEnableGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neId === undefined || neId === null || neId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (cached === undefined || cached === null || cached === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['cached'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [neId, cached];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Multicast', 'multicastEnableGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['multicastEnableGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get multicast interface state info on the appliance\n   *\n   * @function multicastInterfaceStateGet\n   * @param {string} neId - Unique key assigned by Orchestrator to each appliance, for eg: '0.NE'\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  multicastInterfaceStateGet(neId, callback) {\n    const meth = 'adapter-multicastInterfaceStateGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neId === undefined || neId === null || neId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [neId];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Multicast', 'multicastInterfaceStateGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['multicastInterfaceStateGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get multicast neighbor state  info on the appliance\n   *\n   * @function multicastNeighborStateGet\n   * @param {string} neId - Unique key assigned by Orchestrator to each appliance, for eg: '0.NE'\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  multicastNeighborStateGet(neId, callback) {\n    const meth = 'adapter-multicastNeighborStateGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neId === undefined || neId === null || neId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [neId];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Multicast', 'multicastNeighborStateGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['multicastNeighborStateGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get multicast route state  info on the appliance\n   *\n   * @function multicastRouteStateGet\n   * @param {string} neId - Unique key assigned by Orchestrator to each appliance, for eg: '0.NE'\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  multicastRouteStateGet(neId, callback) {\n    const meth = 'adapter-multicastRouteStateGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neId === undefined || neId === null || neId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [neId];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Multicast', 'multicastRouteStateGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['multicastRouteStateGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Returns all NAT Config\n   *\n   * @function getAllNat\n   * @param {string} neId - Unique key assigned by Orchestrator to each appliance, for eg: '0.NE'\n   * @param {boolean} cached - Get data from cache (true) or from appliance (false)\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getAllNat(neId, cached, callback) {\n    const meth = 'adapter-getAllNat';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neId === undefined || neId === null || neId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (cached === undefined || cached === null || cached === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['cached'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [neId, cached];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Nat', 'getAllNat', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getAllNat'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get NAT Maps\n   *\n   * @function branchNatMapsGet\n   * @param {string} neId - Unique key assigned by Orchestrator to each appliance, for eg: '0.NE'\n   * @param {boolean} cached - Get data from cache (true) or from appliance (false)\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  branchNatMapsGet(neId, cached, callback) {\n    const meth = 'adapter-branchNatMapsGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neId === undefined || neId === null || neId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (cached === undefined || cached === null || cached === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['cached'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [neId, cached];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Nat', 'branchNatMapsGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['branchNatMapsGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Returns all NAT Pools\n   *\n   * @function getAllNatPools\n   * @param {string} neId - Unique key assigned by Orchestrator to each appliance, for eg: '0.NE'\n   * @param {boolean} cached - Get data from cache (true) or from appliance (false)\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getAllNatPools(neId, cached, callback) {\n    const meth = 'adapter-getAllNatPools';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neId === undefined || neId === null || neId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (cached === undefined || cached === null || cached === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['cached'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [neId, cached];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Nat', 'getAllNatPools', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getAllNatPools'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get flow export data from appliance or gmsdb\n   *\n   * @function getNetFlowData\n   * @param {string} neId - neId is the device key assigned by Orchestrator, usually look like '0.NE'.\n   * @param {boolean} cached - If true, get data from gmsdb, otherwise get from appliance.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getNetFlowData(neId, cached, callback) {\n    const meth = 'adapter-getNetFlowData';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neId === undefined || neId === null || neId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (cached === undefined || cached === null || cached === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['cached'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { cached };\n    const queryParams = {};\n    const pathVars = [neId];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('NetFlow', 'getNetFlowData', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getNetFlowData'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Erase Network Memory on one or more appliances.\n   *\n   * @function eraseNmPost\n   * @param {object} applianceKeys - JSON object containing list of appliance keys\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  eraseNmPost(applianceKeys, callback) {\n    const meth = 'adapter-eraseNmPost';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (applianceKeys === undefined || applianceKeys === null || applianceKeys === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['applianceKeys'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = applianceKeys;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('NetworkMemory', 'eraseNmPost', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['eraseNmPost'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Remove the message of notification banner.\n   *\n   * @function delNotification\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  delNotification(callback) {\n    const meth = 'adapter-delNotification';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Notification', 'delNotification', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['delNotification'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get the message of notification banner.\n   *\n   * @function getNotification\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getNotification(callback) {\n    const meth = 'adapter-getNotification';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Notification', 'getNotification', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getNotification'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Add or update the message of notification banner.\n   *\n   * @function postNotification\n   * @param {object} notificationConfig - notificationConfig param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  postNotification(notificationConfig, callback) {\n    const meth = 'adapter-postNotification';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (notificationConfig === undefined || notificationConfig === null || notificationConfig === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['notificationConfig'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = notificationConfig;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Notification', 'postNotification', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['postNotification'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get OSPF interfaces configuration data.\n   *\n   * @function getInterfaceConfigDta\n   * @param {string} neId - neId is the device key assigned by Orchestrator, usually look like '0.NE'.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getInterfaceConfigDta(neId, callback) {\n    const meth = 'adapter-getInterfaceConfigDta';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neId === undefined || neId === null || neId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [neId];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Ospf', 'getInterfaceConfigDta', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getInterfaceConfigDta'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get appliance's OSPF system level configuration data.\n   *\n   * @function getOSPFSystemConfig\n   * @param {string} neId - neId is the device key assigned by Orchestrator, usually look like '0.NE'.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getOSPFSystemConfig(neId, callback) {\n    const meth = 'adapter-getOSPFSystemConfig';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neId === undefined || neId === null || neId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [neId];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Ospf', 'getOSPFSystemConfig', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getOSPFSystemConfig'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Gets the state of the OSPF interfaces.\n   *\n   * @function oSPFInterfaceStateObj\n   * @param {string} neId - neId is the device key assigned by Orchestrator, usually look like '0.NE'.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  oSPFInterfaceStateObj(neId, callback) {\n    const meth = 'adapter-oSPFInterfaceStateObj';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neId === undefined || neId === null || neId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [neId];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Ospf', 'oSPFInterfaceStateObj', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['oSPFInterfaceStateObj'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Gets the state of the OSPF neighbors.\n   *\n   * @function oSPFNeighborsStateObj\n   * @param {string} neId - neId is the device key assigned by Orchestrator, usually look like '0.NE'.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  oSPFNeighborsStateObj(neId, callback) {\n    const meth = 'adapter-oSPFNeighborsStateObj';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neId === undefined || neId === null || neId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [neId];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Ospf', 'oSPFNeighborsStateObj', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['oSPFNeighborsStateObj'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Gets the state of the OSPF.\n   *\n   * @function oSPFStateObj\n   * @param {string} neId - neId is the device key assigned by Orchestrator, usually look like '0.NE'.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  oSPFStateObj(neId, callback) {\n    const meth = 'adapter-oSPFStateObj';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neId === undefined || neId === null || neId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [neId];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Ospf', 'oSPFStateObj', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['oSPFStateObj'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get the overlay manager properties in the Orchestrator.\n   *\n   * @function getOverlayMngProps\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getOverlayMngProps(callback) {\n    const meth = 'adapter-getOverlayMngProps';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('OverlayManagerProperties', 'getOverlayMngProps', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getOverlayMngProps'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Set the overlay manager properties in the Orchestrator.\n   *\n   * @function setOverlayMngProps\n   * @param {object} overlayManagerProperties - Json object containing overlay manager properties.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  setOverlayMngProps(overlayManagerProperties, callback) {\n    const meth = 'adapter-setOverlayMngProps';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (overlayManagerProperties === undefined || overlayManagerProperties === null || overlayManagerProperties === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['overlayManagerProperties'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = overlayManagerProperties;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('OverlayManagerProperties', 'setOverlayMngProps', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['setOverlayMngProps'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get port forwarding rules on a VXOA.\n   *\n   * @function portForwardingGet\n   * @param {string} neId - Ne Id of the VXOA to get\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  portForwardingGet(neId, callback) {\n    const meth = 'adapter-portForwardingGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neId === undefined || neId === null || neId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [neId];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('PortForwarding', 'portForwardingGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['portForwardingGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get a list of all Deployment Profile templates\n   *\n   * @function portProfilesGet\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  portProfilesGet(callback) {\n    const meth = 'adapter-portProfilesGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('PortProfiles', 'portProfilesGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['portProfilesGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Create a new Deployment Profile template\n   *\n   * @function portProfilesPost\n   * @param {object} portProfilesPost - JSON object containing Deployment Profile template configuration data\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  portProfilesPost(portProfilesPost, callback) {\n    const meth = 'adapter-portProfilesPost';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (portProfilesPost === undefined || portProfilesPost === null || portProfilesPost === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['portProfilesPost'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = portProfilesPost;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('PortProfiles', 'portProfilesPost', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['portProfilesPost'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Delete a Deployment Profile template matching the id\n   *\n   * @function portProfilesDelete\n   * @param {string} portProfileId - System generated unique identifier for the Deployment Profile\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  portProfilesDelete(portProfileId, callback) {\n    const meth = 'adapter-portProfilesDelete';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (portProfileId === undefined || portProfileId === null || portProfileId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['portProfileId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [portProfileId];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('PortProfiles', 'portProfilesDelete', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['portProfilesDelete'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get a Deployment Profile template matching the id\n   *\n   * @function getPortProfilesConfigPortProfileId\n   * @param {string} portProfileId - System generated unique identifier for the Deployment Profile\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getPortProfilesConfigPortProfileId(portProfileId, callback) {\n    const meth = 'adapter-getPortProfilesConfigPortProfileId';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (portProfileId === undefined || portProfileId === null || portProfileId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['portProfileId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [portProfileId];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('PortProfiles', 'getPortProfilesConfigPortProfileId', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getPortProfilesConfigPortProfileId'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Update a Deployment Profile template matching the id\n   *\n   * @function portProfilesPut\n   * @param {string} portProfileId - System generated unique identifier for the Deployment Profile\n   * @param {object} portProfilesPost - JSON object containing Deployment Profile template configuration data\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  portProfilesPut(portProfileId, portProfilesPost, callback) {\n    const meth = 'adapter-portProfilesPut';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (portProfileId === undefined || portProfileId === null || portProfileId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['portProfileId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (portProfilesPost === undefined || portProfilesPost === null || portProfilesPost === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['portProfilesPost'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [portProfileId];\n    const bodyVars = portProfilesPost;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('PortProfiles', 'portProfilesPut', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['portProfilesPut'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Check if an interface label is in use by any of the existing deployment profiles\n   *\n   * @function portProfilesLabelInUseGet\n   * @param {string} labelId - Unique id for interface label\n   * @param {string} labelSide - Enum to donate LAN/WAN side label. Valid values (lan or wan)\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  portProfilesLabelInUseGet(labelId, labelSide = 'lan', callback) {\n    const meth = 'adapter-portProfilesLabelInUseGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (labelId === undefined || labelId === null || labelId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['labelId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (labelSide === undefined || labelSide === null || labelSide === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['labelSide'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [labelId, labelSide];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('PortProfiles', 'portProfilesLabelInUseGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['portProfilesLabelInUseGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get all appliance access groups / assets\n   *\n   * @function getAllApplianceAccessGroups\n   * @param {boolean} assigned - To get assigned appliance access group / asset provide assigned = true; Otherwise it will return list of all appliance access groups / assets\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getAllApplianceAccessGroups(assigned, callback) {\n    const meth = 'adapter-getAllApplianceAccessGroups';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { assigned };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Rbac', 'getAllApplianceAccessGroups', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getAllApplianceAccessGroups'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Create or update appliance access group / asset.\n   *\n   * @function createOrUpdateApplianceAccessGroup\n   * @param {object} body - Either applianceGroups or applianceRegions should be empty (not null).\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  createOrUpdateApplianceAccessGroup(body, callback) {\n    const meth = 'adapter-createOrUpdateApplianceAccessGroup';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (body === undefined || body === null || body === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['body'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = body;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Rbac', 'createOrUpdateApplianceAccessGroup', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['createOrUpdateApplianceAccessGroup'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Delete appliance access group / asset by name\n   *\n   * @function deleteApplianceAccessGroupByName\n   * @param {string} applianceAccessGroupName - appliance access group/asset name\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  deleteApplianceAccessGroupByName(applianceAccessGroupName, callback) {\n    const meth = 'adapter-deleteApplianceAccessGroupByName';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (applianceAccessGroupName === undefined || applianceAccessGroupName === null || applianceAccessGroupName === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['applianceAccessGroupName'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [applianceAccessGroupName];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Rbac', 'deleteApplianceAccessGroupByName', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['deleteApplianceAccessGroupByName'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get appliance access group / asset by name\n   *\n   * @function getApplianceAccessGroupByName\n   * @param {string} applianceAccessGroupName - appliance access group/asset name\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getApplianceAccessGroupByName(applianceAccessGroupName, callback) {\n    const meth = 'adapter-getApplianceAccessGroupByName';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (applianceAccessGroupName === undefined || applianceAccessGroupName === null || applianceAccessGroupName === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['applianceAccessGroupName'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [applianceAccessGroupName];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Rbac', 'getApplianceAccessGroupByName', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getApplianceAccessGroupByName'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get all rbac assignments\n   *\n   * @function getAllRbacAssignments\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getAllRbacAssignments(callback) {\n    const meth = 'adapter-getAllRbacAssignments';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Rbac', 'getAllRbacAssignments', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getAllRbacAssignments'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Create or update rbacAssignment.\n   *\n   * @function createOrUpdateRbacAssignment\n   * @param {object} body - If you do not want to assign asset or roles to a user, then send 'null' value for the respective property.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  createOrUpdateRbacAssignment(body, callback) {\n    const meth = 'adapter-createOrUpdateRbacAssignment';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (body === undefined || body === null || body === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['body'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = body;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Rbac', 'createOrUpdateRbacAssignment', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['createOrUpdateRbacAssignment'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Delete rbacAssignment by username\n   *\n   * @function deleteRbacAssignment\n   * @param {string} username - username param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  deleteRbacAssignment(username, callback) {\n    const meth = 'adapter-deleteRbacAssignment';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (username === undefined || username === null || username === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['username'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [username];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Rbac', 'deleteRbacAssignment', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['deleteRbacAssignment'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get rbacAssignment by username\n   *\n   * @function getRbacAssignmentByUsername\n   * @param {string} username - username param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getRbacAssignmentByUsername(username, callback) {\n    const meth = 'adapter-getRbacAssignmentByUsername';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (username === undefined || username === null || username === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['username'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [username];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Rbac', 'getRbacAssignmentByUsername', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getRbacAssignmentByUsername'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get all roles.\n   *\n   * @function getAllRoles\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getAllRoles(callback) {\n    const meth = 'adapter-getAllRoles';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Rbac', 'getAllRoles', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getAllRoles'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Create role or Update existing role.\n   *\n   * @function saveRole\n   * @param {object} body - menuTypeItems can not be null or empty\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  saveRole(body, callback) {\n    const meth = 'adapter-saveRole';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (body === undefined || body === null || body === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['body'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = body;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Rbac', 'saveRole', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['saveRole'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get list of accessible menus\n   *\n   * @function getAssignedMenus\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getAssignedMenus(callback) {\n    const meth = 'adapter-getAssignedMenus';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Rbac', 'getAssignedMenus', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getAssignedMenus'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Delete role By name. If role is assigned to one or more users then API will return HTTP 423\n   *\n   * @function deleteRoleByRoleName\n   * @param {string} roleName - roleName param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  deleteRoleByRoleName(roleName, callback) {\n    const meth = 'adapter-deleteRoleByRoleName';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (roleName === undefined || roleName === null || roleName === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['roleName'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [roleName];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Rbac', 'deleteRoleByRoleName', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['deleteRoleByRoleName'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get role by name if exists\n   *\n   * @function getRoleByRoleName\n   * @param {string} roleName - roleName param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getRoleByRoleName(roleName, callback) {\n    const meth = 'adapter-getRoleByRoleName';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (roleName === undefined || roleName === null || roleName === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['roleName'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [roleName];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Rbac', 'getRoleByRoleName', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getRoleByRoleName'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get the reachability status from the appliance\n   *\n   * @function reachabilityFromAppliance\n   * @param {string} neId - neId is the device key assigned by Orchestrator, usually look like '0.NE'.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  reachabilityFromAppliance(neId, callback) {\n    const meth = 'adapter-reachabilityFromAppliance';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neId === undefined || neId === null || neId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [neId];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Reachability', 'reachabilityFromAppliance', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['reachabilityFromAppliance'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get the reachability status from the Orchestrator\n   *\n   * @function reachabilityFromGMS\n   * @param {string} neId - neId is the device key assigned by Orchestrator, usually look like '0.NE'.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  reachabilityFromGMS(neId, callback) {\n    const meth = 'adapter-reachabilityFromGMS';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neId === undefined || neId === null || neId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [neId];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Reachability', 'reachabilityFromGMS', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['reachabilityFromGMS'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get per second statistics from a VXOA appliance\n   *\n   * @function realtimeStats\n   * @param {string} nePk - Appliance primary key\n   * @param {object} body - body param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  realtimeStats(nePk, body, callback) {\n    const meth = 'adapter-realtimeStats';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (body === undefined || body === null || body === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['body'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [nePk];\n    const bodyVars = body;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('RealtimeStats', 'realtimeStats', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['realtimeStats'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get all regions\n   *\n   * @function regionGet\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  regionGet(callback) {\n    const meth = 'adapter-regionGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Regions', 'regionGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['regionGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Create region\n   *\n   * @function regionPost\n   * @param {object} requestBody - requestBody param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  regionPost(requestBody, callback) {\n    const meth = 'adapter-regionPost';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (requestBody === undefined || requestBody === null || requestBody === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['requestBody'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = requestBody;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Regions', 'regionPost', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['regionPost'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get all region association\n   *\n   * @function regionAssociationGET\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  regionAssociationGET(callback) {\n    const meth = 'adapter-regionAssociationGET';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Regions', 'regionAssociationGET', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['regionAssociationGET'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Create region association\n   *\n   * @function regionAssociationPost\n   * @param {object} requestBody - Map of appliance nePK and regionId, example: {'0.NE':'1', '1.NE':'3'}\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  regionAssociationPost(requestBody, callback) {\n    const meth = 'adapter-regionAssociationPost';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (requestBody === undefined || requestBody === null || requestBody === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['requestBody'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = requestBody;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Regions', 'regionAssociationPost', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['regionAssociationPost'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get region association by nePK\n   *\n   * @function getRegionsAppliancesNePkNePK\n   * @param {string} nePK - nePK param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getRegionsAppliancesNePkNePK(nePK, callback) {\n    const meth = 'adapter-getRegionsAppliancesNePkNePK';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (nePK === undefined || nePK === null || nePK === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePK'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [nePK];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Regions', 'getRegionsAppliancesNePkNePK', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getRegionsAppliancesNePkNePK'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get region association by region ID\n   *\n   * @function getRegionsAppliancesRegionIdRegionId\n   * @param {number} regionId - regionId param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getRegionsAppliancesRegionIdRegionId(regionId, callback) {\n    const meth = 'adapter-getRegionsAppliancesRegionIdRegionId';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (regionId === undefined || regionId === null || regionId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['regionId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [regionId];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Regions', 'getRegionsAppliancesRegionIdRegionId', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getRegionsAppliancesRegionIdRegionId'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Update region association\n   *\n   * @function regionAssociationPut\n   * @param {string} nePK - nePK param\n   * @param {object} requestBody - requestBody param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  regionAssociationPut(nePK, requestBody, callback) {\n    const meth = 'adapter-regionAssociationPut';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (nePK === undefined || nePK === null || nePK === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePK'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (requestBody === undefined || requestBody === null || requestBody === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['requestBody'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [nePK];\n    const bodyVars = requestBody;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Regions', 'regionAssociationPut', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['regionAssociationPut'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Delete region by regionId\n   *\n   * @function regionDelete\n   * @param {number} regionId - regionId param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  regionDelete(regionId, callback) {\n    const meth = 'adapter-regionDelete';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (regionId === undefined || regionId === null || regionId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['regionId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [regionId];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Regions', 'regionDelete', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['regionDelete'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get region by regionId\n   *\n   * @function regionSingleGet\n   * @param {number} regionId - regionId param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  regionSingleGet(regionId, callback) {\n    const meth = 'adapter-regionSingleGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (regionId === undefined || regionId === null || regionId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['regionId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [regionId];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Regions', 'regionSingleGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['regionSingleGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Update regions\n   *\n   * @function regionPut\n   * @param {number} regionId - regionId param\n   * @param {object} requestBody - requestBody param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  regionPut(regionId, requestBody, callback) {\n    const meth = 'adapter-regionPut';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (regionId === undefined || regionId === null || regionId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['regionId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (requestBody === undefined || requestBody === null || requestBody === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['requestBody'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [regionId];\n    const bodyVars = requestBody;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Regions', 'regionPut', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['regionPut'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Gets all the Releases for orchestrator and vxoa\n   *\n   * @function releases\n   * @param {boolean} filter - If filter is true it returns only new releases of orchestrator and vxoa\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  releases(filter, callback) {\n    const meth = 'adapter-releases';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (filter === undefined || filter === null || filter === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['filter'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { filter };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Release', 'releases', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['releases'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get release notifications\n   *\n   * @function releaseNotifications\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  releaseNotifications(callback) {\n    const meth = 'adapter-releaseNotifications';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Release', 'releaseNotifications', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['releaseNotifications'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Delay a release notification\n   *\n   * @function delayReleaseNotification\n   * @param {string} version - The version of the release the notification is for\n   * @param {object} delayRequest - The number of hours to delay the notification by\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  delayReleaseNotification(version, delayRequest, callback) {\n    const meth = 'adapter-delayReleaseNotification';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (version === undefined || version === null || version === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['version'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (delayRequest === undefined || delayRequest === null || delayRequest === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['delayRequest'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [version];\n    const bodyVars = delayRequest;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Release', 'delayReleaseNotification', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['delayReleaseNotification'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Dismiss a release notification\n   *\n   * @function dismissReleaseNotification\n   * @param {string} version - The version of the release the notification is for\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  dismissReleaseNotification(version, callback) {\n    const meth = 'adapter-dismissReleaseNotification';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (version === undefined || version === null || version === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['version'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [version];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Release', 'dismissReleaseNotification', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['dismissReleaseNotification'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary To get all remote log receiver configurations\n   *\n   * @function remoteLogReceiverGet\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  remoteLogReceiverGet(callback) {\n    const meth = 'adapter-remoteLogReceiverGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('RemoteLogReceiver', 'remoteLogReceiverGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['remoteLogReceiverGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Add remote log receiver(s) with configuration provided in the request body\n   *\n   * @function remoteLogReceiverAdd\n   * @param {object} requestBody - Post body is an array of objects WITHOUT id field\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  remoteLogReceiverAdd(requestBody, callback) {\n    const meth = 'adapter-remoteLogReceiverAdd';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (requestBody === undefined || requestBody === null || requestBody === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['requestBody'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = requestBody;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('RemoteLogReceiver', 'remoteLogReceiverAdd', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['remoteLogReceiverAdd'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Update remote log receiver(s) with data provided in the request body\n   *\n   * @function remoteLogReceiverPut\n   * @param {string} requestBody - PUT request body is an array of objects with valid receiver ids\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  remoteLogReceiverPut(requestBody, callback) {\n    const meth = 'adapter-remoteLogReceiverPut';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (requestBody === undefined || requestBody === null || requestBody === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['requestBody'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = { requestBody };\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('RemoteLogReceiver', 'remoteLogReceiverPut', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['remoteLogReceiverPut'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Delete a remote log receiver\n   *\n   * @function remoteLogReceiverDelete\n   * @param {number} receiverId - The valid id of the receiver to be deleted.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  remoteLogReceiverDelete(receiverId, callback) {\n    const meth = 'adapter-remoteLogReceiverDelete';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (receiverId === undefined || receiverId === null || receiverId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['receiverId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [receiverId];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('RemoteLogReceiver', 'remoteLogReceiverDelete', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['remoteLogReceiverDelete'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary To query specific log(s) with log type and sequence id(s) provided in the request body\n   *\n   * @function remoteLogReceiverSubscribe\n   * @param {number} receiverId - The valid id of the receiver.\n   * @param {object} fetchingParam - Parameter for fetch specific log message. The id field is an array of strings, item in the array can be a single number or a range, for example: id: [\"1\", \"3\", \"4-6\"], me...(description truncated)\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  remoteLogReceiverSubscribe(receiverId, fetchingParam, callback) {\n    const meth = 'adapter-remoteLogReceiverSubscribe';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (receiverId === undefined || receiverId === null || receiverId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['receiverId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (fetchingParam === undefined || fetchingParam === null || fetchingParam === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['fetchingParam'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [receiverId];\n    const bodyVars = fetchingParam;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('RemoteLogReceiver', 'remoteLogReceiverSubscribe', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['remoteLogReceiverSubscribe'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get the current DNS IP address and domain names configured for an appliance.\n   *\n   * @function dns\n   * @param {string} neId - Unique key assigned by Orchestrator to each appliance, for eg: '0.NE'\n   * @param {boolean} cached - Get data from cache (true) or from appliance (false)\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  dns(neId, cached, callback) {\n    const meth = 'adapter-dns';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neId === undefined || neId === null || neId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (cached === undefined || cached === null || cached === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['cached'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [neId, cached];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Resolver', 'dns', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['dns'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get the REST API config\n   *\n   * @function restApiConfigGet\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  restApiConfigGet(callback) {\n    const meth = 'adapter-restApiConfigGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('RestApiConfig', 'restApiConfigGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['restApiConfigGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Set the REST API config\n   *\n   * @function restApiConfigPost\n   * @param {object} restApiConfigPost - Set the REST API config\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  restApiConfigPost(restApiConfigPost, callback) {\n    const meth = 'adapter-restApiConfigPost';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (restApiConfigPost === undefined || restApiConfigPost === null || restApiConfigPost === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['restApiConfigPost'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = restApiConfigPost;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('RestApiConfig', 'restApiConfigPost', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['restApiConfigPost'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Returns summary of time used info of rest requests sent to appliances\n   *\n   * @function getRestRequestTimeStatsSummary\n   * @param {string} nePk - nePk of the appliance, 'all' means all appliances\n   * @param {string} resource - Base resource of the appliance to sent to, 'all' means all resources\n   * @param {boolean} portalWS - Through what web socket the requests were sent, true -- portal web socket, false -- direct web socket\n   * @param {boolean} timedout - Whether the requests timedout\n   * @param {number} from - The minimum epoch time when the requests were sent\n   * @param {number} to - The maximum epoch time when the requests were sent, 0 stands for till now\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getRestRequestTimeStatsSummary(nePk, resource, portalWS, timedout, from, to, callback) {\n    const meth = 'adapter-getRestRequestTimeStatsSummary';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (resource === undefined || resource === null || resource === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['resource'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (portalWS === undefined || portalWS === null || portalWS === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['portalWS'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (timedout === undefined || timedout === null || timedout === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['timedout'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (from === undefined || from === null || from === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['from'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (to === undefined || to === null || to === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['to'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { nePk, resource, portalWS, timedout, from, to };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('RestRequestTimeStats', 'getRestRequestTimeStatsSummary', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getRestRequestTimeStatsSummary'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary The time used details of all rest requests sent to an appliance's specific resource through portal web socket or web socket\n   *\n   * @function getRestRequestTimeStatsDetails\n   * @param {string} nePk - nePk of the appliance\n   * @param {string} resource - Base resource of the appliance to sent to, for example /webconfig should just be typed webconfig here\n   * @param {boolean} portalWS - Through what web socket this request was sent, true -- portal web socket, false -- direct web socket\n   * @param {string} method - The request method\n   * @param {number} from - The minimum epoch time when the requests were sent\n   * @param {number} to - The maximum epoch time when the requests were sent, 0 stands for till now\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getRestRequestTimeStatsDetails(nePk, resource, portalWS, method = 'GET', from, to, callback) {\n    const meth = 'adapter-getRestRequestTimeStatsDetails';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (resource === undefined || resource === null || resource === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['resource'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (portalWS === undefined || portalWS === null || portalWS === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['portalWS'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (method === undefined || method === null || method === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['method'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (from === undefined || from === null || from === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['from'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (to === undefined || to === null || to === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['to'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { from, to };\n    const queryParams = {};\n    const pathVars = [nePk, resource, portalWS, method];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('RestRequestTimeStats', 'getRestRequestTimeStatsDetails', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getRestRequestTimeStatsDetails'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Applies the RMA wizard\n   *\n   * @function applyRmaWizard\n   * @param {object} applyRmaWizard - applyRmaWizard param\n   * @param {string} nePk - The nePk of the appliance to be replaced\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  applyRmaWizard(applyRmaWizard, nePk, callback) {\n    const meth = 'adapter-applyRmaWizard';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (applyRmaWizard === undefined || applyRmaWizard === null || applyRmaWizard === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['applyRmaWizard'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [nePk];\n    const bodyVars = applyRmaWizard;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('RmaWizard', 'applyRmaWizard', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['applyRmaWizard'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get built-in policy information\n   *\n   * @function samap\n   * @param {string} nePk - Appliance nePk\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  samap(nePk, callback) {\n    const meth = 'adapter-samap';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [nePk];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('SaMap', 'samap', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['samap'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get Security Policies configured on the appliance\n   *\n   * @function securityMaps\n   * @param {string} neId - Unique key assigned by Orchestrator to each appliance, for eg: '0.NE'\n   * @param {boolean} cached - Get data from cache (true) or from appliance (false)\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  securityMaps(neId, cached, callback) {\n    const meth = 'adapter-securityMaps';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neId === undefined || neId === null || neId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (cached === undefined || cached === null || cached === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['cached'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [neId, cached];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('SecurityMaps', 'securityMaps', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['securityMaps'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Returns all the current active sessions\n   *\n   * @function getSessionActiveSessions\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getSessionActiveSessions(callback) {\n    const meth = 'adapter-getSessionActiveSessions';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Session', 'getSessionActiveSessions', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getSessionActiveSessions'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get SNMP information.\n   *\n   * @function snmpGet\n   * @param {string} nePk - the primary key of appliance\n   * @param {boolean} cached - Get data from cache (true) or from appliance (false)\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  snmpGet(nePk, cached, callback) {\n    const meth = 'adapter-snmpGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (cached === undefined || cached === null || cached === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['cached'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [nePk, cached];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Snmp', 'snmpGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['snmpGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Number of times account key has been changed\n   *\n   * @function spPortalAccountKeyChangeCount\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  spPortalAccountKeyChangeCount(callback) {\n    const meth = 'adapter-spPortalAccountKeyChangeCount';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('SpPortal', 'spPortalAccountKeyChangeCount', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['spPortalAccountKeyChangeCount'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Current account key change status\n   *\n   * @function spPortalAccountKeyChangeStatus\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  spPortalAccountKeyChangeStatus(callback) {\n    const meth = 'adapter-spPortalAccountKeyChangeStatus';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('SpPortal', 'spPortalAccountKeyChangeStatus', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['spPortalAccountKeyChangeStatus'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Request Portal to generate a new account key\n   *\n   * @function spPortalAccountKeyGeneratePut\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  spPortalAccountKeyGeneratePut(callback) {\n    const meth = 'adapter-spPortalAccountKeyGeneratePut';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('SpPortal', 'spPortalAccountKeyGeneratePut', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['spPortalAccountKeyGeneratePut'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Assign EC-SP licenses on Portal\n   *\n   * @function spPortalECSPLicenseAssign\n   * @param {object} spPortalECSPLicenseAssign - JSON object containing appliance to license id mappings\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  spPortalECSPLicenseAssign(spPortalECSPLicenseAssign, callback) {\n    const meth = 'adapter-spPortalECSPLicenseAssign';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (spPortalECSPLicenseAssign === undefined || spPortalECSPLicenseAssign === null || spPortalECSPLicenseAssign === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['spPortalECSPLicenseAssign'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = spPortalECSPLicenseAssign;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('SpPortal', 'spPortalECSPLicenseAssign', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['spPortalECSPLicenseAssign'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get EC-SP licenses from Portal\n   *\n   * @function spPortalECSPLicensesGet\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  spPortalECSPLicensesGet(callback) {\n    const meth = 'adapter-spPortalECSPLicensesGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('SpPortal', 'spPortalECSPLicensesGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['spPortalECSPLicensesGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Unassign EC-SP licenses on Portal\n   *\n   * @function spPortalECSPLicenseUnassign\n   * @param {object} spPortalECSPLicenseUnassign - JSON object containing license ids to be unassigned\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  spPortalECSPLicenseUnassign(spPortalECSPLicenseUnassign, callback) {\n    const meth = 'adapter-spPortalECSPLicenseUnassign';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (spPortalECSPLicenseUnassign === undefined || spPortalECSPLicenseUnassign === null || spPortalECSPLicenseUnassign === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['spPortalECSPLicenseUnassign'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = spPortalECSPLicenseUnassign;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('SpPortal', 'spPortalECSPLicenseUnassign', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['spPortalECSPLicenseUnassign'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get account license feature from Portal\n   *\n   * @function spPortalAccountLicenseFeatureGet\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  spPortalAccountLicenseFeatureGet(callback) {\n    const meth = 'adapter-spPortalAccountLicenseFeatureGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('SpPortal', 'spPortalAccountLicenseFeatureGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['spPortalAccountLicenseFeatureGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get account license type from Portal\n   *\n   * @function spPortalAccountLicenseTypeGet\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  spPortalAccountLicenseTypeGet(callback) {\n    const meth = 'adapter-spPortalAccountLicenseTypeGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('SpPortal', 'spPortalAccountLicenseTypeGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['spPortalAccountLicenseTypeGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Delete old account key from Portal\n   *\n   * @function spPortalDeleteOldKey\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  spPortalDeleteOldKey(callback) {\n    const meth = 'adapter-spPortalDeleteOldKey';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('SpPortal', 'spPortalDeleteOldKey', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['spPortalDeleteOldKey'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Test if appliance is reachable via websocket from orchestrator\n   *\n   * @function checkApplianceReachabilityUsingWSGet\n   * @param {number} neId - Unique key assigned by Orchestrator to each appliance, for eg: '0.NE'\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  checkApplianceReachabilityUsingWSGet(neId, callback) {\n    const meth = 'adapter-checkApplianceReachabilityUsingWSGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neId === undefined || neId === null || neId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('SpPortal', 'checkApplianceReachabilityUsingWSGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['checkApplianceReachabilityUsingWSGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get application groups from portal\n   *\n   * @function appGroupTmpGet\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  appGroupTmpGet(callback) {\n    const meth = 'adapter-appGroupTmpGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('SpPortal', 'appGroupTmpGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['appGroupTmpGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get the hash code for application groups data from portal\n   *\n   * @function appGroupTmpHashCodeGet\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  appGroupTmpHashCodeGet(callback) {\n    const meth = 'adapter-appGroupTmpHashCodeGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('SpPortal', 'appGroupTmpHashCodeGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['appGroupTmpHashCodeGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get application definition for Compound data from portal\n   *\n   * @function compoundTmpGet\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  compoundTmpGet(callback) {\n    const meth = 'adapter-compoundTmpGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('SpPortal', 'compoundTmpGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['compoundTmpGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get the hash code for application definition data for Compound data from portal\n   *\n   * @function compoundTmpHashCodeGet\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  compoundTmpHashCodeGet(callback) {\n    const meth = 'adapter-compoundTmpHashCodeGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('SpPortal', 'compoundTmpHashCodeGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['compoundTmpHashCodeGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get Silver Peak Cloud Portal registration information\n   *\n   * @function spPortalConfigGet\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  spPortalConfigGet(callback) {\n    const meth = 'adapter-spPortalConfigGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('SpPortal', 'spPortalConfigGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['spPortalConfigGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Post Silver Peak Cloud Portal registration information\n   *\n   * @function spPortalConfigPost\n   * @param {object} spPortalConfig - spPortalConfig param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  spPortalConfigPost(spPortalConfig, callback) {\n    const meth = 'adapter-spPortalConfigPost';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (spPortalConfig === undefined || spPortalConfig === null || spPortalConfig === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['spPortalConfig'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = spPortalConfig;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('SpPortal', 'spPortalConfigPost', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['spPortalConfigPost'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get Orchestrator to Silver Peak Portal connectivity status\n   *\n   * @function connectivityGet\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  connectivityGet(callback) {\n    const meth = 'adapter-connectivityGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('SpPortal', 'connectivityGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['connectivityGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Create a case\n   *\n   * @function spPortalCreateCasePost\n   * @param {object} spPortalCreateCaseWithPortal - JSON object containing case information that will be used to create a case.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  spPortalCreateCasePost(spPortalCreateCaseWithPortal, callback) {\n    const meth = 'adapter-spPortalCreateCasePost';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (spPortalCreateCaseWithPortal === undefined || spPortalCreateCaseWithPortal === null || spPortalCreateCaseWithPortal === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['spPortalCreateCaseWithPortal'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = spPortalCreateCaseWithPortal;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('SpPortal', 'spPortalCreateCasePost', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['spPortalCreateCasePost'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get application definition for Domain Name from portal\n   *\n   * @function dnsTmpGet\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  dnsTmpGet(callback) {\n    const meth = 'adapter-dnsTmpGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('SpPortal', 'dnsTmpGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['dnsTmpGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get the hash code for application definition data for Domain Name from portal\n   *\n   * @function dnsTmpHashCodeGet\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  dnsTmpHashCodeGet(callback) {\n    const meth = 'adapter-dnsTmpHashCodeGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('SpPortal', 'dnsTmpHashCodeGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['dnsTmpHashCodeGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get geolocation information for multiple ip's from portal\n   *\n   * @function geoLocationPost\n   * @param {array} geoLocationPostBody - JSON object containing array of ip's to be geo located\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  geoLocationPost(geoLocationPostBody, callback) {\n    const meth = 'adapter-geoLocationPost';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (geoLocationPostBody === undefined || geoLocationPostBody === null || geoLocationPostBody === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['geoLocationPostBody'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = { geoLocationPostBody };\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('SpPortal', 'geoLocationPost', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['geoLocationPost'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get geolocation information for a single ip from portal\n   *\n   * @function geoLocationGet\n   * @param {number} ip - IP Address to be geo located in 32-bit integer format\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  geoLocationGet(ip, callback) {\n    const meth = 'adapter-geoLocationGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (ip === undefined || ip === null || ip === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['ip'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('SpPortal', 'geoLocationGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['geoLocationGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get application definition data for Address Map from portal\n   *\n   * @function ipIntelligenceTmpGet\n   * @param {number} start - start id, start from 0\n   * @param {number} limit - limit number, maximum is 10000\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  ipIntelligenceTmpGet(start, limit, callback) {\n    const meth = 'adapter-ipIntelligenceTmpGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (start === undefined || start === null || start === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['start'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (limit === undefined || limit === null || limit === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['limit'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { start, limit };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('SpPortal', 'ipIntelligenceTmpGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['ipIntelligenceTmpGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get the last update time for application definition data for Address Map from portal\n   *\n   * @function ipIntelligenceTmpTimeGet\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  ipIntelligenceTmpTimeGet(callback) {\n    const meth = 'adapter-ipIntelligenceTmpTimeGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('SpPortal', 'ipIntelligenceTmpTimeGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['ipIntelligenceTmpTimeGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Search application definition data for Address Map from portal\n   *\n   * @function getSpPortalInternetDbIpIntelligenceSearch\n   * @param {number} ip - IPv4 address in 32-bit integer format\n   * @param {string} filter - String filter\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getSpPortalInternetDbIpIntelligenceSearch(ip, filter, callback) {\n    const meth = 'adapter-getSpPortalInternetDbIpIntelligenceSearch';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { ip, filter };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('SpPortal', 'getSpPortalInternetDbIpIntelligenceSearch', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getSpPortalInternetDbIpIntelligenceSearch'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get count for application definition data for Address Map from portal\n   *\n   * @function ipIntelligenceTmpTotal\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  ipIntelligenceTmpTotal(callback) {\n    const meth = 'adapter-ipIntelligenceTmpTotal';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('SpPortal', 'ipIntelligenceTmpTotal', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['ipIntelligenceTmpTotal'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get service id to service details mapping\n   *\n   * @function serviceIdToSaasIdGet\n   * @param {string} matchAny - Wildcard match on country, org, saasAppName\n   * @param {string} org - Wildcard match on org\n   * @param {string} serviceIds - Only return these serviceIds. Separate multiple serviceIds with a comma ','\n   * @param {number} top - Return top x matches\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  serviceIdToSaasIdGet(matchAny, org, serviceIds, top, callback) {\n    const meth = 'adapter-serviceIdToSaasIdGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { matchAny, org, serviceIds, top };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('SpPortal', 'serviceIdToSaasIdGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['serviceIdToSaasIdGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get count of internet services on this appliance\n   *\n   * @function serviceIdToSaasIdCountGet\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  serviceIdToSaasIdCountGet(callback) {\n    const meth = 'adapter-serviceIdToSaasIdCountGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('SpPortal', 'serviceIdToSaasIdCountGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['serviceIdToSaasIdCountGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get a list of unique countries in the internet services database\n   *\n   * @function serviceIdToSaasIdCountriesGet\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  serviceIdToSaasIdCountriesGet(callback) {\n    const meth = 'adapter-serviceIdToSaasIdCountriesGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('SpPortal', 'serviceIdToSaasIdCountriesGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['serviceIdToSaasIdCountriesGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get a list of unique saas applications in the internet services database\n   *\n   * @function serviceIdToSaasIdSaasAppGet\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  serviceIdToSaasIdSaasAppGet(callback) {\n    const meth = 'adapter-serviceIdToSaasIdSaasAppGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('SpPortal', 'serviceIdToSaasIdSaasAppGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['serviceIdToSaasIdSaasAppGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get IP Protocol Numbers data\n   *\n   * @function ipProtocolNumbersGet\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  ipProtocolNumbersGet(callback) {\n    const meth = 'adapter-ipProtocolNumbersGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('SpPortal', 'ipProtocolNumbersGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['ipProtocolNumbersGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get application definition for Meter Flow from portal\n   *\n   * @function meterFlowTmpGet\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  meterFlowTmpGet(callback) {\n    const meth = 'adapter-meterFlowTmpGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('SpPortal', 'meterFlowTmpGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['meterFlowTmpGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get the hash code for application definition data for Meter Flow from portal\n   *\n   * @function meterFlowTmpHashCodeGet\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  meterFlowTmpHashCodeGet(callback) {\n    const meth = 'adapter-meterFlowTmpHashCodeGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('SpPortal', 'meterFlowTmpHashCodeGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['meterFlowTmpHashCodeGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get application definition for IP Protocol, TCP Port, UDP Port from portal\n   *\n   * @function portProtocolTmpGet\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  portProtocolTmpGet(callback) {\n    const meth = 'adapter-portProtocolTmpGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('SpPortal', 'portProtocolTmpGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['portProtocolTmpGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get the hash code for application definition data for IP Protocol, TCP Port, UDP Port from portal\n   *\n   * @function portProtocolTmpHashCodeGet\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  portProtocolTmpHashCodeGet(callback) {\n    const meth = 'adapter-portProtocolTmpHashCodeGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('SpPortal', 'portProtocolTmpHashCodeGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['portProtocolTmpHashCodeGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get current GMS-Portal registration status\n   *\n   * @function gmsPortalRegistrationGet\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  gmsPortalRegistrationGet(callback) {\n    const meth = 'adapter-gmsPortalRegistrationGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('SpPortal', 'gmsPortalRegistrationGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['gmsPortalRegistrationGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Initiate GMS-Portal Registration\n   *\n   * @function gmsPortalRegistrationPost\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  gmsPortalRegistrationPost(callback) {\n    const meth = 'adapter-gmsPortalRegistrationPost';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('SpPortal', 'gmsPortalRegistrationPost', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['gmsPortalRegistrationPost'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get application definition for SaaS data from portal\n   *\n   * @function saasTmpGet\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  saasTmpGet(callback) {\n    const meth = 'adapter-saasTmpGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('SpPortal', 'saasTmpGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['saasTmpGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get the hash code for application definition data for SaaS data from portal\n   *\n   * @function saasTmpHashCodeGet\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  saasTmpHashCodeGet(callback) {\n    const meth = 'adapter-saasTmpHashCodeGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('SpPortal', 'saasTmpHashCodeGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['saasTmpHashCodeGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Debug API to view current status of all Portal related services\n   *\n   * @function spPortalStatusGet\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  spPortalStatusGet(callback) {\n    const meth = 'adapter-spPortalStatusGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('SpPortal', 'spPortalStatusGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['spPortalStatusGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get TCP/UDP ports data\n   *\n   * @function tcpUdpPortsGet\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  tcpUdpPortsGet(callback) {\n    const meth = 'adapter-tcpUdpPortsGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('SpPortal', 'tcpUdpPortsGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['tcpUdpPortsGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get list of top internet sites\n   *\n   * @function topSitesGet\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  topSitesGet(callback) {\n    const meth = 'adapter-topSitesGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('SpPortal', 'topSitesGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['topSitesGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get traffic behavior categories from portal\n   *\n   * @function tbTmpGet\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  tbTmpGet(callback) {\n    const meth = 'adapter-tbTmpGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('SpPortal', 'tbTmpGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['tbTmpGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get the hash code for traffic behavior categories data from portal\n   *\n   * @function tbTmpHashCodeGet\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  tbTmpHashCodeGet(callback) {\n    const meth = 'adapter-tbTmpHashCodeGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('SpPortal', 'tbTmpHashCodeGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['tbTmpHashCodeGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get all SSL certificates on the appliance\n   *\n   * @function sslCertsGet\n   * @param {string} neId - Internal Id of the appliance from which you want to retrieve status information\n   * @param {boolean} cached - Get data from cache (true) or from appliance (false)\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  sslCertsGet(neId, cached, callback) {\n    const meth = 'adapter-sslCertsGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neId === undefined || neId === null || neId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (cached === undefined || cached === null || cached === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['cached'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [neId, cached];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Ssl', 'sslCertsGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['sslCertsGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary This API will take certificate date and return certificate information in text\n   *\n   * @function sslCACertGetTextPost\n   * @param {object} sslCACertsFile - A JSON object representing CA SSL certificate data\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  sslCACertGetTextPost(sslCACertsFile, callback) {\n    const meth = 'adapter-sslCACertGetTextPost';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (sslCACertsFile === undefined || sslCACertsFile === null || sslCACertsFile === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['sslCACertsFile'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = sslCACertsFile;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('SslCACertificate', 'sslCACertGetTextPost', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['sslCACertGetTextPost'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Validate the SSL CA certificate file.\n   *\n   * @function sslCACertValidation\n   * @param {object} sslCACertValidation - A JSON object representing SSL certificate\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  sslCACertValidation(sslCACertValidation, callback) {\n    const meth = 'adapter-sslCACertValidation';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (sslCACertValidation === undefined || sslCACertValidation === null || sslCACertValidation === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['sslCACertValidation'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = sslCACertValidation;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('SslCACertificate', 'sslCACertValidation', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['sslCACertValidation'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get all CA SSL certificates on the appliance.\n   *\n   * @function sslCACerts\n   * @param {string} neId - Internal Id of the appliance from which you want to retrieve status information\n   * @param {boolean} cached - Get data from cache (true) or from appliance (false).\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  sslCACerts(neId, cached, callback) {\n    const meth = 'adapter-sslCACerts';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neId === undefined || neId === null || neId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (cached === undefined || cached === null || cached === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['cached'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [neId, cached];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('SslCACertificate', 'sslCACerts', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['sslCACerts'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary This API will take certificate date and return certificate information\n   *\n   * @function sslCertGetInfoPost\n   * @param {object} sslCertGetInfoPost - A JSON object representing SSL certificate\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  sslCertGetInfoPost(sslCertGetInfoPost, callback) {\n    const meth = 'adapter-sslCertGetInfoPost';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (sslCertGetInfoPost === undefined || sslCertGetInfoPost === null || sslCertGetInfoPost === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['sslCertGetInfoPost'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = sslCertGetInfoPost;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('SslCertificate', 'sslCertGetInfoPost', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['sslCertGetInfoPost'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary This API will take certificate date and return certificate information in text\n   *\n   * @function sslCertGetTextPost\n   * @param {object} sslCertGetTextPost - A JSON object representing SSL certificate\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  sslCertGetTextPost(sslCertGetTextPost, callback) {\n    const meth = 'adapter-sslCertGetTextPost';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (sslCertGetTextPost === undefined || sslCertGetTextPost === null || sslCertGetTextPost === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['sslCertGetTextPost'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = sslCertGetTextPost;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('SslCertificate', 'sslCertGetTextPost', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['sslCertGetTextPost'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Validate the SSL Substitute certificate\n   *\n   * @function sslSubstituteCertValidation\n   * @param {object} sslSubstituteCertValidation - A JSON object representing SSL Substitute certificate file\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  sslSubstituteCertValidation(sslSubstituteCertValidation, callback) {\n    const meth = 'adapter-sslSubstituteCertValidation';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (sslSubstituteCertValidation === undefined || sslSubstituteCertValidation === null || sslSubstituteCertValidation === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['sslSubstituteCertValidation'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = sslSubstituteCertValidation;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('SslSubstituteCertificate', 'sslSubstituteCertValidation', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['sslSubstituteCertValidation'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get all SSL Substitute certificates on the appliance.\n   *\n   * @function sslSubstituteCertGet\n   * @param {string} id - Internal Id of the appliance from which you want to retrieve status information\n   * @param {boolean} cached - Get data from cache (true) or from appliance (false).\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  sslSubstituteCertGet(id, cached, callback) {\n    const meth = 'adapter-sslSubstituteCertGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (id === undefined || id === null || id === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['id'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (cached === undefined || cached === null || cached === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['cached'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [id, cached];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('SslSubstituteCertificate', 'sslSubstituteCertGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['sslSubstituteCertGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get aggregate appliance stats data filter by query parameters.\n   *\n   * @function statsAggregateTunnel\n   * @param {number} startTime - Long(Signed 64 bits) value of EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of EPOCH time indicating the ending time boundary of data time range\n   * @param {string} granularity - Data granularity filtering whether data is minutely data, hourly data or daily data.\n   * @param {string} groupPk - Filter data for a specific group\n   * @param {string} trafficType - Filter for data for given traffic type\n   * @param {boolean} ip - Using IP as key for grouping stats instead of using internal appliance id as key.\n   * @param {string} metric - If this query parameter is given, we aggregate stats in a way that we sort stats by this {metric}. This query parameter could also be used with {top} query parameters to ...(description truncated)\n   * @param {number} top - This parameter should be provided together with {metric} as this query parameter is used to indicate top x items of a metric. Example, if metric=throughput&top=10 is prov...(description truncated)\n   * @param {string} format - The only format other than JSON we support currently is CSV, so format=csv.\n   * @param {boolean} groupByNE - Boolean value indicating whether you want to group aggregate stats by appliance, if true is provided, there will be an extra level of key inside each tunnel stats object ...(description truncated)\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  statsAggregateTunnel(startTime, endTime, granularity = 'minute', groupPk, trafficType = 'optimized_traffic', ip, metric = 'throughput', top, format = 'CSV', groupByNE, callback) {\n    const meth = 'adapter-statsAggregateTunnel';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (granularity === undefined || granularity === null || granularity === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['granularity'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, granularity, groupPk, trafficType, ip, metric, top, format, groupByNE };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'statsAggregateTunnel', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['statsAggregateTunnel'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get aggregate appliance stats data filter by query parameters.\n   *\n   * @function postStatsAggregateAppliance\n   * @param {object} applianceIDs - JSON array containing appliance IDs you want to filter on.\n   * @param {number} startTime - Long(Signed 64 bits) value of EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of EPOCH time indicating the ending time boundary of data time range\n   * @param {string} granularity - Data granularity filtering whether data is minutely data, hourly data or daily data.\n   * @param {string} trafficType - Filter for data for given traffic type\n   * @param {boolean} ip - Using IP as key for grouping stats instead of using internal appliance id as key.\n   * @param {string} metric - If this query parameter is given, we aggregate stats in a way that we sort stats by this {metric}. This query parameter could also be used with {top} query parameters to ...(description truncated)\n   * @param {number} top - This parameter should be provided together with {metric} as this query parameter is used to indicate top x items of a metric. Example, if metric=throughput&top=10 is prov...(description truncated)\n   * @param {string} format - The only format other than JSON we support currently is CSV, so format=csv.\n   * @param {boolean} groupByNE - Boolean value indicating whether you want to group aggregate stats by appliance, if true is provided, there will be an extra level of key inside each tunnel stats object ...(description truncated)\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  postStatsAggregateAppliance(applianceIDs, startTime, endTime, granularity = 'minute', trafficType = 'optimized_traffic', ip, metric = 'throughput', top, format = 'csv', groupByNE, callback) {\n    const meth = 'adapter-postStatsAggregateAppliance';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (applianceIDs === undefined || applianceIDs === null || applianceIDs === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['applianceIDs'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (granularity === undefined || granularity === null || granularity === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['granularity'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, granularity, trafficType, ip, metric, top, format, groupByNE };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = applianceIDs;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'postStatsAggregateAppliance', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['postStatsAggregateAppliance'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get aggregate appliance stats data for a single appliance filter by query parameters.\n   *\n   * @function getStatsAggregateApplianceNePk\n   * @param {string} nePk - Appliance internal id to filter from.\n   * @param {number} startTime - Long(Signed 64 bits) value of EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of EPOCH time indicating the ending time boundary of data time range\n   * @param {string} granularity - Data granularity filtering whether data is minutely data, hourly data or daily data.\n   * @param {string} trafficType - Filter for data for given traffic type\n   * @param {boolean} ip - Using IP as key for grouping stats instead of using internal appliance id as key.\n   * @param {string} metric - If this query parameter is given, we aggregate stats in a way that we sort stats by this {metric}. This query parameter could also be used with {top} query parameters to ...(description truncated)\n   * @param {number} top - This parameter should be provided together with {metric} as this query parameter is used to indicate top x items of a metric. Example, if metric=throughput&top=10 is prov...(description truncated)\n   * @param {string} format - The only format other than JSON we support currently is CSV, so format=csv.\n   * @param {boolean} groupByNE - Boolean value indicating whether you want to group aggregate stats by appliance, if true is provided, there will be an extra level of key inside each tunnel stats object ...(description truncated)\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getStatsAggregateApplianceNePk(nePk, startTime, endTime, granularity = 'minute', trafficType = 'optimized_traffic', ip, metric = 'throughput', top, format = 'csv', groupByNE, callback) {\n    const meth = 'adapter-getStatsAggregateApplianceNePk';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (granularity === undefined || granularity === null || granularity === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['granularity'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, granularity, trafficType, ip, metric, top, format, groupByNE };\n    const queryParams = {};\n    const pathVars = [nePk];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'getStatsAggregateApplianceNePk', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getStatsAggregateApplianceNePk'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get aggregate application stats data filter by query parameters\n   *\n   * @function statsAggregateApplication\n   * @param {number} startTime - Long(Signed 64 bits) value of EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of EPOCH time indicating the ending time boundary of data time range\n   * @param {string} granularity - Data granularity filtering whether data is minutely data, hourly data or daily data.\n   * @param {string} groupPk - Filter data for a specific group\n   * @param {string} application - Filter for data which belongs to application with name {application}\n   * @param {string} trafficType - Filter for data for given traffic type\n   * @param {boolean} ip - Using IP as key for grouping stats instead of using internal appliance id as key.\n   * @param {string} metric - If this query parameter is given, we aggregate stats in a way that we sort stats by this {metric}. This query parameter could also be used with {top} query parameters to ...(description truncated)\n   * @param {number} top - This parameter should be provided together with {metric} as this query parameter is used to indicate top x items of a metric. Example, if metric=throughput&top=10 is prov...(description truncated)\n   * @param {string} format - The only format other than JSON we support currently is CSV, so format=csv.\n   * @param {boolean} groupByNE - Boolean value indicating whether you want to group aggregate stats by appliance, if true is provided, there will be an extra level of key inside each tunnel stats object ...(description truncated)\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  statsAggregateApplication(startTime, endTime, granularity = 'minute', groupPk, application, trafficType = 'optimized_traffic', ip, metric = 'throughput', top, format = 'CSV', groupByNE, callback) {\n    const meth = 'adapter-statsAggregateApplication';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (granularity === undefined || granularity === null || granularity === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['granularity'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, granularity, groupPk, application, trafficType, ip, metric, top, format, groupByNE };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'statsAggregateApplication', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['statsAggregateApplication'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get aggregate application stats data filter by query parameters\n   *\n   * @function postStatsAggregateApplication\n   * @param {object} applianceIDs - JSON array containing appliance IDs you want to filter on.\n   * @param {number} startTime - Long(Signed 64 bits) value of EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of EPOCH time indicating the ending time boundary of data time range\n   * @param {string} granularity - Data granularity filtering whether data is minutely data, hourly data or daily data.\n   * @param {string} application - Filter for data which belongs to application with name {application}\n   * @param {string} trafficType - Filter for data for given traffic type\n   * @param {boolean} ip - Using IP as key for grouping stats instead of using internal appliance id as key.\n   * @param {string} metric - If this query parameter is given, we aggregate stats in a way that we sort stats by this {metric}. This query parameter could also be used with {top} query parameters to ...(description truncated)\n   * @param {number} top - This parameter should be provided together with {metric} as this query parameter is used to indicate top x items of a metric. Example, if metric=throughput&top=10 is prov...(description truncated)\n   * @param {string} format - The only format other than JSON we support currently is CSV, so format=csv.\n   * @param {boolean} groupByNE - Boolean value indicating whether you want to group aggregate stats by appliance, if true is provided, there will be an extra level of key inside each tunnel stats object ...(description truncated)\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  postStatsAggregateApplication(applianceIDs, startTime, endTime, granularity = 'minute', application, trafficType = 'optimized_traffic', ip, metric = 'throughput', top, format = 'csv', groupByNE, callback) {\n    const meth = 'adapter-postStatsAggregateApplication';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (applianceIDs === undefined || applianceIDs === null || applianceIDs === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['applianceIDs'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (granularity === undefined || granularity === null || granularity === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['granularity'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, granularity, application, trafficType, ip, metric, top, format, groupByNE };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = applianceIDs;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'postStatsAggregateApplication', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['postStatsAggregateApplication'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get aggregate application stats data for a single appliance filter by query parameters\n   *\n   * @function getStatsAggregateApplicationNePk\n   * @param {string} nePk - Appliance internal id to filter from.\n   * @param {number} startTime - Long(Signed 64 bits) value of EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of EPOCH time indicating the ending time boundary of data time range\n   * @param {string} granularity - Data granularity filtering whether data is minutely data, hourly data or daily data.\n   * @param {string} application - Filter for data which belongs to application with name {application}\n   * @param {string} trafficType - Filter for data for given traffic type\n   * @param {boolean} ip - Using IP as key for grouping stats instead of using internal appliance id as key.\n   * @param {string} metric - If this query parameter is given, we aggregate stats in a way that we sort stats by this {metric}. This query parameter could also be used with {top} query parameters to ...(description truncated)\n   * @param {number} top - This parameter should be provided together with {metric} as this query parameter is used to indicate top x items of a metric. Example, if metric=throughput&top=10 is prov...(description truncated)\n   * @param {string} format - The only format other than JSON we support currently is CSV, so format=csv.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getStatsAggregateApplicationNePk(nePk, startTime, endTime, granularity = 'minute', application, trafficType = 'optimized_traffic', ip, metric = 'throughput', top, format = 'csv', callback) {\n    const meth = 'adapter-getStatsAggregateApplicationNePk';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (granularity === undefined || granularity === null || granularity === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['granularity'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, granularity, application, trafficType, ip, metric, top, format };\n    const queryParams = {};\n    const pathVars = [nePk];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'getStatsAggregateApplicationNePk', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getStatsAggregateApplicationNePk'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get aggregate application stats data filter by query parameters\n   *\n   * @function getStatsAggregateApplication2\n   * @param {number} startTime - Long(Signed 64 bits) value of EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of EPOCH time indicating the ending time boundary of data time range\n   * @param {string} groupPk - Filter data for a specific group\n   * @param {string} application - Filter for data which belongs to application with name {application}\n   * @param {number} top - Retrieve top 10 applications by throughput.\n   * @param {string} format - The only format other than JSON we support currently is CSV, so format=csv.\n   * @param {boolean} groupByNE - Boolean value indicating whether you want to group aggregate stats by appliance, if true is provided, there will be an extra level of key inside each tunnel stats object ...(description truncated)\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getStatsAggregateApplication2(startTime, endTime, groupPk, application, top, format = 'CSV', groupByNE, callback) {\n    const meth = 'adapter-getStatsAggregateApplication2';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, groupPk, application, top, format, groupByNE };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'getStatsAggregateApplication2', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getStatsAggregateApplication2'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get aggregate application stats data filter by query parameters\n   *\n   * @function postStatsAggregateApplication2\n   * @param {object} applianceIDs - JSON array containing appliance IDs you want to filter on.\n   * @param {number} startTime - Long(Signed 64 bits) value of EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of EPOCH time indicating the ending time boundary of data time range\n   * @param {string} application - Filter for data which belongs to application with name {application}\n   * @param {number} top - Retrieve top 10 applications by throughput.\n   * @param {string} format - The only format other than JSON we support currently is CSV, so format=csv.\n   * @param {boolean} groupByNE - Boolean value indicating whether you want to group aggregate stats by appliance, if true is provided, there will be an extra level of key inside each tunnel stats object ...(description truncated)\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  postStatsAggregateApplication2(applianceIDs, startTime, endTime, application, top, format = 'csv', groupByNE, callback) {\n    const meth = 'adapter-postStatsAggregateApplication2';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (applianceIDs === undefined || applianceIDs === null || applianceIDs === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['applianceIDs'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, application, top, format, groupByNE };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = applianceIDs;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'postStatsAggregateApplication2', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['postStatsAggregateApplication2'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get aggregate application stats data for a single appliance filter by query parameters\n   *\n   * @function getStatsAggregateApplication2NePk\n   * @param {string} nePk - Appliance internal id to filter from.\n   * @param {number} startTime - Long(Signed 64 bits) value of EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of EPOCH time indicating the ending time boundary of data time range\n   * @param {string} application - Filter for data which belongs to application with name {application}\n   * @param {number} top - Retrieve top 10 applications by throughput.\n   * @param {string} format - The only format other than JSON we support currently is CSV, so format=csv.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getStatsAggregateApplication2NePk(nePk, startTime, endTime, application, top, format = 'csv', callback) {\n    const meth = 'adapter-getStatsAggregateApplication2NePk';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, application, top, format };\n    const queryParams = {};\n    const pathVars = [nePk];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'getStatsAggregateApplication2NePk', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getStatsAggregateApplication2NePk'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get aggregate boost stats data\n   *\n   * @function boostAggregateStats\n   * @param {object} applianceIDs - JSON array containing appliance IDs you want to filter on.\n   * @param {number} startTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the ending time boundary of data time range\n   * @param {string} granularity - Data granularity filtering whether data is minutely data, hourly data or daily data.\n   * @param {number} top - Indicate top x items\n   * @param {string} format - The only format other than JSON we support currently is CSV, so format=csv.\n   * @param {boolean} groupByNE - Boolean value indicating whether you want to group aggregate stats by appliance, if true is provided, there will be an extra level of key inside each tunnel stats object ...(description truncated)\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  boostAggregateStats(applianceIDs, startTime, endTime, granularity = 'minute', top, format = 'csv', groupByNE, callback) {\n    const meth = 'adapter-boostAggregateStats';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (applianceIDs === undefined || applianceIDs === null || applianceIDs === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['applianceIDs'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (granularity === undefined || granularity === null || granularity === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['granularity'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, granularity, top, format, groupByNE };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = applianceIDs;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'boostAggregateStats', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['boostAggregateStats'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get aggregate boost stats data\n   *\n   * @function getStatsAggregateBoostNePk\n   * @param {string} nePk - Appliance internal id to filter from.\n   * @param {number} startTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the ending time boundary of data time range\n   * @param {string} granularity - Data granularity filtering whether data is minutely data, hourly data or daily data.\n   * @param {string} tunnelName - Filter for data which belongs to tunnel with name {tunnelName}\n   * @param {number} top - Indicate top x items\n   * @param {string} overlay - When it is '0',return all physical tunnels;when it is not given,return all bonded and physical tunnels;otherwise,return bonded tunnels associated with the overlay id.\n   * @param {string} format - The only format other than JSON we support currently is CSV, so format=csv.\n   * @param {boolean} groupByNE - Boolean value indicating whether you want to group aggregate stats by appliance, if true is provided, there will be an extra level of key inside each tunnel stats object ...(description truncated)\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getStatsAggregateBoostNePk(nePk, startTime, endTime, granularity = 'minute', tunnelName, top, overlay, format = 'csv', groupByNE, callback) {\n    const meth = 'adapter-getStatsAggregateBoostNePk';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (granularity === undefined || granularity === null || granularity === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['granularity'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, granularity, tunnelName, top, overlay, format, groupByNE };\n    const queryParams = {};\n    const pathVars = [nePk];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'getStatsAggregateBoostNePk', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getStatsAggregateBoostNePk'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get aggregate dns stats data filter by query parameters.\n   *\n   * @function dNSStatsAggregate\n   * @param {number} startTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the ending time boundary of data time range\n   * @param {number} isSource - Integer value representing whether dns is from source or destination\n   * @param {number} splitType - Filter data for a specific type, where 0 is for 'http', 1 is for 'https', 2 is for 'unassigned' and 3 is for 'others'\n   * @param {number} top - No. of rows to return\n   * @param {boolean} splitByNe - Boolean value indicating whether you want to split aggregate stats by appliance, if true is provided, there will be an extra level of key inside each stats object indicat...(description truncated)\n   * @param {string} groupBy - Group the data based on this value. Default value is dns.\n   * @param {number} groupBySubDomains - Group the data based on this value.Integer value represents number of sub-domains. Default value is 2.\n   * @param {string} format - The only format other than JSON we support currently is CSV, so format=csv.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  dNSStatsAggregate(startTime, endTime, isSource = '0', splitType, top, splitByNe, groupBy, groupBySubDomains, format = 'csv', callback) {\n    const meth = 'adapter-dNSStatsAggregate';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, isSource, splitType, top, splitByNe, groupBy, groupBySubDomains, format };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'dNSStatsAggregate', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['dNSStatsAggregate'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get aggregate dns stats data filter by query parameters.\n   *\n   * @function statsAggregateDns\n   * @param {object} applianceIDs - JSON array containing appliance IDs you want to filter on.\n   * @param {number} startTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the ending time boundary of data time range\n   * @param {number} isSource - Integer value representing whether dns is from source or destination\n   * @param {number} splitType - Filter data for a specific type, where 0 is for 'http', 1 is for 'https', 2 is for 'unassigned' and 3 is for 'others'\n   * @param {number} top - No. of rows to return\n   * @param {boolean} splitByNe - Boolean value indicating whether you want to split aggregate stats by appliance, if true is provided, there will be an extra level of key inside each stats object indicat...(description truncated)\n   * @param {string} groupBy - Group the data based on this value. Default value is dns.\n   * @param {number} groupBySubDomains - Group the data based on this value.Integer value represents number of sub-domains. Default value is 2.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  statsAggregateDns(applianceIDs, startTime, endTime, isSource = '0', splitType, top, splitByNe, groupBy, groupBySubDomains, callback) {\n    const meth = 'adapter-statsAggregateDns';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (applianceIDs === undefined || applianceIDs === null || applianceIDs === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['applianceIDs'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, isSource, splitType, top, splitByNe, groupBy, groupBySubDomains };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = applianceIDs;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'statsAggregateDns', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['statsAggregateDns'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get aggregate dns stats data for a single appliance filter by query parameters.\n   *\n   * @function getStatsAggregateDnsNePk\n   * @param {string} nePk - Appliance internal id to filter from.\n   * @param {number} startTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the ending time boundary of data time range\n   * @param {number} isSource - Integer value representing whether dns is from source or destination\n   * @param {number} splitType - Filter data for a specific type, where 0 is for 'http', 1 is for 'https', 2 is for 'unassigned' and 3 is for 'others'\n   * @param {number} top - No. of rows to return\n   * @param {boolean} splitByNe - Boolean value indicating whether you want to split aggregate stats by appliance, if true is provided, there will be an extra level of key inside each stats object indicat...(description truncated)\n   * @param {string} groupBy - Group the data based on this value. Default value is dns.\n   * @param {number} groupBySubDomains - Group the data based on this value.Integer value represents number of sub-domains. Default value is 2.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getStatsAggregateDnsNePk(nePk, startTime, endTime, isSource = '0', splitType, top, splitByNe, groupBy, groupBySubDomains, callback) {\n    const meth = 'adapter-getStatsAggregateDnsNePk';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, isSource, splitType, top, splitByNe, groupBy, groupBySubDomains };\n    const queryParams = {};\n    const pathVars = [nePk];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'getStatsAggregateDnsNePk', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getStatsAggregateDnsNePk'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get aggregate tunnel drc stats data filter by query parameters.\n   *\n   * @function statsAggregateDrcTunnel\n   * @param {number} startTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the ending time boundary of data time range\n   * @param {string} granularity - Data granularity filtering whether data is minutely data, hourly data or daily data.\n   * @param {string} groupPk - Filter data for a specific group\n   * @param {number} top - Indicate top x items\n   * @param {string} overlay - when it is 'all',return all bonded tunnels;when it is '0',return all physical tunnels;when it is not given,return all bonded and physical tunnels;otherwise,return bonded ...(description truncated)\n   * @param {string} format - The only format other than JSON we support currently is CSV, so format=csv.\n   * @param {boolean} groupByNE - Boolean value indicating whether you want to group aggregate stats by appliance, if true is provided, there will be an extra column inside each tunnel stats record in CSV...(description truncated)\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  statsAggregateDrcTunnel(startTime, endTime, granularity = 'minute', groupPk, top, overlay, format = 'CSV', groupByNE, callback) {\n    const meth = 'adapter-statsAggregateDrcTunnel';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (granularity === undefined || granularity === null || granularity === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['granularity'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, granularity, groupPk, top, overlay, format, groupByNE };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'statsAggregateDrcTunnel', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['statsAggregateDrcTunnel'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get aggregate tunnel drc stats data filter by query parameters.\n   *\n   * @function statsDrcAggregateTunnel\n   * @param {object} applianceIDs - JSON array containing appliance IDs you want to filter on.\n   * @param {number} startTime - Long(Signed 64 bits) value of EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of EPOCH time indicating the ending time boundary of data time range\n   * @param {string} granularity - Data granularity filtering whether data is minutely data, hourly data or daily data.\n   * @param {number} top - Indicate top x items\n   * @param {string} overlay - when it is 'all',return all bonded tunnels;when it is '0',return all physical tunnels;when it is not given,return all bonded and physical tunnels;otherwise,return bonded ...(description truncated)\n   * @param {string} format - The only format other than JSON we support currently is CSV, so format=csv.\n   * @param {boolean} groupByNE - Boolean value indicating whether you want to group aggregate stats by appliance, if true is provided, there will be an extra column inside each tunnel stats record in CSV...(description truncated)\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  statsDrcAggregateTunnel(applianceIDs, startTime, endTime, granularity = 'minute', top, overlay, format = 'csv', groupByNE, callback) {\n    const meth = 'adapter-statsDrcAggregateTunnel';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (applianceIDs === undefined || applianceIDs === null || applianceIDs === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['applianceIDs'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (granularity === undefined || granularity === null || granularity === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['granularity'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, granularity, top, overlay, format, groupByNE };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = applianceIDs;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'statsDrcAggregateTunnel', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['statsDrcAggregateTunnel'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get aggregate tunnel drc stats data for a single appliance filter by query parameters.\n   *\n   * @function getStatsAggregateDrcNePk\n   * @param {string} nePk - Appliance internal id to filter from.\n   * @param {number} startTime - Long(Signed 64 bits) value of EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of EPOCH time indicating the ending time boundary of data time range\n   * @param {string} granularity - Data granularity filtering whether data is minutely data, hourly data or daily data.\n   * @param {string} tunnelName - Filter for data which belongs to tunnel with name {tunnelName}\n   * @param {number} top - Indicate top x items\n   * @param {string} overlay - when it is 'all',return all bonded tunnels;when it is '0',return all physical tunnels;when it is not given,return all bonded and physical tunnels;otherwise,return bonded ...(description truncated)\n   * @param {string} format - The only format other than JSON we support currently is CSV, so format=csv.\n   * @param {boolean} groupByNE - Boolean value indicating whether you want to group aggregate stats by appliance, if true is provided, there will be an extra column inside each tunnel stats record in CSV...(description truncated)\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getStatsAggregateDrcNePk(nePk, startTime, endTime, granularity = 'minute', tunnelName, top, overlay, format = 'csv', groupByNE, callback) {\n    const meth = 'adapter-getStatsAggregateDrcNePk';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (granularity === undefined || granularity === null || granularity === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['granularity'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, granularity, tunnelName, top, overlay, format, groupByNE };\n    const queryParams = {};\n    const pathVars = [nePk];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'getStatsAggregateDrcNePk', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getStatsAggregateDrcNePk'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get aggregate dscp stats data filter by query parameters\n   *\n   * @function statsAggregateDscp\n   * @param {number} startTime - Long(Signed 64 bits) value of EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of EPOCH time indicating the ending time boundary of data time range\n   * @param {string} granularity - Data granularity filtering whether data is minutely data, hourly data or daily data.\n   * @param {string} groupPk - Filter data for a specific group\n   * @param {number} dscp - Filter for data which belongs to a certain flow type. Valid DSCP: 0 - 63\n   * @param {string} trafficType - Filter for data for given traffic type\n   * @param {boolean} ip - Using IP as key for grouping stats instead of using internal appliance id as key.\n   * @param {string} metric - If this query parameter is given, we aggregate stats in a way that we sort stats by this {metric}. This query parameter could also be used with {top} query parameters to ...(description truncated)\n   * @param {number} top - This parameter should be provided together with {metric} as this query parameter is used to indicate top x items of a metric. Example, if metric=throughput&top=10 is prov...(description truncated)\n   * @param {string} format - The only format other than JSON we support currently is CSV, so format=csv.\n   * @param {boolean} groupByNE - Boolean value indicating whether you want to group aggregate stats by appliance, if true is provided, there will be an extra level of key inside each tunnel stats object ...(description truncated)\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  statsAggregateDscp(startTime, endTime, granularity = 'minute', groupPk, dscp, trafficType = 'optimized_traffic', ip, metric = 'throughput', top, format = 'CSV', groupByNE, callback) {\n    const meth = 'adapter-statsAggregateDscp';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (granularity === undefined || granularity === null || granularity === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['granularity'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, granularity, groupPk, dscp, trafficType, ip, metric, top, format, groupByNE };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'statsAggregateDscp', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['statsAggregateDscp'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get aggregate dscp stats data filter by query parameters\n   *\n   * @function postStatsAggregateDscp\n   * @param {object} applianceIDs - JSON array containing appliance IDs you want to filter on.\n   * @param {number} startTime - Long(Signed 64 bits) value of EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of EPOCH time indicating the ending time boundary of data time range\n   * @param {string} granularity - Data granularity filtering whether data is minutely data, hourly data or daily data.\n   * @param {number} dscp - Filter for data which belongs to a certain flow type. Valid DSCP: 0 - 63\n   * @param {string} trafficType - Filter for data for given traffic type\n   * @param {boolean} ip - Using IP as key for grouping stats instead of using internal appliance id as key.\n   * @param {string} metric - If this query parameter is given, we aggregate stats in a way that we sort stats by this {metric}. This query parameter could also be used with {top} query parameters to ...(description truncated)\n   * @param {number} top - This parameter should be provided together with {metric} as this query parameter is used to indicate top x items of a metric. Example, if metric=throughput&top=10 is prov...(description truncated)\n   * @param {string} format - The only format other than JSON we support currently is CSV, so format=csv.\n   * @param {boolean} groupByNE - Boolean value indicating whether you want to group aggregate stats by appliance, if true is provided, there will be an extra level of key inside each tunnel stats object ...(description truncated)\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  postStatsAggregateDscp(applianceIDs, startTime, endTime, granularity = 'minute', dscp, trafficType = 'optimized_traffic', ip, metric = 'throughput', top, format = 'csv', groupByNE, callback) {\n    const meth = 'adapter-postStatsAggregateDscp';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (applianceIDs === undefined || applianceIDs === null || applianceIDs === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['applianceIDs'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (granularity === undefined || granularity === null || granularity === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['granularity'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, granularity, dscp, trafficType, ip, metric, top, format, groupByNE };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = applianceIDs;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'postStatsAggregateDscp', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['postStatsAggregateDscp'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get aggregate dscp stats data for a single appliance filter by query parameters\n   *\n   * @function getStatsAggregateDscpNePk\n   * @param {string} nePk - Appliance internal id to filter from.\n   * @param {number} startTime - Long(Signed 64 bits) value of EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of EPOCH time indicating the ending time boundary of data time range\n   * @param {string} trafficType - Filter for data for given traffic type\n   * @param {string} granularity - Data granularity filtering whether data is minutely data, hourly data or daily data.\n   * @param {number} trafficClass - Filter for data which belongs to trafficClass by integer value {trafficClass} 1 - 10\n   * @param {number} dscp - Filter for data which belongs to a certain flow type. Valid DSCP: 0 - 63\n   * @param {boolean} ip - Using IP as key for grouping stats instead of using internal appliance id as key.\n   * @param {string} metric - If this query parameter is given, we aggregate stats in a way that we sort stats by this {metric}. This query parameter could also be used with {top} query parameters to ...(description truncated)\n   * @param {number} top - This parameter should be provided together with {metric} as this query parameter is used to indicate top x items of a metric. Example, if metric=throughput&top=10 is prov...(description truncated)\n   * @param {string} format - The only format other than JSON we support currently is CSV, so format=csv.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getStatsAggregateDscpNePk(nePk, startTime, endTime, trafficType = 'optimized_traffic', granularity = 'minute', trafficClass, dscp, ip, metric = 'throughput', top, format = 'csv', callback) {\n    const meth = 'adapter-getStatsAggregateDscpNePk';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (trafficType === undefined || trafficType === null || trafficType === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['trafficType'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (granularity === undefined || granularity === null || granularity === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['granularity'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, trafficType, granularity, trafficClass, dscp, ip, metric, top, format };\n    const queryParams = {};\n    const pathVars = [nePk];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'getStatsAggregateDscpNePk', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getStatsAggregateDscpNePk'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get aggregate flow stats data filter by query parameters\n   *\n   * @function statsAggregateFlow\n   * @param {number} startTime - Long(Signed 64 bits) value of EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of EPOCH time indicating the ending time boundary of data time range\n   * @param {string} granularity - Data granularity filtering whether data is minutely data, hourly data or daily data.\n   * @param {string} groupPk - Filter data for a specific group\n   * @param {string} flow - Filter for data which belongs to a certain flow type.\n   * @param {string} trafficType - Filter for data for given traffic type\n   * @param {boolean} ip - Using IP as key for grouping stats instead of using internal appliance id as key.\n   * @param {string} format - The only format other than JSON we support currently is CSV, so format=csv.\n   * @param {boolean} groupByNE - Boolean value indicating whether you want to group aggregate stats by appliance, if true is provided, there will be an extra level of key inside each tunnel stats object ...(description truncated)\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  statsAggregateFlow(startTime, endTime, granularity = 'minute', groupPk, flow = 'TCP_ACCELERATED', trafficType = 'optimized_traffic', ip, format = 'CSV', groupByNE, callback) {\n    const meth = 'adapter-statsAggregateFlow';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (granularity === undefined || granularity === null || granularity === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['granularity'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, granularity, groupPk, flow, trafficType, ip, format, groupByNE };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'statsAggregateFlow', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['statsAggregateFlow'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get aggregate flow stats data filter by query parameters\n   *\n   * @function postStatsAggregateFlow\n   * @param {object} applianceIDs - JSON array containing appliance IDs you want to filter on.\n   * @param {number} startTime - Long(Signed 64 bits) value of EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of EPOCH time indicating the ending time boundary of data time range\n   * @param {string} granularity - Data granularity filtering whether data is minutely data, hourly data or daily data.\n   * @param {string} flow - Filter for data which belongs to a certain flow type.\n   * @param {string} trafficType - Filter for data for given traffic type\n   * @param {boolean} ip - Using IP as key for grouping stats instead of using internal appliance id as key.\n   * @param {string} format - The only format other than JSON we support currently is CSV, so format=csv.\n   * @param {boolean} groupByNE - Boolean value indicating whether you want to group aggregate stats by appliance, if true is provided, there will be an extra level of key inside each tunnel stats object ...(description truncated)\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  postStatsAggregateFlow(applianceIDs, startTime, endTime, granularity = 'minute', flow = 'TCP_ACCELERATED', trafficType = 'optimized_traffic', ip, format = 'csv', groupByNE, callback) {\n    const meth = 'adapter-postStatsAggregateFlow';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (applianceIDs === undefined || applianceIDs === null || applianceIDs === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['applianceIDs'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (granularity === undefined || granularity === null || granularity === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['granularity'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, granularity, flow, trafficType, ip, format, groupByNE };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = applianceIDs;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'postStatsAggregateFlow', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['postStatsAggregateFlow'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get active flow counts by NE id\n   *\n   * @function getActiveFlowCounts\n   * @param {object} applianceIDs - JSON array containing appliance IDs you want to filter on.\n   * @param {number} top - No. of rows to return\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getActiveFlowCounts(applianceIDs, top, callback) {\n    const meth = 'adapter-getActiveFlowCounts';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (applianceIDs === undefined || applianceIDs === null || applianceIDs === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['applianceIDs'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { top };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = applianceIDs;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'getActiveFlowCounts', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getActiveFlowCounts'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get aggregate flow stats data for a single appliance filter by query parameters\n   *\n   * @function getStatsAggregateFlowNePk\n   * @param {string} nePk - Appliance internal id to filter from.\n   * @param {number} startTime - Long(Signed 64 bits) value of EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of EPOCH time indicating the ending time boundary of data time range\n   * @param {string} granularity - Data granularity filtering whether data is minutely data, hourly data or daily data.\n   * @param {number} trafficClass - Filter for data which belongs to trafficClass by integer value {trafficClass} 1 - 10\n   * @param {string} flow - Filter for data which belongs to a certain flow type.\n   * @param {boolean} ip - Using IP as key for grouping stats instead of using internal appliance id as key.\n   * @param {string} format - The only format other than JSON we support currently is CSV, so format=csv.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getStatsAggregateFlowNePk(nePk, startTime, endTime, granularity = 'minute', trafficClass, flow = 'TCP_ACCELERATED', ip, format = 'csv', callback) {\n    const meth = 'adapter-getStatsAggregateFlowNePk';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (granularity === undefined || granularity === null || granularity === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['granularity'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, granularity, trafficClass, flow, ip, format };\n    const queryParams = {};\n    const pathVars = [nePk];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'getStatsAggregateFlowNePk', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getStatsAggregateFlowNePk'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get aggregate interface stats data for a all appliance filter by query parameters\n   *\n   * @function interfaceAggregateStats\n   * @param {number} startTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the ending time boundary of data time range\n   * @param {string} granularity - Data granularity filtering whether data is minutely data, hourly data or daily data.\n   * @param {string} trafficType - Filter for data for given traffic type\n   * @param {string} format - The only format other than JSON we support currently is CSV, so format=csv.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  interfaceAggregateStats(startTime, endTime, granularity = 'minute', trafficType = 'optimized_traffic', format = 'csv', callback) {\n    const meth = 'adapter-interfaceAggregateStats';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (granularity === undefined || granularity === null || granularity === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['granularity'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (trafficType === undefined || trafficType === null || trafficType === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['trafficType'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, granularity, trafficType, format };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'interfaceAggregateStats', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['interfaceAggregateStats'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get aggregate interface stats data\n   *\n   * @function postStatsAggregateInterface\n   * @param {object} applianceIDs - JSON array containing appliance IDs you want to filter on.\n   * @param {number} startTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the ending time boundary of data time range\n   * @param {string} granularity - Data granularity filtering whether data is minutely data, hourly data or daily data.\n   * @param {string} trafficType - Filter for data for given traffic type\n   * @param {string} format - The only format other than JSON we support currently is CSV, so format=csv.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  postStatsAggregateInterface(applianceIDs, startTime, endTime, granularity = 'minute', trafficType = 'optimized_traffic', format = 'csv', callback) {\n    const meth = 'adapter-postStatsAggregateInterface';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (applianceIDs === undefined || applianceIDs === null || applianceIDs === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['applianceIDs'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (granularity === undefined || granularity === null || granularity === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['granularity'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (trafficType === undefined || trafficType === null || trafficType === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['trafficType'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, granularity, trafficType, format };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = applianceIDs;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'postStatsAggregateInterface', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['postStatsAggregateInterface'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get aggregate interface overlay transport stats data\n   *\n   * @function interfaceOverlayTransportAggregateStats\n   * @param {object} applianceIDs - JSON array containing appliance IDs you want to filter on.\n   * @param {number} startTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the ending time boundary of data time range\n   * @param {string} granularity - Data granularity filtering whether data is minutely data, hourly data or daily data.\n   * @param {string} interfaceName - Interface name you want to filter on.\n   * @param {string} overlay - When it is '0',return all physical tunnels;when it is not given,return all bonded and physical tunnels;otherwise,return bonded tunnels associated with the overlay id.\n   * @param {string} format - The only format other than JSON we support currently is CSV, so format=csv.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  interfaceOverlayTransportAggregateStats(applianceIDs, startTime, endTime, granularity = 'minute', interfaceName, overlay, format = 'csv', callback) {\n    const meth = 'adapter-interfaceOverlayTransportAggregateStats';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (applianceIDs === undefined || applianceIDs === null || applianceIDs === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['applianceIDs'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (granularity === undefined || granularity === null || granularity === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['granularity'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, granularity, interfaceName, overlay, format };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = applianceIDs;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'interfaceOverlayTransportAggregateStats', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['interfaceOverlayTransportAggregateStats'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get aggregate jitter stats data filter by query parameters.\n   *\n   * @function jitterStatsAggregate\n   * @param {number} startTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the ending time boundary of data time range\n   * @param {string} granularity - Data granularity filtering whether data is minutely data, hourly data or daily data.\n   * @param {boolean} ip - Using IP as key for grouping stats instead of using internal appliance id as key.\n   * @param {string} overlay - when it is 'all',return all bonded tunnels;when it is '0',return all physical tunnels;when it is not given,return all bonded and physical tunnels;otherwise,return bonded ...(description truncated)\n   * @param {boolean} groupByNE - Boolean value indicating whether you want to group aggregate stats by appliance, if true is provided, there will be an extra level of key inside each tunnel stats object ...(description truncated)\n   * @param {string} format - The only format other than JSON we support currently is CSV, so format=csv.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  jitterStatsAggregate(startTime, endTime, granularity = 'minute', ip, overlay, groupByNE, format = 'csv', callback) {\n    const meth = 'adapter-jitterStatsAggregate';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (granularity === undefined || granularity === null || granularity === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['granularity'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, granularity, ip, overlay, groupByNE, format };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'jitterStatsAggregate', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['jitterStatsAggregate'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get aggregate jitter stats data filter by query parameters.\n   *\n   * @function statsAggregateJitter\n   * @param {object} applianceIDs - JSON array containing appliance IDs you want to filter on.\n   * @param {number} startTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the ending time boundary of data time range\n   * @param {string} granularity - Data granularity filtering whether data is minutely data, hourly data or daily data.\n   * @param {boolean} ip - Using IP as key for grouping stats instead of using internal appliance id as key.\n   * @param {number} top - No. of rows to return\n   * @param {string} overlay - when it is 'all',return all bonded tunnels;when it is '0',return all physical tunnels;when it is not given,return all bonded and physical tunnels;otherwise,return bonded ...(description truncated)\n   * @param {boolean} groupByNE - Boolean value indicating whether you want to group aggregate stats by appliance, if true is provided, there will be an extra level of key inside each tunnel stats object ...(description truncated)\n   * @param {string} format - The only format other than JSON we support currently is CSV, so format=csv.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  statsAggregateJitter(applianceIDs, startTime, endTime, granularity = 'minute', ip, top, overlay, groupByNE, format = 'csv', callback) {\n    const meth = 'adapter-statsAggregateJitter';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (applianceIDs === undefined || applianceIDs === null || applianceIDs === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['applianceIDs'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (granularity === undefined || granularity === null || granularity === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['granularity'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, granularity, ip, top, overlay, groupByNE, format };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = applianceIDs;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'statsAggregateJitter', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['statsAggregateJitter'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get aggregate jitter stats data filter by query parameters.\n   *\n   * @function getStatsAggregateJitterNePk\n   * @param {string} nePk - Appliance internal id to filter from.\n   * @param {number} startTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the ending time boundary of data time range\n   * @param {string} granularity - Data granularity filtering whether data is minutely data, hourly data or daily data.\n   * @param {boolean} ip - Using IP as key for grouping stats instead of using internal appliance id as key.\n   * @param {string} overlay - when it is 'all',return all bonded tunnels;when it is '0',return all physical tunnels;when it is not given,return all bonded and physical tunnels;otherwise,return bonded ...(description truncated)\n   * @param {boolean} groupByNE - Boolean value indicating whether you want to group aggregate stats by appliance, if true is provided, there will be an extra level of key inside each tunnel stats object ...(description truncated)\n   * @param {string} tunnelName - Filter for data which belongs to tunnel with name {tunnelName}\n   * @param {string} format - The only format other than JSON we support currently is CSV, so format=csv.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getStatsAggregateJitterNePk(nePk, startTime, endTime, granularity = 'minute', ip, overlay, groupByNE, tunnelName, format = 'csv', callback) {\n    const meth = 'adapter-getStatsAggregateJitterNePk';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (granularity === undefined || granularity === null || granularity === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['granularity'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, granularity, ip, overlay, groupByNE, tunnelName, format };\n    const queryParams = {};\n    const pathVars = [nePk];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'getStatsAggregateJitterNePk', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getStatsAggregateJitterNePk'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get aggregate Mean Opinion Score stats data\n   *\n   * @function mosAggregateStats\n   * @param {object} applianceIDs - JSON array containing appliance IDs you want to filter on.\n   * @param {number} startTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the ending time boundary of data time range\n   * @param {string} granularity - Data granularity filtering whether data is minutely data, hourly data or daily data.\n   * @param {number} top - Indicate top x items\n   * @param {string} overlay - When it is '0',return all physical tunnels;when it is not given,return all bonded and physical tunnels;otherwise,return bonded tunnels associated with the overlay id.\n   * @param {string} format - The only format other than JSON we support currently is CSV, so format=csv.\n   * @param {boolean} groupByNE - Boolean value indicating whether you want to group aggregate stats by appliance, if true is provided, there will be an extra level of key inside each tunnel stats object ...(description truncated)\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  mosAggregateStats(applianceIDs, startTime, endTime, granularity = 'minute', top, overlay, format = 'csv', groupByNE, callback) {\n    const meth = 'adapter-mosAggregateStats';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (applianceIDs === undefined || applianceIDs === null || applianceIDs === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['applianceIDs'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (granularity === undefined || granularity === null || granularity === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['granularity'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, granularity, top, overlay, format, groupByNE };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = applianceIDs;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'mosAggregateStats', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['mosAggregateStats'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get aggregate Mean Opinion Score stats data\n   *\n   * @function getStatsAggregateMosNePk\n   * @param {string} nePk - Appliance internal id to filter from.\n   * @param {number} startTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the ending time boundary of data time range\n   * @param {string} granularity - Data granularity filtering whether data is minutely data, hourly data or daily data.\n   * @param {string} tunnelName - Filter for data which belongs to tunnel with name {tunnelName}\n   * @param {number} top - Indicate top x items\n   * @param {string} overlay - When it is '0',return all physical tunnels;when it is not given,return all bonded and physical tunnels;otherwise,return bonded tunnels associated with the overlay id.\n   * @param {string} format - The only format other than JSON we support currently is CSV, so format=csv.\n   * @param {boolean} groupByNE - Boolean value indicating whether you want to group aggregate stats by appliance, if true is provided, there will be an extra level of key inside each tunnel stats object ...(description truncated)\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getStatsAggregateMosNePk(nePk, startTime, endTime, granularity = 'minute', tunnelName, top, overlay, format = 'csv', groupByNE, callback) {\n    const meth = 'adapter-getStatsAggregateMosNePk';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (granularity === undefined || granularity === null || granularity === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['granularity'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, granularity, tunnelName, top, overlay, format, groupByNE };\n    const queryParams = {};\n    const pathVars = [nePk];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'getStatsAggregateMosNePk', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getStatsAggregateMosNePk'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get aggregate ports stats data filter by query parameters.\n   *\n   * @function portStatsAggregate\n   * @param {number} startTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the ending time boundary of data time range\n   * @param {number} isSource - Integer value representing whether port is from source or destination\n   * @param {number} isKnown - Integer value representing whether port is assigned to a application(1) or not(0)\n   * @param {number} protocol - Integer value representing whether protocol used by port\n   * @param {number} port - Integer value representing whether port number\n   * @param {number} top - No. of rows to return\n   * @param {boolean} splitByNe - Boolean value indicating whether you want to split aggregate stats by appliance, if true is provided, there will be an extra level of key inside each stats object indicat...(description truncated)\n   * @param {boolean} lastHour - Boolean value representing whether to fetch data one hour behind from last hour if data is not found in last hour time range\n   * @param {string} format - The only format other than JSON we support currently is CSV, so format=csv.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  portStatsAggregate(startTime, endTime, isSource = '0', isKnown = '0', protocol, port, top, splitByNe, lastHour, format = 'csv', callback) {\n    const meth = 'adapter-portStatsAggregate';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, isSource, isKnown, protocol, port, top, splitByNe, lastHour, format };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'portStatsAggregate', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['portStatsAggregate'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get aggregate ports stats data filter by query parameters.\n   *\n   * @function statsAggregatePorts\n   * @param {object} applianceIDs - JSON array containing appliance IDs you want to filter on.\n   * @param {number} startTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the ending time boundary of data time range\n   * @param {number} isSource - Integer value representing whether dns is from source or destination\n   * @param {number} isKnown - Integer value representing whether port is assigned to a application(1) or not(0)\n   * @param {number} protocol - Integer value representing whether protocol used by port\n   * @param {number} port - Integer value representing whether port number\n   * @param {number} top - No. of rows to return\n   * @param {boolean} splitByNe - Boolean value indicating whether you want to split aggregate stats by appliance, if true is provided, there will be an extra level of key inside each stats object indicat...(description truncated)\n   * @param {boolean} lastHour - Boolean value representing whether to fetch data one hour behind from last hour if data is not found in last hour time range\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  statsAggregatePorts(applianceIDs, startTime, endTime, isSource = '0', isKnown = '0', protocol, port, top, splitByNe, lastHour, callback) {\n    const meth = 'adapter-statsAggregatePorts';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (applianceIDs === undefined || applianceIDs === null || applianceIDs === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['applianceIDs'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, isSource, isKnown, protocol, port, top, splitByNe, lastHour };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = applianceIDs;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'statsAggregatePorts', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['statsAggregatePorts'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get aggregate ports stats data filter by query parameters.\n   *\n   * @function getStatsAggregatePortsNePk\n   * @param {number} startTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the ending time boundary of data time range\n   * @param {number} isSource - Integer value representing whether port is from source or destination\n   * @param {number} isKnown - Integer value representing whether port is assigned to a application(1) or not(0)\n   * @param {number} protocol - Integer value representing whether protocol used by port\n   * @param {number} port - Integer value representing whether port number\n   * @param {number} top - No. of rows to return\n   * @param {boolean} splitByNe - Boolean value indicating whether you want to split aggregate stats by appliance, if true is provided, there will be an extra level of key inside each stats object indicat...(description truncated)\n   * @param {boolean} lastHour - Boolean value representing whether to fetch data one hour behind from last hour if data is not found in last hour time range\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getStatsAggregatePortsNePk(startTime, endTime, isSource = '0', isKnown = '0', protocol, port, top, splitByNe, lastHour, callback) {\n    const meth = 'adapter-getStatsAggregatePortsNePk';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, isSource, isKnown, protocol, port, top, splitByNe, lastHour };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'getStatsAggregatePortsNePk', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getStatsAggregatePortsNePk'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get aggregate security policy stats data\n   *\n   * @function securityPolicyAggregateStats\n   * @param {object} applianceIDs - JSON array containing appliance IDs you want to filter on.\n   * @param {number} startTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the ending time boundary of data time range\n   * @param {string} granularity - Data granularity filtering whether data is minutely data, hourly data or daily data.\n   * @param {number} top - Indicate top x items\n   * @param {string} format - The only format other than JSON we support currently is CSV, so format=csv, and the response data format would be different if this field is provided\n   * @param {boolean} groupByNE - Boolean value indicating whether you want to group aggregate stats by appliance. Default value is true.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  securityPolicyAggregateStats(applianceIDs, startTime, endTime, granularity = 'minute', top, format = 'csv', groupByNE, callback) {\n    const meth = 'adapter-securityPolicyAggregateStats';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (applianceIDs === undefined || applianceIDs === null || applianceIDs === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['applianceIDs'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (granularity === undefined || granularity === null || granularity === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['granularity'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, granularity, top, format, groupByNE };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = applianceIDs;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'securityPolicyAggregateStats', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['securityPolicyAggregateStats'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get aggregate security policy stats data\n   *\n   * @function getStatsAggregateSecurityPolicyNePk\n   * @param {string} nePk - Appliance internal id to filter from.\n   * @param {number} startTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the ending time boundary of data time range\n   * @param {string} granularity - Data granularity filtering whether data is minutely data, hourly data or daily data.\n   * @param {string} fromZone - Filter for data which come from the zone indicated by this zone internal ID\n   * @param {string} toZone - Filter for data which go to the zone indicated by this zone internal ID\n   * @param {number} top - Indicate top x items\n   * @param {string} format - The only format other than JSON we support currently is CSV, so format=csv, and the response data format would be different if this field is provided\n   * @param {boolean} groupByNE - Boolean value indicating whether you want to group aggregate stats by appliance. Default value is true.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getStatsAggregateSecurityPolicyNePk(nePk, startTime, endTime, granularity = 'minute', fromZone, toZone, top, format = 'csv', groupByNE, callback) {\n    const meth = 'adapter-getStatsAggregateSecurityPolicyNePk';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (granularity === undefined || granularity === null || granularity === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['granularity'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (fromZone === undefined || fromZone === null || fromZone === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['fromZone'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (toZone === undefined || toZone === null || toZone === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['toZone'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, granularity, fromZone, toZone, top, format, groupByNE };\n    const queryParams = {};\n    const pathVars = [nePk];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'getStatsAggregateSecurityPolicyNePk', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getStatsAggregateSecurityPolicyNePk'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get aggregate topTalkers stats data filter by query parameters.\n   *\n   * @function topTalkersStatsAggregate\n   * @param {number} startTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the ending time boundary of data time range\n   * @param {number} top - No. of rows to return\n   * @param {boolean} splitByNe - Boolean value indicating whether you want to split aggregate stats by appliance, if true is provided, there will be an extra level of key inside each stats object indicat...(description truncated)\n   * @param {string} format - The only format other than JSON we support currently is CSV, so format=csv.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  topTalkersStatsAggregate(startTime, endTime, top, splitByNe, format = 'csv', callback) {\n    const meth = 'adapter-topTalkersStatsAggregate';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, top, splitByNe, format };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'topTalkersStatsAggregate', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['topTalkersStatsAggregate'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get aggregate topTalkers stats data filter by query parameters.\n   *\n   * @function statsAggregateTopTalkers\n   * @param {object} applianceIDs - JSON array containing appliance IDs you want to filter on.\n   * @param {number} startTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the ending time boundary of data time range\n   * @param {number} top - No. of rows to return\n   * @param {boolean} splitByNe - Boolean value indicating whether you want to split aggregate stats by appliance, if true is provided, there will be an extra level of key inside each stats object indicat...(description truncated)\n   * @param {string} format - The only format other than JSON we support currently is CSV, so format=csv.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  statsAggregateTopTalkers(applianceIDs, startTime, endTime, top, splitByNe, format = 'csv', callback) {\n    const meth = 'adapter-statsAggregateTopTalkers';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (applianceIDs === undefined || applianceIDs === null || applianceIDs === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['applianceIDs'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, top, splitByNe, format };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = applianceIDs;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'statsAggregateTopTalkers', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['statsAggregateTopTalkers'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get aggregate topTalkers stats data for a single appliance filter by query parameters.\n   *\n   * @function getStatsAggregateTopTalkersSplitNePk\n   * @param {string} nePk - Appliance internal id to filter from.\n   * @param {number} startTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the ending time boundary of data time range\n   * @param {string} sourceIp - Source IP address\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getStatsAggregateTopTalkersSplitNePk(nePk, startTime, endTime, sourceIp, callback) {\n    const meth = 'adapter-getStatsAggregateTopTalkersSplitNePk';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, sourceIp };\n    const queryParams = {};\n    const pathVars = [nePk];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'getStatsAggregateTopTalkersSplitNePk', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getStatsAggregateTopTalkersSplitNePk'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get aggregate topTalkers stats data for a single appliance filter by query parameters.\n   *\n   * @function getStatsAggregateTopTalkersNePk\n   * @param {string} nePk - Appliance internal id to filter from.\n   * @param {number} startTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the ending time boundary of data time range\n   * @param {number} top - No. of rows to return\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getStatsAggregateTopTalkersNePk(nePk, startTime, endTime, top, callback) {\n    const meth = 'adapter-getStatsAggregateTopTalkersNePk';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, top };\n    const queryParams = {};\n    const pathVars = [nePk];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'getStatsAggregateTopTalkersNePk', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getStatsAggregateTopTalkersNePk'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get aggregate Traffic Behavioral stats data filter by query parameters\n   *\n   * @function trafficBehavior\n   * @param {number} startTime - Start time ( epoch time in seconds ) of time range that stats are requested for\n   * @param {number} endTime - End time ( epoch time in seconds ) of time range that stats are requested for\n   * @param {string} groupPk - Filter data for a specific group\n   * @param {string} behavioralCate - Filter for data which belongs to behavioral Category with name { behavioral_category }\n   * @param {string} format - The only format other than JSON we support currently is CSV, so format=csv.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  trafficBehavior(startTime, endTime, groupPk, behavioralCate, format = 'CSV', callback) {\n    const meth = 'adapter-trafficBehavior';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, groupPk, behavioralCate, format };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'trafficBehavior', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['trafficBehavior'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get aggregate Traffic Behavioral stats data for a single appliance filter by query parameters\n   *\n   * @function postStatsAggregateTrafficBehavior\n   * @param {object} applianceIDs - JSON array containing appliance IDs you want to filter on.\n   * @param {number} startTime - Start time ( epoch time in seconds ) of time range that stats are requested for\n   * @param {number} endTime - End time ( epoch time in seconds ) of time range that stats are requested for\n   * @param {string} behavioralCate - Filter for data which belongs to behavioral Category with name { behavioral_category }\n   * @param {string} application - Filter for data which belongs to application with name {application}\n   * @param {string} format - The only format other than JSON we support currently is CSV, so format=csv\n   * @param {number} top - Restrict Applications for each behavior category to Top N\n   * @param {boolean} lastHour - Boolean value representing whether to fetch data one hour behind from last hour if data is not found in last hour time range\n   * @param {boolean} isAggregated - Get (aggregate) Traffic Behavioral stats data\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  postStatsAggregateTrafficBehavior(applianceIDs, startTime, endTime, behavioralCate, application, format = 'CSV', top, lastHour, isAggregated, callback) {\n    const meth = 'adapter-postStatsAggregateTrafficBehavior';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (applianceIDs === undefined || applianceIDs === null || applianceIDs === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['applianceIDs'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, behavioralCate, application, format, top, lastHour, isAggregated };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = applianceIDs;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'postStatsAggregateTrafficBehavior', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['postStatsAggregateTrafficBehavior'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get aggregate Traffic Behavioral stats data filter by query parameters\n   *\n   * @function getStatsAggregateTrafficBehaviorNePk\n   * @param {string} nePk - Appliance internal id to filter from.\n   * @param {number} startTime - Start time ( epoch time in seconds ) of time range that stats are requested for\n   * @param {number} endTime - End time ( epoch time in seconds ) of time range that stats are requested for\n   * @param {string} behavioralCate - Filter for data which belongs to behavioral Category with name { behavioral_category }\n   * @param {string} application - Filter for data which belongs to application with name {application}\n   * @param {number} top - Restrict Applications for each behavior category to Top N\n   * @param {boolean} lastHour - Boolean value representing whether to fetch data one hour behind from last hour if data is not found in last hour time range\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getStatsAggregateTrafficBehaviorNePk(nePk, startTime, endTime, behavioralCate, application, top, lastHour, callback) {\n    const meth = 'adapter-getStatsAggregateTrafficBehaviorNePk';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, behavioralCate, application, top, lastHour };\n    const queryParams = {};\n    const pathVars = [nePk];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'getStatsAggregateTrafficBehaviorNePk', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getStatsAggregateTrafficBehaviorNePk'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get aggregate traffic class stats data filter by query parameters\n   *\n   * @function statsAggregateTrafficClass\n   * @param {number} startTime - Long(Signed 64 bits) value of EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of EPOCH time indicating the ending time boundary of data time range\n   * @param {string} granularity - Data granularity filtering whether data is minutely data, hourly data or daily data.\n   * @param {string} groupPk - Filter data for a specific group\n   * @param {number} trafficClass - Filter for data which belongs to trafficClass by integer value {trafficClass} 1 - 10\n   * @param {string} trafficType - Filter for data for given traffic type\n   * @param {boolean} ip - Using IP as key for grouping stats instead of using internal appliance id as key.\n   * @param {string} metric - If this query parameter is given, we aggregate stats in a way that we sort stats by this {metric}. This query parameter could also be used with {top} query parameters to ...(description truncated)\n   * @param {number} top - This parameter should be provided together with {metric} as this query parameter is used to indicate top x items of a metric. Example, if metric=throughput&top=10 is prov...(description truncated)\n   * @param {string} format - The only format other than JSON we support currently is CSV, so format=csv.\n   * @param {boolean} groupByNE - Boolean value indicating whether you want to group aggregate stats by appliance, if true is provided, there will be an extra level of key inside each tunnel stats object ...(description truncated)\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  statsAggregateTrafficClass(startTime, endTime, granularity = 'minute', groupPk, trafficClass, trafficType = 'optimized_traffic', ip, metric = 'throughput', top, format = 'CSV', groupByNE, callback) {\n    const meth = 'adapter-statsAggregateTrafficClass';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (granularity === undefined || granularity === null || granularity === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['granularity'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, granularity, groupPk, trafficClass, trafficType, ip, metric, top, format, groupByNE };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'statsAggregateTrafficClass', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['statsAggregateTrafficClass'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get aggregate traffic class stats data filter by query parameters\n   *\n   * @function postStatsAggregateTrafficClass\n   * @param {object} applianceIDs - JSON array containing appliance IDs you want to filter on.\n   * @param {number} startTime - Long(Signed 64 bits) value of EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of EPOCH time indicating the ending time boundary of data time range\n   * @param {string} granularity - Data granularity filtering whether data is minutely data, hourly data or daily data.\n   * @param {number} trafficClass - Filter for data which belongs to trafficClass by integer value {trafficClass} 1 - 10\n   * @param {string} trafficType - Filter for data for given traffic type\n   * @param {boolean} ip - Using IP as key for grouping stats instead of using internal appliance id as key.\n   * @param {string} metric - If this query parameter is given, we aggregate stats in a way that we sort stats by this {metric}. This query parameter could also be used with {top} query parameters to ...(description truncated)\n   * @param {number} top - This parameter should be provided together with {metric} as this query parameter is used to indicate top x items of a metric. Example, if metric=throughput&top=10 is prov...(description truncated)\n   * @param {string} format - The only format other than JSON we support currently is CSV, so format=csv.\n   * @param {boolean} groupByNE - Boolean value indicating whether you want to group aggregate stats by appliance, if true is provided, there will be an extra level of key inside each tunnel stats object ...(description truncated)\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  postStatsAggregateTrafficClass(applianceIDs, startTime, endTime, granularity = 'minute', trafficClass, trafficType = 'optimized_traffic', ip, metric = 'throughput', top, format = 'csv', groupByNE, callback) {\n    const meth = 'adapter-postStatsAggregateTrafficClass';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (applianceIDs === undefined || applianceIDs === null || applianceIDs === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['applianceIDs'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (granularity === undefined || granularity === null || granularity === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['granularity'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, granularity, trafficClass, trafficType, ip, metric, top, format, groupByNE };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = applianceIDs;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'postStatsAggregateTrafficClass', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['postStatsAggregateTrafficClass'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get aggregate trafficClass stats data for a single appliance filter by query parameters\n   *\n   * @function getStatsAggregateTrafficClassNePk\n   * @param {string} nePk - Appliance internal id to filter from.\n   * @param {number} startTime - Long(Signed 64 bits) value of EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of EPOCH time indicating the ending time boundary of data time range\n   * @param {string} granularity - Data granularity filtering whether data is minutely data, hourly data or daily data.\n   * @param {number} trafficClass - Filter for data which belongs to trafficClass by integer value {trafficClass} 1 - 10\n   * @param {string} trafficType - Filter for data for given traffic type\n   * @param {boolean} ip - Using IP as key for grouping stats instead of using internal appliance id as key.\n   * @param {string} metric - If this query parameter is given, we aggregate stats in a way that we sort stats by this {metric}. This query parameter could also be used with {top} query parameters to ...(description truncated)\n   * @param {number} top - This parameter should be provided together with {metric} as this query parameter is used to indicate top x items of a metric. Example, if metric=throughput&top=10 is prov...(description truncated)\n   * @param {string} format - The only format other than JSON we support currently is CSV, so format=csv.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getStatsAggregateTrafficClassNePk(nePk, startTime, endTime, granularity = 'minute', trafficClass, trafficType = 'optimized_traffic', ip, metric = 'throughput', top, format = 'csv', callback) {\n    const meth = 'adapter-getStatsAggregateTrafficClassNePk';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (granularity === undefined || granularity === null || granularity === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['granularity'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, granularity, trafficClass, trafficType, ip, metric, top, format };\n    const queryParams = {};\n    const pathVars = [nePk];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'getStatsAggregateTrafficClassNePk', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getStatsAggregateTrafficClassNePk'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get aggregate tunnel stats data filter by query parameters.\n   *\n   * @function getStatsAggregateTunnel\n   * @param {number} startTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the ending time boundary of data time range\n   * @param {string} granularity - Data granularity filtering whether data is minutely data, hourly data or daily data.\n   * @param {string} groupPk - Filter data for a specific group\n   * @param {boolean} ip - Using IP as key for grouping stats instead of using internal appliance id as key.\n   * @param {string} metric - If this query parameter is given, we aggregate stats in a way that we sort stats by this {metric}. This query parameter could also be used with {top} query parameters to ...(description truncated)\n   * @param {number} top - This parameter should be provided together with {metric} as this query parameter is used to indicate top x items of a metric. Example, if metric=throughput&top=10 is prov...(description truncated)\n   * @param {string} overlay - when it is 'all',return all bonded tunnels;when it is '0',return all physical tunnels;when it is not given,return all bonded and physical tunnels;otherwise,return bonded ...(description truncated)\n   * @param {string} format - The only format other than JSON we support currently is CSV, so format=csv.\n   * @param {boolean} groupByNE - Boolean value indicating whether you want to group aggregate stats by appliance, if true is provided, there will be an extra level of key inside each tunnel stats object ...(description truncated)\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getStatsAggregateTunnel(startTime, endTime, granularity = 'minute', groupPk, ip, metric = 'throughput', top, overlay, format = 'CSV', groupByNE, callback) {\n    const meth = 'adapter-getStatsAggregateTunnel';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (granularity === undefined || granularity === null || granularity === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['granularity'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, granularity, groupPk, ip, metric, top, overlay, format, groupByNE };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'getStatsAggregateTunnel', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getStatsAggregateTunnel'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get aggregate tunnel stats data filter by query parameters.\n   *\n   * @function postStatsAggregateTunnel\n   * @param {object} applianceIDs - JSON array containing appliance IDs you want to filter on.\n   * @param {number} startTime - Long(Signed 64 bits) value of EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of EPOCH time indicating the ending time boundary of data time range\n   * @param {string} granularity - Data granularity filtering whether data is minutely data, hourly data or daily data.\n   * @param {boolean} ip - Using IP as key for grouping stats instead of using internal appliance id as key.\n   * @param {string} metric - If this query parameter is given, we aggregate stats in a way that we sort stats by this {metric}. This query parameter could also be used with {top} query parameters to ...(description truncated)\n   * @param {number} top - This parameter should be provided together with {metric} as this query parameter is used to indicate top x items of a metric. Example, if metric=throughput&top=10 is prov...(description truncated)\n   * @param {string} overlay - when it is 'all',return all bonded tunnels;when it is '0',return all physical tunnels;when it is not given,return all bonded and physical tunnels;otherwise,return bonded ...(description truncated)\n   * @param {string} format - The only format other than JSON we support currently is CSV, so format=csv.\n   * @param {boolean} groupByNE - Boolean value indicating whether you want to group aggregate stats by appliance, if true is provided, there will be an extra level of key inside each tunnel stats object ...(description truncated)\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  postStatsAggregateTunnel(applianceIDs, startTime, endTime, granularity = 'minute', ip, metric = 'throughput', top, overlay, format = 'csv', groupByNE, callback) {\n    const meth = 'adapter-postStatsAggregateTunnel';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (applianceIDs === undefined || applianceIDs === null || applianceIDs === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['applianceIDs'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (granularity === undefined || granularity === null || granularity === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['granularity'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, granularity, ip, metric, top, overlay, format, groupByNE };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = applianceIDs;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'postStatsAggregateTunnel', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['postStatsAggregateTunnel'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get aggregate tunnel stats data for a single appliance filter by query parameters.\n   *\n   * @function getStatsAggregateTunnelNePk\n   * @param {string} nePk - Appliance internal id to filter from.\n   * @param {number} startTime - Long(Signed 64 bits) value of EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of EPOCH time indicating the ending time boundary of data time range\n   * @param {string} granularity - Data granularity filtering whether data is minutely data, hourly data or daily data.\n   * @param {string} tunnelName - Filter for data which belongs to tunnel with name {tunnelName}\n   * @param {boolean} ip - Using IP as key for grouping stats instead of using internal appliance id as key.\n   * @param {string} metric - If this query parameter is given, we aggregate stats in a way that we sort stats by this {metric}. This query parameter could also be used with {top} query parameters to ...(description truncated)\n   * @param {number} top - This parameter should be provided together with {metric} as this query parameter is used to indicate top x items of a metric. Example, if metric=throughput&top=10 is prov...(description truncated)\n   * @param {string} overlay - when it is 'all',return all bonded tunnels;when it is '0',return all physical tunnels;when it is not given,return all bonded and physical tunnels;otherwise,return bonded ...(description truncated)\n   * @param {string} format - The only format other than JSON we support currently is CSV, so format=csv.\n   * @param {boolean} groupByNE - Boolean value indicating whether you want to group aggregate stats by appliance, if true is provided, there will be an extra level of key inside each tunnel stats object ...(description truncated)\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getStatsAggregateTunnelNePk(nePk, startTime, endTime, granularity = 'minute', tunnelName, ip, metric = 'throughput', top, overlay, format = 'csv', groupByNE, callback) {\n    const meth = 'adapter-getStatsAggregateTunnelNePk';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (granularity === undefined || granularity === null || granularity === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['granularity'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, granularity, tunnelName, ip, metric, top, overlay, format, groupByNE };\n    const queryParams = {};\n    const pathVars = [nePk];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'getStatsAggregateTunnelNePk', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getStatsAggregateTunnelNePk'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get domain name by IP address from dns stats table\n   *\n   * @function statsDnsInfo\n   * @param {string} ip - IP address to get dns name.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  statsDnsInfo(ip, callback) {\n    const meth = 'adapter-statsDnsInfo';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (ip === undefined || ip === null || ip === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['ip'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [ip];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'statsDnsInfo', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['statsDnsInfo'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get appliance time series stats data filter by certain query parameters.\n   *\n   * @function statsTimeseriesAppliance\n   * @param {number} startTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the ending time boundary of data time range\n   * @param {string} granularity - Data granularity filtering whether data is minutely data, hourly data or daily data.\n   * @param {string} groupPk - Internal group ID of a group for which you want to retrieve stats\n   * @param {string} trafficType - Filter for data for given traffic type\n   * @param {number} limit - Limit the number of stats entity retrieved. Default and maximum limits are both 10000.\n   * @param {string} format - The only format other than JSON we support currently is CSV, so format=csv.\n   * @param {boolean} ip - Using IP as key for grouping stats instead of using internal appliance id as key. Default value if false\n   * @param {number} latest - Instead of providing {startTime} and {endTime}, using {latest} query parameter could provide you stats for, say latest 10 minutes. Unit is minute. Example: latest=10. Def...(description truncated)\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  statsTimeseriesAppliance(startTime, endTime, granularity = 'minute', groupPk, trafficType = 'optimized_traffic', limit, format = 'CSV', ip, latest, callback) {\n    const meth = 'adapter-statsTimeseriesAppliance';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (granularity === undefined || granularity === null || granularity === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['granularity'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (trafficType === undefined || trafficType === null || trafficType === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['trafficType'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, granularity, groupPk, trafficType, limit, format, ip, latest };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'statsTimeseriesAppliance', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['statsTimeseriesAppliance'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get appliance time series stats data filter by certain query parameters and certain appliance IDs.\n   *\n   * @function postStatsTimeseriesAppliance\n   * @param {object} applianceIDs - JSON array containing appliance IDs you want to filter on.\n   * @param {number} startTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the ending time boundary of data time range\n   * @param {string} granularity - Data granularity filtering whether data is minutely data, hourly data or daily data.\n   * @param {string} trafficType - Filter for data for given traffic type\n   * @param {number} limit - Limit the number of stats entity retrieved. Default and maximum limits are both 10000.\n   * @param {string} format - The only format other than JSON we support currently is CSV, so format=csv.\n   * @param {boolean} ip - Using IP as key for grouping stats instead of using internal appliance id as key. Default value if false\n   * @param {number} latest - Instead of providing {startTime} and {endTime}, using {latest} query parameter could provide you stats for, say latest 10 minutes. Unit is minute. Example: latest=10. Def...(description truncated)\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  postStatsTimeseriesAppliance(applianceIDs, startTime, endTime, granularity = 'minute', trafficType = 'optimized_traffic', limit, format = 'CSV', ip, latest, callback) {\n    const meth = 'adapter-postStatsTimeseriesAppliance';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (applianceIDs === undefined || applianceIDs === null || applianceIDs === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['applianceIDs'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (granularity === undefined || granularity === null || granularity === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['granularity'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (trafficType === undefined || trafficType === null || trafficType === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['trafficType'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, granularity, trafficType, limit, format, ip, latest };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = applianceIDs;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'postStatsTimeseriesAppliance', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['postStatsTimeseriesAppliance'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get appliance time series stats data of a single appliance filter by certain query parameters.\n   *\n   * @function getStatsTimeseriesApplianceNePk\n   * @param {string} nePk - Internal ID of the appliance to filter from\n   * @param {number} startTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the ending time boundary of data time range\n   * @param {string} granularity - Data granularity filtering whether data is minutely data, hourly data or daily data.\n   * @param {string} trafficType - Filter for data for given traffic type\n   * @param {number} limit - Limit the number of stats entity retrieved. Default and maximum limits are both 10000.\n   * @param {string} format - The only format other than JSON we support currently is CSV, so format=csv.\n   * @param {boolean} ip - Using IP as key for grouping stats instead of using internal appliance id as key. Default value if false\n   * @param {number} latest - Instead of providing {startTime} and {endTime}, using {latest} query parameter could provide you stats for, say latest 10 minutes. Unit is minute. Example: latest=10. Def...(description truncated)\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getStatsTimeseriesApplianceNePk(nePk, startTime, endTime, granularity = 'minute', trafficType = 'optimized_traffic', limit, format = 'CSV', ip, latest, callback) {\n    const meth = 'adapter-getStatsTimeseriesApplianceNePk';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (granularity === undefined || granularity === null || granularity === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['granularity'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (trafficType === undefined || trafficType === null || trafficType === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['trafficType'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, granularity, trafficType, limit, format, ip, latest };\n    const queryParams = {};\n    const pathVars = [nePk];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'getStatsTimeseriesApplianceNePk', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getStatsTimeseriesApplianceNePk'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Stats of appliance Process State.\n   *\n   * @function statsOfApplianceProcessState\n   * @param {string} nePk - nepk id\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  statsOfApplianceProcessState(nePk, callback) {\n    const meth = 'adapter-statsOfApplianceProcessState';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [nePk];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'statsOfApplianceProcessState', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['statsOfApplianceProcessState'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get application time series stats data filter by certain query parameters.\n   *\n   * @function statsTimeseriesApplication\n   * @param {number} startTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the ending time boundary of data time range\n   * @param {string} granularity - Data granularity filtering whether data is minutely data, hourly data or daily data.\n   * @param {string} groupPk - Internal group ID of a group for which you want to retrieve stats\n   * @param {string} trafficType - Filter for data for given traffic type\n   * @param {string} application - Filter for data which belongs to application with name {application}\n   * @param {number} limit - Limit the number of stats entity retrieved. Default and maximum limits are both 10000.\n   * @param {string} format - The only format other than JSON we support currently is CSV, so format=csv.\n   * @param {boolean} ip - Using IP as key for grouping stats instead of using internal appliance id as key. Default value if false\n   * @param {number} latest - Instead of providing {startTime} and {endTime}, using {latest} query parameter could provide you stats for, say latest 10 minutes. Unit is minute. Example: latest=10. Def...(description truncated)\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  statsTimeseriesApplication(startTime, endTime, granularity = 'minute', groupPk, trafficType = 'optimized_traffic', application, limit, format = 'CSV', ip, latest, callback) {\n    const meth = 'adapter-statsTimeseriesApplication';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (granularity === undefined || granularity === null || granularity === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['granularity'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (trafficType === undefined || trafficType === null || trafficType === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['trafficType'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (application === undefined || application === null || application === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['application'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, granularity, groupPk, trafficType, application, limit, format, ip, latest };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'statsTimeseriesApplication', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['statsTimeseriesApplication'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get application time series stats data filter by certain query parameters and certain appliance IDs.\n   *\n   * @function postStatsTimeseriesApplication\n   * @param {object} applianceIDs - JSON array containing appliance IDs you want to filter on.\n   * @param {number} startTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the ending time boundary of data time range\n   * @param {string} granularity - Data granularity filtering whether data is minutely data, hourly data or daily data.\n   * @param {string} trafficType - Filter for data for given traffic type\n   * @param {string} application - Filter for data which belongs to application with name {application}\n   * @param {number} limit - Limit the number of stats entity retrieved. Default and maximum limits are both 10000.\n   * @param {string} format - The only format other than JSON we support currently is CSV, so format=csv.\n   * @param {boolean} ip - Using IP as key for grouping stats instead of using internal appliance id as key. Default value if false\n   * @param {number} latest - Instead of providing {startTime} and {endTime}, using {latest} query parameter could provide you stats for, say latest 10 minutes. Unit is minute. Example: latest=10. Def...(description truncated)\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  postStatsTimeseriesApplication(applianceIDs, startTime, endTime, granularity = 'minute', trafficType = 'optimized_traffic', application, limit, format = 'CSV', ip, latest, callback) {\n    const meth = 'adapter-postStatsTimeseriesApplication';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (applianceIDs === undefined || applianceIDs === null || applianceIDs === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['applianceIDs'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (granularity === undefined || granularity === null || granularity === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['granularity'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (trafficType === undefined || trafficType === null || trafficType === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['trafficType'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (application === undefined || application === null || application === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['application'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, granularity, trafficType, application, limit, format, ip, latest };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = applianceIDs;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'postStatsTimeseriesApplication', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['postStatsTimeseriesApplication'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get application time series stats data of a single appliance filter by certain query parameters.\n   *\n   * @function getStatsTimeseriesApplicationNePk\n   * @param {string} nePk - Internal ID of the appliance to filter from\n   * @param {number} startTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the ending time boundary of data time range\n   * @param {string} granularity - Data granularity filtering whether data is minutely data, hourly data or daily data.\n   * @param {string} trafficType - Filter for data for given traffic type\n   * @param {string} application - Filter for data which belongs to application with name {application}\n   * @param {number} limit - Limit the number of stats entity retrieved. Default and maximum limits are both 10000.\n   * @param {string} format - The only format other than JSON we support currently is CSV, so format=csv.\n   * @param {boolean} ip - Using IP as key for grouping stats instead of using internal appliance id as key. Default value if false\n   * @param {number} latest - Instead of providing {startTime} and {endTime}, using {latest} query parameter could provide you stats for, say latest 10 minutes. Unit is minute. Example: latest=10. Def...(description truncated)\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getStatsTimeseriesApplicationNePk(nePk, startTime, endTime, granularity = 'minute', trafficType = 'optimized_traffic', application, limit, format = 'CSV', ip, latest, callback) {\n    const meth = 'adapter-getStatsTimeseriesApplicationNePk';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (granularity === undefined || granularity === null || granularity === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['granularity'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (trafficType === undefined || trafficType === null || trafficType === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['trafficType'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (application === undefined || application === null || application === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['application'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, granularity, trafficType, application, limit, format, ip, latest };\n    const queryParams = {};\n    const pathVars = [nePk];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'getStatsTimeseriesApplicationNePk', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getStatsTimeseriesApplicationNePk'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get new application time series stats data filter by certain query parameters.\n   *\n   * @function getStatsTimeseriesApplication2\n   * @param {number} startTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the ending time boundary of data time range\n   * @param {string} application - Filter for data which belongs to application with name {application}\n   * @param {string} groupPk - Internal group ID of a group for which you want to retrieve stats\n   * @param {string} format - The only format other than JSON we support currently is CSV, so format=csv.\n   * @param {boolean} total - get all app's total value\n   * @param {number} latest - Instead of providing {startTime} and {endTime}, using {latest} query parameter could provide you stats for, say latest 10 minutes. Unit is minute. Example: latest=10. Def...(description truncated)\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getStatsTimeseriesApplication2(startTime, endTime, application, groupPk, format = 'CSV', total, latest, callback) {\n    const meth = 'adapter-getStatsTimeseriesApplication2';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (application === undefined || application === null || application === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['application'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, application, groupPk, format, total, latest };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'getStatsTimeseriesApplication2', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getStatsTimeseriesApplication2'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get new application time series stats data filter by certain query parameters and certain appliance IDs.\n   *\n   * @function postStatsTimeseriesApplication2\n   * @param {object} applianceIDs - JSON array containing appliance IDs you want to filter on.\n   * @param {number} startTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the ending time boundary of data time range\n   * @param {string} application - Filter for data which belongs to application with name {application}\n   * @param {string} format - The only format other than JSON we support currently is CSV, so format=csv.\n   * @param {boolean} total - get all app's total value\n   * @param {number} latest - Instead of providing {startTime} and {endTime}, using {latest} query parameter could provide you stats for, say latest 10 minutes. Unit is minute. Example: latest=10. Def...(description truncated)\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  postStatsTimeseriesApplication2(applianceIDs, startTime, endTime, application, format = 'CSV', total, latest, callback) {\n    const meth = 'adapter-postStatsTimeseriesApplication2';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (applianceIDs === undefined || applianceIDs === null || applianceIDs === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['applianceIDs'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (application === undefined || application === null || application === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['application'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, application, format, total, latest };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = applianceIDs;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'postStatsTimeseriesApplication2', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['postStatsTimeseriesApplication2'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get new application time series stats data of a single appliance filter by certain query parameters.\n   *\n   * @function getStatsTimeseriesApplication2NePk\n   * @param {string} nePk - Internal ID of the appliance to filter from\n   * @param {number} startTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the ending time boundary of data time range\n   * @param {string} application - Filter for data which belongs to application with name {application}\n   * @param {boolean} total - get all app's total value\n   * @param {string} format - The only format other than JSON we support currently is CSV, so format=csv.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getStatsTimeseriesApplication2NePk(nePk, startTime, endTime, application, total, format = 'CSV', callback) {\n    const meth = 'adapter-getStatsTimeseriesApplication2NePk';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (application === undefined || application === null || application === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['application'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, application, total, format };\n    const queryParams = {};\n    const pathVars = [nePk];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'getStatsTimeseriesApplication2NePk', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getStatsTimeseriesApplication2NePk'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get boost time series stats data of a single appliance filter by certain query parameters.\n   *\n   * @function boostTimeSeriesStats\n   * @param {string} nePk - Internal ID of the appliance to filter from\n   * @param {number} startTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the ending time boundary of data time range\n   * @param {string} granularity - Data granularity filtering whether data is minutely data, hourly data or daily data.\n   * @param {number} limit - Limit the number of stats entity retrieved. Default and maximum limits are both 10000.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  boostTimeSeriesStats(nePk, startTime, endTime, granularity = 'minute', limit, callback) {\n    const meth = 'adapter-boostTimeSeriesStats';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (granularity === undefined || granularity === null || granularity === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['granularity'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, granularity, limit };\n    const queryParams = {};\n    const pathVars = [nePk];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'boostTimeSeriesStats', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['boostTimeSeriesStats'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get tunnel drc time series stats data filter by certain query parameters.\n   *\n   * @function statsTimeseriesDrcTunnel\n   * @param {number} startTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the ending time boundary of data time range\n   * @param {string} granularity - Data granularity filtering whether data is minutely data, hourly data or daily data.\n   * @param {string} groupPk - Internal group ID of a group for which you want to retrieve stats\n   * @param {number} limit - Limit the number of stats entity retrieved. Default and maximum limits are both 10000.\n   * @param {string} format - The only format other than JSON we support currently is CSV, so format=csv.\n   * @param {boolean} ip - Using IP as key for grouping stats instead of using internal appliance id as key. Default value if false\n   * @param {number} latest - Instead of providing {startTime} and {endTime}, using {latest} query parameter could provide you stats for, say latest 10 minutes. Unit is minute. Example: latest=10. Def...(description truncated)\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  statsTimeseriesDrcTunnel(startTime, endTime, granularity = 'minute', groupPk, limit, format = 'CSV', ip, latest, callback) {\n    const meth = 'adapter-statsTimeseriesDrcTunnel';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (granularity === undefined || granularity === null || granularity === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['granularity'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, granularity, groupPk, limit, format, ip, latest };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'statsTimeseriesDrcTunnel', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['statsTimeseriesDrcTunnel'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get tunnel time series drc stats data filter by certain query parameters and certain appliance IDs.\n   *\n   * @function postStatsTimeseriesDrc\n   * @param {object} applianceIDs - JSON array containing appliance IDs you want to filter on.\n   * @param {number} startTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the ending time boundary of data time range\n   * @param {string} granularity - Data granularity filtering whether data is minutely data, hourly data or daily data.\n   * @param {number} limit - Limit the number of stats entity retrieved. Default and maximum limits are both 10000.\n   * @param {string} format - The only format other than JSON we support currently is CSV, so format=csv.\n   * @param {boolean} ip - Using IP as key for grouping stats instead of using internal appliance id as key. Default value if false\n   * @param {number} latest - Instead of providing {startTime} and {endTime}, using {latest} query parameter could provide you stats for, say latest 10 minutes. Unit is minute. Example: latest=10. Def...(description truncated)\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  postStatsTimeseriesDrc(applianceIDs, startTime, endTime, granularity = 'minute', limit, format = 'CSV', ip, latest, callback) {\n    const meth = 'adapter-postStatsTimeseriesDrc';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (applianceIDs === undefined || applianceIDs === null || applianceIDs === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['applianceIDs'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (granularity === undefined || granularity === null || granularity === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['granularity'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, granularity, limit, format, ip, latest };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = applianceIDs;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'postStatsTimeseriesDrc', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['postStatsTimeseriesDrc'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get tunnel time series drc stats data of a single appliance filter by certain query parameters.\n   *\n   * @function getStatsTimeseriesDrcNePk\n   * @param {string} nePk - Internal ID of the appliance to filter from\n   * @param {number} startTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the ending time boundary of data time range\n   * @param {string} granularity - Data granularity filtering whether data is minutely data, hourly data or daily data.\n   * @param {string} tunnelName - Filter for data which belongs to tunnel with name {tunnelName}\n   * @param {number} limit - Limit the number of stats entity retrieved. Default and maximum limits are both 10000.\n   * @param {string} format - The only format other than JSON we support currently is CSV, so format=csv.\n   * @param {boolean} ip - Using IP as key for grouping stats instead of using internal appliance id as key. Default value if false\n   * @param {number} latest - Instead of providing {startTime} and {endTime}, using {latest} query parameter could provide you stats for, say latest 10 minutes. Unit is minute. Example: latest=10. Def...(description truncated)\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getStatsTimeseriesDrcNePk(nePk, startTime, endTime, granularity = 'minute', tunnelName, limit, format = 'CSV', ip, latest, callback) {\n    const meth = 'adapter-getStatsTimeseriesDrcNePk';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (granularity === undefined || granularity === null || granularity === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['granularity'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (tunnelName === undefined || tunnelName === null || tunnelName === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['tunnelName'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, granularity, tunnelName, limit, format, ip, latest };\n    const queryParams = {};\n    const pathVars = [nePk];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'getStatsTimeseriesDrcNePk', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getStatsTimeseriesDrcNePk'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get dscp time series stats data filter by certain query parameters.\n   *\n   * @function statsTimeseriesDscp\n   * @param {number} startTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the ending time boundary of data time range\n   * @param {string} granularity - Data granularity filtering whether data is minutely data, hourly data or daily data.\n   * @param {string} groupPk - Internal group ID of a group for which you want to retrieve stats\n   * @param {string} trafficType - Filter for data for given traffic type\n   * @param {number} dscp - Filter for data which belongs to a certain flow type. Valid DSCP: 0 - 63\n   * @param {number} limit - Limit the number of stats entity retrieved. Default and maximum limits are both 10000.\n   * @param {string} format - The only format other than JSON we support currently is CSV, so format=csv.\n   * @param {boolean} ip - Using IP as key for grouping stats instead of using internal appliance id as key. Default value if false\n   * @param {number} latest - Instead of providing {startTime} and {endTime}, using {latest} query parameter could provide you stats for, say latest 10 minutes. Unit is minute. Example: latest=10. Def...(description truncated)\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  statsTimeseriesDscp(startTime, endTime, granularity = 'minute', groupPk, trafficType = 'optimized_traffic', dscp, limit, format = 'CSV', ip, latest, callback) {\n    const meth = 'adapter-statsTimeseriesDscp';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (granularity === undefined || granularity === null || granularity === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['granularity'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (trafficType === undefined || trafficType === null || trafficType === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['trafficType'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (dscp === undefined || dscp === null || dscp === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['dscp'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, granularity, groupPk, trafficType, dscp, limit, format, ip, latest };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'statsTimeseriesDscp', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['statsTimeseriesDscp'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get dscp time series stats data filter by certain query parameters and certain appliance IDs.\n   *\n   * @function postStatsTimeseriesDscp\n   * @param {object} applianceIDs - JSON array containing appliance IDs you want to filter on.\n   * @param {number} startTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the ending time boundary of data time range\n   * @param {string} granularity - Data granularity filtering whether data is minutely data, hourly data or daily data.\n   * @param {string} trafficType - Filter for data for given traffic type\n   * @param {number} dscp - Filter for data which belongs to a certain flow type. Valid DSCP: 0 - 63\n   * @param {number} limit - Limit the number of stats entity retrieved. Default and maximum limits are both 10000.\n   * @param {string} format - The only format other than JSON we support currently is CSV, so format=csv.\n   * @param {boolean} ip - Using IP as key for grouping stats instead of using internal appliance id as key. Default value if false\n   * @param {number} latest - Instead of providing {startTime} and {endTime}, using {latest} query parameter could provide you stats for, say latest 10 minutes. Unit is minute. Example: latest=10. Def...(description truncated)\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  postStatsTimeseriesDscp(applianceIDs, startTime, endTime, granularity = 'minute', trafficType = 'optimized_traffic', dscp, limit, format = 'CSV', ip, latest, callback) {\n    const meth = 'adapter-postStatsTimeseriesDscp';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (applianceIDs === undefined || applianceIDs === null || applianceIDs === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['applianceIDs'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (granularity === undefined || granularity === null || granularity === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['granularity'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (trafficType === undefined || trafficType === null || trafficType === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['trafficType'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (dscp === undefined || dscp === null || dscp === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['dscp'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, granularity, trafficType, dscp, limit, format, ip, latest };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = applianceIDs;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'postStatsTimeseriesDscp', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['postStatsTimeseriesDscp'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get dscp time series stats data of a single appliance filter by certain query parameters.\n   *\n   * @function getStatsTimeseriesDscpNePk\n   * @param {string} nePk - Internal ID of the appliance to filter from\n   * @param {number} startTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the ending time boundary of data time range\n   * @param {string} granularity - Data granularity filtering whether data is minutely data, hourly data or daily data.\n   * @param {string} trafficType - Filter for data for given traffic type\n   * @param {number} dscp - Filter for data which belongs to a certain flow type. Valid DSCP: 0 - 63\n   * @param {number} limit - Limit the number of stats entity retrieved. Default and maximum limits are both 10000.\n   * @param {string} format - The only format other than JSON we support currently is CSV, so format=csv.\n   * @param {boolean} ip - Using IP as key for grouping stats instead of using internal appliance id as key. Default value if false\n   * @param {number} latest - Instead of providing {startTime} and {endTime}, using {latest} query parameter could provide you stats for, say latest 10 minutes. Unit is minute. Example: latest=10. Def...(description truncated)\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getStatsTimeseriesDscpNePk(nePk, startTime, endTime, granularity = 'minute', trafficType = 'optimized_traffic', dscp, limit, format = 'CSV', ip, latest, callback) {\n    const meth = 'adapter-getStatsTimeseriesDscpNePk';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (granularity === undefined || granularity === null || granularity === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['granularity'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (trafficType === undefined || trafficType === null || trafficType === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['trafficType'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (dscp === undefined || dscp === null || dscp === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['dscp'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, granularity, trafficType, dscp, limit, format, ip, latest };\n    const queryParams = {};\n    const pathVars = [nePk];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'getStatsTimeseriesDscpNePk', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getStatsTimeseriesDscpNePk'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get flow time series stats data filter by certain query parameters.\n   *\n   * @function statsTimeseriesFlow\n   * @param {number} startTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the ending time boundary of data time range\n   * @param {string} granularity - Data granularity filtering whether data is minutely data, hourly data or daily data.\n   * @param {string} groupPk - Internal group ID of a group for which you want to retrieve stats\n   * @param {string} trafficType - Filter for data for given traffic type\n   * @param {string} flowType - Filter for data which belongs to a certain flow type.\n   * @param {number} limit - Limit the number of stats entity retrieved. Default and maximum limits are both 10000.\n   * @param {string} format - The only format other than JSON we support currently is CSV, so format=csv.\n   * @param {boolean} ip - Using IP as key for grouping stats instead of using internal appliance id as key. Default value if false\n   * @param {number} latest - Instead of providing {startTime} and {endTime}, using {latest} query parameter could provide you stats for, say latest 10 minutes. Unit is minute. Example: latest=10. Def...(description truncated)\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  statsTimeseriesFlow(startTime, endTime, granularity = 'minute', groupPk, trafficType = 'optimized_traffic', flowType = 'TCP_ACCELERATED', limit, format = 'CSV', ip, latest, callback) {\n    const meth = 'adapter-statsTimeseriesFlow';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (granularity === undefined || granularity === null || granularity === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['granularity'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (trafficType === undefined || trafficType === null || trafficType === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['trafficType'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (flowType === undefined || flowType === null || flowType === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['flowType'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, granularity, groupPk, trafficType, flowType, limit, format, ip, latest };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'statsTimeseriesFlow', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['statsTimeseriesFlow'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get flow time series stats data filter by certain query parameters and certain appliance IDs.\n   *\n   * @function postStatsTimeseriesFlow\n   * @param {object} applianceIDs - JSON array containing appliance IDs you want to filter on.\n   * @param {number} startTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the ending time boundary of data time range\n   * @param {string} granularity - Data granularity filtering whether data is minutely data, hourly data or daily data.\n   * @param {string} trafficType - Filter for data for given traffic type\n   * @param {string} flowType - Filter for data which belongs to a certain flow type.\n   * @param {number} limit - Limit the number of stats entity retrieved. Default and maximum limits are both 10000.\n   * @param {string} format - The only format other than JSON we support currently is CSV, so format=csv.\n   * @param {boolean} ip - Using IP as key for grouping stats instead of using internal appliance id as key. Default value if false\n   * @param {number} latest - Instead of providing {startTime} and {endTime}, using {latest} query parameter could provide you stats for, say latest 10 minutes. Unit is minute. Example: latest=10. Def...(description truncated)\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  postStatsTimeseriesFlow(applianceIDs, startTime, endTime, granularity = 'minute', trafficType = 'optimized_traffic', flowType = 'TCP_ACCELERATED', limit, format = 'CSV', ip, latest, callback) {\n    const meth = 'adapter-postStatsTimeseriesFlow';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (applianceIDs === undefined || applianceIDs === null || applianceIDs === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['applianceIDs'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (granularity === undefined || granularity === null || granularity === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['granularity'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (trafficType === undefined || trafficType === null || trafficType === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['trafficType'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (flowType === undefined || flowType === null || flowType === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['flowType'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, granularity, trafficType, flowType, limit, format, ip, latest };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = applianceIDs;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'postStatsTimeseriesFlow', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['postStatsTimeseriesFlow'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get flow time series stats data of a single appliance filter by certain query parameters.\n   *\n   * @function getStatsTimeseriesFlowNePk\n   * @param {string} nePk - Internal ID of the appliance to filter from\n   * @param {number} startTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the ending time boundary of data time range\n   * @param {string} granularity - Data granularity filtering whether data is minutely data, hourly data or daily data.\n   * @param {string} trafficType - Filter for data for given traffic type\n   * @param {string} flowType - Filter for data which belongs to a certain flow type.\n   * @param {number} limit - Limit the number of stats entity retrieved. Default and maximum limits are both 10000.\n   * @param {string} format - The only format other than JSON we support currently is CSV, so format=csv.\n   * @param {boolean} ip - Using IP as key for grouping stats instead of using internal appliance id as key. Default value if false\n   * @param {number} latest - Instead of providing {startTime} and {endTime}, using {latest} query parameter could provide you stats for, say latest 10 minutes. Unit is minute. Example: latest=10. Def...(description truncated)\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getStatsTimeseriesFlowNePk(nePk, startTime, endTime, granularity = 'minute', trafficType = 'optimized_traffic', flowType = 'TCP_ACCELERATED', limit, format = 'CSV', ip, latest, callback) {\n    const meth = 'adapter-getStatsTimeseriesFlowNePk';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (granularity === undefined || granularity === null || granularity === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['granularity'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (trafficType === undefined || trafficType === null || trafficType === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['trafficType'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (flowType === undefined || flowType === null || flowType === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['flowType'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, granularity, trafficType, flowType, limit, format, ip, latest };\n    const queryParams = {};\n    const pathVars = [nePk];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'getStatsTimeseriesFlowNePk', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getStatsTimeseriesFlowNePk'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get interface time series stats data of a single appliance filter by certain query parameters.\n   *\n   * @function interfaceTimeseriesStats\n   * @param {string} nePk - Internal ID of the appliance to filter from\n   * @param {number} startTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the ending time boundary of data time range\n   * @param {string} granularity - Data granularity filtering whether data is minutely data, hourly data or daily data.\n   * @param {string} trafficType - Filter for data for given traffic type\n   * @param {string} interfaceName - Filter for data which belongs to interface with name {interface}\n   * @param {number} limit - Limit the number of stats entity retrieved. Default and maximum limits are both 10000.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  interfaceTimeseriesStats(nePk, startTime, endTime, granularity = 'minute', trafficType = 'optimized_traffic', interfaceName, limit, callback) {\n    const meth = 'adapter-interfaceTimeseriesStats';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (granularity === undefined || granularity === null || granularity === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['granularity'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (trafficType === undefined || trafficType === null || trafficType === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['trafficType'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, granularity, trafficType, interfaceName, limit };\n    const queryParams = {};\n    const pathVars = [nePk];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'interfaceTimeseriesStats', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['interfaceTimeseriesStats'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get interface overlay transport time series stats data of a single appliance filter by certain query parameters.\n   *\n   * @function interfaceOverlayTransportTimeseriesStats\n   * @param {string} nePk - Internal ID of the appliance to filter from\n   * @param {number} startTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the ending time boundary of data time range\n   * @param {string} granularity - Data granularity filtering whether data is minutely data, hourly data or daily data.\n   * @param {string} overlay - When it is '0',return all physical tunnels;when it is not given,return all bonded and physical tunnels;otherwise,return bonded tunnels associated with the overlay id.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  interfaceOverlayTransportTimeseriesStats(nePk, startTime, endTime, granularity = 'minute', overlay, callback) {\n    const meth = 'adapter-interfaceOverlayTransportTimeseriesStats';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (granularity === undefined || granularity === null || granularity === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['granularity'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, granularity, overlay };\n    const queryParams = {};\n    const pathVars = [nePk];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'interfaceOverlayTransportTimeseriesStats', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['interfaceOverlayTransportTimeseriesStats'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get internalDrops time series stats data of a single appliance filter by certain query parameters.\n   *\n   * @function statsTimeseriesInternalDrops\n   * @param {string} nePk - Internal ID of the appliance to filter from\n   * @param {number} startTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the ending time boundary of data time range\n   * @param {string} granularity - Data granularity filtering whether data is minutely data, hourly data or daily data.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  statsTimeseriesInternalDrops(nePk, startTime, endTime, granularity = 'minute', callback) {\n    const meth = 'adapter-statsTimeseriesInternalDrops';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (granularity === undefined || granularity === null || granularity === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['granularity'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, granularity };\n    const queryParams = {};\n    const pathVars = [nePk];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'statsTimeseriesInternalDrops', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['statsTimeseriesInternalDrops'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get tunnel time series stats data filter by certain query parameters.\n   *\n   * @function statsTimeseriesTunnel\n   * @param {number} startTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the ending time boundary of data time range\n   * @param {string} key - for filter resource by key.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  statsTimeseriesTunnel(startTime, endTime, key, callback) {\n    const meth = 'adapter-statsTimeseriesTunnel';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (key === undefined || key === null || key === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['key'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, key };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'statsTimeseriesTunnel', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['statsTimeseriesTunnel'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get Mean Opinion Score time series stats data of a single appliance filter by certain query parameters.\n   *\n   * @function mOSTimeSeriesStats\n   * @param {string} nePk - Internal ID of the appliance to filter from\n   * @param {number} startTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the ending time boundary of data time range\n   * @param {string} granularity - Data granularity filtering whether data is minutely data, hourly data or daily data.\n   * @param {string} tunnel - Filter for data which belongs to tunnel with name\n   * @param {number} limit - Limit the number of stats entity retrieved. Default and maximum limits are both 10000.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  mOSTimeSeriesStats(nePk, startTime, endTime, granularity = 'minute', tunnel, limit, callback) {\n    const meth = 'adapter-mOSTimeSeriesStats';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (granularity === undefined || granularity === null || granularity === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['granularity'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (tunnel === undefined || tunnel === null || tunnel === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['tunnel'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, granularity, tunnel, limit };\n    const queryParams = {};\n    const pathVars = [nePk];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'mOSTimeSeriesStats', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['mOSTimeSeriesStats'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get security policy time series stats data of a single appliance filter by certain query parameters.\n   *\n   * @function securityPolicyTimeSeriesStats\n   * @param {string} nePk - Internal ID of the appliance to filter from\n   * @param {number} startTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the ending time boundary of data time range\n   * @param {string} granularity - Data granularity filtering whether data is minutely data, hourly data or daily data.\n   * @param {string} fromZone - Limit the id of source zone from which the traffic passes through.\n   * @param {string} toZone - Limit the id of destination zone to which the traffic goes.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  securityPolicyTimeSeriesStats(nePk, startTime, endTime, granularity = 'minute', fromZone, toZone, callback) {\n    const meth = 'adapter-securityPolicyTimeSeriesStats';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (granularity === undefined || granularity === null || granularity === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['granularity'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (fromZone === undefined || fromZone === null || fromZone === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['fromZone'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (toZone === undefined || toZone === null || toZone === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['toZone'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, granularity, fromZone, toZone };\n    const queryParams = {};\n    const pathVars = [nePk];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'securityPolicyTimeSeriesStats', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['securityPolicyTimeSeriesStats'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get Shaper time series stats data filter by certain query parameters and certain appliance IDs.\n   *\n   * @function shaperTimeseriesStats\n   * @param {string} groupPk - Internal group ID of a group for which you want to retrieve stats\n   * @param {number} startTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the ending time boundary of data time range\n   * @param {string} granularity - Data granularity filtering whether data is minutely data, hourly data or daily data.\n   * @param {number} trafficClass - Filter for data which belongs to trafficClass by integer value {trafficClass} 1 - 10\n   * @param {number} direction - 0 - Outbound/1 - Inbound\n   * @param {boolean} ip - Using IP as key for grouping stats instead of using internal appliance id as key. Default value if false\n   * @param {string} format - The only format other than JSON we support currently is CSV, so format=csv.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  shaperTimeseriesStats(groupPk, startTime, endTime, granularity = 'minute', trafficClass, direction, ip, format = 'CSV', callback) {\n    const meth = 'adapter-shaperTimeseriesStats';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (granularity === undefined || granularity === null || granularity === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['granularity'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (trafficClass === undefined || trafficClass === null || trafficClass === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['trafficClass'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (direction === undefined || direction === null || direction === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['direction'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { groupPk, startTime, endTime, granularity, trafficClass, direction, ip, format };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'shaperTimeseriesStats', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['shaperTimeseriesStats'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get Shaper time series stats data filter by certain query parameters and certain appliance IDs.\n   *\n   * @function postStatsTimeseriesShaper\n   * @param {object} applianceIDs - JSON array containing appliance IDs you want to filter on.\n   * @param {number} startTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the ending time boundary of data time range\n   * @param {string} granularity - Data granularity filtering whether data is minutely data, hourly data or daily data.\n   * @param {number} trafficClass - Filter for data which belongs to trafficClass by integer value {trafficClass} 1 - 10\n   * @param {number} direction - 0 - Outbound/1 - Inbound\n   * @param {boolean} ip - Using IP as key for grouping stats instead of using internal appliance id as key. Default value if false\n   * @param {string} format - The only format other than JSON we support currently is CSV, so format=csv.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  postStatsTimeseriesShaper(applianceIDs, startTime, endTime, granularity = 'minute', trafficClass, direction, ip, format = 'CSV', callback) {\n    const meth = 'adapter-postStatsTimeseriesShaper';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (applianceIDs === undefined || applianceIDs === null || applianceIDs === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['applianceIDs'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (granularity === undefined || granularity === null || granularity === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['granularity'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (trafficClass === undefined || trafficClass === null || trafficClass === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['trafficClass'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (direction === undefined || direction === null || direction === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['direction'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, granularity, trafficClass, direction, ip, format };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = applianceIDs;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'postStatsTimeseriesShaper', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['postStatsTimeseriesShaper'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get traffic class time series stats data filter by certain query parameters.\n   *\n   * @function statsTimeseriesTrafficClass\n   * @param {number} startTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the ending time boundary of data time range\n   * @param {string} granularity - Data granularity filtering whether data is minutely data, hourly data or daily data.\n   * @param {string} groupPk - Internal group ID of a group for which you want to retrieve stats\n   * @param {string} trafficType - Filter for data for given traffic type\n   * @param {number} trafficClass - Filter for data which belongs to trafficClass by integer value {trafficClass} 1 - 10\n   * @param {number} limit - Limit the number of stats entity retrieved. Default and maximum limits are both 10000.\n   * @param {string} format - The only format other than JSON we support currently is CSV, so format=csv.\n   * @param {boolean} ip - Using IP as key for grouping stats instead of using internal appliance id as key. Default value if false\n   * @param {number} latest - Instead of providing {startTime} and {endTime}, using {latest} query parameter could provide you stats for, say latest 10 minutes. Unit is minute. Example: latest=10. Def...(description truncated)\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  statsTimeseriesTrafficClass(startTime, endTime, granularity = 'minute', groupPk, trafficType = 'optimized_traffic', trafficClass, limit, format = 'CSV', ip, latest, callback) {\n    const meth = 'adapter-statsTimeseriesTrafficClass';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (granularity === undefined || granularity === null || granularity === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['granularity'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (trafficType === undefined || trafficType === null || trafficType === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['trafficType'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (trafficClass === undefined || trafficClass === null || trafficClass === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['trafficClass'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, granularity, groupPk, trafficType, trafficClass, limit, format, ip, latest };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'statsTimeseriesTrafficClass', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['statsTimeseriesTrafficClass'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get traffic class time series stats data filter by certain query parameters and certain appliance IDs.\n   *\n   * @function postStatsTimeseriesTrafficClass\n   * @param {object} applianceIDs - JSON array containing appliance IDs you want to filter on.\n   * @param {number} startTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the ending time boundary of data time range\n   * @param {string} granularity - Data granularity filtering whether data is minutely data, hourly data or daily data.\n   * @param {string} trafficType - Filter for data for given traffic type\n   * @param {number} trafficClass - Filter for data which belongs to trafficClass by integer value {trafficClass} 1 - 10\n   * @param {number} limit - Limit the number of stats entity retrieved. Default and maximum limits are both 10000.\n   * @param {string} format - The only format other than JSON we support currently is CSV, so format=csv.\n   * @param {boolean} ip - Using IP as key for grouping stats instead of using internal appliance id as key. Default value if false\n   * @param {number} latest - Instead of providing {startTime} and {endTime}, using {latest} query parameter could provide you stats for, say latest 10 minutes. Unit is minute. Example: latest=10. Def...(description truncated)\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  postStatsTimeseriesTrafficClass(applianceIDs, startTime, endTime, granularity = 'minute', trafficType = 'optimized_traffic', trafficClass, limit, format = 'CSV', ip, latest, callback) {\n    const meth = 'adapter-postStatsTimeseriesTrafficClass';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (applianceIDs === undefined || applianceIDs === null || applianceIDs === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['applianceIDs'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (granularity === undefined || granularity === null || granularity === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['granularity'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (trafficType === undefined || trafficType === null || trafficType === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['trafficType'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (trafficClass === undefined || trafficClass === null || trafficClass === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['trafficClass'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, granularity, trafficType, trafficClass, limit, format, ip, latest };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = applianceIDs;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'postStatsTimeseriesTrafficClass', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['postStatsTimeseriesTrafficClass'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get traffic class time series stats data of a single appliance filter by certain query parameters.\n   *\n   * @function getStatsTimeseriesTrafficClassNePk\n   * @param {string} nePk - Internal ID of the appliance to filter from\n   * @param {number} startTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the ending time boundary of data time range\n   * @param {string} granularity - Data granularity filtering whether data is minutely data, hourly data or daily data.\n   * @param {string} trafficType - Filter for data for given traffic type\n   * @param {number} trafficClass - Filter for data which belongs to trafficClass by integer value {trafficClass} 1 - 10\n   * @param {number} limit - Limit the number of stats entity retrieved. Default and maximum limits are both 10000.\n   * @param {string} format - The only format other than JSON we support currently is CSV, so format=csv.\n   * @param {boolean} ip - Using IP as key for grouping stats instead of using internal appliance id as key. Default value if false\n   * @param {number} latest - Instead of providing {startTime} and {endTime}, using {latest} query parameter could provide you stats for, say latest 10 minutes. Unit is minute. Example: latest=10. Def...(description truncated)\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getStatsTimeseriesTrafficClassNePk(nePk, startTime, endTime, granularity = 'minute', trafficType = 'optimized_traffic', trafficClass, limit, format = 'CSV', ip, latest, callback) {\n    const meth = 'adapter-getStatsTimeseriesTrafficClassNePk';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (granularity === undefined || granularity === null || granularity === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['granularity'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (trafficType === undefined || trafficType === null || trafficType === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['trafficType'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (trafficClass === undefined || trafficClass === null || trafficClass === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['trafficClass'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, granularity, trafficType, trafficClass, limit, format, ip, latest };\n    const queryParams = {};\n    const pathVars = [nePk];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'getStatsTimeseriesTrafficClassNePk', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getStatsTimeseriesTrafficClassNePk'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get tunnel time series stats data filter by certain query parameters.\n   *\n   * @function getStatsTimeseriesTunnel\n   * @param {number} startTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the ending time boundary of data time range\n   * @param {string} granularity - Data granularity filtering whether data is minutely data, hourly data or daily data.\n   * @param {string} groupPk - Internal group ID of a group for which you want to retrieve stats\n   * @param {number} limit - Limit the number of stats entity retrieved. Default and maximum limits are both 10000.\n   * @param {string} format - The only format other than JSON we support currently is CSV, so format=csv.\n   * @param {boolean} ip - Using IP as key for grouping stats instead of using internal appliance id as key. Default value if false\n   * @param {number} latest - Instead of providing {startTime} and {endTime}, using {latest} query parameter could provide you stats for, say latest 10 minutes. Unit is minute. Example: latest=10. Def...(description truncated)\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getStatsTimeseriesTunnel(startTime, endTime, granularity = 'minute', groupPk, limit, format = 'CSV', ip, latest, callback) {\n    const meth = 'adapter-getStatsTimeseriesTunnel';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (granularity === undefined || granularity === null || granularity === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['granularity'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, granularity, groupPk, limit, format, ip, latest };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'getStatsTimeseriesTunnel', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getStatsTimeseriesTunnel'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get tunnel time series stats data filter by certain query parameters and certain appliance IDs.\n   *\n   * @function postStatsTimeseriesTunnel\n   * @param {object} applianceIDs - JSON array containing appliance IDs you want to filter on.\n   * @param {number} startTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the ending time boundary of data time range\n   * @param {string} granularity - Data granularity filtering whether data is minutely data, hourly data or daily data.\n   * @param {number} limit - Limit the number of stats entity retrieved. Default and maximum limits are both 10000.\n   * @param {string} format - The only format other than JSON we support currently is CSV, so format=csv.\n   * @param {boolean} ip - Using IP as key for grouping stats instead of using internal appliance id as key. Default value if false\n   * @param {number} latest - Instead of providing {startTime} and {endTime}, using {latest} query parameter could provide you stats for, say latest 10 minutes. Unit is minute. Example: latest=10. Def...(description truncated)\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  postStatsTimeseriesTunnel(applianceIDs, startTime, endTime, granularity = 'minute', limit, format = 'CSV', ip, latest, callback) {\n    const meth = 'adapter-postStatsTimeseriesTunnel';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (applianceIDs === undefined || applianceIDs === null || applianceIDs === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['applianceIDs'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (granularity === undefined || granularity === null || granularity === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['granularity'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, granularity, limit, format, ip, latest };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = applianceIDs;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'postStatsTimeseriesTunnel', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['postStatsTimeseriesTunnel'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get tunnel time series stats data of a single appliance filter by certain query parameters.\n   *\n   * @function getStatsTimeseriesTunnelNePk\n   * @param {string} nePk - Internal ID of the appliance to filter from\n   * @param {number} startTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the starting time boundary of data time range\n   * @param {number} endTime - Long(Signed 64 bits) value of seconds since EPOCH time indicating the ending time boundary of data time range\n   * @param {string} granularity - Data granularity filtering whether data is minutely data, hourly data or daily data.\n   * @param {string} tunnelName - Filter for data which belongs to tunnel with name {tunnelName}\n   * @param {number} limit - Limit the number of stats entity retrieved. Default and maximum limits are both 10000.\n   * @param {string} format - The only format other than JSON we support currently is CSV, so format=csv.\n   * @param {boolean} ip - Using IP as key for grouping stats instead of using internal appliance id as key. Default value if false\n   * @param {number} latest - Instead of providing {startTime} and {endTime}, using {latest} query parameter could provide you stats for, say latest 10 minutes. Unit is minute. Example: latest=10. Def...(description truncated)\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getStatsTimeseriesTunnelNePk(nePk, startTime, endTime, granularity = 'minute', tunnelName, limit, format = 'CSV', ip, latest, callback) {\n    const meth = 'adapter-getStatsTimeseriesTunnelNePk';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (startTime === undefined || startTime === null || startTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['startTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (endTime === undefined || endTime === null || endTime === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['endTime'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (granularity === undefined || granularity === null || granularity === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['granularity'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (tunnelName === undefined || tunnelName === null || tunnelName === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['tunnelName'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { startTime, endTime, granularity, tunnelName, limit, format, ip, latest };\n    const queryParams = {};\n    const pathVars = [nePk];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Stats', 'getStatsTimeseriesTunnelNePk', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getStatsTimeseriesTunnelNePk'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Configure an appliance's subnets.\n   *\n   * @function confSubnets\n   * @param {string} neId - The node Id of the appliance.\n   * @param {object} operation - operation param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  confSubnets(neId, operation, callback) {\n    const meth = 'adapter-confSubnets';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neId === undefined || neId === null || neId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (operation === undefined || operation === null || operation === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['operation'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [neId];\n    const bodyVars = operation;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Subnets', 'confSubnets', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['confSubnets'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get a discovered appliance's subnets information.\n   *\n   * @function getSubnetsForDiscoveredAppliance\n   * @param {string} discoveredId - The appliance's discovered ID\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getSubnetsForDiscoveredAppliance(discoveredId, callback) {\n    const meth = 'adapter-getSubnetsForDiscoveredAppliance';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (discoveredId === undefined || discoveredId === null || discoveredId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['discoveredId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [discoveredId];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Subnets', 'getSubnetsForDiscoveredAppliance', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getSubnetsForDiscoveredAppliance'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Configure appliance's subnet sharing options\n   *\n   * @function setSubnetSharingOptions\n   * @param {string} neId - The node Id of the appliance.\n   * @param {object} subnetsSystemJson - subnetsSystemJson param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  setSubnetSharingOptions(neId, subnetsSystemJson, callback) {\n    const meth = 'adapter-setSubnetSharingOptions';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neId === undefined || neId === null || neId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (subnetsSystemJson === undefined || subnetsSystemJson === null || subnetsSystemJson === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['subnetsSystemJson'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [neId];\n    const bodyVars = subnetsSystemJson;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Subnets', 'setSubnetSharingOptions', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['setSubnetSharingOptions'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get an appliance's subnets information.\n   *\n   * @function getSubnets\n   * @param {boolean} getCachedData - True means to get the information from Orchestrator database, while false means to get from the appliance .\n   * @param {string} neId - The node id of the appliance.\n   * @param {string} subnet - The subnet to filter the routes received from the appliance(s). Supports IPv4 and IPv6 address types.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getSubnets(getCachedData, neId, subnet, callback) {\n    const meth = 'adapter-getSubnets';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (getCachedData === undefined || getCachedData === null || getCachedData === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['getCachedData'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (neId === undefined || neId === null || neId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { subnet };\n    const queryParams = {};\n    const pathVars = [getCachedData, neId];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Subnets', 'getSubnets', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getSubnets'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get Appliance System  Deployment Information\n   *\n   * @function appSystemDeployInfo\n   * @param {string} neId - neId is the device key assigned by Orchestrator, usually look like '0.NE'.\n   * @param {boolean} cached - Get data from cache (true) or from appliance (false).\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  appSystemDeployInfo(neId, cached, callback) {\n    const meth = 'adapter-appSystemDeployInfo';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neId === undefined || neId === null || neId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (cached === undefined || cached === null || cached === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['cached'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [neId, cached];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('SystemInfo', 'appSystemDeployInfo', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['appSystemDeployInfo'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Discovered  Appliance System  Deployment Information\n   *\n   * @function discoveredAppSystemDeployInfo\n   * @param {string} discoveredId - The discovered appliance ID\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  discoveredAppSystemDeployInfo(discoveredId, callback) {\n    const meth = 'adapter-discoveredAppSystemDeployInfo';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (discoveredId === undefined || discoveredId === null || discoveredId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['discoveredId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [discoveredId];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('SystemInfo', 'discoveredAppSystemDeployInfo', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['discoveredAppSystemDeployInfo'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get Appliance System State Information\n   *\n   * @function appSystemStateInfo\n   * @param {string} neId - neId is the device key assigned by Orchestrator, usually look like '0.NE'.\n   * @param {boolean} cached - Get data from cache (true) or from appliance (false).\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  appSystemStateInfo(neId, cached, callback) {\n    const meth = 'adapter-appSystemStateInfo';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neId === undefined || neId === null || neId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (cached === undefined || cached === null || cached === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['cached'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [neId, cached];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('SystemInfo', 'appSystemStateInfo', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['appSystemStateInfo'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get tunnel threshold crossing alerts\n   *\n   * @function getTunnelTca\n   * @param {string} neId - neId is the device key assigned by Orchestrator, usually look like '0.NE'.\n   * @param {boolean} cached - If true, get data from gmsdb, otherwise get from appliance.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getTunnelTca(neId, cached, callback) {\n    const meth = 'adapter-getTunnelTca';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neId === undefined || neId === null || neId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (cached === undefined || cached === null || cached === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['cached'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { cached };\n    const queryParams = {};\n    const pathVars = [neId];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Tca', 'getTunnelTca', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getTunnelTca'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get system threshold crossing alerts\n   *\n   * @function getSystemTca\n   * @param {string} neId - neId is the device key assigned by Orchestrator, usually look like '0.NE'.\n   * @param {boolean} cached - If true, get data from gmsdb, otherwise get from appliance.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getSystemTca(neId, cached, callback) {\n    const meth = 'adapter-getSystemTca';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neId === undefined || neId === null || neId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (cached === undefined || cached === null || cached === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['cached'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { cached };\n    const queryParams = {};\n    const pathVars = [neId];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Tca', 'getSystemTca', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getSystemTca'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary POST operation to start the packet capture process.\n   *\n   * @function tcpdumpRun\n   * @param {object} postRunConfig - The run data\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  tcpdumpRun(postRunConfig, callback) {\n    const meth = 'adapter-tcpdumpRun';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (postRunConfig === undefined || postRunConfig === null || postRunConfig === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['postRunConfig'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = postRunConfig;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Tcpdump', 'tcpdumpRun', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['tcpdumpRun'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary GET operation to show current packet capture process status.\n   *\n   * @function tcpdumpStatus\n   * @param {string} neId - neId is the device key assigned by Orchestrator, usually look like '0.NE'.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  tcpdumpStatus(neId, callback) {\n    const meth = 'adapter-tcpdumpStatus';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neId === undefined || neId === null || neId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [neId];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Tcpdump', 'tcpdumpStatus', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['tcpdumpStatus'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get the primary keys of all running tcp dumps.\n   *\n   * @function getTcpdumpTcpdumpStatus\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getTcpdumpTcpdumpStatus(callback) {\n    const meth = 'adapter-getTcpdumpTcpdumpStatus';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Tcpdump', 'getTcpdumpTcpdumpStatus', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getTcpdumpTcpdumpStatus'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Returns the complete association map of appliances to template groups\n   *\n   * @function associationAll\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  associationAll(callback) {\n    const meth = 'adapter-associationAll';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Template', 'associationAll', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['associationAll'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Returns the association map of template groups for a single appliance\n   *\n   * @function associationOne\n   * @param {string} nePk - nePk param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  associationOne(nePk, callback) {\n    const meth = 'adapter-associationOne';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [nePk];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Template', 'associationOne', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['associationOne'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Associates the templates with a specific appliance. The array posted is the complete association for that appliance.\n   *\n   * @function associationOnePost\n   * @param {object} body - Template names\n   * @param {string} nePk - nePk param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  associationOnePost(body, nePk, callback) {\n    const meth = 'adapter-associationOnePost';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (body === undefined || body === null || body === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['body'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [nePk];\n    const bodyVars = body;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Template', 'associationOnePost', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['associationOnePost'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Returns the list of template groups applied to the appliance\n   *\n   * @function template\n   * @param {string} nePk - nePk param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  template(nePk, callback) {\n    const meth = 'adapter-template';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [nePk];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Template', 'template', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['template'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Returns history of applied templates by nePk\n   *\n   * @function getTemplateHistoryNePk\n   * @param {string} nePk - nePk param\n   * @param {boolean} latestOnly - latestOnly param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getTemplateHistoryNePk(nePk, latestOnly, callback) {\n    const meth = 'adapter-getTemplateHistoryNePk';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (latestOnly === undefined || latestOnly === null || latestOnly === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['latestOnly'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { latestOnly };\n    const queryParams = {};\n    const pathVars = [nePk];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Template', 'getTemplateHistoryNePk', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getTemplateHistoryNePk'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Creates a new template group\n   *\n   * @function postTemplateTemplateCreate\n   * @param {object} body - body param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  postTemplateTemplateCreate(body, callback) {\n    const meth = 'adapter-postTemplateTemplateCreate';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (body === undefined || body === null || body === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['body'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = body;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Template', 'postTemplateTemplateCreate', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['postTemplateTemplateCreate'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Returns template configurations for all template groups\n   *\n   * @function getTemplateTemplateGroups\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getTemplateTemplateGroups(callback) {\n    const meth = 'adapter-getTemplateTemplateGroups';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Template', 'getTemplateTemplateGroups', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getTemplateTemplateGroups'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Deletes a template group\n   *\n   * @function deleteTemplateTemplateGroupsTemplateGroup\n   * @param {string} templateGroup - templateGroup param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  deleteTemplateTemplateGroupsTemplateGroup(templateGroup, callback) {\n    const meth = 'adapter-deleteTemplateTemplateGroupsTemplateGroup';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (templateGroup === undefined || templateGroup === null || templateGroup === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['templateGroup'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [templateGroup];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Template', 'deleteTemplateTemplateGroupsTemplateGroup', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['deleteTemplateTemplateGroupsTemplateGroup'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Returns template configurations for the specified template group only\n   *\n   * @function getTemplateTemplateGroupsTemplateGroup\n   * @param {string} templateGroup - templateGroup param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getTemplateTemplateGroupsTemplateGroup(templateGroup, callback) {\n    const meth = 'adapter-getTemplateTemplateGroupsTemplateGroup';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (templateGroup === undefined || templateGroup === null || templateGroup === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['templateGroup'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [templateGroup];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Template', 'getTemplateTemplateGroupsTemplateGroup', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getTemplateTemplateGroupsTemplateGroup'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Creates a new template group from an existing one or updates the configuration of the requested template group\n   *\n   * @function postTemplateTemplateGroupsTemplateGroup\n   * @param {string} templateGroup - templateGroup param\n   * @param {object} body - body param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  postTemplateTemplateGroupsTemplateGroup(templateGroup, body, callback) {\n    const meth = 'adapter-postTemplateTemplateGroupsTemplateGroup';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (templateGroup === undefined || templateGroup === null || templateGroup === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['templateGroup'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (body === undefined || body === null || body === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['body'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [templateGroup];\n    const bodyVars = body;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Template', 'postTemplateTemplateGroupsTemplateGroup', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['postTemplateTemplateGroupsTemplateGroup'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Returns the order that template groups will be applied in\n   *\n   * @function groupPrioGet\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  groupPrioGet(callback) {\n    const meth = 'adapter-groupPrioGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Template', 'groupPrioGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['groupPrioGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Post the order that template groups should be applied in, groups not listed are not in a deterministic order\n   *\n   * @function groupPrioPost\n   * @param {object} body - Template names\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  groupPrioPost(body, callback) {\n    const meth = 'adapter-groupPrioPost';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (body === undefined || body === null || body === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['body'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = body;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Template', 'groupPrioPost', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['groupPrioPost'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Returns the selected templates in the template group\n   *\n   * @function getTemplateTemplateSelectionTemplateGroup\n   * @param {string} templateGroup - templateGroup param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getTemplateTemplateSelectionTemplateGroup(templateGroup, callback) {\n    const meth = 'adapter-getTemplateTemplateSelectionTemplateGroup';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (templateGroup === undefined || templateGroup === null || templateGroup === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['templateGroup'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [templateGroup];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Template', 'getTemplateTemplateSelectionTemplateGroup', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getTemplateTemplateSelectionTemplateGroup'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Selects the provided templates in the request body\n   *\n   * @function postTemplateTemplateSelectionTemplateGroup\n   * @param {string} templateGroup - templateGroup param\n   * @param {array} body - Template names\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  postTemplateTemplateSelectionTemplateGroup(templateGroup, body, callback) {\n    const meth = 'adapter-postTemplateTemplateSelectionTemplateGroup';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (templateGroup === undefined || templateGroup === null || templateGroup === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['templateGroup'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (body === undefined || body === null || body === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['body'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [templateGroup];\n    const bodyVars = { body };\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Template', 'postTemplateTemplateSelectionTemplateGroup', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['postTemplateTemplateSelectionTemplateGroup'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Gets all third party licenses information\n   *\n   * @function rdPartyLicenses\n   * @param {string} format - Type of the response format(currently it supports 'txt' only).\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  rdPartyLicenses(format, callback) {\n    const meth = 'adapter-rdPartyLicenses';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { format };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('ThirdPartyLicenses', 'rdPartyLicenses', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['rdPartyLicenses'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Returns Zscaler configuration, including tunnel setting, selected interface label order\n   *\n   * @function zscalerConfigurationGet\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  zscalerConfigurationGet(callback) {\n    const meth = 'adapter-zscalerConfigurationGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('ThirdPartyServices', 'zscalerConfigurationGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['zscalerConfigurationGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Update Returns Zscaler configuration, including tunnel setting, selected interface label order\n   *\n   * @function zscalerConfigurationPost\n   * @param {object} configuration - configuration param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  zscalerConfigurationPost(configuration, callback) {\n    const meth = 'adapter-zscalerConfigurationPost';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (configuration === undefined || configuration === null || configuration === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['configuration'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = configuration;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('ThirdPartyServices', 'zscalerConfigurationPost', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['zscalerConfigurationPost'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Returns Zscaler connectivity status\n   *\n   * @function zscalerConnectivityGet\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  zscalerConnectivityGet(callback) {\n    const meth = 'adapter-zscalerConnectivityGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('ThirdPartyServices', 'zscalerConnectivityGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['zscalerConnectivityGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Returns recommend tunnel setting for Zscaler\n   *\n   * @function zscalerDefaultTunnelSettingGet\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  zscalerDefaultTunnelSettingGet(callback) {\n    const meth = 'adapter-zscalerDefaultTunnelSettingGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('ThirdPartyServices', 'zscalerDefaultTunnelSettingGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['zscalerDefaultTunnelSettingGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Returns Pause Zscaler Orchestration configuration\n   *\n   * @function zscalerPauseOrchestrationGet\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  zscalerPauseOrchestrationGet(callback) {\n    const meth = 'adapter-zscalerPauseOrchestrationGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('ThirdPartyServices', 'zscalerPauseOrchestrationGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['zscalerPauseOrchestrationGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary update pause Zscaler Orchestration configuration\n   *\n   * @function zscalerPauseOrchestrationPost\n   * @param {object} zscalerPauseObj - zscalerPauseObj param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  zscalerPauseOrchestrationPost(zscalerPauseObj, callback) {\n    const meth = 'adapter-zscalerPauseOrchestrationPost';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (zscalerPauseObj === undefined || zscalerPauseObj === null || zscalerPauseObj === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['zscalerPauseObj'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = zscalerPauseObj;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('ThirdPartyServices', 'zscalerPauseOrchestrationPost', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['zscalerPauseOrchestrationPost'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Returns all user configured ZEN Override data\n   *\n   * @function zscalerRemoteEndpointExceptionGet\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  zscalerRemoteEndpointExceptionGet(callback) {\n    const meth = 'adapter-zscalerRemoteEndpointExceptionGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('ThirdPartyServices', 'zscalerRemoteEndpointExceptionGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['zscalerRemoteEndpointExceptionGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Delete Subscription\n   *\n   * @function zscalerSubscriptionDelete\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  zscalerSubscriptionDelete(callback) {\n    const meth = 'adapter-zscalerSubscriptionDelete';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('ThirdPartyServices', 'zscalerSubscriptionDelete', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['zscalerSubscriptionDelete'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Returns Zscaler subscription\n   *\n   * @function zscalerSubscriptionGet\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  zscalerSubscriptionGet(callback) {\n    const meth = 'adapter-zscalerSubscriptionGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('ThirdPartyServices', 'zscalerSubscriptionGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['zscalerSubscriptionGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Add/Update Subscription\n   *\n   * @function zscalerSubscriptionPost\n   * @param {object} subscription - subscription param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  zscalerSubscriptionPost(subscription, callback) {\n    const meth = 'adapter-zscalerSubscriptionPost';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (subscription === undefined || subscription === null || subscription === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['subscription'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = subscription;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('ThirdPartyServices', 'zscalerSubscriptionPost', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['zscalerSubscriptionPost'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get all VPN, Location, discovered and configured ZEN override data for one or more appliances\n   *\n   * @function zscalerVpnLocationExceptionPost\n   * @param {array} applianceList - an array of comma separated nepks.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  zscalerVpnLocationExceptionPost(applianceList, callback) {\n    const meth = 'adapter-zscalerVpnLocationExceptionPost';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (applianceList === undefined || applianceList === null || applianceList === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['applianceList'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = { applianceList };\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('ThirdPartyServices', 'zscalerVpnLocationExceptionPost', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['zscalerVpnLocationExceptionPost'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Deprecated\n   *\n   * @function getBondedTunnelsConfigurationAndStates\n   * @param {object} neIds - neIds is an array of device keys. The device keys is assigned by Orchestrator, usually look like '0.NE'.\n   * @param {number} overlayId - ID of the overlay to filter on\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getBondedTunnelsConfigurationAndStates(neIds, overlayId, callback) {\n    const meth = 'adapter-getBondedTunnelsConfigurationAndStates';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neIds === undefined || neIds === null || neIds === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neIds'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { overlayId };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = neIds;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Tunnels', 'getBondedTunnelsConfigurationAndStates', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getBondedTunnelsConfigurationAndStates'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get the current list of tunnels state\n   *\n   * @function getBondedTunnelsStates\n   * @param {object} neIds - neIds is an array of device keys. The device keys is assigned by Orchestrator, usually look like '0.NE'.\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getBondedTunnelsStates(neIds, callback) {\n    const meth = 'adapter-getBondedTunnelsStates';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neIds === undefined || neIds === null || neIds === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neIds'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = neIds;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Tunnels', 'getBondedTunnelsStates', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getBondedTunnelsStates'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Deprecated. Get the current list of tunnels configuration and their state information\n   *\n   * @function getTunnelsConfigurationAndStates\n   * @param {object} ids - ids is an array of device keys. The device key is assigned by Orchestrator, usually look like '0.NE'.\n   * @param {string} state - The state regular expression which is used to match a tunnel state\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getTunnelsConfigurationAndStates(ids, state, callback) {\n    const meth = 'adapter-getTunnelsConfigurationAndStates';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (ids === undefined || ids === null || ids === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['ids'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { state };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = ids;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Tunnels', 'getTunnelsConfigurationAndStates', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getTunnelsConfigurationAndStates'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get the current list of tunnels state\n   *\n   * @function getTunnelsStates\n   * @param {object} neIds - neIds is an array of device keys. The device keys is assigned by Orchestrator, usually look like '0.NE'.\n   * @param {string} state - The state regular expression which is used to match a tunnel state\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getTunnelsStates(neIds, state, callback) {\n    const meth = 'adapter-getTunnelsStates';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neIds === undefined || neIds === null || neIds === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neIds'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { state };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = neIds;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Tunnels', 'getTunnelsStates', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getTunnelsStates'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Initiate a traceroute on a tunnel\n   *\n   * @function initiateTraceroute\n   * @param {string} id - tunnel id\n   * @param {string} nePk - The nepk of the appliance\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  initiateTraceroute(id, nePk, callback) {\n    const meth = 'adapter-initiateTraceroute';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (id === undefined || id === null || id === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['id'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [id];\n    const bodyVars = { nePk };\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Tunnels', 'initiateTraceroute', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['initiateTraceroute'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get traceroute state for a tunnel\n   *\n   * @function tracerouteState\n   * @param {string} id - tunnel id\n   * @param {string} nePk - The nepk of the appliance\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  tracerouteState(id, nePk, callback) {\n    const meth = 'adapter-tracerouteState';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (id === undefined || id === null || id === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['id'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [id];\n    const bodyVars = { nePk };\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Tunnels', 'tracerouteState', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['tracerouteState'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Deprecated. Get the current list of tunnels configuration and their state information\n   *\n   * @function getThirdPartyTunnelsConfigurationAndStates\n   * @param {object} neIds - neIds is an array of device keys. The device keys is assigned by Orchestrator, usually look like '0.NE'.\n   * @param {string} state - The state regular expression which is used to match a tunnel state\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getThirdPartyTunnelsConfigurationAndStates(neIds, state, callback) {\n    const meth = 'adapter-getThirdPartyTunnelsConfigurationAndStates';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neIds === undefined || neIds === null || neIds === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neIds'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { state };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = neIds;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Tunnels', 'getThirdPartyTunnelsConfigurationAndStates', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getThirdPartyTunnelsConfigurationAndStates'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get the current list of tunnels state\n   *\n   * @function getThirdPartyTunnelsStates\n   * @param {object} neIds - neIds is an array of device keys. The device keys is assigned by Orchestrator, usually look like '0.NE'.\n   * @param {string} state - The state regular expression which is used to match a tunnel state\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getThirdPartyTunnelsStates(neIds, state, callback) {\n    const meth = 'adapter-getThirdPartyTunnelsStates';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neIds === undefined || neIds === null || neIds === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neIds'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { state };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = neIds;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Tunnels', 'getThirdPartyTunnelsStates', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getThirdPartyTunnelsStates'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Search total tunnel count, all appliances\n   *\n   * @function tunnelsCount\n   * @param {boolean} metaData - Sub-resource type\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  tunnelsCount(metaData, callback) {\n    const meth = 'adapter-tunnelsCount';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (metaData === undefined || metaData === null || metaData === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['metaData'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { metaData };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Tunnels2', 'tunnelsCount', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['tunnelsCount'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get bonded tunnels for all appliances\n   *\n   * @function searchAllBondedTunnels\n   * @param {number} limit - The max number of tunnels to return\n   * @param {string} matchingAlias - Search for all tunnels that have this string in it's alias\n   * @param {number} overlayId - Only return bonded tunnels that belong to this overlayId.\n   * @param {string} state - The regular expression to match a tunnel state\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  searchAllBondedTunnels(limit, matchingAlias, overlayId, state, callback) {\n    const meth = 'adapter-searchAllBondedTunnels';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (limit === undefined || limit === null || limit === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['limit'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { limit, matchingAlias, overlayId, state };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Tunnels2', 'searchAllBondedTunnels', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['searchAllBondedTunnels'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get bonded tunnels for one appliance\n   *\n   * @function searchBondedTunnelsForAppliance\n   * @param {string} nePk - The appliance's id/nePk\n   * @param {number} limit - The max number of tunnels to return\n   * @param {string} matchingAlias - Search for all tunnels that have this string in it's alias\n   * @param {number} overlayId - Only return bonded tunnels that belong to this overlayId.\n   * @param {string} state - The regular expression to match a tunnel state\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  searchBondedTunnelsForAppliance(nePk, limit, matchingAlias, overlayId, state, callback) {\n    const meth = 'adapter-searchBondedTunnelsForAppliance';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (limit === undefined || limit === null || limit === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['limit'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { limit, matchingAlias, overlayId, state };\n    const queryParams = {};\n    const pathVars = [nePk];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Tunnels2', 'searchBondedTunnelsForAppliance', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['searchBondedTunnelsForAppliance'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get a specific bonded tunnel for one appliance\n   *\n   * @function getOneBondedTunnel\n   * @param {string} bondedTunnelId - The bonded tunnel id\n   * @param {string} nePk - The appliance's id/nePk\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getOneBondedTunnel(bondedTunnelId, nePk, callback) {\n    const meth = 'adapter-getOneBondedTunnel';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (bondedTunnelId === undefined || bondedTunnelId === null || bondedTunnelId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['bondedTunnelId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [bondedTunnelId, nePk];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Tunnels2', 'getOneBondedTunnel', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getOneBondedTunnel'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get bonded tunnels a physical tunnel belongs to\n   *\n   * @function getBondedTunnelsWithPhysicalTunnels\n   * @param {string} nePk - The appliance's id/nePk\n   * @param {string} physicalTunnelId - A physical tunnel ID, all bonded tunnels that have this tunnel as a child tunnel will be returned\n   * @param {string} state - The regular expression to match a tunnel state\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getBondedTunnelsWithPhysicalTunnels(nePk, physicalTunnelId, state, callback) {\n    const meth = 'adapter-getBondedTunnelsWithPhysicalTunnels';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (physicalTunnelId === undefined || physicalTunnelId === null || physicalTunnelId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['physicalTunnelId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { state };\n    const queryParams = {};\n    const pathVars = [nePk, physicalTunnelId];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Tunnels2', 'getBondedTunnelsWithPhysicalTunnels', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getBondedTunnelsWithPhysicalTunnels'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get all tunnels between appliances\n   *\n   * @function getTunnelsBetweenAppliances\n   * @param {object} ids - List of appliance IDs to retrieve the tunnels between all of them\n   * @param {number} limit - The max number of tunnels to return\n   * @param {string} matchingAlias - Match the tunnel's alias on a text string\n   * @param {string} overlayId - The overlay ID to match tunnels on. 0 would be all physical tunnels, all - would be all bonded tunnels\n   * @param {string} state - The regular expression to match a tunnel state\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getTunnelsBetweenAppliances(ids, limit, matchingAlias, overlayId, state, callback) {\n    const meth = 'adapter-getTunnelsBetweenAppliances';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (ids === undefined || ids === null || ids === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['ids'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (limit === undefined || limit === null || limit === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['limit'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { limit, matchingAlias, overlayId, state };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = ids;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Tunnels2', 'getTunnelsBetweenAppliances', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getTunnelsBetweenAppliances'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Search pass through tunnels\n   *\n   * @function searchAllPassThroughTunnels\n   * @param {number} limit - The max number of tunnels to return\n   * @param {string} matchingAlias - Search for all tunnels that have this string in it's alias\n   * @param {string} matchingService - Search for all tunnels that have this string in it's Peer/service\n   * @param {string} state - The regular expression to match a tunnel state\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  searchAllPassThroughTunnels(limit, matchingAlias, matchingService, state, callback) {\n    const meth = 'adapter-searchAllPassThroughTunnels';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (limit === undefined || limit === null || limit === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['limit'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { limit, matchingAlias, matchingService, state };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Tunnels2', 'searchAllPassThroughTunnels', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['searchAllPassThroughTunnels'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Search pass through tunnels for one appliance\n   *\n   * @function searchAppliancePassthroughTunnels\n   * @param {string} nePk - The appliance's id/nePk\n   * @param {number} limit - The max number of tunnels to return\n   * @param {string} matchingAlias - Search for all tunnels that have this string in it's alias\n   * @param {string} matchingService - Search for all tunnels that have this string in it's Peer/service\n   * @param {string} state - The regular expression to match a tunnel state\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  searchAppliancePassthroughTunnels(nePk, limit, matchingAlias, matchingService, state, callback) {\n    const meth = 'adapter-searchAppliancePassthroughTunnels';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (limit === undefined || limit === null || limit === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['limit'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { limit, matchingAlias, matchingService, state };\n    const queryParams = {};\n    const pathVars = [nePk];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Tunnels2', 'searchAppliancePassthroughTunnels', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['searchAppliancePassthroughTunnels'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get pass through tunnel\n   *\n   * @function getPassThroughTunnel\n   * @param {string} nePk - The appliance's id/nePk\n   * @param {string} passThroughTunnelId - The ID of the pass through tunnel\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getPassThroughTunnel(nePk, passThroughTunnelId, callback) {\n    const meth = 'adapter-getPassThroughTunnel';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (passThroughTunnelId === undefined || passThroughTunnelId === null || passThroughTunnelId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['passThroughTunnelId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [nePk, passThroughTunnelId];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Tunnels2', 'getPassThroughTunnel', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getPassThroughTunnel'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Search physical tunnels, all appliances\n   *\n   * @function searchAllPhysicalTunnels\n   * @param {number} limit - The max number of tunnels to return\n   * @param {string} matchingAlias - Match the tunnel's alias on a text string\n   * @param {string} state - The regular expression to match a tunnel state\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  searchAllPhysicalTunnels(limit, matchingAlias, state, callback) {\n    const meth = 'adapter-searchAllPhysicalTunnels';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (limit === undefined || limit === null || limit === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['limit'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { limit, matchingAlias, state };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Tunnels2', 'searchAllPhysicalTunnels', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['searchAllPhysicalTunnels'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Search physical tunnels for one appliance\n   *\n   * @function getTunnels2PhysicalNePk\n   * @param {string} nePk - The nePk of the appliance\n   * @param {number} limit - The max number of tunnels to return\n   * @param {string} matchingAlias - Match the tunnel's alias on a text string\n   * @param {string} state - The regular expression to match a tunnel state\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getTunnels2PhysicalNePk(nePk, limit, matchingAlias, state, callback) {\n    const meth = 'adapter-getTunnels2PhysicalNePk';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (limit === undefined || limit === null || limit === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['limit'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { limit, matchingAlias, state };\n    const queryParams = {};\n    const pathVars = [nePk];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Tunnels2', 'getTunnels2PhysicalNePk', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getTunnels2PhysicalNePk'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get physical tunnel\n   *\n   * @function getOnePhysicalTunnel\n   * @param {string} nePk - The nePk of the appliance\n   * @param {string} tunnelId - The tunnel's ID\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getOnePhysicalTunnel(nePk, tunnelId, callback) {\n    const meth = 'adapter-getOnePhysicalTunnel';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (nePk === undefined || nePk === null || nePk === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nePk'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (tunnelId === undefined || tunnelId === null || tunnelId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['tunnelId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [nePk, tunnelId];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Tunnels2', 'getOnePhysicalTunnel', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getOnePhysicalTunnel'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get deployment information for appliances managed by the Orchestrator.\n   *\n   * @function tunnelsDeploymentInfo\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  tunnelsDeploymentInfo(callback) {\n    const meth = 'adapter-tunnelsDeploymentInfo';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('TunnelsConfiguration', 'tunnelsDeploymentInfo', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['tunnelsDeploymentInfo'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get the tunnels in each overlay\n   *\n   * @function tunnelsOverlayInfo\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  tunnelsOverlayInfo(callback) {\n    const meth = 'adapter-tunnelsOverlayInfo';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('TunnelsConfiguration', 'tunnelsOverlayInfo', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['tunnelsOverlayInfo'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get all pass through tunnels from all appliances\n   *\n   * @function passThroughTunnelsInfo\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  passThroughTunnelsInfo(callback) {\n    const meth = 'adapter-passThroughTunnelsInfo';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('TunnelsConfiguration', 'passThroughTunnelsInfo', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['passThroughTunnelsInfo'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Add usage count for one UI feature\n   *\n   * @function uiUsageStats\n   * @param {string} uiName - The title of the dialogue or the name of the tab used\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  uiUsageStats(uiName, callback) {\n    const meth = 'adapter-uiUsageStats';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (uiName === undefined || uiName === null || uiName === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['uiName'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [uiName];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('UiUsageStats', 'uiUsageStats', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['uiUsageStats'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Upgrade appliances with option\n   *\n   * @function upgradeAppliances\n   * @param {object} applianceUpgradeEntry - Upgrade appliances post data in JSON\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  upgradeAppliances(applianceUpgradeEntry, callback) {\n    const meth = 'adapter-upgradeAppliances';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (applianceUpgradeEntry === undefined || applianceUpgradeEntry === null || applianceUpgradeEntry === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['applianceUpgradeEntry'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = applianceUpgradeEntry;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('UpgradeAppliances', 'upgradeAppliances', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['upgradeAppliances'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Gets all user details and sessions of appliance\n   *\n   * @function getUserAccount\n   * @param {string} neId - neId is the device key assigned by Orchestrator, usually look like '0.NE'.\n   * @param {string} cached - 'cached = true' will retrieve the user account details from cache .\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getUserAccount(neId, cached, callback) {\n    const meth = 'adapter-getUserAccount';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neId === undefined || neId === null || neId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (cached === undefined || cached === null || cached === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['cached'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { cached };\n    const queryParams = {};\n    const pathVars = [neId];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('UserAccount', 'getUserAccount', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getUserAccount'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Returns all the users in the system\n   *\n   * @function users\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  users(callback) {\n    const meth = 'adapter-users';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Users', 'users', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['users'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Forgot password\n   *\n   * @function forgotPassword\n   * @param {object} forgotPasswordBody - forgotPasswordBody param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  forgotPassword(forgotPasswordBody, callback) {\n    const meth = 'adapter-forgotPassword';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (forgotPasswordBody === undefined || forgotPasswordBody === null || forgotPasswordBody === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['forgotPasswordBody'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = forgotPasswordBody;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Users', 'forgotPassword', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['forgotPassword'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Returns a barcode to scan with an authentication application to set up app based two factor authentication for your account\n   *\n   * @function newTfaKey\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  newTfaKey(callback) {\n    const meth = 'adapter-newTfaKey';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Users', 'newTfaKey', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['newTfaKey'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Resets user password\n   *\n   * @function resetPassword\n   * @param {object} resetPasswordBody - resetPasswordBody param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  resetPassword(resetPasswordBody, callback) {\n    const meth = 'adapter-resetPassword';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (resetPasswordBody === undefined || resetPasswordBody === null || resetPasswordBody === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['resetPasswordBody'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = resetPasswordBody;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Users', 'resetPassword', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['resetPassword'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Creates a new user or updates it. 'Status: Active/Inactive. Role: Admin Manager/Network Monitor'\n   *\n   * @function postUsersNewUser\n   * @param {boolean} newUser - Flag to indicate new user(=true) or update user details(=false)\n   * @param {object} saveUpdateUserBody - saveUpdateUserBody param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  postUsersNewUser(newUser, saveUpdateUserBody, callback) {\n    const meth = 'adapter-postUsersNewUser';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (newUser === undefined || newUser === null || newUser === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['newUser'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (saveUpdateUserBody === undefined || saveUpdateUserBody === null || saveUpdateUserBody === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['saveUpdateUserBody'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [newUser];\n    const bodyVars = saveUpdateUserBody;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Users', 'postUsersNewUser', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['postUsersNewUser'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Deletes the specified user\n   *\n   * @function deleteUsersUserIdUserName\n   * @param {string} userId - Appliance ID\n   * @param {string} userName - userName param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  deleteUsersUserIdUserName(userId, userName, callback) {\n    const meth = 'adapter-deleteUsersUserIdUserName';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (userId === undefined || userId === null || userId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['userId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (userName === undefined || userName === null || userName === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['userName'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [userId, userName];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Users', 'deleteUsersUserIdUserName', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['deleteUsersUserIdUserName'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Gets user by username\n   *\n   * @function getUsersUserName\n   * @param {string} userName - User name\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  getUsersUserName(userName, callback) {\n    const meth = 'adapter-getUsersUserName';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (userName === undefined || userName === null || userName === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['userName'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [userName];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Users', 'getUsersUserName', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['getUsersUserName'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Changes user password\n   *\n   * @function postUsersUsernamePassword\n   * @param {string} username - user name\n   * @param {object} changePasswordBody - changePasswordBody param\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  postUsersUsernamePassword(username, changePasswordBody, callback) {\n    const meth = 'adapter-postUsersUsernamePassword';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (username === undefined || username === null || username === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['username'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (changePasswordBody === undefined || changePasswordBody === null || changePasswordBody === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['changePasswordBody'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [username];\n    const bodyVars = changePasswordBody;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Users', 'postUsersUsernamePassword', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['postUsersUsernamePassword'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get loopback interface configuration on the appliance\n   *\n   * @function loopbackGet\n   * @param {string} neId - Unique key assigned by Orchestrator to each appliance, for eg: '0.NE'\n   * @param {boolean} cached - Get data from cache (true) or from appliance (false)\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  loopbackGet(neId, cached, callback) {\n    const meth = 'adapter-loopbackGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neId === undefined || neId === null || neId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (cached === undefined || cached === null || cached === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['cached'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [neId, cached];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Virtualif', 'loopbackGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['loopbackGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get VTI interface configuration on the appliance\n   *\n   * @function vtiGet\n   * @param {string} neId - Unique key assigned by Orchestrator to each appliance, for eg: '0.NE'\n   * @param {boolean} cached - Get data from cache (true) or from appliance (false)\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  vtiGet(neId, cached, callback) {\n    const meth = 'adapter-vtiGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neId === undefined || neId === null || neId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (cached === undefined || cached === null || cached === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['cached'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [neId, cached];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Virtualif', 'vtiGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['vtiGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get a list of VRRP instances configured on the appliance\n   *\n   * @function vrrpGet\n   * @param {string} neId - Unique key assigned by Orchestrator to each appliance, for eg: '0.NE'\n   * @param {boolean} cached - Get data from cache (true) or from appliance (false)\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  vrrpGet(neId, cached, callback) {\n    const meth = 'adapter-vrrpGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neId === undefined || neId === null || neId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (cached === undefined || cached === null || cached === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['cached'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [neId, cached];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Vrrp', 'vrrpGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['vrrpGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get VXOA images\n   *\n   * @function vXOAImagesGet\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  vXOAImagesGet(callback) {\n    const meth = 'adapter-vXOAImagesGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('VxoaImages', 'vXOAImagesGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['vXOAImagesGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Delete VXOA image\n   *\n   * @function vXOAImagesDelete\n   * @param {string} imageFile - the file name of VXOA image to delete\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  vXOAImagesDelete(imageFile, callback) {\n    const meth = 'adapter-vXOAImagesDelete';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (imageFile === undefined || imageFile === null || imageFile === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['imageFile'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [imageFile];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('VxoaImages', 'vXOAImagesDelete', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['vXOAImagesDelete'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get WCCP service groups settings for the appliance.\n   *\n   * @function wccpConfigGroup\n   * @param {string} neId - neId is the device key assigned by Orchestrator, usually look like '0.NE'.\n   * @param {boolean} cached - Get data from cache (true) or from appliance (false).\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  wccpConfigGroup(neId, cached, callback) {\n    const meth = 'adapter-wccpConfigGroup';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neId === undefined || neId === null || neId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (cached === undefined || cached === null || cached === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['cached'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [neId, cached];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Wccp', 'wccpConfigGroup', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['wccpConfigGroup'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get WCCP system settings for the appliance\n   *\n   * @function wccpConfigSystem\n   * @param {string} neId - neId is the device key assigned by Orchestrator, usually look like '0.NE'.\n   * @param {boolean} cached - Get data from cache (true) or from appliance (false).\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  wccpConfigSystem(neId, cached, callback) {\n    const meth = 'adapter-wccpConfigSystem';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neId === undefined || neId === null || neId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (cached === undefined || cached === null || cached === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['cached'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [neId, cached];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Wccp', 'wccpConfigSystem', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['wccpConfigSystem'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Get WCCP state\n   *\n   * @function wccpState\n   * @param {string} neId - neId is the device key assigned by Orchestrator, usually look like '0.NE'.\n   * @param {boolean} cached - Get data from cache (true) or from appliance (false).\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  wccpState(neId, cached, callback) {\n    const meth = 'adapter-wccpState';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (neId === undefined || neId === null || neId === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['neId'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (cached === undefined || cached === null || cached === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['cached'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [neId, cached];\n    const bodyVars = {};\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Wccp', 'wccpState', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['wccpState'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Returns all Zones defined in Orchestrator\n   *\n   * @function zonesGet\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  zonesGet(callback) {\n    const meth = 'adapter-zonesGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Zones', 'zonesGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['zonesGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Add/Edit Zones\n   *\n   * @function zonesPost\n   * @param {object} zones - JSON object containing all Zones\n   * @param {boolean} deleteDependencies - If true, Zones deleted here will be removed from overlays, policies, interfaces and deployment profiles currently using those zones\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  zonesPost(zones, deleteDependencies, callback) {\n    const meth = 'adapter-zonesPost';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (zones === undefined || zones === null || zones === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['zones'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n    if (deleteDependencies === undefined || deleteDependencies === null || deleteDependencies === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['deleteDependencies'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = { deleteDependencies };\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = zones;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Zones', 'zonesPost', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['zonesPost'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Returns Next Id that should be assigned to a new Zone\n   *\n   * @function nextIdGet\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  nextIdGet(callback) {\n    const meth = 'adapter-nextIdGet';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const reqObj = null;\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Zones', 'nextIdGet', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['nextIdGet'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n\n  /**\n   * @summary Update Next Id\n   *\n   * @function nextIdPost\n   * @param {object} nextIdPost - JSON object containing Next Id\n   * @param {getCallback} callback - a callback function to return the result\n   */\n  /* YOU CAN CHANGE THE PARAMETERS YOU TAKE IN HERE AND IN THE pronghorn.json FILE */\n  nextIdPost(nextIdPost, callback) {\n    const meth = 'adapter-nextIdPost';\n    const origin = `${this.id}-${meth}`;\n    log.trace(origin);\n\n    if (this.suspended && this.suspendMode === 'error') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU VALIDATE DATA */\n    if (nextIdPost === undefined || nextIdPost === null || nextIdPost === '') {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['nextIdPost'], null, null, null);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n\n    /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */\n    const queryParamsAvailable = {};\n    const queryParams = {};\n    const pathVars = [];\n    const bodyVars = nextIdPost;\n\n    // loop in template. long callback arg name to avoid identifier conflicts\n    Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {\n      if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null\n          && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {\n        queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];\n      }\n    });\n\n    // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders\n    const reqObj = {\n      payload: bodyVars,\n      uriPathVars: pathVars,\n      uriQuery: queryParams\n    };\n\n    try {\n      // Make the call -\n      // identifyRequest(entity, action, requestObj, returnDataFlag, callback)\n      return this.requestHandlerInst.identifyRequest('Zones', 'nextIdPost', reqObj, true, (irReturnData, irReturnError) => {\n        // if we received an error or their is no response on the results\n        // return an error\n        if (irReturnError) {\n          /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */\n          return callback(null, irReturnError);\n        }\n        if (!Object.hasOwnProperty.call(irReturnData, 'response')) {\n          const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['nextIdPost'], null, null, null);\n          log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n          return callback(null, errorObj);\n        }\n\n        /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */\n        // return the response\n        return callback(irReturnData, null);\n      });\n    } catch (ex) {\n      const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);\n      log.error(`${origin}: ${errorObj.IAPerror.displayString}`);\n      return callback(null, errorObj);\n    }\n  }\n}\n\nmodule.exports = Silverpeak;\n"]}