   # Create the processing function
   component.process (input, output, context) ->
     # Abort unless WirePattern-style preconditions don't match
-    return unless checkWirePatternPreconditions component, config, input, output
+    return unless checkWirePatternPreconditions config, input, output
     # Populate component.params from control ports
     component.params = populateParams config, input
     # Read input data

    return outProxy[ports[0]]
  return outProxy

checkWirePatternPreconditions = (component, config, input, output) ->
  # First check for required params
  paramsMet = true
  inputsMet = true
  droppedPackets = false
  for param in config.params
    continue unless input.ports[param].isRequired()
    if input.ports[param].isAddressable()
      attached = input.attached param
      unless attached.length
        paramsMet = false
        continue
      withData = attached.filter (idx) -> input.hasData [param, idx]
      if config.arrayPolicy.params is 'all'
        paramsMet = false unless withData.length is attached.length
        continue
      paramsMet = false unless withData.length
      continue
    paramsMet = false unless input.hasData param
  # Then check actual input ports
  for port in config.inPorts
    if input.ports[port].isAddressable()
      attached = input.attached port
      unless attached.length
        inputsMet = false
        continue
      withData = attached.filter (idx) -> input.hasData [port, idx]
      if config.arrayPolicy['in'] is 'all'
        inputsMet = false unless withData.length is attached.length
        continue
      inputsMet = false unless withData.length
      continue
    unless input.hasData port
      inputsMet = false
      continue
    # If input port has data but param requirements are not
    # met, and we're in dropInput mode, read the data and
    # call done
    if config.dropInput and not paramsMet
      input.getData port
      droppedPackets = true

  output.done() if droppedPackets and not paramsMet
  return inputsMet and paramsMet

# Wraps OutPort in WirePattern to add transparent scope support
class OutPortWrapper

      data[port] = {}
      for idx in input.attached port
        continue unless input.hasData [port, idx]
        handleInputCollation data, config, input, port, idx
        data[port][idx] = input.getData [port, idx]
      continue
    continue unless input.hasData port
    handleInputCollation data, config, input, port
    data[port] = input.getData port
  if config.inPorts.length is 1
    return data[config.inPorts[0]]
