This interface contains specifications for the intermediate
    representation of a Knowbot Program.  It allows clients to get,
    set, and delete KP metadata, program code, program state, and
    suitcase elements.
    
The original interface was based on MIME, which may explain
    some of the names. It has evolved away from MIME however mostly
    for performance reasons.
    This interface imports the following interfaces:
    
    This interface defines the following non-OBJECT types:
    
- String
- An alias for ilu.CString
- Strings
- An alias for SEQUENCE OF STRING
- BinaryString
- An alias for SEQUENCE OF BYTE
- ContentHeader
- A RECORDcharacterizing the header for a
	    part.  We expect the content header to include other
	    metadata in future releases. If we didn't, we could just
	    pass the type names and forget defining an entire
	    record.  This type has the following fields:- name
- A Stringwhich is the name of the
		    header.
- type
- A Stringwhich is the type of the
		    header.
 
This interface defines the following exceptions:
    
      - PartNameError
      
- No part matches the specified name.
    
This interface defines the following OBJECT types:
    
      - NamedPart
      
- An interface for construction and manipulation
	of an individual representation part.  This is a general
	container mechanism with strong roots in MIME.  It is not
	specific to Knowbot Programs.
	
       
- Representation
      
- An interface for the representation of a Knowbot Program.
	Representation objects are mostly containers
	for NamedPart objects and are the data
	structure that represents a Knowbot Program while it
	exists at the current KOS.
    
      - GetNames () : Strings
      
- Return the list of all names in this part.
	
       
- SetPart
	(name : String, header : ContentHeader,
	data : BinaryString)
      
- Sets the header and data for the
	named part.  Creates a new part if necessary.
	
       
- GetPart
	(name : String, OUT hdr : ContentHeader,
	OUT data : BinaryString)
      
- Get the content header and contents of a part, return
	through the output parameters
	hdr and data.  Raise
	PartNameError if the part specified by
	name is not found.
	
       
- DeletePart
	(name : String)
      
- Delete the named part.  Raise
	PartNameError if the part specified by
	name is not found.
	
       
- SetInfo
	(name : String, info : ContentHeader)
      
- Set the information object to info for the
	named object.  Raise
	PartNameError if the part specified by
	name is not found.
	
       
- SetData
	(name : String, buffer : BinaryString)
      
- Set the body part of the named part to
	buffer.  Raise PartNameError if
	the part specified by name is not found.
	
       
- GetInfo
	(name : String) : ContentHeader
      
- Return the information object for the specified
	part.  Raise PartNameError if the part
	specified by name is not found.
	
       
- GetData
	(name : String) : BinaryString
      
- Return the body of the named part.  Raise
	PartNameError if the part specified by
	name is not found.
    
      - GetMetadata
	() : Mapping.StringMap
      
- Return the metadata dictionary as a string mapping.
	
       
- GetCode
	() : NamedPart
      
- Return the code part.
	
       
- GetState
	() : NamedPart
      
- Return the state part.
	
       
- GetSuitecase
	() : NamedPart
      
- Return the suitcase part.
	
       
- FreezeDry
	() : BinaryString
      
- Returns the KP as a freeze dried, transportable, opaque
	representation (Like Hans Solo in Return of the Jedi).
	
       
- Marshal
	() : BinaryString
      
- Returns the KP as a marshalled representation.
	This method is Python specific.
	
       
- Pickle() : BinaryString
      
- Returns the KP's as a pickled representation
	This method is Python specific.