<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -1,6 +1,7 @@
 keyword_search
     http://codefluency.rubyforge.org/keyword_search
     by Bruce Williams
+       Eric Lindvall (negation of terms)
 
 == DESCRIPTION:
   
@@ -9,14 +10,18 @@ Generic library to parse GMail-style search strings for keyword/value pairs; sup
 == FEATURES:
   
 The library features a very simple, easy-to-use API.
+* New in 1.4! Allow negation of terms
 * Define handlers for supported keywords with blocks
 * Define the default keyword (values not part of a keyword/value pair)
 
 Development Roadmap:
-2.0:: Add negation and grouping (will break API backwards compatibility)
+2.0:: Add grouping (will break API backwards compatibility)
+
+Note:: As of 1.4, negative terms (terms starting with '-') will be ignored by with.keyword statements that only take one argument. To accept negative terms, provide a second argument to the block |values, positive| to the with.keyword handler.
 
 Note:: As of 1.3.0, input to KeywordSearch.search is no longer automatically downcased, allowing for case sensitive keyword and value pairs.  If you want case insensitivity, downcase the input before you invoke the method.
 
+
 == SYNOPSIS:
 
 Here's an example of usage from Rails (though the library is generic, and could presumably be used for any Ruby project)
@@ -28,7 +33,7 @@ Here's an example of usage from Rails (though the library is generic, and could
   # Search a string, defining the supported keywords and building up
   # the variables in the associated closures
   
-  KeywordSearch.search('account has:attachment since:2006-12-03') do |with|
+  KeywordSearch.search('account has:attachment since:2006-12-03 -description:crazy') do |with|
 
     with.default_keyword :title
   
@@ -46,7 +51,11 @@ Here's an example of usage from Rails (though the library is generic, and could
       clauses &lt;&lt; 'created_on &gt;= ?'
       arguments &lt;&lt; date.to_s
     end
-  
+
+    with.keyword :description do |values, positive|
+      clauses &lt;&lt; &quot;description #{'not' unless positive} like ?&quot;
+      arguments &lt;&lt; &quot;%#{values.join(' ')}%&quot;
+    end
   end
   
   # Do our search with &lt;tt&gt;clauses&lt;/tt&gt; and &lt;tt&gt;arguments&lt;/tt&gt;</diff>
      <filename>README.rdoc</filename>
    </modified>
    <modified>
      <diff>@@ -4,7 +4,7 @@ require 'rubygems'
 require 'echoe'
 
 Echoe.new 'keyword_search' do |p|
-  p.version = '1.3.1'
+  p.version = '1.4'
   p.author = &quot;Bruce Williams&quot;
   p.email  = 'bruce@codefluency.com'
   p.project = 'codefluency'</diff>
      <filename>Rakefile</filename>
    </modified>
    <modified>
      <diff>@@ -7,7 +7,7 @@ module KeywordSearch
       
   class &lt;&lt; self
   
-    # line 63 &quot;lib/keyword_search.rl&quot;
+    # line 73 &quot;lib/keyword_search.rl&quot;
 
     
     def search(input_string, definition=nil, &amp;block)
@@ -32,12 +32,14 @@ class &lt;&lt; self
 	private :_parser_actions, :_parser_actions=
 end
 self._parser_actions = [
-	0, 1, 0, 1, 4, 1, 5, 1, 
-	7, 2, 0, 2, 2, 2, 5, 2, 
-	3, 1, 2, 3, 4, 2, 3, 6, 
-	2, 4, 6, 3, 0, 3, 4, 3, 
-	0, 3, 6, 3, 3, 4, 0, 3, 
-	3, 4, 6, 3, 3, 6, 0
+	0, 1, 0, 1, 4, 1, 7, 1, 
+	9, 2, 3, 1, 2, 3, 4, 2, 
+	3, 8, 2, 4, 8, 3, 0, 3, 
+	4, 3, 0, 3, 8, 3, 3, 4, 
+	0, 3, 3, 4, 8, 3, 3, 8, 
+	0, 3, 5, 0, 2, 3, 5, 2, 
+	7, 3, 6, 0, 2, 3, 6, 2, 
+	7
 ]
 
 class &lt;&lt; self
@@ -45,45 +47,45 @@ class &lt;&lt; self
 	private :_parser_key_offsets, :_parser_key_offsets=
 end
 self._parser_key_offsets = [
-	0, 0, 6, 11, 17, 22, 27, 32, 
-	33, 34, 36, 37, 38, 43, 49, 56, 
-	62, 64, 72, 73, 74, 78, 83, 84, 
-	85, 92, 99, 106, 108, 110, 115, 120, 
-	125, 132, 138, 146, 153, 160, 167, 175, 
-	182, 190, 198, 200, 205, 213, 220, 228, 
-	236, 242, 250, 257, 264, 272, 279, 286, 
-	293, 300, 308, 310, 312, 317, 322, 327, 
-	334, 340, 348, 355, 362, 369, 377, 384, 
-	392, 394, 399, 407, 414, 422, 429, 437, 
-	445, 453, 460, 465, 471, 478, 484, 492, 
-	493, 494, 498, 503, 504, 505, 512, 519, 
-	526, 528, 530, 535, 540, 545, 552, 558, 
-	566, 573, 580, 587, 595, 602, 610, 612, 
-	617, 625, 632, 640, 648, 654, 662, 669, 
-	676, 684, 691, 698, 705, 712, 720, 722, 
-	724, 729, 734, 739, 746, 752, 760, 767, 
-	774, 781, 789, 796, 804, 806, 811, 819, 
-	826, 834, 841, 849, 857, 865, 872, 877, 
-	882, 888, 895, 901, 909, 910, 911, 915, 
-	920, 921, 922, 929, 936, 943, 945, 947, 
-	952, 957, 962, 969, 975, 983, 990, 997, 
-	1004, 1012, 1019, 1027, 1035, 1037, 1042, 1050, 
-	1057, 1065, 1073, 1079, 1087, 1094, 1102, 1109, 
-	1116, 1123, 1125, 1127, 1132, 1137, 1142, 1149, 
-	1155, 1163, 1170, 1177, 1184, 1189, 1196, 1202, 
-	1210, 1217, 1224, 1231, 1233, 1238, 1245, 1252, 
-	1258, 1266, 1273, 1280, 1287, 1289, 1291, 1296, 
-	1301, 1306, 1313, 1319, 1327, 1334, 1341, 1348, 
-	1356, 1363, 1371, 1379, 1381, 1386, 1394, 1401, 
-	1409, 1417, 1419, 1424, 1432, 1439, 1447, 1449, 
-	1454, 1462, 1469, 1477, 1485, 1487, 1492, 1500, 
-	1507, 1515, 1522, 1529, 1536, 1543, 1551, 1558, 
-	1560, 1562, 1567, 1572, 1577, 1584, 1590, 1598, 
-	1605, 1612, 1619, 1627, 1634, 1642, 1650, 1652, 
-	1657, 1665, 1673, 1680, 1687, 1695, 1702, 1710, 
-	1717, 1725, 1733, 1741, 1748, 1753, 1759, 1767, 
-	1774, 1781, 1789, 1796, 1804, 1812, 1820, 1827, 
-	1832, 1837, 1842
+	0, 0, 8, 13, 21, 26, 31, 36, 
+	37, 38, 40, 41, 42, 47, 53, 60, 
+	66, 68, 76, 77, 78, 82, 87, 88, 
+	89, 96, 103, 110, 112, 114, 119, 124, 
+	129, 136, 142, 150, 157, 164, 171, 179, 
+	186, 194, 202, 204, 209, 217, 224, 232, 
+	240, 246, 254, 261, 268, 276, 283, 290, 
+	297, 304, 312, 314, 316, 321, 326, 331, 
+	338, 344, 352, 359, 366, 373, 381, 388, 
+	396, 398, 403, 411, 418, 426, 433, 441, 
+	449, 457, 464, 469, 475, 482, 488, 496, 
+	497, 498, 502, 507, 508, 509, 516, 523, 
+	530, 532, 534, 539, 544, 549, 556, 562, 
+	570, 577, 584, 591, 599, 606, 614, 616, 
+	621, 629, 636, 644, 652, 658, 666, 673, 
+	680, 688, 695, 702, 709, 716, 724, 726, 
+	728, 733, 738, 743, 750, 756, 764, 771, 
+	778, 785, 793, 800, 808, 810, 815, 823, 
+	830, 838, 845, 853, 861, 869, 876, 881, 
+	886, 891, 896, 902, 909, 915, 923, 924, 
+	925, 929, 934, 935, 936, 943, 950, 957, 
+	959, 961, 966, 971, 976, 983, 989, 997, 
+	1004, 1011, 1018, 1026, 1033, 1041, 1049, 1051, 
+	1056, 1064, 1071, 1079, 1087, 1093, 1101, 1108, 
+	1116, 1123, 1130, 1137, 1139, 1141, 1146, 1151, 
+	1156, 1163, 1169, 1177, 1184, 1191, 1198, 1203, 
+	1210, 1216, 1224, 1231, 1238, 1245, 1247, 1252, 
+	1259, 1266, 1272, 1280, 1287, 1294, 1301, 1303, 
+	1305, 1310, 1315, 1320, 1327, 1333, 1341, 1348, 
+	1355, 1362, 1370, 1377, 1385, 1393, 1395, 1400, 
+	1408, 1415, 1423, 1431, 1433, 1438, 1446, 1453, 
+	1461, 1463, 1468, 1476, 1483, 1491, 1499, 1501, 
+	1506, 1514, 1521, 1529, 1536, 1543, 1550, 1557, 
+	1565, 1572, 1574, 1576, 1581, 1586, 1591, 1598, 
+	1604, 1612, 1619, 1626, 1633, 1641, 1648, 1656, 
+	1664, 1666, 1671, 1679, 1687, 1694, 1701, 1709, 
+	1716, 1724, 1731, 1739, 1747, 1755, 1762, 1767, 
+	1773, 1781, 1788, 1795, 1803, 1810, 1818, 1826, 
+	1834, 1841, 1846, 1851, 1856, 1861, 1866
 ]
 
 class &lt;&lt; self
