<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -4,12 +4,12 @@ require 'adhearsion/voip/menu_state_machine/menu_class'
 module Adhearsion
   module VoIP
     module Asterisk
-      module Commands
+      module Commands 
         
         RESPONSE_PREFIX = &quot;200 result=&quot; unless defined? RESPONSE_PREFIX
         
         # These are the status messages that asterisk will issue after a dial command is executed.
-        # More information here: http://www.voip-info.org/wiki/index.php?page=Asterisk+variable+DIALSTATUS
+	#
         # Here is a current list of dial status messages which are not all necessarily supported by adhearsion:
         # 
         # ANSWER: Call is answered. A successful dial. The caller reached the callee.
@@ -22,8 +22,8 @@ module Adhearsion
         # TORTURE: Privacy mode, callee chose to send caller to torture menu
         # INVALIDARGS: Error parsing Dial command arguments (added for Asterisk 1.4.1, SVN r53135-53136)
         #
-        #
-        DIAL_STATUSES   = Hash.new(:unknown).merge(:answer      =&gt; :answered,
+        # @see http://www.voip-info.org/wiki/index.php?page=Asterisk+variable+DIALSTATUS Asterisk Variable DIALSTATUS
+        DIAL_STATUSES   = Hash.new(:unknown).merge(:answer      =&gt; :answered, #:doc:
                                                    :congestion  =&gt; :congested, 
                                                    :busy        =&gt; :busy,
                                                    :cancel      =&gt; :cancelled,
@@ -42,11 +42,13 @@ module Adhearsion
           end
         } unless defined? DYNAMIC_FEATURE_EXTENSIONS
         
-        def write(message)
+	# Utility method to write to pbx.
+        def write(message) 
           to_pbx.print(message)
         end
         
-        def read
+	# Utility method to read from pbx. Hangup if nil.
+        def read 
           returning from_pbx.gets do |message|
             raise Hangup if message.nil?
             ahn_log.agi.debug &quot;&lt;&lt;&lt; #{message}&quot;
@@ -58,7 +60,7 @@ module Adhearsion
         # FAGI protocol.
         # It is not recommended that you call this method directly unless you plan to write a new command method
         # in which case use this method you to communicate directly with an Asterisk server via the FAGI protocol.
-        # For more information about FAGI visit: http://www.voip-info.org/wiki/view/Asterisk+FastAGI
+        # @see http://www.voip-info.org/wiki/view/Asterisk+FastAGI More information about FAGI
         def raw_response(message = nil)
           ahn_log.agi.debug &quot;&gt;&gt;&gt; #{message}&quot;
           write message if message
@@ -79,8 +81,7 @@ module Adhearsion
         end
         
         # This asterisk dialplan command allows you to instruct Asterisk to start applications
-        # which are typically run from extensions.conf.  For a complete list of these commands
-        # please visit: http://www.voip-info.org/wiki/view/Asterisk+-+documentation+of+application+commands
+        # which are typically run from extensions.conf.
         #
         # The most common commands are already made available through the FAGI interface provided
         # by this code base.  For commands that do not fall into this category, then exec is what you
@@ -89,18 +90,16 @@ module Adhearsion
         # For example, if there are specific asterisk modules you have loaded that will not 
         # available through the standard commands provided through FAGI - then you can used EXEC.
         #
-        # Example:
-        # execute 'SIPAddHeader', '&quot;Call-Info: answer-after=0&quot;
-        # 
-        # Using execute in this way will add a header to an existing SIP call.
+        # @example Using execute in this way will add a header to an existing SIP call.
+        #   execute 'SIPAddHeader', '&quot;Call-Info: answer-after=0&quot;
         # 
+        # @see http://www.voip-info.org/wiki/view/Asterisk+-+documentation+of+application+commands Asterisk Dialplan Commands
         def execute(application, *arguments)
           result = raw_response(&quot;EXEC #{application} #{arguments * '|'}&quot;)
           return false if error?(result)
           result
         end
         
-        ##
         # Hangs up the current channel. After this command is issued, you will not be able to send any more AGI
         # commands but the dialplan Thread will still continue, allowing you to do any post-call work.
         #
@@ -117,11 +116,13 @@ module Adhearsion
         # file encoded using the current channel's codec, if one exists. If not, it will transcode from
         # the default codec (GSM). Asterisk stores its sound files in /var/lib/asterisk/sounds.
         #
-        # Usage:
-        #
+        # @example Play file hello-world.???
         #   play 'hello-world'
+	# @example Speak current time
         #   play Time.now
+	# @example Play sound file, speak number, play two more sound files
         #   play %w&quot;a-connect-charge-of 22 cents-per-minute will-apply&quot;
+	# @example Play two sound files
         #   play &quot;you-sound-cute&quot;, &quot;what-are-you-wearing&quot;
         #
         def play(*arguments)
@@ -137,9 +138,11 @@ module Adhearsion
         #
         # Silence and maxduration is specified in seconds.
         #
-        # Usage:
-        #   record
+        # @example Asterisk generated filename
+        #   filename = record
+        # @example Specified filename
         #   record '/path/to/my-file.gsm'
+        # @example All options specified
         #   record 'my-file.gsm', :silence =&gt; 5, :maxduration =&gt; 120
         #
         def record(*args)
@@ -177,11 +180,9 @@ module Adhearsion
           not @call.inbox.empty?
         end
 
-        # = Menu Command
+        # Menu creates an interactive menu for the caller.
         #
-        # The following documentation was derived from this blog post on Jay Phillips' blog:
-        # 
-        # http://jicksta.com/articles/2008/02/11/menu-command
+        # The following documentation was derived from a post on Jay Phillips' blog (see below).
         # 
         # The menu() command solves the problem of building enormous input-fetching state machines in Ruby without first-class
         # message passing facilities or an external DSL.
@@ -244,18 +245,18 @@ module Adhearsion
         # hook after the other hook (e.g. +on_invalid+, then +on_failure+).
         # 
         # When the +menu()+ state machine runs through the defined rules, it must distinguish between exact and potential matches.
-        # It&#8217;s important to understand the differences between these and how they affect the overall outcome:
+        # It's important to understand the differences between these and how they affect the overall outcome:
         # 
-        # |---------------|-------------------|------------------------------------------------------|
-        # | exact matches |	potential matches	| result                                               |
-        # |---------------|-------------------|------------------------------------------------------|
-        # |  0	          |  0	              | Fail and start over                                  |
-        # |  1	          |  0	              | Match found!                                         |
-        # |  0	          | &gt;0	              | Get another digit                                    |
-        # | &gt;1	          |  0	              | Go with the first exact match                        |
-        # |  1	          | &gt;0	              | Get another digit. If timeout, use exact match       |
-        # | &gt;1	          | &gt;0	              | Get another digit. If timeout, use first exact match |
-        # |---------------|-------------------|------------------------------------------------------|
+        #   |---------------|-------------------|------------------------------------------------------|
+        #   | exact matches |	potential matches	| result                                               |
+        #   |---------------|-------------------|------------------------------------------------------|
+        #   |  0	          |  0	               | Fail and start over                                  |
+        #   |  1	          |  0	               | Match found!                                         |
+        #   |  0	          | &gt;0	               | Get another digit                                    |
+        #   | &gt;1	          |  0	               | Go with the first exact match                        |
+        #   |  1	          | &gt;0	               | Get another digit. If timeout, use exact match       |
+        #   | &gt;1	          | &gt;0	               | Get another digit. If timeout, use first exact match |
+        #   |---------------|-------------------|------------------------------------------------------|
         # 
         # == Database integration
         # 
@@ -290,6 +291,7 @@ module Adhearsion
         # that caused the jump. After all, the context doesn&#8217;t necessary need to be the endpoint from a menu; it can be its own entry
         # point, making menu() effectively a pipeline of re-creating the call.
         # 
+        # @see http://jicksta.com/articles/2008/02/11/menu-command Original Blog Post
         def menu(*args, &amp;block)
           options = args.last.kind_of?(Hash) ? args.pop : {}
           sound_files = args.flatten
@@ -411,7 +413,7 @@ module Adhearsion
           end
       	end
       	
-        # An alternative to DialplanContextProc#+@. When jumping to a context, it will *not* resume executing
+        # Jumps to a context. An alternative to DialplanContextProc#+@. When jumping to a context, it will *not* resume executing
         # the former context when the jumped-to context has finished executing. Make sure you don't have any
         # +ensure+ closures which you expect to execute when the call has finished, as they will run when
         # this method is called.
@@ -440,8 +442,8 @@ module Adhearsion
         end
       	
       	# The queue method puts a call into a call queue to be answered by an agent registered with that queue.
-      	# A full description may be found here: http://www.voip-info.org/wiki-Asterisk+cmd+Queue
       	# The queue method takes a queue_name as an argument to place the caller in the appropriate queue.
+	# @see http://www.voip-info.org/wiki-Asterisk+cmd+Queue Full information on the Asterisk Queue
       	def queue(queue_name)
       	  queue_name = queue_name.to_s
       	  
@@ -526,7 +528,7 @@ module Adhearsion
         # Used to join a particular conference with the MeetMe application. To
         # use MeetMe, be sure you have a proper timing device configured on your
         # Asterisk box. MeetMe is Asterisk's built-in conferencing program.
-        # More info: http://www.voip-info.org/wiki-Asterisk+cmd+MeetMe
+        # @see http://www.voip-info.org/wiki-Asterisk+cmd+MeetMe Asterisk Meetme Application Information
         def join(conference_id, options={})
           conference_id = conference_id.to_s.scan(/\w/).join
           command_flags = options[:options].to_s # This is a passthrough string straight to Asterisk
@@ -539,9 +541,9 @@ module Adhearsion
         end
         
         # Issue this command to access a channel variable that exists in the asterisk dialplan (i.e. extensions.conf)
-        # A complete description is available here: http://www.voip-info.org/wiki/view/get+variable
         # Use get_variable to pass information from other modules or high level configurations from the asterisk dialplan
         # to the adhearsion dialplan.
+	# @see: http://www.voip-info.org/wiki/view/get+variable Asterisk Get Variable
       	def get_variable(variable_name)
       	  result = raw_response(&quot;GET VARIABLE #{variable_name}&quot;)
       	  case result
@@ -553,11 +555,11 @@ module Adhearsion
     	  end
     	  
     	  # Use set_variable to pass information back to the asterisk dial plan.
-    	  # A complete decription is available here: http://www.voip-info.org/wiki/view/set+variable
     	  # Keep in mind that the variables are not global variables.  These variables only exist for the channel
     	  # related to the call that is being serviced by the particular instance of your adhearsion application.
     	  # You will not be able to pass information back to the asterisk dialplan for other instances of your adhearsion
     	  # application to share.  Once the channel is &quot;hungup&quot; then the variables are cleared and their information is gone.
+    	  # @see http://www.voip-info.org/wiki/view/set+variable Asterisk Set Variable
     	  def set_variable(variable_name, value)
     	    raw_response(&quot;SET VARIABLE %s %p&quot; % [variable_name.to_s, value.to_s]) == &quot;200 result=1&quot;
   	    end
@@ -582,8 +584,7 @@ module Adhearsion
   	    end
     	  
     	  # Use the voicemail method to send a caller to a voicemail box to leave a message. 
-    	  # A complete description is avilable at:
-    	  # http://www.voip-info.org/tiki-index.php?page=Asterisk+cmd+VoiceMail
+    	  # @see http://www.voip-info.org/tiki-index.php?page=Asterisk+cmd+VoiceMail Asterisk Voicemail
     	  # The method takes the mailbox_number of the user to leave a message for and a
     	  # greeting_option that will determine which message gets played to the caller.
         def voicemail(*args)
@@ -619,8 +620,8 @@ module Adhearsion
         end
         
         # The voicemail_main method puts a caller into the voicemail system to fetch their voicemail
-        # or set options for their voicemail box. A full description may be found here:
-        # http://www.voip-info.org/wiki-Asterisk+cmd+VoiceMailMain
+        # or set options for their voicemail box.
+        # @see http://www.voip-info.org/wiki-Asterisk+cmd+VoiceMailMain Asterisk VoiceMailMain Command
         def voicemail_main(options={})
           mailbox, context, folder = options.values_at :mailbox, :context, :folder
           authenticate = options.has_key?(:authenticate) ? options[:authenticate] : true
@@ -657,42 +658,43 @@ module Adhearsion
           voicemail_main
         end
         
-        # Use this command to dial an extension i.e. &quot;phone number&quot; in asterisk
-        # This command maps to the Asterisk DIAL command in the asterisk dialplan: http://www.voip-info.org/wiki-Asterisk+cmd+Dial
+        # Use this command to dial an extension or &quot;phone number&quot; in asterisk.
+        # This command maps to the Asterisk DIAL command in the asterisk dialplan. 
         #
         # The first parameter, number, must be a string that represents the extension or &quot;number&quot; that asterisk should dial.
         # Be careful to not just specify a number like 5001, 9095551001
         # You must specify a properly formatted string as Asterisk would expect to use in order to understand
         # whether the call should be dialed using SIP, IAX, or some other means.
-        # Examples:
-        #
-        # Make a call to the PSTN using my SIP provider for VoIP termination:
-        # dial(&quot;SIP/19095551001@my.sip.voip.terminator.us&quot;)
-        # 
-        # Make 3 Simulataneous calls to the SIP extensions separated by &amp; symbols, try for 15 seconds and use the callerid
-        # for this call specified by the variable my_callerid
-        # dial &quot;SIP/jay-desk-650&amp;SIP/jay-desk-601&amp;SIP/jay-desk-601-2&quot;, :for =&gt; 15.seconds, :caller_id =&gt; my_callerid
-        #
-        # Make a call using the IAX provider to the PSTN 
-        # dial(&quot;IAX2/my.id@voipjet/19095551234&quot;, :name=&gt;&quot;John Doe&quot;, :caller_id=&gt;&quot;9095551234&quot;)
         #
         # Options Parameter:
-        # :caller_id - the caller id number to be used when the call is placed.  It is advised you properly adhere to the
+        #
+        # +:caller_id+ - the caller id number to be used when the call is placed.  It is advised you properly adhere to the
         # policy of VoIP termination providers with respect to caller id values.
         #
-        # :name - this is the name which should be passed with the caller ID information 
+        # +:name+ - this is the name which should be passed with the caller ID information
         # if :name=&gt;&quot;John Doe&quot; and :caller_id =&gt; &quot;444-333-1000&quot; then the compelete CID and name would be &quot;John Doe&quot; &lt;4443331000&gt;
         # support for caller id information varies from country to country and from one VoIP termination provider to another.
         #
-        # :for - this option can be thought of best as a timeout.  i.e. timeout after :for if no one answers the call
+        # +:for+ - this option can be thought of best as a timeout.  i.e. timeout after :for if no one answers the call
         # For example, dial(&quot;SIP/jay-desk-650&amp;SIP/jay-desk-601&amp;SIP/jay-desk-601-2&quot;, :for =&gt; 15.seconds, :caller_id =&gt; callerid)
-        # this call will timeout after 15 seconds if 1 of the 3 extensions being dialed do not pick prior to the 15 second time limit 
+        # this call will timeout after 15 seconds if 1 of the 3 extensions being dialed do not pick prior to the 15 second time limit
         #
-        # :options - This is a string of options like &quot;Tr&quot; which are supported by the asterisk DIAL application.
-        # for a complete list of these options and their usage please visit: http://www.voip-info.org/wiki-Asterisk+cmd+Dial
+        # +:options+ - This is a string of options like &quot;Tr&quot; which are supported by the asterisk DIAL application.
+        # for a complete list of these options and their usage please check the link below.
         #
-        # :confirm - ?
+        # +:confirm+ - ?
+	#
+        # @example Make a call to the PSTN using my SIP provider for VoIP termination
+        #   dial(&quot;SIP/19095551001@my.sip.voip.terminator.us&quot;)
         # 
+        # @example Make 3 Simulataneous calls to the SIP extensions separated by &amp; symbols, try for 15 seconds and use the callerid
+        # for this call specified by the variable my_callerid
+        #   dial &quot;SIP/jay-desk-650&amp;SIP/jay-desk-601&amp;SIP/jay-desk-601-2&quot;, :for =&gt; 15.seconds, :caller_id =&gt; my_callerid
+        #
+        # @example Make a call using the IAX provider to the PSTN 
+        #   dial(&quot;IAX2/my.id@voipjet/19095551234&quot;, :name=&gt;&quot;John Doe&quot;, :caller_id=&gt;&quot;9095551234&quot;)
+        #
+	# @see http://www.voip-info.org/wiki-Asterisk+cmd+Dial Asterisk Dial Command
         def dial(number, options={})
           *recognized_options = :caller_id, :name, :for, :options, :confirm
           
@@ -743,7 +745,7 @@ module Adhearsion
           Time.now - start_time
         end
         
-        ##
+        #
         # This will play a sequence of files, stopping the playback if a digit is pressed. If a digit is pressed, it will be
         # returned as a String. If the files played with no keypad input, nil will be returned.
         #
@@ -931,8 +933,8 @@ module Adhearsion
           
           # timeout with pressed digits:    200 result=&lt;digits&gt; (timeout)
           # timeout without pressed digits: 200 result= (timeout)
-          # (http://www.voip-info.org/wiki/view/get+data)
-          def input_timed_out?(result)
+          # @see http://www.voip-info.org/wiki/view/get+data AGI Get Data
+         def input_timed_out?(result)
             result.starts_with?(response_prefix) &amp;&amp; result.ends_with?('(timeout)')
           end
           </diff>
      <filename>lib/adhearsion/voip/asterisk/commands.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,3 @@
-
 # line 1 &quot;lib/adhearsion/voip/asterisk/manager_interface/ami_lexer.rl.rb&quot;
 require File.join(File.dirname(__FILE__), 'ami_messages.rb')
 
@@ -10,8 +9,7 @@ module Adhearsion
 
           BUFFER_SIZE = 8.kilobytes unless defined? BUFFER_SIZE
 
-          
-# line 52 &quot;lib/adhearsion/voip/asterisk/manager_interface/ami_lexer.rl.rb&quot;
+          # line 52 &quot;lib/adhearsion/voip/asterisk/manager_interface/ami_lexer.rl.rb&quot;
 ##
 
           attr_accessor(:ami_version)
@@ -22,7 +20,7 @@ module Adhearsion
             @ragel_stack = []
             
             
-# line 26 &quot;lib/adhearsion/voip/asterisk/manager_interface/ami_lexer.rb&quot;
+# line 24 &quot;lib/adhearsion/voip/asterisk/manager_interface/ami_lexer.rb&quot;
 class &lt;&lt; self
 	attr_accessor :_ami_protocol_parser_actions
 	private :_ami_protocol_parser_actions, :_ami_protocol_parser_actions=
@@ -72,16 +70,21 @@ self._ami_protocol_parser_key_offsets = [
 	625, 626, 627, 628, 630, 632, 634, 635, 
 	636, 638, 640, 642, 644, 646, 648, 649, 
 	650, 665, 666, 681, 696, 711, 713, 714, 
-	716, 731, 746, 748, 749, 751, 753, 755, 
-	757, 759, 761, 763, 765, 767, 769, 771, 
-	773, 775, 777, 779, 781, 782, 783, 785, 
-	801, 817, 833, 835, 836, 838, 854, 870, 
-	886, 888, 889, 891, 908, 925, 942, 959, 
-	976, 993, 1010, 1027, 1044, 1061, 1078, 1095, 
-	1112, 1129, 1145, 1160, 1175, 1177, 1178, 1180, 
-	1195, 1210, 1212, 1228, 1230, 1232, 1248, 1249, 
-	1250, 1253, 1254, 1260, 1261, 1262, 1264, 1266, 
-	1266, 1281, 1283, 1299, 1315
+	716, 731, 746, 748, 750, 753, 755, 758, 
+	761, 764, 767, 770, 773, 776, 779, 782, 
+	785, 788, 791, 794, 797, 798, 799, 801, 
+	818, 835, 852, 855, 857, 860, 862, 879, 
+	896, 913, 916, 918, 921, 923, 941, 959, 
+	977, 995, 1013, 1031, 1049, 1067, 1085, 1103, 
+	1121, 1139, 1157, 1175, 1191, 1206, 1221, 1223, 
+	1224, 1226, 1241, 1256, 1258, 1275, 1278, 1281, 
+	1284, 1287, 1290, 1293, 1296, 1299, 1302, 1305, 
+	1308, 1311, 1314, 1317, 1318, 1320, 1323, 1326, 
+	1329, 1332, 1335, 1338, 1341, 1344, 1347, 1350, 
+	1353, 1356, 1359, 1362, 1365, 1366, 1367, 1369, 
+	1371, 1374, 1391, 1392, 1393, 1396, 1397, 1403, 
+	1404, 1405, 1407, 1409, 1409, 1425, 1428, 1445, 
+	1462, 1476, 1490, 1504
 ]
 
 class &lt;&lt; self
@@ -182,80 +185,103 @@ self._ami_protocol_parser_trans_keys = [
 	57, 59, 64, 65, 90, 91, 96, 97, 
 	122, 123, 126, 58, 32, 47, 48, 57, 
 	59, 64, 65, 90, 91, 96, 97, 122, 
-	123, 126, 13, 32, 13, 10, 13, 13, 
-	45, 13, 45, 13, 69, 13, 78, 13, 
-	68, 13, 32, 13, 67, 13, 79, 13, 
-	77, 13, 77, 13, 65, 13, 78, 13, 
-	68, 13, 45, 13, 45, 13, 10, 10, 
-	13, 13, 58, 32, 47, 48, 57, 59, 
+	123, 126, 13, 32, 10, 13, 10, 13, 
+	45, 10, 13, 10, 13, 45, 10, 13, 
+	69, 10, 13, 78, 10, 13, 68, 10, 
+	13, 32, 10, 13, 67, 10, 13, 79, 
+	10, 13, 77, 10, 13, 77, 10, 13, 
+	65, 10, 13, 78, 10, 13, 68, 10, 
+	13, 45, 10, 13, 45, 13, 10, 10, 
+	13, 10, 13, 58, 32, 47, 48, 57, 
+	59, 64, 65, 90, 91, 96, 97, 122, 
+	123, 126, 10, 13, 58, 32, 47, 48, 
+	57, 59, 64, 65, 90, 91, 96, 97, 
+	122, 123, 126, 10, 13, 58, 32, 47, 
+	48, 57, 59, 64, 65, 90, 91, 96, 
+	97, 122, 123, 126, 10, 13, 32, 10, 
+	13, 10, 13, 45, 10, 13, 10, 13, 
+	58, 32, 47, 48, 57, 59, 64, 65, 
+	90, 91, 96, 97, 122, 123, 126, 10, 
+	13, 58, 32, 47, 48, 57, 59, 64, 
+	65, 90, 91, 96, 97, 122, 123, 126, 
+	10, 13, 58, 32, 47, 48, 57, 59, 
 	64, 65, 90, 91, 96, 97, 122, 123, 
-	126, 13, 58, 32, 47, 48, 57, 59, 
+	126, 10, 13, 32, 10, 13, 10, 13, 
+	45, 10, 13, 10, 13, 45, 58, 32, 
+	47, 48, 57, 59, 64, 65, 90, 91, 
+	96, 97, 122, 123, 126, 10, 13, 58, 
+	69, 32, 47, 48, 57, 59, 64, 65, 
+	90, 91, 96, 97, 122, 123, 126, 10, 
+	13, 58, 78, 32, 47, 48, 57, 59, 
 	64, 65, 90, 91, 96, 97, 122, 123, 
-	126, 13, 58, 32, 47, 48, 57, 59, 
+	126, 10, 13, 58, 68, 32, 47, 48, 
+	57, 59, 64, 65, 90, 91, 96, 97, 
+	122, 123, 126, 10, 13, 32, 58, 33, 
+	47, 48, 57, 59, 64, 65, 90, 91, 
+	96, 97, 122, 123, 126, 10, 13, 58, 
+	67, 32, 47, 48, 57, 59, 64, 65, 
+	90, 91, 96, 97, 122, 123, 126, 10, 
+	13, 58, 79, 32, 47, 48, 57, 59, 
 	64, 65, 90, 91, 96, 97, 122, 123, 
-	126, 13, 32, 13, 10, 13, 13, 58, 
-	32, 47, 48, 57, 59, 64, 65, 90, 
-	91, 96, 97, 122, 123, 126, 13, 58, 
-	32, 47, 48, 57, 59, 64, 65, 90, 
-	91, 96, 97, 122, 123, 126, 13, 58, 
-	32, 47, 48, 57, 59, 64, 65, 90, 
-	91, 96, 97, 122, 123, 126, 13, 32, 
-	13, 10, 13, 13, 45, 58, 32, 47, 
-	48, 57, 59, 64, 65, 90, 91, 96, 
-	97, 122, 123, 126, 13, 58, 69, 32, 
+	126, 10, 13, 58, 77, 32, 47, 48, 
+	57, 59, 64, 65, 90, 91, 96, 97, 
+	122, 123, 126, 10, 13, 58, 77, 32, 
 	47, 48, 57, 59, 64, 65, 90, 91, 
-	96, 97, 122, 123, 126, 13, 58, 78, 
-	32, 47, 48, 57, 59, 64, 65, 90, 
-	91, 96, 97, 122, 123, 126, 13, 58, 
-	68, 32, 47, 48, 57, 59, 64, 65, 
-	90, 91, 96, 97, 122, 123, 126, 13, 
-	32, 58, 33, 47, 48, 57, 59, 64, 
-	65, 90, 91, 96, 97, 122, 123, 126, 
-	13, 58, 67, 32, 47, 48, 57, 59, 
+	96, 97, 122, 123, 126, 10, 13, 58, 
+	65, 32, 47, 48, 57, 59, 64, 66, 
+	90, 91, 96, 97, 122, 123, 126, 10, 
+	13, 58, 78, 32, 47, 48, 57, 59, 
 	64, 65, 90, 91, 96, 97, 122, 123, 
-	126, 13, 58, 79, 32, 47, 48, 57, 
-	59, 64, 65, 90, 91, 96, 97, 122, 
-	123, 126, 13, 58, 77, 32, 47, 48, 
+	126, 10, 13, 58, 68, 32, 47, 48, 
 	57, 59, 64, 65, 90, 91, 96, 97, 
-	122, 123, 126, 13, 58, 77, 32, 47, 
-	48, 57, 59, 64, 65, 90, 91, 96, 
-	97, 122, 123, 126, 13, 58, 65, 32, 
-	47, 48, 57, 59, 64, 66, 90, 91, 
-	96, 97, 122, 123, 126, 13, 58, 78, 
-	32, 47, 48, 57, 59, 64, 65, 90, 
-	91, 96, 97, 122, 123, 126, 13, 58, 
-	68, 32, 47, 48, 57, 59, 64, 65, 
+	122, 123, 126, 10, 13, 45, 58, 32, 
+	47, 48, 57, 59, 64, 65, 90, 91, 
+	96, 97, 122, 123, 126, 10, 13, 45, 
+	58, 32, 47, 48, 57, 59, 64, 65, 
 	90, 91, 96, 97, 122, 123, 126, 13, 
-	45, 58, 32, 47, 48, 57, 59, 64, 
-	65, 90, 91, 96, 97, 122, 123, 126, 
-	13, 45, 58, 32, 47, 48, 57, 59, 
-	64, 65, 90, 91, 96, 97, 122, 123, 
-	126, 13, 58, 32, 47, 48, 57, 59, 
+	58, 32, 47, 48, 57, 59, 64, 65, 
+	90, 91, 96, 97, 122, 123, 126, 58, 
+	32, 47, 48, 57, 59, 64, 65, 90, 
+	91, 96, 97, 122, 123, 126, 58, 32, 
+	47, 48, 57, 59, 64, 65, 90, 91, 
+	96, 97, 122, 123, 126, 13, 32, 13, 
+	10, 13, 58, 32, 47, 48, 57, 59, 
 	64, 65, 90, 91, 96, 97, 122, 123, 
 	126, 58, 32, 47, 48, 57, 59, 64, 
 	65, 90, 91, 96, 97, 122, 123, 126, 
-	58, 32, 47, 48, 57, 59, 64, 65, 
-	90, 91, 96, 97, 122, 123, 126, 13, 
-	32, 13, 10, 13, 58, 32, 47, 48, 
+	13, 32, 10, 13, 58, 32, 47, 48, 
 	57, 59, 64, 65, 90, 91, 96, 97, 
-	122, 123, 126, 58, 32, 47, 48, 57, 
-	59, 64, 65, 90, 91, 96, 97, 122, 
-	123, 126, 13, 32, 13, 58, 32, 47, 
+	122, 123, 126, 10, 13, 45, 10, 13, 
+	69, 10, 13, 78, 10, 13, 68, 10, 
+	13, 32, 10, 13, 67, 10, 13, 79, 
+	10, 13, 77, 10, 13, 77, 10, 13, 
+	65, 10, 13, 78, 10, 13, 68, 10, 
+	13, 45, 10, 13, 45, 13, 10, 13, 
+	10, 13, 32, 10, 13, 45, 10, 13, 
+	69, 10, 13, 78, 10, 13, 68, 10, 
+	13, 32, 10, 13, 67, 10, 13, 79, 
+	10, 13, 77, 10, 13, 77, 10, 13, 
+	65, 10, 13, 78, 10, 13, 68, 10, 
+	13, 45, 10, 13, 45, 13, 13, 10, 
+	13, 10, 13, 10, 13, 32, 10, 13, 
+	58, 32, 47, 48, 57, 59, 64, 65, 
+	90, 91, 96, 97, 122, 123, 126, 65, 
+	115, 10, 13, 58, 13, 13, 65, 69, 
+	82, 101, 114, 10, 115, 86, 118, 69, 
+	101, 10, 13, 32, 47, 48, 57, 59, 
+	64, 65, 90, 91, 96, 97, 122, 123, 
+	126, 10, 13, 45, 10, 13, 45, 32, 
+	47, 48, 57, 59, 64, 65, 90, 91, 
+	96, 97, 122, 123, 126, 10, 13, 45, 
+	32, 47, 48, 57, 59, 64, 65, 90, 
+	91, 96, 97, 122, 123, 126, 32, 47, 
 	48, 57, 59, 64, 65, 90, 91, 96, 
-	97, 122, 123, 126, 13, 32, 13, 32, 
-	13, 58, 32, 47, 48, 57, 59, 64, 
+	97, 122, 123, 126, 32, 47, 48, 57, 
+	59, 64, 65, 90, 91, 96, 97, 122, 
+	123, 126, 32, 47, 48, 57, 59, 64, 
 	65, 90, 91, 96, 97, 122, 123, 126, 
-	65, 115, 10, 13, 58, 13, 13, 65, 
-	69, 82, 101, 114, 10, 115, 86, 118, 
-	69, 101, 13, 32, 47, 48, 57, 59, 
-	64, 65, 90, 91, 96, 97, 122, 123, 
-	126, 13, 45, 13, 45, 32, 47, 48, 
-	57, 59, 64, 65, 90, 91, 96, 97, 
-	122, 123, 126, 13, 45, 32, 47, 48, 
-	57, 59, 64, 65, 90, 91, 96, 97, 
-	122, 123, 126, 32, 47, 48, 57, 59, 
-	64, 65, 90, 91, 96, 97, 122, 123, 
-	126, 0
+	32, 47, 48, 57, 59, 64, 65, 90, 
+	91, 96, 97, 122, 123, 126, 0
 ]
 
 class &lt;&lt; self
@@ -283,16 +309,21 @@ self._ami_protocol_parser_single_lengths = [
 	1, 1, 1, 2, 2, 2, 1, 1, 
 	2, 2, 2, 2, 2, 2, 1, 1, 
 	1, 1, 1, 1, 1, 2, 1, 2, 
-	1, 1, 2, 1, 2, 2, 2, 2, 
-	2, 2, 2, 2, 2, 2, 2, 2, 
-	2, 2, 2, 2, 1, 1, 2, 2, 
-	2, 2, 2, 1, 2, 2, 2, 2, 
-	2, 1, 2, 3, 3, 3, 3, 3, 
+	1, 1, 2, 2, 3, 2, 3, 3, 
+	3, 3, 3, 3, 3, 3, 3, 3, 
+	3, 3, 3, 3, 1, 1, 2, 3, 
+	3, 3, 3, 2, 3, 2, 3, 3, 
+	3, 3, 2, 3, 2, 4, 4, 4, 
+	4, 4, 4, 4, 4, 4, 4, 4, 
+	4, 4, 4, 2, 1, 1, 2, 1, 
+	2, 1, 1, 2, 3, 3, 3, 3, 
 	3, 3, 3, 3, 3, 3, 3, 3, 
-	3, 2, 1, 1, 2, 1, 2, 1, 
-	1, 2, 2, 2, 2, 2, 1, 1, 
-	3, 1, 6, 1, 1, 2, 2, 0, 
-	1, 2, 2, 2, 0
+	3, 3, 3, 1, 2, 3, 3, 3, 
+	3, 3, 3, 3, 3, 3, 3, 3, 
+	3, 3, 3, 3, 1, 1, 2, 2, 
+	3, 3, 1, 1, 3, 1, 6, 1, 
+	1, 2, 2, 0, 2, 3, 3, 3, 
+	0, 0, 0, 0
 ]
 
 class &lt;&lt; self
@@ -323,13 +354,18 @@ self._ami_protocol_parser_range_lengths = [
 	7, 7, 0, 0, 0, 0, 0, 0, 
 	0, 0, 0, 0, 0, 0, 0, 0, 
 	0, 0, 0, 0, 0, 0, 0, 7, 
-	7, 7, 0, 0, 0, 7, 7, 7, 
-	0, 0, 0, 7, 7, 7, 7, 7, 
+	7, 7, 0, 0, 0, 0, 7, 7, 
+	7, 0, 0, 0, 0, 7, 7, 7, 
 	7, 7, 7, 7, 7, 7, 7, 7, 
-	7, 7, 7, 7, 0, 0, 0, 7, 
-	7, 0, 7, 0, 0, 7, 0, 0, 
+	7, 7, 7, 7, 7, 7, 0, 0, 
+	0, 7, 7, 0, 7, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
 	0, 0, 0, 0, 0, 0, 0, 0, 
-	7, 0, 7, 7, 7
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 7, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 7, 0, 7, 7, 
+	7, 7, 7, 7
 ]
 
 class &lt;&lt; self
@@ -357,16 +393,21 @@ self._ami_protocol_parser_index_offsets = [
 	559, 561, 563, 565, 568, 571, 574, 576, 
 	578, 581, 584, 587, 590, 593, 596, 598, 
 	600, 609, 611, 620, 629, 638, 641, 643, 
-	646, 655, 664, 667, 669, 672, 675, 678, 
-	681, 684, 687, 690, 693, 696, 699, 702, 
-	705, 708, 711, 714, 717, 719, 721, 724, 
-	734, 744, 754, 757, 759, 762, 772, 782, 
-	792, 795, 797, 800, 811, 822, 833, 844, 
-	855, 866, 877, 888, 899, 910, 921, 932, 
-	943, 954, 964, 973, 982, 985, 987, 990, 
-	999, 1008, 1011, 1021, 1024, 1027, 1037, 1039, 
-	1041, 1045, 1047, 1054, 1056, 1058, 1061, 1064, 
-	1065, 1074, 1077, 1087, 1097
+	646, 655, 664, 667, 670, 674, 677, 681, 
+	685, 689, 693, 697, 701, 705, 709, 713, 
+	717, 721, 725, 729, 733, 735, 737, 740, 
+	751, 762, 773, 777, 780, 784, 787, 798, 
+	809, 820, 824, 827, 831, 834, 846, 858, 
+	870, 882, 894, 906, 918, 930, 942, 954, 
+	966, 978, 990, 1002, 1012, 1021, 1030, 1033, 
+	1035, 1038, 1047, 1056, 1059, 1070, 1074, 1078, 
+	1082, 1086, 1090, 1094, 1098, 1102, 1106, 1110, 
+	1114, 1118, 1122, 1126, 1128, 1131, 1135, 1139, 
+	1143, 1147, 1151, 1155, 1159, 1163, 1167, 1171, 
+	1175, 1179, 1183, 1187, 1191, 1193, 1195, 1198, 
+	1201, 1205, 1216, 1218, 1220, 1224, 1226, 1233, 
+	1235, 1237, 1240, 1243, 1244, 1254, 1258, 1269, 
+	1280, 1288, 1296, 1304
 ]
 
 class &lt;&lt; self
@@ -457,62 +498,88 @@ self._ami_protocol_parser_indicies = [
 	176, 180, 179, 181, 180, 179, 168, 170, 
 	171, 170, 171, 170, 171, 170, 169, 175, 
 	173, 174, 173, 174, 173, 174, 173, 169, 
-	177, 178, 176, 184, 183, 185, 184, 183, 
-	184, 186, 183, 184, 187, 183, 184, 188, 
-	183, 184, 189, 183, 184, 190, 183, 184, 
-	191, 183, 184, 192, 183, 184, 193, 183, 
-	184, 194, 183, 184, 195, 183, 184, 196, 
-	183, 184, 197, 183, 184, 198, 183, 184, 
-	199, 183, 184, 200, 183, 201, 182, 202, 
-	182, 203, 184, 183, 184, 206, 204, 205, 
-	204, 205, 204, 205, 204, 183, 184, 206, 
+	177, 178, 176, 184, 185, 183, 184, 185, 
+	186, 183, 184, 185, 183, 184, 185, 187, 
+	183, 184, 185, 188, 183, 184, 185, 189, 
+	183, 184, 185, 190, 183, 184, 185, 191, 
+	183, 184, 185, 192, 183, 184, 185, 193, 
+	183, 184, 185, 194, 183, 184, 185, 195, 
+	183, 184, 185, 196, 183, 184, 185, 197, 
+	183, 184, 185, 198, 183, 184, 185, 199, 
+	183, 184, 185, 200, 183, 201, 182, 202, 
+	182, 203, 185, 183, 184, 185, 206, 204, 
+	205, 204, 205, 204, 205, 204, 183, 184, 
+	185, 206, 204, 205, 204, 205, 204, 205, 
+	204, 183, 184, 185, 206, 204, 205, 204, 
+	205, 204, 205, 204, 183, 208, 209, 210, 
+	207, 212, 213, 211, 212, 213, 214, 211, 
+	215, 213, 211, 184, 185, 219, 217, 218, 
+	217, 218, 217, 218, 217, 183, 184, 185, 
+	219, 217, 218, 217, 218, 217, 218, 217, 
+	183, 184, 185, 219, 217, 218, 217, 218, 
+	217, 218, 217, 183, 221, 222, 223, 220, 
+	225, 226, 224, 225, 226, 227, 224, 228, 
+	226, 224, 184, 185, 229, 219, 217, 218, 
+	217, 218, 217, 218, 217, 183, 184, 185, 
+	219, 230, 217, 218, 217, 218, 217, 218, 
+	217, 183, 184, 185, 219, 231, 217, 218, 
+	217, 218, 217, 218, 217, 183, 184, 185, 
+	219, 232, 217, 218, 217, 218, 217, 218, 
+	217, 183, 184, 185, 233, 219, 217, 218, 
+	217, 218, 217, 218, 217, 183, 184, 185, 
+	219, 234, 217, 218, 217, 218, 217, 218, 
+	217, 183, 184, 185, 219, 235, 217, 218, 
+	217, 218, 217, 218, 217, 183, 184, 185, 
+	219, 236, 217, 218, 217, 218, 217, 218, 
+	217, 183, 184, 185, 219, 237, 217, 218, 
+	217, 218, 217, 218, 217, 183, 184, 185, 
+	219, 238, 217, 218, 217, 218, 217, 218, 
+	217, 183, 184, 185, 219, 239, 217, 218, 
+	217, 218, 217, 218, 217, 183, 184, 185, 
+	219, 240, 217, 218, 217, 218, 217, 218, 
+	217, 183, 184, 185, 241, 219, 217, 218, 
+	217, 218, 217, 218, 217, 183, 184, 185, 
+	242, 219, 217, 218, 217, 218, 217, 218, 
+	217, 183, 201, 245, 243, 244, 243, 244, 
+	243, 244, 243, 216, 245, 243, 244, 243, 
+	244, 243, 244, 243, 216, 245, 243, 244, 
+	243, 244, 243, 244, 243, 216, 247, 248, 
+	246, 250, 249, 251, 250, 249, 245, 243, 
+	244, 243, 244, 243, 244, 243, 216, 245, 
+	243, 244, 243, 244, 243, 244, 243, 216, 
+	247, 248, 246, 184, 185, 219, 217, 218, 
+	217, 218, 217, 218, 217, 183, 225, 226, 
+	252, 224, 225, 226, 253, 224, 225, 226, 
+	254, 224, 225, 226, 255, 224, 225, 226, 
+	256, 224, 225, 226, 257, 224, 225, 226, 
+	258, 224, 225, 226, 259, 224, 225, 226, 
+	260, 224, 225, 226, 261, 224, 225, 226, 
+	262, 224, 225, 226, 263, 224, 225, 226, 
+	264, 224, 225, 226, 265, 224, 266, 249, 
+	267, 250, 249, 221, 222, 223, 220, 212, 
+	213, 268, 211, 212, 213, 269, 211, 212, 
+	213, 270, 211, 212, 213, 271, 211, 212, 
+	213, 272, 211, 212, 213, 273, 211, 212, 
+	213, 274, 211, 212, 213, 275, 211, 212, 
+	213, 276, 211, 212, 213, 277, 211, 212, 
+	213, 278, 211, 212, 213, 279, 211, 212, 
+	213, 280, 211, 212, 213, 281, 211, 283, 
+	282, 284, 282, 285, 284, 282, 286, 284, 
+	282, 208, 209, 210, 207, 184, 185, 206, 
 	204, 205, 204, 205, 204, 205, 204, 183, 
-	184, 206, 204, 205, 204, 205, 204, 205, 
-	204, 183, 208, 209, 207, 211, 210, 212, 
-	211, 210, 184, 216, 214, 215, 214, 215, 
-	214, 215, 214, 183, 184, 216, 214, 215, 
-	214, 215, 214, 215, 214, 183, 184, 216, 
-	214, 215, 214, 215, 214, 215, 214, 183, 
-	218, 219, 217, 221, 220, 222, 221, 220, 
-	184, 223, 216, 214, 215, 214, 215, 214, 
-	215, 214, 183, 184, 216, 224, 214, 215, 
-	214, 215, 214, 215, 214, 183, 184, 216, 
-	225, 214, 215, 214, 215, 214, 215, 214, 
-	183, 184, 216, 226, 214, 215, 214, 215, 
-	214, 215, 214, 183, 184, 227, 216, 214, 
-	215, 214, 215, 214, 215, 214, 183, 184, 
-	216, 228, 214, 215, 214, 215, 214, 215, 
-	214, 183, 184, 216, 229, 214, 215, 214, 
-	215, 214, 215, 214, 183, 184, 216, 230, 
-	214, 215, 214, 215, 214, 215, 214, 183, 
-	184, 216, 231, 214, 215, 214, 215, 214, 
-	215, 214, 183, 184, 216, 232, 214, 215, 
-	214, 215, 214, 215, 214, 183, 184, 216, 
-	233, 214, 215, 214, 215, 214, 215, 214, 
-	183, 184, 216, 234, 214, 215, 214, 215, 
-	214, 215, 214, 183, 184, 235, 216, 214, 
-	215, 214, 215, 214, 215, 214, 183, 184, 
-	236, 216, 214, 215, 214, 215, 214, 215, 
-	214, 183, 201, 239, 237, 238, 237, 238, 
-	237, 238, 237, 213, 239, 237, 238, 237, 
-	238, 237, 238, 237, 213, 239, 237, 238, 
-	237, 238, 237, 238, 237, 213, 241, 242, 
-	240, 244, 243, 245, 244, 243, 239, 237, 
-	238, 237, 238, 237, 238, 237, 213, 239, 
-	237, 238, 237, 238, 237, 238, 237, 213, 
-	241, 242, 240, 184, 216, 214, 215, 214, 
-	215, 214, 215, 214, 183, 218, 219, 217, 
-	208, 209, 207, 184, 206, 204, 205, 204, 
-	205, 204, 205, 204, 183, 247, 246, 249, 
-	248, 251, 252, 251, 250, 33, 31, 255, 
-	256, 257, 258, 257, 258, 254, 260, 259, 
-	261, 259, 262, 262, 259, 263, 263, 259, 
-	169, 265, 266, 267, 266, 267, 266, 267, 
-	266, 264, 184, 186, 183, 184, 271, 270, 
-	272, 270, 272, 270, 272, 270, 183, 184, 
-	271, 270, 272, 270, 272, 270, 272, 270, 
-	183, 273, 274, 273, 274, 273, 274, 273, 
-	269, 0
+	288, 287, 290, 289, 292, 293, 292, 291, 
+	33, 31, 296, 297, 298, 299, 298, 299, 
+	295, 301, 300, 302, 300, 303, 303, 300, 
+	304, 304, 300, 169, 306, 307, 308, 309, 
+	308, 309, 308, 309, 308, 305, 184, 185, 
+	186, 183, 184, 185, 313, 312, 314, 312, 
+	314, 312, 314, 312, 183, 184, 185, 313, 
+	312, 314, 312, 314, 312, 314, 312, 183, 
+	315, 316, 315, 316, 315, 316, 315, 311, 
+	315, 316, 315, 316, 315, 316, 315, 311, 
+	315, 316, 315, 316, 315, 316, 315, 311, 
+	315, 316, 315, 316, 315, 316, 315, 311, 
+	0
 ]
 
 class &lt;&lt; self
@@ -520,41 +587,46 @@ class &lt;&lt; self
 	private :_ami_protocol_parser_trans_targs, :_ami_protocol_parser_trans_targs=
 end
 self._ami_protocol_parser_trans_targs = [
-	222, 2, 3, 4, 5, 6, 7, 8, 
+	258, 2, 3, 4, 5, 6, 7, 8, 
 	9, 10, 11, 12, 13, 14, 15, 16, 
 	17, 18, 19, 20, 21, 22, 23, 27, 
-	24, 25, 26, 222, 29, 225, 32, 30, 
-	224, 31, 224, 224, 224, 226, 36, 37, 
+	24, 25, 26, 258, 29, 261, 32, 30, 
+	260, 31, 260, 260, 260, 262, 36, 37, 
 	38, 39, 40, 41, 42, 43, 44, 45, 
 	46, 47, 48, 49, 50, 51, 52, 53, 
 	54, 55, 56, 57, 61, 58, 59, 60, 
-	226, 63, 64, 65, 66, 67, 68, 69, 
-	67, 68, 226, 71, 72, 73, 74, 75, 
+	262, 63, 64, 65, 66, 67, 68, 69, 
+	67, 68, 262, 71, 72, 73, 74, 75, 
 	76, 77, 78, 79, 129, 139, 144, 80, 
 	81, 82, 83, 84, 85, 86, 116, 117, 
 	87, 88, 89, 90, 91, 115, 90, 91, 
-	92, 93, 94, 101, 102, 226, 95, 96, 
+	92, 93, 94, 101, 102, 262, 95, 96, 
 	97, 98, 99, 114, 98, 99, 100, 103, 
 	104, 105, 106, 107, 108, 109, 110, 111, 
 	113, 110, 111, 112, 118, 119, 120, 121, 
 	122, 123, 124, 125, 126, 128, 125, 126, 
 	127, 130, 131, 132, 133, 134, 135, 136, 
-	137, 138, 226, 140, 141, 142, 143, 226, 
-	145, 146, 147, 148, 149, 150, 151, 226, 
-	153, 0, 154, 161, 231, 155, 156, 157, 
-	158, 159, 162, 158, 159, 160, 232, 163, 
+	137, 138, 262, 140, 141, 142, 143, 262, 
+	145, 146, 147, 148, 149, 150, 151, 262, 
+	153, 0, 154, 161, 267, 155, 156, 157, 
+	158, 159, 162, 158, 159, 160, 268, 163, 
 	164, 165, 166, 167, 168, 169, 170, 171, 
 	172, 173, 174, 175, 176, 177, 178, 179, 
-	180, 181, 232, 233, 184, 185, 186, 187, 
-	188, 220, 187, 188, 234, 232, 190, 191, 
-	192, 193, 194, 219, 193, 194, 235, 196, 
-	197, 198, 199, 200, 201, 202, 203, 204, 
-	205, 206, 207, 208, 209, 210, 211, 212, 
-	213, 214, 217, 213, 214, 236, 222, 223, 
-	222, 1, 28, 33, 34, 224, 226, 227, 
-	228, 229, 230, 226, 226, 35, 62, 70, 
-	163, 182, 183, 221, 232, 232, 189, 195, 
-	218, 215, 216
+	180, 181, 268, 269, 184, 185, 186, 187, 
+	188, 189, 256, 187, 188, 189, 238, 270, 
+	268, 191, 192, 193, 194, 195, 196, 237, 
+	194, 195, 196, 221, 271, 198, 199, 200, 
+	201, 202, 203, 204, 205, 206, 207, 208, 
+	209, 210, 211, 212, 213, 214, 215, 216, 
+	219, 215, 216, 272, 222, 223, 224, 225, 
+	226, 227, 228, 229, 230, 231, 232, 233, 
+	234, 235, 236, 273, 239, 240, 241, 242, 
+	243, 244, 245, 246, 247, 248, 249, 250, 
+	251, 252, 253, 255, 254, 274, 275, 258, 
+	259, 258, 1, 28, 33, 34, 260, 262, 
+	263, 264, 265, 266, 262, 262, 35, 62, 
+	70, 163, 164, 182, 183, 257, 268, 268, 
+	190, 197, 220, 217, 218
 ]
 
 class &lt;&lt; self
@@ -588,15 +660,20 @@ self._ami_protocol_parser_trans_actions = [
 	0, 0, 0, 0, 0, 0, 0, 0, 
 	0, 0, 0, 0, 0, 0, 0, 0, 
 	21, 0, 57, 116, 0, 0, 11, 13, 
-	79, 13, 0, 15, 109, 63, 0, 0, 
-	11, 13, 79, 13, 0, 15, 109, 0, 
-	0, 0, 0, 0, 0, 0, 0, 0, 
-	0, 0, 0, 0, 21, 0, 0, 11, 
-	13, 79, 13, 0, 15, 31, 39, 31, 
-	41, 0, 91, 17, 91, 33, 51, 0, 
-	31, 31, 31, 53, 49, 0, 0, 0, 
-	19, 19, 76, 76, 61, 59, 9, 9, 
-	9, 9, 9
+	13, 79, 13, 0, 0, 15, 0, 109, 
+	63, 0, 0, 11, 13, 13, 79, 13, 
+	0, 0, 15, 0, 109, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 21, 0, 0, 11, 13, 79, 
+	13, 0, 15, 31, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 21, 15, 31, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 21, 0, 15, 15, 31, 31, 39, 
+	31, 41, 0, 91, 17, 91, 33, 51, 
+	0, 31, 31, 31, 53, 49, 0, 0, 
+	0, 19, 19, 19, 76, 76, 61, 59, 
+	9, 9, 9, 9, 9
 ]
 
 class &lt;&lt; self
@@ -631,9 +708,14 @@ self._ami_protocol_parser_to_state_actions = [
 	0, 0, 0, 0, 0, 0, 0, 0, 
 	0, 0, 0, 0, 0, 0, 0, 0, 
 	0, 0, 0, 0, 0, 0, 0, 0, 
-	0, 0, 0, 0, 0, 0, 27, 0, 
-	106, 0, 27, 0, 0, 0, 0, 0, 
-	106, 0, 0, 0, 0
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 27, 0, 106, 0, 27, 0, 
+	0, 0, 0, 0, 106, 0, 0, 0, 
+	0, 0, 0, 0
 ]
 
 class &lt;&lt; self
@@ -668,9 +750,14 @@ self._ami_protocol_parser_from_state_actions = [
 	0, 0, 0, 0, 0, 0, 0, 0, 
 	0, 0, 0, 0, 0, 0, 0, 0, 
 	0, 0, 0, 0, 0, 0, 0, 0, 
-	0, 0, 0, 0, 0, 0, 29, 0, 
-	29, 0, 29, 0, 0, 0, 0, 0, 
-	29, 0, 0, 0, 0
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 29, 0, 29, 0, 29, 0, 
+	0, 0, 0, 0, 29, 0, 0, 0, 
+	0, 0, 0, 0
 ]
 
 class &lt;&lt; self
@@ -701,23 +788,28 @@ self._ami_protocol_parser_eof_trans = [
 	0, 0, 0, 183, 183, 183, 183, 183, 
 	183, 183, 183, 183, 183, 183, 183, 183, 
 	183, 183, 183, 183, 183, 183, 0, 0, 
-	0, 0, 0, 0, 0, 214, 214, 214, 
-	214, 214, 214, 214, 214, 214, 214, 214, 
-	214, 214, 214, 214, 214, 214, 214, 214, 
-	214, 214, 214, 214, 214, 214, 214, 214, 
-	214, 214, 214, 214, 0, 0, 0, 249, 
-	0, 254, 0, 260, 260, 260, 260, 0, 
-	0, 269, 270, 270, 270
+	0, 0, 0, 0, 0, 0, 217, 217, 
+	217, 217, 217, 217, 217, 217, 217, 217, 
+	217, 217, 217, 217, 217, 217, 217, 217, 
+	217, 217, 217, 217, 217, 217, 217, 217, 
+	217, 217, 217, 217, 217, 217, 217, 217, 
+	217, 217, 217, 217, 217, 217, 217, 217, 
+	217, 217, 217, 217, 217, 217, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 290, 0, 295, 0, 301, 
+	301, 301, 301, 0, 0, 311, 312, 312, 
+	312, 312, 312, 312
 ]
 
 class &lt;&lt; self
 	attr_accessor :ami_protocol_parser_start
 end
-self.ami_protocol_parser_start = 222;
+self.ami_protocol_parser_start = 258;
 class &lt;&lt; self
 	attr_accessor :ami_protocol_parser_first_final
 end
-self.ami_protocol_parser_first_final = 222;
+self.ami_protocol_parser_first_final = 258;
 class &lt;&lt; self
 	attr_accessor :ami_protocol_parser_error
 end
@@ -726,15 +818,15 @@ self.ami_protocol_parser_error = 0;
 class &lt;&lt; self
 	attr_accessor :ami_protocol_parser_en_irregularity
 end
-self.ami_protocol_parser_en_irregularity = 224;
+self.ami_protocol_parser_en_irregularity = 260;
 class &lt;&lt; self
 	attr_accessor :ami_protocol_parser_en_main
 end
-self.ami_protocol_parser_en_main = 222;
+self.ami_protocol_parser_en_main = 258;
 class &lt;&lt; self
 	attr_accessor :ami_protocol_parser_en_protocol
 end
-self.ami_protocol_parser_en_protocol = 226;
+self.ami_protocol_parser_en_protocol = 262;
 class &lt;&lt; self
 	attr_accessor :ami_protocol_parser_en_success
 end
@@ -742,10 +834,10 @@ self.ami_protocol_parser_en_success = 152;
 class &lt;&lt; self
 	attr_accessor :ami_protocol_parser_en_response_follows
 end
-self.ami_protocol_parser_en_response_follows = 232;
+self.ami_protocol_parser_en_response_follows = 268;
 
 
-# line 749 &quot;lib/adhearsion/voip/asterisk/manager_interface/ami_lexer.rb&quot;
+# line 841 &quot;lib/adhearsion/voip/asterisk/manager_interface/ami_lexer.rb&quot;
 begin
 	     @current_pointer ||= 0
 	    @data_ending_pointer ||=   @data.length
@@ -755,7 +847,6 @@ begin
 	    @token_end = nil
 	   @ragel_act = 0
 end
-
 # line 79 &quot;lib/adhearsion/voip/asterisk/manager_interface/ami_lexer.rl.rb&quot;
 ##
             
@@ -768,7 +859,7 @@ end
         
           def resume!
             
-# line 772 &quot;lib/adhearsion/voip/asterisk/manager_interface/ami_lexer.rb&quot;
+# line 863 &quot;lib/adhearsion/voip/asterisk/manager_interface/ami_lexer.rb&quot;
 begin
 	_klen, _trans, _keys, _acts, _nacts = nil
 	_goto_level = 0
@@ -803,7 +894,7 @@ begin
     @token_start =      @current_pointer
 		end
 # line 1 &quot;lib/adhearsion/voip/asterisk/manager_interface/ami_lexer.rl.rb&quot;
-# line 807 &quot;lib/adhearsion/voip/asterisk/manager_interface/ami_lexer.rb&quot;
+# line 898 &quot;lib/adhearsion/voip/asterisk/manager_interface/ami_lexer.rb&quot;
 		end # from state action switch
 	end
 	if _trigger_goto
@@ -1012,7 +1103,7 @@ when 24 then
 # line 38 &quot;lib/adhearsion/voip/asterisk/manager_interface/ami_lexer.rl.rb&quot;
 		begin
  	begin
-		    @current_state = 232
+		    @current_state = 268
 		_trigger_goto = true
 		_goto_level = _again
 		break
@@ -1035,7 +1126,7 @@ when 26 then
 # line 78 &quot;lib/adhearsion/voip/asterisk/manager_interface/ami_lexer.rl.rb&quot;
 		begin
 	begin
-		    @current_state = 226
+		    @current_state = 262
 		_trigger_goto = true
 		_goto_level = _again
 		break
@@ -1045,8 +1136,8 @@ when 26 then
 when 27 then
 # line 84 &quot;lib/adhearsion/voip/asterisk/manager_interface/ami_lexer.rl.rb&quot;
 		begin
- message_received; 	begin
-		    @current_state = 226
+ message_received @current_message; 	begin
+		    @current_state = 262
 		_trigger_goto = true
 		_goto_level = _again
 		break
@@ -1113,7 +1204,7 @@ when 37 then
 		begin
     @token_end =      @current_pointer+1
  begin  	begin
-		    @current_state = 226
+		    @current_state = 262
 		_trigger_goto = true
 		_goto_level = _again
 		break
@@ -1129,7 +1220,7 @@ when 38 then
     # If this scanner's look-ahead capability didn't match the prompt, let's ignore the need for a prompt
          @current_pointer =      @current_pointer - 1;
     	begin
-		    @current_state = 226
+		    @current_state = 262
 		_trigger_goto = true
 		_goto_level = _again
 		break
@@ -1146,7 +1237,7 @@ when 39 then
     # If this scanner's look-ahead capability didn't match the prompt, let's ignore the need for a prompt
          @current_pointer =      @current_pointer - 1;
     	begin
-		    @current_state = 226
+		    @current_state = 262
 		_trigger_goto = true
 		_goto_level = _again
 		break
@@ -1163,7 +1254,7 @@ when 40 then
     # If this scanner's look-ahead capability didn't match the prompt, let's ignore the need for a prompt
          @current_pointer =      @current_pointer - 1;
     	begin
-		    @current_state = 226
+		    @current_state = 262
 		_trigger_goto = true
 		_goto_level = _again
 		break
@@ -1213,7 +1304,7 @@ when 47 then
 		begin
     @token_end =      @current_pointer+1
  begin  	begin
-		    @current_state = 226
+		    @current_state = 262
 		_trigger_goto = true
 		_goto_level = _again
 		break
@@ -1231,7 +1322,7 @@ when 48 then
     	begin
 		 @ragel_stack[   @ragel_stack_top] =     @current_state
 		   @ragel_stack_top+= 1
-		    @current_state = 224
+		    @current_state = 260
 		_trigger_goto = true
 		_goto_level = _again
 		break
@@ -1250,7 +1341,7 @@ when 49 then
     	begin
 		 @ragel_stack[   @ragel_stack_top] =     @current_state
 		   @ragel_stack_top+= 1
-		    @current_state = 224
+		    @current_state = 260
 		_trigger_goto = true
 		_goto_level = _again
 		break
@@ -1269,7 +1360,7 @@ when 50 then
     	begin
 		 @ragel_stack[   @ragel_stack_top] =     @current_state
 		   @ragel_stack_top+= 1
-		    @current_state = 224
+		    @current_state = 260
 		_trigger_goto = true
 		_goto_level = _again
 		break
@@ -1330,7 +1421,7 @@ end
 end 
 			end
 # line 1 &quot;lib/adhearsion/voip/asterisk/manager_interface/ami_lexer.rl.rb&quot;
-# line 1334 &quot;lib/adhearsion/voip/asterisk/manager_interface/ami_lexer.rb&quot;
+# line 1425 &quot;lib/adhearsion/voip/asterisk/manager_interface/ami_lexer.rb&quot;
 			end # action switch
 		end
 	end
@@ -1357,7 +1448,7 @@ when 29 then
    @ragel_act = 0
 		end
 # line 1 &quot;lib/adhearsion/voip/asterisk/manager_interface/ami_lexer.rl.rb&quot;
-# line 1361 &quot;lib/adhearsion/voip/asterisk/manager_interface/ami_lexer.rb&quot;
+# line 1452 &quot;lib/adhearsion/voip/asterisk/manager_interface/ami_lexer.rb&quot;
 		end # to state action switch
 	end
 	if _trigger_goto
@@ -1387,7 +1478,6 @@ end
 	end
 	end
 	end
-
 # line 89 &quot;lib/adhearsion/voip/asterisk/manager_interface/ami_lexer.rl.rb&quot;
 ##
           end
@@ -1496,7 +1586,8 @@ end
           end
   
           def follows_text_stops
-            text = @data[@last_seen_value_end..(@current_pointer - &quot;\r\n--END COMMAND--&quot;.size)]
+            text = @data[@last_seen_value_end..@current_pointer]
+            text.sub! /\r?\n--END COMMAND--/, &quot;&quot;
             @current_message.text_body = text
             @follows_text_start = nil
           end
@@ -1586,4 +1677,4 @@ VVVVVVVVVVVVVVVVVVVVVVVVVVVVV
       end
     end
   end
-end
\ No newline at end of file
+end</diff>
      <filename>lib/adhearsion/voip/asterisk/manager_interface/ami_lexer.rb</filename>
    </modified>
    <modified>
      <diff>@@ -193,7 +193,8 @@ module Adhearsion
           end
   
           def follows_text_stops
-            text = @data[@last_seen_value_end..(@current_pointer - &quot;\r\n--END COMMAND--&quot;.size)]
+            text = @data[@last_seen_value_end..@current_pointer]
+            text.sub! /\r?\n--END COMMAND--/, &quot;&quot;
             @current_message.text_body = text
             @follows_text_start = nil
           end
@@ -283,4 +284,4 @@ VVVVVVVVVVVVVVVVVVVVVVVVVVVVV
       end
     end
   end
-end
\ No newline at end of file
+end</diff>
      <filename>lib/adhearsion/voip/asterisk/manager_interface/ami_lexer.rl.rb</filename>
    </modified>
    <modified>
      <diff>@@ -27,7 +27,7 @@ Prompt = &quot;Asterisk Call Manager/&quot; digit+ &gt;version_starts &quot;.&quot; digit+ %version_sto
 Key = ((alnum | print) -- (cr | lf | &quot;:&quot;))+;
 KeyValuePair = Key &gt;key_starts %key_stops colon rest_of_line &gt;value_starts %value_stops crlf;
 
-FollowsDelimiter = crlf &quot;--END COMMAND--&quot;;
+FollowsDelimiter = loose_newline &quot;--END COMMAND--&quot;;
 
 Response = &quot;Response&quot;i colon;
 
@@ -81,7 +81,7 @@ success := KeyValuePair* crlf @message_received @{fgoto protocol;};
 response_follows := |*
     KeyValuePair+;
     FollowsBody;
-    crlf @{ message_received; fgoto protocol; };
+    crlf @{ message_received @current_message; fgoto protocol; };
 *|;
  
 }%%
\ No newline at end of file</diff>
      <filename>lib/adhearsion/voip/asterisk/manager_interface/ami_protocol_lexer_machine.rl</filename>
    </modified>
    <modified>
      <diff>@@ -53,6 +53,18 @@ Story: Lexing AMI
 		Then the protocol should have lexed without syntax errors
 		And the 'follows' body of 1 message received should equal show_channels_from_wayne
 
+	Scenario: Lexing a multi-line Response:Follows simulating the &quot;core show uptime&quot; command
+
+		Given a new lexer
+		And a version header for AMI 1.0
+		Given a multi-line Response:Follows response simulating uptime
+
+		When the buffer is lexed
+
+		Then the protocol should have lexed without syntax errors
+		And the first message received should have the key &quot;System uptime&quot; with value &quot;46 minutes, 30 seconds&quot;
+
+
 	Scenario: Lexing a Response:Follows section which has a colon not on the first line
 		
 		Given a new lexer</diff>
      <filename>spec/voip/asterisk/ami/lexer/lexer_story</filename>
    </modified>
    <modified>
      <diff>@@ -79,7 +79,15 @@ ActionID: 123123\r
 
     @lexer &lt;&lt; multi_line_response
   end
-  
+
+  Given &quot;a multi-line Response:Follows response simulating uptime&quot; do |method_name|
+    uptime_response = &quot;Response: Follows\r
+Privilege: Command\r
+System uptime: 46 minutes, 30 seconds\r
+--END COMMAND--\r\n\r\n&quot;
+    @lexer &lt;&lt; uptime_response
+  end
+
   Given &quot;syntactically invalid $name&quot; do |name|
     @lexer &lt;&lt; send(:syntax_error_data, name)
   end</diff>
      <filename>spec/voip/asterisk/ami/lexer/lexer_story.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>9c99dcef57193fea86fe1269756d13f00d5c181c</id>
    </parent>
    <parent>
      <id>337a3a96c35b67e5d28450d892d905706a927d32</id>
    </parent>
  </parents>
  <author>
    <name>Jay Phillips</name>
    <email>jicksta+git@gmail.com</email>
  </author>
  <url>http://github.com/jicksta/adhearsion/commit/a659ccc8be2642b1f2f3579b70b85d3349b08695</url>
  <id>a659ccc8be2642b1f2f3579b70b85d3349b08695</id>
  <committed-date>2009-10-29T10:25:01-07:00</committed-date>
  <authored-date>2009-10-29T10:25:01-07:00</authored-date>
  <message>Merge branch 'master' of git@github.com:jicksta/adhearsion</message>
  <tree>98fe8c6593fe07c5912cd679505eb2591db8a35c</tree>
  <committer>
    <name>Jay Phillips</name>
    <email>jicksta+git@gmail.com</email>
  </committer>
</commit>