@@ -91,14 +93,67 @@ class &lt;&lt; self
 	private :_parser_trans_keys, :_parser_trans_keys=
 end
 self._parser_trans_keys = [
-	0, 32, 34, 39, 40, 58, 0, 32, 
-	34, 41, 58, 0, 32, 34, 39, 40, 
-	58, 0, 32, 34, 41, 58, 32, 34, 
-	39, 40, 58, 0, 32, 34, 41, 58, 
-	34, 34, 0, 32, 39, 39, 32, 34, 
-	39, 40, 58, 32, 34, 41, 44, 58, 
+	0, 32, 34, 39, 40, 43, 45, 58, 
+	0, 32, 34, 41, 58, 0, 32, 34, 
+	39, 40, 43, 45, 58, 0, 32, 34, 
+	41, 58, 32, 34, 39, 40, 58, 0, 
+	32, 34, 41, 58, 34, 34, 0, 32, 
+	39, 39, 32, 34, 39, 40, 58, 32, 
+	34, 41, 44, 58, 124, 32, 34, 39, 
+	40, 44, 58, 124, 32, 34, 41, 44, 
+	58, 124, 0, 32, 32, 34, 39, 40, 
+	41, 44, 58, 124, 34, 34, 32, 41, 
+	44, 124, 32, 34, 39, 40, 58, 39, 
+	39, 32, 34, 39, 41, 44, 58, 124, 
+	32, 34, 39, 41, 44, 58, 124, 32, 
+	34, 39, 40, 44, 58, 124, 34, 39, 
+	34, 39, 32, 39, 41, 44, 124, 32, 
+	34, 39, 40, 58, 32, 34, 41, 44, 
+	124, 32, 34, 39, 40, 44, 58, 124, 
+	32, 34, 41, 44, 58, 124, 32, 34, 
+	39, 40, 41, 44, 58, 124, 32, 34, 
+	39, 41, 44, 58, 124, 32, 34, 39, 
+	41, 44, 58, 124, 32, 34, 39, 40, 
+	44, 58, 124, 32, 34, 39, 40, 41, 
+	44, 58, 124, 32, 34, 39, 40, 44, 
+	58, 124, 32, 34, 39, 40, 41, 44, 
+	58, 124, 32, 34, 39, 40, 41, 44, 
+	58, 124, 34, 39, 32, 34, 39, 40, 
+	58, 32, 34, 39, 40, 41, 44, 58, 
 	124, 32, 34, 39, 40, 44, 58, 124, 
-	32, 34, 41, 44, 58, 124, 0, 32, 
+	32, 34, 39, 40, 41, 44, 58, 124, 
+	32, 34, 39, 40, 41, 44, 58, 124, 
+	32, 34, 41, 44, 58, 124, 32, 34, 
+	39, 40, 41, 44, 58, 124, 32, 34, 
+	39, 41, 44, 58, 124, 32, 34, 39, 
+	41, 44, 58, 124, 32, 34, 39, 40, 
+	41, 44, 58, 124, 32, 34, 39, 41, 
+	44, 58, 124, 32, 34, 39, 41, 44, 
+	58, 124, 32, 34, 39, 40, 44, 58, 
+	124, 32, 34, 39, 41, 44, 58, 124, 
+	32, 34, 39, 40, 41, 44, 58, 124, 
+	34, 39, 34, 39, 32, 39, 41, 44, 
+	124, 32, 34, 39, 40, 58, 32, 34, 
+	41, 44, 124, 32, 34, 39, 40, 44, 
+	58, 124, 32, 34, 41, 44, 58, 124, 
+	32, 34, 39, 40, 41, 44, 58, 124, 
+	32, 34, 39, 41, 44, 58, 124, 32, 
+	34, 39, 41, 44, 58, 124, 32, 34, 
+	39, 40, 44, 58, 124, 32, 34, 39, 
+	40, 41, 44, 58, 124, 32, 34, 39, 
+	40, 44, 58, 124, 32, 34, 39, 40, 
+	41, 44, 58, 124, 34, 39, 32, 34, 
+	39, 40, 58, 32, 34, 39, 40, 41, 
+	44, 58, 124, 32, 34, 39, 41, 44, 
+	58, 124, 32, 34, 39, 40, 41, 44, 
+	58, 124, 32, 34, 39, 40, 44, 58, 
+	124, 32, 34, 39, 40, 41, 44, 58, 
+	124, 32, 34, 39, 40, 41, 44, 58, 
+	124, 32, 34, 39, 40, 41, 44, 58, 
+	124, 32, 34, 39, 41, 44, 58, 124, 
+	32, 34, 39, 40, 58, 32, 34, 41, 
+	44, 58, 124, 32, 34, 39, 40, 44, 
+	58, 124, 32, 34, 41, 44, 58, 124, 
 	32, 34, 39, 40, 41, 44, 58, 124, 
 	34, 34, 32, 41, 44, 124, 32, 34, 
 	39, 40, 58, 39, 39, 32, 34, 39, 
@@ -114,7 +169,6 @@ self._parser_trans_keys = [
 	32, 34, 39, 40, 44, 58, 124, 32, 
 	34, 39, 40, 41, 44, 58, 124, 32, 
 	34, 39, 40, 44, 58, 124, 32, 34, 
-	39, 40, 41, 44, 58, 124, 32, 34, 
 	39, 40, 41, 44, 58, 124, 34, 39, 
 	32, 34, 39, 40, 58, 32, 34, 39, 
 	40, 41, 44, 58, 124, 32, 34, 39, 
@@ -149,177 +203,128 @@ self._parser_trans_keys = [
 	40, 41, 44, 58, 124, 32, 34, 39, 
 	40, 41, 44, 58, 124, 32, 34, 39, 
 	41, 44, 58, 124, 32, 34, 39, 40, 
-	58, 32, 34, 41, 44, 58, 124, 32, 
-	34, 39, 40, 44, 58, 124, 32, 34, 
-	41, 44, 58, 124, 32, 34, 39, 40, 
-	41, 44, 58, 124, 34, 34, 32, 41, 
-	44, 124, 32, 34, 39, 40, 58, 39, 
-	39, 32, 34, 39, 41, 44, 58, 124, 
-	32, 34, 39, 41, 44, 58, 124, 32, 
-	34, 39, 40, 44, 58, 124, 34, 39, 
-	34, 39, 32, 39, 41, 44, 124, 32, 
-	34, 39, 40, 58, 32, 34, 41, 44, 
-	124, 32, 34, 39, 40, 44, 58, 124, 
+	58, 32, 34, 39, 40, 58, 32, 34, 
+	39, 40, 58, 32, 34, 39, 40, 58, 
 	32, 34, 41, 44, 58, 124, 32, 34, 
-	39, 40, 41, 44, 58, 124, 32, 34, 
-	39, 41, 44, 58, 124, 32, 34, 39, 
-	41, 44, 58, 124, 32, 34, 39, 40, 
+	39, 40, 44, 58, 124, 32, 34, 41, 
 	44, 58, 124, 32, 34, 39, 40, 41, 
-	44, 58, 124, 32, 34, 39, 40, 44, 
-	58, 124, 32, 34, 39, 40, 41, 44, 
-	58, 124, 34, 39, 32, 34, 39, 40, 
-	58, 32, 34, 39, 40, 41, 44, 58, 
-	124, 32, 34, 39, 40, 44, 58, 124, 
-	32, 34, 39, 40, 41, 44, 58, 124, 
-	32, 34, 39, 40, 41, 44, 58, 124, 
-	32, 34, 41, 44, 58, 124, 32, 34, 
-	39, 40, 41, 44, 58, 124, 32, 34, 
-	39, 41, 44, 58, 124, 32, 34, 39, 
-	41, 44, 58, 124, 32, 34, 39, 40, 
-	41, 44, 58, 124, 32, 34, 39, 41, 
-	44, 58, 124, 32, 34, 39, 41, 44, 
-	58, 124, 32, 34, 39, 40, 44, 58, 
-	124, 32, 34, 39, 41, 44, 58, 124, 
-	32, 34, 39, 40, 41, 44, 58, 124, 
-	34, 39, 34, 39, 32, 39, 41, 44, 
-	124, 32, 34, 39, 40, 58, 32, 34, 
-	41, 44, 124, 32, 34, 39, 40, 44, 
-	58, 124, 32, 34, 41, 44, 58, 124, 
-	32, 34, 39, 40, 41, 44, 58, 124, 
+	44, 58, 124, 34, 34, 32, 41, 44, 
+	124, 32, 34, 39, 40, 58, 39, 39, 
 	32, 34, 39, 41, 44, 58, 124, 32, 
 	34, 39, 41, 44, 58, 124, 32, 34, 
-	39, 40, 44, 58, 124, 32, 34, 39, 
+	39, 40, 44, 58, 124, 34, 39, 34, 
+	39, 32, 39, 41, 44, 124, 32, 34, 
+	39, 40, 58, 32, 34, 41, 44, 124, 
+	32, 34, 39, 40, 44, 58, 124, 32, 
+	34, 41, 44, 58, 124, 32, 34, 39, 
 	40, 41, 44, 58, 124, 32, 34, 39, 
-	40, 44, 58, 124, 32, 34, 39, 40, 
-	41, 44, 58, 124, 34, 39, 32, 34, 
-	39, 40, 58, 32, 34, 39, 40, 41, 
-	44, 58, 124, 32, 34, 39, 41, 44, 
+	41, 44, 58, 124, 32, 34, 39, 41, 
+	44, 58, 124, 32, 34, 39, 40, 44, 
 	58, 124, 32, 34, 39, 40, 41, 44, 
 	58, 124, 32, 34, 39, 40, 44, 58, 
 	124, 32, 34, 39, 40, 41, 44, 58, 
 	124, 32, 34, 39, 40, 41, 44, 58, 
-	124, 32, 34, 39, 40, 41, 44, 58, 
-	124, 32, 34, 39, 41, 44, 58, 124, 
-	32, 34, 39, 40, 58, 32, 34, 39, 
-	40, 58, 32, 34, 41, 44, 58, 124, 
+	124, 34, 39, 32, 34, 39, 40, 58, 
+	32, 34, 39, 40, 41, 44, 58, 124, 
 	32, 34, 39, 40, 44, 58, 124, 32, 
-	34, 41, 44, 58, 124, 32, 34, 39, 
-	40, 41, 44, 58, 124, 34, 34, 32, 
-	41, 44, 124, 32, 34, 39, 40, 58, 
-	39, 39, 32, 34, 39, 41, 44, 58, 
-	124, 32, 34, 39, 41, 44, 58, 124, 
-	32, 34, 39, 40, 44, 58, 124, 34, 
-	39, 34, 39, 32, 39, 41, 44, 124, 
-	32, 34, 39, 40, 58, 32, 34, 41, 
-	44, 124, 32, 34, 39, 40, 44, 58, 
-	124, 32, 34, 41, 44, 58, 124, 32, 
 	34, 39, 40, 41, 44, 58, 124, 32, 
-	34, 39, 41, 44, 58, 124, 32, 34, 
-	39, 41, 44, 58, 124, 32, 34, 39, 
+	34, 39, 40, 41, 44, 58, 124, 32, 
+	34, 41, 44, 58, 124, 32, 34, 39, 
+	40, 41, 44, 58, 124, 32, 34, 39, 
 	40, 44, 58, 124, 32, 34, 39, 40, 
-	41, 44, 58, 124, 32, 34, 39, 40, 
-	44, 58, 124, 32, 34, 39, 40, 41, 
-	44, 58, 124, 32, 34, 39, 40, 41, 
-	44, 58, 124, 34, 39, 32, 34, 39, 
-	40, 58, 32, 34, 39, 40, 41, 44, 
+	41, 44, 58, 124, 32, 34, 39, 41, 
+	44, 58, 124, 32, 34, 39, 41, 44, 
 	58, 124, 32, 34, 39, 40, 44, 58, 
+	124, 34, 39, 34, 39, 32, 39, 41, 
+	44, 124, 32, 34, 39, 40, 58, 32, 
+	34, 41, 44, 124, 32, 34, 39, 40, 
+	44, 58, 124, 32, 34, 41, 44, 58, 
 	124, 32, 34, 39, 40, 41, 44, 58, 
-	124, 32, 34, 39, 40, 41, 44, 58, 
-	124, 32, 34, 41, 44, 58, 124, 32, 
-	34, 39, 40, 41, 44, 58, 124, 32, 
+	124, 32, 34, 39, 41, 44, 58, 124, 
+	32, 34, 39, 41, 44, 58, 124, 32, 
 	34, 39, 40, 44, 58, 124, 32, 34, 
-	39, 40, 41, 44, 58, 124, 32, 34, 
-	39, 41, 44, 58, 124, 32, 34, 39, 
-	41, 44, 58, 124, 32, 34, 39, 40, 
-	44, 58, 124, 34, 39, 34, 39, 32, 
+	41, 44, 124, 32, 34, 39, 40, 44, 
+	58, 124, 32, 34, 41, 44, 58, 124, 
+	32, 34, 39, 40, 41, 44, 58, 124, 
+	32, 34, 39, 41, 44, 58, 124, 32, 
+	34, 39, 41, 44, 58, 124, 32, 34, 
+	39, 40, 44, 58, 124, 34, 39, 32, 
 	39, 41, 44, 124, 32, 34, 39, 40, 
-	58, 32, 34, 41, 44, 124, 32, 34, 
-	39, 40, 44, 58, 124, 32, 34, 41, 
-	44, 58, 124, 32, 34, 39, 40, 41, 
 	44, 58, 124, 32, 34, 39, 41, 44, 
-	58, 124, 32, 34, 39, 41, 44, 58, 
-	124, 32, 34, 39, 40, 44, 58, 124, 
-	32, 34, 41, 44, 124, 32, 34, 39, 
-	40, 44, 58, 124, 32, 34, 41, 44, 
-	58, 124, 32, 34, 39, 40, 41, 44, 
-	58, 124, 32, 34, 39, 41, 44, 58, 
-	124, 32, 34, 39, 41, 44, 58, 124, 
-	32, 34, 39, 40, 44, 58, 124, 34, 
+	58, 124, 32, 34, 41, 44, 58, 124, 
+	32, 34, 39, 40, 41, 44, 58, 124, 
+	32, 34, 39, 41, 44, 58, 124, 32, 
+	34, 39, 41, 44, 58, 124, 32, 34, 
+	39, 40, 44, 58, 124, 34, 39, 34, 
 	39, 32, 39, 41, 44, 124, 32, 34, 
-	39, 40, 44, 58, 124, 32, 34, 39, 
-	41, 44, 58, 124, 32, 34, 41, 44, 
+	39, 40, 58, 32, 34, 41, 44, 124, 
+	32, 34, 39, 40, 44, 58, 124, 32, 
+	34, 41, 44, 58, 124, 32, 34, 39, 
+	40, 41, 44, 58, 124, 32, 34, 39, 
+	41, 44, 58, 124, 32, 34, 39, 41, 
+	44, 58, 124, 32, 34, 39, 40, 44, 
 	58, 124, 32, 34, 39, 40, 41, 44, 
-	58, 124, 32, 34, 39, 41, 44, 58, 
-	124, 32, 34, 39, 41, 44, 58, 124, 
-	32, 34, 39, 40, 44, 58, 124, 34, 
-	39, 34, 39, 32, 39, 41, 44, 124, 
-	32, 34, 39, 40, 58, 32, 34, 41, 
-	44, 124, 32, 34, 39, 40, 44, 58, 
-	124, 32, 34, 41, 44, 58, 124, 32, 
-	34, 39, 40, 41, 44, 58, 124, 32, 
-	34, 39, 41, 44, 58, 124, 32, 34, 
-	39, 41, 44, 58, 124, 32, 34, 39, 
-	40, 44, 58, 124, 32, 34, 39, 40, 
-	41, 44, 58, 124, 32, 34, 39, 40, 
-	44, 58, 124, 32, 34, 39, 40, 41, 
-	44, 58, 124, 32, 34, 39, 40, 41, 
-	44, 58, 124, 34, 39, 32, 34, 39, 
-	40, 58, 32, 34, 39, 40, 41, 44, 
 	58, 124, 32, 34, 39, 40, 44, 58, 
 	124, 32, 34, 39, 40, 41, 44, 58, 
 	124, 32, 34, 39, 40, 41, 44, 58, 
 	124, 34, 39, 32, 34, 39, 40, 58, 
 	32, 34, 39, 40, 41, 44, 58, 124, 
 	32, 34, 39, 40, 44, 58, 124, 32, 
+	34, 39, 40, 41, 44, 58, 124, 32, 
 	34, 39, 40, 41, 44, 58, 124, 34, 
 	39, 32, 34, 39, 40, 58, 32, 34, 
 	39, 40, 41, 44, 58, 124, 32, 34, 
 	39, 40, 44, 58, 124, 32, 34, 39, 
-	40, 41, 44, 58, 124, 32, 34, 39, 
 	40, 41, 44, 58, 124, 34, 39, 32, 
 	34, 39, 40, 58, 32, 34, 39, 40, 
 	41, 44, 58, 124, 32, 34, 39, 40, 
 	44, 58, 124, 32, 34, 39, 40, 41, 
-	44, 58, 124, 32, 34, 39, 41, 44, 
-	58, 124, 32, 34, 39, 41, 44, 58, 
-	124, 32, 34, 39, 40, 44, 58, 124, 
-	32, 34, 39, 41, 44, 58, 124, 32, 
-	34, 39, 40, 41, 44, 58, 124, 32, 
-	34, 39, 40, 44, 58, 124, 34, 39, 
-	34, 39, 32, 39, 41, 44, 124, 32, 
-	34, 39, 40, 58, 32, 34, 41, 44, 
-	124, 32, 34, 39, 40, 44, 58, 124, 
-	32, 34, 41, 44, 58, 124, 32, 34, 
-	39, 40, 41, 44, 58, 124, 32, 34, 
-	39, 41, 44, 58, 124, 32, 34, 39, 
-	41, 44, 58, 124, 32, 34, 39, 40, 
 	44, 58, 124, 32, 34, 39, 40, 41, 
-	44, 58, 124, 32, 34, 39, 40, 44, 
-	58, 124, 32, 34, 39, 40, 41, 44, 
-	58, 124, 32, 34, 39, 40, 41, 44, 
-	58, 124, 34, 39, 32, 34, 39, 40, 
-	58, 32, 34, 39, 40, 41, 44, 58, 
+	44, 58, 124, 34, 39, 32, 34, 39, 
+	40, 58, 32, 34, 39, 40, 41, 44, 
+	58, 124, 32, 34, 39, 40, 44, 58, 
 	124, 32, 34, 39, 40, 41, 44, 58, 
 	124, 32, 34, 39, 41, 44, 58, 124, 
 	32, 34, 39, 41, 44, 58, 124, 32, 
-	34, 39, 40, 41, 44, 58, 124, 32, 
-	34, 39, 41, 44, 58, 124, 32, 34, 
-	39, 40, 41, 44, 58, 124, 32, 34, 
-	39, 40, 44, 58, 124, 32, 34, 39, 
-	40, 41, 44, 58, 124, 32, 34, 39, 
-	40, 41, 44, 58, 124, 32, 34, 39, 
+	34, 39, 40, 44, 58, 124, 32, 34, 
+	39, 41, 44, 58, 124, 32, 34, 39, 
 	40, 41, 44, 58, 124, 32, 34, 39, 
+	40, 44, 58, 124, 34, 39, 34, 39, 
+	32, 39, 41, 44, 124, 32, 34, 39, 
+	40, 58, 32, 34, 41, 44, 124, 32, 
+	34, 39, 40, 44, 58, 124, 32, 34, 
 	41, 44, 58, 124, 32, 34, 39, 40, 
-	58, 32, 34, 41, 44, 58, 124, 32, 
+	41, 44, 58, 124, 32, 34, 39, 41, 
+	44, 58, 124, 32, 34, 39, 41, 44, 
+	58, 124, 32, 34, 39, 40, 44, 58, 
+	124, 32, 34, 39, 40, 41, 44, 58, 
+	124, 32, 34, 39, 40, 44, 58, 124, 
+	32, 34, 39, 40, 41, 44, 58, 124, 
+	32, 34, 39, 40, 41, 44, 58, 124, 
+	34, 39, 32, 34, 39, 40, 58, 32, 
+	34, 39, 40, 41, 44, 58, 124, 32, 
 	34, 39, 40, 41, 44, 58, 124, 32, 
 	34, 39, 41, 44, 58, 124, 32, 34, 
 	39, 41, 44, 58, 124, 32, 34, 39, 
 	40, 41, 44, 58, 124, 32, 34, 39, 
 	41, 44, 58, 124, 32, 34, 39, 40, 
 	41, 44, 58, 124, 32, 34, 39, 40, 
-	41, 44, 58, 124, 32, 34, 39, 40, 
+	44, 58, 124, 32, 34, 39, 40, 41, 
+	44, 58, 124, 32, 34, 39, 40, 41, 
+	44, 58, 124, 32, 34, 39, 40, 41, 
+	44, 58, 124, 32, 34, 39, 41, 44, 
+	58, 124, 32, 34, 39, 40, 58, 32, 
+	34, 41, 44, 58, 124, 32, 34, 39, 
+	40, 41, 44, 58, 124, 32, 34, 39, 
 	41, 44, 58, 124, 32, 34, 39, 41, 
-	44, 58, 124, 0, 32, 34, 41, 58, 
+	44, 58, 124, 32, 34, 39, 40, 41, 
+	44, 58, 124, 32, 34, 39, 41, 44, 
+	58, 124, 32, 34, 39, 40, 41, 44, 
+	58, 124, 32, 34, 39, 40, 41, 44, 
+	58, 124, 32, 34, 39, 40, 41, 44, 
+	58, 124, 32, 34, 39, 41, 44, 58, 
+	124, 32, 34, 39, 40, 58, 32, 34, 
+	39, 40, 58, 0, 32, 34, 41, 58, 
 	0, 32, 34, 41, 58, 0, 32, 34, 
 	41, 58, 0
 ]
@@ -329,7 +334,7 @@ class &lt;&lt; self
 	private :_parser_single_lengths, :_parser_single_lengths=
 end
 self._parser_single_lengths = [
-	0, 6, 5, 6, 5, 5, 5, 1, 
+	0, 8, 5, 8, 5, 5, 5, 1, 
 	1, 2, 1, 1, 5, 6, 7, 6, 
 	2, 8, 1, 1, 4, 5, 1, 1, 
 	7, 7, 7, 2, 2, 5, 5, 5, 
@@ -348,26 +353,26 @@ self._parser_single_lengths = [
 	5, 5, 5, 7, 6, 8, 7, 7, 
 	7, 8, 7, 8, 2, 5, 8, 7, 
 	8, 7, 8, 8, 8, 7, 5, 5, 
-	6, 7, 6, 8, 1, 1, 4, 5, 
-	1, 1, 7, 7, 7, 2, 2, 5, 
-	5, 5, 7, 6, 8, 7, 7, 7, 
-	8, 7, 8, 8, 2, 5, 8, 7, 
-	8, 8, 6, 8, 7, 8, 7, 7, 
-	7, 2, 2, 5, 5, 5, 7, 6, 
-	8, 7, 7, 7, 5, 7, 6, 8, 
-	7, 7, 7, 2, 5, 7, 7, 6, 
-	8, 7, 7, 7, 2, 2, 5, 5, 
-	5, 7, 6, 8, 7, 7, 7, 8, 
-	7, 8, 8, 2, 5, 8, 7, 8, 
-	8, 2, 5, 8, 7, 8, 2, 5, 
-	8, 7, 8, 8, 2, 5, 8, 7, 
-	8, 7, 7, 7, 7, 8, 7, 2, 
+	5, 5, 6, 7, 6, 8, 1, 1, 
+	4, 5, 1, 1, 7, 7, 7, 2, 
 	2, 5, 5, 5, 7, 6, 8, 7, 
 	7, 7, 8, 7, 8, 8, 2, 5, 
-	8, 8, 7, 7, 8, 7, 8, 7, 
-	8, 8, 8, 7, 5, 6, 8, 7, 
-	7, 8, 7, 8, 8, 8, 7, 5, 
-	5, 5, 0
+	8, 7, 8, 8, 6, 8, 7, 8, 
+	7, 7, 7, 2, 2, 5, 5, 5, 
+	7, 6, 8, 7, 7, 7, 5, 7, 
+	6, 8, 7, 7, 7, 2, 5, 7, 
+	7, 6, 8, 7, 7, 7, 2, 2, 
+	5, 5, 5, 7, 6, 8, 7, 7, 
+	7, 8, 7, 8, 8, 2, 5, 8, 
+	7, 8, 8, 2, 5, 8, 7, 8, 
+	2, 5, 8, 7, 8, 8, 2, 5, 
+	8, 7, 8, 7, 7, 7, 7, 8, 
+	7, 2, 2, 5, 5, 5, 7, 6, 
+	8, 7, 7, 7, 8, 7, 8, 8, 
+	2, 5, 8, 8, 7, 7, 8, 7, 
+	8, 7, 8, 8, 8, 7, 5, 6, 
+	8, 7, 7, 8, 7, 8, 8, 8, 
+	7, 5, 5, 5, 5, 5, 0
 ]
 
 class &lt;&lt; self
@@ -413,7 +418,7 @@ self._parser_range_lengths = [
 	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
 ]
 
 class &lt;&lt; self
@@ -421,45 +426,45 @@ class &lt;&lt; self
 	private :_parser_index_offsets, :_parser_index_offsets=
 end
 self._parser_index_offsets = [
-	0, 0, 7, 13, 20, 26, 32, 38, 
-	40, 42, 45, 47, 49, 55, 62, 70, 
-	77, 80, 89, 91, 93, 98, 104, 106, 
-	108, 116, 124, 132, 135, 138, 144, 150, 
-	156, 164, 171, 180, 188, 196, 204, 213, 
-	221, 230, 239, 242, 248, 257, 265, 274, 
-	283, 290, 299, 307, 315, 324, 332, 340, 
-	348, 356, 365, 368, 371, 377, 383, 389, 
-	397, 404, 413, 421, 429, 437, 446, 454, 
-	463, 466, 472, 481, 489, 498, 506, 515, 
-	524, 533, 541, 547, 554, 562, 569, 578, 
-	580, 582, 587, 593, 595, 597, 605, 613, 
-	621, 624, 627, 633, 639, 645, 653, 660, 
-	669, 677, 685, 693, 702, 710, 719, 722, 
-	728, 737, 745, 754, 763, 770, 779, 787, 
-	795, 804, 812, 820, 828, 836, 845, 848, 
-	851, 857, 863, 869, 877, 884, 893, 901, 
-	909, 917, 926, 934, 943, 946, 952, 961, 
-	969, 978, 986, 995, 1004, 1013, 1021, 1027, 
-	1033, 1040, 1048, 1055, 1064, 1066, 1068, 1073, 
-	1079, 1081, 1083, 1091, 1099, 1107, 1110, 1113, 
-	1119, 1125, 1131, 1139, 1146, 1155, 1163, 1171, 
-	1179, 1188, 1196, 1205, 1214, 1217, 1223, 1232, 
-	1240, 1249, 1258, 1265, 1274, 1282, 1291, 1299, 
-	1307, 1315, 1318, 1321, 1327, 1333, 1339, 1347, 
-	1354, 1363, 1371, 1379, 1387, 1393, 1401, 1408, 
-	1417, 1425, 1433, 1441, 1444, 1450, 1458, 1466, 
-	1473, 1482, 1490, 1498, 1506, 1509, 1512, 1518, 
-	1524, 1530, 1538, 1545, 1554, 1562, 1570, 1578, 
-	1587, 1595, 1604, 1613, 1616, 1622, 1631, 1639, 
-	1648, 1657, 1660, 1666, 1675, 1683, 1692, 1695, 
-	1701, 1710, 1718, 1727, 1736, 1739, 1745, 1754, 
-	1762, 1771, 1779, 1787, 1795, 1803, 1812, 1820, 
-	1823, 1826, 1832, 1838, 1844, 1852, 1859, 1868, 
-	1876, 1884, 1892, 1901, 1909, 1918, 1927, 1930, 
-	1936, 1945, 1954, 1962, 1970, 1979, 1987, 1996, 
-	2004, 2013, 2022, 2031, 2039, 2045, 2052, 2061, 
-	2069, 2077, 2086, 2094, 2103, 2112, 2121, 2129, 
-	2135, 2141, 2147
+	0, 0, 9, 15, 24, 30, 36, 42, 
+	44, 46, 49, 51, 53, 59, 66, 74, 
+	81, 84, 93, 95, 97, 102, 108, 110, 
+	112, 120, 128, 136, 139, 142, 148, 154, 
+	160, 168, 175, 184, 192, 200, 208, 217, 
+	225, 234, 243, 246, 252, 261, 269, 278, 
+	287, 294, 303, 311, 319, 328, 336, 344, 
+	352, 360, 369, 372, 375, 381, 387, 393, 
+	401, 408, 417, 425, 433, 441, 450, 458, 
+	467, 470, 476, 485, 493, 502, 510, 519, 
+	528, 537, 545, 551, 558, 566, 573, 582, 
+	584, 586, 591, 597, 599, 601, 609, 617, 
+	625, 628, 631, 637, 643, 649, 657, 664, 
+	673, 681, 689, 697, 706, 714, 723, 726, 
+	732, 741, 749, 758, 767, 774, 783, 791, 
+	799, 808, 816, 824, 832, 840, 849, 852, 
+	855, 861, 867, 873, 881, 888, 897, 905, 
+	913, 921, 930, 938, 947, 950, 956, 965, 
+	973, 982, 990, 999, 1008, 1017, 1025, 1031, 
+	1037, 1043, 1049, 1056, 1064, 1071, 1080, 1082, 
+	1084, 1089, 1095, 1097, 1099, 1107, 1115, 1123, 
+	1126, 1129, 1135, 1141, 1147, 1155, 1162, 1171, 
+	1179, 1187, 1195, 1204, 1212, 1221, 1230, 1233, 
+	1239, 1248, 1256, 1265, 1274, 1281, 1290, 1298, 
+	1307, 1315, 1323, 1331, 1334, 1337, 1343, 1349, 
+	1355, 1363, 1370, 1379, 1387, 1395, 1403, 1409, 
+	1417, 1424, 1433, 1441, 1449, 1457, 1460, 1466, 
+	1474, 1482, 1489, 1498, 1506, 1514, 1522, 1525, 
+	1528, 1534, 1540, 1546, 1554, 1561, 1570, 1578, 
+	1586, 1594, 1603, 1611, 1620, 1629, 1632, 1638, 
+	1647, 1655, 1664, 1673, 1676, 1682, 1691, 1699, 
+	1708, 1711, 1717, 1726, 1734, 1743, 1752, 1755, 
+	1761, 1770, 1778, 1787, 1795, 1803, 1811, 1819, 
+	1828, 1836, 1839, 1842, 1848, 1854, 1860, 1868, 
+	1875, 1884, 1892, 1900, 1908, 1917, 1925, 1934, 
+	1943, 1946, 1952, 1961, 1970, 1978, 1986, 1995, 
+	2003, 2012, 2020, 2029, 2038, 2047, 2055, 2061, 
+	2068, 2077, 2085, 2093, 2102, 2110, 2119, 2128, 
+	2137, 2145, 2151, 2157, 2163, 2169, 2175
 ]
 
 class &lt;&lt; self
@@ -467,275 +472,279 @@ class &lt;&lt; self
 	private :_parser_trans_targs, :_parser_trans_targs=
 end
 self._parser_trans_targs = [
-	303, 1, 7, 10, 292, 0, 2, 303, 
-	3, 0, 0, 150, 2, 304, 3, 7, 
-	10, 82, 0, 4, 304, 3, 0, 0, 
-	5, 4, 0, 7, 10, 12, 0, 6, 
-	305, 3, 0, 0, 0, 6, 9, 8, 
-	9, 8, 306, 3, 0, 9, 11, 9, 
-	11, 0, 18, 22, 0, 0, 13, 14, 
-	0, 16, 47, 0, 47, 13, 14, 18, 
-	22, 0, 17, 0, 17, 15, 14, 0, 
-	16, 17, 0, 17, 15, 306, 3, 0, 
-	14, 18, 24, 15, 16, 17, 0, 17, 
-	15, 20, 19, 20, 19, 14, 16, 21, 
-	21, 0, 21, 18, 22, 0, 0, 15, 
-	20, 23, 20, 23, 26, 23, 15, 16, 
-	46, 23, 46, 25, 26, 23, 15, 16, 
-	46, 23, 46, 25, 26, 27, 20, 23, 
-	44, 23, 44, 25, 29, 31, 28, 29, 
-	31, 28, 26, 20, 16, 30, 30, 23, 
-	30, 27, 20, 23, 23, 25, 32, 20, 
-	16, 43, 43, 19, 32, 20, 42, 19, 
-	34, 19, 34, 33, 32, 20, 16, 34, 
-	19, 34, 33, 32, 20, 35, 33, 16, 
-	34, 19, 34, 33, 37, 29, 33, 16, 
-	41, 28, 41, 36, 37, 29, 33, 16, 
-	41, 28, 41, 36, 37, 29, 31, 28, 
-	38, 28, 38, 36, 39, 20, 31, 36, 
-	16, 41, 28, 41, 36, 39, 29, 31, 
-	28, 40, 28, 40, 36, 39, 20, 33, 
-	36, 16, 41, 28, 41, 36, 39, 29, 
-	33, 36, 16, 41, 28, 41, 36, 29, 
-	31, 28, 43, 20, 42, 19, 19, 33, 
-	45, 27, 20, 25, 16, 46, 23, 46, 
-	25, 45, 27, 20, 23, 46, 23, 46, 
-	25, 45, 27, 15, 25, 16, 46, 23, 
-	46, 25, 14, 18, 53, 13, 16, 80, 
-	0, 80, 48, 14, 0, 16, 49, 0, 
-	49, 48, 14, 18, 50, 48, 16, 49, 
-	0, 49, 48, 26, 23, 48, 16, 52, 
-	23, 52, 51, 26, 23, 48, 16, 52, 
-	23, 52, 51, 45, 27, 48, 51, 16, 
-	52, 23, 52, 51, 55, 23, 13, 16, 
-	74, 23, 74, 54, 55, 23, 13, 16, 
-	74, 23, 74, 54, 55, 58, 20, 23, 
-	57, 23, 57, 56, 55, 23, 15, 16, 
-	57, 23, 57, 56, 55, 58, 20, 56, 
-	16, 57, 23, 57, 56, 60, 62, 59, 
-	60, 62, 59, 55, 20, 16, 61, 61, 
-	23, 61, 58, 20, 23, 23, 56, 63, 
-	20, 16, 73, 73, 19, 63, 20, 72, 
-	19, 65, 19, 65, 64, 63, 20, 16, 
-	65, 19, 65, 64, 63, 20, 66, 64, 
-	16, 65, 19, 65, 64, 68, 60, 64, 
-	16, 71, 59, 71, 67, 68, 60, 64, 
-	16, 71, 59, 71, 67, 68, 20, 62, 
-	59, 69, 59, 69, 67, 70, 20, 62, 
-	67, 16, 71, 59, 71, 67, 70, 20, 
-	62, 59, 71, 59, 71, 67, 70, 20, 
-	64, 67, 16, 71, 59, 71, 67, 60, 
-	62, 59, 73, 20, 72, 19, 19, 64, 
-	77, 58, 13, 54, 16, 79, 23, 79, 
-	75, 55, 23, 48, 16, 76, 23, 76, 
-	75, 77, 58, 13, 75, 16, 76, 23, 
-	76, 75, 77, 58, 20, 23, 78, 23, 
-	78, 56, 55, 58, 15, 56, 16, 57, 
-	23, 57, 56, 77, 58, 48, 75, 16, 
-	76, 23, 76, 75, 14, 18, 81, 48, 
-	16, 49, 0, 49, 48, 55, 23, 48, 
-	16, 76, 23, 76, 75, 0, 87, 91, 
-	0, 0, 83, 84, 0, 16, 115, 0, 
-	115, 83, 84, 87, 91, 0, 86, 0, 
-	86, 85, 84, 0, 16, 86, 0, 86, 
-	85, 84, 87, 93, 85, 16, 86, 0, 
-	86, 85, 89, 88, 89, 88, 84, 16, 
-	90, 90, 0, 90, 87, 91, 0, 0, 
-	85, 89, 92, 89, 92, 95, 92, 85, 
-	16, 114, 92, 114, 94, 95, 92, 85, 
-	16, 114, 92, 114, 94, 95, 96, 89, 
-	92, 112, 92, 112, 94, 98, 100, 97, 
-	98, 100, 97, 95, 89, 16, 99, 99, 
-	92, 99, 96, 89, 92, 92, 94, 101, 
-	89, 16, 111, 111, 88, 101, 89, 110, 
-	88, 103, 88, 103, 102, 101, 89, 16, 
-	103, 88, 103, 102, 101, 89, 104, 102, 
-	16, 103, 88, 103, 102, 106, 98, 102, 
-	16, 109, 97, 109, 105, 106, 98, 102, 
-	16, 109, 97, 109, 105, 106, 98, 100, 
-	97, 107, 97, 107, 105, 108, 98, 100, 
-	105, 16, 109, 97, 109, 105, 108, 98, 
-	100, 97, 109, 97, 109, 105, 108, 98, 
-	102, 105, 16, 109, 97, 109, 105, 98, 
-	100, 97, 111, 89, 110, 88, 88, 102, 
-	113, 96, 89, 94, 16, 114, 92, 114, 
-	94, 113, 96, 89, 92, 114, 92, 114, 
-	94, 113, 96, 85, 94, 16, 114, 92, 
-	114, 94, 84, 87, 121, 83, 16, 148, 
-	0, 148, 116, 84, 0, 16, 117, 0, 
-	117, 116, 84, 87, 118, 116, 16, 117, 
-	0, 117, 116, 95, 92, 116, 16, 120, 
-	92, 120, 119, 95, 92, 116, 16, 120, 
-	92, 120, 119, 113, 96, 116, 119, 16, 
-	120, 92, 120, 119, 123, 92, 83, 16, 
-	142, 92, 142, 122, 123, 92, 83, 16, 
-	142, 92, 142, 122, 123, 126, 89, 92, 
-	125, 92, 125, 124, 123, 92, 85, 16, 
-	125, 92, 125, 124, 123, 126, 89, 124, 
-	16, 125, 92, 125, 124, 128, 130, 127, 
-	128, 130, 127, 123, 89, 16, 129, 129, 
-	92, 129, 126, 89, 92, 92, 124, 131, 
-	89, 16, 141, 141, 88, 131, 89, 140, 
-	88, 133, 88, 133, 132, 131, 89, 16, 
-	133, 88, 133, 132, 131, 89, 134, 132, 
-	16, 133, 88, 133, 132, 136, 128, 132, 
-	16, 139, 127, 139, 135, 136, 128, 132, 
-	16, 139, 127, 139, 135, 136, 89, 130, 
-	127, 137, 127, 137, 135, 138, 89, 130, 
-	135, 16, 139, 127, 139, 135, 138, 89, 
-	130, 127, 139, 127, 139, 135, 138, 89, 
-	132, 135, 16, 139, 127, 139, 135, 128, 
-	130, 127, 141, 89, 140, 88, 88, 132, 
-	145, 126, 83, 122, 16, 147, 92, 147, 
-	143, 123, 92, 116, 16, 144, 92, 144, 
-	143, 123, 126, 83, 143, 16, 144, 92, 
-	144, 143, 145, 126, 89, 92, 146, 92, 
-	146, 124, 123, 126, 85, 124, 16, 125, 
-	92, 125, 124, 145, 126, 116, 143, 16, 
-	144, 92, 144, 143, 84, 87, 149, 116, 
-	16, 117, 0, 117, 116, 123, 92, 116, 
-	16, 144, 92, 144, 143, 0, 7, 10, 
-	151, 0, 6, 0, 156, 160, 0, 0, 
-	152, 153, 0, 16, 185, 0, 185, 152, 
-	153, 156, 160, 0, 155, 0, 155, 154, 
-	153, 0, 16, 155, 0, 155, 154, 153, 
-	156, 162, 154, 16, 155, 0, 155, 154, 
-	158, 157, 158, 157, 153, 16, 159, 159, 
-	0, 159, 156, 160, 0, 0, 154, 158, 
-	161, 158, 161, 164, 161, 154, 16, 184, 
-	161, 184, 163, 164, 161, 154, 16, 184, 
-	161, 184, 163, 164, 165, 158, 161, 182, 
-	161, 182, 163, 167, 169, 166, 167, 169, 
-	166, 164, 158, 16, 168, 168, 161, 168, 
-	165, 158, 161, 161, 163, 170, 158, 16, 
-	181, 181, 157, 170, 158, 180, 157, 172, 
-	157, 172, 171, 170, 158, 16, 172, 157, 
-	172, 171, 170, 158, 173, 171, 16, 172, 
-	157, 172, 171, 175, 167, 171, 16, 179, 
-	166, 179, 174, 175, 167, 171, 16, 179, 
-	166, 179, 174, 175, 167, 158, 166, 176, 
-	166, 176, 174, 177, 167, 169, 174, 16, 
-	179, 166, 179, 174, 177, 167, 158, 166, 
-	178, 166, 178, 174, 177, 167, 171, 174, 
-	16, 179, 166, 179, 174, 177, 167, 154, 
-	174, 16, 179, 166, 179, 174, 167, 169, 
-	166, 181, 158, 180, 157, 157, 171, 183, 
-	165, 158, 163, 16, 184, 161, 184, 163, 
-	183, 165, 158, 161, 184, 161, 184, 163, 
-	183, 165, 154, 163, 16, 184, 161, 184, 
-	163, 188, 156, 282, 152, 16, 290, 0, 
-	290, 186, 153, 0, 16, 187, 0, 187, 
-	186, 188, 156, 257, 186, 16, 187, 0, 
-	187, 186, 188, 156, 160, 0, 189, 0, 
-	189, 154, 153, 156, 190, 154, 16, 155, 
-	0, 155, 154, 192, 161, 154, 16, 256, 
-	161, 256, 191, 192, 161, 154, 16, 256, 
-	161, 256, 191, 192, 193, 158, 161, 254, 
-	161, 254, 191, 195, 197, 194, 195, 197, 
-	194, 192, 158, 16, 196, 196, 161, 196, 
-	193, 158, 161, 161, 191, 198, 158, 16, 
-	253, 253, 157, 198, 158, 252, 157, 200, 
-	157, 200, 199, 198, 158, 16, 200, 157, 
-	200, 199, 198, 158, 201, 199, 16, 200, 
-	157, 200, 199, 203, 195, 199, 16, 251, 
-	194, 251, 202, 203, 195, 199, 16, 251, 
-	194, 251, 202, 203, 195, 204, 194, 248, 
-	194, 248, 202, 205, 158, 16, 247, 247, 
-	157, 205, 158, 246, 157, 207, 157, 207, 
-	206, 205, 158, 16, 207, 157, 207, 206, 
-	205, 158, 208, 206, 16, 207, 157, 207, 
-	206, 210, 212, 206, 16, 245, 211, 245, 
-	209, 210, 212, 206, 16, 245, 211, 245, 
-	209, 210, 158, 204, 211, 243, 211, 243, 
-	209, 212, 204, 211, 213, 158, 16, 242, 
-	242, 161, 213, 241, 158, 161, 240, 161, 
-	240, 214, 213, 161, 215, 16, 240, 161, 
-	240, 214, 153, 0, 16, 216, 0, 216, 
-	154, 188, 156, 217, 154, 16, 189, 0, 
-	189, 154, 219, 161, 215, 16, 239, 161, 
-	239, 218, 219, 161, 215, 16, 239, 161, 
-	239, 218, 219, 220, 158, 161, 237, 161, 
-	237, 218, 222, 224, 221, 222, 224, 221, 
-	219, 158, 16, 223, 223, 161, 223, 220, 
-	158, 161, 161, 218, 225, 158, 16, 236, 
-	236, 157, 225, 158, 235, 157, 227, 157, 
-	227, 226, 225, 158, 16, 227, 157, 227, 
-	226, 225, 158, 228, 226, 16, 227, 157, 
-	227, 226, 230, 222, 226, 16, 234, 221, 
-	234, 229, 230, 222, 226, 16, 234, 221, 
-	234, 229, 230, 167, 158, 221, 231, 221, 
-	231, 229, 232, 167, 224, 229, 16, 234, 
-	221, 234, 229, 232, 167, 158, 221, 233, 
-	221, 233, 229, 232, 167, 226, 229, 16, 
-	234, 221, 234, 229, 232, 167, 154, 229, 
-	16, 234, 221, 234, 229, 222, 224, 221, 
-	236, 158, 235, 157, 157, 226, 238, 220, 
-	158, 218, 16, 239, 161, 239, 218, 238, 
-	220, 158, 161, 239, 161, 239, 218, 238, 
-	220, 215, 218, 16, 239, 161, 239, 218, 
-	213, 241, 158, 214, 16, 240, 161, 240, 
-	214, 212, 204, 211, 242, 241, 158, 161, 
-	161, 214, 244, 158, 204, 209, 16, 245, 
-	211, 245, 209, 244, 158, 204, 211, 245, 
-	211, 245, 209, 244, 158, 206, 209, 16, 
-	245, 211, 245, 209, 212, 204, 211, 247, 
-	158, 246, 157, 157, 206, 249, 195, 197, 
-	202, 16, 251, 194, 251, 202, 249, 195, 
-	204, 194, 250, 194, 250, 202, 249, 195, 
-	199, 202, 16, 251, 194, 251, 202, 249, 
-	195, 206, 202, 16, 251, 194, 251, 202, 
-	195, 197, 194, 253, 158, 252, 157, 157, 
-	199, 255, 193, 158, 191, 16, 256, 161, 
-	256, 191, 255, 193, 158, 161, 256, 161, 
-	256, 191, 255, 193, 154, 191, 16, 256, 
-	161, 256, 191, 259, 161, 186, 16, 281, 
-	161, 281, 258, 259, 161, 186, 16, 281, 
-	161, 281, 258, 259, 263, 158, 161, 280, 
-	161, 280, 260, 259, 161, 215, 16, 261, 
-	161, 261, 260, 262, 263, 215, 260, 16, 
-	261, 161, 261, 260, 262, 263, 158, 161, 
-	261, 161, 261, 260, 265, 267, 264, 265, 
-	267, 264, 259, 158, 16, 266, 266, 161, 
-	266, 263, 158, 161, 161, 260, 268, 158, 
-	16, 279, 279, 157, 268, 158, 278, 157, 
-	270, 157, 270, 269, 268, 158, 16, 270, 
-	157, 270, 269, 268, 158, 271, 269, 16, 
-	270, 157, 270, 269, 273, 265, 269, 16, 
-	277, 264, 277, 272, 273, 265, 269, 16, 
-	277, 264, 277, 272, 273, 195, 204, 264, 
-	274, 264, 274, 272, 275, 195, 267, 272, 
-	16, 277, 264, 277, 272, 275, 195, 204, 
-	264, 276, 264, 276, 272, 275, 195, 269, 
-	272, 16, 277, 264, 277, 272, 275, 195, 
-	206, 272, 16, 277, 264, 277, 272, 265, 
-	267, 264, 279, 158, 278, 157, 157, 269, 
-	262, 263, 158, 260, 16, 261, 161, 261, 
-	260, 262, 263, 215, 258, 16, 281, 161, 
-	281, 258, 213, 161, 152, 16, 284, 161, 
-	284, 283, 213, 161, 152, 16, 284, 161, 
-	284, 283, 287, 241, 158, 283, 16, 289, 
-	161, 289, 285, 213, 161, 186, 16, 286, 
-	161, 286, 285, 287, 241, 158, 285, 16, 
-	289, 161, 289, 285, 287, 241, 158, 161, 
-	288, 161, 288, 214, 213, 241, 215, 214, 
-	16, 240, 161, 240, 214, 287, 241, 215, 
-	285, 16, 289, 161, 289, 285, 188, 156, 
-	291, 186, 16, 187, 0, 187, 186, 213, 
-	161, 186, 16, 286, 161, 286, 285, 0, 
-	18, 22, 0, 0, 293, 14, 0, 16, 
-	294, 0, 294, 293, 14, 18, 295, 293, 
-	16, 301, 0, 301, 48, 55, 23, 293, 
-	16, 297, 23, 297, 296, 55, 23, 293, 
-	16, 297, 23, 297, 296, 77, 58, 293, 
-	296, 16, 300, 23, 300, 298, 55, 23, 
-	48, 16, 299, 23, 299, 298, 55, 58, 
-	293, 298, 16, 299, 23, 299, 298, 77, 
-	58, 48, 298, 16, 299, 23, 299, 298, 
-	14, 18, 302, 48, 16, 49, 0, 49, 
-	48, 55, 23, 48, 16, 299, 23, 299, 
-	298, 303, 3, 0, 0, 150, 2, 304, 
-	3, 0, 0, 5, 4, 305, 3, 0, 
-	0, 0, 6, 0, 0
+	307, 1, 7, 10, 294, 305, 306, 0, 
+	2, 307, 3, 0, 0, 152, 2, 308, 
+	3, 7, 10, 82, 150, 151, 0, 4, 
+	308, 3, 0, 0, 5, 4, 0, 7, 
+	10, 12, 0, 6, 309, 3, 0, 0, 
+	0, 6, 9, 8, 9, 8, 310, 3, 
+	0, 9, 11, 9, 11, 0, 18, 22, 
+	0, 0, 13, 14, 0, 16, 47, 0, 
+	47, 13, 14, 18, 22, 0, 17, 0, 
+	17, 15, 14, 0, 16, 17, 0, 17, 
+	15, 310, 3, 0, 14, 18, 24, 15, 
+	16, 17, 0, 17, 15, 20, 19, 20, 
+	19, 14, 16, 21, 21, 0, 21, 18, 
+	22, 0, 0, 15, 20, 23, 20, 23, 
+	26, 23, 15, 16, 46, 23, 46, 25, 
+	26, 23, 15, 16, 46, 23, 46, 25, 
+	26, 27, 20, 23, 44, 23, 44, 25, 
+	29, 31, 28, 29, 31, 28, 26, 20, 
+	16, 30, 30, 23, 30, 27, 20, 23, 
+	23, 25, 32, 20, 16, 43, 43, 19, 
+	32, 20, 42, 19, 34, 19, 34, 33, 
+	32, 20, 16, 34, 19, 34, 33, 32, 
+	20, 35, 33, 16, 34, 19, 34, 33, 
+	37, 29, 33, 16, 41, 28, 41, 36, 
+	37, 29, 33, 16, 41, 28, 41, 36, 
+	37, 29, 31, 28, 38, 28, 38, 36, 
+	39, 20, 31, 36, 16, 41, 28, 41, 
+	36, 39, 29, 31, 28, 40, 28, 40, 
+	36, 39, 20, 33, 36, 16, 41, 28, 
+	41, 36, 39, 29, 33, 36, 16, 41, 
+	28, 41, 36, 29, 31, 28, 43, 20, 
+	42, 19, 19, 33, 45, 27, 20, 25, 
+	16, 46, 23, 46, 25, 45, 27, 20, 
+	23, 46, 23, 46, 25, 45, 27, 15, 
+	25, 16, 46, 23, 46, 25, 14, 18, 
+	53, 13, 16, 80, 0, 80, 48, 14, 
+	0, 16, 49, 0, 49, 48, 14, 18, 
+	50, 48, 16, 49, 0, 49, 48, 26, 
+	23, 48, 16, 52, 23, 52, 51, 26, 
+	23, 48, 16, 52, 23, 52, 51, 45, 
+	27, 48, 51, 16, 52, 23, 52, 51, 
+	55, 23, 13, 16, 74, 23, 74, 54, 
+	55, 23, 13, 16, 74, 23, 74, 54, 
+	55, 58, 20, 23, 57, 23, 57, 56, 
+	55, 23, 15, 16, 57, 23, 57, 56, 
+	55, 58, 20, 56, 16, 57, 23, 57, 
+	56, 60, 62, 59, 60, 62, 59, 55, 
+	20, 16, 61, 61, 23, 61, 58, 20, 
+	23, 23, 56, 63, 20, 16, 73, 73, 
+	19, 63, 20, 72, 19, 65, 19, 65, 
+	64, 63, 20, 16, 65, 19, 65, 64, 
+	63, 20, 66, 64, 16, 65, 19, 65, 
+	64, 68, 60, 64, 16, 71, 59, 71, 
+	67, 68, 60, 64, 16, 71, 59, 71, 
+	67, 68, 20, 62, 59, 69, 59, 69, 
+	67, 70, 20, 62, 67, 16, 71, 59, 
+	71, 67, 70, 20, 62, 59, 71, 59, 
+	71, 67, 70, 20, 64, 67, 16, 71, 
+	59, 71, 67, 60, 62, 59, 73, 20, 
+	72, 19, 19, 64, 77, 58, 13, 54, 
+	16, 79, 23, 79, 75, 55, 23, 48, 
+	16, 76, 23, 76, 75, 55, 58, 13, 
+	75, 16, 76, 23, 76, 75, 77, 58, 
+	20, 23, 78, 23, 78, 56, 55, 58, 
+	15, 56, 16, 57, 23, 57, 56, 77, 
+	58, 48, 75, 16, 76, 23, 76, 75, 
+	14, 18, 81, 48, 16, 49, 0, 49, 
+	48, 55, 23, 48, 16, 76, 23, 76, 
+	75, 0, 87, 91, 0, 0, 83, 84, 
+	0, 16, 115, 0, 115, 83, 84, 87, 
+	91, 0, 86, 0, 86, 85, 84, 0, 
+	16, 86, 0, 86, 85, 84, 87, 93, 
+	85, 16, 86, 0, 86, 85, 89, 88, 
+	89, 88, 84, 16, 90, 90, 0, 90, 
+	87, 91, 0, 0, 85, 89, 92, 89, 
+	92, 95, 92, 85, 16, 114, 92, 114, 
+	94, 95, 92, 85, 16, 114, 92, 114, 
+	94, 95, 96, 89, 92, 112, 92, 112, 
+	94, 98, 100, 97, 98, 100, 97, 95, 
+	89, 16, 99, 99, 92, 99, 96, 89, 
+	92, 92, 94, 101, 89, 16, 111, 111, 
+	88, 101, 89, 110, 88, 103, 88, 103, 
+	102, 101, 89, 16, 103, 88, 103, 102, 
+	101, 89, 104, 102, 16, 103, 88, 103, 
+	102, 106, 98, 102, 16, 109, 97, 109, 
+	105, 106, 98, 102, 16, 109, 97, 109, 
+	105, 106, 98, 100, 97, 107, 97, 107, 
+	105, 108, 98, 100, 105, 16, 109, 97, 
+	109, 105, 108, 98, 100, 97, 109, 97, 
+	109, 105, 108, 98, 102, 105, 16, 109, 
+	97, 109, 105, 98, 100, 97, 111, 89, 
+	110, 88, 88, 102, 113, 96, 89, 94, 
+	16, 114, 92, 114, 94, 113, 96, 89, 
+	92, 114, 92, 114, 94, 113, 96, 85, 
+	94, 16, 114, 92, 114, 94, 84, 87, 
+	121, 83, 16, 148, 0, 148, 116, 84, 
+	0, 16, 117, 0, 117, 116, 84, 87, 
+	118, 116, 16, 117, 0, 117, 116, 95, 
+	92, 116, 16, 120, 92, 120, 119, 95, 
+	92, 116, 16, 120, 92, 120, 119, 113, 
+	96, 116, 119, 16, 120, 92, 120, 119, 
+	123, 92, 83, 16, 142, 92, 142, 122, 
+	123, 92, 83, 16, 142, 92, 142, 122, 
+	123, 126, 89, 92, 125, 92, 125, 124, 
+	123, 92, 85, 16, 125, 92, 125, 124, 
+	123, 126, 89, 124, 16, 125, 92, 125, 
+	124, 128, 130, 127, 128, 130, 127, 123, 
+	89, 16, 129, 129, 92, 129, 126, 89, 
+	92, 92, 124, 131, 89, 16, 141, 141, 
+	88, 131, 89, 140, 88, 133, 88, 133, 
+	132, 131, 89, 16, 133, 88, 133, 132, 
+	131, 89, 134, 132, 16, 133, 88, 133, 
+	132, 136, 128, 132, 16, 139, 127, 139, 
+	135, 136, 128, 132, 16, 139, 127, 139, 
+	135, 136, 89, 130, 127, 137, 127, 137, 
+	135, 138, 89, 130, 135, 16, 139, 127, 
+	139, 135, 138, 89, 130, 127, 139, 127, 
+	139, 135, 138, 89, 132, 135, 16, 139, 
+	127, 139, 135, 128, 130, 127, 141, 89, 
+	140, 88, 88, 132, 145, 126, 83, 122, 
+	16, 147, 92, 147, 143, 123, 92, 116, 
+	16, 144, 92, 144, 143, 123, 126, 83, 
+	143, 16, 144, 92, 144, 143, 145, 126, 
+	89, 92, 146, 92, 146, 124, 123, 126, 
+	85, 124, 16, 125, 92, 125, 124, 145, 
+	126, 116, 143, 16, 144, 92, 144, 143, 
+	84, 87, 149, 116, 16, 117, 0, 117, 
+	116, 123, 92, 116, 16, 144, 92, 144, 
+	143, 0, 7, 10, 82, 0, 4, 0, 
+	7, 10, 82, 0, 4, 0, 7, 10, 
+	153, 0, 6, 0, 158, 162, 0, 0, 
+	154, 155, 0, 16, 187, 0, 187, 154, 
+	155, 158, 162, 0, 157, 0, 157, 156, 
+	155, 0, 16, 157, 0, 157, 156, 155, 
+	158, 164, 156, 16, 157, 0, 157, 156, 
+	160, 159, 160, 159, 155, 16, 161, 161, 
+	0, 161, 158, 162, 0, 0, 156, 160, 
+	163, 160, 163, 166, 163, 156, 16, 186, 
+	163, 186, 165, 166, 163, 156, 16, 186, 
+	163, 186, 165, 166, 167, 160, 163, 184, 
+	163, 184, 165, 169, 171, 168, 169, 171, 
+	168, 166, 160, 16, 170, 170, 163, 170, 
+	167, 160, 163, 163, 165, 172, 160, 16, 
+	183, 183, 159, 172, 160, 182, 159, 174, 
+	159, 174, 173, 172, 160, 16, 174, 159, 
+	174, 173, 172, 160, 175, 173, 16, 174, 
+	159, 174, 173, 177, 169, 173, 16, 181, 
+	168, 181, 176, 177, 169, 173, 16, 181, 
+	168, 181, 176, 177, 169, 160, 168, 178, 
+	168, 178, 176, 179, 169, 171, 176, 16, 
+	181, 168, 181, 176, 179, 169, 160, 168, 
+	180, 168, 180, 176, 179, 169, 173, 176, 
+	16, 181, 168, 181, 176, 179, 169, 156, 
+	176, 16, 181, 168, 181, 176, 169, 171, 
+	168, 183, 160, 182, 159, 159, 173, 185, 
+	167, 160, 165, 16, 186, 163, 186, 165, 
+	185, 167, 160, 163, 186, 163, 186, 165, 
+	185, 167, 156, 165, 16, 186, 163, 186, 
+	165, 190, 158, 284, 154, 16, 292, 0, 
+	292, 188, 155, 0, 16, 189, 0, 189, 
+	188, 190, 158, 259, 188, 16, 189, 0, 
+	189, 188, 190, 158, 162, 0, 191, 0, 
+	191, 156, 155, 158, 192, 156, 16, 157, 
+	0, 157, 156, 194, 163, 156, 16, 258, 
+	163, 258, 193, 194, 163, 156, 16, 258, 
+	163, 258, 193, 194, 195, 160, 163, 256, 
+	163, 256, 193, 197, 199, 196, 197, 199, 
+	196, 194, 160, 16, 198, 198, 163, 198, 
+	195, 160, 163, 163, 193, 200, 160, 16, 
+	255, 255, 159, 200, 160, 254, 159, 202, 
+	159, 202, 201, 200, 160, 16, 202, 159, 
+	202, 201, 200, 160, 203, 201, 16, 202, 
+	159, 202, 201, 205, 197, 201, 16, 253, 
+	196, 253, 204, 205, 197, 201, 16, 253, 
+	196, 253, 204, 205, 197, 206, 196, 250, 
+	196, 250, 204, 207, 160, 16, 249, 249, 
+	159, 207, 160, 248, 159, 209, 159, 209, 
+	208, 207, 160, 16, 209, 159, 209, 208, 
+	207, 160, 210, 208, 16, 209, 159, 209, 
+	208, 212, 214, 208, 16, 247, 213, 247, 
+	211, 212, 214, 208, 16, 247, 213, 247, 
+	211, 212, 160, 206, 213, 245, 213, 245, 
+	211, 214, 206, 213, 215, 160, 16, 244, 
+	244, 163, 215, 243, 160, 163, 242, 163, 
+	242, 216, 215, 163, 217, 16, 242, 163, 
+	242, 216, 155, 0, 16, 218, 0, 218, 
+	156, 190, 158, 219, 156, 16, 191, 0, 
+	191, 156, 221, 163, 217, 16, 241, 163, 
+	241, 220, 221, 163, 217, 16, 241, 163, 
+	241, 220, 221, 222, 160, 163, 239, 163, 
+	239, 220, 224, 226, 223, 224, 226, 223, 
+	221, 160, 16, 225, 225, 163, 225, 222, 
+	160, 163, 163, 220, 227, 160, 16, 238, 
+	238, 159, 227, 160, 237, 159, 229, 159, 
+	229, 228, 227, 160, 16, 229, 159, 229, 
+	228, 227, 160, 230, 228, 16, 229, 159, 
+	229, 228, 232, 224, 228, 16, 236, 223, 
+	236, 231, 232, 224, 228, 16, 236, 223, 
+	236, 231, 232, 169, 160, 223, 233, 223, 
+	233, 231, 234, 169, 226, 231, 16, 236, 
+	223, 236, 231, 234, 169, 160, 223, 235, 
+	223, 235, 231, 234, 169, 228, 231, 16, 
+	236, 223, 236, 231, 234, 169, 156, 231, 
+	16, 236, 223, 236, 231, 224, 226, 223, 
+	238, 160, 237, 159, 159, 228, 240, 222, 
+	160, 220, 16, 241, 163, 241, 220, 240, 
+	222, 160, 163, 241, 163, 241, 220, 240, 
+	222, 217, 220, 16, 241, 163, 241, 220, 
+	215, 243, 160, 216, 16, 242, 163, 242, 
+	216, 214, 206, 213, 244, 243, 160, 163, 
+	163, 216, 246, 160, 206, 211, 16, 247, 
+	213, 247, 211, 246, 160, 206, 213, 247, 
+	213, 247, 211, 246, 160, 208, 211, 16, 
+	247, 213, 247, 211, 214, 206, 213, 249, 
+	160, 248, 159, 159, 208, 251, 197, 199, 
+	204, 16, 253, 196, 253, 204, 251, 197, 
+	206, 196, 252, 196, 252, 204, 251, 197, 
+	201, 204, 16, 253, 196, 253, 204, 251, 
+	197, 208, 204, 16, 253, 196, 253, 204, 
+	197, 199, 196, 255, 160, 254, 159, 159, 
+	201, 257, 195, 160, 193, 16, 258, 163, 
+	258, 193, 257, 195, 160, 163, 258, 163, 
+	258, 193, 257, 195, 156, 193, 16, 258, 
+	163, 258, 193, 261, 163, 188, 16, 283, 
+	163, 283, 260, 261, 163, 188, 16, 283, 
+	163, 283, 260, 261, 265, 160, 163, 282, 
+	163, 282, 262, 261, 163, 217, 16, 263, 
+	163, 263, 262, 264, 265, 217, 262, 16, 
+	263, 163, 263, 262, 264, 265, 160, 163, 
+	263, 163, 263, 262, 267, 269, 266, 267, 
+	269, 266, 261, 160, 16, 268, 268, 163, 
+	268, 265, 160, 163, 163, 262, 270, 160, 
+	16, 281, 281, 159, 270, 160, 280, 159, 
+	272, 159, 272, 271, 270, 160, 16, 272, 
+	159, 272, 271, 270, 160, 273, 271, 16, 
+	272, 159, 272, 271, 275, 267, 271, 16, 
+	279, 266, 279, 274, 275, 267, 271, 16, 
+	279, 266, 279, 274, 275, 197, 206, 266, 
+	276, 266, 276, 274, 277, 197, 269, 274, 
+	16, 279, 266, 279, 274, 277, 197, 206, 
+	266, 278, 266, 278, 274, 277, 197, 271, 
+	274, 16, 279, 266, 279, 274, 277, 197, 
+	208, 274, 16, 279, 266, 279, 274, 267, 
+	269, 266, 281, 160, 280, 159, 159, 271, 
+	264, 265, 160, 262, 16, 263, 163, 263, 
+	262, 264, 265, 217, 260, 16, 283, 163, 
+	283, 260, 215, 163, 154, 16, 286, 163, 
+	286, 285, 215, 163, 154, 16, 286, 163, 
+	286, 285, 289, 243, 160, 285, 16, 291, 
+	163, 291, 287, 215, 163, 188, 16, 288, 
+	163, 288, 287, 289, 243, 160, 287, 16, 
+	291, 163, 291, 287, 289, 243, 160, 163, 
+	290, 163, 290, 216, 215, 243, 217, 216, 
+	16, 242, 163, 242, 216, 289, 243, 217, 
+	287, 16, 291, 163, 291, 287, 190, 158, 
+	293, 188, 16, 189, 0, 189, 188, 215, 
+	163, 188, 16, 288, 163, 288, 287, 0, 
+	87, 91, 0, 0, 295, 84, 0, 16, 
+	296, 0, 296, 295, 84, 87, 297, 295, 
+	16, 303, 0, 303, 116, 123, 92, 295, 
+	16, 299, 92, 299, 298, 123, 92, 295, 
+	16, 299, 92, 299, 298, 145, 126, 295, 
+	298, 16, 302, 92, 302, 300, 123, 92, 
+	116, 16, 301, 92, 301, 300, 123, 126, 
+	89, 300, 16, 301, 92, 301, 300, 145, 
+	126, 116, 300, 16, 301, 92, 301, 300, 
+	84, 87, 304, 116, 16, 117, 0, 117, 
+	116, 123, 92, 116, 16, 301, 92, 301, 
+	300, 0, 7, 10, 294, 0, 2, 0, 
+	7, 10, 294, 0, 2, 307, 3, 0, 
+	0, 152, 2, 308, 3, 0, 0, 5, 
+	4, 309, 3, 0, 0, 0, 6, 0, 
+	0
 ]
 
 class &lt;&lt; self
@@ -743,275 +752,279 @@ class &lt;&lt; self
 	private :_parser_trans_actions, :_parser_trans_actions=
 end
 self._parser_trans_actions = [
-	9, 0, 12, 12, 12, 7, 9, 18, 
-	18, 7, 7, 15, 0, 9, 0, 12, 
-	12, 12, 7, 9, 18, 18, 7, 7, 
-	15, 0, 0, 5, 5, 5, 0, 1, 
-	18, 18, 7, 7, 7, 0, 31, 1, 
-	21, 0, 3, 3, 7, 31, 1, 21, 
-	0, 0, 5, 5, 0, 0, 1, 18, 
-	0, 39, 18, 0, 18, 0, 0, 5, 
-	5, 0, 1, 0, 1, 1, 18, 0, 
-	39, 18, 0, 18, 0, 0, 0, 7, 
-	18, 5, 5, 0, 39, 27, 0, 27, 
-	1, 31, 1, 21, 0, 3, 24, 3, 
-	3, 0, 0, 5, 5, 0, 0, 1, 
-	31, 1, 21, 0, 27, 1, 31, 39, 
-	27, 1, 27, 1, 18, 0, 21, 39, 
-	18, 0, 18, 0, 0, 5, 21, 0, 
-	1, 0, 1, 1, 31, 31, 1, 21, 
-	21, 0, 3, 21, 24, 3, 3, 0, 
-	0, 5, 21, 0, 0, 1, 3, 21, 
-	24, 3, 3, 0, 0, 21, 5, 0, 
-	1, 0, 1, 1, 18, 21, 39, 18, 
-	0, 18, 0, 18, 21, 5, 0, 39, 
-	27, 0, 27, 1, 27, 43, 31, 39, 
-	27, 1, 27, 1, 18, 21, 21, 39, 
-	18, 0, 18, 0, 0, 21, 21, 0, 
-	1, 0, 1, 1, 18, 21, 21, 0, 
-	39, 27, 0, 27, 1, 0, 21, 21, 
-	0, 1, 0, 1, 1, 18, 21, 21, 
-	0, 39, 27, 0, 27, 1, 18, 21, 
-	21, 0, 39, 27, 0, 27, 1, 43, 
-	31, 1, 0, 21, 5, 0, 0, 1, 
-	18, 5, 21, 0, 39, 27, 0, 27, 
-	1, 0, 5, 21, 0, 1, 0, 1, 
-	1, 18, 5, 21, 0, 39, 27, 0, 
-	27, 1, 18, 5, 5, 0, 39, 35, 
-	0, 35, 1, 18, 0, 39, 18, 0, 
-	18, 0, 18, 5, 5, 0, 39, 35, 
-	0, 35, 1, 35, 1, 31, 39, 35, 
-	1, 35, 1, 18, 0, 21, 39, 18, 
-	0, 18, 0, 18, 5, 21, 0, 39, 
-	35, 0, 35, 1, 35, 1, 31, 39, 
-	35, 1, 35, 1, 18, 0, 21, 39, 
-	18, 0, 18, 0, 0, 5, 21, 0, 
-	1, 0, 1, 1, 18, 0, 21, 39, 
-	18, 0, 18, 0, 18, 5, 21, 0, 
-	39, 27, 0, 27, 1, 31, 31, 1, 
-	21, 21, 0, 3, 21, 24, 3, 3, 
-	0, 0, 5, 21, 0, 0, 1, 3, 
-	21, 24, 3, 3, 0, 0, 21, 5, 
-	0, 1, 0, 1, 1, 18, 21, 39, 
-	18, 0, 18, 0, 18, 21, 5, 0, 
-	39, 27, 0, 27, 1, 27, 43, 31, 
-	39, 27, 1, 27, 1, 18, 21, 21, 
-	39, 18, 0, 18, 0, 0, 21, 21, 
-	0, 1, 0, 1, 1, 18, 21, 21, 
-	0, 39, 27, 0, 27, 1, 0, 21, 
-	21, 0, 1, 0, 1, 1, 18, 21, 
-	21, 0, 39, 27, 0, 27, 1, 43, 
-	31, 1, 0, 21, 5, 0, 0, 1, 
-	18, 5, 21, 0, 39, 35, 0, 35, 
-	1, 18, 0, 21, 39, 18, 0, 18, 
-	0, 18, 5, 21, 0, 39, 35, 0, 
-	35, 1, 0, 5, 21, 0, 1, 0, 
-	1, 1, 18, 5, 21, 0, 39, 27, 
-	0, 27, 1, 18, 5, 21, 0, 39, 
-	35, 0, 35, 1, 18, 5, 5, 0, 
-	39, 35, 0, 35, 1, 35, 1, 31, 
-	39, 35, 1, 35, 1, 0, 5, 5, 
-	0, 0, 1, 18, 0, 39, 18, 0, 
-	18, 0, 0, 5, 5, 0, 1, 0, 
-	1, 1, 18, 0, 39, 18, 0, 18, 
-	0, 18, 5, 5, 0, 39, 27, 0, 
-	27, 1, 31, 1, 21, 0, 3, 24, 
-	3, 3, 0, 0, 5, 5, 0, 0, 
-	1, 31, 1, 21, 0, 27, 1, 31, 
-	39, 27, 1, 27, 1, 18, 0, 21, 
-	39, 18, 0, 18, 0, 0, 5, 21, 
-	0, 1, 0, 1, 1, 31, 31, 1, 
-	21, 21, 0, 3, 21, 24, 3, 3, 
-	0, 0, 5, 21, 0, 0, 1, 3, 
-	21, 24, 3, 3, 0, 0, 21, 5, 
-	0, 1, 0, 1, 1, 18, 21, 39, 
-	18, 0, 18, 0, 18, 21, 5, 0, 
-	39, 27, 0, 27, 1, 27, 43, 31, 
-	39, 27, 1, 27, 1, 18, 21, 21, 
-	39, 18, 0, 18, 0, 0, 21, 21, 
-	0, 1, 0, 1, 1, 18, 21, 21, 
-	0, 39, 27, 0, 27, 1, 0, 21, 
-	21, 0, 1, 0, 1, 1, 18, 21, 
-	21, 0, 39, 27, 0, 27, 1, 43, 
-	31, 1, 0, 21, 5, 0, 0, 1, 
-	18, 5, 21, 0, 39, 27, 0, 27, 
-	1, 0, 5, 21, 0, 1, 0, 1, 
-	1, 18, 5, 21, 0, 39, 27, 0, 
-	27, 1, 18, 5, 5, 0, 39, 35, 
-	0, 35, 1, 18, 0, 39, 18, 0, 
-	18, 0, 18, 5, 5, 0, 39, 35, 
-	0, 35, 1, 35, 1, 31, 39, 35, 
-	1, 35, 1, 18, 0, 21, 39, 18, 
-	0, 18, 0, 18, 5, 21, 0, 39, 
-	35, 0, 35, 1, 35, 1, 31, 39, 
-	35, 1, 35, 1, 18, 0, 21, 39, 
-	18, 0, 18, 0, 0, 5, 21, 0, 
-	1, 0, 1, 1, 18, 0, 21, 39, 
-	18, 0, 18, 0, 18, 5, 21, 0, 
-	39, 27, 0, 27, 1, 31, 31, 1, 
-	21, 21, 0, 3, 21, 24, 3, 3, 
-	0, 0, 5, 21, 0, 0, 1, 3, 
-	21, 24, 3, 3, 0, 0, 21, 5, 
-	0, 1, 0, 1, 1, 18, 21, 39, 
-	18, 0, 18, 0, 18, 21, 5, 0, 
-	39, 27, 0, 27, 1, 27, 43, 31, 
-	39, 27, 1, 27, 1, 18, 21, 21, 
-	39, 18, 0, 18, 0, 0, 21, 21, 
-	0, 1, 0, 1, 1, 18, 21, 21, 
-	0, 39, 27, 0, 27, 1, 0, 21, 
-	21, 0, 1, 0, 1, 1, 18, 21, 
-	21, 0, 39, 27, 0, 27, 1, 43, 
-	31, 1, 0, 21, 5, 0, 0, 1, 
-	18, 5, 21, 0, 39, 35, 0, 35, 
-	1, 18, 0, 21, 39, 18, 0, 18, 
-	0, 18, 5, 21, 0, 39, 35, 0, 
-	35, 1, 0, 5, 21, 0, 1, 0, 
-	1, 1, 18, 5, 21, 0, 39, 27, 
-	0, 27, 1, 18, 5, 21, 0, 39, 
-	35, 0, 35, 1, 18, 5, 5, 0, 
-	39, 35, 0, 35, 1, 35, 1, 31, 
-	39, 35, 1, 35, 1, 0, 5, 5, 
+	49, 0, 53, 53, 53, 0, 0, 7, 
+	49, 12, 12, 7, 7, 9, 0, 49, 
+	0, 53, 53, 53, 0, 0, 7, 49, 
+	12, 12, 7, 7, 9, 0, 0, 5, 
+	5, 5, 0, 1, 12, 12, 7, 7, 
+	7, 0, 25, 1, 15, 0, 3, 3, 
+	7, 25, 1, 15, 0, 0, 5, 5, 
+	0, 0, 1, 12, 0, 33, 12, 0, 
+	12, 0, 0, 5, 5, 0, 1, 0, 
+	1, 1, 12, 0, 33, 12, 0, 12, 
+	0, 0, 0, 7, 12, 5, 5, 0, 
+	33, 21, 0, 21, 1, 25, 1, 15, 
+	0, 3, 18, 3, 3, 0, 0, 5, 
+	5, 0, 0, 1, 25, 1, 15, 0, 
+	21, 1, 25, 33, 21, 1, 21, 1, 
+	12, 0, 15, 33, 12, 0, 12, 0, 
+	0, 5, 15, 0, 1, 0, 1, 1, 
+	25, 25, 1, 15, 15, 0, 3, 15, 
+	18, 3, 3, 0, 0, 5, 15, 0, 
+	0, 1, 3, 15, 18, 3, 3, 0, 
+	0, 15, 5, 0, 1, 0, 1, 1, 
+	12, 15, 33, 12, 0, 12, 0, 12, 
+	15, 5, 0, 33, 21, 0, 21, 1, 
+	21, 37, 25, 33, 21, 1, 21, 1, 
+	12, 15, 15, 33, 12, 0, 12, 0, 
+	0, 15, 15, 0, 1, 0, 1, 1, 
+	12, 15, 15, 0, 33, 21, 0, 21, 
+	1, 0, 15, 15, 0, 1, 0, 1, 
+	1, 12, 15, 15, 0, 33, 21, 0, 
+	21, 1, 12, 15, 15, 0, 33, 21, 
+	0, 21, 1, 37, 25, 1, 0, 15, 
+	5, 0, 0, 1, 12, 5, 15, 0, 
+	33, 21, 0, 21, 1, 0, 5, 15, 
+	0, 1, 0, 1, 1, 12, 5, 15, 
+	0, 33, 21, 0, 21, 1, 12, 5, 
+	5, 0, 33, 29, 0, 29, 1, 12, 
+	0, 33, 12, 0, 12, 0, 12, 5, 
+	5, 0, 33, 29, 0, 29, 1, 29, 
+	1, 25, 33, 29, 1, 29, 1, 12, 
+	0, 15, 33, 12, 0, 12, 0, 12, 
+	5, 15, 0, 33, 29, 0, 29, 1, 
+	29, 1, 25, 33, 29, 1, 29, 1, 
+	12, 0, 15, 33, 12, 0, 12, 0, 
+	0, 5, 15, 0, 1, 0, 1, 1, 
+	12, 0, 15, 33, 12, 0, 12, 0, 
+	12, 5, 15, 0, 33, 21, 0, 21, 
+	1, 25, 25, 1, 15, 15, 0, 3, 
+	15, 18, 3, 3, 0, 0, 5, 15, 
+	0, 0, 1, 3, 15, 18, 3, 3, 
+	0, 0, 15, 5, 0, 1, 0, 1, 
+	1, 12, 15, 33, 12, 0, 12, 0, 
+	12, 15, 5, 0, 33, 21, 0, 21, 
+	1, 21, 37, 25, 33, 21, 1, 21, 
+	1, 12, 15, 15, 33, 12, 0, 12, 
+	0, 0, 15, 15, 0, 1, 0, 1, 
+	1, 12, 15, 15, 0, 33, 21, 0, 
+	21, 1, 0, 15, 15, 0, 1, 0, 
+	1, 1, 12, 15, 15, 0, 33, 21, 
+	0, 21, 1, 37, 25, 1, 0, 15, 
+	5, 0, 0, 1, 12, 5, 15, 0, 
+	33, 29, 0, 29, 1, 12, 0, 15, 
+	33, 12, 0, 12, 0, 12, 5, 15, 
+	0, 33, 29, 0, 29, 1, 0, 5, 
+	15, 0, 1, 0, 1, 1, 12, 5, 
+	15, 0, 33, 21, 0, 21, 1, 12, 
+	5, 15, 0, 33, 29, 0, 29, 1, 
+	12, 5, 5, 0, 33, 29, 0, 29, 
+	1, 29, 1, 25, 33, 29, 1, 29, 
+	1, 0, 5, 5, 0, 0, 1, 12, 
+	0, 33, 12, 0, 12, 0, 0, 5, 
+	5, 0, 1, 0, 1, 1, 12, 0, 
+	33, 12, 0, 12, 0, 12, 5, 5, 
+	0, 33, 21, 0, 21, 1, 25, 1, 
+	15, 0, 3, 18, 3, 3, 0, 0, 
+	5, 5, 0, 0, 1, 25, 1, 15, 
+	0, 21, 1, 25, 33, 21, 1, 21, 
+	1, 12, 0, 15, 33, 12, 0, 12, 
+	0, 0, 5, 15, 0, 1, 0, 1, 
+	1, 25, 25, 1, 15, 15, 0, 3, 
+	15, 18, 3, 3, 0, 0, 5, 15, 
+	0, 0, 1, 3, 15, 18, 3, 3, 
+	0, 0, 15, 5, 0, 1, 0, 1, 
+	1, 12, 15, 33, 12, 0, 12, 0, 
+	12, 15, 5, 0, 33, 21, 0, 21, 
+	1, 21, 37, 25, 33, 21, 1, 21, 
+	1, 12, 15, 15, 33, 12, 0, 12, 
+	0, 0, 15, 15, 0, 1, 0, 1, 
+	1, 12, 15, 15, 0, 33, 21, 0, 
+	21, 1, 0, 15, 15, 0, 1, 0, 
+	1, 1, 12, 15, 15, 0, 33, 21, 
+	0, 21, 1, 37, 25, 1, 0, 15, 
+	5, 0, 0, 1, 12, 5, 15, 0, 
+	33, 21, 0, 21, 1, 0, 5, 15, 
+	0, 1, 0, 1, 1, 12, 5, 15, 
+	0, 33, 21, 0, 21, 1, 12, 5, 
+	5, 0, 33, 29, 0, 29, 1, 12, 
+	0, 33, 12, 0, 12, 0, 12, 5, 
+	5, 0, 33, 29, 0, 29, 1, 29, 
+	1, 25, 33, 29, 1, 29, 1, 12, 
+	0, 15, 33, 12, 0, 12, 0, 12, 
+	5, 15, 0, 33, 29, 0, 29, 1, 
+	29, 1, 25, 33, 29, 1, 29, 1, 
+	12, 0, 15, 33, 12, 0, 12, 0, 
+	0, 5, 15, 0, 1, 0, 1, 1, 
+	12, 0, 15, 33, 12, 0, 12, 0, 
+	12, 5, 15, 0, 33, 21, 0, 21, 
+	1, 25, 25, 1, 15, 15, 0, 3, 
+	15, 18, 3, 3, 0, 0, 5, 15, 
+	0, 0, 1, 3, 15, 18, 3, 3, 
+	0, 0, 15, 5, 0, 1, 0, 1, 
+	1, 12, 15, 33, 12, 0, 12, 0, 
+	12, 15, 5, 0, 33, 21, 0, 21, 
+	1, 21, 37, 25, 33, 21, 1, 21, 
+	1, 12, 15, 15, 33, 12, 0, 12, 
+	0, 0, 15, 15, 0, 1, 0, 1, 
+	1, 12, 15, 15, 0, 33, 21, 0, 
+	21, 1, 0, 15, 15, 0, 1, 0, 
+	1, 1, 12, 15, 15, 0, 33, 21, 
+	0, 21, 1, 37, 25, 1, 0, 15, 
+	5, 0, 0, 1, 12, 5, 15, 0, 
+	33, 29, 0, 29, 1, 12, 0, 15, 
+	33, 12, 0, 12, 0, 12, 5, 15, 
+	0, 33, 29, 0, 29, 1, 0, 5, 
+	15, 0, 1, 0, 1, 1, 12, 5, 
+	15, 0, 33, 21, 0, 21, 1, 12, 
+	5, 15, 0, 33, 29, 0, 29, 1, 
+	12, 5, 5, 0, 33, 29, 0, 29, 
+	1, 29, 1, 25, 33, 29, 1, 29, 
+	1, 0, 53, 53, 53, 0, 49, 0, 
+	45, 45, 45, 0, 41, 0, 5, 5, 
 	5, 0, 1, 0, 5, 5, 0, 0, 
-	1, 18, 0, 39, 18, 0, 18, 0, 
+	1, 12, 0, 33, 12, 0, 12, 0, 
 	0, 5, 5, 0, 1, 0, 1, 1, 
-	18, 0, 39, 18, 0, 18, 0, 18, 
-	5, 5, 0, 39, 27, 0, 27, 1, 
-	31, 1, 21, 0, 3, 24, 3, 3, 
-	0, 0, 5, 5, 0, 0, 1, 31, 
-	1, 21, 0, 27, 1, 31, 39, 27, 
-	1, 27, 1, 18, 0, 21, 39, 18, 
-	0, 18, 0, 0, 5, 21, 0, 1, 
-	0, 1, 1, 31, 31, 1, 21, 21, 
-	0, 3, 21, 24, 3, 3, 0, 0, 
-	5, 21, 0, 0, 1, 3, 21, 24, 
-	3, 3, 0, 0, 21, 5, 0, 1, 
-	0, 1, 1, 18, 21, 39, 18, 0, 
-	18, 0, 18, 21, 5, 0, 39, 27, 
-	0, 27, 1, 27, 43, 31, 39, 27, 
-	1, 27, 1, 18, 21, 21, 39, 18, 
-	0, 18, 0, 0, 21, 21, 0, 1, 
-	0, 1, 1, 18, 21, 21, 0, 39, 
-	27, 0, 27, 1, 0, 21, 21, 0, 
-	1, 0, 1, 1, 18, 21, 21, 0, 
-	39, 27, 0, 27, 1, 18, 21, 21, 
-	0, 39, 27, 0, 27, 1, 43, 31, 
-	1, 0, 21, 5, 0, 0, 1, 18, 
-	5, 21, 0, 39, 27, 0, 27, 1, 
-	0, 5, 21, 0, 1, 0, 1, 1, 
-	18, 5, 21, 0, 39, 27, 0, 27, 
-	1, 18, 5, 5, 0, 39, 35, 0, 
-	35, 1, 18, 0, 39, 18, 0, 18, 
-	0, 18, 5, 5, 0, 39, 35, 0, 
-	35, 1, 0, 5, 5, 0, 1, 0, 
-	1, 1, 18, 5, 5, 0, 39, 27, 
-	0, 27, 1, 27, 1, 31, 39, 27, 
-	1, 27, 1, 18, 0, 21, 39, 18, 
-	0, 18, 0, 0, 5, 21, 0, 1, 
-	0, 1, 1, 31, 31, 1, 21, 21, 
-	0, 3, 21, 24, 3, 3, 0, 0, 
-	5, 21, 0, 0, 1, 3, 21, 24, 
-	3, 3, 0, 0, 21, 5, 0, 1, 
-	0, 1, 1, 18, 21, 39, 18, 0, 
-	18, 0, 18, 21, 5, 0, 39, 27, 
-	0, 27, 1, 27, 43, 31, 39, 27, 
-	1, 27, 1, 18, 21, 21, 39, 18, 
-	0, 18, 0, 0, 21, 21, 0, 1, 
-	0, 1, 1, 3, 21, 24, 3, 3, 
-	0, 0, 21, 5, 0, 1, 0, 1, 
-	1, 18, 21, 39, 18, 0, 18, 0, 
-	18, 21, 5, 0, 39, 27, 0, 27, 
-	1, 27, 43, 31, 39, 27, 1, 27, 
-	1, 18, 21, 21, 39, 18, 0, 18, 
-	0, 0, 21, 21, 0, 1, 0, 1, 
-	1, 21, 21, 0, 3, 21, 24, 3, 
-	3, 0, 0, 5, 21, 0, 1, 0, 
-	1, 1, 18, 0, 21, 39, 18, 0, 
-	18, 0, 18, 0, 39, 18, 0, 18, 
-	0, 18, 5, 5, 0, 39, 27, 0, 
-	27, 1, 27, 1, 31, 39, 27, 1, 
-	27, 1, 18, 0, 21, 39, 18, 0, 
-	18, 0, 0, 5, 21, 0, 1, 0, 
-	1, 1, 31, 31, 1, 21, 21, 0, 
-	3, 21, 24, 3, 3, 0, 0, 5, 
-	21, 0, 0, 1, 3, 21, 24, 3, 
-	3, 0, 0, 21, 5, 0, 1, 0, 
-	1, 1, 18, 21, 39, 18, 0, 18, 
-	0, 18, 21, 5, 0, 39, 27, 0, 
-	27, 1, 27, 43, 31, 39, 27, 1, 
-	27, 1, 18, 21, 21, 39, 18, 0, 
-	18, 0, 0, 21, 21, 0, 1, 0, 
-	1, 1, 18, 21, 21, 0, 39, 27, 
-	0, 27, 1, 0, 21, 21, 0, 1, 
-	0, 1, 1, 18, 21, 21, 0, 39, 
-	27, 0, 27, 1, 18, 21, 21, 0, 
-	39, 27, 0, 27, 1, 43, 31, 1, 
-	0, 21, 5, 0, 0, 1, 18, 5, 
-	21, 0, 39, 27, 0, 27, 1, 0, 
-	5, 21, 0, 1, 0, 1, 1, 18, 
-	5, 21, 0, 39, 27, 0, 27, 1, 
-	18, 5, 21, 0, 39, 27, 0, 27, 
-	1, 31, 31, 1, 0, 5, 21, 0, 
-	0, 1, 18, 21, 21, 0, 39, 27, 
-	0, 27, 1, 0, 21, 21, 0, 1, 
-	0, 1, 1, 18, 21, 21, 0, 39, 
-	27, 0, 27, 1, 43, 31, 1, 0, 
-	21, 5, 0, 0, 1, 18, 21, 21, 
-	0, 39, 27, 0, 27, 1, 0, 21, 
-	21, 0, 1, 0, 1, 1, 18, 21, 
-	21, 0, 39, 27, 0, 27, 1, 18, 
-	21, 21, 0, 39, 27, 0, 27, 1, 
-	43, 31, 1, 0, 21, 5, 0, 0, 
-	1, 18, 5, 21, 0, 39, 27, 0, 
-	27, 1, 0, 5, 21, 0, 1, 0, 
-	1, 1, 18, 5, 21, 0, 39, 27, 
-	0, 27, 1, 35, 1, 31, 39, 35, 
-	1, 35, 1, 18, 0, 21, 39, 18, 
-	0, 18, 0, 0, 5, 21, 0, 1, 
-	0, 1, 1, 18, 0, 21, 39, 18, 
-	0, 18, 0, 18, 5, 21, 0, 39, 
-	27, 0, 27, 1, 0, 5, 21, 0, 
-	1, 0, 1, 1, 31, 31, 1, 21, 
-	21, 0, 3, 21, 24, 3, 3, 0, 
-	0, 5, 21, 0, 0, 1, 3, 21, 
-	24, 3, 3, 0, 0, 21, 5, 0, 
-	1, 0, 1, 1, 18, 21, 39, 18, 
-	0, 18, 0, 18, 21, 5, 0, 39, 
-	27, 0, 27, 1, 27, 43, 31, 39, 
-	27, 1, 27, 1, 18, 21, 21, 39, 
-	18, 0, 18, 0, 0, 21, 21, 0, 
-	1, 0, 1, 1, 18, 21, 21, 0, 
-	39, 27, 0, 27, 1, 0, 21, 21, 
-	0, 1, 0, 1, 1, 18, 21, 21, 
-	0, 39, 27, 0, 27, 1, 18, 21, 
-	21, 0, 39, 27, 0, 27, 1, 43, 
-	31, 1, 0, 21, 5, 0, 0, 1, 
-	18, 5, 21, 0, 39, 27, 0, 27, 
-	1, 18, 5, 21, 0, 39, 35, 0, 
-	35, 1, 35, 1, 31, 39, 35, 1, 
-	35, 1, 18, 0, 21, 39, 18, 0, 
-	18, 0, 18, 5, 21, 0, 39, 35, 
-	0, 35, 1, 18, 0, 21, 39, 18, 
-	0, 18, 0, 18, 5, 21, 0, 39, 
-	35, 0, 35, 1, 0, 5, 21, 0, 
-	1, 0, 1, 1, 18, 5, 21, 0, 
-	39, 27, 0, 27, 1, 18, 5, 21, 
-	0, 39, 35, 0, 35, 1, 18, 5, 
-	5, 0, 39, 35, 0, 35, 1, 35, 
-	1, 31, 39, 35, 1, 35, 1, 0, 
-	5, 5, 0, 0, 1, 18, 0, 39, 
-	18, 0, 18, 0, 18, 5, 5, 0, 
-	39, 35, 0, 35, 1, 35, 1, 31, 
-	39, 35, 1, 35, 1, 18, 0, 21, 
-	39, 18, 0, 18, 0, 18, 5, 21, 
-	0, 39, 35, 0, 35, 1, 18, 0, 
-	21, 39, 18, 0, 18, 0, 18, 5, 
-	21, 0, 39, 35, 0, 35, 1, 18, 
-	5, 21, 0, 39, 35, 0, 35, 1, 
-	18, 5, 5, 0, 39, 35, 0, 35, 
-	1, 35, 1, 31, 39, 35, 1, 35, 
-	1, 18, 18, 7, 7, 15, 0, 18, 
-	18, 7, 7, 15, 0, 18, 18, 7, 
-	7, 7, 0, 0, 0
+	12, 0, 33, 12, 0, 12, 0, 12, 
+	5, 5, 0, 33, 21, 0, 21, 1, 
+	25, 1, 15, 0, 3, 18, 3, 3, 
+	0, 0, 5, 5, 0, 0, 1, 25, 
+	1, 15, 0, 21, 1, 25, 33, 21, 
+	1, 21, 1, 12, 0, 15, 33, 12, 
+	0, 12, 0, 0, 5, 15, 0, 1, 
+	0, 1, 1, 25, 25, 1, 15, 15, 
+	0, 3, 15, 18, 3, 3, 0, 0, 
+	5, 15, 0, 0, 1, 3, 15, 18, 
+	3, 3, 0, 0, 15, 5, 0, 1, 
+	0, 1, 1, 12, 15, 33, 12, 0, 
+	12, 0, 12, 15, 5, 0, 33, 21, 
+	0, 21, 1, 21, 37, 25, 33, 21, 
+	1, 21, 1, 12, 15, 15, 33, 12, 
+	0, 12, 0, 0, 15, 15, 0, 1, 
+	0, 1, 1, 12, 15, 15, 0, 33, 
+	21, 0, 21, 1, 0, 15, 15, 0, 
+	1, 0, 1, 1, 12, 15, 15, 0, 
+	33, 21, 0, 21, 1, 12, 15, 15, 
+	0, 33, 21, 0, 21, 1, 37, 25, 
+	1, 0, 15, 5, 0, 0, 1, 12, 
+	5, 15, 0, 33, 21, 0, 21, 1, 
+	0, 5, 15, 0, 1, 0, 1, 1, 
+	12, 5, 15, 0, 33, 21, 0, 21, 
+	1, 12, 5, 5, 0, 33, 29, 0, 
+	29, 1, 12, 0, 33, 12, 0, 12, 
+	0, 12, 5, 5, 0, 33, 29, 0, 
+	29, 1, 0, 5, 5, 0, 1, 0, 
+	1, 1, 12, 5, 5, 0, 33, 21, 
+	0, 21, 1, 21, 1, 25, 33, 21, 
+	1, 21, 1, 12, 0, 15, 33, 12, 
+	0, 12, 0, 0, 5, 15, 0, 1, 
+	0, 1, 1, 25, 25, 1, 15, 15, 
+	0, 3, 15, 18, 3, 3, 0, 0, 
+	5, 15, 0, 0, 1, 3, 15, 18, 
+	3, 3, 0, 0, 15, 5, 0, 1, 
+	0, 1, 1, 12, 15, 33, 12, 0, 
+	12, 0, 12, 15, 5, 0, 33, 21, 
+	0, 21, 1, 21, 37, 25, 33, 21, 
+	1, 21, 1, 12, 15, 15, 33, 12, 
+	0, 12, 0, 0, 15, 15, 0, 1, 
+	0, 1, 1, 3, 15, 18, 3, 3, 
+	0, 0, 15, 5, 0, 1, 0, 1, 
+	1, 12, 15, 33, 12, 0, 12, 0, 
+	12, 15, 5, 0, 33, 21, 0, 21, 
+	1, 21, 37, 25, 33, 21, 1, 21, 
+	1, 12, 15, 15, 33, 12, 0, 12, 
+	0, 0, 15, 15, 0, 1, 0, 1, 
+	1, 15, 15, 0, 3, 15, 18, 3, 
+	3, 0, 0, 5, 15, 0, 1, 0, 
+	1, 1, 12, 0, 15, 33, 12, 0, 
+	12, 0, 12, 0, 33, 12, 0, 12, 
+	0, 12, 5, 5, 0, 33, 21, 0, 
+	21, 1, 21, 1, 25, 33, 21, 1, 
+	21, 1, 12, 0, 15, 33, 12, 0, 
+	12, 0, 0, 5, 15, 0, 1, 0, 
+	1, 1, 25, 25, 1, 15, 15, 0, 
+	3, 15, 18, 3, 3, 0, 0, 5, 
+	15, 0, 0, 1, 3, 15, 18, 3, 
+	3, 0, 0, 15, 5, 0, 1, 0, 
+	1, 1, 12, 15, 33, 12, 0, 12, 
+	0, 12, 15, 5, 0, 33, 21, 0, 
+	21, 1, 21, 37, 25, 33, 21, 1, 
+	21, 1, 12, 15, 15, 33, 12, 0, 
+	12, 0, 0, 15, 15, 0, 1, 0, 
+	1, 1, 12, 15, 15, 0, 33, 21, 
+	0, 21, 1, 0, 15, 15, 0, 1, 
+	0, 1, 1, 12, 15, 15, 0, 33, 
+	21, 0, 21, 1, 12, 15, 15, 0, 
+	33, 21, 0, 21, 1, 37, 25, 1, 
+	0, 15, 5, 0, 0, 1, 12, 5, 
+	15, 0, 33, 21, 0, 21, 1, 0, 
+	5, 15, 0, 1, 0, 1, 1, 12, 
+	5, 15, 0, 33, 21, 0, 21, 1, 
+	12, 5, 15, 0, 33, 21, 0, 21, 
+	1, 25, 25, 1, 0, 5, 15, 0, 
+	0, 1, 12, 15, 15, 0, 33, 21, 
+	0, 21, 1, 0, 15, 15, 0, 1, 
+	0, 1, 1, 12, 15, 15, 0, 33, 
+	21, 0, 21, 1, 37, 25, 1, 0, 
+	15, 5, 0, 0, 1, 12, 15, 15, 
+	0, 33, 21, 0, 21, 1, 0, 15, 
+	15, 0, 1, 0, 1, 1, 12, 15, 
+	15, 0, 33, 21, 0, 21, 1, 12, 
+	15, 15, 0, 33, 21, 0, 21, 1, 
+	37, 25, 1, 0, 15, 5, 0, 0, 
+	1, 12, 5, 15, 0, 33, 21, 0, 
+	21, 1, 0, 5, 15, 0, 1, 0, 
+	1, 1, 12, 5, 15, 0, 33, 21, 
+	0, 21, 1, 29, 1, 25, 33, 29, 
+	1, 29, 1, 12, 0, 15, 33, 12, 
+	0, 12, 0, 0, 5, 15, 0, 1, 
+	0, 1, 1, 12, 0, 15, 33, 12, 
+	0, 12, 0, 12, 5, 15, 0, 33, 
+	21, 0, 21, 1, 0, 5, 15, 0, 
+	1, 0, 1, 1, 25, 25, 1, 15, 
+	15, 0, 3, 15, 18, 3, 3, 0, 
+	0, 5, 15, 0, 0, 1, 3, 15, 
+	18, 3, 3, 0, 0, 15, 5, 0, 
+	1, 0, 1, 1, 12, 15, 33, 12, 
+	0, 12, 0, 12, 15, 5, 0, 33, 
+	21, 0, 21, 1, 21, 37, 25, 33, 
+	21, 1, 21, 1, 12, 15, 15, 33, 
+	12, 0, 12, 0, 0, 15, 15, 0, 
+	1, 0, 1, 1, 12, 15, 15, 0, 
+	33, 21, 0, 21, 1, 0, 15, 15, 
+	0, 1, 0, 1, 1, 12, 15, 15, 
+	0, 33, 21, 0, 21, 1, 12, 15, 
+	15, 0, 33, 21, 0, 21, 1, 37, 
+	25, 1, 0, 15, 5, 0, 0, 1, 
+	12, 5, 15, 0, 33, 21, 0, 21, 
+	1, 12, 5, 15, 0, 33, 29, 0, 
+	29, 1, 29, 1, 25, 33, 29, 1, 
+	29, 1, 12, 0, 15, 33, 12, 0, 
+	12, 0, 12, 5, 15, 0, 33, 29, 
+	0, 29, 1, 12, 0, 15, 33, 12, 
+	0, 12, 0, 12, 5, 15, 0, 33, 
+	29, 0, 29, 1, 0, 5, 15, 0, 
+	1, 0, 1, 1, 12, 5, 15, 0, 
+	33, 21, 0, 21, 1, 12, 5, 15, 
+	0, 33, 29, 0, 29, 1, 12, 5, 
+	5, 0, 33, 29, 0, 29, 1, 29, 
+	1, 25, 33, 29, 1, 29, 1, 0, 
+	5, 5, 0, 0, 1, 12, 0, 33, 
+	12, 0, 12, 0, 12, 5, 5, 0, 
+	33, 29, 0, 29, 1, 29, 1, 25, 
+	33, 29, 1, 29, 1, 12, 0, 15, 
+	33, 12, 0, 12, 0, 12, 5, 15, 
+	0, 33, 29, 0, 29, 1, 12, 0, 
+	15, 33, 12, 0, 12, 0, 12, 5, 
+	15, 0, 33, 29, 0, 29, 1, 12, 
+	5, 15, 0, 33, 29, 0, 29, 1, 
+	12, 5, 5, 0, 33, 29, 0, 29, 
+	1, 29, 1, 25, 33, 29, 1, 29, 
+	1, 0, 53, 53, 53, 0, 49, 0, 
+	45, 45, 45, 0, 41, 12, 12, 7, 
+	7, 9, 0, 12, 12, 7, 7, 9, 
+	0, 12, 12, 7, 7, 7, 0, 0, 
+	0
 ]
 
 class &lt;&lt; self
@@ -1057,7 +1070,7 @@ self._parser_eof_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, 0, 0, 0, 0
 ]
 
 class &lt;&lt; self
@@ -1067,7 +1080,7 @@ self.parser_start = 1;
 class &lt;&lt; self
 	attr_accessor :parser_first_final
 end
-self.parser_first_final = 303;
+self.parser_first_final = 307;
 class &lt;&lt; self
 	attr_accessor :parser_error
 end
@@ -1078,25 +1091,26 @@ class &lt;&lt; self
 end
 self.parser_en_main = 1;
 
-# line 81 &quot;lib/keyword_search.rl&quot;
+# line 91 &quot;lib/keyword_search.rl&quot;
     	p = 0
       eof = nil
       word = nil
     	pe = data.length
     	key = nil
+    	positive_match = nil
     	tokstart = nil
     	results = {}
     	quotes = 0
       
-# line 1092 &quot;lib/keyword_search.rb&quot;
+# line 1106 &quot;lib/keyword_search.rb&quot;
 begin
 	p ||= 0
 	pe ||= data.length
 	cs = parser_start
 end
-# line 90 &quot;lib/keyword_search.rl&quot;
+# line 101 &quot;lib/keyword_search.rl&quot;
       
-# line 1100 &quot;lib/keyword_search.rb&quot;
+# line 1114 &quot;lib/keyword_search.rb&quot;
 begin
 	_klen, _trans, _keys, _acts, _nacts = nil
 	_goto_level = 0
@@ -1209,25 +1223,39 @@ when 4 then
 # line 30 &quot;lib/keyword_search.rl&quot;
 		begin
 
-        (results[key || :default] ||= []) &lt;&lt; word
+        (results[key || :default] ||= []) &lt;&lt; [ word, positive_match ]
       		end
 # line 30 &quot;lib/keyword_search.rl&quot;
 when 5 then
 # line 34 &quot;lib/keyword_search.rl&quot;
 		begin
- quotes += 1 		end
+
+        positive_match = false
+      		end
 # line 34 &quot;lib/keyword_search.rl&quot;
 when 6 then
-# line 36 &quot;lib/keyword_search.rl&quot;
+# line 38 &quot;lib/keyword_search.rl&quot;
 		begin
- quotes -= 1 		end
-# line 36 &quot;lib/keyword_search.rl&quot;
+
+        positive_match = true
+      		end
+# line 38 &quot;lib/keyword_search.rl&quot;
 when 7 then
-# line 61 &quot;lib/keyword_search.rl&quot;
+# line 42 &quot;lib/keyword_search.rl&quot;
+		begin
+ quotes += 1 		end
+# line 42 &quot;lib/keyword_search.rl&quot;
+when 8 then
+# line 44 &quot;lib/keyword_search.rl&quot;
+		begin
+ quotes -= 1 		end
+# line 44 &quot;lib/keyword_search.rl&quot;
+when 9 then
+# line 71 &quot;lib/keyword_search.rl&quot;
 		begin
  raise ParseError, &quot;At offset #{p}, near: '#{data[p,10]}'&quot; 		end
-# line 61 &quot;lib/keyword_search.rl&quot;
-# line 1231 &quot;lib/keyword_search.rb&quot;
+# line 71 &quot;lib/keyword_search.rl&quot;
+# line 1259 &quot;lib/keyword_search.rb&quot;
 			end # action switch
 		end
 	end
@@ -1255,12 +1283,12 @@ when 7 then
 		__nacts -= 1
 		__acts += 1
 		case _parser_actions[__acts - 1]
-when 7 then
-# line 61 &quot;lib/keyword_search.rl&quot;
+when 9 then
+# line 71 &quot;lib/keyword_search.rl&quot;
 		begin
  raise ParseError, &quot;At offset #{p}, near: '#{data[p,10]}'&quot; 		end
-# line 61 &quot;lib/keyword_search.rl&quot;
-# line 1264 &quot;lib/keyword_search.rb&quot;
+# line 71 &quot;lib/keyword_search.rl&quot;
+# line 1292 &quot;lib/keyword_search.rb&quot;
 		end # eof action switch
 	end
 	if _trigger_goto
@@ -1273,7 +1301,7 @@ end
 	end
 	end
 	end
-# line 91 &quot;lib/keyword_search.rl&quot;
+# line 102 &quot;lib/keyword_search.rl&quot;
     	unless quotes.zero?
     	  raise ParseError, &quot;Unclosed quotes&quot;
     	end</diff>
      <filename>lib/keyword_search.rb</filename>
    </modified>
    <modified>
      <diff>@@ -28,7 +28,15 @@ module KeywordSearch
       }
       
       action value {
-        (results[key || :default] ||= []) &lt;&lt; word
+        (results[key || :default] ||= []) &lt;&lt; [ word, positive_match ]
+      }
+      
+      action negative_match {
+        positive_match = false
+      }
+      
+      action positive_match {
+        positive_match = true
       }
       
       action quote { quotes += 1 }
@@ -52,8 +60,10 @@ module KeywordSearch
       pair = bareword % key ':' value ;
 
       value_only = value &gt; default ;
+      
+      match_mode = ('-' % negative_match | '+'? % positive_match ) ;
 
-      definition = ( pair | value_only );
+      definition = match_mode? &lt;: ( pair | value_only ) ;
       
       definitions = definition ( ' '+ definition )*;
 
@@ -83,6 +93,7 @@ module KeywordSearch
       word = nil
     	pe = data.length
     	key = nil
+      positive_match = nil
     	tokstart = nil
     	results = {}
     	quotes = 0</diff>
      <filename>lib/keyword_search.rl</filename>
    </modified>
    <modified>
      <diff>@@ -10,8 +10,14 @@ module KeywordSearch
         @handler = handler
       end
       
-      def handle(value)
-        handler.call(value)
+      def handle(value, sign)
+        # If the handler is only expecting one argument, 
+        # only give them the positive matches
+        if handler.arity == 1
+          handler.call(value) if sign
+        else
+          handler.call(value, sign)
+        end
       end
       
     end
@@ -33,11 +39,18 @@ module KeywordSearch
       @default_keyword = name
     end
       
-    def handle(key, values, sign = nil)
+    def handle(key, values)
       key = @default_keyword if key == :default
       return false unless key
+      true_values, false_values = *values.partition { |v| v[1] }
+      
+      # Get just the values
+      true_values.collect! { |v| v[0] }
+      false_values.collect! { |v| v[0] }
+      
       if k = keywords.detect { |kw| kw.name == key.to_sym}
-        k.handle(values)
+        k.handle(true_values, true)
+        k.handle(false_values, false) if false_values.length &gt; 0
       end
     end
     </diff>
      <filename>lib/keyword_search/definition.rb</filename>
    </modified>
    <modified>
      <diff>@@ -266,6 +266,50 @@ context &quot;KeywordSearch&quot; do
     end
     assert_nil result
   end
+  
+  specify 'a negative search' do
+    result = nil
+
+    KeywordSearch.search(%&lt;-site:google.com&gt;) do |with|
+      with.keyword :site do |values, positive|
+        result = [ values, positive ]
+      end
+    end
+    assert_equal [ [ 'google.com' ], false ], result
+  end
+
+  specify 'a positive search' do
+    result = nil
+
+    KeywordSearch.search(%&lt;+site:google.com&gt;) do |with|
+      with.keyword :site do |values, positive|
+        result = [ values, positive ]
+      end
+    end
+    assert_equal [ [ 'google.com' ], true ], result
+  end
+
+  specify 'a search with no sign' do
+    result = nil
+
+    KeywordSearch.search(%&lt;site:google.com&gt;) do |with|
+      with.keyword :site do |values, positive|
+        result = [ values, positive ]
+      end
+    end
+    assert_equal [ [ 'google.com' ], true ], result
+  end
+
+  specify 'a term should default to positive with no sign' do
+    result = nil
+
+    KeywordSearch.search(%&lt;-site:google.com inurl:atom&gt;) do |with|
+      with.keyword :inurl do |values, positive|
+        result = [ values, positive ]
+      end
+    end
+    assert_equal [ [ 'atom' ], true ], result
+  end
 end
 
 </diff>
      <filename>test/test_keyword_search.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>ab6980b29b7d52f208c5381aabec8378759a0fe8</id>
    </parent>
  </parents>
  <author>
    <name>Eric Lindvall</name>
    <email>eric@5stops.com</email>
  </author>
  <url>http://github.com/bruce/keyword_search/commit/94b98bd4acc77f14869fc4b21c3a45937ee10cb3</url>
  <id>94b98bd4acc77f14869fc4b21c3a45937ee10cb3</id>
  <committed-date>2009-01-28T21:26:39-08:00</committed-date>
  <authored-date>2009-01-28T08:47:47-08:00</authored-date>
  <message>Adding support for negation of terms.

Signed-off-by: Bruce Williams &lt;bruce@codefluency.com&gt;</message>
  <tree>f4b52c6891fa8038c40873b3ed5142d369f2ac1d</tree>
  <committer>
    <name>Bruce Williams</name>
    <email>bruce@codefluency.com</email>
  </committer>
</commit>
