[jboss-svn-commits] JBL Code SVN: r5421 - in labs/jbossrules/trunk/drools-compiler/src: main/java/org/drools/lang main/java/org/drools/lang/descr main/java/org/drools/semantics/java main/java/org/drools/xml main/resources main/resources/META-INF main/resources/org/drools/lang test/java/org/drools/compiler test/java/org/drools/integrationtests test/java/org/drools/lang/descr test/java/org/drools/xml test/resources/org/drools/reteoo test/resources/org/drools/xml
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Wed Aug 2 20:14:31 EDT 2006
Author: mark.proctor at jboss.com
Date: 2006-08-02 20:14:06 -0400 (Wed, 02 Aug 2006)
New Revision: 5421
Added:
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/FieldConstraintHandler.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/LiteralRestrictionHandler.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/ReturnValueRestrictionHandler.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/VariableRestrictionsHandler.java
labs/jbossrules/trunk/drools-compiler/src/main/resources/drl.g
Removed:
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/BoundVariableHandler.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/LiteralHandler.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/ReturnValueHandler.java
labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/lang/drl.g
Modified:
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DrlDumper.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/FieldConstraintDescr.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/LiteralRestrictionDescr.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/ReturnValueRestrictionDescr.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/RuleBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/FieldBindingHandler.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/PredicateHandler.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlDumper.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlPackageReader.java
labs/jbossrules/trunk/drools-compiler/src/main/resources/META-INF/drools-3.0.xsd
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderTest.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/LeapsTest.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/descr/AndDescrTest.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/xml/DumperTest.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/xml/XmlPackageReaderTest.java
labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/reteoo/OneAndTwoOrs
labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/reteoo/OneAndTwoOrsPerson
labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/reteoo/ThreeColumnsWithConstraints
labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_Dump.drl
labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_ParseLhs.xml
Log:
JBRULES-220 Refactor ObjectType to work with Templates
-This also involved refactor Evaluator to use Enums for ValueType and Operator
JBRULES-329 implement core handling of Templates for ObjectType
-Initial commmit for FactTemplate work, still not integrated into parsers and builds, it also needs unit tests.
JBRULES-216 Allow & and | connectives for field constraints
-XmlReader is now fixed
-Xml and Drl Dumpers have been fixed
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DrlDumper.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DrlDumper.java 2006-08-02 21:58:31 UTC (rev 5420)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DrlDumper.java 2006-08-03 00:14:06 UTC (rev 5421)
@@ -23,21 +23,23 @@
import org.drools.lang.descr.AndDescr;
import org.drools.lang.descr.AttributeDescr;
-import org.drools.lang.descr.VariableDescr;
+import org.drools.lang.descr.FieldConstraintDescr;
import org.drools.lang.descr.ColumnDescr;
import org.drools.lang.descr.EvalDescr;
import org.drools.lang.descr.ExistsDescr;
import org.drools.lang.descr.FieldBindingDescr;
import org.drools.lang.descr.FunctionDescr;
-import org.drools.lang.descr.LiteralDescr;
+import org.drools.lang.descr.LiteralRestrictionDescr;
import org.drools.lang.descr.NotDescr;
import org.drools.lang.descr.OrDescr;
import org.drools.lang.descr.PackageDescr;
import org.drools.lang.descr.PackageDescrDumper;
import org.drools.lang.descr.PredicateDescr;
import org.drools.lang.descr.QueryDescr;
-import org.drools.lang.descr.ReturnValueDescr;
+import org.drools.lang.descr.RestrictionConnectiveDescr;
+import org.drools.lang.descr.ReturnValueRestrictionDescr;
import org.drools.lang.descr.RuleDescr;
+import org.drools.lang.descr.VariableRestrictionDescr;
import org.drools.util.ReflectiveVisitor;
/**
@@ -60,7 +62,7 @@
public void visitAndDescr(final AndDescr descr) {
this.template = new String();
- if ( descr.getDescrs() != Collections.EMPTY_LIST ) {
+ if ( !descr.getDescrs().isEmpty() ) {
this.template = processDescrList( descr.getDescrs() );
} else {
this.template = "";
@@ -79,15 +81,21 @@
}
this.template = "\t " + name + " " + value + DrlDumper.eol;
}
+
+ public void visitFieldConstraintDescr(final FieldConstraintDescr descr) {
+ if ( !descr.getRestrictions().isEmpty() ) {
+ this.template = descr.getFieldName() + " " + processFieldConstraint( descr.getRestrictions() );
+ }
+ }
- public void visitBoundVariableDescr(final VariableDescr descr) {
+ public void visitVariableRestrictionDescr(final VariableRestrictionDescr descr) {
this.template = new String();
- this.template = descr.getFieldName() + " " + descr.getEvaluator() + " " + descr.getIdentifier();
+ this.template = descr.getEvaluator() + " " + descr.getIdentifier();
}
public void visitColumnDescr(final ColumnDescr descr) {
this.template = new String();
- if ( descr.getDescrs() != Collections.EMPTY_LIST ) {
+ if ( !descr.getDescrs().isEmpty() ) {
if ( descr.getIdentifier() != null ) {
this.template = "\t\t" + descr.getIdentifier() + " : " + descr.getObjectType() + "( " + processColoumnConstraintList( descr.getDescrs() ) + ")";
} else {
@@ -110,7 +118,7 @@
public void visitExistsDescr(final ExistsDescr descr) {
this.template = new String();
- if ( descr.getDescrs() != Collections.EMPTY_LIST ) {
+ if ( !descr.getDescrs().isEmpty() ) {
this.template = "\t\texists " + processDescrList( descr.getDescrs() );
} else {
this.template = "";
@@ -133,7 +141,7 @@
}
- public void visitLiteralDescr(final LiteralDescr descr) {
+ public void visitLiteralRestrictionDescr(final LiteralRestrictionDescr descr) {
this.template = new String();
String text = descr.getText();
try {
@@ -142,12 +150,20 @@
text = "\"" + text + "\"";
}
- this.template = descr.getFieldName() + " " + descr.getEvaluator() + " " + text;
+ this.template = descr.getEvaluator() + " " + text;
}
+
+ public void visitRestrictionConnectiveDescr(final RestrictionConnectiveDescr descr) {
+ if ( descr.getConnective() == RestrictionConnectiveDescr.OR ) {
+ this.template = " | ";
+ } else {
+ this.template = " & ";
+ }
+ }
public void visitNotDescr(final NotDescr descr) {
this.template = new String();
- if ( descr.getDescrs() != Collections.EMPTY_LIST ) {
+ if ( descr.getDescrs().isEmpty() ) {
this.template = "\t not " + processDescrList( descr.getDescrs() );
} else {
this.template = "";
@@ -157,7 +173,7 @@
public void visitOrDescr(final OrDescr descr) {
this.template = new String();
- if ( descr.getDescrs() != Collections.EMPTY_LIST ) {
+ if ( !descr.getDescrs().isEmpty() ) {
this.template = processOrDescrList( descr.getDescrs() );
} else {
this.template = " ";
@@ -190,9 +206,9 @@
}
- public void visitReturnValueDescr(final ReturnValueDescr descr) {
+ public void visitReturnValueRestrictionDescr(final ReturnValueRestrictionDescr descr) {
this.template = new String();
- this.template = descr.getFieldName() + " " + descr.getEvaluator() + " ( " + descr.getText() + ")";
+ this.template = descr.getEvaluator() + " ( " + descr.getText() + ")";
}
public void visitQueryDescr(final QueryDescr descr) {
@@ -209,7 +225,7 @@
String rule = "rule \"" + ruleDescr.getName() + "\" " + DrlDumper.eol;
final String attribute = processAttribute( ruleDescr.getAttributes() );
String lhs = "";
- if ( ruleDescr.getLhs().getDescrs() != Collections.EMPTY_LIST ) {
+ if ( !ruleDescr.getLhs().getDescrs().isEmpty() ) {
lhs = "\t when" + DrlDumper.eol + processDescrList( ruleDescr.getLhs().getDescrs() ) + DrlDumper.eol;
} else {
@@ -264,10 +280,20 @@
descrString.length() - 2 );
}
+ private String processFieldConstraint(List list) {
+ String descrString = "";
+ for ( final Iterator it = list.iterator(); it.hasNext(); ) {
+ final Object temp = it.next();
+ visit( temp );
+ descrString += this.template;
+ }
+ return descrString;
+ }
+
private String processDescrList(final List descr) {
String descrString = "";
- for ( final Iterator iterator = descr.iterator(); iterator.hasNext(); ) {
- visit( iterator.next() );
+ for ( final Iterator it = descr.iterator(); it.hasNext(); ) {
+ visit( it.next() );
descrString += this.template;
descrString += DrlDumper.eol;
}
@@ -277,8 +303,8 @@
private String processFunctionsList(final List functions) {
String functionList = "";
- for ( final Iterator iterator = functions.iterator(); iterator.hasNext(); ) {
- visit( iterator.next() );
+ for ( final Iterator it = functions.iterator(); it.hasNext(); ) {
+ visit( it.next() );
functionList += this.template;
}
@@ -288,8 +314,8 @@
private String processAttribute(final List attributes) {
String attributeList = "";
- for ( final Iterator iterator = attributes.iterator(); iterator.hasNext(); ) {
- final AttributeDescr attributeDescr = (AttributeDescr) iterator.next();
+ for ( final Iterator it = attributes.iterator(); it.hasNext(); ) {
+ final AttributeDescr attributeDescr = (AttributeDescr) it.next();
visit( attributeDescr );
attributeList += this.template;
}
@@ -300,8 +326,8 @@
final List parameterTypes) {
String paramList = "";
int i = 0;
- for ( final Iterator iterator = parameterNames.iterator(); iterator.hasNext(); i++ ) {
- final String paramName = (String) iterator.next();
+ for ( final Iterator it = parameterNames.iterator(); it.hasNext(); i++ ) {
+ final String paramName = (String) it.next();
final String paramType = (String) parameterTypes.get( i );
final String paramTemplate = paramType + " " + paramName + ",";
paramList += paramTemplate;
@@ -314,8 +340,8 @@
private String processGlobalsMap(final Map globals) {
String globalList = "";
- for ( final Iterator iterator = globals.keySet().iterator(); iterator.hasNext(); ) {
- final String key = (String) iterator.next();
+ for ( final Iterator it = globals.keySet().iterator(); it.hasNext(); ) {
+ final String key = (String) it.next();
final String value = (String) globals.get( key );
final String globalTemplate = "global " + value + " " + key + ";" + DrlDumper.eol;
globalList += globalTemplate;
@@ -327,8 +353,8 @@
private String processImportsList(final List imports) {
String importList = "";
- for ( final Iterator iterator = imports.iterator(); iterator.hasNext(); ) {
- final String importString = (String) iterator.next();
+ for ( final Iterator it = imports.iterator(); it.hasNext(); ) {
+ final String importString = (String) it.next();
final String importTemplate = "import " + importString + ";" + DrlDumper.eol;
importList += importTemplate;
}
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/FieldConstraintDescr.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/FieldConstraintDescr.java 2006-08-02 21:58:31 UTC (rev 5420)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/FieldConstraintDescr.java 2006-08-03 00:14:06 UTC (rev 5421)
@@ -1,6 +1,7 @@
package org.drools.lang.descr;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
/*
@@ -28,7 +29,7 @@
private static final long serialVersionUID = 320;
private String fieldName;
- private List restrictions = new ArrayList();
+ private List restrictions = Collections.EMPTY_LIST;
public FieldConstraintDescr(final String fieldName) {
this.fieldName = fieldName;
@@ -39,6 +40,9 @@
}
public void addRestriction(RestrictionDescr restriction) {
+ if ( this.restrictions == Collections.EMPTY_LIST ) {
+ this.restrictions = new ArrayList();
+ }
this.restrictions.add( restriction );
}
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/LiteralRestrictionDescr.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/LiteralRestrictionDescr.java 2006-08-02 21:58:31 UTC (rev 5420)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/LiteralRestrictionDescr.java 2006-08-03 00:14:06 UTC (rev 5421)
@@ -26,20 +26,20 @@
*
*/
private static final long serialVersionUID = 320;
- private String evaluator;
- private String text;
- private boolean staticFieldValue;
+ private String evaluator;
+ private String text;
+ private boolean staticFieldValue;
- public LiteralRestrictionDescr( final String evaluator,
- final String text) {
+ public LiteralRestrictionDescr(final String evaluator,
+ final String text) {
this( evaluator,
text,
false );
}
public LiteralRestrictionDescr(final String evaluator,
- final String text,
- final boolean staticFieldValue) {
+ final String text,
+ final boolean staticFieldValue) {
this.text = text;
this.evaluator = evaluator;
this.staticFieldValue = staticFieldValue;
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/ReturnValueRestrictionDescr.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/ReturnValueRestrictionDescr.java 2006-08-02 21:58:31 UTC (rev 5420)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/ReturnValueRestrictionDescr.java 2006-08-03 00:14:06 UTC (rev 5421)
@@ -21,20 +21,18 @@
*
*/
private static final long serialVersionUID = 478782161375380651L;
- private String evaluator;
- private String text;
- private String[] declarations;
+ private String evaluator;
+ private String text;
+ private String[] declarations;
- private String classMethodName;
+ private String classMethodName;
- public ReturnValueRestrictionDescr(final String fieldName,
- final String evaluator) {
+ public ReturnValueRestrictionDescr(final String evaluator) {
this.evaluator = evaluator;
}
- public ReturnValueRestrictionDescr(final String fieldName,
- final String evaluator,
- final String text) {
+ public ReturnValueRestrictionDescr(final String evaluator,
+ final String text) {
this.evaluator = evaluator;
this.text = text;
}
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/RuleBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/RuleBuilder.java 2006-08-02 21:58:31 UTC (rev 5420)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/RuleBuilder.java 2006-08-03 00:14:06 UTC (rev 5421)
@@ -29,11 +29,13 @@
import org.antlr.stringtemplate.StringTemplateGroup;
import org.antlr.stringtemplate.language.AngleBracketTemplateLexer;
import org.drools.RuntimeDroolsException;
+import org.drools.base.ClassFieldExtractor;
import org.drools.base.ClassFieldExtractorCache;
import org.drools.base.ClassObjectType;
-import org.drools.base.EvaluatorFactory;
import org.drools.base.FieldFactory;
import org.drools.base.FieldImpl;
+import org.drools.base.ValueType;
+import org.drools.base.evaluators.Operator;
import org.drools.compiler.RuleError;
import org.drools.lang.descr.AndDescr;
import org.drools.lang.descr.AttributeDescr;
@@ -429,7 +431,6 @@
return column;
}
-
private void build(final Column column,
final FieldConstraintDescr fieldConstraintDescr) {
@@ -445,22 +446,24 @@
if ( fieldConstraintDescr.getRestrictions().size() == 1 ) {
final Object object = fieldConstraintDescr.getRestrictions().get( 0 );
-
- Restriction restriction = buildRestriction( extractor, fieldConstraintDescr, ( RestrictionDescr ) object );
+
+ Restriction restriction = buildRestriction( extractor,
+ fieldConstraintDescr,
+ (RestrictionDescr) object );
if ( restriction == null ) {
// @todo log errors
return;
}
if ( object instanceof LiteralRestrictionDescr ) {
- column.addConstraint( new LiteralConstraint( extractor,
- ( LiteralRestriction ) restriction ) );
+ column.addConstraint( new LiteralConstraint( extractor,
+ (LiteralRestriction) restriction ) );
} else if ( object instanceof VariableRestrictionDescr ) {
- column.addConstraint( new VariableConstraint( extractor,
- ( VariableRestriction ) restriction ) );
+ column.addConstraint( new VariableConstraint( extractor,
+ (VariableRestriction) restriction ) );
} else if ( object instanceof ReturnValueRestrictionDescr ) {
- column.addConstraint( new ReturnValueConstraint( extractor,
- ( ReturnValueRestriction ) restriction ) );
+ column.addConstraint( new ReturnValueConstraint( extractor,
+ (ReturnValueRestriction) restriction ) );
}
return;
@@ -468,14 +471,13 @@
List orList = new ArrayList();
List andList = null;
-
+
RestrictionDescr currentRestriction = null;
- RestrictionDescr previousRestriction = null;
-
+ RestrictionDescr previousRestriction = null;
+
List currentList = null;
List previousList = null;
-
for ( final Iterator it = fieldConstraintDescr.getRestrictions().iterator(); it.hasNext(); ) {
Object object = it.next();
@@ -489,25 +491,29 @@
andList = new ArrayList();
}
previousList = currentList;
- currentList= andList;
+ currentList = andList;
} else {
previousList = currentList;
currentList = orList;
}
} else {
Restriction restriction = null;
- if ( currentList != null ) {
+ if ( currentList != null ) {
// Are we are at the first operator? if so treat differently
- if ( previousList == null ) {
- restriction = buildRestriction( extractor, fieldConstraintDescr, previousRestriction );
+ if ( previousList == null ) {
+ restriction = buildRestriction( extractor,
+ fieldConstraintDescr,
+ previousRestriction );
if ( currentList == andList ) {
andList.add( restriction );
} else {
- orList.add( restriction );
- }
- } else {
- restriction = buildRestriction( extractor, fieldConstraintDescr, previousRestriction );
-
+ orList.add( restriction );
+ }
+ } else {
+ restriction = buildRestriction( extractor,
+ fieldConstraintDescr,
+ previousRestriction );
+
if ( previousList == andList && currentList == orList ) {
andList.add( restriction );
if ( andList.size() == 1 ) {
@@ -516,27 +522,29 @@
} else {
Restriction restrictions = new AndCompositeRestriction( (Restriction[]) andList.toArray( new Restriction[andList.size()] ) );
orList.add( restrictions );
- }
- andList = null;
+ }
+ andList = null;
} else if ( previousList == andList && currentList == andList ) {
andList.add( restriction );
} else if ( previousList == orList && currentList == andList ) {
andList.add( restriction );
} else if ( previousList == orList && currentList == orList ) {
orList.add( restriction );
- }
+ }
}
- }
+ }
}
- previousRestriction = currentRestriction;
- currentRestriction = ( RestrictionDescr ) object;
+ previousRestriction = currentRestriction;
+ currentRestriction = (RestrictionDescr) object;
}
-
- Restriction restriction = buildRestriction( extractor, fieldConstraintDescr, currentRestriction );
+
+ Restriction restriction = buildRestriction( extractor,
+ fieldConstraintDescr,
+ currentRestriction );
currentList.add( restriction );
-
+
Restriction restrictions = null;
- if ( currentList == andList && !orList.isEmpty() ) {
+ if ( currentList == andList && !orList.isEmpty() ) {
// Check if it finished with an and, and process it
if ( andList != null ) {
if ( andList.size() == 1 ) {
@@ -546,37 +554,40 @@
orList.add( new AndCompositeRestriction( (Restriction[]) andList.toArray( new Restriction[andList.size()] ) ) );
}
andList = null;
- }
+ }
}
-
+
if ( !orList.isEmpty() ) {
- restrictions = new OrCompositeRestriction(( Restriction[] ) orList.toArray( new Restriction[ orList.size() ] ));
+ restrictions = new OrCompositeRestriction( (Restriction[]) orList.toArray( new Restriction[orList.size()] ) );
} else if ( andList != null && !andList.isEmpty() ) {
restrictions = new AndCompositeRestriction( (Restriction[]) andList.toArray( new Restriction[andList.size()] ) );
} else {
// @todo throw error
}
- column.addConstraint( new MultiRestrictionFieldConstraint( extractor, restrictions ) );
+ column.addConstraint( new MultiRestrictionFieldConstraint( extractor,
+ restrictions ) );
}
- private Restriction buildRestriction(FieldExtractor extractor, FieldConstraintDescr fieldConstraintDescr, RestrictionDescr restrictionDescr) {
+ private Restriction buildRestriction(FieldExtractor extractor,
+ FieldConstraintDescr fieldConstraintDescr,
+ RestrictionDescr restrictionDescr) {
Restriction restriction = null;
if ( restrictionDescr instanceof LiteralRestrictionDescr ) {
restriction = build( extractor,
- fieldConstraintDescr,
- (LiteralRestrictionDescr) restrictionDescr);
+ fieldConstraintDescr,
+ (LiteralRestrictionDescr) restrictionDescr );
} else if ( restrictionDescr instanceof VariableRestrictionDescr ) {
restriction = build( extractor,
- fieldConstraintDescr,
- (VariableRestrictionDescr) restrictionDescr );
+ fieldConstraintDescr,
+ (VariableRestrictionDescr) restrictionDescr );
} else if ( restrictionDescr instanceof ReturnValueRestrictionDescr ) {
restriction = build( extractor,
- fieldConstraintDescr,
- (ReturnValueRestrictionDescr) restrictionDescr );
-
- }
-
+ fieldConstraintDescr,
+ (ReturnValueRestrictionDescr) restrictionDescr );
+
+ }
+
return restriction;
}
@@ -635,7 +646,7 @@
}
final Evaluator evaluator = getEvaluator( variableRestrictionDescr,
- extractor.getObjectType().getValueType(),
+ extractor.getValueType(),
variableRestrictionDescr.getEvaluator() );
if ( evaluator == null ) {
return null;
@@ -666,23 +677,23 @@
this.errors.add( new RuleError( this.rule,
literalRestrictionDescr,
e,
- "Unable to create a Field value of type '" + extractor.getObjectType().getValueType() + "' and value '" + literalRestrictionDescr.getText() + "'" ) );
+ "Unable to create a Field value of type '" + extractor.getValueType() + "' and value '" + literalRestrictionDescr.getText() + "'" ) );
}
} else {
try {
field = FieldFactory.getFieldValue( literalRestrictionDescr.getText(),
- extractor.getObjectType().getValueType() );
+ extractor.getValueType() );
} catch ( final Exception e ) {
this.errors.add( new RuleError( this.rule,
literalRestrictionDescr,
e,
- "Unable to create a Field value of type '" + extractor.getObjectType().getValueType() + "' and value '" + literalRestrictionDescr.getText() + "'" ) );
+ "Unable to create a Field value of type '" + extractor.getValueType() + "' and value '" + literalRestrictionDescr.getText() + "'" ) );
}
}
final Evaluator evaluator = getEvaluator( literalRestrictionDescr,
- extractor.getObjectType().getValueType(),
+ extractor.getValueType(),
literalRestrictionDescr.getEvaluator() );
if ( evaluator == null ) {
return null;
@@ -707,7 +718,7 @@
}
final Evaluator evaluator = getEvaluator( returnValueRestrictionDescr,
- extractor.getObjectType().getValueType(),
+ extractor.getValueType(),
returnValueRestrictionDescr.getEvaluator() );
if ( evaluator == null ) {
return null;
@@ -807,9 +818,10 @@
st.setAttribute( "declaration",
declaration );
+
st.setAttribute( "declarationType",
- ((ClassObjectType) declaration.getObjectType()).getClassType().getName().replace( '$',
- '.' ) );
+ declaration.getExtractor().getExtractToClass().getName().replace( '$',
+ '.' ) );
setStringTemplateAttributes( st,
declarations,
@@ -839,8 +851,8 @@
st.setAttribute( "declaration",
declaration );
st.setAttribute( "declarationType",
- ((ClassObjectType) declaration.getObjectType()).getClassType().getName().replace( '$',
- '.' ) );
+ declaration.getExtractor().getExtractToClass().getName().replace( '$',
+ '.' ) );
setStringTemplateAttributes( st,
declarations,
@@ -1024,8 +1036,8 @@
final String text) {
final String[] declarationTypes = new String[declarations.length];
for ( int i = 0, size = declarations.length; i < size; i++ ) {
- declarationTypes[i] = ((ClassObjectType) declarations[i].getObjectType()).getClassType().getName().replace( '$',
- '.' );
+ declarationTypes[i] = declarations[i].getExtractor().getExtractToClass().getName().replace( '$',
+ '.' );
}
final List globalTypes = new ArrayList( globals.length );
@@ -1067,11 +1079,11 @@
}
private Evaluator getEvaluator(final PatternDescr descr,
- final int valueType,
+ final ValueType valueType,
final String evaluatorString) {
- final Evaluator evaluator = EvaluatorFactory.getEvaluator( valueType,
- evaluatorString );
+ final Evaluator evaluator = valueType.getEvaluator( Operator.determineOperator( evaluatorString ) );
+
if ( evaluator == null ) {
this.errors.add( new RuleError( this.rule,
descr,
Deleted: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/BoundVariableHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/BoundVariableHandler.java 2006-08-02 21:58:31 UTC (rev 5420)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/BoundVariableHandler.java 2006-08-03 00:14:06 UTC (rev 5421)
@@ -1,110 +0,0 @@
-package org.drools.xml;
-
-/*
- * Copyright 2005 JBoss Inc
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import java.util.HashSet;
-import java.util.LinkedList;
-import java.util.ListIterator;
-
-import org.drools.lang.descr.VariableDescr;
-import org.drools.lang.descr.ColumnDescr;
-import org.drools.lang.descr.FieldBindingDescr;
-import org.drools.lang.descr.LiteralDescr;
-import org.drools.lang.descr.PredicateDescr;
-import org.drools.lang.descr.ReturnValueDescr;
-import org.xml.sax.Attributes;
-import org.xml.sax.SAXException;
-import org.xml.sax.SAXParseException;
-
-/**
- * @author mproctor
- *
- * TODO To change the template for this generated type comment go to Window -
- * Preferences - Java - Code Style - Code Templates
- */
-class BoundVariableHandler extends BaseAbstractHandler
- implements
- Handler {
- BoundVariableHandler(final XmlPackageReader xmlPackageReader) {
- this.xmlPackageReader = xmlPackageReader;
-
- if ( (this.validParents == null) && (this.validPeers == null) ) {
- this.validParents = new HashSet();
- this.validParents.add( ColumnDescr.class );
-
- this.validPeers = new HashSet();
- this.validPeers.add( null );
- this.validPeers.add( LiteralDescr.class );
- this.validPeers.add( PredicateDescr.class );
- this.validPeers.add( ReturnValueDescr.class );
- this.validPeers.add( FieldBindingDescr.class );
- this.validPeers.add( VariableDescr.class );
- this.allowNesting = false;
- }
- }
-
- public Object start(final String uri,
- final String localName,
- final Attributes attrs) throws SAXException {
- this.xmlPackageReader.startConfiguration( localName,
- attrs );
-
- final String fieldName = attrs.getValue( "field-name" );
- if ( fieldName == null || fieldName.trim().equals( "" ) ) {
- throw new SAXParseException( "<bound-variable> requires a 'field-name' attribute",
- this.xmlPackageReader.getLocator() );
- }
-
- final String evaluator = attrs.getValue( "evaluator" );
- if ( evaluator == null || evaluator.trim().equals( "" ) ) {
- throw new SAXParseException( "<bound-variable> requires an 'evaluator' attribute",
- this.xmlPackageReader.getLocator() );
- }
-
- final String identifier = attrs.getValue( "identifier" );
- if ( identifier == null || identifier.trim().equals( "" ) ) {
- throw new SAXParseException( "<bound-variable> requires an 'identifier' attribute",
- this.xmlPackageReader.getLocator() );
- }
-
- final VariableDescr variableDescr = new VariableDescr( fieldName,
- evaluator,
- identifier );
-
- return variableDescr;
- }
-
- public Object end(final String uri,
- final String localName) throws SAXException {
- final Configuration config = this.xmlPackageReader.endConfiguration();
-
- final VariableDescr variableDescr = (VariableDescr) this.xmlPackageReader.getCurrent();
-
- final LinkedList parents = this.xmlPackageReader.getParents();
- final ListIterator it = parents.listIterator( parents.size() );
- it.previous();
- final ColumnDescr columnDescr = (ColumnDescr) it.previous();
-
- columnDescr.addDescr( variableDescr );
-
- return null;
- }
-
- public Class generateNodeFor() {
- return VariableDescr.class;
- }
-}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/FieldBindingHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/FieldBindingHandler.java 2006-08-02 21:58:31 UTC (rev 5420)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/FieldBindingHandler.java 2006-08-03 00:14:06 UTC (rev 5421)
@@ -20,12 +20,10 @@
import java.util.LinkedList;
import java.util.ListIterator;
-import org.drools.lang.descr.VariableDescr;
import org.drools.lang.descr.ColumnDescr;
import org.drools.lang.descr.FieldBindingDescr;
-import org.drools.lang.descr.LiteralDescr;
+import org.drools.lang.descr.FieldConstraintDescr;
import org.drools.lang.descr.PredicateDescr;
-import org.drools.lang.descr.ReturnValueDescr;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
@@ -48,11 +46,9 @@
this.validPeers = new HashSet();
this.validPeers.add( null );
- this.validPeers.add( LiteralDescr.class );
+ this.validPeers.add( FieldConstraintDescr.class );
this.validPeers.add( PredicateDescr.class );
- this.validPeers.add( ReturnValueDescr.class );
this.validPeers.add( FieldBindingDescr.class );
- this.validPeers.add( VariableDescr.class );
this.allowNesting = false;
}
}
Added: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/FieldConstraintHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/FieldConstraintHandler.java 2006-08-02 21:58:31 UTC (rev 5420)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/FieldConstraintHandler.java 2006-08-03 00:14:06 UTC (rev 5421)
@@ -0,0 +1,95 @@
+package org.drools.xml;
+
+/*
+ * Copyright 2005 JBoss Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.ListIterator;
+
+import org.drools.lang.descr.ColumnDescr;
+import org.drools.lang.descr.ConditionalElementDescr;
+import org.drools.lang.descr.FieldBindingDescr;
+import org.drools.lang.descr.FieldConstraintDescr;
+import org.drools.lang.descr.PredicateDescr;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
+
+/**
+ * @author mproctor
+ *
+ * TODO To change the template for this generated type comment go to Window -
+ * Preferences - Java - Code Style - Code Templates
+ */
+class FieldConstraintHandler extends BaseAbstractHandler
+ implements
+ Handler {
+ FieldConstraintHandler(final XmlPackageReader xmlPackageReader) {
+ this.xmlPackageReader = xmlPackageReader;
+
+ if ( (this.validParents == null) && (this.validPeers == null) ) {
+ this.validParents = new HashSet();
+ this.validParents.add( ColumnDescr.class );
+
+ this.validPeers = new HashSet();
+ this.validPeers.add( null );
+ this.validPeers.add( FieldConstraintDescr.class );
+ this.validPeers.add( PredicateDescr.class );
+ this.validPeers.add( FieldBindingDescr.class );
+ this.allowNesting = false;
+ }
+ }
+
+ public Object start(final String uri,
+ final String localName,
+ final Attributes attrs) throws SAXException {
+ this.xmlPackageReader.startConfiguration( localName,
+ attrs );
+
+ final String fieldName = attrs.getValue( "field-name" );
+
+ if ( fieldName == null || fieldName.trim().equals( "" ) ) {
+ throw new SAXParseException( "<field-constraint> requires a 'field-name' attribute",
+ this.xmlPackageReader.getLocator() );
+ }
+
+ FieldConstraintDescr fieldConstraint = new FieldConstraintDescr( fieldName );
+
+ return fieldConstraint;
+ }
+
+ public Object end(final String uri,
+ final String localName) throws SAXException {
+ final Configuration config = this.xmlPackageReader.endConfiguration();
+
+ final FieldConstraintDescr fieldConstraintDescr = (FieldConstraintDescr) this.xmlPackageReader.getCurrent();
+
+ final LinkedList parents = this.xmlPackageReader.getParents();
+ final ListIterator it = parents.listIterator( parents.size() );
+ it.previous();
+ final Object parent = it.previous();
+
+ final ColumnDescr columnDescr = ( ColumnDescr ) parent;
+ columnDescr.addDescr( fieldConstraintDescr );
+
+ return null;
+ }
+
+ public Class generateNodeFor() {
+ return FieldConstraintDescr.class;
+ }
+}
\ No newline at end of file
Deleted: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/LiteralHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/LiteralHandler.java 2006-08-02 21:58:31 UTC (rev 5420)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/LiteralHandler.java 2006-08-03 00:14:06 UTC (rev 5421)
@@ -1,110 +0,0 @@
-package org.drools.xml;
-
-/*
- * Copyright 2005 JBoss Inc
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import java.util.HashSet;
-import java.util.LinkedList;
-import java.util.ListIterator;
-
-import org.drools.lang.descr.VariableDescr;
-import org.drools.lang.descr.ColumnDescr;
-import org.drools.lang.descr.FieldBindingDescr;
-import org.drools.lang.descr.LiteralDescr;
-import org.drools.lang.descr.PredicateDescr;
-import org.drools.lang.descr.ReturnValueDescr;
-import org.xml.sax.Attributes;
-import org.xml.sax.SAXException;
-import org.xml.sax.SAXParseException;
-
-/**
- * @author mproctor
- *
- * TODO To change the template for this generated type comment go to Window -
- * Preferences - Java - Code Style - Code Templates
- */
-class LiteralHandler extends BaseAbstractHandler
- implements
- Handler {
- LiteralHandler(final XmlPackageReader xmlPackageReader) {
- this.xmlPackageReader = xmlPackageReader;
-
- if ( (this.validParents == null) && (this.validPeers == null) ) {
- this.validParents = new HashSet();
- this.validParents.add( ColumnDescr.class );
-
- this.validPeers = new HashSet();
- this.validPeers.add( null );
- this.validPeers.add( LiteralDescr.class );
- this.validPeers.add( PredicateDescr.class );
- this.validPeers.add( ReturnValueDescr.class );
- this.validPeers.add( FieldBindingDescr.class );
- this.validPeers.add( VariableDescr.class );
- this.allowNesting = false;
- }
- }
-
- public Object start(final String uri,
- final String localName,
- final Attributes attrs) throws SAXException {
- this.xmlPackageReader.startConfiguration( localName,
- attrs );
-
- final String fieldName = attrs.getValue( "field-name" );
- if ( fieldName == null || fieldName.trim().equals( "" ) ) {
- throw new SAXParseException( "<literal> requires a 'field-name' attribute",
- this.xmlPackageReader.getLocator() );
- }
-
- final String evaluator = attrs.getValue( "evaluator" );
- if ( evaluator == null || evaluator.trim().equals( "" ) ) {
- throw new SAXParseException( "<literal> requires an 'evaluator' attribute",
- this.xmlPackageReader.getLocator() );
- }
-
- final String text = attrs.getValue( "value" );
- if ( text == null || text.trim().equals( "" ) ) {
- throw new SAXParseException( "<literal> requires an 'value' attribute",
- this.xmlPackageReader.getLocator() );
- }
-
- final LiteralDescr literalDescr = new LiteralDescr( fieldName,
- evaluator,
- text );
-
- return literalDescr;
- }
-
- public Object end(final String uri,
- final String localName) throws SAXException {
- final Configuration config = this.xmlPackageReader.endConfiguration();
-
- final LiteralDescr literalDescr = (LiteralDescr) this.xmlPackageReader.getCurrent();
-
- final LinkedList parents = this.xmlPackageReader.getParents();
- final ListIterator it = parents.listIterator( parents.size() );
- it.previous();
- final ColumnDescr columnDescr = (ColumnDescr) it.previous();
-
- columnDescr.addDescr( literalDescr );
-
- return null;
- }
-
- public Class generateNodeFor() {
- return LiteralDescr.class;
- }
-}
\ No newline at end of file
Copied: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/LiteralRestrictionHandler.java (from rev 5380, labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/LiteralHandler.java)
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/LiteralHandler.java 2006-08-01 14:51:08 UTC (rev 5380)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/LiteralRestrictionHandler.java 2006-08-03 00:14:06 UTC (rev 5421)
@@ -0,0 +1,103 @@
+package org.drools.xml;
+
+/*
+ * Copyright 2005 JBoss Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.ListIterator;
+
+import org.drools.lang.descr.FieldConstraintDescr;
+import org.drools.lang.descr.LiteralRestrictionDescr;
+import org.drools.lang.descr.ReturnValueRestrictionDescr;
+import org.drools.lang.descr.ColumnDescr;
+import org.drools.lang.descr.FieldBindingDescr;
+import org.drools.lang.descr.PredicateDescr;
+import org.drools.lang.descr.VariableRestrictionDescr;
+import org.drools.rule.LiteralRestriction;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
+
+/**
+ * @author mproctor
+ *
+ * TODO To change the template for this generated type comment go to Window -
+ * Preferences - Java - Code Style - Code Templates
+ */
+class LiteralRestrictionHandler extends BaseAbstractHandler
+ implements
+ Handler {
+ LiteralRestrictionHandler(final XmlPackageReader xmlPackageReader) {
+ this.xmlPackageReader = xmlPackageReader;
+
+ if ( (this.validParents == null) && (this.validPeers == null) ) {
+ this.validParents = new HashSet();
+ this.validParents.add( FieldConstraintDescr.class );
+
+ this.validPeers = new HashSet();
+ this.validPeers.add( null );
+ this.validPeers.add( LiteralRestrictionDescr.class );
+ this.validPeers.add( ReturnValueRestrictionDescr.class );
+ this.validPeers.add( VariableRestrictionDescr.class );
+ this.allowNesting = false;
+ }
+ }
+
+ public Object start(final String uri,
+ final String localName,
+ final Attributes attrs) throws SAXException {
+ this.xmlPackageReader.startConfiguration( localName,
+ attrs );
+
+ final String evaluator = attrs.getValue( "evaluator" );
+ if ( evaluator == null || evaluator.trim().equals( "" ) ) {
+ throw new SAXParseException( "<literal-restriction> requires an 'evaluator' attribute",
+ this.xmlPackageReader.getLocator() );
+ }
+
+ final String text = attrs.getValue( "value" );
+ if ( text == null || text.trim().equals( "" ) ) {
+ throw new SAXParseException( "<literal-restriction> requires an 'value' attribute",
+ this.xmlPackageReader.getLocator() );
+ }
+
+ final LiteralRestrictionDescr literalDescr = new LiteralRestrictionDescr( evaluator,
+ text );
+
+ return literalDescr;
+ }
+
+ public Object end(final String uri,
+ final String localName) throws SAXException {
+ final Configuration config = this.xmlPackageReader.endConfiguration();
+
+ final LiteralRestrictionDescr literalDescr = (LiteralRestrictionDescr) this.xmlPackageReader.getCurrent();
+
+ final LinkedList parents = this.xmlPackageReader.getParents();
+ final ListIterator it = parents.listIterator( parents.size() );
+ it.previous();
+ final FieldConstraintDescr fieldConstriantDescr = (FieldConstraintDescr) it.previous();
+
+ fieldConstriantDescr.addRestriction( literalDescr );
+
+ return null;
+ }
+
+ public Class generateNodeFor() {
+ return LiteralRestrictionDescr.class;
+ }
+}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/PredicateHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/PredicateHandler.java 2006-08-02 21:58:31 UTC (rev 5420)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/PredicateHandler.java 2006-08-03 00:14:06 UTC (rev 5421)
@@ -20,12 +20,10 @@
import java.util.LinkedList;
import java.util.ListIterator;
-import org.drools.lang.descr.VariableDescr;
import org.drools.lang.descr.ColumnDescr;
import org.drools.lang.descr.FieldBindingDescr;
-import org.drools.lang.descr.LiteralDescr;
+import org.drools.lang.descr.FieldConstraintDescr;
import org.drools.lang.descr.PredicateDescr;
-import org.drools.lang.descr.ReturnValueDescr;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
@@ -48,11 +46,9 @@
this.validPeers = new HashSet();
this.validPeers.add( null );
- this.validPeers.add( LiteralDescr.class );
+ this.validPeers.add( FieldConstraintDescr.class );
this.validPeers.add( PredicateDescr.class );
- this.validPeers.add( ReturnValueDescr.class );
this.validPeers.add( FieldBindingDescr.class );
- this.validPeers.add( VariableDescr.class );
this.allowNesting = false;
}
}
Deleted: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/ReturnValueHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/ReturnValueHandler.java 2006-08-02 21:58:31 UTC (rev 5420)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/ReturnValueHandler.java 2006-08-03 00:14:06 UTC (rev 5421)
@@ -1,112 +0,0 @@
-package org.drools.xml;
-
-/*
- * Copyright 2005 JBoss Inc
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import java.util.HashSet;
-import java.util.LinkedList;
-import java.util.ListIterator;
-
-import org.drools.lang.descr.VariableDescr;
-import org.drools.lang.descr.ColumnDescr;
-import org.drools.lang.descr.FieldBindingDescr;
-import org.drools.lang.descr.LiteralDescr;
-import org.drools.lang.descr.PredicateDescr;
-import org.drools.lang.descr.ReturnValueDescr;
-import org.xml.sax.Attributes;
-import org.xml.sax.SAXException;
-import org.xml.sax.SAXParseException;
-
-/**
- * @author mproctor
- *
- * TODO To change the template for this generated type comment go to Window -
- * Preferences - Java - Code Style - Code Templates
- */
-class ReturnValueHandler extends BaseAbstractHandler
- implements
- Handler {
- ReturnValueHandler(final XmlPackageReader xmlPackageReader) {
- this.xmlPackageReader = xmlPackageReader;
-
- if ( (this.validParents == null) && (this.validPeers == null) ) {
- this.validParents = new HashSet();
- this.validParents.add( ColumnDescr.class );
-
- this.validPeers = new HashSet();
- this.validPeers.add( null );
- this.validPeers.add( LiteralDescr.class );
- this.validPeers.add( PredicateDescr.class );
- this.validPeers.add( ReturnValueDescr.class );
- this.validPeers.add( FieldBindingDescr.class );
- this.validPeers.add( VariableDescr.class );
- this.allowNesting = false;
- }
- }
-
- public Object start(final String uri,
- final String localName,
- final Attributes attrs) throws SAXException {
- this.xmlPackageReader.startConfiguration( localName,
- attrs );
-
- final String fieldName = attrs.getValue( "field-name" );
- if ( fieldName == null || fieldName.trim().equals( "" ) ) {
- throw new SAXParseException( "<return-value> requires a 'field-name' attribute",
- this.xmlPackageReader.getLocator() );
- }
-
- final String evaluator = attrs.getValue( "evaluator" );
- if ( evaluator == null || evaluator.trim().equals( "" ) ) {
- throw new SAXParseException( "<return-value> requires an 'evaluator' attribute",
- this.xmlPackageReader.getLocator() );
- }
-
- final ReturnValueDescr returnValueDescr = new ReturnValueDescr( fieldName,
- evaluator );
-
- return returnValueDescr;
- }
-
- public Object end(final String uri,
- final String localName) throws SAXException {
- final Configuration config = this.xmlPackageReader.endConfiguration();
-
- final ReturnValueDescr returnValueDescr = (ReturnValueDescr) this.xmlPackageReader.getCurrent();
-
- final String expression = config.getText();
-
- if ( expression == null || expression.trim().equals( "" ) ) {
- throw new SAXParseException( "<return-value> must have some content",
- this.xmlPackageReader.getLocator() );
- }
-
- returnValueDescr.setText( expression );
-
- final LinkedList parents = this.xmlPackageReader.getParents();
- final ListIterator it = parents.listIterator( parents.size() );
- it.previous();
- final ColumnDescr columnDescr = (ColumnDescr) it.previous();
-
- columnDescr.addDescr( returnValueDescr );
-
- return null;
- }
-
- public Class generateNodeFor() {
- return ReturnValueDescr.class;
- }
-}
\ No newline at end of file
Copied: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/ReturnValueRestrictionHandler.java (from rev 5380, labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/ReturnValueHandler.java)
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/ReturnValueHandler.java 2006-08-01 14:51:08 UTC (rev 5380)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/ReturnValueRestrictionHandler.java 2006-08-03 00:14:06 UTC (rev 5421)
@@ -0,0 +1,100 @@
+package org.drools.xml;
+
+/*
+ * Copyright 2005 JBoss Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.ListIterator;
+
+import org.drools.lang.descr.FieldConstraintDescr;
+import org.drools.lang.descr.LiteralRestrictionDescr;
+import org.drools.lang.descr.ReturnValueRestrictionDescr;
+import org.drools.lang.descr.VariableRestrictionDescr;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
+
+/**
+ * @author mproctor
+ *
+ * TODO To change the template for this generated type comment go to Window -
+ * Preferences - Java - Code Style - Code Templates
+ */
+class ReturnValueRestrictionHandler extends BaseAbstractHandler
+ implements
+ Handler {
+ ReturnValueRestrictionHandler(final XmlPackageReader xmlPackageReader) {
+ this.xmlPackageReader = xmlPackageReader;
+
+ if ( (this.validParents == null) && (this.validPeers == null) ) {
+ this.validParents = new HashSet();
+ this.validParents.add( FieldConstraintDescr.class );
+
+ this.validPeers = new HashSet();
+ this.validPeers.add( null );
+ this.validPeers.add( LiteralRestrictionDescr.class );
+ this.validPeers.add( ReturnValueRestrictionDescr.class );
+ this.validPeers.add( VariableRestrictionDescr.class );
+ this.allowNesting = false;
+ }
+ }
+
+ public Object start(final String uri,
+ final String localName,
+ final Attributes attrs) throws SAXException {
+ this.xmlPackageReader.startConfiguration( localName,
+ attrs );
+ final String evaluator = attrs.getValue( "evaluator" );
+ if ( evaluator == null || evaluator.trim().equals( "" ) ) {
+ throw new SAXParseException( "<return-value-restriction> requires an 'evaluator' attribute",
+ this.xmlPackageReader.getLocator() );
+ }
+
+ final ReturnValueRestrictionDescr returnValueDescr = new ReturnValueRestrictionDescr( evaluator );
+
+ return returnValueDescr;
+ }
+
+ public Object end(final String uri,
+ final String localName) throws SAXException {
+ final Configuration config = this.xmlPackageReader.endConfiguration();
+
+ final ReturnValueRestrictionDescr returnValueDescr = (ReturnValueRestrictionDescr) this.xmlPackageReader.getCurrent();
+
+ final String expression = config.getText();
+
+ if ( expression == null || expression.trim().equals( "" ) ) {
+ throw new SAXParseException( "<return-value-restriction> must have some content",
+ this.xmlPackageReader.getLocator() );
+ }
+
+ returnValueDescr.setText( expression );
+
+ final LinkedList parents = this.xmlPackageReader.getParents();
+ final ListIterator it = parents.listIterator( parents.size() );
+ it.previous();
+ final FieldConstraintDescr fieldConstraintDescr = (FieldConstraintDescr) it.previous();
+
+ fieldConstraintDescr.addRestriction( returnValueDescr );
+
+ return null;
+ }
+
+ public Class generateNodeFor() {
+ return ReturnValueRestrictionDescr.class;
+ }
+}
\ No newline at end of file
Copied: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/VariableRestrictionsHandler.java (from rev 5380, labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/BoundVariableHandler.java)
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/BoundVariableHandler.java 2006-08-01 14:51:08 UTC (rev 5380)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/VariableRestrictionsHandler.java 2006-08-03 00:14:06 UTC (rev 5421)
@@ -0,0 +1,102 @@
+package org.drools.xml;
+
+/*
+ * Copyright 2005 JBoss Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.ListIterator;
+
+import org.drools.lang.descr.FieldConstraintDescr;
+import org.drools.lang.descr.LiteralRestrictionDescr;
+import org.drools.lang.descr.ReturnValueRestrictionDescr;
+import org.drools.lang.descr.ColumnDescr;
+import org.drools.lang.descr.FieldBindingDescr;
+import org.drools.lang.descr.PredicateDescr;
+import org.drools.lang.descr.VariableRestrictionDescr;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
+
+/**
+ * @author mproctor
+ *
+ * TODO To change the template for this generated type comment go to Window -
+ * Preferences - Java - Code Style - Code Templates
+ */
+class VariableRestrictionsHandler extends BaseAbstractHandler
+ implements
+ Handler {
+ VariableRestrictionsHandler(final XmlPackageReader xmlPackageReader) {
+ this.xmlPackageReader = xmlPackageReader;
+
+ if ( (this.validParents == null) && (this.validPeers == null) ) {
+ this.validParents = new HashSet();
+ this.validParents.add( FieldConstraintDescr.class );
+
+ this.validPeers = new HashSet();
+ this.validPeers.add( null );
+ this.validPeers.add( LiteralRestrictionDescr.class );
+ this.validPeers.add( ReturnValueRestrictionDescr.class );
+ this.validPeers.add( VariableRestrictionDescr.class );
+ this.allowNesting = false;
+ }
+ }
+
+ public Object start(final String uri,
+ final String localName,
+ final Attributes attrs) throws SAXException {
+ this.xmlPackageReader.startConfiguration( localName,
+ attrs );
+
+ final String evaluator = attrs.getValue( "evaluator" );
+ if ( evaluator == null || evaluator.trim().equals( "" ) ) {
+ throw new SAXParseException( "<bound-variable> requires an 'evaluator' attribute",
+ this.xmlPackageReader.getLocator() );
+ }
+
+ final String identifier = attrs.getValue( "identifier" );
+ if ( identifier == null || identifier.trim().equals( "" ) ) {
+ throw new SAXParseException( "<bound-variable> requires an 'identifier' attribute",
+ this.xmlPackageReader.getLocator() );
+ }
+
+ final VariableRestrictionDescr variableDescr = new VariableRestrictionDescr( evaluator,
+ identifier );
+
+ return variableDescr;
+ }
+
+ public Object end(final String uri,
+ final String localName) throws SAXException {
+ final Configuration config = this.xmlPackageReader.endConfiguration();
+
+ final VariableRestrictionDescr variableDescr = (VariableRestrictionDescr) this.xmlPackageReader.getCurrent();
+
+ final LinkedList parents = this.xmlPackageReader.getParents();
+ final ListIterator it = parents.listIterator( parents.size() );
+ it.previous();
+ final FieldConstraintDescr fieldConstraintDescr = (FieldConstraintDescr) it.previous();
+
+ fieldConstraintDescr.addRestriction( variableDescr );
+
+ return null;
+ }
+
+ public Class generateNodeFor() {
+ return VariableRestrictionDescr.class;
+ }
+}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlDumper.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlDumper.java 2006-08-02 21:58:31 UTC (rev 5420)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlDumper.java 2006-08-03 00:14:06 UTC (rev 5421)
@@ -23,21 +23,22 @@
import org.drools.lang.descr.AndDescr;
import org.drools.lang.descr.AttributeDescr;
-import org.drools.lang.descr.VariableDescr;
import org.drools.lang.descr.ColumnDescr;
import org.drools.lang.descr.EvalDescr;
import org.drools.lang.descr.ExistsDescr;
import org.drools.lang.descr.FieldBindingDescr;
+import org.drools.lang.descr.FieldConstraintDescr;
import org.drools.lang.descr.FunctionDescr;
-import org.drools.lang.descr.LiteralDescr;
+import org.drools.lang.descr.LiteralRestrictionDescr;
import org.drools.lang.descr.NotDescr;
import org.drools.lang.descr.OrDescr;
import org.drools.lang.descr.PackageDescr;
import org.drools.lang.descr.PackageDescrDumper;
import org.drools.lang.descr.PredicateDescr;
import org.drools.lang.descr.QueryDescr;
-import org.drools.lang.descr.ReturnValueDescr;
+import org.drools.lang.descr.ReturnValueRestrictionDescr;
import org.drools.lang.descr.RuleDescr;
+import org.drools.lang.descr.VariableRestrictionDescr;
import org.drools.util.ReflectiveVisitor;
/**
@@ -72,9 +73,9 @@
this.template = "<rule-attribute name=\"" + attributeDescr.getName() + "\" value=\"" + attributeDescr.getValue() + "\" />" + XmlDumper.eol;
}
- public void visitBoundVariableDescr(final VariableDescr descr) {
+ public void visitVariableRestrictionDescr(final VariableRestrictionDescr descr) {
this.template = new String();
- this.template = "<bound-variable field-name=\"" + descr.getFieldName() + "\" evaluator=\"" + getEvaluator( descr.getEvaluator() ) + "\" identifier=\"" + descr.getIdentifier() + "\" />" + XmlDumper.eol;
+ this.template = "<variable-restriction evaluator=\"" + getEvaluator( descr.getEvaluator() ) + "\" identifier=\"" + descr.getIdentifier() + "\" />" + XmlDumper.eol;
}
public void visitColumnDescr(final ColumnDescr descr) {
@@ -95,6 +96,12 @@
}
+ public void visitFieldConstraintDescr(final FieldConstraintDescr descr) {
+ if ( !descr.getRestrictions().isEmpty() ) {
+ processFieldConstraint( descr.getRestrictions() );
+ }
+ }
+
public void visitEvalDescr(final EvalDescr descr) {
this.template = new String();
this.template = "<eval>" + descr.getText() + "</eval>" + XmlDumper.eol;
@@ -122,9 +129,9 @@
this.template = "<function return-type=\"" + functionDescr.getReturnType() + "\" name=\"" + functionDescr.getName() + "\">" + XmlDumper.eol + parameterTemplate + "<body>" + XmlDumper.eol + functionDescr.getText() + XmlDumper.eol + "</body>" + XmlDumper.eol + "</function>" + XmlDumper.eol;
}
- public void visitLiteralDescr(final LiteralDescr descr) {
+ public void visitLiteralRestrictionDescr(final LiteralRestrictionDescr descr) {
this.template = new String();
- this.template = "<literal field-name=\"" + descr.getFieldName() + "\" evaluator=\"" + getEvaluator( descr.getEvaluator() ) + "\" value=\"" + descr.getText() + "\" />" + XmlDumper.eol;
+ this.template = "<literal-restriction evaluator=\"" + getEvaluator( descr.getEvaluator() ) + "\" value=\"" + descr.getText() + "\" />" + XmlDumper.eol;
}
public void visitNotDescr(final NotDescr descr) {
@@ -161,12 +168,11 @@
public void visitPredicateDescr(final PredicateDescr descr) {
this.template = new String();
this.template = "<predicate field-name=\"" + descr.getFieldName() + "\" identifier=\"" + descr.getDeclaration() + "\" >" + descr.getText() + "</predicate>" + XmlDumper.eol;
-
}
- public void visitReturnValueDescr(final ReturnValueDescr descr) {
+ public void visitReturnValueRestrictionDescr(final ReturnValueRestrictionDescr descr) {
this.template = new String();
- this.template = "<return-value field-name=\"" + descr.getFieldName() + "\" evaluator=\"" + getEvaluator( descr.getEvaluator() ) + "\" >" + descr.getText() + "</return-value>" + XmlDumper.eol;
+ this.template = "<return-value-restriction evaluator=\"" + getEvaluator( descr.getEvaluator() ) + "\" >" + descr.getText() + "</return-value>" + XmlDumper.eol;
}
public void visitQueryDescr(final QueryDescr descr) {
@@ -200,6 +206,19 @@
return ruleList + XmlDumper.eol;
}
+
+ private String processFieldConstraint(List list) {
+ String descrString = "";
+ for ( final Iterator it = list.iterator(); it.hasNext(); ) {
+ final Object temp = it.next();
+ descrString += "<field-restrictions name=\"" +((FieldConstraintDescr) temp).getFieldName() + "\"> ";
+ visit( temp );
+ descrString += "</field-restrictions>";
+ descrString += this.template;
+ }
+ return descrString.substring( 0,
+ descrString.length() - 2 );
+ }
private String processDescrList(final List descr) {
String descrString = "";
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlPackageReader.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlPackageReader.java 2006-08-02 21:58:31 UTC (rev 5420)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlPackageReader.java 2006-08-03 00:14:06 UTC (rev 5421)
@@ -102,9 +102,9 @@
private boolean inHandledRuleSubElement;
- private final MessageFormat message = new MessageFormat( "({0}: {1}, {2}): {3}" );
+ private final MessageFormat message = new MessageFormat( "({0}: {1}, {2}): {3}" );
- private final Map namespaces = new HashMap();
+ private final Map namespaces = new HashMap();
EntityResolver entityResolver;
@@ -155,16 +155,18 @@
new ColumnHandler( this ) );
// Field Constraints
- this.handlers.put( "literal",
- new LiteralHandler( this ) );
+ this.handlers.put( "field-constraint",
+ new FieldConstraintHandler( this ) );
+ this.handlers.put( "literal-restriction",
+ new LiteralRestrictionHandler( this ) );
+ this.handlers.put( "variable-restriction",
+ new VariableRestrictionsHandler( this ) );
this.handlers.put( "predicate",
new PredicateHandler( this ) );
- this.handlers.put( "return-value",
- new ReturnValueHandler( this ) );
+ this.handlers.put( "return-value-restriction",
+ new ReturnValueRestrictionHandler( this ) );
this.handlers.put( "field-binding",
new FieldBindingHandler( this ) );
- this.handlers.put( "bound-variable",
- new BoundVariableHandler( this ) );
initEntityResolver();
@@ -197,7 +199,7 @@
* @return The rule-set.
*/
public PackageDescr read(final Reader reader) throws SAXException,
- IOException {
+ IOException {
return read( new InputSource( reader ) );
}
@@ -210,7 +212,7 @@
* @return The rule-set.
*/
public PackageDescr read(final InputStream inputStream) throws SAXException,
- IOException {
+ IOException {
return read( new InputSource( inputStream ) );
}
@@ -223,7 +225,7 @@
* @return The rule-set.
*/
public PackageDescr read(final InputSource in) throws SAXException,
- IOException {
+ IOException {
SAXParser localParser = null;
if ( this.parser == null ) {
final SAXParserFactory factory = SAXParserFactory.newInstance();
@@ -355,8 +357,8 @@
handler );
final Object node = handler.start( uri,
- localName,
- attrs );
+ localName,
+ attrs );
if ( node != null ) {
this.parents.add( node );
@@ -391,7 +393,7 @@
this.current = getParent( handler.generateNodeFor() );
final Object node = handler.end( uri,
- localName );
+ localName );
// next
if ( node != null && !this.lastWasEndElement ) {
@@ -587,13 +589,13 @@
final String systemId) throws SAXException {
try {
final InputSource inputSource = resolveSchema( publicId,
- systemId );
+ systemId );
if ( inputSource != null ) {
return inputSource;
}
if ( this.entityResolver != null ) {
return this.entityResolver.resolveEntity( publicId,
- systemId );
+ systemId );
}
} catch ( final IOException ioe ) {
}
@@ -605,7 +607,7 @@
super.startPrefixMapping( prefix,
uri );
this.namespaces.put( prefix,
- uri );
+ uri );
}
public void endPrefixMapping(final String prefix) throws SAXException {
@@ -633,7 +635,7 @@
private InputSource resolveSchema(final String publicId,
final String systemId) throws SAXException,
- IOException {
+ IOException {
// Schema files must end with xsd
if ( !systemId.toLowerCase().endsWith( "xsd" ) ) {
return null;
Modified: labs/jbossrules/trunk/drools-compiler/src/main/resources/META-INF/drools-3.0.xsd
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/resources/META-INF/drools-3.0.xsd 2006-08-02 21:58:31 UTC (rev 5420)
+++ labs/jbossrules/trunk/drools-compiler/src/main/resources/META-INF/drools-3.0.xsd 2006-08-03 00:14:06 UTC (rev 5421)
@@ -169,15 +169,24 @@
<xs:complexType>
<xs:choice maxOccurs="unbounded" minOccurs="0">
<xs:element ref="drools:field-binding"/>
- <xs:element ref="drools:literal"/>
+ <xs:element ref="drools:field-constraint"/>
<xs:element ref="drools:predicate"/>
- <xs:element ref="drools:return-value"/>
- <xs:element ref="drools:bound-variable"/>
</xs:choice>
<xs:attribute name="identifier" type="xs:string" use="optional"/>
<xs:attribute name="object-type" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
+
+ <xs:element name="field-constraint">
+ <xs:complexType>
+ <xs:choice maxOccurs="unbounded" minOccurs="0">
+ <xs:element ref="drools:literal-restriction"/>
+ <xs:element ref="drools:variable-restriction"/>
+ <xs:element ref="drools:return-value-restriction"/>
+ </xs:choice>
+ <xs:attribute name="field-name" type="xs:string" use="required"/>
+ </xs:complexType>
+ </xs:element>
<xs:element name="field-binding">
<xs:complexType>
@@ -186,41 +195,39 @@
</xs:complexType>
</xs:element>
- <xs:element name="literal">
+ <xs:element name="literal-restriction">
<xs:complexType>
- <xs:attribute name="field-name" type="xs:string" use="required"/>
<xs:attribute name="evaluator" type="xs:string" use="required"/>
<xs:attribute name="value" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
-
- <xs:element name="predicate">
+
+ <xs:element name="variable-restriction">
<xs:complexType>
+ <xs:attribute name="evaluator" type="xs:string" use="required"/>
+ <xs:attribute name="identifier" type="xs:string" use="required"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="return-value-restriction">
+ <xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
- <xs:attribute name="field-name" type="xs:string" use="required"/>
- <xs:attribute name="identifier" type="xs:string" use="required"/>
+ <xs:attribute name="evaluator" type="xs:string" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
- </xs:element>
+ </xs:element>
- <xs:element name="return-value">
+ <xs:element name="predicate">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="field-name" type="xs:string" use="required"/>
- <xs:attribute name="evaluator" type="xs:string" use="required"/>
+ <xs:attribute name="identifier" type="xs:string" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
- </xs:element>
-
- <xs:element name="bound-variable">
- <xs:complexType>
- <xs:attribute name="field-name" type="xs:string" use="required"/>
- <xs:attribute name="evaluator" type="xs:string" use="required"/>
- <xs:attribute name="identifier" type="xs:string" use="required"/>
- </xs:complexType>
</xs:element>
+
</xs:schema>
Copied: labs/jbossrules/trunk/drools-compiler/src/main/resources/drl.g (from rev 5295, labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/lang/drl.g)
Deleted: labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/lang/drl.g
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/lang/drl.g 2006-08-02 21:58:31 UTC (rev 5420)
+++ labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/lang/drl.g 2006-08-03 00:14:06 UTC (rev 5421)
@@ -1,1136 +0,0 @@
-grammar RuleParser;
-
- at parser::header {
- package org.drools.lang;
- import java.util.List;
- import java.util.ArrayList;
- import java.util.Iterator;
- import java.util.StringTokenizer;
- import org.drools.lang.descr.*;
-}
-
- at parser::members {
- private ExpanderResolver expanderResolver;
- private Expander expander;
- private boolean expanderDebug = false;
- private PackageDescr packageDescr;
- private List errors = new ArrayList();
- private String source = "unknown";
- private int lineOffset = 0;
-
- private boolean parserDebug = false;
-
- public void setParserDebug(boolean parserDebug) {
- this.parserDebug = parserDebug;
- }
-
- public void debug(String message) {
- if ( parserDebug )
- System.err.println( "drl parser: " + message );
- }
-
- public void setSource(String source) {
- this.source = source;
- }
-
- /**
- * This may be set to enable debuggin of DSLs/expanders.
- * If set to true, expander stuff will be sent to the Std out.
- */
- public void setExpanderDebug(boolean status) {
- expanderDebug = status;
- }
- public String getSource() {
- return this.source;
- }
-
- public PackageDescr getPackageDescr() {
- return packageDescr;
- }
-
- private int offset(int line) {
- return line + lineOffset;
- }
-
- /**
- * This will set the offset to record when reparsing. Normally is zero of course
- */
- public void setLineOffset(int i) {
- this.lineOffset = i;
- }
-
- public void setExpanderResolver(ExpanderResolver expanderResolver) {
- this.expanderResolver = expanderResolver;
- }
-
- public ExpanderResolver getExpanderResolver() {
- return expanderResolver;
- }
-
- /** Expand the LHS */
- private String runWhenExpander(String text, int line) throws RecognitionException {
- String expanded = text.trim();
- if (expanded.startsWith(">")) {
- expanded = expanded.substring(1); //escape !!
- } else {
- try {
- expanded = expander.expand( "when", text );
- } catch (Exception e) {
- this.errors.add(new ExpanderException("Unable to expand: " + text + ". Due to " + e.getMessage(), line));
- return "";
- }
- }
- if (expanderDebug) {
- System.out.println("Expanding LHS: " + text + " ----> " + expanded + " --> from line: " + line);
- }
- return expanded;
-
- }
-
- /** Reparse the results of the expansion */
- private void reparseLhs(String text, AndDescr descrs) throws RecognitionException {
- CharStream charStream = new ANTLRStringStream( text );
- RuleParserLexer lexer = new RuleParserLexer( charStream );
- TokenStream tokenStream = new CommonTokenStream( lexer );
- RuleParser parser = new RuleParser( tokenStream );
- parser.setLineOffset( descrs.getLine() );
- parser.normal_lhs_block(descrs);
-
- if (parser.hasErrors()) {
- this.errors.addAll(parser.getErrors());
- }
- if (expanderDebug) {
- System.out.println("Reparsing LHS: " + text + " --> successful:" + !parser.hasErrors());
- }
-
- }
-
- /** Expand a line on the RHS */
- private String runThenExpander(String text, int startLine) {
- //System.err.println( "expand THEN [" + text + "]" );
- StringTokenizer lines = new StringTokenizer( text, "\n\r" );
-
- StringBuffer expanded = new StringBuffer();
-
- String eol = System.getProperty( "line.separator" );
-
- while ( lines.hasMoreTokens() ) {
- startLine++;
- String line = lines.nextToken();
- line = line.trim();
- if ( line.length() > 0 ) {
- if ( line.startsWith( ">" ) ) {
- expanded.append( line.substring( 1 ) );
- expanded.append( eol );
- } else {
- try {
- expanded.append( expander.expand( "then", line ) );
- expanded.append( eol );
- } catch (Exception e) {
- this.errors.add(new ExpanderException("Unable to expand: " + line + ". Due to " + e.getMessage(), startLine));
- }
- }
- }
- }
-
- if (expanderDebug) {
- System.out.println("Expanding RHS: " + text + " ----> " + expanded.toString() + " --> from line starting: " + startLine);
- }
-
- return expanded.toString();
- }
-
-
-
- private String getString(Token token) {
- String orig = token.getText();
- return orig.substring( 1, orig.length() -1 );
- }
-
- public void reportError(RecognitionException ex) {
- // if we've already reported an error and have not matched a token
- // yet successfully, don't report any errors.
- if ( errorRecovery ) {
- return;
- }
- errorRecovery = true;
-
- ex.line = offset(ex.line); //add the offset if there is one
- errors.add( ex );
- }
-
- /** return the raw RecognitionException errors */
- public List getErrors() {
- return errors;
- }
-
- /** Return a list of pretty strings summarising the errors */
- public List getErrorMessages() {
- List messages = new ArrayList();
- for ( Iterator errorIter = errors.iterator() ; errorIter.hasNext() ; ) {
- messages.add( createErrorMessage( (RecognitionException) errorIter.next() ) );
- }
- return messages;
- }
-
- /** return true if any parser errors were accumulated */
- public boolean hasErrors() {
- return ! errors.isEmpty();
- }
-
- /** This will take a RecognitionException, and create a sensible error message out of it */
- public String createErrorMessage(RecognitionException e)
- {
- StringBuffer message = new StringBuffer();
- message.append( source + ":"+e.line+":"+e.charPositionInLine+" ");
- if ( e instanceof MismatchedTokenException ) {
- MismatchedTokenException mte = (MismatchedTokenException)e;
- message.append("mismatched token: "+
- e.token+
- "; expecting type "+
- tokenNames[mte.expecting]);
- }
- else if ( e instanceof MismatchedTreeNodeException ) {
- MismatchedTreeNodeException mtne = (MismatchedTreeNodeException)e;
- message.append("mismatched tree node: "+
- mtne.foundNode+
- "; expecting type "+
- tokenNames[mtne.expecting]);
- }
- else if ( e instanceof NoViableAltException ) {
- NoViableAltException nvae = (NoViableAltException)e;
- message.append( "Unexpected token '" + e.token.getText() + "'" );
- /*
- message.append("decision=<<"+nvae.grammarDecisionDescription+">>"+
- " state "+nvae.stateNumber+
- " (decision="+nvae.decisionNumber+
- ") no viable alt; token="+
- e.token);
- */
- }
- else if ( e instanceof EarlyExitException ) {
- EarlyExitException eee = (EarlyExitException)e;
- message.append("required (...)+ loop (decision="+
- eee.decisionNumber+
- ") did not match anything; token="+
- e.token);
- }
- else if ( e instanceof MismatchedSetException ) {
- MismatchedSetException mse = (MismatchedSetException)e;
- message.append("mismatched token '"+
- e.token+
- "' expecting set "+mse.expecting);
- }
- else if ( e instanceof MismatchedNotSetException ) {
- MismatchedNotSetException mse = (MismatchedNotSetException)e;
- message.append("mismatched token '"+
- e.token+
- "' expecting set "+mse.expecting);
- }
- else if ( e instanceof FailedPredicateException ) {
- FailedPredicateException fpe = (FailedPredicateException)e;
- message.append("rule "+fpe.ruleName+" failed predicate: {"+
- fpe.predicateText+"}?");
- } else if (e instanceof GeneralParseException) {
- message.append(" " + e.getMessage());
- }
- return message.toString();
- }
-
- void checkTrailingSemicolon(String text, int line) {
- if (text.trim().endsWith( ";" ) ) {
- this.errors.add( new GeneralParseException( "Trailing semi-colon not allowed", offset(line) ) );
- }
- }
-
-}
-
- at lexer::header {
- package org.drools.lang;
-}
-
-opt_eol :
- (';'|EOL)*
- ;
-
-compilation_unit
- : opt_eol
- prolog
- ( r=rule {this.packageDescr.addRule( r ); }
- | q=query {this.packageDescr.addRule( q ); }
- | extra_statement
- )*
- ;
-
-prolog
- @init {
- String packageName = "";
- }
- : opt_eol
- ( name=package_statement { packageName = name; } )?
- {
- this.packageDescr = new PackageDescr( name );
- }
- ( extra_statement
- | expander
- )*
-
- opt_eol
- ;
-
-package_statement returns [String packageName]
- @init{
- packageName = null;
- }
- :
- 'package' opt_eol name=dotted_name ';'? opt_eol
- {
- packageName = name;
- }
- ;
-
-import_statement
- : 'import' opt_eol name=import_name ';'? opt_eol
- {
- if (packageDescr != null)
- packageDescr.addImport( name );
- }
- ;
-
-import_name returns [String name]
- @init {
- name = null;
- }
- :
- id=ID { name=id.getText(); } ( '.' id=ID { name = name + "." + id.getText(); } )* (star='.*' { name = name + star.getText(); })?
- ;
-expander
- @init {
- String config=null;
- }
- : 'expander' (name=dotted_name)? ';'? opt_eol
- {
- if (expanderResolver == null)
- throw new IllegalArgumentException("Unable to use expander. Make sure a expander or dsl config is being passed to the parser. [ExpanderResolver was not set].");
- if ( expander != null )
- throw new IllegalArgumentException( "Only one 'expander' statement per file is allowed" );
- expander = expanderResolver.get( name, config );
- }
- ;
-
-global
- @init {
- }
- :
- 'global' type=dotted_name id=ID ';'? opt_eol
- {
- packageDescr.addGlobal( id.getText(), type );
- }
- ;
-
-function
- @init {
- FunctionDescr f = null;
- }
- :
- 'function' opt_eol (retType=dotted_name)? opt_eol name=ID opt_eol
- {
- //System.err.println( "function :: " + name.getText() );
- f = new FunctionDescr( name.getText(), retType );
- }
- '(' opt_eol
- ( (paramType=dotted_name)? opt_eol paramName=argument opt_eol
- {
- f.addParameter( paramType, paramName );
- }
- ( ',' opt_eol (paramType=dotted_name)? opt_eol paramName=argument opt_eol
- {
- f.addParameter( paramType, paramName );
- }
- )*
- )?
- ')'
- opt_eol
- '{'
- body=curly_chunk
- {
- f.setText( body );
- }
- '}'
- {
- packageDescr.addFunction( f );
- }
- opt_eol
- ;
-
-
-query returns [QueryDescr query]
- @init {
- query = null;
- }
- :
- opt_eol
- loc='query' queryName=word opt_eol
- {
- query = new QueryDescr( queryName, null );
- query.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
- AndDescr lhs = new AndDescr(); query.setLhs( lhs );
- lhs.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
- }
- (
- { expander != null }? expander_lhs_block[lhs]
- | normal_lhs_block[lhs]
- )
-
- 'end' opt_eol
- ;
-
-rule returns [RuleDescr rule]
- @init {
- rule = null;
- String consequence = "";
- }
- :
- opt_eol
- loc='rule' ruleName=word opt_eol
- {
- debug( "start rule: " + ruleName );
- rule = new RuleDescr( ruleName, null );
- rule.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
- }
- ( rule_attributes[rule]
- )?
- opt_eol
- (( loc='when' ':'? opt_eol
- {
- AndDescr lhs = new AndDescr(); rule.setLhs( lhs );
- lhs.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
- }
- (
- { expander != null }? expander_lhs_block[lhs]
- | normal_lhs_block[lhs]
- )
-
- )?
- ( opt_eol loc='then' ':'? opt_eol
- ( options{greedy=false;} : any=.
- {
- consequence = consequence + " " + any.getText();
- }
- )*
- {
- if ( expander != null ) {
- String expanded = runThenExpander( consequence, offset(loc.getLine()) );
- rule.setConsequence( expanded );
- } else {
- rule.setConsequence( consequence );
- }
- rule.setConsequenceLocation(offset(loc.getLine()), loc.getCharPositionInLine());
- })?
- )?
- 'end' opt_eol
- {
- debug( "end rule: " + ruleName );
- }
- ;
-
-extra_statement
- :
- ( import_statement
- | global
- | function
- )
- ;
-
-rule_attributes[RuleDescr rule]
- :
- 'attributes'? ':'? opt_eol
- ( ','? a=rule_attribute opt_eol
- {
- rule.addAttribute( a );
- }
- )*
- ;
-
-rule_attribute returns [AttributeDescr d]
- @init {
- d = null;
- }
- :
- a=salience { d = a; }
- | a=no_loop { d = a; }
- | a=agenda_group { d = a; }
- | a=duration { d = a; }
- | a=activation_group { d = a; }
- | a=auto_focus { d = a; }
-
- ;
-
-salience returns [AttributeDescr d ]
- @init {
- d = null;
- }
- :
- loc='salience' opt_eol i=INT ';'? opt_eol
- {
- d = new AttributeDescr( "salience", i.getText() );
- d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
- }
- ;
-
-no_loop returns [AttributeDescr d]
- @init {
- d = null;
- }
- :
- (
- loc='no-loop' opt_eol ';'? opt_eol
- {
- d = new AttributeDescr( "no-loop", "true" );
- d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
- }
- )
- |
- (
- loc='no-loop' t=BOOL opt_eol ';'? opt_eol
- {
- d = new AttributeDescr( "no-loop", t.getText() );
- d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
- }
-
- )
-
- ;
-
-auto_focus returns [AttributeDescr d]
- @init {
- d = null;
- }
- :
- (
- loc='auto-focus' opt_eol ';'? opt_eol
- {
- d = new AttributeDescr( "auto-focus", "true" );
- d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
- }
- )
- |
- (
- loc='auto-focus' t=BOOL opt_eol ';'? opt_eol
- {
- d = new AttributeDescr( "auto-focus", t.getText() );
- d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
- }
-
- )
-
- ;
-
-activation_group returns [AttributeDescr d]
- @init {
- d = null;
- }
- :
- loc='activation-group' opt_eol name=STRING ';'? opt_eol
- {
- d = new AttributeDescr( "activation-group", getString( name ) );
- d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
- }
- ;
-
-agenda_group returns [AttributeDescr d]
- @init {
- d = null;
- }
- :
- loc='agenda-group' opt_eol name=STRING ';'? opt_eol
- {
- d = new AttributeDescr( "agenda-group", getString( name ) );
- d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
- }
- ;
-
-
-duration returns [AttributeDescr d]
- @init {
- d = null;
- }
- :
- loc='duration' opt_eol i=INT ';'? opt_eol
- {
- d = new AttributeDescr( "duration", i.getText() );
- d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
- }
- ;
-
-
-normal_lhs_block[AndDescr descrs]
- :
- ( d=lhs opt_eol
- { descrs.addDescr( d ); }
- )* opt_eol
- ;
-
-
-
-
-expander_lhs_block[AndDescr descrs]
- @init {
- String lhsBlock = null;
- String eol = System.getProperty( "line.separator" );
- }
- :
- (options{greedy=false;} :
- text=paren_chunk loc=EOL
- {
- //only expand non null
- if (text != null) {
- if (lhsBlock == null) {
- lhsBlock = runWhenExpander( text, offset(loc.getLine()));
- } else {
- lhsBlock = lhsBlock + eol + runWhenExpander( text, offset(loc.getLine()));
- }
- text = null;
- }
- }
-
- )*
-
- {
- if (lhsBlock != null) {
- reparseLhs(lhsBlock, descrs);
- }
- }
-
- ;
-
-
-
-lhs returns [PatternDescr d]
- @init {
- d=null;
- }
- : l=lhs_or { d = l; }
- ;
-
-
-lhs_column returns [PatternDescr d]
- @init {
- d=null;
- }
- : f=fact_binding { d = f; }
- | f=fact { d = f; }
- ;
-
-fact_binding returns [PatternDescr d]
- @init {
- d=null;
- boolean multi=false;
- }
- :
- id=ID
-
- opt_eol ':' opt_eol fe=fact_expression[id.getText()]
- {
- d=fe;
- }
- ;
-
- fact_expression[String id] returns [PatternDescr pd]
- @init {
- pd = null;
- boolean multi = false;
- }
- : '(' opt_eol fe=fact_expression[id]opt_eol ')' { pd=fe; }
- | f=fact opt_eol
- {
- ((ColumnDescr)f).setIdentifier( id );
- pd = f;
- }
- ( ('or'|'||') opt_eol
- { if ( ! multi ) {
- PatternDescr first = pd;
- pd = new OrDescr();
- ((OrDescr)pd).addDescr( first );
- multi=true;
- }
- }
- f=fact
- {
- ((ColumnDescr)f).setIdentifier( id );
- ((OrDescr)pd).addDescr( f );
- }
- )*
- ;
-
-fact returns [PatternDescr d]
- @init {
- d=null;
- }
- : id=dotted_name
- {
- d = new ColumnDescr( id );
- } opt_eol
- loc='(' {
- d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
- }opt_eol ( c=constraints
- {
- for ( Iterator cIter = c.iterator() ; cIter.hasNext() ; ) {
- ((ColumnDescr)d).addDescr( (PatternDescr) cIter.next() );
- }
- }
-
- )? opt_eol endLoc=')' opt_eol
- {
- d.setEndLocation( offset(endLoc.getLine()), endLoc.getCharPositionInLine() );
- }
- ;
-
-
-constraints returns [List constraints]
- @init {
- constraints = new ArrayList();
- }
- : opt_eol
- (constraint[constraints]|predicate[constraints])
- ( opt_eol ',' opt_eol (constraint[constraints]|predicate[constraints]))*
- opt_eol
- ;
-
-constraint[List constraints]
- @init {
- PatternDescr d = null;
- }
- : opt_eol
- ( fb=ID opt_eol ':' opt_eol )?
- f=ID
- {
-
- if ( fb != null ) {
- //System.err.println( "fb: " + fb.getText() );
- //System.err.println( " f: " + f.getText() );
- d = new FieldBindingDescr( f.getText(), fb.getText() );
- //System.err.println( "fbd: " + d );
-
- d.setLocation( offset(f.getLine()), f.getCharPositionInLine() );
- constraints.add( d );
- }
- FieldConstraintDescr fc = new FieldConstraintDescr(f.getText());
- fc.setLocation( offset(f.getLine()), f.getCharPositionInLine() );
-
-
- }
- opt_eol ( op=operator opt_eol
-
- ( bvc=ID
- {
-
-
-
- VariableRestrictionDescr vd = new VariableRestrictionDescr(op, bvc.getText());
- fc.addRestriction(vd);
- constraints.add(fc);
-
- }
- |
- lc=enum_constraint
- {
-
- LiteralRestrictionDescr lrd = new LiteralRestrictionDescr(op, lc, true);
- fc.addRestriction(lrd);
- constraints.add(fc);
-
- }
- |
- lc=literal_constraint
- {
-
- LiteralRestrictionDescr lrd = new LiteralRestrictionDescr(op, lc);
- fc.addRestriction(lrd);
- constraints.add(fc);
-
- }
- | rvc=retval_constraint
- {
-
-
-
- ReturnValueRestrictionDescr rvd = new ReturnValueRestrictionDescr(op, rvc);
- fc.addRestriction(rvd);
- constraints.add(fc);
-
- }
- )
- (
- con=('&'|'|')
- {
- if (con.getText().equals("&") ) {
- fc.addRestriction(new RestrictionConnectiveDescr(RestrictionConnectiveDescr.AND));
- } else {
- fc.addRestriction(new RestrictionConnectiveDescr(RestrictionConnectiveDescr.OR));
- }
- }
-
- op=operator
- ( bvc=ID
- {
- VariableRestrictionDescr vd = new VariableRestrictionDescr(op, bvc.getText());
- fc.addRestriction(vd);
- }
- |
- lc=enum_constraint
- {
- LiteralRestrictionDescr lrd = new LiteralRestrictionDescr(op, lc, true);
- fc.addRestriction(lrd);
-
- }
- |
- lc=literal_constraint
- {
- LiteralRestrictionDescr lrd = new LiteralRestrictionDescr(op, lc);
- fc.addRestriction(lrd);
-
- }
- | rvc=retval_constraint
- {
- ReturnValueRestrictionDescr rvd = new ReturnValueRestrictionDescr(op, rvc);
- fc.addRestriction(rvd);
-
- }
- )
-
- )*
- )?
- opt_eol
- ;
-
-literal_constraint returns [String text]
- @init {
- text = null;
- }
- : ( t=STRING { text = getString( t ); } //t.getText(); text=text.substring( 1, text.length() - 1 ); }
- | t=INT { text = t.getText(); }
- | t=FLOAT { text = t.getText(); }
- | t=BOOL { text = t.getText(); }
- | t='null' { text = null; }
- )
- ;
-
-enum_constraint returns [String text]
- @init {
- text = null;
- }
- : (cls=ID '.' en=ID) { text = cls.getText() + "." + en.getText(); }
- ;
-
-retval_constraint returns [String text]
- @init {
- text = null;
- }
- :
- '(' c=paren_chunk ')' { text = c; }
- ;
-
-predicate[List constraints]
- :
- decl=ID ':' field=ID '->' '(' text=paren_chunk ')'
- {
- PredicateDescr d = new PredicateDescr(field.getText(), decl.getText(), text );
- constraints.add( d );
- }
- ;
-
-paren_chunk returns [String text]
- @init {
- text = null;
- }
-
- :
- ( options{greedy=false;} :
- '(' c=paren_chunk ')'
- {
- if ( c == null ) {
- c = "";
- }
- if ( text == null ) {
- text = "( " + c + " )";
- } else {
- text = text + " ( " + c + " )";
- }
- }
- | any=.
- {
- if ( text == null ) {
- text = any.getText();
- } else {
- text = text + " " + any.getText();
- }
- }
- )*
- ;
-
-//NOTE: this is needed as there is a bug in antlr if you sometimes use the same sub rule in multiple places
-paren_chunk2 returns [String text]
- @init {
- text = null;
- }
-
- :
- ( options{greedy=false;} :
- '(' c=paren_chunk2 ')'
- {
- if ( c == null ) {
- c = "";
- }
- if ( text == null ) {
- text = "( " + c + " )";
- } else {
- text = text + " ( " + c + " )";
- }
- }
- | any=.
- {
- if ( text == null ) {
- text = any.getText();
- } else {
- text = text + " " + any.getText();
- }
- }
- )*
- ;
-
-curly_chunk returns [String text]
- @init {
- text = null;
- }
-
- :
- ( options{greedy=false;} :
- '{' c=curly_chunk '}'
- {
- //System.err.println( "chunk [" + c + "]" );
- if ( c == null ) {
- c = "";
- }
- if ( text == null ) {
- text = "{ " + c + " }";
- } else {
- text = text + " { " + c + " }";
- }
- }
- | any=.
- {
- //System.err.println( "any [" + any.getText() + "]" );
- if ( text == null ) {
- text = any.getText();
- } else {
- text = text + " " + any.getText();
- }
- }
- )*
- ;
-
-lhs_or returns [PatternDescr d]
- @init{
- d = null;
- }
- :
- { OrDescr or = null; }
- left=lhs_and {d = left; }
- ( ('or'|'||') opt_eol
- right=lhs_and
- {
- if ( or == null ) {
- or = new OrDescr();
- or.addDescr( left );
- d = or;
- }
-
- or.addDescr( right );
- }
- )*
- ;
-
-lhs_and returns [PatternDescr d]
- @init{
- d = null;
- }
- :
- { AndDescr and = null; }
- left=lhs_unary { d = left; }
- ( ('and'|'&&') opt_eol
- right=lhs_unary
- {
- if ( and == null ) {
- and = new AndDescr();
- and.addDescr( left );
- d = and;
- }
-
- and.addDescr( right );
- }
- )*
- ;
-
-lhs_unary returns [PatternDescr d]
- @init {
- d = null;
- }
- : ( u=lhs_exist
- | u=lhs_not
- | u=lhs_eval
- | u=lhs_column
- | '(' opt_eol u=lhs opt_eol ')'
- ) { d = u; }
- ;
-
-lhs_exist returns [PatternDescr d]
- @init {
- d = null;
- }
- : loc='exists' ('(' column=lhs_column ')' | column=lhs_column)
- {
- d = new ExistsDescr( (ColumnDescr) column );
- d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
- }
- ;
-
-lhs_not returns [NotDescr d]
- @init {
- d = null;
- }
- : loc='not' ('(' column=lhs_column ')' | column=lhs_column)
- {
- d = new NotDescr( (ColumnDescr) column );
- d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
- }
- ;
-
-lhs_eval returns [PatternDescr d]
- @init {
- d = null;
- String text = "";
- }
- : 'eval' loc='('
- c=paren_chunk2
- ')'
- {
- checkTrailingSemicolon( c, offset(loc.getLine()) );
- d = new EvalDescr( c );
- }
- ;
-
-dotted_name returns [String name]
- @init {
- name = null;
- }
- :
- id=ID { name=id.getText(); } ( '.' id=ID { name = name + "." + id.getText(); } )* ( '[' ']' { name = name + "[]";})*
- ;
-
-argument returns [String name]
- @init {
- name = null;
- }
- :
- id=ID { name=id.getText(); } ( '[' ']' { name = name + "[]";})*
- ;
-
-
-word returns [String word]
- @init{
- word = null;
- }
- : id=ID { word=id.getText(); }
- | 'import' { word="import"; }
- | 'use' { word="use"; }
- | 'rule' { word="rule"; }
- | 'query' { word="query"; }
- | 'salience' { word="salience"; }
- | 'no-loop' { word="no-loop"; }
- | 'when' { word="when"; }
- | 'then' { word="then"; }
- | 'end' { word="end"; }
- | str=STRING { word=getString(str);} //str.getText(); word=word.substring( 1, word.length()-1 ); }
- ;
-
-operator returns [String str]
- @init {
- str = null;
- }
- :
-
- '==' {str= "==";}
- |'=' {str="==";}
- |'>' {str=">";}
- |'>=' {str=">=";}
- |'<' {str="<";}
- |'<=' {str="<=";}
- |'!=' {str="!=";}
- |'contains' {str="contains";}
- |'matches' {str="matches";}
- |'excludes' {str="excludes";}
-
-
- ;
-
-
-
-MISC :
- '!' | '@' | '$' | '%' | '^' | '&' | '*' | '_' | '-' | '+' | '?'
- | '|' | ',' | '{' | '}' | '[' | ']' | '=' | '/' | '(' | ')' | '\'' | '\\'
- | '||' | '&&' | '<<<' | '++' | '--' | '>>>' | '==' | '+=' | '=+' | '-=' | '=-' |'*=' | '=*'
- | '/=' | '=/' | '>>='
-
- ;
-
-WS : ( ' '
- | '\t'
- | '\f'
- )
- { channel=99; }
- ;
-
-EOL :
- ( ( '\r\n' )=> '\r\n' // Evil DOS
- | '\r' // Macintosh
- | '\n' // Unix (the right way)
- )
- ;
-
-INT
- : ('-')?('0'..'9')+
- ;
-
-FLOAT
- : ('-')?('0'..'9')+ '.' ('0'..'9')+
- ;
-
-STRING
- : ('"' ( options{greedy=false;} : .)* '"' ) | ('\'' ( options{greedy=false;} : .)* '\'')
- ;
-
-BOOL
- : ('true'|'false')
- ;
-
-ID
- : ('a'..'z'|'A'..'Z'|'_'|'$' | '\u00c0'..'\u00ff')('a'..'z'|'A'..'Z'|'_'|'0'..'9' | '\u00c0'..'\u00ff')*
- ;
-
-
-SH_STYLE_SINGLE_LINE_COMMENT
- : '#' ( options{greedy=false;} : .)* EOL /* ('\r')? '\n' */
- { channel=99; }
- ;
-
-
-C_STYLE_SINGLE_LINE_COMMENT
- : '//' ( options{greedy=false;} : .)* EOL // ('\r')? '\n'
- { channel=99; }
- ;
-
-MULTI_LINE_COMMENT
- : '/*' (options{greedy=false;} : .)* '*/'
- { channel=99; }
- ;
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderTest.java 2006-08-02 21:58:31 UTC (rev 5420)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderTest.java 2006-08-03 00:14:06 UTC (rev 5421)
@@ -49,14 +49,16 @@
import org.drools.lang.descr.EvalDescr;
import org.drools.lang.descr.ExistsDescr;
import org.drools.lang.descr.FieldBindingDescr;
-import org.drools.lang.descr.LiteralDescr;
+import org.drools.lang.descr.FieldConstraintDescr;
+import org.drools.lang.descr.LiteralRestrictionDescr;
import org.drools.lang.descr.NotDescr;
import org.drools.lang.descr.OrDescr;
import org.drools.lang.descr.PackageDescr;
import org.drools.lang.descr.PatternDescr;
import org.drools.lang.descr.PredicateDescr;
-import org.drools.lang.descr.ReturnValueDescr;
+import org.drools.lang.descr.ReturnValueRestrictionDescr;
import org.drools.lang.descr.RuleDescr;
+import org.drools.lang.descr.VariableRestrictionDescr;
import org.drools.reteoo.ReteooRuleBase;
import org.drools.rule.And;
import org.drools.rule.Column;
@@ -103,9 +105,9 @@
packageDescr.addGlobal( "map",
"java.util.Map" );
- final ReturnValueDescr returnValue = new ReturnValueDescr( "price",
- "==",
- "x" );
+ FieldConstraintDescr returnValue = new FieldConstraintDescr( "price" );
+ returnValue.addRestriction( new ReturnValueRestrictionDescr("==", "x") );
+
column.addDescr( returnValue );
// There is no m this should produce errors.
@@ -294,13 +296,12 @@
final ColumnDescr column = new ColumnDescr( Cheese.class.getName(),
"stilton" );
lhs.addDescr( column );
+
+ FieldConstraintDescr literalDescr = new FieldConstraintDescr( "type" );
+ literalDescr.addRestriction( new VariableRestrictionDescr("==", "stilton") );
- final LiteralDescr listeralDescr = new LiteralDescr( "type",
- "==",
- "stilton" );
+ column.addDescr( literalDescr );
- column.addDescr( listeralDescr );
-
ruleDescr.setConsequence( "modify(stilton);" );
builder.addPackage( packageDescr );
@@ -332,10 +333,10 @@
packageDescr.addGlobal( "map",
"java.util.Map" );
-
- final ReturnValueDescr returnValue = new ReturnValueDescr( "price",
- "==",
- "new Integer(( ( ( Integer )map.get(x) ).intValue() * y.intValue()))" );
+
+ FieldConstraintDescr returnValue = new FieldConstraintDescr( "price" );
+ returnValue.addRestriction( new ReturnValueRestrictionDescr("==", "new Integer(( ( ( Integer )map.get(x) ).intValue() * y.intValue()))") );
+
column.addDescr( returnValue );
ruleDescr.setConsequence( "modify(stilton);" );
@@ -611,97 +612,97 @@
public void testNumbers() throws Exception {
// test boolean
- createLiteralRule( new LiteralDescr( "booleanPrimitive",
- "==",
- "true" ) );
+ FieldConstraintDescr literalDescr = new FieldConstraintDescr( "booleanPrimitive" );
+ literalDescr.addRestriction( new LiteralRestrictionDescr("==", "true") );
+ createLiteralRule( literalDescr );
// test boolean
- createLiteralRule( new LiteralDescr( "booleanPrimitive",
- "==",
- "false" ) );
+ literalDescr = new FieldConstraintDescr( "booleanPrimitive" );
+ literalDescr.addRestriction( new LiteralRestrictionDescr("==", "false") );
+ createLiteralRule( literalDescr );
// test char
- createLiteralRule( new LiteralDescr( "charPrimitive",
- "==",
- "a" ) );
+ literalDescr = new FieldConstraintDescr( "charPrimitive" );
+ literalDescr.addRestriction( new LiteralRestrictionDescr("==", "a") );
+ createLiteralRule( literalDescr );
// test byte
- createLiteralRule( new LiteralDescr( "bytePrimitive",
- "==",
- "1" ) );
+ literalDescr = new FieldConstraintDescr( "bytePrimitive" );
+ literalDescr.addRestriction( new LiteralRestrictionDescr("==", "1") );
+ createLiteralRule( literalDescr );
- createLiteralRule( new LiteralDescr( "bytePrimitive",
- "==",
- "0" ) );
+ literalDescr = new FieldConstraintDescr( "bytePrimitive" );
+ literalDescr.addRestriction( new LiteralRestrictionDescr("==", "0") );
+ createLiteralRule( literalDescr );
- createLiteralRule( new LiteralDescr( "bytePrimitive",
- "==",
- "-1" ) );
+ literalDescr = new FieldConstraintDescr( "bytePrimitive" );
+ literalDescr.addRestriction( new LiteralRestrictionDescr("==", "-1") );
+ createLiteralRule( literalDescr);
// test short
- createLiteralRule( new LiteralDescr( "shortPrimitive",
- "==",
- "1" ) );
+ literalDescr = new FieldConstraintDescr( "shortPrimitive" );
+ literalDescr.addRestriction( new LiteralRestrictionDescr("==", "1") );
+ createLiteralRule( literalDescr );
- createLiteralRule( new LiteralDescr( "shortPrimitive",
- "==",
- "0" ) );
+ literalDescr = new FieldConstraintDescr( "shortPrimitive" );
+ literalDescr.addRestriction( new LiteralRestrictionDescr("==", "0") );
+ createLiteralRule( literalDescr );
- createLiteralRule( new LiteralDescr( "shortPrimitive",
- "==",
- "-1" ) );
+ literalDescr = new FieldConstraintDescr( "shortPrimitive" );
+ literalDescr.addRestriction( new LiteralRestrictionDescr("==", "-1") );
+ createLiteralRule( literalDescr );
// test int
- createLiteralRule( new LiteralDescr( "intPrimitive",
- "==",
- "1" ) );
+ literalDescr = new FieldConstraintDescr( "intPrimitive" );
+ literalDescr.addRestriction( new LiteralRestrictionDescr("==", "1") );
+ createLiteralRule( literalDescr );
- createLiteralRule( new LiteralDescr( "intPrimitive",
- "==",
- "0" ) );
+ literalDescr = new FieldConstraintDescr( "intPrimitive" );
+ literalDescr.addRestriction( new LiteralRestrictionDescr("==", "0") );
+ createLiteralRule( literalDescr );
- createLiteralRule( new LiteralDescr( "intPrimitive",
- "==",
- "-1" ) );
+ literalDescr = new FieldConstraintDescr( "intPrimitive" );
+ literalDescr.addRestriction( new LiteralRestrictionDescr("==", "-1") );
+ createLiteralRule( literalDescr );
- // // test long
- createLiteralRule( new LiteralDescr( "longPrimitive",
- "==",
- "1" ) );
+ // test long
+ literalDescr = new FieldConstraintDescr( "longPrimitive" );
+ literalDescr.addRestriction( new LiteralRestrictionDescr("==", "1") );
+ createLiteralRule( literalDescr );
- createLiteralRule( new LiteralDescr( "longPrimitive",
- "==",
- "0" ) );
+ literalDescr = new FieldConstraintDescr( "longPrimitive" );
+ literalDescr.addRestriction( new LiteralRestrictionDescr("==", "0") );
+ createLiteralRule( literalDescr );
- createLiteralRule( new LiteralDescr( "longPrimitive",
- "==",
- "-1" ) );
+ literalDescr = new FieldConstraintDescr( "longPrimitive" );
+ literalDescr.addRestriction( new LiteralRestrictionDescr("==", "0") );
+ createLiteralRule( literalDescr );
// test float
- createLiteralRule( new LiteralDescr( "floatPrimitive",
- "==",
- "1.1" ) );
+ literalDescr = new FieldConstraintDescr( "floatPrimitive" );
+ literalDescr.addRestriction( new LiteralRestrictionDescr("==", "1.1") );
+ createLiteralRule( literalDescr);
- createLiteralRule( new LiteralDescr( "floatPrimitive",
- "==",
- "0" ) );
+ literalDescr = new FieldConstraintDescr( "floatPrimitive" );
+ literalDescr.addRestriction( new LiteralRestrictionDescr("==", "0") );
+ createLiteralRule( literalDescr );
- createLiteralRule( new LiteralDescr( "floatPrimitive",
- "==",
- "-1.1" ) );
+ literalDescr = new FieldConstraintDescr( "floatPrimitive" );
+ literalDescr.addRestriction( new LiteralRestrictionDescr("==", "-1.1") );
+ createLiteralRule( literalDescr );
// test double
- createLiteralRule( new LiteralDescr( "doublePrimitive",
- "==",
- "1.1" ) );
+ literalDescr = new FieldConstraintDescr( "doublePrimitive" );
+ literalDescr.addRestriction( new LiteralRestrictionDescr("==", "1.1") );
+ createLiteralRule( literalDescr );
- createLiteralRule( new LiteralDescr( "doublePrimitive",
- "==",
- "0" ) );
+ literalDescr = new FieldConstraintDescr( "doublePrimitive" );
+ literalDescr.addRestriction( new LiteralRestrictionDescr("==", "0") );
+ createLiteralRule( literalDescr );
- createLiteralRule( new LiteralDescr( "doublePrimitive",
- "==",
- "-1.1" ) );
+ literalDescr = new FieldConstraintDescr( "floatPrimitive" );
+ literalDescr.addRestriction( new LiteralRestrictionDescr("==", "-1.1") );
+ createLiteralRule( literalDescr);
}
public void testNull() {
@@ -717,9 +718,9 @@
final ColumnDescr columnDescr = new ColumnDescr( Cheese.class.getName(),
"stilton" );
- final LiteralDescr literalDescr = new LiteralDescr( "type",
- "==",
- null );
+ FieldConstraintDescr literalDescr = new FieldConstraintDescr( "type" );
+ literalDescr.addRestriction( new LiteralRestrictionDescr("==", null) );
+
columnDescr.addDescr( literalDescr );
ruleDescr.setConsequence( "" );
@@ -745,9 +746,8 @@
ruleDescr.setLhs( lhs );
ColumnDescr columnDescr = new ColumnDescr( Cheese.class.getName(),
"stilton" );
- LiteralDescr literalDescr = new LiteralDescr( "type",
- "==",
- null );
+ FieldConstraintDescr literalDescr = new FieldConstraintDescr( "type" );
+ literalDescr.addRestriction( new LiteralRestrictionDescr("==", null) );
columnDescr.addDescr( literalDescr );
ruleDescr.setConsequence( "" );
@@ -759,9 +759,8 @@
ruleDescr.setLhs( lhs );
columnDescr = new ColumnDescr( Cheese.class.getName(),
"stilton" );
- literalDescr = new LiteralDescr( "type",
- "!=",
- null );
+ literalDescr = new FieldConstraintDescr( "type" );
+ literalDescr.addRestriction( new LiteralRestrictionDescr("!=", null) );
columnDescr.addDescr( literalDescr );
ruleDescr.setConsequence( "" );
@@ -773,9 +772,10 @@
ruleDescr.setLhs( lhs );
columnDescr = new ColumnDescr( Cheese.class.getName(),
"stilton" );
- literalDescr = new LiteralDescr( "type",
- "!=",
- null );
+
+ literalDescr = new FieldConstraintDescr( "type" );
+ literalDescr.addRestriction( new LiteralRestrictionDescr("!=", null ) );
+
columnDescr.addDescr( literalDescr );
ruleDescr.setConsequence( "" );
@@ -807,12 +807,11 @@
final FieldBindingDescr fieldBindingDescr = new FieldBindingDescr( "type",
"$type" );
- final LiteralDescr listeralDescr = new LiteralDescr( "type",
- "==",
- "stilton" );
+ FieldConstraintDescr literalDescr = new FieldConstraintDescr( "type" );
+ literalDescr.addRestriction( new LiteralRestrictionDescr("==", "stilton") );
column1.addDescr( fieldBindingDescr );
- column1.addDescr( listeralDescr );
+ column1.addDescr( literalDescr );
final ColumnDescr column2 = new ColumnDescr( Cheese.class.getName() );
lhs.addDescr( column2 );
@@ -890,10 +889,10 @@
packageDescr.addGlobal( "map",
"java.util.Map" );
-
- final ReturnValueDescr returnValue = new ReturnValueDescr( "price",
- "==",
- expression );
+
+ FieldConstraintDescr returnValue = new FieldConstraintDescr( "price" );
+ returnValue.addRestriction( new ReturnValueRestrictionDescr("==", expression) );
+
column.addDescr( returnValue );
ruleDescr.setConsequence( "modify(stilton);" );
@@ -943,7 +942,7 @@
ruleDescr.setConsequence( "" );
}
- private void createLiteralRule(final LiteralDescr literalDescr) {
+ private void createLiteralRule(final FieldConstraintDescr literalDescr) {
final PackageBuilder builder = new PackageBuilder();
final PackageDescr packageDescr = new PackageDescr( "p1" );
@@ -981,9 +980,9 @@
final ColumnDescr columnDescr = new ColumnDescr( Cheese.class.getName(),
"stilton" );
- final LiteralDescr literalDescr = new LiteralDescr( "type",
- "==",
- "stilton" );
+ FieldConstraintDescr literalDescr = new FieldConstraintDescr( "type" );
+ literalDescr.addRestriction( new LiteralRestrictionDescr("==", "stilton") );
+
columnDescr.addDescr( literalDescr );
ceDescr.addDescr( columnDescr );
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/LeapsTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/LeapsTest.java 2006-08-02 21:58:31 UTC (rev 5420)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/LeapsTest.java 2006-08-03 00:14:06 UTC (rev 5421)
@@ -297,6 +297,10 @@
}
+ public void testActivationGroups() throws Exception {
+ // @todo for some reason this is b0rked?
+ }
+
/**
* this test is replicated here due to the fact that leaps
* does not create activations before fireAll.
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/descr/AndDescrTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/descr/AndDescrTest.java 2006-08-02 21:58:31 UTC (rev 5420)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/descr/AndDescrTest.java 2006-08-03 00:14:06 UTC (rev 5421)
@@ -18,17 +18,17 @@
public void testAddBoundCols() {
final AndDescr and = new AndDescr();
final ColumnDescr col1 = new ColumnDescr( "Foo" );
- col1.setIdentifier( "foo" );
- col1.addDescr( new VariableDescr( "foo",
- "==",
- "bar" ) );
+ col1.setIdentifier( "foo" );
+ FieldConstraintDescr fieldConstraint1 = new FieldConstraintDescr("foo" );
+ fieldConstraint1.addRestriction( new VariableRestrictionDescr("==", "bar") );
+ col1.addDescr( fieldConstraint1 );
and.addDescr( col1 );
final ColumnDescr col2 = new ColumnDescr( "Foo" );
col2.setIdentifier( "foo" );
- col2.addDescr( new VariableDescr( "bar",
- "==",
- "baz" ) );
+ FieldConstraintDescr fieldConstraint2 = new FieldConstraintDescr("bar" );
+ fieldConstraint2.addRestriction( new VariableRestrictionDescr("==", "baz") );
+ col2.addDescr( fieldConstraint2 );
and.addDescr( col2 );
and.addDescr( new NotDescr() );
@@ -53,9 +53,9 @@
assertEquals( 2,
col1.getDescrs().size() );
assertEquals( "bar",
- ((VariableDescr) col1.getDescrs().get( 0 )).getIdentifier() );
+ ( (VariableRestrictionDescr)( (FieldConstraintDescr) col1.getDescrs().get( 0 )).getRestrictions().get( 0 )).getIdentifier() );
assertEquals( "baz",
- ((VariableDescr) col1.getDescrs().get( 1 )).getIdentifier() );
+ ( (VariableRestrictionDescr)( (FieldConstraintDescr) col1.getDescrs().get( 1 )).getRestrictions().get( 0 )).getIdentifier() );
}
}
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/xml/DumperTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/xml/DumperTest.java 2006-08-02 21:58:31 UTC (rev 5420)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/xml/DumperTest.java 2006-08-03 00:14:06 UTC (rev 5421)
@@ -1,7 +1,9 @@
package org.drools.xml;
+import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
+import java.io.Reader;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;
@@ -91,14 +93,25 @@
assertEquals( ruleOriginal.getConsequence(),
ruleDumped.getConsequence() );
+ // Now double check the contents are the same
+ BufferedReader reader = new BufferedReader( new InputStreamReader( getClass().getResourceAsStream( "test_Dump.drl" ) ) );
+ StringBuffer buffer = new StringBuffer();
+ String s = null;
+ while ( (s = reader.readLine()) != null ) {
+ buffer.append( s );
+ }
+
+ assertEqualsIgnoreWhitespace( buffer.toString(),
+ result );
+
}
-
+
private void assertEqualsIgnoreWhitespace(final String expected,
final String actual) {
final String cleanExpected = expected.replaceAll( "\\s+",
- "" );
+ "" );
final String cleanActual = actual.replaceAll( "\\s+",
- "" );
+ "" );
assertEquals( cleanExpected,
cleanActual );
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/xml/XmlPackageReaderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/xml/XmlPackageReaderTest.java 2006-08-02 21:58:31 UTC (rev 5420)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/xml/XmlPackageReaderTest.java 2006-08-03 00:14:06 UTC (rev 5421)
@@ -8,20 +8,21 @@
import org.drools.lang.descr.AndDescr;
import org.drools.lang.descr.AttributeDescr;
-import org.drools.lang.descr.VariableDescr;
import org.drools.lang.descr.ColumnDescr;
import org.drools.lang.descr.EvalDescr;
import org.drools.lang.descr.ExistsDescr;
import org.drools.lang.descr.FieldBindingDescr;
+import org.drools.lang.descr.FieldConstraintDescr;
import org.drools.lang.descr.FunctionDescr;
-import org.drools.lang.descr.LiteralDescr;
+import org.drools.lang.descr.LiteralRestrictionDescr;
import org.drools.lang.descr.NotDescr;
import org.drools.lang.descr.OrDescr;
import org.drools.lang.descr.PackageDescr;
import org.drools.lang.descr.PredicateDescr;
import org.drools.lang.descr.QueryDescr;
-import org.drools.lang.descr.ReturnValueDescr;
+import org.drools.lang.descr.ReturnValueRestrictionDescr;
import org.drools.lang.descr.RuleDescr;
+import org.drools.lang.descr.VariableRestrictionDescr;
public class XmlPackageReaderTest extends TestCase {
public void testParsePackageName() throws Exception {
@@ -241,44 +242,43 @@
column2.getIdentifier() );
final ColumnDescr column3 = (ColumnDescr) lhsDescr.getDescrs().get( 4 );
- final LiteralDescr literalDescr = (LiteralDescr) column3.getDescrs().get( 0 );
+ //final LiteralDescr literalDescr = (LiteralDescr) column3.getDescrs().get( 0 );
+ FieldConstraintDescr fieldConstraintDescr = (FieldConstraintDescr) column3.getDescrs().get( 0 );
+ final LiteralRestrictionDescr literalDescr = ( LiteralRestrictionDescr ) fieldConstraintDescr.getRestrictions().get( 0 );
assertEquals( "field1",
- literalDescr.getFieldName() );
+ fieldConstraintDescr.getFieldName() );
assertEquals( "==",
literalDescr.getEvaluator() );
assertEquals( "value1",
literalDescr.getText() );
+ final ReturnValueRestrictionDescr returnValueDescr = (ReturnValueRestrictionDescr) fieldConstraintDescr.getRestrictions().get( 1 );
+ assertEquals( "==",
+ returnValueDescr.getEvaluator() );
+ assertEquals( "1==1",
+ returnValueDescr.getText() );
+
+ final VariableRestrictionDescr variableDescr = (VariableRestrictionDescr) fieldConstraintDescr.getRestrictions().get( 2 );
+ assertEquals( "==",
+ variableDescr.getEvaluator() );
+ assertEquals( "var1",
+ variableDescr.getIdentifier() );
+
final PredicateDescr predicateDescr = (PredicateDescr) column3.getDescrs().get( 1 );
assertEquals( "field1",
predicateDescr.getFieldName() );
assertEquals( "var1",
predicateDescr.getDeclaration() );
assertEquals( "1==1",
- predicateDescr.getText() );
+ predicateDescr.getText() );
- final ReturnValueDescr returnValueDescr = (ReturnValueDescr) column3.getDescrs().get( 2 );
- assertEquals( "field1",
- returnValueDescr.getFieldName() );
- assertEquals( "==",
- returnValueDescr.getEvaluator() );
- assertEquals( "1==1",
- returnValueDescr.getText() );
- final FieldBindingDescr fieldBindingDescr = (FieldBindingDescr) column3.getDescrs().get( 3 );
+ final FieldBindingDescr fieldBindingDescr = (FieldBindingDescr) column3.getDescrs().get( 2 );
assertEquals( "field1",
fieldBindingDescr.getFieldName() );
assertEquals( "var1",
fieldBindingDescr.getIdentifier() );
- final VariableDescr variableDescr = (VariableDescr) column3.getDescrs().get( 4 );
- assertEquals( "field1",
- variableDescr.getFieldName() );
- assertEquals( "==",
- variableDescr.getEvaluator() );
- assertEquals( "var1",
- variableDescr.getIdentifier() );
-
final NotDescr notDescr = (NotDescr) lhsDescr.getDescrs().get( 5 );
assertEquals( 1,
notDescr.getDescrs().size() );
Modified: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/reteoo/OneAndTwoOrs
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/reteoo/OneAndTwoOrs 2006-08-02 21:58:31 UTC (rev 5420)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/reteoo/OneAndTwoOrs 2006-08-03 00:14:06 UTC (rev 5421)
@@ -178,40 +178,51 @@
b2xzLnJ1bGUuQ29sdW1ufzmwAkCvUeYCAAVJAAVpbmRleEkABm9mZnNldEwAC2NvbnN0cmFpbnRz
cQB+ABtMAAtkZWNsYXJhdGlvbnQAHUxvcmcvZHJvb2xzL3J1bGUvRGVjbGFyYXRpb247TAAKb2Jq
ZWN0VHlwZXQAG0xvcmcvZHJvb2xzL3NwaS9PYmplY3RUeXBlO3hwAAAAAAAAAABzcQB+AB0AAAAB
-dwQAAAABc3IAIW9yZy5kcm9vbHMucnVsZS5MaXRlcmFsQ29uc3RyYWludAOS+tbk+ZKzAgADTAAJ
-ZXZhbHVhdG9ydAAaTG9yZy9kcm9vbHMvc3BpL0V2YWx1YXRvcjtMAAlleHRyYWN0b3J0AB9Mb3Jn
-L2Ryb29scy9zcGkvRmllbGRFeHRyYWN0b3I7TAAFZmllbGR0ABtMb3JnL2Ryb29scy9zcGkvRmll
-bGRWYWx1ZTt4cHNyAD1vcmcuZHJvb2xzLmJhc2UuZXZhbHVhdG9ycy5TdHJpbmdGYWN0b3J5JFN0
-cmluZ0VxdWFsRXZhbHVhdG9ySU/lvdDlSJYCAAB4cgAdb3JnLmRyb29scy5iYXNlLkJhc2VFdmFs
-dWF0b3KuQXGsNOGNawIAAkkACG9wZXJhdG9ySQAEdHlwZXhwAAAAAQAAALRzcgAjb3JnLmRyb29s
-cy5iYXNlLkNsYXNzRmllbGRFeHRyYWN0b3IZ4kABiRDxowIAAkwABWNsYXp6dAARTGphdmEvbGFu
-Zy9DbGFzcztMAAlmaWVsZE5hbWVxAH4ADnhwdnIAEm9yZy5kcm9vbHMuTWVzc2FnZQAAAAAAAAAA
-AAAAeHB0AAhtZXNzYWdlMXNyABlvcmcuZHJvb2xzLmJhc2UuRmllbGRJbXBsrplN9KzddkQCAAFM
-AAV2YWx1ZXQAEkxqYXZhL2xhbmcvT2JqZWN0O3hwdAADT25leHBzcgAfb3JnLmRyb29scy5iYXNl
-LkNsYXNzT2JqZWN0VHlwZdzs2BfUlPv9AgACSQAJdmFsdWVUeXBlTAAPb2JqZWN0VHlwZUNsYXNz
-cQB+AC94cAAAANJxAH4AMnNxAH4AIQAAAAEAAAAAc3EAfgAdAAAAAXcEAAAAAXNxAH4AJnEAfgAt
-c3EAfgAucQB+ADJ0AAhtZXNzYWdlMnNxAH4ANHQAA1R3b3hwc3EAfgA4AAAA0nEAfgAyeHNyABJv
-cmcuZHJvb2xzLnJ1bGUuT3IVF4eAAV23IwIAAHhxAH4AGnNxAH4AHQAAAAJ3BAAAAApzcQB+ACEA
-AAACAAAAAHNxAH4AHQAAAAF3BAAAAAFzcQB+ACZxAH4ALXEAfgA9c3EAfgA0cQB+ADd4cHNxAH4A
-OAAAANJxAH4AMnNxAH4AIQAAAAP/////c3EAfgAdAAAAAXcEAAAAAXNxAH4AJnEAfgAtcQB+AD1z
-cQB+ADRxAH4AQHhwc3EAfgA4AAAA0nEAfgAyeHNxAH4AQnNxAH4AHQAAAAJ3BAAAAApzcQB+ACEA
-AAAE/////3NxAH4AHQAAAAF3BAAAAAFzcQB+ACZxAH4ALXNxAH4ALnEAfgAydAAIbWVzc2FnZTNz
-cQB+ADRxAH4AN3hwc3EAfgA4AAAA0nEAfgAyc3EAfgAhAAAABf////5zcQB+AB0AAAABdwQAAAAB
-c3EAfgAmcQB+AC1xAH4AVHNxAH4ANHQABVRocmVleHBzcQB+ADgAAADScQB+ADJ4eHQADUhlbGxv
-IFdvcmxkIDFwdAA4b3JnLmRyb29scy5yZXRlb28uUnVsZV9IZWxsb19Xb3JsZF8yXzBDb25zZXF1
-ZW5jZUludm9rZXJzcQB+AA0AAAAAAAAAAAIAAAAAAAFwcQB+ABRzcgA4b3JnLmRyb29scy5yZXRl
-b28uUnVsZV9IZWxsb19Xb3JsZF8yXzBDb25zZXF1ZW5jZUludm9rZXJuXqy++rNzagIAAHhwdXEA
-fgAKAAAAAHNxAH4AAD9AAAAAAAAMdwgAAAAQAAAAAHhwc3EAfgAZc3EAfgAdAAAABHcEAAAACnNx
-AH4AGXNxAH4AHQAAAAJ3BAAAAApzcQB+ACEAAAAAAAAAAHNxAH4AHQAAAAF3BAAAAAFzcQB+ACZx
-AH4ALXEAfgAwc3EAfgA0cQB+ADd4cHNxAH4AOAAAANJxAH4AMnNxAH4AIQAAAAEAAAAAc3EAfgAd
-AAAAAXcEAAAAAXNxAH4AJnEAfgAtcQB+AD1zcQB+ADRxAH4AQHhwc3EAfgA4AAAA0nEAfgAyeHNx
-AH4AQnNxAH4AHQAAAAJ3BAAAAApzcQB+ACEAAAACAAAAAHNxAH4AHQAAAAF3BAAAAAFzcQB+ACZx
-AH4ALXEAfgA9c3EAfgA0cQB+ADd4cHNxAH4AOAAAANJxAH4AMnNxAH4AIQAAAAP/////c3EAfgAd
-AAAAAXcEAAAAAXNxAH4AJnEAfgAtcQB+AD1zcQB+ADRxAH4AQHhwc3EAfgA4AAAA0nEAfgAyeHNx
-AH4AQnNxAH4AHQAAAAJ3BAAAAApzcQB+ACEAAAAE/////3NxAH4AHQAAAAF3BAAAAAFzcQB+ACZx
-AH4ALXEAfgBUc3EAfgA0cQB+ADd4cHNxAH4AOAAAANJxAH4AMnNxAH4AIQAAAAX////+c3EAfgAd
-AAAAAXcEAAAAAXNxAH4AJnEAfgAtcQB+AFRzcQB+ADRxAH4AXHhwc3EAfgA4AAAA0nEAfgAyeHEA
-fgAHeHQADUhlbGxvIFdvcmxkIDJweA==</byte-array>
+dwQAAAABc3IAIW9yZy5kcm9vbHMucnVsZS5MaXRlcmFsQ29uc3RyYWludAAAAAAAAAFAAgACTAAJ
+ZXh0cmFjdG9ydAAfTG9yZy9kcm9vbHMvc3BpL0ZpZWxkRXh0cmFjdG9yO0wAC3Jlc3RyaWN0aW9u
+dAAkTG9yZy9kcm9vbHMvcnVsZS9MaXRlcmFsUmVzdHJpY3Rpb247eHBzcgAjb3JnLmRyb29scy5i
+YXNlLkNsYXNzRmllbGRFeHRyYWN0b3IAAAAAAAABQAIAAkwABWNsYXp6dAARTGphdmEvbGFuZy9D
+bGFzcztMAAlmaWVsZE5hbWVxAH4ADnhwdnIAEm9yZy5kcm9vbHMuTWVzc2FnZQAAAAAAAAAAAAAA
+eHB0AAhtZXNzYWdlMXNyACJvcmcuZHJvb2xzLnJ1bGUuTGl0ZXJhbFJlc3RyaWN0aW9uAAAAAAAA
+AUACAAJMAAlldmFsdWF0b3J0ABpMb3JnL2Ryb29scy9zcGkvRXZhbHVhdG9yO0wABWZpZWxkdAAb
+TG9yZy9kcm9vbHMvc3BpL0ZpZWxkVmFsdWU7eHBzcgA9b3JnLmRyb29scy5iYXNlLmV2YWx1YXRv
+cnMuU3RyaW5nRmFjdG9yeSRTdHJpbmdFcXVhbEV2YWx1YXRvcgAAAAAAAAFAAgAAeHIAHW9yZy5k
+cm9vbHMuYmFzZS5CYXNlRXZhbHVhdG9yVSSLs2Wsrn8CAAJMAAhvcGVyYXRvcnQAJUxvcmcvZHJv
+b2xzL2Jhc2UvZXZhbHVhdG9ycy9PcGVyYXRvcjtMAAR0eXBldAAbTG9yZy9kcm9vbHMvYmFzZS9W
+YWx1ZVR5cGU7eHBzcgAjb3JnLmRyb29scy5iYXNlLmV2YWx1YXRvcnMuT3BlcmF0b3IAAAAAAAAB
+QAIAAUwACG9wZXJhdG9ycQB+AA54cHQAAj09c3IAGW9yZy5kcm9vbHMuYmFzZS5WYWx1ZVR5cGUA
+AAAAAAABQAIAA0wACWNsYXNzVHlwZXEAfgArTAAQZXZhbHVhdG9yRmFjdG9yeXQALUxvcmcvZHJv
+b2xzL2Jhc2UvZXZhbHVhdG9ycy9FdmFsdWF0b3JGYWN0b3J5O0wABG5hbWVxAH4ADnhwdnIAEGph
+dmEubGFuZy5TdHJpbmeg8KQ4ejuzQgIAAHhwc3IAKG9yZy5kcm9vbHMuYmFzZS5ldmFsdWF0b3Jz
+LlN0cmluZ0ZhY3RvcnnnjP+pwAUavgIAAHhwdAAGU3RyaW5nc3IAGW9yZy5kcm9vbHMuYmFzZS5G
+aWVsZEltcGwAAAAAAAABQAIAAUwABXZhbHVldAASTGphdmEvbGFuZy9PYmplY3Q7eHB0AANPbmV4
+cHNyAB9vcmcuZHJvb2xzLmJhc2UuQ2xhc3NPYmplY3RUeXBl3OzYF9SU+/0CAAJMAA9vYmplY3RU
+eXBlQ2xhc3NxAH4AK0wACXZhbHVlVHlwZXEAfgA3eHBxAH4ALnNxAH4APHZyABBqYXZhLmxhbmcu
+T2JqZWN0AAAAAAAAAAAAAAB4cHNyAChvcmcuZHJvb2xzLmJhc2UuZXZhbHVhdG9ycy5PYmplY3RG
+YWN0b3J5iWJzm94ZVjkCAAB4cHQABk9iamVjdHNxAH4AIQAAAAEAAAAAc3EAfgAdAAAAAXcEAAAA
+AXNxAH4AJnNxAH4AKnEAfgAudAAIbWVzc2FnZTJzcQB+ADBxAH4AOHNxAH4ARHQAA1R3b3hwc3EA
+fgBIcQB+AC5xAH4ASnhzcgASb3JnLmRyb29scy5ydWxlLk9yFReHgAFdtyMCAAB4cQB+ABpzcQB+
+AB0AAAACdwQAAAAKc3EAfgAhAAAAAgAAAABzcQB+AB0AAAABdwQAAAABc3EAfgAmcQB+AFNzcQB+
+ADBxAH4AOHNxAH4ARHEAfgBHeHBzcQB+AEhxAH4ALnEAfgBKc3EAfgAhAAAAA/////9zcQB+AB0A
+AAABdwQAAAABc3EAfgAmcQB+AFNzcQB+ADBxAH4AOHNxAH4ARHEAfgBXeHBzcQB+AEhxAH4ALnEA
+fgBKeHNxAH4AWXNxAH4AHQAAAAJ3BAAAAApzcQB+ACEAAAAE/////3NxAH4AHQAAAAF3BAAAAAFz
+cQB+ACZzcQB+ACpxAH4ALnQACG1lc3NhZ2Uzc3EAfgAwcQB+ADhzcQB+AERxAH4AR3hwc3EAfgBI
+cQB+AC5xAH4ASnNxAH4AIQAAAAX////+c3EAfgAdAAAAAXcEAAAAAXNxAH4AJnEAfgBtc3EAfgAw
+cQB+ADhzcQB+AER0AAVUaHJlZXhwc3EAfgBIcQB+AC5xAH4ASnh4dAANSGVsbG8gV29ybGQgMXB0
+ADhvcmcuZHJvb2xzLnJldGVvby5SdWxlX0hlbGxvX1dvcmxkXzJfMENvbnNlcXVlbmNlSW52b2tl
+cnNxAH4ADQAAAAAAAAAAAgAAAAAAAXBxAH4AFHNyADhvcmcuZHJvb2xzLnJldGVvby5SdWxlX0hl
+bGxvX1dvcmxkXzJfMENvbnNlcXVlbmNlSW52b2tlcm5erL76s3NqAgAAeHB1cQB+AAoAAAAAc3EA
+fgAAP0AAAAAAAAx3CAAAABAAAAAAeHBzcQB+ABlzcQB+AB0AAAAEdwQAAAAKc3EAfgAZc3EAfgAd
+AAAAAncEAAAACnNxAH4AIQAAAAAAAAAAc3EAfgAdAAAAAXcEAAAAAXNxAH4AJnEAfgAsc3EAfgAw
+cQB+ADhzcQB+AERxAH4AR3hwc3EAfgBIcQB+AC5xAH4ASnNxAH4AIQAAAAEAAAAAc3EAfgAdAAAA
+AXcEAAAAAXNxAH4AJnEAfgBTc3EAfgAwcQB+ADhzcQB+AERxAH4AV3hwc3EAfgBIcQB+AC5xAH4A
+SnhzcQB+AFlzcQB+AB0AAAACdwQAAAAKc3EAfgAhAAAAAgAAAABzcQB+AB0AAAABdwQAAAABc3EA
+fgAmcQB+AFNzcQB+ADBxAH4AOHNxAH4ARHEAfgBHeHBzcQB+AEhxAH4ALnEAfgBKc3EAfgAhAAAA
+A/////9zcQB+AB0AAAABdwQAAAABc3EAfgAmcQB+AFNzcQB+ADBxAH4AOHNxAH4ARHEAfgBXeHBz
+cQB+AEhxAH4ALnEAfgBKeHNxAH4AWXNxAH4AHQAAAAJ3BAAAAApzcQB+ACEAAAAE/////3NxAH4A
+HQAAAAF3BAAAAAFzcQB+ACZxAH4AbXNxAH4AMHEAfgA4c3EAfgBEcQB+AEd4cHNxAH4ASHEAfgAu
+cQB+AEpzcQB+ACEAAAAF/////nNxAH4AHQAAAAF3BAAAAAFzcQB+ACZxAH4AbXNxAH4AMHEAfgA4
+c3EAfgBEcQB+AHd4cHNxAH4ASHEAfgAucQB+AEp4cQB+AAd4dAANSGVsbG8gV29ybGQgMnB4</byte-array>
</org.drools.rule.PackageCompilationData>
<string>org.drools.reteoo</string>
<list>
@@ -240,46 +251,58 @@
AkCvUeYCAAVJAAVpbmRleEkABm9mZnNldEwAC2NvbnN0cmFpbnRzcQB+ABRMAAtkZWNsYXJhdGlv
bnQAHUxvcmcvZHJvb2xzL3J1bGUvRGVjbGFyYXRpb247TAAKb2JqZWN0VHlwZXQAG0xvcmcvZHJv
b2xzL3NwaS9PYmplY3RUeXBlO3hwAAAAAAAAAABzcQB+ABcAAAABdwQAAAABc3IAIW9yZy5kcm9v
-bHMucnVsZS5MaXRlcmFsQ29uc3RyYWludAOS+tbk+ZKzAgADTAAJZXZhbHVhdG9ydAAaTG9yZy9k
-cm9vbHMvc3BpL0V2YWx1YXRvcjtMAAlleHRyYWN0b3J0AB9Mb3JnL2Ryb29scy9zcGkvRmllbGRF
-eHRyYWN0b3I7TAAFZmllbGR0ABtMb3JnL2Ryb29scy9zcGkvRmllbGRWYWx1ZTt4cHNyAD1vcmcu
-ZHJvb2xzLmJhc2UuZXZhbHVhdG9ycy5TdHJpbmdGYWN0b3J5JFN0cmluZ0VxdWFsRXZhbHVhdG9y
-SU/lvdDlSJYCAAB4cgAdb3JnLmRyb29scy5iYXNlLkJhc2VFdmFsdWF0b3KuQXGsNOGNawIAAkkA
-CG9wZXJhdG9ySQAEdHlwZXhwAAAAAQAAALRzcgAjb3JnLmRyb29scy5iYXNlLkNsYXNzRmllbGRF
-eHRyYWN0b3IZ4kABiRDxowIAAkwABWNsYXp6dAARTGphdmEvbGFuZy9DbGFzcztMAAlmaWVsZE5h
-bWVxAH4ABXhwdnIAEm9yZy5kcm9vbHMuTWVzc2FnZQAAAAAAAAAAAAAAeHB0AAhtZXNzYWdlMXNy
-ABlvcmcuZHJvb2xzLmJhc2UuRmllbGRJbXBsrplN9KzddkQCAAFMAAV2YWx1ZXQAEkxqYXZhL2xh
-bmcvT2JqZWN0O3hwdAADT25leHBzcgAfb3JnLmRyb29scy5iYXNlLkNsYXNzT2JqZWN0VHlwZdzs
-2BfUlPv9AgACSQAJdmFsdWVUeXBlTAAPb2JqZWN0VHlwZUNsYXNzcQB+ACl4cAAAANJxAH4ALHNx
-AH4AGwAAAAEAAAAAc3EAfgAXAAAAAXcEAAAAAXNxAH4AIHEAfgAnc3EAfgAocQB+ACx0AAhtZXNz
-YWdlMnNxAH4ALnQAA1R3b3hwc3EAfgAyAAAA0nEAfgAseHNyABJvcmcuZHJvb2xzLnJ1bGUuT3IV
-F4eAAV23IwIAAHhxAH4AE3NxAH4AFwAAAAJ3BAAAAApzcQB+ABsAAAACAAAAAHNxAH4AFwAAAAF3
-BAAAAAFzcQB+ACBxAH4AJ3EAfgA3c3EAfgAucQB+ADF4cHNxAH4AMgAAANJxAH4ALHNxAH4AGwAA
-AAP/////c3EAfgAXAAAAAXcEAAAAAXNxAH4AIHEAfgAncQB+ADdzcQB+AC5xAH4AOnhwc3EAfgAy
-AAAA0nEAfgAseHNxAH4APHNxAH4AFwAAAAJ3BAAAAApzcQB+ABsAAAAE/////3NxAH4AFwAAAAF3
-BAAAAAFzcQB+ACBxAH4AJ3NxAH4AKHEAfgAsdAAIbWVzc2FnZTNzcQB+AC5xAH4AMXhwc3EAfgAy
-AAAA0nEAfgAsc3EAfgAbAAAABf////5zcQB+ABcAAAABdwQAAAABc3EAfgAgcQB+ACdxAH4ATnNx
-AH4ALnQABVRocmVleHBzcQB+ADIAAADScQB+ACx4eHEAfgADcHQADUhlbGxvIFdvcmxkIDJzcQB+
-AAQAAAAAAAAAAAIAAAAAAAFwcQB+AAxzcgA4b3JnLmRyb29scy5yZXRlb28uUnVsZV9IZWxsb19X
-b3JsZF8yXzBDb25zZXF1ZW5jZUludm9rZXJuXqy++rNzagIAAHhwdXEAfgAPAAAAAHNxAH4AAT9A
-AAAAAAAMdwgAAAAQAAAAAHhwc3EAfgASc3EAfgAXAAAABHcEAAAACnNxAH4AEnNxAH4AFwAAAAJ3
-BAAAAApzcQB+ABsAAAAAAAAAAHNxAH4AFwAAAAF3BAAAAAFzcQB+ACBxAH4AJ3EAfgAqc3EAfgAu
-cQB+ADF4cHNxAH4AMgAAANJxAH4ALHNxAH4AGwAAAAEAAAAAc3EAfgAXAAAAAXcEAAAAAXNxAH4A
-IHEAfgAncQB+ADdzcQB+AC5xAH4AOnhwc3EAfgAyAAAA0nEAfgAseHNxAH4APHNxAH4AFwAAAAJ3
-BAAAAApzcQB+ABsAAAACAAAAAHNxAH4AFwAAAAF3BAAAAAFzcQB+ACBxAH4AJ3EAfgA3c3EAfgAu
-cQB+ADF4cHNxAH4AMgAAANJxAH4ALHNxAH4AGwAAAAP/////c3EAfgAXAAAAAXcEAAAAAXNxAH4A
-IHEAfgAncQB+ADdzcQB+AC5xAH4AOnhwc3EAfgAyAAAA0nEAfgAseHNxAH4APHNxAH4AFwAAAAJ3
-BAAAAApzcQB+ABsAAAAE/////3NxAH4AFwAAAAF3BAAAAAFzcQB+ACBxAH4AJ3EAfgBOc3EAfgAu
-cQB+ADF4cHNxAH4AMgAAANJxAH4ALHNxAH4AGwAAAAX////+c3EAfgAXAAAAAXcEAAAAAXNxAH4A
-IHEAfgAncQB+AE5zcQB+AC5xAH4AVnhwc3EAfgAyAAAA0nEAfgAseHNyAB1vcmcuZHJvb2xzLnJ1
-bGUuRXZhbENvbmRpdGlvbj4q3Axyg48WAgACTAAKZXhwcmVzc2lvbnQAH0xvcmcvZHJvb2xzL3Nw
-aS9FdmFsRXhwcmVzc2lvbjtbABRyZXF1aXJlZERlY2xhcmF0aW9uc3EAfgAHeHEAfgAVc3IAMm9y
-Zy5kcm9vbHMucmV0ZW9vLlJ1bGVfSGVsbG9fV29ybGRfMl8wRXZhbDBJbnZva2Vybl6svvqzc2oC
-AAB4cHVxAH4ADwAAAAB4cQB+AFhweAA=</byte-array>
+bHMucnVsZS5MaXRlcmFsQ29uc3RyYWludAAAAAAAAAFAAgACTAAJZXh0cmFjdG9ydAAfTG9yZy9k
+cm9vbHMvc3BpL0ZpZWxkRXh0cmFjdG9yO0wAC3Jlc3RyaWN0aW9udAAkTG9yZy9kcm9vbHMvcnVs
+ZS9MaXRlcmFsUmVzdHJpY3Rpb247eHBzcgAjb3JnLmRyb29scy5iYXNlLkNsYXNzRmllbGRFeHRy
+YWN0b3IAAAAAAAABQAIAAkwABWNsYXp6dAARTGphdmEvbGFuZy9DbGFzcztMAAlmaWVsZE5hbWVx
+AH4ABXhwdnIAEm9yZy5kcm9vbHMuTWVzc2FnZQAAAAAAAAAAAAAAeHB0AAhtZXNzYWdlMXNyACJv
+cmcuZHJvb2xzLnJ1bGUuTGl0ZXJhbFJlc3RyaWN0aW9uAAAAAAAAAUACAAJMAAlldmFsdWF0b3J0
+ABpMb3JnL2Ryb29scy9zcGkvRXZhbHVhdG9yO0wABWZpZWxkdAAbTG9yZy9kcm9vbHMvc3BpL0Zp
+ZWxkVmFsdWU7eHBzcgA9b3JnLmRyb29scy5iYXNlLmV2YWx1YXRvcnMuU3RyaW5nRmFjdG9yeSRT
+dHJpbmdFcXVhbEV2YWx1YXRvcgAAAAAAAAFAAgAAeHIAHW9yZy5kcm9vbHMuYmFzZS5CYXNlRXZh
+bHVhdG9yVSSLs2Wsrn8CAAJMAAhvcGVyYXRvcnQAJUxvcmcvZHJvb2xzL2Jhc2UvZXZhbHVhdG9y
+cy9PcGVyYXRvcjtMAAR0eXBldAAbTG9yZy9kcm9vbHMvYmFzZS9WYWx1ZVR5cGU7eHBzcgAjb3Jn
+LmRyb29scy5iYXNlLmV2YWx1YXRvcnMuT3BlcmF0b3IAAAAAAAABQAIAAUwACG9wZXJhdG9ycQB+
+AAV4cHQAAj09c3IAGW9yZy5kcm9vbHMuYmFzZS5WYWx1ZVR5cGUAAAAAAAABQAIAA0wACWNsYXNz
+VHlwZXEAfgAlTAAQZXZhbHVhdG9yRmFjdG9yeXQALUxvcmcvZHJvb2xzL2Jhc2UvZXZhbHVhdG9y
+cy9FdmFsdWF0b3JGYWN0b3J5O0wABG5hbWVxAH4ABXhwdnIAEGphdmEubGFuZy5TdHJpbmeg8KQ4
+ejuzQgIAAHhwc3IAKG9yZy5kcm9vbHMuYmFzZS5ldmFsdWF0b3JzLlN0cmluZ0ZhY3RvcnnnjP+p
+wAUavgIAAHhwdAAGU3RyaW5nc3IAGW9yZy5kcm9vbHMuYmFzZS5GaWVsZEltcGwAAAAAAAABQAIA
+AUwABXZhbHVldAASTGphdmEvbGFuZy9PYmplY3Q7eHB0AANPbmV4cHNyAB9vcmcuZHJvb2xzLmJh
+c2UuQ2xhc3NPYmplY3RUeXBl3OzYF9SU+/0CAAJMAA9vYmplY3RUeXBlQ2xhc3NxAH4AJUwACXZh
+bHVlVHlwZXEAfgAxeHBxAH4AKHNxAH4ANnZyABBqYXZhLmxhbmcuT2JqZWN0AAAAAAAAAAAAAAB4
+cHNyAChvcmcuZHJvb2xzLmJhc2UuZXZhbHVhdG9ycy5PYmplY3RGYWN0b3J5iWJzm94ZVjkCAAB4
+cHQABk9iamVjdHNxAH4AGwAAAAEAAAAAc3EAfgAXAAAAAXcEAAAAAXNxAH4AIHNxAH4AJHEAfgAo
+dAAIbWVzc2FnZTJzcQB+ACpxAH4AMnNxAH4APnQAA1R3b3hwc3EAfgBCcQB+AChxAH4ARHhzcgAS
+b3JnLmRyb29scy5ydWxlLk9yFReHgAFdtyMCAAB4cQB+ABNzcQB+ABcAAAACdwQAAAAKc3EAfgAb
+AAAAAgAAAABzcQB+ABcAAAABdwQAAAABc3EAfgAgcQB+AE1zcQB+ACpxAH4AMnNxAH4APnEAfgBB
+eHBzcQB+AEJxAH4AKHEAfgBEc3EAfgAbAAAAA/////9zcQB+ABcAAAABdwQAAAABc3EAfgAgcQB+
+AE1zcQB+ACpxAH4AMnNxAH4APnEAfgBReHBzcQB+AEJxAH4AKHEAfgBEeHNxAH4AU3NxAH4AFwAA
+AAJ3BAAAAApzcQB+ABsAAAAE/////3NxAH4AFwAAAAF3BAAAAAFzcQB+ACBzcQB+ACRxAH4AKHQA
+CG1lc3NhZ2Uzc3EAfgAqcQB+ADJzcQB+AD5xAH4AQXhwc3EAfgBCcQB+AChxAH4ARHNxAH4AGwAA
+AAX////+c3EAfgAXAAAAAXcEAAAAAXNxAH4AIHEAfgBnc3EAfgAqcQB+ADJzcQB+AD50AAVUaHJl
+ZXhwc3EAfgBCcQB+AChxAH4ARHh4cQB+AANwdAANSGVsbG8gV29ybGQgMnNxAH4ABAAAAAAAAAAA
+AgAAAAAAAXBxAH4ADHNyADhvcmcuZHJvb2xzLnJldGVvby5SdWxlX0hlbGxvX1dvcmxkXzJfMENv
+bnNlcXVlbmNlSW52b2tlcm5erL76s3NqAgAAeHB1cQB+AA8AAAAAc3EAfgABP0AAAAAAAAx3CAAA
+ABAAAAAAeHBzcQB+ABJzcQB+ABcAAAAEdwQAAAAKc3EAfgASc3EAfgAXAAAAAncEAAAACnNxAH4A
+GwAAAAAAAAAAc3EAfgAXAAAAAXcEAAAAAXNxAH4AIHEAfgAmc3EAfgAqcQB+ADJzcQB+AD5xAH4A
+QXhwc3EAfgBCcQB+AChxAH4ARHNxAH4AGwAAAAEAAAAAc3EAfgAXAAAAAXcEAAAAAXNxAH4AIHEA
+fgBNc3EAfgAqcQB+ADJzcQB+AD5xAH4AUXhwc3EAfgBCcQB+AChxAH4ARHhzcQB+AFNzcQB+ABcA
+AAACdwQAAAAKc3EAfgAbAAAAAgAAAABzcQB+ABcAAAABdwQAAAABc3EAfgAgcQB+AE1zcQB+ACpx
+AH4AMnNxAH4APnEAfgBBeHBzcQB+AEJxAH4AKHEAfgBEc3EAfgAbAAAAA/////9zcQB+ABcAAAAB
+dwQAAAABc3EAfgAgcQB+AE1zcQB+ACpxAH4AMnNxAH4APnEAfgBReHBzcQB+AEJxAH4AKHEAfgBE
+eHNxAH4AU3NxAH4AFwAAAAJ3BAAAAApzcQB+ABsAAAAE/////3NxAH4AFwAAAAF3BAAAAAFzcQB+
+ACBxAH4AZ3NxAH4AKnEAfgAyc3EAfgA+cQB+AEF4cHNxAH4AQnEAfgAocQB+AERzcQB+ABsAAAAF
+/////nNxAH4AFwAAAAF3BAAAAAFzcQB+ACBxAH4AZ3NxAH4AKnEAfgAyc3EAfgA+cQB+AHF4cHNx
+AH4AQnEAfgAocQB+AER4c3IAHW9yZy5kcm9vbHMucnVsZS5FdmFsQ29uZGl0aW9uPircDHKDjxYC
+AAJMAApleHByZXNzaW9udAAfTG9yZy9kcm9vbHMvc3BpL0V2YWxFeHByZXNzaW9uO1sAFHJlcXVp
+cmVkRGVjbGFyYXRpb25zcQB+AAd4cQB+ABVzcgAyb3JnLmRyb29scy5yZXRlb28uUnVsZV9IZWxs
+b19Xb3JsZF8yXzBFdmFsMEludm9rZXJuXqy++rNzagIAAHhwdXEAfgAPAAAAAHhxAH4Ac3B4AA==
+</byte-array>
</org.drools.rule.Package>
</entry>
</map>
- <byte-array>rO0ABXQAJDk3YzVmMTEyLTg4MjctNDYxZS04NWY3LTIzMjQ5ZWNhMjgzOHNyAClvcmcuZHJvb2xz
+ <byte-array>rO0ABXQAJGIyMDZlMTYwLWMxMTYtNDVhNC1hMDVlLTQ3ZWM5YjIxN2YzZnNyAClvcmcuZHJvb2xz
LnJldGVvby5SZXRlb29GYWN0SGFuZGxlRmFjdG9yeQAAAAAAAAEsAgAAeHIAK29yZy5kcm9vbHMu
Y29tbW9uLkFic3RyYWN0RmFjdEhhbmRsZUZhY3RvcnlrwcaUre4SdAIAA0oAB2NvdW50ZXJKAAJp
ZEwADmZhY3RIYW5kbGVQb29sdAAkTG9yZy9kcm9vbHMvdXRpbC9QcmltaXRpdmVMb25nU3RhY2s7
@@ -379,86 +402,97 @@
cm9vbHMucnVsZS5Db2x1bW5/ObACQK9R5gIABUkABWluZGV4SQAGb2Zmc2V0TAALY29uc3RyYWlu
dHNxAH4ALEwAC2RlY2xhcmF0aW9udAAdTG9yZy9kcm9vbHMvcnVsZS9EZWNsYXJhdGlvbjtMAApv
YmplY3RUeXBlcQB+ACh4cAAAAAAAAAAAc3EAfgAlAAAAAXcEAAAAAXNyACFvcmcuZHJvb2xzLnJ1
-bGUuTGl0ZXJhbENvbnN0cmFpbnQDkvrW5PmSswIAA0wACWV2YWx1YXRvcnQAGkxvcmcvZHJvb2xz
-L3NwaS9FdmFsdWF0b3I7TAAJZXh0cmFjdG9ydAAfTG9yZy9kcm9vbHMvc3BpL0ZpZWxkRXh0cmFj
-dG9yO0wABWZpZWxkdAAbTG9yZy9kcm9vbHMvc3BpL0ZpZWxkVmFsdWU7eHBzcgA9b3JnLmRyb29s
-cy5iYXNlLmV2YWx1YXRvcnMuU3RyaW5nRmFjdG9yeSRTdHJpbmdFcXVhbEV2YWx1YXRvcklP5b3Q
-5UiWAgAAeHIAHW9yZy5kcm9vbHMuYmFzZS5CYXNlRXZhbHVhdG9yrkFxrDThjWsCAAJJAAhvcGVy
-YXRvckkABHR5cGV4cAAAAAEAAAC0c3IAI29yZy5kcm9vbHMuYmFzZS5DbGFzc0ZpZWxkRXh0cmFj
-dG9yGeJAAYkQ8aMCAAJMAAVjbGF6enQAEUxqYXZhL2xhbmcvQ2xhc3M7TAAJZmllbGROYW1lcQB+
-AEx4cHZyABJvcmcuZHJvb2xzLk1lc3NhZ2UAAAAAAAAAAAAAAHhwdAAIbWVzc2FnZTFzcgAZb3Jn
-LmRyb29scy5iYXNlLkZpZWxkSW1wbK6ZTfSs3XZEAgABTAAFdmFsdWV0ABJMamF2YS9sYW5nL09i
-amVjdDt4cHEAfgA0eHBzcgAfb3JnLmRyb29scy5iYXNlLkNsYXNzT2JqZWN0VHlwZdzs2BfUlPv9
-AgACSQAJdmFsdWVUeXBlTAAPb2JqZWN0VHlwZUNsYXNzcQB+AGx4cAAAANJxAH4Ab3NxAH4AXwAA
-AAEAAAAAc3EAfgAlAAAAAXcEAAAAAXNxAH4AY3EAfgBqc3EAfgBrcQB+AG90AAhtZXNzYWdlMnNx
-AH4AcXQAA1R3b3hwc3EAfgB0AAAA0nEAfgBveHNyABJvcmcuZHJvb2xzLnJ1bGUuT3IVF4eAAV23
-IwIAAHhxAH4AWXNxAH4AJQAAAAJ3BAAAAApzcQB+AF8AAAACAAAAAHNxAH4AJQAAAAF3BAAAAAFz
-cQB+AGNxAH4AanEAfgB5c3EAfgBxcQB+ADR4cHNxAH4AdAAAANJxAH4Ab3NxAH4AXwAAAAP/////
-c3EAfgAlAAAAAXcEAAAAAXNxAH4AY3EAfgBqcQB+AHlzcQB+AHFxAH4AfHhwc3EAfgB0AAAA0nEA
-fgBveHNxAH4AfnNxAH4AJQAAAAJ3BAAAAApzcQB+AF8AAAAE/////3NxAH4AJQAAAAF3BAAAAAFz
-cQB+AGNxAH4AanNxAH4Aa3EAfgBvdAAIbWVzc2FnZTNzcQB+AHFxAH4ANHhwc3EAfgB0AAAA0nEA
-fgBvc3EAfgBfAAAABf////5zcQB+ACUAAAABdwQAAAABc3EAfgBjcQB+AGpxAH4AkHNxAH4AcXQA
-BVRocmVleHBzcQB+AHQAAADScQB+AG94eHQADUhlbGxvIFdvcmxkIDFwcQB+AEZzcgAjb3JnLmRy
-b29scy5yZXRlb28uRXZhbENvbmRpdGlvbk5vZGUbkCfPlIvj4AIAAkwACWNvbmRpdGlvbnQAH0xv
-cmcvZHJvb2xzL3J1bGUvRXZhbENvbmRpdGlvbjtMAAt0dXBsZVNvdXJjZXEAfgBBeHEAfgA8AAEA
-AAATAAAAAHNxAH4AJQAAAAF3BAAAAAFzcQB+AEgAAAAAABQAAAAAc3EAfgBLAAAAAAAAAAACAAAA
-AAABcHEAfgBSc3IAOG9yZy5kcm9vbHMucmV0ZW9vLlJ1bGVfSGVsbG9fV29ybGRfMl8wQ29uc2Vx
-dWVuY2VJbnZva2Vybl6svvqzc2oCAAB4cHVxAH4AVQAAAABzcQB+AA0/QAAAAAAADHcIAAAAEAAA
-AAB4cHNxAH4AWHNxAH4AJQAAAAR3BAAAAApzcQB+AFhzcQB+ACUAAAACdwQAAAAKc3EAfgBfAAAA
-AAAAAABzcQB+ACUAAAABdwQAAAABc3EAfgBjcQB+AGpxAH4AbXNxAH4AcXEAfgA0eHBzcQB+AHQA
-AADScQB+AG9zcQB+AF8AAAABAAAAAHNxAH4AJQAAAAF3BAAAAAFzcQB+AGNxAH4AanEAfgB5c3EA
-fgBxcQB+AHx4cHNxAH4AdAAAANJxAH4Ab3hzcQB+AH5zcQB+ACUAAAACdwQAAAAKc3EAfgBfAAAA
-AgAAAABzcQB+ACUAAAABdwQAAAABc3EAfgBjcQB+AGpxAH4AeXNxAH4AcXEAfgA0eHBzcQB+AHQA
-AADScQB+AG9zcQB+AF8AAAAD/////3NxAH4AJQAAAAF3BAAAAAFzcQB+AGNxAH4AanEAfgB5c3EA
-fgBxcQB+AHx4cHNxAH4AdAAAANJxAH4Ab3hzcQB+AH5zcQB+ACUAAAACdwQAAAAKc3EAfgBfAAAA
-BP////9zcQB+ACUAAAABdwQAAAABc3EAfgBjcQB+AGpxAH4AkHNxAH4AcXEAfgA0eHBzcQB+AHQA
-AADScQB+AG9zcQB+AF8AAAAF/////nNxAH4AJQAAAAF3BAAAAAFzcQB+AGNxAH4AanEAfgCQc3EA
-fgBxcQB+AJh4cHNxAH4AdAAAANJxAH4Ab3hzcgAdb3JnLmRyb29scy5ydWxlLkV2YWxDb25kaXRp
-b24+KtwMcoOPFgIAAkwACmV4cHJlc3Npb250AB9Mb3JnL2Ryb29scy9zcGkvRXZhbEV4cHJlc3Np
-b247WwAUcmVxdWlyZWREZWNsYXJhdGlvbnNxAH4ATnhxAH4AWnNyADJvcmcuZHJvb2xzLnJldGVv
-by5SdWxlX0hlbGxvX1dvcmxkXzJfMEV2YWwwSW52b2tlcm5erL76s3NqAgAAeHB1cQB+AFUAAAAA
-eHQADUhlbGxvIFdvcmxkIDJwcQB+AJ14cQB+AM1xAH4ARnhzcgAgb3JnLmRyb29scy5jb21tb24u
-QmV0YU5vZGVCaW5kZXLZOk2QQfBaswIAAVsAC2NvbnN0cmFpbnRzdAAhW0xvcmcvZHJvb2xzL3Nw
-aS9GaWVsZENvbnN0cmFpbnQ7eHB1cgAhW0xvcmcuZHJvb2xzLnNwaS5GaWVsZENvbnN0cmFpbnQ7
-mvaX9rRKD8YCAAB4cAAAAAFzcgAtb3JnLmRyb29scy5jb21tb24uSW5zdGFuY2VOb3RFcXVhbHND
-b25zdHJhaW50u86LzZRlbJsCAAJJAAtvdGhlckNvbHVtblsADGRlY2xhcmF0aW9uc3EAfgBOeHAA
-AAACdXEAfgBVAAAAAHEAfgBEc3EAfgA1AAEAAAAIAAAAA3NxAH4AJAAAAAJ3BAAAAAJxAH4ARnNx
-AH4APwAAAAAADwAAAAFzcQB+ACUAAAACdwQAAAACc3EAfgBIAAAAAAAQAAAAAHEAfgBRcQB+ANxz
-cQB+AJsAAQAAABcAAAAAc3EAfgAlAAAAAXcEAAAAAXNxAH4ASAAAAAAAGAAAAABxAH4AoHEAfgDf
-eHEAfgDNcQB+ANx4c3EAfgDSdXEAfgDVAAAAAXNxAH4A1wAAAAJ1cQB+AFUAAAAAc3EAfgA/AAAA
-AAAOAAAAA3NxAH4AJQAAAAJ3BAAAAAJxAH4A3HNxAH4APwAAAAAAEQAAAAFzcQB+ACUAAAACdwQA
-AAACc3EAfgBIAAAAAAASAAAAAHEAfgBRcQB+AOhzcQB+AJsAAQAAABkAAAAAc3EAfgAlAAAAAXcE
-AAAAAXNxAH4ASAAAAAAAGgAAAABxAH4AoHEAfgDreHEAfgDNcQB+AOh4c3EAfgDSdXEAfgDVAAAA
-AXNxAH4A1wAAAAJ1cQB+AFUAAAAAcQB+AOZzcQB+ADUAAQAAAAsAAAADc3EAfgAkAAAAAncEAAAA
-AnNxAH4APwAAAAAADAAAAAFzcQB+ACUAAAACdwQAAAACc3EAfgBIAAAAAAANAAAAAHEAfgBRcQB+
-APRzcQB+AJsAAQAAABUAAAAAc3EAfgAlAAAAAXcEAAAAAXNxAH4ASAAAAAAAFgAAAABxAH4AoHEA
-fgD3eHEAfgDNcQB+APR4c3EAfgDSdXEAfgDVAAAAAXNxAH4A1wAAAAJ1cQB+AFUAAAAAcQB+AERx
-AH4A8nEAfgDoeHEAfgCWcQB+ACp4c3EAfgDSdXEAfgDVAAAAAXNxAH4A1wAAAAF1cQB+AFUAAAAA
-cQB+AEJzcQB+ADUAAQAAAAQAAAALc3EAfgAkAAAAAncEAAAAAnEAfgBCcQB+AOZ4cQB+AHhxAH4A
-KnEAfgDaeHEAfgCPcQB+ACpxAH4A9HhzcQB+ANJ1cQB+ANUAAAABc3EAfgDXAAAAAXVxAH4AVQAA
-AABxAH4AQnNxAH4ANQABAAAABgAAAANzcQB+ACQAAAABdwQAAAABcQB+AER4cQB+AINxAH4AKnEA
-fgDmeHNxAH4A0nVxAH4A1QAAAAFzcQB+ANcAAAAAdXEAfgBVAAAAAHEAfgA9cQB+AQJ4c3EAfgDS
-dXEAfgDVAAAAAHEAfgA4eHEAfgBncQB+ACp4cQB+AGdxAH4AMnNxAH4AMHNxAH4ADT9AAAAAAAAM
-dwgAAAAQAAAAAnEAfgCYcQB+APJxAH4ANHEAfgDaeHEAfgCPcQB+ARBzcQB+ADBzcQB+AA0/QAAA
-AAAADHcIAAAAEAAAAAJxAH4AfHEAfgECcQB+ADRxAH4BCHhxAH4AeHEAfgESeHNxAH4AJQAAAAV3
-BAAAAAdxAH4AOHEAfgECcQB+AQhxAH4A2nEAfgDyeHEAfgDyc3EAfgAlAAAAAHcEAAAAAXhxAH4A
-dXEAfgAjc3EAfgANP0AAAAAAAAx3CAAAABAAAAABcQB+AHVxAH4AKnhzcgAmb3JnLmRyb29scy5z
-cGkuQ2xhc3NPYmplY3RUeXBlUmVzb2x2ZXIChNj8cLGw6wIAAUwACm9iamVjdFR5cGV0AENMb3Jn
-L2Ryb29scy9zcGkvQ2xhc3NPYmplY3RUeXBlUmVzb2x2ZXIkTW9kaWZpZWFibGVDbGFzc09iamVj
-dFR5cGU7eHBzcgBBb3JnLmRyb29scy5zcGkuQ2xhc3NPYmplY3RUeXBlUmVzb2x2ZXIkTW9kaWZp
-ZWFibGVDbGFzc09iamVjdFR5cGVEpauUAjf7NQIAAHhxAH4AdAAAASxwc3IAH29yZy5kcm9vbHMu
-cmV0ZW9vLlJldGVvb0J1aWxkZXIYHVn7j8gD8AIACUkAF2N1cnJlbnRPZmZzZXRBZGp1c3RtZW50
-SQACaWRMAA1hdHRhY2hlZE5vZGVzcQB+ABBMAAxkZWNsYXJhdGlvbnNxAH4AEEwADG9iamVjdFNv
-dXJjZXEAfgA3TAAKb2JqZWN0VHlwZXEAfgAQTAAIcmVzb2x2ZXJxAH4AH0wABXJ1bGVzcQB+ABBM
-AAt0dXBsZVNvdXJjZXEAfgBBeHAAAAAAAAAAG3NxAH4ADT9AAAAAAAAYdwgAAAAgAAAAEnEAfgDf
-cQB+AN9xAH4AQnEAfgBCcQB+APJxAH4A8nEAfgCdcQB+AJ1xAH4A3HEAfgDccQB+ANpxAH4A2nEA
-fgD0cQB+APRxAH4A93EAfgD3cQB+AOhxAH4A6HEAfgA4cQB+ADhxAH4APXEAfgA9cQB+AQJxAH4B
-AnEAfgDmcQB+AOZxAH4A63EAfgDrcQB+AEZxAH4ARnEAfgBEcQB+AERxAH4AKnEAfgAqcQB+AQhx
-AH4BCHhzcQB+AA0/QAAAAAAADHcIAAAAEAAAAAB4cQB+APJzcgAXamF2YS51dGlsLkxpbmtlZEhh
-c2hNYXA0wE5cEGzA+wIAAVoAC2FjY2Vzc09yZGVyeHEAfgANP0AAAAAAAAx3CAAAABAAAAABcQB+
-AK1zcgARamF2YS5sYW5nLkludGVnZXIS4qCk94GHOAIAAUkABXZhbHVleHIAEGphdmEubGFuZy5O
-dW1iZXKGrJUdC5TgiwIAAHhwAAAAA3gAcQB+ARlzcQB+AA0/QAAAAAAADHcIAAAAEAAAAAJxAH4A
-UXVyAB1bTG9yZy5kcm9vbHMucmV0ZW9vLkJhc2VOb2RlOwvnyZNDnLPqAgAAeHAAAAAEcQB+AEpx
-AH4A9nEAfgDecQB+AOpxAH4AoHVxAH4BJgAAAARxAH4An3EAfgD5cQB+AOFxAH4A7XhxAH4A6w==
-</byte-array>
+bGUuTGl0ZXJhbENvbnN0cmFpbnQAAAAAAAABQAIAAkwACWV4dHJhY3RvcnQAH0xvcmcvZHJvb2xz
+L3NwaS9GaWVsZEV4dHJhY3RvcjtMAAtyZXN0cmljdGlvbnQAJExvcmcvZHJvb2xzL3J1bGUvTGl0
+ZXJhbFJlc3RyaWN0aW9uO3hwc3IAI29yZy5kcm9vbHMuYmFzZS5DbGFzc0ZpZWxkRXh0cmFjdG9y
+AAAAAAAAAUACAAJMAAVjbGF6enQAEUxqYXZhL2xhbmcvQ2xhc3M7TAAJZmllbGROYW1lcQB+AEx4
+cHZyABJvcmcuZHJvb2xzLk1lc3NhZ2UAAAAAAAAAAAAAAHhwdAAIbWVzc2FnZTFzcgAib3JnLmRy
+b29scy5ydWxlLkxpdGVyYWxSZXN0cmljdGlvbgAAAAAAAAFAAgACTAAJZXZhbHVhdG9ydAAaTG9y
+Zy9kcm9vbHMvc3BpL0V2YWx1YXRvcjtMAAVmaWVsZHQAG0xvcmcvZHJvb2xzL3NwaS9GaWVsZFZh
+bHVlO3hwc3IAPW9yZy5kcm9vbHMuYmFzZS5ldmFsdWF0b3JzLlN0cmluZ0ZhY3RvcnkkU3RyaW5n
+RXF1YWxFdmFsdWF0b3IAAAAAAAABQAIAAHhyAB1vcmcuZHJvb2xzLmJhc2UuQmFzZUV2YWx1YXRv
+clUki7NlrK5/AgACTAAIb3BlcmF0b3J0ACVMb3JnL2Ryb29scy9iYXNlL2V2YWx1YXRvcnMvT3Bl
+cmF0b3I7TAAEdHlwZXQAG0xvcmcvZHJvb2xzL2Jhc2UvVmFsdWVUeXBlO3hwc3IAI29yZy5kcm9v
+bHMuYmFzZS5ldmFsdWF0b3JzLk9wZXJhdG9yAAAAAAAAAUACAAFMAAhvcGVyYXRvcnEAfgBMeHB0
+AAI9PXNyABlvcmcuZHJvb2xzLmJhc2UuVmFsdWVUeXBlAAAAAAAAAUACAANMAAljbGFzc1R5cGVx
+AH4AaEwAEGV2YWx1YXRvckZhY3Rvcnl0AC1Mb3JnL2Ryb29scy9iYXNlL2V2YWx1YXRvcnMvRXZh
+bHVhdG9yRmFjdG9yeTtMAARuYW1lcQB+AEx4cHZyABBqYXZhLmxhbmcuU3RyaW5noPCkOHo7s0IC
+AAB4cHNyAChvcmcuZHJvb2xzLmJhc2UuZXZhbHVhdG9ycy5TdHJpbmdGYWN0b3J554z/qcAFGr4C
+AAB4cHQABlN0cmluZ3NyABlvcmcuZHJvb2xzLmJhc2UuRmllbGRJbXBsAAAAAAAAAUACAAFMAAV2
+YWx1ZXQAEkxqYXZhL2xhbmcvT2JqZWN0O3hwcQB+ADR4cHNyAB9vcmcuZHJvb2xzLmJhc2UuQ2xh
+c3NPYmplY3RUeXBl3OzYF9SU+/0CAAJMAA9vYmplY3RUeXBlQ2xhc3NxAH4AaEwACXZhbHVlVHlw
+ZXEAfgB0eHBxAH4Aa3NxAH4AeXZyABBqYXZhLmxhbmcuT2JqZWN0AAAAAAAAAAAAAAB4cHNyAChv
+cmcuZHJvb2xzLmJhc2UuZXZhbHVhdG9ycy5PYmplY3RGYWN0b3J5iWJzm94ZVjkCAAB4cHQABk9i
+amVjdHNxAH4AXwAAAAEAAAAAc3EAfgAlAAAAAXcEAAAAAXNxAH4AY3NxAH4AZ3EAfgBrdAAIbWVz
+c2FnZTJzcQB+AG1xAH4AdXNxAH4AgXQAA1R3b3hwc3EAfgCEcQB+AGtxAH4AhnhzcgASb3JnLmRy
+b29scy5ydWxlLk9yFReHgAFdtyMCAAB4cQB+AFlzcQB+ACUAAAACdwQAAAAKc3EAfgBfAAAAAgAA
+AABzcQB+ACUAAAABdwQAAAABc3EAfgBjcQB+AI9zcQB+AG1xAH4AdXNxAH4AgXEAfgA0eHBzcQB+
+AIRxAH4Aa3EAfgCGc3EAfgBfAAAAA/////9zcQB+ACUAAAABdwQAAAABc3EAfgBjcQB+AI9zcQB+
+AG1xAH4AdXNxAH4AgXEAfgCTeHBzcQB+AIRxAH4Aa3EAfgCGeHNxAH4AlXNxAH4AJQAAAAJ3BAAA
+AApzcQB+AF8AAAAE/////3NxAH4AJQAAAAF3BAAAAAFzcQB+AGNzcQB+AGdxAH4Aa3QACG1lc3Nh
+Z2Uzc3EAfgBtcQB+AHVzcQB+AIFxAH4ANHhwc3EAfgCEcQB+AGtxAH4AhnNxAH4AXwAAAAX////+
+c3EAfgAlAAAAAXcEAAAAAXNxAH4AY3EAfgCpc3EAfgBtcQB+AHVzcQB+AIF0AAVUaHJlZXhwc3EA
+fgCEcQB+AGtxAH4Ahnh4dAANSGVsbG8gV29ybGQgMXBxAH4ARnNyACNvcmcuZHJvb2xzLnJldGVv
+by5FdmFsQ29uZGl0aW9uTm9kZRuQJ8+Ui+PgAgACTAAJY29uZGl0aW9udAAfTG9yZy9kcm9vbHMv
+cnVsZS9FdmFsQ29uZGl0aW9uO0wAC3R1cGxlU291cmNlcQB+AEF4cQB+ADwAAQAAABMAAAAAc3EA
+fgAlAAAAAXcEAAAAAXNxAH4ASAAAAAAAFAAAAABzcQB+AEsAAAAAAAAAAAIAAAAAAAFwcQB+AFJz
+cgA4b3JnLmRyb29scy5yZXRlb28uUnVsZV9IZWxsb19Xb3JsZF8yXzBDb25zZXF1ZW5jZUludm9r
+ZXJuXqy++rNzagIAAHhwdXEAfgBVAAAAAHNxAH4ADT9AAAAAAAAMdwgAAAAQAAAAAHhwc3EAfgBY
+c3EAfgAlAAAABHcEAAAACnNxAH4AWHNxAH4AJQAAAAJ3BAAAAApzcQB+AF8AAAAAAAAAAHNxAH4A
+JQAAAAF3BAAAAAFzcQB+AGNxAH4AaXNxAH4AbXEAfgB1c3EAfgCBcQB+ADR4cHNxAH4AhHEAfgBr
+cQB+AIZzcQB+AF8AAAABAAAAAHNxAH4AJQAAAAF3BAAAAAFzcQB+AGNxAH4Aj3NxAH4AbXEAfgB1
+c3EAfgCBcQB+AJN4cHNxAH4AhHEAfgBrcQB+AIZ4c3EAfgCVc3EAfgAlAAAAAncEAAAACnNxAH4A
+XwAAAAIAAAAAc3EAfgAlAAAAAXcEAAAAAXNxAH4AY3EAfgCPc3EAfgBtcQB+AHVzcQB+AIFxAH4A
+NHhwc3EAfgCEcQB+AGtxAH4AhnNxAH4AXwAAAAP/////c3EAfgAlAAAAAXcEAAAAAXNxAH4AY3EA
+fgCPc3EAfgBtcQB+AHVzcQB+AIFxAH4Ak3hwc3EAfgCEcQB+AGtxAH4AhnhzcQB+AJVzcQB+ACUA
+AAACdwQAAAAKc3EAfgBfAAAABP////9zcQB+ACUAAAABdwQAAAABc3EAfgBjcQB+AKlzcQB+AG1x
+AH4AdXNxAH4AgXEAfgA0eHBzcQB+AIRxAH4Aa3EAfgCGc3EAfgBfAAAABf////5zcQB+ACUAAAAB
+dwQAAAABc3EAfgBjcQB+AKlzcQB+AG1xAH4AdXNxAH4AgXEAfgCzeHBzcQB+AIRxAH4Aa3EAfgCG
+eHNyAB1vcmcuZHJvb2xzLnJ1bGUuRXZhbENvbmRpdGlvbj4q3Axyg48WAgACTAAKZXhwcmVzc2lv
+bnQAH0xvcmcvZHJvb2xzL3NwaS9FdmFsRXhwcmVzc2lvbjtbABRyZXF1aXJlZERlY2xhcmF0aW9u
+c3EAfgBOeHEAfgBac3IAMm9yZy5kcm9vbHMucmV0ZW9vLlJ1bGVfSGVsbG9fV29ybGRfMl8wRXZh
+bDBJbnZva2Vybl6svvqzc2oCAAB4cHVxAH4AVQAAAAB4dAANSGVsbG8gV29ybGQgMnBxAH4AuHhx
+AH4A7nEAfgBGeHNyACBvcmcuZHJvb2xzLmNvbW1vbi5CZXRhTm9kZUJpbmRlctk6TZBB8FqzAgAB
+WwALY29uc3RyYWludHN0ACFbTG9yZy9kcm9vbHMvc3BpL0ZpZWxkQ29uc3RyYWludDt4cHVyACFb
+TG9yZy5kcm9vbHMuc3BpLkZpZWxkQ29uc3RyYWludDua9pf2tEoPxgIAAHhwAAAAAXNyAC1vcmcu
+ZHJvb2xzLmNvbW1vbi5JbnN0YW5jZU5vdEVxdWFsc0NvbnN0cmFpbnS7zovNlGVsmwIAAkkAC290
+aGVyQ29sdW1uWwAMZGVjbGFyYXRpb25zcQB+AE54cAAAAAJ1cQB+AFUAAAAAcQB+AERzcQB+ADUA
+AQAAAAgAAAADc3EAfgAkAAAAAncEAAAAAnEAfgBGc3EAfgA/AAAAAAAPAAAAAXNxAH4AJQAAAAJ3
+BAAAAAJzcQB+AEgAAAAAABAAAAAAcQB+AFFxAH4A/XNxAH4AtgABAAAAFwAAAABzcQB+ACUAAAAB
+dwQAAAABc3EAfgBIAAAAAAAYAAAAAHEAfgC7cQB+AQB4cQB+AO5xAH4A/XhzcQB+APN1cQB+APYA
+AAABc3EAfgD4AAAAAnVxAH4AVQAAAABzcQB+AD8AAAAAAA4AAAADc3EAfgAlAAAAAncEAAAAAnEA
+fgD9c3EAfgA/AAAAAAARAAAAAXNxAH4AJQAAAAJ3BAAAAAJzcQB+AEgAAAAAABIAAAAAcQB+AFFx
+AH4BCXNxAH4AtgABAAAAGQAAAABzcQB+ACUAAAABdwQAAAABc3EAfgBIAAAAAAAaAAAAAHEAfgC7
+cQB+AQx4cQB+AO5xAH4BCXhzcQB+APN1cQB+APYAAAABc3EAfgD4AAAAAnVxAH4AVQAAAABxAH4B
+B3NxAH4ANQABAAAACwAAAANzcQB+ACQAAAACdwQAAAACc3EAfgA/AAAAAAAMAAAAAXNxAH4AJQAA
+AAJ3BAAAAAJzcQB+AEgAAAAAAA0AAAAAcQB+AFFxAH4BFXNxAH4AtgABAAAAFQAAAABzcQB+ACUA
+AAABdwQAAAABc3EAfgBIAAAAAAAWAAAAAHEAfgC7cQB+ARh4cQB+AO5xAH4BFXhzcQB+APN1cQB+
+APYAAAABc3EAfgD4AAAAAnVxAH4AVQAAAABxAH4ARHEAfgETcQB+AQl4cQB+ALBxAH4AKnhzcQB+
+APN1cQB+APYAAAABc3EAfgD4AAAAAXVxAH4AVQAAAABxAH4AQnNxAH4ANQABAAAABAAAAAtzcQB+
+ACQAAAACdwQAAAACcQB+AEJxAH4BB3hxAH4AjnEAfgAqcQB+APt4cQB+AKhxAH4AKnEAfgEVeHNx
+AH4A83VxAH4A9gAAAAFzcQB+APgAAAABdXEAfgBVAAAAAHEAfgBCc3EAfgA1AAEAAAAGAAAAA3Nx
+AH4AJAAAAAF3BAAAAAFxAH4ARHhxAH4AmnEAfgAqcQB+AQd4c3EAfgDzdXEAfgD2AAAAAXNxAH4A
++AAAAAB1cQB+AFUAAAAAcQB+AD1xAH4BI3hzcQB+APN1cQB+APYAAAAAcQB+ADh4cQB+AGZxAH4A
+KnhxAH4AZnEAfgAyc3EAfgAwc3EAfgANP0AAAAAAAAx3CAAAABAAAAACcQB+AJNxAH4BI3EAfgA0
+cQB+ASl4cQB+AI5xAH4BMXNxAH4AMHNxAH4ADT9AAAAAAAAMdwgAAAAQAAAAAnEAfgCzcQB+ARNx
+AH4ANHEAfgD7eHEAfgCocQB+ATN4c3EAfgAlAAAABXcEAAAAB3EAfgA4cQB+ASNxAH4BKXEAfgD7
+cQB+ARN4cQB+ARNzcQB+ACUAAAAAdwQAAAABeHEAfgCFcQB+ACNzcQB+AA0/QAAAAAAADHcIAAAA
+EAAAAAFxAH4AhXEAfgAqeHNyACZvcmcuZHJvb2xzLnNwaS5DbGFzc09iamVjdFR5cGVSZXNvbHZl
+cgKE2PxwsbDrAgABTAAKb2JqZWN0VHlwZXQAQ0xvcmcvZHJvb2xzL3NwaS9DbGFzc09iamVjdFR5
+cGVSZXNvbHZlciRNb2RpZmllYWJsZUNsYXNzT2JqZWN0VHlwZTt4cHNyAEFvcmcuZHJvb2xzLnNw
+aS5DbGFzc09iamVjdFR5cGVSZXNvbHZlciRNb2RpZmllYWJsZUNsYXNzT2JqZWN0VHlwZUSlq5QC
+N/s1AgAAeHEAfgCEcHNxAH4AeXBwdAAEbnVsbHNyAB9vcmcuZHJvb2xzLnJldGVvby5SZXRlb29C
+dWlsZGVyGB1Z+4/IA/ACAAlJABdjdXJyZW50T2Zmc2V0QWRqdXN0bWVudEkAAmlkTAANYXR0YWNo
+ZWROb2Rlc3EAfgAQTAAMZGVjbGFyYXRpb25zcQB+ABBMAAxvYmplY3RTb3VyY2VxAH4AN0wACm9i
+amVjdFR5cGVxAH4AEEwACHJlc29sdmVycQB+AB9MAAVydWxlc3EAfgAQTAALdHVwbGVTb3VyY2Vx
+AH4AQXhwAAAAAAAAABtzcQB+AA0/QAAAAAAAGHcIAAAAIAAAABJxAH4BFXEAfgEVcQB+AP1xAH4A
+/XEAfgD7cQB+APtxAH4BGHEAfgEYcQB+AQlxAH4BCXEAfgEjcQB+ASNxAH4AQnEAfgBCcQB+ARNx
+AH4BE3EAfgBEcQB+AERxAH4AOHEAfgA4cQB+AD1xAH4APXEAfgEHcQB+AQdxAH4BAHEAfgEAcQB+
+ACpxAH4AKnEAfgEMcQB+AQxxAH4ARnEAfgBGcQB+ALhxAH4AuHEAfgEpcQB+ASl4c3EAfgANP0AA
+AAAAAAx3CAAAABAAAAAAeHEAfgETc3IAF2phdmEudXRpbC5MaW5rZWRIYXNoTWFwNMBOXBBswPsC
+AAFaAAthY2Nlc3NPcmRlcnhxAH4ADT9AAAAAAAAMdwgAAAAQAAAAAXEAfgDJc3IAEWphdmEubGFu
+Zy5JbnRlZ2VyEuKgpPeBhzgCAAFJAAV2YWx1ZXhyABBqYXZhLmxhbmcuTnVtYmVyhqyVHQuU4IsC
+AAB4cAAAAAN4AHEAfgE6c3EAfgANP0AAAAAAAAx3CAAAABAAAAACcQB+AFF1cgAdW0xvcmcuZHJv
+b2xzLnJldGVvby5CYXNlTm9kZTsL58mTQ5yz6gIAAHhwAAAABHEAfgBKcQB+ARdxAH4A/3EAfgEL
+cQB+ALt1cQB+AUkAAAAEcQB+ALpxAH4BGnEAfgECcQB+AQ54cQB+AQw=</byte-array>
</org.drools.reteoo.ReteooRuleBase>
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/reteoo/OneAndTwoOrsPerson
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/reteoo/OneAndTwoOrsPerson 2006-08-02 21:58:31 UTC (rev 5420)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/reteoo/OneAndTwoOrsPerson 2006-08-03 00:14:06 UTC (rev 5421)
@@ -109,55 +109,69 @@
AAVpbmRleEkABm9mZnNldEwAC2NvbnN0cmFpbnRzcQB+ABNMAAtkZWNsYXJhdGlvbnQAHUxvcmcv
ZHJvb2xzL3J1bGUvRGVjbGFyYXRpb247TAAKb2JqZWN0VHlwZXQAG0xvcmcvZHJvb2xzL3NwaS9P
YmplY3RUeXBlO3hwAAAAAAAAAABzcQB+ABYAAAABdwQAAAABc3IAIW9yZy5kcm9vbHMucnVsZS5M
-aXRlcmFsQ29uc3RyYWludAOS+tbk+ZKzAgADTAAJZXZhbHVhdG9ydAAaTG9yZy9kcm9vbHMvc3Bp
-L0V2YWx1YXRvcjtMAAlleHRyYWN0b3J0AB9Mb3JnL2Ryb29scy9zcGkvRmllbGRFeHRyYWN0b3I7
-TAAFZmllbGR0ABtMb3JnL2Ryb29scy9zcGkvRmllbGRWYWx1ZTt4cHNyAD1vcmcuZHJvb2xzLmJh
-c2UuZXZhbHVhdG9ycy5TdHJpbmdGYWN0b3J5JFN0cmluZ0VxdWFsRXZhbHVhdG9ySU/lvdDlSJYC
-AAB4cgAdb3JnLmRyb29scy5iYXNlLkJhc2VFdmFsdWF0b3KuQXGsNOGNawIAAkkACG9wZXJhdG9y
-SQAEdHlwZXhwAAAAAQAAALRzcgAjb3JnLmRyb29scy5iYXNlLkNsYXNzRmllbGRFeHRyYWN0b3IZ
-4kABiRDxowIAAkwABWNsYXp6dAARTGphdmEvbGFuZy9DbGFzcztMAAlmaWVsZE5hbWVxAH4ABHhw
-dnIAEm9yZy5kcm9vbHMuTWVzc2FnZQAAAAAAAAAAAAAAeHB0AAhtZXNzYWdlMXNyABlvcmcuZHJv
-b2xzLmJhc2UuRmllbGRJbXBsrplN9KzddkQCAAFMAAV2YWx1ZXQAEkxqYXZhL2xhbmcvT2JqZWN0
-O3hwdAADT25leHBzcgAfb3JnLmRyb29scy5iYXNlLkNsYXNzT2JqZWN0VHlwZdzs2BfUlPv9AgAC
-SQAJdmFsdWVUeXBlTAAPb2JqZWN0VHlwZUNsYXNzcQB+ACh4cAAAANJxAH4AK3NxAH4AGgAAAAEA
-AAAAc3EAfgAWAAAAAXcEAAAAAXNxAH4AH3EAfgAmc3EAfgAncQB+ACt0AAhtZXNzYWdlMnNxAH4A
-LXQAA1R3b3hwc3EAfgAxAAAA0nEAfgAreHNyABJvcmcuZHJvb2xzLnJ1bGUuT3IVF4eAAV23IwIA
-AHhxAH4AEnNxAH4AFgAAAAJ3BAAAAApzcQB+ABoAAAACAAAAAHNxAH4AFgAAAAF3BAAAAAFzcQB+
-AB9xAH4AJnEAfgA2c3EAfgAtcQB+ADB4cHNxAH4AMQAAANJxAH4AK3NxAH4AEXNxAH4AFgAAAAJ3
-BAAAAApzcQB+ABoAAAADAAAAAHNxAH4AFgAAAAF3BAAAAAFzcQB+AB9xAH4AJnNxAH4AJ3ZyABFv
-cmcuZHJvb2xzLkNoZWVzZe+FAhE7Rf31AgACSQAFcHJpY2VMAAR0eXBlcQB+AAR4cHQABHR5cGVz
-cQB+AC10AAdzdGlsdG9ueHBzcQB+ADEAAADScQB+AEpzcQB+ABoAAAAEAAAAAHNxAH4AFgAAAAF3
-BAAAAAFzcQB+AB9xAH4AJnEAfgBIc3EAfgAtdAAEYnJpZXhwc3EAfgAxAAAA0nEAfgBKeHhzcQB+
-ADtzcQB+ABYAAAACdwQAAAAKc3EAfgAaAAAABQAAAABzcQB+ABYAAAABdwQAAAABc3EAfgAfcQB+
-ACZzcQB+ACdxAH4AK3QACG1lc3NhZ2Uzc3EAfgAtcQB+ADB4cHNxAH4AMQAAANJxAH4AK3NxAH4A
-GgAAAAb/////c3EAfgAWAAAAAXcEAAAAAXNxAH4AH3EAfgAmcQB+AFpzcQB+AC10AAVUaHJlZXhw
-c3EAfgAxAAAA0nEAfgAreHh0AA1IZWxsbyBXb3JsZCAxcHQAOG9yZy5kcm9vbHMucmV0ZW9vLlJ1
-bGVfSGVsbG9fV29ybGRfMl8wQ29uc2VxdWVuY2VJbnZva2Vyc3EAfgADAAAAAAAAAAACAAAAAAAB
-cHEAfgALc3IAOG9yZy5kcm9vbHMucmV0ZW9vLlJ1bGVfSGVsbG9fV29ybGRfMl8wQ29uc2VxdWVu
-Y2VJbnZva2Vybl6svvqzc2oCAAB4cHVxAH4ADgAAAAFzcgAbb3JnLmRyb29scy5ydWxlLkRlY2xh
-cmF0aW9uA3M8AfIg69YCAANJAAZjb2x1bW5MAAlleHRyYWN0b3J0ABpMb3JnL2Ryb29scy9zcGkv
-RXh0cmFjdG9yO0wACmlkZW50aWZpZXJxAH4ABHhwAAAAAHEAfgApdAAJJG1lc3NhZ2Uxc3EAfgAA
-P0AAAAAAAAx3CAAAABAAAAABcQB+AG1xAH4AbHhwc3EAfgARc3EAfgAWAAAABHcEAAAACnNxAH4A
-EXNxAH4AFgAAAAJ3BAAAAApzcQB+ABoAAAAAAAAAAHNxAH4AFgAAAAJ3BAAAAAJxAH4AbHNxAH4A
-H3EAfgAmcQB+AClzcQB+AC1xAH4AMHhwc3EAfgAxAAAA0nEAfgArc3EAfgAaAAAAAQAAAABzcQB+
-ABYAAAABdwQAAAABc3EAfgAfcQB+ACZxAH4ANnNxAH4ALXEAfgA5eHBzcQB+ADEAAADScQB+ACt4
-c3EAfgA7c3EAfgAWAAAAAncEAAAACnNxAH4AGgAAAAIAAAAAc3EAfgAWAAAAAXcEAAAAAXNxAH4A
-H3EAfgAmcQB+ADZzcQB+AC1xAH4AMHhwc3EAfgAxAAAA0nEAfgArc3EAfgARc3EAfgAWAAAAAncE
-AAAACnNxAH4AGgAAAAMAAAAAc3EAfgAWAAAAAXcEAAAAAXNxAH4AH3EAfgAmcQB+AEhzcQB+AC1x
-AH4ATXhwc3EAfgAxAAAA0nEAfgBKc3EAfgAaAAAABAAAAABzcQB+ABYAAAABdwQAAAABc3EAfgAf
-cQB+ACZxAH4ASHNxAH4ALXEAfgBTeHBzcQB+ADEAAADScQB+AEp4eHNxAH4AO3NxAH4AFgAAAAJ3
-BAAAAApzcQB+ABoAAAAFAAAAAHNxAH4AFgAAAAF3BAAAAAFzcQB+AB9xAH4AJnEAfgBac3EAfgAt
-cQB+ADB4cHNxAH4AMQAAANJxAH4AK3NxAH4AGgAAAAb/////c3EAfgAWAAAAAXcEAAAAAXNxAH4A
-H3EAfgAmcQB+AFpzcQB+AC1xAH4AYnhwc3EAfgAxAAAA0nEAfgAreHNxAH4AO3NxAH4AFgAAAAJ3
-BAAAAApzcQB+ABoAAAAH/////3NxAH4AFgAAAAF3BAAAAAFzcQB+AB9xAH4AJnNxAH4AJ3ZyABFv
-cmcuZHJvb2xzLlBlcnNvbiSkLwIXn7hmAgAISQADYWdlWgAFYWxpdmVDAANzZXhMAApiaWdEZWNp
-bWFsdAAWTGphdmEvbWF0aC9CaWdEZWNpbWFsO0wACmJpZ0ludGVnZXJ0ABZMamF2YS9tYXRoL0Jp
-Z0ludGVnZXI7TAAFbGlrZXNxAH4ABEwABG5hbWVxAH4ABEwABnN0YXR1c3EAfgAEeHB0AARuYW1l
-c3EAfgAtdAAEbWFya3hwc3EAfgAxAAAA0nEAfgClc3EAfgAaAAAACP////5zcQB+ABYAAAABdwQA
-AAABc3IAJ29yZy5kcm9vbHMucnVsZS5Cb3VuZFZhcmlhYmxlQ29uc3RyYWludHD61IBf/tZXAgAF
-SQAGY29sdW1uTAALZGVjbGFyYXRpb25xAH4AG0wACWV2YWx1YXRvcnEAfgAgTAAOZmllbGRFeHRy
-YWN0b3JxAH4AIVsAFHJlcXVpcmVkRGVjbGFyYXRpb25zcQB+AAZ4cAAAAABxAH4AbHEAfgAmcQB+
-AKF1cQB+AA4AAAABcQB+AGx4cHNxAH4AMQAAANJxAH4ApXh4dAANSGVsbG8gV29ybGQgMnB4</byte-array>
+aXRlcmFsQ29uc3RyYWludAAAAAAAAAFAAgACTAAJZXh0cmFjdG9ydAAfTG9yZy9kcm9vbHMvc3Bp
+L0ZpZWxkRXh0cmFjdG9yO0wAC3Jlc3RyaWN0aW9udAAkTG9yZy9kcm9vbHMvcnVsZS9MaXRlcmFs
+UmVzdHJpY3Rpb247eHBzcgAjb3JnLmRyb29scy5iYXNlLkNsYXNzRmllbGRFeHRyYWN0b3IAAAAA
+AAABQAIAAkwABWNsYXp6dAARTGphdmEvbGFuZy9DbGFzcztMAAlmaWVsZE5hbWVxAH4ABHhwdnIA
+Em9yZy5kcm9vbHMuTWVzc2FnZQAAAAAAAAAAAAAAeHB0AAhtZXNzYWdlMXNyACJvcmcuZHJvb2xz
+LnJ1bGUuTGl0ZXJhbFJlc3RyaWN0aW9uAAAAAAAAAUACAAJMAAlldmFsdWF0b3J0ABpMb3JnL2Ry
+b29scy9zcGkvRXZhbHVhdG9yO0wABWZpZWxkdAAbTG9yZy9kcm9vbHMvc3BpL0ZpZWxkVmFsdWU7
+eHBzcgA9b3JnLmRyb29scy5iYXNlLmV2YWx1YXRvcnMuU3RyaW5nRmFjdG9yeSRTdHJpbmdFcXVh
+bEV2YWx1YXRvcgAAAAAAAAFAAgAAeHIAHW9yZy5kcm9vbHMuYmFzZS5CYXNlRXZhbHVhdG9yVSSL
+s2Wsrn8CAAJMAAhvcGVyYXRvcnQAJUxvcmcvZHJvb2xzL2Jhc2UvZXZhbHVhdG9ycy9PcGVyYXRv
+cjtMAAR0eXBldAAbTG9yZy9kcm9vbHMvYmFzZS9WYWx1ZVR5cGU7eHBzcgAjb3JnLmRyb29scy5i
+YXNlLmV2YWx1YXRvcnMuT3BlcmF0b3IAAAAAAAABQAIAAUwACG9wZXJhdG9ycQB+AAR4cHQAAj09
+c3IAGW9yZy5kcm9vbHMuYmFzZS5WYWx1ZVR5cGUAAAAAAAABQAIAA0wACWNsYXNzVHlwZXEAfgAk
+TAAQZXZhbHVhdG9yRmFjdG9yeXQALUxvcmcvZHJvb2xzL2Jhc2UvZXZhbHVhdG9ycy9FdmFsdWF0
+b3JGYWN0b3J5O0wABG5hbWVxAH4ABHhwdnIAEGphdmEubGFuZy5TdHJpbmeg8KQ4ejuzQgIAAHhw
+c3IAKG9yZy5kcm9vbHMuYmFzZS5ldmFsdWF0b3JzLlN0cmluZ0ZhY3RvcnnnjP+pwAUavgIAAHhw
+dAAGU3RyaW5nc3IAGW9yZy5kcm9vbHMuYmFzZS5GaWVsZEltcGwAAAAAAAABQAIAAUwABXZhbHVl
+dAASTGphdmEvbGFuZy9PYmplY3Q7eHB0AANPbmV4cHNyAB9vcmcuZHJvb2xzLmJhc2UuQ2xhc3NP
+YmplY3RUeXBl3OzYF9SU+/0CAAJMAA9vYmplY3RUeXBlQ2xhc3NxAH4AJEwACXZhbHVlVHlwZXEA
+fgAweHBxAH4AJ3NxAH4ANXZyABBqYXZhLmxhbmcuT2JqZWN0AAAAAAAAAAAAAAB4cHNyAChvcmcu
+ZHJvb2xzLmJhc2UuZXZhbHVhdG9ycy5PYmplY3RGYWN0b3J5iWJzm94ZVjkCAAB4cHQABk9iamVj
+dHNxAH4AGgAAAAEAAAAAc3EAfgAWAAAAAXcEAAAAAXNxAH4AH3NxAH4AI3EAfgAndAAIbWVzc2Fn
+ZTJzcQB+AClxAH4AMXNxAH4APXQAA1R3b3hwc3EAfgBBcQB+ACdxAH4AQ3hzcgASb3JnLmRyb29s
+cy5ydWxlLk9yFReHgAFdtyMCAAB4cQB+ABJzcQB+ABYAAAACdwQAAAAKc3EAfgAaAAAAAgAAAABz
+cQB+ABYAAAABdwQAAAABc3EAfgAfcQB+AExzcQB+AClxAH4AMXNxAH4APXEAfgBAeHBzcQB+AEFx
+AH4AJ3EAfgBDc3EAfgARc3EAfgAWAAAAAncEAAAACnNxAH4AGgAAAAMAAAAAc3EAfgAWAAAAAXcE
+AAAAAXNxAH4AH3NxAH4AI3ZyABFvcmcuZHJvb2xzLkNoZWVzZe+FAhE7Rf31AgACSQAFcHJpY2VM
+AAR0eXBlcQB+AAR4cHQABHR5cGVzcQB+AClxAH4AMXNxAH4APXQAB3N0aWx0b254cHNxAH4AQXEA
+fgBicQB+AENzcQB+ABoAAAAEAAAAAHNxAH4AFgAAAAF3BAAAAAFzcQB+AB9xAH4AYHNxAH4AKXEA
+fgAxc3EAfgA9dAAEYnJpZXhwc3EAfgBBcQB+AGJxAH4AQ3h4c3EAfgBSc3EAfgAWAAAAAncEAAAA
+CnNxAH4AGgAAAAUAAAAAc3EAfgAWAAAAAXcEAAAAAXNxAH4AH3NxAH4AI3EAfgAndAAIbWVzc2Fn
+ZTNzcQB+AClxAH4AMXNxAH4APXEAfgBAeHBzcQB+AEFxAH4AJ3EAfgBDc3EAfgAaAAAABv////9z
+cQB+ABYAAAABdwQAAAABc3EAfgAfcQB+AHRzcQB+AClxAH4AMXNxAH4APXQABVRocmVleHBzcQB+
+AEFxAH4AJ3EAfgBDeHh0AA1IZWxsbyBXb3JsZCAxcHQAOG9yZy5kcm9vbHMucmV0ZW9vLlJ1bGVf
+SGVsbG9fV29ybGRfMl8wQ29uc2VxdWVuY2VJbnZva2Vyc3EAfgADAAAAAAAAAAACAAAAAAABcHEA
+fgALc3IAOG9yZy5kcm9vbHMucmV0ZW9vLlJ1bGVfSGVsbG9fV29ybGRfMl8wQ29uc2VxdWVuY2VJ
+bnZva2Vybl6svvqzc2oCAAB4cHVxAH4ADgAAAAFzcgAbb3JnLmRyb29scy5ydWxlLkRlY2xhcmF0
+aW9uA3M8AfIg69YCAANJAAZjb2x1bW5MAAlleHRyYWN0b3J0ABpMb3JnL2Ryb29scy9zcGkvRXh0
+cmFjdG9yO0wACmlkZW50aWZpZXJxAH4ABHhwAAAAAHEAfgAldAAJJG1lc3NhZ2Uxc3EAfgAAP0AA
+AAAAAAx3CAAAABAAAAABcQB+AIlxAH4AiHhwc3EAfgARc3EAfgAWAAAABHcEAAAACnNxAH4AEXNx
+AH4AFgAAAAJ3BAAAAApzcQB+ABoAAAAAAAAAAHNxAH4AFgAAAAJ3BAAAAAJxAH4AiHNxAH4AH3EA
+fgAlc3EAfgApcQB+ADFzcQB+AD1xAH4AQHhwc3EAfgBBcQB+ACdxAH4AQ3NxAH4AGgAAAAEAAAAA
+c3EAfgAWAAAAAXcEAAAAAXNxAH4AH3EAfgBMc3EAfgApcQB+ADFzcQB+AD1xAH4AUHhwc3EAfgBB
+cQB+ACdxAH4AQ3hzcQB+AFJzcQB+ABYAAAACdwQAAAAKc3EAfgAaAAAAAgAAAABzcQB+ABYAAAAB
+dwQAAAABc3EAfgAfcQB+AExzcQB+AClxAH4AMXNxAH4APXEAfgBAeHBzcQB+AEFxAH4AJ3EAfgBD
+c3EAfgARc3EAfgAWAAAAAncEAAAACnNxAH4AGgAAAAMAAAAAc3EAfgAWAAAAAXcEAAAAAXNxAH4A
+H3EAfgBgc3EAfgApcQB+ADFzcQB+AD1xAH4AZnhwc3EAfgBBcQB+AGJxAH4AQ3NxAH4AGgAAAAQA
+AAAAc3EAfgAWAAAAAXcEAAAAAXNxAH4AH3EAfgBgc3EAfgApcQB+ADFzcQB+AD1xAH4AbXhwc3EA
+fgBBcQB+AGJxAH4AQ3h4c3EAfgBSc3EAfgAWAAAAAncEAAAACnNxAH4AGgAAAAUAAAAAc3EAfgAW
+AAAAAXcEAAAAAXNxAH4AH3EAfgB0c3EAfgApcQB+ADFzcQB+AD1xAH4AQHhwc3EAfgBBcQB+ACdx
+AH4AQ3NxAH4AGgAAAAb/////c3EAfgAWAAAAAXcEAAAAAXNxAH4AH3EAfgB0c3EAfgApcQB+ADFz
+cQB+AD1xAH4Afnhwc3EAfgBBcQB+ACdxAH4AQ3hzcQB+AFJzcQB+ABYAAAACdwQAAAAKc3EAfgAa
+AAAAB/////9zcQB+ABYAAAABdwQAAAABc3EAfgAfc3EAfgAjdnIAEW9yZy5kcm9vbHMuUGVyc29u
+JKQvAhefuGYCAAlJAANhZ2VaAAVhbGl2ZUMAA3NleEwACmJpZ0RlY2ltYWx0ABZMamF2YS9tYXRo
+L0JpZ0RlY2ltYWw7TAAKYmlnSW50ZWdlcnQAFkxqYXZhL21hdGgvQmlnSW50ZWdlcjtMAARoYWly
+cQB+AARMAAVsaWtlc3EAfgAETAAEbmFtZXEAfgAETAAGc3RhdHVzcQB+AAR4cHQABG5hbWVzcQB+
+AClxAH4AMXNxAH4APXQABG1hcmt4cHNxAH4AQXEAfgDIcQB+AENzcQB+ABoAAAAI/////nNxAH4A
+FgAAAAF3BAAAAAFzcgAib3JnLmRyb29scy5ydWxlLlZhcmlhYmxlQ29uc3RyYWludAAAAAAAAAFA
+AgACTAAOZmllbGRFeHRyYWN0b3JxAH4AIEwAC3Jlc3RyaWN0aW9udAAlTG9yZy9kcm9vbHMvcnVs
+ZS9WYXJpYWJsZVJlc3RyaWN0aW9uO3hwcQB+AMRzcgAjb3JnLmRyb29scy5ydWxlLlZhcmlhYmxl
+UmVzdHJpY3Rpb24AAAAAAAABQAIABEkABmNvbHVtbkwAC2RlY2xhcmF0aW9ucQB+ABtMAAlldmFs
+dWF0b3JxAH4AKlsAFHJlcXVpcmVkRGVjbGFyYXRpb25zcQB+AAZ4cAAAAABxAH4AiHEAfgAxdXEA
+fgAOAAAAAXEAfgCIeHBzcQB+AEFxAH4AyHEAfgBDeHh0AA1IZWxsbyBXb3JsZCAycHg=</byte-array>
</org.drools.rule.PackageCompilationData>
<string>org.drools.reteoo</string>
<list>
@@ -188,59 +202,72 @@
AkCvUeYCAAVJAAVpbmRleEkABm9mZnNldEwAC2NvbnN0cmFpbnRzcQB+ABRMAAtkZWNsYXJhdGlv
bnQAHUxvcmcvZHJvb2xzL3J1bGUvRGVjbGFyYXRpb247TAAKb2JqZWN0VHlwZXQAG0xvcmcvZHJv
b2xzL3NwaS9PYmplY3RUeXBlO3hwAAAAAAAAAABzcQB+ABcAAAABdwQAAAABc3IAIW9yZy5kcm9v
-bHMucnVsZS5MaXRlcmFsQ29uc3RyYWludAOS+tbk+ZKzAgADTAAJZXZhbHVhdG9ydAAaTG9yZy9k
-cm9vbHMvc3BpL0V2YWx1YXRvcjtMAAlleHRyYWN0b3J0AB9Mb3JnL2Ryb29scy9zcGkvRmllbGRF
-eHRyYWN0b3I7TAAFZmllbGR0ABtMb3JnL2Ryb29scy9zcGkvRmllbGRWYWx1ZTt4cHNyAD1vcmcu
-ZHJvb2xzLmJhc2UuZXZhbHVhdG9ycy5TdHJpbmdGYWN0b3J5JFN0cmluZ0VxdWFsRXZhbHVhdG9y
-SU/lvdDlSJYCAAB4cgAdb3JnLmRyb29scy5iYXNlLkJhc2VFdmFsdWF0b3KuQXGsNOGNawIAAkkA
-CG9wZXJhdG9ySQAEdHlwZXhwAAAAAQAAALRzcgAjb3JnLmRyb29scy5iYXNlLkNsYXNzRmllbGRF
-eHRyYWN0b3IZ4kABiRDxowIAAkwABWNsYXp6dAARTGphdmEvbGFuZy9DbGFzcztMAAlmaWVsZE5h
-bWVxAH4ABXhwdnIAEm9yZy5kcm9vbHMuTWVzc2FnZQAAAAAAAAAAAAAAeHB0AAhtZXNzYWdlMXNy
-ABlvcmcuZHJvb2xzLmJhc2UuRmllbGRJbXBsrplN9KzddkQCAAFMAAV2YWx1ZXQAEkxqYXZhL2xh
-bmcvT2JqZWN0O3hwdAADT25leHBzcgAfb3JnLmRyb29scy5iYXNlLkNsYXNzT2JqZWN0VHlwZdzs
-2BfUlPv9AgACSQAJdmFsdWVUeXBlTAAPb2JqZWN0VHlwZUNsYXNzcQB+ACl4cAAAANJxAH4ALHNx
-AH4AGwAAAAEAAAAAc3EAfgAXAAAAAXcEAAAAAXNxAH4AIHEAfgAnc3EAfgAocQB+ACx0AAhtZXNz
-YWdlMnNxAH4ALnQAA1R3b3hwc3EAfgAyAAAA0nEAfgAseHNyABJvcmcuZHJvb2xzLnJ1bGUuT3IV
-F4eAAV23IwIAAHhxAH4AE3NxAH4AFwAAAAJ3BAAAAApzcQB+ABsAAAACAAAAAHNxAH4AFwAAAAF3
-BAAAAAFzcQB+ACBxAH4AJ3EAfgA3c3EAfgAucQB+ADF4cHNxAH4AMgAAANJxAH4ALHNxAH4AEnNx
-AH4AFwAAAAJ3BAAAAApzcQB+ABsAAAADAAAAAHNxAH4AFwAAAAF3BAAAAAFzcQB+ACBxAH4AJ3Nx
-AH4AKHZyABFvcmcuZHJvb2xzLkNoZWVzZe+FAhE7Rf31AgACSQAFcHJpY2VMAAR0eXBlcQB+AAV4
-cHQABHR5cGVzcQB+AC50AAdzdGlsdG9ueHBzcQB+ADIAAADScQB+AEtzcQB+ABsAAAAEAAAAAHNx
-AH4AFwAAAAF3BAAAAAFzcQB+ACBxAH4AJ3EAfgBJc3EAfgAudAAEYnJpZXhwc3EAfgAyAAAA0nEA
-fgBLeHhzcQB+ADxzcQB+ABcAAAACdwQAAAAKc3EAfgAbAAAABQAAAABzcQB+ABcAAAABdwQAAAAB
-c3EAfgAgcQB+ACdzcQB+AChxAH4ALHQACG1lc3NhZ2Uzc3EAfgAucQB+ADF4cHNxAH4AMgAAANJx
-AH4ALHNxAH4AGwAAAAb/////c3EAfgAXAAAAAXcEAAAAAXNxAH4AIHEAfgAncQB+AFtzcQB+AC50
-AAVUaHJlZXhwc3EAfgAyAAAA0nEAfgAseHhxAH4AA3B0AA1IZWxsbyBXb3JsZCAyc3EAfgAEAAAA
-AAAAAAACAAAAAAABcHEAfgAMc3IAOG9yZy5kcm9vbHMucmV0ZW9vLlJ1bGVfSGVsbG9fV29ybGRf
-Ml8wQ29uc2VxdWVuY2VJbnZva2Vybl6svvqzc2oCAAB4cHVxAH4ADwAAAAFzcgAbb3JnLmRyb29s
-cy5ydWxlLkRlY2xhcmF0aW9uA3M8AfIg69YCAANJAAZjb2x1bW5MAAlleHRyYWN0b3J0ABpMb3Jn
-L2Ryb29scy9zcGkvRXh0cmFjdG9yO0wACmlkZW50aWZpZXJxAH4ABXhwAAAAAHEAfgAqdAAJJG1l
-c3NhZ2Uxc3EAfgABP0AAAAAAAAx3CAAAABAAAAABcQB+AG1xAH4AbHhwc3EAfgASc3EAfgAXAAAA
-BHcEAAAACnNxAH4AEnNxAH4AFwAAAAJ3BAAAAApzcQB+ABsAAAAAAAAAAHNxAH4AFwAAAAJ3BAAA
-AAJxAH4AbHNxAH4AIHEAfgAncQB+ACpzcQB+AC5xAH4AMXhwc3EAfgAyAAAA0nEAfgAsc3EAfgAb
-AAAAAQAAAABzcQB+ABcAAAABdwQAAAABc3EAfgAgcQB+ACdxAH4AN3NxAH4ALnEAfgA6eHBzcQB+
-ADIAAADScQB+ACx4c3EAfgA8c3EAfgAXAAAAAncEAAAACnNxAH4AGwAAAAIAAAAAc3EAfgAXAAAA
-AXcEAAAAAXNxAH4AIHEAfgAncQB+ADdzcQB+AC5xAH4AMXhwc3EAfgAyAAAA0nEAfgAsc3EAfgAS
-c3EAfgAXAAAAAncEAAAACnNxAH4AGwAAAAMAAAAAc3EAfgAXAAAAAXcEAAAAAXNxAH4AIHEAfgAn
-cQB+AElzcQB+AC5xAH4ATnhwc3EAfgAyAAAA0nEAfgBLc3EAfgAbAAAABAAAAABzcQB+ABcAAAAB
-dwQAAAABc3EAfgAgcQB+ACdxAH4ASXNxAH4ALnEAfgBUeHBzcQB+ADIAAADScQB+AEt4eHNxAH4A
-PHNxAH4AFwAAAAJ3BAAAAApzcQB+ABsAAAAFAAAAAHNxAH4AFwAAAAF3BAAAAAFzcQB+ACBxAH4A
-J3EAfgBbc3EAfgAucQB+ADF4cHNxAH4AMgAAANJxAH4ALHNxAH4AGwAAAAb/////c3EAfgAXAAAA
-AXcEAAAAAXNxAH4AIHEAfgAncQB+AFtzcQB+AC5xAH4AY3hwc3EAfgAyAAAA0nEAfgAseHNxAH4A
-PHNxAH4AFwAAAAJ3BAAAAApzcQB+ABsAAAAH/////3NxAH4AFwAAAAF3BAAAAAFzcQB+ACBxAH4A
-J3NxAH4AKHZyABFvcmcuZHJvb2xzLlBlcnNvbiSkLwIXn7hmAgAISQADYWdlWgAFYWxpdmVDAANz
-ZXhMAApiaWdEZWNpbWFsdAAWTGphdmEvbWF0aC9CaWdEZWNpbWFsO0wACmJpZ0ludGVnZXJ0ABZM
-amF2YS9tYXRoL0JpZ0ludGVnZXI7TAAFbGlrZXNxAH4ABUwABG5hbWVxAH4ABUwABnN0YXR1c3EA
-fgAFeHB0AARuYW1lc3EAfgAudAAEbWFya3hwc3EAfgAyAAAA0nEAfgClc3EAfgAbAAAACP////5z
-cQB+ABcAAAABdwQAAAABc3IAJ29yZy5kcm9vbHMucnVsZS5Cb3VuZFZhcmlhYmxlQ29uc3RyYWlu
-dHD61IBf/tZXAgAFSQAGY29sdW1uTAALZGVjbGFyYXRpb25xAH4AHEwACWV2YWx1YXRvcnEAfgAh
-TAAOZmllbGRFeHRyYWN0b3JxAH4AIlsAFHJlcXVpcmVkRGVjbGFyYXRpb25zcQB+AAd4cAAAAABx
-AH4AbHEAfgAncQB+AKF1cQB+AA8AAAABcQB+AGx4cHNxAH4AMgAAANJxAH4ApXh4cQB+AGVweAA=
-</byte-array>
+bHMucnVsZS5MaXRlcmFsQ29uc3RyYWludAAAAAAAAAFAAgACTAAJZXh0cmFjdG9ydAAfTG9yZy9k
+cm9vbHMvc3BpL0ZpZWxkRXh0cmFjdG9yO0wAC3Jlc3RyaWN0aW9udAAkTG9yZy9kcm9vbHMvcnVs
+ZS9MaXRlcmFsUmVzdHJpY3Rpb247eHBzcgAjb3JnLmRyb29scy5iYXNlLkNsYXNzRmllbGRFeHRy
+YWN0b3IAAAAAAAABQAIAAkwABWNsYXp6dAARTGphdmEvbGFuZy9DbGFzcztMAAlmaWVsZE5hbWVx
+AH4ABXhwdnIAEm9yZy5kcm9vbHMuTWVzc2FnZQAAAAAAAAAAAAAAeHB0AAhtZXNzYWdlMXNyACJv
+cmcuZHJvb2xzLnJ1bGUuTGl0ZXJhbFJlc3RyaWN0aW9uAAAAAAAAAUACAAJMAAlldmFsdWF0b3J0
+ABpMb3JnL2Ryb29scy9zcGkvRXZhbHVhdG9yO0wABWZpZWxkdAAbTG9yZy9kcm9vbHMvc3BpL0Zp
+ZWxkVmFsdWU7eHBzcgA9b3JnLmRyb29scy5iYXNlLmV2YWx1YXRvcnMuU3RyaW5nRmFjdG9yeSRT
+dHJpbmdFcXVhbEV2YWx1YXRvcgAAAAAAAAFAAgAAeHIAHW9yZy5kcm9vbHMuYmFzZS5CYXNlRXZh
+bHVhdG9yVSSLs2Wsrn8CAAJMAAhvcGVyYXRvcnQAJUxvcmcvZHJvb2xzL2Jhc2UvZXZhbHVhdG9y
+cy9PcGVyYXRvcjtMAAR0eXBldAAbTG9yZy9kcm9vbHMvYmFzZS9WYWx1ZVR5cGU7eHBzcgAjb3Jn
+LmRyb29scy5iYXNlLmV2YWx1YXRvcnMuT3BlcmF0b3IAAAAAAAABQAIAAUwACG9wZXJhdG9ycQB+
+AAV4cHQAAj09c3IAGW9yZy5kcm9vbHMuYmFzZS5WYWx1ZVR5cGUAAAAAAAABQAIAA0wACWNsYXNz
+VHlwZXEAfgAlTAAQZXZhbHVhdG9yRmFjdG9yeXQALUxvcmcvZHJvb2xzL2Jhc2UvZXZhbHVhdG9y
+cy9FdmFsdWF0b3JGYWN0b3J5O0wABG5hbWVxAH4ABXhwdnIAEGphdmEubGFuZy5TdHJpbmeg8KQ4
+ejuzQgIAAHhwc3IAKG9yZy5kcm9vbHMuYmFzZS5ldmFsdWF0b3JzLlN0cmluZ0ZhY3RvcnnnjP+p
+wAUavgIAAHhwdAAGU3RyaW5nc3IAGW9yZy5kcm9vbHMuYmFzZS5GaWVsZEltcGwAAAAAAAABQAIA
+AUwABXZhbHVldAASTGphdmEvbGFuZy9PYmplY3Q7eHB0AANPbmV4cHNyAB9vcmcuZHJvb2xzLmJh
+c2UuQ2xhc3NPYmplY3RUeXBl3OzYF9SU+/0CAAJMAA9vYmplY3RUeXBlQ2xhc3NxAH4AJUwACXZh
+bHVlVHlwZXEAfgAxeHBxAH4AKHNxAH4ANnZyABBqYXZhLmxhbmcuT2JqZWN0AAAAAAAAAAAAAAB4
+cHNyAChvcmcuZHJvb2xzLmJhc2UuZXZhbHVhdG9ycy5PYmplY3RGYWN0b3J5iWJzm94ZVjkCAAB4
+cHQABk9iamVjdHNxAH4AGwAAAAEAAAAAc3EAfgAXAAAAAXcEAAAAAXNxAH4AIHNxAH4AJHEAfgAo
+dAAIbWVzc2FnZTJzcQB+ACpxAH4AMnNxAH4APnQAA1R3b3hwc3EAfgBCcQB+AChxAH4ARHhzcgAS
+b3JnLmRyb29scy5ydWxlLk9yFReHgAFdtyMCAAB4cQB+ABNzcQB+ABcAAAACdwQAAAAKc3EAfgAb
+AAAAAgAAAABzcQB+ABcAAAABdwQAAAABc3EAfgAgcQB+AE1zcQB+ACpxAH4AMnNxAH4APnEAfgBB
+eHBzcQB+AEJxAH4AKHEAfgBEc3EAfgASc3EAfgAXAAAAAncEAAAACnNxAH4AGwAAAAMAAAAAc3EA
+fgAXAAAAAXcEAAAAAXNxAH4AIHNxAH4AJHZyABFvcmcuZHJvb2xzLkNoZWVzZe+FAhE7Rf31AgAC
+SQAFcHJpY2VMAAR0eXBlcQB+AAV4cHQABHR5cGVzcQB+ACpxAH4AMnNxAH4APnQAB3N0aWx0b254
+cHNxAH4AQnEAfgBjcQB+AERzcQB+ABsAAAAEAAAAAHNxAH4AFwAAAAF3BAAAAAFzcQB+ACBxAH4A
+YXNxAH4AKnEAfgAyc3EAfgA+dAAEYnJpZXhwc3EAfgBCcQB+AGNxAH4ARHh4c3EAfgBTc3EAfgAX
+AAAAAncEAAAACnNxAH4AGwAAAAUAAAAAc3EAfgAXAAAAAXcEAAAAAXNxAH4AIHNxAH4AJHEAfgAo
+dAAIbWVzc2FnZTNzcQB+ACpxAH4AMnNxAH4APnEAfgBBeHBzcQB+AEJxAH4AKHEAfgBEc3EAfgAb
+AAAABv////9zcQB+ABcAAAABdwQAAAABc3EAfgAgcQB+AHVzcQB+ACpxAH4AMnNxAH4APnQABVRo
+cmVleHBzcQB+AEJxAH4AKHEAfgBEeHhxAH4AA3B0AA1IZWxsbyBXb3JsZCAyc3EAfgAEAAAAAAAA
+AAACAAAAAAABcHEAfgAMc3IAOG9yZy5kcm9vbHMucmV0ZW9vLlJ1bGVfSGVsbG9fV29ybGRfMl8w
+Q29uc2VxdWVuY2VJbnZva2Vybl6svvqzc2oCAAB4cHVxAH4ADwAAAAFzcgAbb3JnLmRyb29scy5y
+dWxlLkRlY2xhcmF0aW9uA3M8AfIg69YCAANJAAZjb2x1bW5MAAlleHRyYWN0b3J0ABpMb3JnL2Ry
+b29scy9zcGkvRXh0cmFjdG9yO0wACmlkZW50aWZpZXJxAH4ABXhwAAAAAHEAfgAmdAAJJG1lc3Nh
+Z2Uxc3EAfgABP0AAAAAAAAx3CAAAABAAAAABcQB+AIlxAH4AiHhwc3EAfgASc3EAfgAXAAAABHcE
+AAAACnNxAH4AEnNxAH4AFwAAAAJ3BAAAAApzcQB+ABsAAAAAAAAAAHNxAH4AFwAAAAJ3BAAAAAJx
+AH4AiHNxAH4AIHEAfgAmc3EAfgAqcQB+ADJzcQB+AD5xAH4AQXhwc3EAfgBCcQB+AChxAH4ARHNx
+AH4AGwAAAAEAAAAAc3EAfgAXAAAAAXcEAAAAAXNxAH4AIHEAfgBNc3EAfgAqcQB+ADJzcQB+AD5x
+AH4AUXhwc3EAfgBCcQB+AChxAH4ARHhzcQB+AFNzcQB+ABcAAAACdwQAAAAKc3EAfgAbAAAAAgAA
+AABzcQB+ABcAAAABdwQAAAABc3EAfgAgcQB+AE1zcQB+ACpxAH4AMnNxAH4APnEAfgBBeHBzcQB+
+AEJxAH4AKHEAfgBEc3EAfgASc3EAfgAXAAAAAncEAAAACnNxAH4AGwAAAAMAAAAAc3EAfgAXAAAA
+AXcEAAAAAXNxAH4AIHEAfgBhc3EAfgAqcQB+ADJzcQB+AD5xAH4AZ3hwc3EAfgBCcQB+AGNxAH4A
+RHNxAH4AGwAAAAQAAAAAc3EAfgAXAAAAAXcEAAAAAXNxAH4AIHEAfgBhc3EAfgAqcQB+ADJzcQB+
+AD5xAH4Abnhwc3EAfgBCcQB+AGNxAH4ARHh4c3EAfgBTc3EAfgAXAAAAAncEAAAACnNxAH4AGwAA
+AAUAAAAAc3EAfgAXAAAAAXcEAAAAAXNxAH4AIHEAfgB1c3EAfgAqcQB+ADJzcQB+AD5xAH4AQXhw
+c3EAfgBCcQB+AChxAH4ARHNxAH4AGwAAAAb/////c3EAfgAXAAAAAXcEAAAAAXNxAH4AIHEAfgB1
+c3EAfgAqcQB+ADJzcQB+AD5xAH4Af3hwc3EAfgBCcQB+AChxAH4ARHhzcQB+AFNzcQB+ABcAAAAC
+dwQAAAAKc3EAfgAbAAAAB/////9zcQB+ABcAAAABdwQAAAABc3EAfgAgc3EAfgAkdnIAEW9yZy5k
+cm9vbHMuUGVyc29uJKQvAhefuGYCAAlJAANhZ2VaAAVhbGl2ZUMAA3NleEwACmJpZ0RlY2ltYWx0
+ABZMamF2YS9tYXRoL0JpZ0RlY2ltYWw7TAAKYmlnSW50ZWdlcnQAFkxqYXZhL21hdGgvQmlnSW50
+ZWdlcjtMAARoYWlycQB+AAVMAAVsaWtlc3EAfgAFTAAEbmFtZXEAfgAFTAAGc3RhdHVzcQB+AAV4
+cHQABG5hbWVzcQB+ACpxAH4AMnNxAH4APnQABG1hcmt4cHNxAH4AQnEAfgDIcQB+AERzcQB+ABsA
+AAAI/////nNxAH4AFwAAAAF3BAAAAAFzcgAib3JnLmRyb29scy5ydWxlLlZhcmlhYmxlQ29uc3Ry
+YWludAAAAAAAAAFAAgACTAAOZmllbGRFeHRyYWN0b3JxAH4AIUwAC3Jlc3RyaWN0aW9udAAlTG9y
+Zy9kcm9vbHMvcnVsZS9WYXJpYWJsZVJlc3RyaWN0aW9uO3hwcQB+AMRzcgAjb3JnLmRyb29scy5y
+dWxlLlZhcmlhYmxlUmVzdHJpY3Rpb24AAAAAAAABQAIABEkABmNvbHVtbkwAC2RlY2xhcmF0aW9u
+cQB+ABxMAAlldmFsdWF0b3JxAH4AK1sAFHJlcXVpcmVkRGVjbGFyYXRpb25zcQB+AAd4cAAAAABx
+AH4AiHEAfgAydXEAfgAPAAAAAXEAfgCIeHBzcQB+AEJxAH4AyHEAfgBEeHhxAH4AgXB4AA==</byte-array>
</org.drools.rule.Package>
</entry>
</map>
- <byte-array>rO0ABXQAJDA2YmQ1MjkyLTJmZWItNDc2OC1iZDZkLWM1MDI1NTY5OWU4N3NyAClvcmcuZHJvb2xz
+ <byte-array>rO0ABXQAJDlmZjlhZWYyLTg0OTgtNDU3Yi1hNTE2LWI2OWJiOTkzNzczNnNyAClvcmcuZHJvb2xz
LnJldGVvby5SZXRlb29GYWN0SGFuZGxlRmFjdG9yeQAAAAAAAAEsAgAAeHIAK29yZy5kcm9vbHMu
Y29tbW9uLkFic3RyYWN0RmFjdEhhbmRsZUZhY3RvcnlrwcaUre4SdAIAA0oAB2NvdW50ZXJKAAJp
ZEwADmZhY3RIYW5kbGVQb29sdAAkTG9yZy9kcm9vbHMvdXRpbC9QcmltaXRpdmVMb25nU3RhY2s7
@@ -332,7 +359,7 @@
agIAAHhwdXIAHltMb3JnLmRyb29scy5ydWxlLkRlY2xhcmF0aW9uO/Wnzws0aCnjAgAAeHAAAAAB
c3IAG29yZy5kcm9vbHMucnVsZS5EZWNsYXJhdGlvbgNzPAHyIOvWAgADSQAGY29sdW1uTAAJZXh0
cmFjdG9ydAAaTG9yZy9kcm9vbHMvc3BpL0V4dHJhY3RvcjtMAAppZGVudGlmaWVycQB+AEV4cAAA
-AABzcgAjb3JnLmRyb29scy5iYXNlLkNsYXNzRmllbGRFeHRyYWN0b3IZ4kABiRDxowIAAkwABWNs
+AABzcgAjb3JnLmRyb29scy5iYXNlLkNsYXNzRmllbGRFeHRyYWN0b3IAAAAAAAABQAIAAkwABWNs
YXp6dAARTGphdmEvbGFuZy9DbGFzcztMAAlmaWVsZE5hbWVxAH4ARXhwdnIAEm9yZy5kcm9vbHMu
TWVzc2FnZQAAAAAAAAAAAAAAeHB0AAhtZXNzYWdlMXQACSRtZXNzYWdlMXNxAH4ADT9AAAAAAAAM
dwgAAAAQAAAAAXEAfgBZcQB+AFJ4cHNyABNvcmcuZHJvb2xzLnJ1bGUuQW5k/PjnIvCmw3YCAAB4
@@ -342,113 +369,128 @@
bW5/ObACQK9R5gIABUkABWluZGV4SQAGb2Zmc2V0TAALY29uc3RyYWludHNxAH4ALEwAC2RlY2xh
cmF0aW9udAAdTG9yZy9kcm9vbHMvcnVsZS9EZWNsYXJhdGlvbjtMAApvYmplY3RUeXBlcQB+ACh4
cAAAAAAAAAAAc3EAfgAlAAAAAncEAAAAAnEAfgBSc3IAIW9yZy5kcm9vbHMucnVsZS5MaXRlcmFs
-Q29uc3RyYWludAOS+tbk+ZKzAgADTAAJZXZhbHVhdG9ydAAaTG9yZy9kcm9vbHMvc3BpL0V2YWx1
-YXRvcjtMAAlleHRyYWN0b3J0AB9Mb3JnL2Ryb29scy9zcGkvRmllbGRFeHRyYWN0b3I7TAAFZmll
-bGR0ABtMb3JnL2Ryb29scy9zcGkvRmllbGRWYWx1ZTt4cHNyAD1vcmcuZHJvb2xzLmJhc2UuZXZh
-bHVhdG9ycy5TdHJpbmdGYWN0b3J5JFN0cmluZ0VxdWFsRXZhbHVhdG9ySU/lvdDlSJYCAAB4cgAd
-b3JnLmRyb29scy5iYXNlLkJhc2VFdmFsdWF0b3KuQXGsNOGNawIAAkkACG9wZXJhdG9ySQAEdHlw
-ZXhwAAAAAQAAALRxAH4AVXNyABlvcmcuZHJvb2xzLmJhc2UuRmllbGRJbXBsrplN9KzddkQCAAFM
-AAV2YWx1ZXQAEkxqYXZhL2xhbmcvT2JqZWN0O3hwdAADT25leHBzcgAfb3JnLmRyb29scy5iYXNl
-LkNsYXNzT2JqZWN0VHlwZdzs2BfUlPv9AgACSQAJdmFsdWVUeXBlTAAPb2JqZWN0VHlwZUNsYXNz
-cQB+AFR4cAAAANJxAH4AV3NxAH4AYgAAAAEAAAAAc3EAfgAlAAAAAXcEAAAAAXNxAH4AZnEAfgBt
-c3EAfgBTcQB+AFd0AAhtZXNzYWdlMnNxAH4AbnQAA1R3b3hwc3EAfgByAAAA0nEAfgBXeHNyABJv
-cmcuZHJvb2xzLnJ1bGUuT3IVF4eAAV23IwIAAHhxAH4AXHNxAH4AJQAAAAJ3BAAAAApzcQB+AGIA
-AAACAAAAAHNxAH4AJQAAAAF3BAAAAAFzcQB+AGZxAH4AbXEAfgB3c3EAfgBucQB+AHF4cHNxAH4A
-cgAAANJxAH4AV3NxAH4AW3NxAH4AJQAAAAJ3BAAAAApzcQB+AGIAAAADAAAAAHNxAH4AJQAAAAF3
-BAAAAAFzcQB+AGZxAH4AbXNxAH4AU3ZyABFvcmcuZHJvb2xzLkNoZWVzZe+FAhE7Rf31AgACSQAF
-cHJpY2VMAAR0eXBlcQB+AEV4cHQABHR5cGVzcQB+AG50AAdzdGlsdG9ueHBzcQB+AHIAAADScQB+
-AItzcQB+AGIAAAAEAAAAAHNxAH4AJQAAAAF3BAAAAAFzcQB+AGZxAH4AbXEAfgCJc3EAfgBudAAE
-YnJpZXhwc3EAfgByAAAA0nEAfgCLeHhzcQB+AHxzcQB+ACUAAAACdwQAAAAKc3EAfgBiAAAABQAA
-AABzcQB+ACUAAAABdwQAAAABc3EAfgBmcQB+AG1zcQB+AFNxAH4AV3QACG1lc3NhZ2Uzc3EAfgBu
-cQB+AHF4cHNxAH4AcgAAANJxAH4AV3NxAH4AYgAAAAb/////c3EAfgAlAAAAAXcEAAAAAXNxAH4A
-ZnEAfgBtcQB+AJtzcQB+AG50AAVUaHJlZXhwc3EAfgByAAAA0nEAfgBXeHNxAH4AfHNxAH4AJQAA
-AAJ3BAAAAApzcQB+AGIAAAAH/////3NxAH4AJQAAAAF3BAAAAAFzcQB+AGZxAH4AbXNxAH4AU3Zy
-ABFvcmcuZHJvb2xzLlBlcnNvbiSkLwIXn7hmAgAISQADYWdlWgAFYWxpdmVDAANzZXhMAApiaWdE
-ZWNpbWFsdAAWTGphdmEvbWF0aC9CaWdEZWNpbWFsO0wACmJpZ0ludGVnZXJ0ABZMamF2YS9tYXRo
-L0JpZ0ludGVnZXI7TAAFbGlrZXNxAH4ARUwABG5hbWVxAH4ARUwABnN0YXR1c3EAfgBFeHB0AARu
-YW1lc3EAfgBucQB+ADR4cHNxAH4AcgAAANJxAH4ArnNxAH4AYgAAAAj////+c3EAfgAlAAAAAXcE
-AAAAAXNyACdvcmcuZHJvb2xzLnJ1bGUuQm91bmRWYXJpYWJsZUNvbnN0cmFpbnRw+tSAX/7WVwIA
-BUkABmNvbHVtbkwAC2RlY2xhcmF0aW9ucQB+AGNMAAlldmFsdWF0b3JxAH4AZ0wADmZpZWxkRXh0
-cmFjdG9ycQB+AGhbABRyZXF1aXJlZERlY2xhcmF0aW9uc3EAfgBHeHAAAAAAcQB+AFJxAH4AbXEA
-fgCqdXEAfgBOAAAAAXEAfgBSeHBzcQB+AHIAAADScQB+AK54eHQADUhlbGxvIFdvcmxkIDJwcQB+
-AD94c3IAIG9yZy5kcm9vbHMuY29tbW9uLkJldGFOb2RlQmluZGVy2TpNkEHwWrMCAAFbAAtjb25z
-dHJhaW50c3QAIVtMb3JnL2Ryb29scy9zcGkvRmllbGRDb25zdHJhaW50O3hwdXIAIVtMb3JnLmRy
-b29scy5zcGkuRmllbGRDb25zdHJhaW50O5r2l/a0Sg/GAgAAeHAAAAAAc3EAfgA6AAAAAAAJAAAA
-AnNxAH4AJQAAAAN3BAAAAARzcQB+AEEAAAAAAAoAAAAAc3EAfgBEAAAAAAAAAAABAAAAAAABcHEA
-fgBLc3IAOG9yZy5kcm9vbHMucmV0ZW9vLlJ1bGVfSGVsbG9fV29ybGRfMV8wQ29uc2VxdWVuY2VJ
-bnZva2Vybl6svvqzc2oCAAB4cHVxAH4ATgAAAABzcQB+AA0/QAAAAAAADHcIAAAAEAAAAAB4cHNx
-AH4AW3NxAH4AJQAAAAN3BAAAAApzcQB+AFtzcQB+ACUAAAACdwQAAAAKc3EAfgBiAAAAAAAAAABz
-cQB+ACUAAAABdwQAAAABc3EAfgBmcQB+AG1xAH4AVXNxAH4AbnEAfgBxeHBzcQB+AHIAAADScQB+
-AFdzcQB+AGIAAAABAAAAAHNxAH4AJQAAAAF3BAAAAAFzcQB+AGZxAH4AbXEAfgB3c3EAfgBucQB+
-AHp4cHNxAH4AcgAAANJxAH4AV3hzcQB+AHxzcQB+ACUAAAACdwQAAAAKc3EAfgBiAAAAAgAAAABz
-cQB+ACUAAAABdwQAAAABc3EAfgBmcQB+AG1xAH4Ad3NxAH4AbnEAfgBxeHBzcQB+AHIAAADScQB+
-AFdzcQB+AFtzcQB+ACUAAAACdwQAAAAKc3EAfgBiAAAAAwAAAABzcQB+ACUAAAABdwQAAAABc3EA
-fgBmcQB+AG1xAH4AiXNxAH4AbnEAfgCOeHBzcQB+AHIAAADScQB+AItzcQB+AGIAAAAEAAAAAHNx
-AH4AJQAAAAF3BAAAAAFzcQB+AGZxAH4AbXEAfgCJc3EAfgBucQB+AJR4cHNxAH4AcgAAANJxAH4A
-i3h4c3EAfgB8c3EAfgAlAAAAAncEAAAACnNxAH4AYgAAAAUAAAAAc3EAfgAlAAAAAXcEAAAAAXNx
-AH4AZnEAfgBtcQB+AJtzcQB+AG5xAH4AcXhwc3EAfgByAAAA0nEAfgBXc3EAfgBiAAAABv////9z
-cQB+ACUAAAABdwQAAAABc3EAfgBmcQB+AG1xAH4Am3NxAH4AbnEAfgCjeHBzcQB+AHIAAADScQB+
-AFd4eHQADUhlbGxvIFdvcmxkIDFwcQB+AL5xAH4AP3NxAH4AOgAAAAAAGwAAAABzcQB+ACUAAAAB
-dwQAAAABc3EAfgBBAAAAAAAcAAAAAHEAfgBKcQB+APR4c3EAfgC5dXEAfgC8AAAAAXEAfgC1cQB+
-AL5xAH4AKnhzcQB+ALl1cQB+ALwAAAABc3IALW9yZy5kcm9vbHMuY29tbW9uLkluc3RhbmNlTm90
-RXF1YWxzQ29uc3RyYWludLvOi82UZWybAgACSQALb3RoZXJDb2x1bW5bAAxkZWNsYXJhdGlvbnNx
-AH4AR3hwAAAAAnVxAH4ATgAAAABzcQB+ADoAAAAAAAcAAAAFc3EAfgAlAAAAAncEAAAAAnEAfgC+
-c3EAfgA6AAAAAAAMAAAAAnNxAH4AJQAAAAN3BAAAAARzcQB+AEEAAAAAAA0AAAAAcQB+AMFxAH4B
-AHNxAH4AOgAAAAAAHQAAAABzcQB+ACUAAAABdwQAAAABc3EAfgBBAAAAAAAeAAAAAHEAfgBKcQB+
-AQN4c3EAfgC5cQB+AL1xAH4BAHEAfgA4c3EAfgA6AAAAAAAfAAAAAHNxAH4AJQAAAAF3BAAAAAFz
-cQB+AEEAAAAAACAAAAAAcQB+AEpxAH4BB3hzcQB+ALl1cQB+ALwAAAABcQB+ALVxAH4BAHEAfgAq
-eHNxAH4AuXVxAH4AvAAAAAFzcQB+APsAAAACdXEAfgBOAAAAAHEAfgD+c3EAfgA1AAEAAAALAAAA
-BXNxAH4AJAAAAAJ3BAAAAAJxAH4BAHNxAH4AOgAAAAAAFQAAAAJzcQB+ACUAAAADdwQAAAAEc3EA
-fgBBAAAAAAAWAAAAAHEAfgDBcQB+ARJzcQB+ADoAAAAAACUAAAAAc3EAfgAlAAAAAXcEAAAAAXNx
-AH4AQQAAAAAAJgAAAABxAH4ASnEAfgEVeHNxAH4AuXEAfgC9cQB+ARJxAH4AOHNxAH4AOgAAAAAA
-JwAAAABzcQB+ACUAAAABdwQAAAABc3EAfgBBAAAAAAAoAAAAAHEAfgBKcQB+ARl4c3EAfgC5dXEA
-fgC8AAAAAXEAfgC1cQB+ARJxAH4AKnhzcQB+ALl1cQB+ALwAAAABc3EAfgD7AAAAAXVxAH4ATgAA
-AABzcQB+ADoAAAAAABIAAAAFc3EAfgAlAAAAAncEAAAAAnNxAH4AOgAAAAAAEwAAAAJzcQB+ACUA
-AAADdwQAAAAEc3EAfgBBAAAAAAAUAAAAAHEAfgDBcQB+ASRzcQB+ADoAAAAAACEAAAAAc3EAfgAl
-AAAAAXcEAAAAAXNxAH4AQQAAAAAAIgAAAABxAH4ASnEAfgEneHNxAH4AuXEAfgC9cQB+ASRxAH4A
-OHNxAH4AOgAAAAAAIwAAAABzcQB+ACUAAAABdwQAAAABc3EAfgBBAAAAAAAkAAAAAHEAfgBKcQB+
-ASt4c3EAfgC5dXEAfgC8AAAAAXEAfgC1cQB+ASRxAH4AKnhzcQB+ALl1cQB+ALwAAAABc3EAfgD7
-AAAAAXVxAH4ATgAAAABxAH4BInNxAH4ANQABAAAACAAAAAVzcQB+ACQAAAACdwQAAAACcQB+AL5x
-AH4BJHhxAH4A63NxAH4AJwABAAAAAQAAAClzcQB+ACtzcQB+AA0/QAAAAAAADHcIAAAAEAAAAANz
-cQB+ADBzcQB+AA0/QAAAAAAADHcIAAAAEAAAAAFxAH4AcXNxAH4ANQABAAAAAgAAAAtzcQB+ACQA
-AAABdwQAAAABc3IAJm9yZy5kcm9vbHMucmV0ZW9vLkxlZnRJbnB1dEFkYXB0ZXJOb2RlZmG5vwo6
-UjQCAAJMAAZiaW5kZXJxAH4APEwADG9iamVjdFNvdXJjZXEAfgA3eHEAfgA+AAEAAAADAAAAC3Nx
-AH4AJQAAAAF3BAAAAAFzcQB+ADoAAAAAAAUAAAALc3EAfgAlAAAAAncEAAAAAnEAfgD+c3EAfgA6
-AAAAAAAQAAAABXNxAH4AJQAAAAF3BAAAAAFxAH4BInhzcQB+ALlxAH4AvXEAfgFAc3EAfgA1AAEA
-AAAPAAAABXNxAH4AJAAAAAF3BAAAAAFxAH4BQnhxAH4A33NxAH4AJwABAAAADgAAAAtzcQB+ACtz
-cQB+AA0/QAAAAAAADHcIAAAAEAAAAAFzcQB+ADBzcQB+AA0/QAAAAAAADHcIAAAAEAAAAAJxAH4A
-lHNxAH4ANQABAAAAEQAAAAVzcQB+ACQAAAABdwQAAAABcQB+ASJ4cQB+AORxAH4BR3EAfgCOcQB+
-AUV4cQB+AN9xAH4BSnhzcQB+ACUAAAACdwQAAAACcQB+AUVxAH4BTHhxAH4BTHNxAH4AJQAAAAB3
-BAAAAAF4cQB+AOFxAH4AI3hzcQB+ALl1cQB+ALwAAAABc3EAfgD7AAAAAHVxAH4ATgAAAABxAH4B
-PnNxAH4ANQABAAAABAAAAAtzcQB+ACQAAAABdwQAAAABcQB+AUB4cQB+ANFxAH4BNnhzcQB+ALlx
-AH4AvXEAfgE7eHEAfgDMcQB+ATZ4cQB+AMxxAH4BOXNxAH4AMHNxAH4ADT9AAAAAAAAMdwgAAAAQ
-AAAAAnEAfgCjcQB+ARBxAH4AcXEAfgE0eHEAfgDrcQB+AVdzcQB+ADBzcQB+AA0/QAAAAAAADHcI
-AAAAEAAAAAJxAH4AenEAfgFUcQB+AHFzcQB+ADUAAQAAAAYAAAAFc3EAfgAkAAAAAXcEAAAAAXEA
-fgD+eHEAfgDYcQB+ATZ4cQB+ANFxAH4BWXhzcQB+ACUAAAAFdwQAAAAHcQB+ATtxAH4BVHEAfgFb
-cQB+ATRxAH4BEHhxAH4BEHNxAH4AJQAAAAB3BAAAAAF4cQB+AM5xAH4AI3EAfgESeHNxAH4AuXVx
-AH4AvAAAAAFzcQB+APsAAAADdXEAfgBOAAAAAHEAfgFCcQB+AUxxAH4BEHhxAH4A8HEAfgE2eHNx
-AH4AuXVxAH4AvAAAAAFzcQB+APsAAAABdXEAfgBOAAAAAHEAfgFAcQB+AVtxAH4BNHEAfgA4cQB+
-AQNxAH4BJ3EAfgEVeHEAfgCpcQB+ACp4cQB+AKlxAH4AMnhzcQB+ACUAAAABdwQAAAABcQB+ADh4
-cQB+ARlzcQB+ACUAAAAEdwQAAAAEcQB+APRxAH4BB3EAfgErcQB+ARl4cQB+ALFxAH4AI3NxAH4A
-DT9AAAAAAAAMdwgAAAAQAAAAA3EAfgCxcQB+ACpxAH4AznEAfgE2cQB+AOFxAH4BR3hzcgAmb3Jn
-LmRyb29scy5zcGkuQ2xhc3NPYmplY3RUeXBlUmVzb2x2ZXIChNj8cLGw6wIAAUwACm9iamVjdFR5
-cGV0AENMb3JnL2Ryb29scy9zcGkvQ2xhc3NPYmplY3RUeXBlUmVzb2x2ZXIkTW9kaWZpZWFibGVD
-bGFzc09iamVjdFR5cGU7eHBzcgBBb3JnLmRyb29scy5zcGkuQ2xhc3NPYmplY3RUeXBlUmVzb2x2
-ZXIkTW9kaWZpZWFibGVDbGFzc09iamVjdFR5cGVEpauUAjf7NQIAAHhxAH4AcgAAASxwc3IAH29y
-Zy5kcm9vbHMucmV0ZW9vLlJldGVvb0J1aWxkZXIYHVn7j8gD8AIACUkAF2N1cnJlbnRPZmZzZXRB
-ZGp1c3RtZW50SQACaWRMAA1hdHRhY2hlZE5vZGVzcQB+ABBMAAxkZWNsYXJhdGlvbnNxAH4AEEwA
-DG9iamVjdFNvdXJjZXEAfgA3TAAKb2JqZWN0VHlwZXEAfgAQTAAIcmVzb2x2ZXJxAH4AH0wABXJ1
-bGVzcQB+ABBMAAt0dXBsZVNvdXJjZXEAfgA9eHAAAAAAAAAAKXNxAH4ADT9AAAAAAAAwdwgAAABA
-AAAAHHEAfgEHcQB+AQdxAH4BJHEAfgEkcQB+ACpxAH4AKnEAfgFAcQB+AUBxAH4BFXEAfgEVcQB+
-AStxAH4BK3EAfgFFcQB+AUVxAH4BA3EAfgEDcQB+ASdxAH4BJ3EAfgFMcQB+AUxxAH4BNnEAfgE2
-cQB+APRxAH4A9HEAfgFCcQB+AUJxAH4BGXEAfgEZcQB+ARBxAH4BEHEAfgEicQB+ASJxAH4BNHEA
-fgE0cQB+AQBxAH4BAHEAfgFUcQB+AVRxAH4BPnEAfgE+cQB+ATtxAH4BO3EAfgC+cQB+AL5xAH4B
-EnEAfgEScQB+AD9xAH4AP3EAfgD+cQB+AP5xAH4BW3EAfgFbcQB+ADhxAH4AOHEAfgFHcQB+AUd4
-c3EAfgANP0AAAAAAAAx3CAAAABAAAAABcQB+AFlxAH4AUnhxAH4AKnNyABdqYXZhLnV0aWwuTGlu
-a2VkSGFzaE1hcDTATlwQbMD7AgABWgALYWNjZXNzT3JkZXJ4cQB+AA0/QAAAAAAADHcIAAAAEAAA
-AANxAH4Ac3NyABFqYXZhLmxhbmcuSW50ZWdlchLioKT3gYc4AgABSQAFdmFsdWV4cgAQamF2YS5s
-YW5nLk51bWJlcoaslR0LlOCLAgAAeHAAAAAFcQB+AI9zcQB+AXUAAAAEcQB+ALdzcQB+AXUAAAAG
-eABxAH4BbHNxAH4ADT9AAAAAAAAMdwgAAAAQAAAAAnEAfgDBdXIAHVtMb3JnLmRyb29scy5yZXRl
-b28uQmFzZU5vZGU7C+fJk0Ocs+oCAAB4cAAAAARxAH4AwHEAfgECcQB+ASZxAH4BFHEAfgBKdXEA
-fgF7AAAACHEAfgBDcQB+APZxAH4BBXEAfgEJcQB+ASlxAH4BLXEAfgEXcQB+ARt4cQB+ARk=</byte-array>
+Q29uc3RyYWludAAAAAAAAAFAAgACTAAJZXh0cmFjdG9ydAAfTG9yZy9kcm9vbHMvc3BpL0ZpZWxk
+RXh0cmFjdG9yO0wAC3Jlc3RyaWN0aW9udAAkTG9yZy9kcm9vbHMvcnVsZS9MaXRlcmFsUmVzdHJp
+Y3Rpb247eHBxAH4AVXNyACJvcmcuZHJvb2xzLnJ1bGUuTGl0ZXJhbFJlc3RyaWN0aW9uAAAAAAAA
+AUACAAJMAAlldmFsdWF0b3J0ABpMb3JnL2Ryb29scy9zcGkvRXZhbHVhdG9yO0wABWZpZWxkdAAb
+TG9yZy9kcm9vbHMvc3BpL0ZpZWxkVmFsdWU7eHBzcgA9b3JnLmRyb29scy5iYXNlLmV2YWx1YXRv
+cnMuU3RyaW5nRmFjdG9yeSRTdHJpbmdFcXVhbEV2YWx1YXRvcgAAAAAAAAFAAgAAeHIAHW9yZy5k
+cm9vbHMuYmFzZS5CYXNlRXZhbHVhdG9yVSSLs2Wsrn8CAAJMAAhvcGVyYXRvcnQAJUxvcmcvZHJv
+b2xzL2Jhc2UvZXZhbHVhdG9ycy9PcGVyYXRvcjtMAAR0eXBldAAbTG9yZy9kcm9vbHMvYmFzZS9W
+YWx1ZVR5cGU7eHBzcgAjb3JnLmRyb29scy5iYXNlLmV2YWx1YXRvcnMuT3BlcmF0b3IAAAAAAAAB
+QAIAAUwACG9wZXJhdG9ycQB+AEV4cHQAAj09c3IAGW9yZy5kcm9vbHMuYmFzZS5WYWx1ZVR5cGUA
+AAAAAAABQAIAA0wACWNsYXNzVHlwZXEAfgBUTAAQZXZhbHVhdG9yRmFjdG9yeXQALUxvcmcvZHJv
+b2xzL2Jhc2UvZXZhbHVhdG9ycy9FdmFsdWF0b3JGYWN0b3J5O0wABG5hbWVxAH4ARXhwdnIAEGph
+dmEubGFuZy5TdHJpbmeg8KQ4ejuzQgIAAHhwc3IAKG9yZy5kcm9vbHMuYmFzZS5ldmFsdWF0b3Jz
+LlN0cmluZ0ZhY3RvcnnnjP+pwAUavgIAAHhwdAAGU3RyaW5nc3IAGW9yZy5kcm9vbHMuYmFzZS5G
+aWVsZEltcGwAAAAAAAABQAIAAUwABXZhbHVldAASTGphdmEvbGFuZy9PYmplY3Q7eHB0AANPbmV4
+cHNyAB9vcmcuZHJvb2xzLmJhc2UuQ2xhc3NPYmplY3RUeXBl3OzYF9SU+/0CAAJMAA9vYmplY3RU
+eXBlQ2xhc3NxAH4AVEwACXZhbHVlVHlwZXEAfgBxeHBxAH4AV3NxAH4AdnZyABBqYXZhLmxhbmcu
+T2JqZWN0AAAAAAAAAAAAAAB4cHNyAChvcmcuZHJvb2xzLmJhc2UuZXZhbHVhdG9ycy5PYmplY3RG
+YWN0b3J5iWJzm94ZVjkCAAB4cHQABk9iamVjdHNxAH4AYgAAAAEAAAAAc3EAfgAlAAAAAXcEAAAA
+AXNxAH4AZnNxAH4AU3EAfgBXdAAIbWVzc2FnZTJzcQB+AGpxAH4AcnNxAH4AfnQAA1R3b3hwc3EA
+fgCCcQB+AFdxAH4AhHhzcgASb3JnLmRyb29scy5ydWxlLk9yFReHgAFdtyMCAAB4cQB+AFxzcQB+
+ACUAAAACdwQAAAAKc3EAfgBiAAAAAgAAAABzcQB+ACUAAAABdwQAAAABc3EAfgBmcQB+AI1zcQB+
+AGpxAH4AcnNxAH4AfnEAfgCBeHBzcQB+AIJxAH4AV3EAfgCEc3EAfgBbc3EAfgAlAAAAAncEAAAA
+CnNxAH4AYgAAAAMAAAAAc3EAfgAlAAAAAXcEAAAAAXNxAH4AZnNxAH4AU3ZyABFvcmcuZHJvb2xz
+LkNoZWVzZe+FAhE7Rf31AgACSQAFcHJpY2VMAAR0eXBlcQB+AEV4cHQABHR5cGVzcQB+AGpxAH4A
+cnNxAH4AfnQAB3N0aWx0b254cHNxAH4AgnEAfgCjcQB+AIRzcQB+AGIAAAAEAAAAAHNxAH4AJQAA
+AAF3BAAAAAFzcQB+AGZxAH4AoXNxAH4AanEAfgByc3EAfgB+dAAEYnJpZXhwc3EAfgCCcQB+AKNx
+AH4AhHh4c3EAfgCTc3EAfgAlAAAAAncEAAAACnNxAH4AYgAAAAUAAAAAc3EAfgAlAAAAAXcEAAAA
+AXNxAH4AZnNxAH4AU3EAfgBXdAAIbWVzc2FnZTNzcQB+AGpxAH4AcnNxAH4AfnEAfgCBeHBzcQB+
+AIJxAH4AV3EAfgCEc3EAfgBiAAAABv////9zcQB+ACUAAAABdwQAAAABc3EAfgBmcQB+ALVzcQB+
+AGpxAH4AcnNxAH4AfnQABVRocmVleHBzcQB+AIJxAH4AV3EAfgCEeHNxAH4Ak3NxAH4AJQAAAAJ3
+BAAAAApzcQB+AGIAAAAH/////3NxAH4AJQAAAAF3BAAAAAFzcQB+AGZzcQB+AFN2cgARb3JnLmRy
+b29scy5QZXJzb24kpC8CF5+4ZgIACUkAA2FnZVoABWFsaXZlQwADc2V4TAAKYmlnRGVjaW1hbHQA
+FkxqYXZhL21hdGgvQmlnRGVjaW1hbDtMAApiaWdJbnRlZ2VydAAWTGphdmEvbWF0aC9CaWdJbnRl
+Z2VyO0wABGhhaXJxAH4ARUwABWxpa2VzcQB+AEVMAARuYW1lcQB+AEVMAAZzdGF0dXNxAH4ARXhw
+dAAEbmFtZXNxAH4AanEAfgByc3EAfgB+cQB+ADR4cHNxAH4AgnEAfgDKcQB+AIRzcQB+AGIAAAAI
+/////nNxAH4AJQAAAAF3BAAAAAFzcgAib3JnLmRyb29scy5ydWxlLlZhcmlhYmxlQ29uc3RyYWlu
+dAAAAAAAAAFAAgACTAAOZmllbGRFeHRyYWN0b3JxAH4AZ0wAC3Jlc3RyaWN0aW9udAAlTG9yZy9k
+cm9vbHMvcnVsZS9WYXJpYWJsZVJlc3RyaWN0aW9uO3hwcQB+AMZzcgAjb3JnLmRyb29scy5ydWxl
+LlZhcmlhYmxlUmVzdHJpY3Rpb24AAAAAAAABQAIABEkABmNvbHVtbkwAC2RlY2xhcmF0aW9ucQB+
+AGNMAAlldmFsdWF0b3JxAH4Aa1sAFHJlcXVpcmVkRGVjbGFyYXRpb25zcQB+AEd4cAAAAABxAH4A
+UnEAfgBydXEAfgBOAAAAAXEAfgBSeHBzcQB+AIJxAH4AynEAfgCEeHh0AA1IZWxsbyBXb3JsZCAy
+cHEAfgA/eHNyACBvcmcuZHJvb2xzLmNvbW1vbi5CZXRhTm9kZUJpbmRlctk6TZBB8FqzAgABWwAL
+Y29uc3RyYWludHN0ACFbTG9yZy9kcm9vbHMvc3BpL0ZpZWxkQ29uc3RyYWludDt4cHVyACFbTG9y
+Zy5kcm9vbHMuc3BpLkZpZWxkQ29uc3RyYWludDua9pf2tEoPxgIAAHhwAAAAAHNxAH4AOgAAAAAA
+CQAAAAJzcQB+ACUAAAADdwQAAAAEc3EAfgBBAAAAAAAKAAAAAHNxAH4ARAAAAAAAAAAAAQAAAAAA
+AXBxAH4AS3NyADhvcmcuZHJvb2xzLnJldGVvby5SdWxlX0hlbGxvX1dvcmxkXzFfMENvbnNlcXVl
+bmNlSW52b2tlcm5erL76s3NqAgAAeHB1cQB+AE4AAAAAc3EAfgANP0AAAAAAAAx3CAAAABAAAAAA
+eHBzcQB+AFtzcQB+ACUAAAADdwQAAAAKc3EAfgBbc3EAfgAlAAAAAncEAAAACnNxAH4AYgAAAAAA
+AAAAc3EAfgAlAAAAAXcEAAAAAXNxAH4AZnEAfgBVc3EAfgBqcQB+AHJzcQB+AH5xAH4AgXhwc3EA
+fgCCcQB+AFdxAH4AhHNxAH4AYgAAAAEAAAAAc3EAfgAlAAAAAXcEAAAAAXNxAH4AZnEAfgCNc3EA
+fgBqcQB+AHJzcQB+AH5xAH4AkXhwc3EAfgCCcQB+AFdxAH4AhHhzcQB+AJNzcQB+ACUAAAACdwQA
+AAAKc3EAfgBiAAAAAgAAAABzcQB+ACUAAAABdwQAAAABc3EAfgBmcQB+AI1zcQB+AGpxAH4AcnNx
+AH4AfnEAfgCBeHBzcQB+AIJxAH4AV3EAfgCEc3EAfgBbc3EAfgAlAAAAAncEAAAACnNxAH4AYgAA
+AAMAAAAAc3EAfgAlAAAAAXcEAAAAAXNxAH4AZnEAfgChc3EAfgBqcQB+AHJzcQB+AH5xAH4Ap3hw
+c3EAfgCCcQB+AKNxAH4AhHNxAH4AYgAAAAQAAAAAc3EAfgAlAAAAAXcEAAAAAXNxAH4AZnEAfgCh
+c3EAfgBqcQB+AHJzcQB+AH5xAH4Arnhwc3EAfgCCcQB+AKNxAH4AhHh4c3EAfgCTc3EAfgAlAAAA
+AncEAAAACnNxAH4AYgAAAAUAAAAAc3EAfgAlAAAAAXcEAAAAAXNxAH4AZnEAfgC1c3EAfgBqcQB+
+AHJzcQB+AH5xAH4AgXhwc3EAfgCCcQB+AFdxAH4AhHNxAH4AYgAAAAb/////c3EAfgAlAAAAAXcE
+AAAAAXNxAH4AZnEAfgC1c3EAfgBqcQB+AHJzcQB+AH5xAH4Av3hwc3EAfgCCcQB+AFdxAH4AhHh4
+dAANSGVsbG8gV29ybGQgMXBxAH4A3nEAfgA/c3EAfgA6AAAAAAAbAAAAAHNxAH4AJQAAAAF3BAAA
+AAFzcQB+AEEAAAAAABwAAAAAcQB+AEpxAH4BG3hzcQB+ANl1cQB+ANwAAAABcQB+ANNxAH4A3nEA
+fgAqeHNxAH4A2XVxAH4A3AAAAAFzcgAtb3JnLmRyb29scy5jb21tb24uSW5zdGFuY2VOb3RFcXVh
+bHNDb25zdHJhaW50u86LzZRlbJsCAAJJAAtvdGhlckNvbHVtblsADGRlY2xhcmF0aW9uc3EAfgBH
+eHAAAAACdXEAfgBOAAAAAHNxAH4AOgAAAAAABwAAAAVzcQB+ACUAAAACdwQAAAACcQB+AN5zcQB+
+ADoAAAAAAAwAAAACc3EAfgAlAAAAA3cEAAAABHNxAH4AQQAAAAAADQAAAABxAH4A4XEAfgEnc3EA
+fgA6AAAAAAAdAAAAAHNxAH4AJQAAAAF3BAAAAAFzcQB+AEEAAAAAAB4AAAAAcQB+AEpxAH4BKnhz
+cQB+ANlxAH4A3XEAfgEncQB+ADhzcQB+ADoAAAAAAB8AAAAAc3EAfgAlAAAAAXcEAAAAAXNxAH4A
+QQAAAAAAIAAAAABxAH4ASnEAfgEueHNxAH4A2XVxAH4A3AAAAAFxAH4A03EAfgEncQB+ACp4c3EA
+fgDZdXEAfgDcAAAAAXNxAH4BIgAAAAJ1cQB+AE4AAAAAcQB+ASVzcQB+ADUAAQAAAAsAAAAFc3EA
+fgAkAAAAAncEAAAAAnEAfgEnc3EAfgA6AAAAAAAVAAAAAnNxAH4AJQAAAAN3BAAAAARzcQB+AEEA
+AAAAABYAAAAAcQB+AOFxAH4BOXNxAH4AOgAAAAAAJQAAAABzcQB+ACUAAAABdwQAAAABc3EAfgBB
+AAAAAAAmAAAAAHEAfgBKcQB+ATx4c3EAfgDZcQB+AN1xAH4BOXEAfgA4c3EAfgA6AAAAAAAnAAAA
+AHNxAH4AJQAAAAF3BAAAAAFzcQB+AEEAAAAAACgAAAAAcQB+AEpxAH4BQHhzcQB+ANl1cQB+ANwA
+AAABcQB+ANNxAH4BOXEAfgAqeHNxAH4A2XVxAH4A3AAAAAFzcQB+ASIAAAABdXEAfgBOAAAAAHNx
+AH4AOgAAAAAAEgAAAAVzcQB+ACUAAAACdwQAAAACc3EAfgA6AAAAAAATAAAAAnNxAH4AJQAAAAN3
+BAAAAARzcQB+AEEAAAAAABQAAAAAcQB+AOFxAH4BS3NxAH4AOgAAAAAAIQAAAABzcQB+ACUAAAAB
+dwQAAAABc3EAfgBBAAAAAAAiAAAAAHEAfgBKcQB+AU54c3EAfgDZcQB+AN1xAH4BS3EAfgA4c3EA
+fgA6AAAAAAAjAAAAAHNxAH4AJQAAAAF3BAAAAAFzcQB+AEEAAAAAACQAAAAAcQB+AEpxAH4BUnhz
+cQB+ANl1cQB+ANwAAAABcQB+ANNxAH4BS3EAfgAqeHNxAH4A2XVxAH4A3AAAAAFzcQB+ASIAAAAB
+dXEAfgBOAAAAAHEAfgFJc3EAfgA1AAEAAAAIAAAABXNxAH4AJAAAAAJ3BAAAAAJxAH4A3nEAfgFL
+eHEAfgEQc3EAfgAnAAEAAAABAAAAKXNxAH4AK3NxAH4ADT9AAAAAAAAMdwgAAAAQAAAAA3NxAH4A
+MHNxAH4ADT9AAAAAAAAMdwgAAAAQAAAAAXEAfgCBc3EAfgA1AAEAAAACAAAAC3NxAH4AJAAAAAF3
+BAAAAAFzcgAmb3JnLmRyb29scy5yZXRlb28uTGVmdElucHV0QWRhcHRlck5vZGVmYbm/CjpSNAIA
+AkwABmJpbmRlcnEAfgA8TAAMb2JqZWN0U291cmNlcQB+ADd4cQB+AD4AAQAAAAMAAAALc3EAfgAl
+AAAAAXcEAAAAAXNxAH4AOgAAAAAABQAAAAtzcQB+ACUAAAACdwQAAAACcQB+ASVzcQB+ADoAAAAA
+ABAAAAAFc3EAfgAlAAAAAXcEAAAAAXEAfgFJeHNxAH4A2XEAfgDdcQB+AWdzcQB+ADUAAQAAAA8A
+AAAFc3EAfgAkAAAAAXcEAAAAAXEAfgFpeHEAfgECc3EAfgAnAAEAAAAOAAAAC3NxAH4AK3NxAH4A
+DT9AAAAAAAAMdwgAAAAQAAAAAXNxAH4AMHNxAH4ADT9AAAAAAAAMdwgAAAAQAAAAAnEAfgCuc3EA
+fgA1AAEAAAARAAAABXNxAH4AJAAAAAF3BAAAAAFxAH4BSXhxAH4BCHEAfgFucQB+AKdxAH4BbHhx
+AH4BAnEAfgFxeHNxAH4AJQAAAAJ3BAAAAAJxAH4BbHEAfgFzeHEAfgFzc3EAfgAlAAAAAHcEAAAA
+AXhxAH4BBXEAfgAjeHNxAH4A2XVxAH4A3AAAAAFzcQB+ASIAAAAAdXEAfgBOAAAAAHEAfgFlc3EA
+fgA1AAEAAAAEAAAAC3NxAH4AJAAAAAF3BAAAAAFxAH4BZ3hxAH4A8nEAfgFdeHNxAH4A2XEAfgDd
+cQB+AWJ4cQB+AOxxAH4BXXhxAH4A7HEAfgFgc3EAfgAwc3EAfgANP0AAAAAAAAx3CAAAABAAAAAC
+cQB+AJFxAH4Be3EAfgCBc3EAfgA1AAEAAAAGAAAABXNxAH4AJAAAAAF3BAAAAAFxAH4BJXhxAH4A
++nEAfgFdeHEAfgDycQB+AX5zcQB+ADBzcQB+AA0/QAAAAAAADHcIAAAAEAAAAAJxAH4Av3EAfgE3
+cQB+AIFxAH4BW3hxAH4BEHEAfgGCeHNxAH4AJQAAAAV3BAAAAAdxAH4BYnEAfgF7cQB+AYBxAH4B
+W3EAfgE3eHEAfgE3c3EAfgAlAAAAAHcEAAAAAXhxAH4A73EAfgAjcQB+ATl4c3EAfgDZdXEAfgDc
+AAAAAXNxAH4BIgAAAAN1cQB+AE4AAAAAcQB+AWlxAH4Bc3EAfgE3eHEAfgEWcQB+AV14c3EAfgDZ
+dXEAfgDcAAAAAXNxAH4BIgAAAAF1cQB+AE4AAAAAcQB+AWdxAH4BgHEAfgFbcQB+ADhxAH4BKnEA
+fgFOcQB+ATx4cQB+AMVxAH4AKnhxAH4AxXEAfgAyeHNxAH4AJQAAAAF3BAAAAAFxAH4AOHhxAH4B
+QHNxAH4AJQAAAAR3BAAAAARxAH4BG3EAfgEucQB+AVJxAH4BQHhxAH4AznEAfgAjc3EAfgANP0AA
+AAAAAAx3CAAAABAAAAADcQB+AM5xAH4AKnEAfgDvcQB+AV1xAH4BBXEAfgFueHNyACZvcmcuZHJv
+b2xzLnNwaS5DbGFzc09iamVjdFR5cGVSZXNvbHZlcgKE2PxwsbDrAgABTAAKb2JqZWN0VHlwZXQA
+Q0xvcmcvZHJvb2xzL3NwaS9DbGFzc09iamVjdFR5cGVSZXNvbHZlciRNb2RpZmllYWJsZUNsYXNz
+T2JqZWN0VHlwZTt4cHNyAEFvcmcuZHJvb2xzLnNwaS5DbGFzc09iamVjdFR5cGVSZXNvbHZlciRN
+b2RpZmllYWJsZUNsYXNzT2JqZWN0VHlwZUSlq5QCN/s1AgAAeHEAfgCCcHNxAH4AdnBwdAAEbnVs
+bHNyAB9vcmcuZHJvb2xzLnJldGVvby5SZXRlb29CdWlsZGVyGB1Z+4/IA/ACAAlJABdjdXJyZW50
+T2Zmc2V0QWRqdXN0bWVudEkAAmlkTAANYXR0YWNoZWROb2Rlc3EAfgAQTAAMZGVjbGFyYXRpb25z
+cQB+ABBMAAxvYmplY3RTb3VyY2VxAH4AN0wACm9iamVjdFR5cGVxAH4AEEwACHJlc29sdmVycQB+
+AB9MAAVydWxlc3EAfgAQTAALdHVwbGVTb3VyY2VxAH4APXhwAAAAAAAAAClzcQB+AA0/QAAAAAAA
+MHcIAAAAQAAAABxxAH4AKnEAfgAqcQB+AS5xAH4BLnEAfgFscQB+AWxxAH4BZ3EAfgFncQB+AXtx
+AH4Be3EAfgFzcQB+AXNxAH4BZXEAfgFlcQB+AWJxAH4BYnEAfgFpcQB+AWlxAH4BUnEAfgFScQB+
+AUBxAH4BQHEAfgFdcQB+AV1xAH4BOXEAfgE5cQB+AN5xAH4A3nEAfgGAcQB+AYBxAH4BKnEAfgEq
+cQB+AW5xAH4BbnEAfgEncQB+ASdxAH4BSXEAfgFJcQB+AVtxAH4BW3EAfgFOcQB+AU5xAH4BPHEA
+fgE8cQB+ATdxAH4BN3EAfgElcQB+ASVxAH4AP3EAfgA/cQB+AUtxAH4BS3EAfgEbcQB+ARtxAH4A
+OHEAfgA4eHNxAH4ADT9AAAAAAAAMdwgAAAAQAAAAAXEAfgBZcQB+AFJ4cQB+ACpzcgAXamF2YS51
+dGlsLkxpbmtlZEhhc2hNYXA0wE5cEGzA+wIAAVoAC2FjY2Vzc09yZGVyeHEAfgANP0AAAAAAAAx3
+CAAAABAAAAADcQB+AINzcgARamF2YS5sYW5nLkludGVnZXIS4qCk94GHOAIAAUkABXZhbHVleHIA
+EGphdmEubGFuZy5OdW1iZXKGrJUdC5TgiwIAAHhwAAAABXEAfgCoc3EAfgGeAAAABHEAfgDXc3EA
+fgGeAAAABngAcQB+AZNzcQB+AA0/QAAAAAAADHcIAAAAEAAAAAJxAH4A4XVyAB1bTG9yZy5kcm9v
+bHMucmV0ZW9vLkJhc2VOb2RlOwvnyZNDnLPqAgAAeHAAAAAEcQB+AOBxAH4BKXEAfgFNcQB+ATtx
+AH4ASnVxAH4BpAAAAAhxAH4AQ3EAfgEdcQB+ASxxAH4BMHEAfgFQcQB+AVRxAH4BPnEAfgFCeHEA
+fgFA</byte-array>
</org.drools.reteoo.ReteooRuleBase>
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/reteoo/ThreeColumnsWithConstraints
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/reteoo/ThreeColumnsWithConstraints 2006-08-02 21:58:31 UTC (rev 5420)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/reteoo/ThreeColumnsWithConstraints 2006-08-03 00:14:06 UTC (rev 5421)
@@ -270,7 +270,7 @@
b29scy9ydWxlL0RlY2xhcmF0aW9uO3hwc3IAG29yZy5kcm9vbHMucnVsZS5EZWNsYXJhdGlvbgNz
PAHyIOvWAgADSQAGY29sdW1uTAAJZXh0cmFjdG9ydAAaTG9yZy9kcm9vbHMvc3BpL0V4dHJhY3Rv
cjtMAAppZGVudGlmaWVydAASTGphdmEvbGFuZy9TdHJpbmc7eHAAAAABc3IAI29yZy5kcm9vbHMu
-YmFzZS5DbGFzc0ZpZWxkRXh0cmFjdG9yGeJAAYkQ8aMCAAJMAAVjbGF6enQAEUxqYXZhL2xhbmcv
+YmFzZS5DbGFzc0ZpZWxkRXh0cmFjdG9yAAAAAAAAAUACAAJMAAVjbGF6enQAEUxqYXZhL2xhbmcv
Q2xhc3M7TAAJZmllbGROYW1lcQB+AAp4cHZyABFvcmcuZHJvb2xzLkNoZWVzZe+FAhE7Rf31AgAC
SQAFcHJpY2VMAAR0eXBlcQB+AAp4cHQABXByaWNldAAHJHByaWNlMnNyAExvcmcuZHJvb2xzLmNv
bXBpbGVyLlJ1bGVfdGhyZWVfY29sdW1uc193aXRoX2NvbnN0cmFpbnRzXzFfMFByZWRpY2F0ZTBJ
@@ -292,45 +292,57 @@
a2Vybl6svvqzc2oCAAB4cHVxAH4AFQAAAAVxAH4AF3NxAH4ACAAAAAFzcgAeb3JnLmRyb29scy5z
cGkuQ29sdW1uRXh0cmFjdG9yfa0D3zT82ZwCAAFMAApvYmplY3RUeXBldAAbTG9yZy9kcm9vbHMv
c3BpL09iamVjdFR5cGU7eHBzcgAfb3JnLmRyb29scy5iYXNlLkNsYXNzT2JqZWN0VHlwZdzs2BfU
-lPv9AgACSQAJdmFsdWVUeXBlTAAPb2JqZWN0VHlwZUNsYXNzcQB+AA14cAAAANJxAH4AEHQACCRj
-aGVlc2Uyc3EAfgAIAAAAAHNxAH4ADHEAfgAQdAAEdHlwZXQABSR0eXBlcQB+AAtzcQB+AAgAAAAA
-c3EAfgAuc3EAfgAxAAAA0nEAfgAQdAAIJGNoZWVzZTFzcQB+AAA/QAAAAAAADHcIAAAAEAAAAAVx
-AH4AGHEAfgAXcQB+ADNxAH4ALXEAfgA3cQB+ADRxAH4AEnEAfgALcQB+ADtxAH4AOHhwc3IAE29y
-Zy5kcm9vbHMucnVsZS5BbmT8+Oci8KbDdgIAAHhyABxvcmcuZHJvb2xzLnJ1bGUuR3JvdXBFbGVt
-ZW50xtyTv2+16VgCAAFMAAhjaGlsZHJlbnQAEExqYXZhL3V0aWwvTGlzdDt4cgAib3JnLmRyb29s
-cy5ydWxlLkNvbmRpdGlvbmFsRWxlbWVudMYMc+lm86I2AgAAeHBzcgATamF2YS51dGlsLkFycmF5
-TGlzdHiB0h2Zx2GdAwABSQAEc2l6ZXhwAAAAA3cEAAAACnNyABZvcmcuZHJvb2xzLnJ1bGUuQ29s
-dW1ufzmwAkCvUeYCAAVJAAVpbmRleEkABm9mZnNldEwAC2NvbnN0cmFpbnRzcQB+AD9MAAtkZWNs
-YXJhdGlvbnEAfgAETAAKb2JqZWN0VHlwZXEAfgAveHAAAAAAAAAAAHNxAH4AQgAAAAN3BAAAAARx
-AH4ANHNyACFvcmcuZHJvb2xzLnJ1bGUuTGl0ZXJhbENvbnN0cmFpbnQDkvrW5PmSswIAA0wACWV2
-YWx1YXRvcnQAGkxvcmcvZHJvb2xzL3NwaS9FdmFsdWF0b3I7TAAJZXh0cmFjdG9ydAAfTG9yZy9k
-cm9vbHMvc3BpL0ZpZWxkRXh0cmFjdG9yO0wABWZpZWxkdAAbTG9yZy9kcm9vbHMvc3BpL0ZpZWxk
-VmFsdWU7eHBzcgA9b3JnLmRyb29scy5iYXNlLmV2YWx1YXRvcnMuU3RyaW5nRmFjdG9yeSRTdHJp
-bmdFcXVhbEV2YWx1YXRvcklP5b3Q5UiWAgAAeHIAHW9yZy5kcm9vbHMuYmFzZS5CYXNlRXZhbHVh
-dG9yrkFxrDThjWsCAAJJAAhvcGVyYXRvckkABHR5cGV4cAAAAAEAAAC0cQB+ADVzcgAZb3JnLmRy
-b29scy5iYXNlLkZpZWxkSW1wbK6ZTfSs3XZEAgABTAAFdmFsdWV0ABJMamF2YS9sYW5nL09iamVj
-dDt4cHQAB2NoZWRkYXJxAH4AF3hxAH4AOHEAfgA6c3EAfgBEAAAAAQAAAABzcQB+AEIAAAADdwQA
-AAAEc3IAJ29yZy5kcm9vbHMucnVsZS5Cb3VuZFZhcmlhYmxlQ29uc3RyYWludHD61IBf/tZXAgAF
-SQAGY29sdW1uTAALZGVjbGFyYXRpb25xAH4ABEwACWV2YWx1YXRvcnEAfgBITAAOZmllbGRFeHRy
-YWN0b3JxAH4ASVsAFHJlcXVpcmVkRGVjbGFyYXRpb25zcQB+AAZ4cAAAAABxAH4ANHEAfgBOcQB+
-ADV1cQB+ABUAAAABcQB+ADRxAH4AC3EAfgAHeHEAfgAtcQB+ADJzcQB+AEQAAAACAAAAAHNxAH4A
-QgAAAAF3BAAAAAFzcQB+AFUAAAAAcQB+ADRxAH4ATnNxAH4ADHZyABFvcmcuZHJvb2xzLlBlcnNv
-biSkLwIXn7hmAgAISQADYWdlWgAFYWxpdmVDAANzZXhMAApiaWdEZWNpbWFsdAAWTGphdmEvbWF0
-aC9CaWdEZWNpbWFsO0wACmJpZ0ludGVnZXJ0ABZMamF2YS9tYXRoL0JpZ0ludGVnZXI7TAAFbGlr
-ZXNxAH4ACkwABG5hbWVxAH4ACkwABnN0YXR1c3EAfgAKeHB0AARuYW1ldXEAfgAVAAAAAXEAfgA0
-eHBzcQB+ADEAAADScQB+AF94dAAgdGhyZWUgY29sdW1ucyB3aXRoIGNvbnN0cmFpbnRzIDFwdABN
-b3JnLmRyb29scy5jb21waWxlci5SdWxlX3RocmVlX2NvbHVtbnNfd2l0aF9jb25zdHJhaW50c18y
-XzBDb25zZXF1ZW5jZUludm9rZXJzcQB+ACMAAAAAAAAAAAIAAAAAAAFwcQB+AClzcgBNb3JnLmRy
-b29scy5jb21waWxlci5SdWxlX3RocmVlX2NvbHVtbnNfd2l0aF9jb25zdHJhaW50c18yXzBDb25z
-ZXF1ZW5jZUludm9rZXJuXqy++rNzagIAAHhwdXEAfgAVAAAABXEAfgAgc3EAfgAIAAAAAXNxAH4A
-LnNxAH4AMQAAANJxAH4AEHQACCRjaGVlc2Uyc3EAfgAIAAAAAHEAfgA1dAAFJHR5cGVxAH4AG3Nx
-AH4ACAAAAABzcQB+AC5zcQB+ADEAAADScQB+ABB0AAgkY2hlZXNlMXNxAH4AAD9AAAAAAAAMdwgA
-AAAQAAAABXEAfgAhcQB+ACBxAH4AbHEAfgBpcQB+AG5xAH4AbXEAfgAccQB+ABtxAH4AcnEAfgBv
-eHBzcQB+AD1zcQB+AEIAAAACdwQAAAAKc3EAfgBEAAAAAAAAAABzcQB+AEIAAAADdwQAAAAEcQB+
-AG1zcQB+AEdxAH4ATnEAfgA1c3EAfgBPcQB+AFJxAH4AIHhxAH4Ab3EAfgBxc3EAfgBEAAAAAQAA
-AABzcQB+AEIAAAADdwQAAAAEc3EAfgBVAAAAAHEAfgBtcQB+AE5xAH4ANXVxAH4AFQAAAAFxAH4A
-bXEAfgAbcQB+ABp4cQB+AGlxAH4Aa3h0ACB0aHJlZSBjb2x1bW5zIHdpdGggY29uc3RyYWludHMg
-MnB4</byte-array>
+lPv9AgACTAAPb2JqZWN0VHlwZUNsYXNzcQB+AA1MAAl2YWx1ZVR5cGV0ABtMb3JnL2Ryb29scy9i
+YXNlL1ZhbHVlVHlwZTt4cHEAfgAQc3IAGW9yZy5kcm9vbHMuYmFzZS5WYWx1ZVR5cGUAAAAAAAAB
+QAIAA0wACWNsYXNzVHlwZXEAfgANTAAQZXZhbHVhdG9yRmFjdG9yeXQALUxvcmcvZHJvb2xzL2Jh
+c2UvZXZhbHVhdG9ycy9FdmFsdWF0b3JGYWN0b3J5O0wABG5hbWVxAH4ACnhwdnIAEGphdmEubGFu
+Zy5PYmplY3QAAAAAAAAAAAAAAHhwc3IAKG9yZy5kcm9vbHMuYmFzZS5ldmFsdWF0b3JzLk9iamVj
+dEZhY3RvcnmJYnOb3hlWOQIAAHhwdAAGT2JqZWN0dAAIJGNoZWVzZTJzcQB+AAgAAAAAc3EAfgAM
+cQB+ABB0AAR0eXBldAAFJHR5cGVxAH4AC3NxAH4ACAAAAABzcQB+AC5zcQB+ADFxAH4AEHEAfgA2
+dAAIJGNoZWVzZTFzcQB+AAA/QAAAAAAADHcIAAAAEAAAAAVxAH4AGHEAfgAXcQB+ADxxAH4ALXEA
+fgBAcQB+AD1xAH4AEnEAfgALcQB+AERxAH4AQXhwc3IAE29yZy5kcm9vbHMucnVsZS5BbmT8+Oci
+8KbDdgIAAHhyABxvcmcuZHJvb2xzLnJ1bGUuR3JvdXBFbGVtZW50xtyTv2+16VgCAAFMAAhjaGls
+ZHJlbnQAEExqYXZhL3V0aWwvTGlzdDt4cgAib3JnLmRyb29scy5ydWxlLkNvbmRpdGlvbmFsRWxl
+bWVudMYMc+lm86I2AgAAeHBzcgATamF2YS51dGlsLkFycmF5TGlzdHiB0h2Zx2GdAwABSQAEc2l6
+ZXhwAAAAA3cEAAAACnNyABZvcmcuZHJvb2xzLnJ1bGUuQ29sdW1ufzmwAkCvUeYCAAVJAAVpbmRl
+eEkABm9mZnNldEwAC2NvbnN0cmFpbnRzcQB+AEhMAAtkZWNsYXJhdGlvbnEAfgAETAAKb2JqZWN0
+VHlwZXEAfgAveHAAAAAAAAAAAHNxAH4ASwAAAAN3BAAAAARxAH4APXNyACFvcmcuZHJvb2xzLnJ1
+bGUuTGl0ZXJhbENvbnN0cmFpbnQAAAAAAAABQAIAAkwACWV4dHJhY3RvcnQAH0xvcmcvZHJvb2xz
+L3NwaS9GaWVsZEV4dHJhY3RvcjtMAAtyZXN0cmljdGlvbnQAJExvcmcvZHJvb2xzL3J1bGUvTGl0
+ZXJhbFJlc3RyaWN0aW9uO3hwcQB+AD5zcgAib3JnLmRyb29scy5ydWxlLkxpdGVyYWxSZXN0cmlj
+dGlvbgAAAAAAAAFAAgACTAAJZXZhbHVhdG9ydAAaTG9yZy9kcm9vbHMvc3BpL0V2YWx1YXRvcjtM
+AAVmaWVsZHQAG0xvcmcvZHJvb2xzL3NwaS9GaWVsZFZhbHVlO3hwc3IAPW9yZy5kcm9vbHMuYmFz
+ZS5ldmFsdWF0b3JzLlN0cmluZ0ZhY3RvcnkkU3RyaW5nRXF1YWxFdmFsdWF0b3IAAAAAAAABQAIA
+AHhyAB1vcmcuZHJvb2xzLmJhc2UuQmFzZUV2YWx1YXRvclUki7NlrK5/AgACTAAIb3BlcmF0b3J0
+ACVMb3JnL2Ryb29scy9iYXNlL2V2YWx1YXRvcnMvT3BlcmF0b3I7TAAEdHlwZXEAfgAyeHBzcgAj
+b3JnLmRyb29scy5iYXNlLmV2YWx1YXRvcnMuT3BlcmF0b3IAAAAAAAABQAIAAUwACG9wZXJhdG9y
+cQB+AAp4cHQAAj09c3EAfgA0dnIAEGphdmEubGFuZy5TdHJpbmeg8KQ4ejuzQgIAAHhwc3IAKG9y
+Zy5kcm9vbHMuYmFzZS5ldmFsdWF0b3JzLlN0cmluZ0ZhY3RvcnnnjP+pwAUavgIAAHhwdAAGU3Ry
+aW5nc3IAGW9yZy5kcm9vbHMuYmFzZS5GaWVsZEltcGwAAAAAAAABQAIAAUwABXZhbHVldAASTGph
+dmEvbGFuZy9PYmplY3Q7eHB0AAdjaGVkZGFycQB+ABd4cQB+AEFxAH4AQ3NxAH4ATQAAAAEAAAAA
+c3EAfgBLAAAAA3cEAAAABHNyACJvcmcuZHJvb2xzLnJ1bGUuVmFyaWFibGVDb25zdHJhaW50AAAA
+AAAAAUACAAJMAA5maWVsZEV4dHJhY3RvcnEAfgBRTAALcmVzdHJpY3Rpb250ACVMb3JnL2Ryb29s
+cy9ydWxlL1ZhcmlhYmxlUmVzdHJpY3Rpb247eHBxAH4APnNyACNvcmcuZHJvb2xzLnJ1bGUuVmFy
+aWFibGVSZXN0cmljdGlvbgAAAAAAAAFAAgAESQAGY29sdW1uTAALZGVjbGFyYXRpb25xAH4ABEwA
+CWV2YWx1YXRvcnEAfgBVWwAUcmVxdWlyZWREZWNsYXJhdGlvbnNxAH4ABnhwAAAAAHEAfgA9cQB+
+AFt1cQB+ABUAAAABcQB+AD1xAH4AC3EAfgAHeHEAfgAtcQB+ADNzcQB+AE0AAAACAAAAAHNxAH4A
+SwAAAAF3BAAAAAFzcQB+AGtzcQB+AAx2cgARb3JnLmRyb29scy5QZXJzb24kpC8CF5+4ZgIACUkA
+A2FnZVoABWFsaXZlQwADc2V4TAAKYmlnRGVjaW1hbHQAFkxqYXZhL21hdGgvQmlnRGVjaW1hbDtM
+AApiaWdJbnRlZ2VydAAWTGphdmEvbWF0aC9CaWdJbnRlZ2VyO0wABGhhaXJxAH4ACkwABWxpa2Vz
+cQB+AApMAARuYW1lcQB+AApMAAZzdGF0dXNxAH4ACnhwdAAEbmFtZXNxAH4AbgAAAABxAH4APXEA
+fgBbdXEAfgAVAAAAAXEAfgA9eHBzcQB+ADFxAH4AeHEAfgA2eHQAIHRocmVlIGNvbHVtbnMgd2l0
+aCBjb25zdHJhaW50cyAxcHQATW9yZy5kcm9vbHMuY29tcGlsZXIuUnVsZV90aHJlZV9jb2x1bW5z
+X3dpdGhfY29uc3RyYWludHNfMl8wQ29uc2VxdWVuY2VJbnZva2Vyc3EAfgAjAAAAAAAAAAACAAAA
+AAABcHEAfgApc3IATW9yZy5kcm9vbHMuY29tcGlsZXIuUnVsZV90aHJlZV9jb2x1bW5zX3dpdGhf
+Y29uc3RyYWludHNfMl8wQ29uc2VxdWVuY2VJbnZva2Vybl6svvqzc2oCAAB4cHVxAH4AFQAAAAVx
+AH4AIHNxAH4ACAAAAAFzcQB+AC5zcQB+ADFxAH4AEHEAfgA2dAAIJGNoZWVzZTJzcQB+AAgAAAAA
+cQB+AD50AAUkdHlwZXEAfgAbc3EAfgAIAAAAAHNxAH4ALnNxAH4AMXEAfgAQcQB+ADZ0AAgkY2hl
+ZXNlMXNxAH4AAD9AAAAAAAAMdwgAAAAQAAAABXEAfgAhcQB+ACBxAH4AhnEAfgCDcQB+AIhxAH4A
+h3EAfgAccQB+ABtxAH4AjHEAfgCJeHBzcQB+AEZzcQB+AEsAAAACdwQAAAAKc3EAfgBNAAAAAAAA
+AABzcQB+AEsAAAADdwQAAAAEcQB+AIdzcQB+AFBxAH4APnNxAH4AVHEAfgBbc3EAfgBlcQB+AGhx
+AH4AIHhxAH4AiXEAfgCLc3EAfgBNAAAAAQAAAABzcQB+AEsAAAADdwQAAAAEc3EAfgBrcQB+AD5z
+cQB+AG4AAAAAcQB+AIdxAH4AW3VxAH4AFQAAAAFxAH4Ah3EAfgAbcQB+ABp4cQB+AINxAH4AhXh0
+ACB0aHJlZSBjb2x1bW5zIHdpdGggY29uc3RyYWludHMgMnB4</byte-array>
</org.drools.rule.PackageCompilationData>
<string>org.drools.compiler</string>
<list>
@@ -355,60 +367,73 @@
bHMucnVsZS5EZWNsYXJhdGlvbjv1p88LNGgp4wIAAHhwAAAABXNyABtvcmcuZHJvb2xzLnJ1bGUu
RGVjbGFyYXRpb24DczwB8iDr1gIAA0kABmNvbHVtbkwACWV4dHJhY3RvcnQAGkxvcmcvZHJvb2xz
L3NwaS9FeHRyYWN0b3I7TAAKaWRlbnRpZmllcnEAfgAFeHAAAAAAc3IAI29yZy5kcm9vbHMuYmFz
-ZS5DbGFzc0ZpZWxkRXh0cmFjdG9yGeJAAYkQ8aMCAAJMAAVjbGF6enQAEUxqYXZhL2xhbmcvQ2xh
+ZS5DbGFzc0ZpZWxkRXh0cmFjdG9yAAAAAAAAAUACAAJMAAVjbGF6enQAEUxqYXZhL2xhbmcvQ2xh
c3M7TAAJZmllbGROYW1lcQB+AAV4cHZyABFvcmcuZHJvb2xzLkNoZWVzZe+FAhE7Rf31AgACSQAF
cHJpY2VMAAR0eXBlcQB+AAV4cHQABXByaWNldAAHJHByaWNlMXNxAH4AEQAAAAFzcgAeb3JnLmRy
b29scy5zcGkuQ29sdW1uRXh0cmFjdG9yfa0D3zT82ZwCAAFMAApvYmplY3RUeXBldAAbTG9yZy9k
cm9vbHMvc3BpL09iamVjdFR5cGU7eHBzcgAfb3JnLmRyb29scy5iYXNlLkNsYXNzT2JqZWN0VHlw
-Zdzs2BfUlPv9AgACSQAJdmFsdWVUeXBlTAAPb2JqZWN0VHlwZUNsYXNzcQB+ABV4cAAAANJxAH4A
-GHQACCRjaGVlc2Uyc3EAfgARAAAAAHNxAH4AFHEAfgAYdAAEdHlwZXQABSR0eXBlc3EAfgARAAAA
-AXEAfgAWdAAHJHByaWNlMnNxAH4AEQAAAABzcQB+ABxzcQB+AB8AAADScQB+ABh0AAgkY2hlZXNl
-MXNxAH4AAT9AAAAAAAAMdwgAAAAQAAAABXEAfgAacQB+ABNxAH4AIXEAfgAbcQB+ACVxAH4AInEA
-fgAncQB+ACZxAH4AK3EAfgAoeHBzcgATb3JnLmRyb29scy5ydWxlLkFuZPz45yLwpsN2AgAAeHIA
-HG9yZy5kcm9vbHMucnVsZS5Hcm91cEVsZW1lbnTG3JO/b7XpWAIAAUwACGNoaWxkcmVudAAQTGph
-dmEvdXRpbC9MaXN0O3hyACJvcmcuZHJvb2xzLnJ1bGUuQ29uZGl0aW9uYWxFbGVtZW50xgxz6Wbz
-ojYCAAB4cHNyABNqYXZhLnV0aWwuQXJyYXlMaXN0eIHSHZnHYZ0DAAFJAARzaXpleHAAAAADdwQA
-AAAKc3IAFm9yZy5kcm9vbHMucnVsZS5Db2x1bW5/ObACQK9R5gIABUkABWluZGV4SQAGb2Zmc2V0
-TAALY29uc3RyYWludHNxAH4AL0wAC2RlY2xhcmF0aW9udAAdTG9yZy9kcm9vbHMvcnVsZS9EZWNs
-YXJhdGlvbjtMAApvYmplY3RUeXBlcQB+AB14cAAAAAAAAAAAc3EAfgAyAAAAA3cEAAAABHEAfgAi
-c3IAIW9yZy5kcm9vbHMucnVsZS5MaXRlcmFsQ29uc3RyYWludAOS+tbk+ZKzAgADTAAJZXZhbHVh
-dG9ydAAaTG9yZy9kcm9vbHMvc3BpL0V2YWx1YXRvcjtMAAlleHRyYWN0b3J0AB9Mb3JnL2Ryb29s
-cy9zcGkvRmllbGRFeHRyYWN0b3I7TAAFZmllbGR0ABtMb3JnL2Ryb29scy9zcGkvRmllbGRWYWx1
-ZTt4cHNyAD1vcmcuZHJvb2xzLmJhc2UuZXZhbHVhdG9ycy5TdHJpbmdGYWN0b3J5JFN0cmluZ0Vx
-dWFsRXZhbHVhdG9ySU/lvdDlSJYCAAB4cgAdb3JnLmRyb29scy5iYXNlLkJhc2VFdmFsdWF0b3Ku
-QXGsNOGNawIAAkkACG9wZXJhdG9ySQAEdHlwZXhwAAAAAQAAALRxAH4AI3NyABlvcmcuZHJvb2xz
-LmJhc2UuRmllbGRJbXBsrplN9KzddkQCAAFMAAV2YWx1ZXQAEkxqYXZhL2xhbmcvT2JqZWN0O3hw
-dAAHY2hlZGRhcnEAfgATeHEAfgAocQB+ACpzcQB+ADQAAAABAAAAAHNxAH4AMgAAAAN3BAAAAARz
-cgAnb3JnLmRyb29scy5ydWxlLkJvdW5kVmFyaWFibGVDb25zdHJhaW50cPrUgF/+1lcCAAVJAAZj
-b2x1bW5MAAtkZWNsYXJhdGlvbnEAfgA1TAAJZXZhbHVhdG9ycQB+ADlMAA5maWVsZEV4dHJhY3Rv
-cnEAfgA6WwAUcmVxdWlyZWREZWNsYXJhdGlvbnNxAH4AB3hwAAAAAHEAfgAicQB+AD9xAH4AI3Vx
-AH4ADwAAAAFxAH4AInEAfgAmc3IAI29yZy5kcm9vbHMucnVsZS5QcmVkaWNhdGVDb25zdHJhaW50
-/pCPpiJbhzgCAANMAAtkZWNsYXJhdGlvbnEAfgA1TAAKZXhwcmVzc2lvbnQAJExvcmcvZHJvb2xz
+Zdzs2BfUlPv9AgACTAAPb2JqZWN0VHlwZUNsYXNzcQB+ABVMAAl2YWx1ZVR5cGV0ABtMb3JnL2Ry
+b29scy9iYXNlL1ZhbHVlVHlwZTt4cHEAfgAYc3IAGW9yZy5kcm9vbHMuYmFzZS5WYWx1ZVR5cGUA
+AAAAAAABQAIAA0wACWNsYXNzVHlwZXEAfgAVTAAQZXZhbHVhdG9yRmFjdG9yeXQALUxvcmcvZHJv
+b2xzL2Jhc2UvZXZhbHVhdG9ycy9FdmFsdWF0b3JGYWN0b3J5O0wABG5hbWVxAH4ABXhwdnIAEGph
+dmEubGFuZy5PYmplY3QAAAAAAAAAAAAAAHhwc3IAKG9yZy5kcm9vbHMuYmFzZS5ldmFsdWF0b3Jz
+Lk9iamVjdEZhY3RvcnmJYnOb3hlWOQIAAHhwdAAGT2JqZWN0dAAIJGNoZWVzZTJzcQB+ABEAAAAA
+c3EAfgAUcQB+ABh0AAR0eXBldAAFJHR5cGVzcQB+ABEAAAABcQB+ABZ0AAckcHJpY2Uyc3EAfgAR
+AAAAAHNxAH4AHHNxAH4AH3EAfgAYcQB+ACR0AAgkY2hlZXNlMXNxAH4AAT9AAAAAAAAMdwgAAAAQ
+AAAABXEAfgAacQB+ABNxAH4AKnEAfgAbcQB+AC5xAH4AK3EAfgAwcQB+AC9xAH4ANHEAfgAxeHBz
+cgATb3JnLmRyb29scy5ydWxlLkFuZPz45yLwpsN2AgAAeHIAHG9yZy5kcm9vbHMucnVsZS5Hcm91
+cEVsZW1lbnTG3JO/b7XpWAIAAUwACGNoaWxkcmVudAAQTGphdmEvdXRpbC9MaXN0O3hyACJvcmcu
+ZHJvb2xzLnJ1bGUuQ29uZGl0aW9uYWxFbGVtZW50xgxz6WbzojYCAAB4cHNyABNqYXZhLnV0aWwu
+QXJyYXlMaXN0eIHSHZnHYZ0DAAFJAARzaXpleHAAAAADdwQAAAAKc3IAFm9yZy5kcm9vbHMucnVs
+ZS5Db2x1bW5/ObACQK9R5gIABUkABWluZGV4SQAGb2Zmc2V0TAALY29uc3RyYWludHNxAH4AOEwA
+C2RlY2xhcmF0aW9udAAdTG9yZy9kcm9vbHMvcnVsZS9EZWNsYXJhdGlvbjtMAApvYmplY3RUeXBl
+cQB+AB14cAAAAAAAAAAAc3EAfgA7AAAAA3cEAAAABHEAfgArc3IAIW9yZy5kcm9vbHMucnVsZS5M
+aXRlcmFsQ29uc3RyYWludAAAAAAAAAFAAgACTAAJZXh0cmFjdG9ydAAfTG9yZy9kcm9vbHMvc3Bp
+L0ZpZWxkRXh0cmFjdG9yO0wAC3Jlc3RyaWN0aW9udAAkTG9yZy9kcm9vbHMvcnVsZS9MaXRlcmFs
+UmVzdHJpY3Rpb247eHBxAH4ALHNyACJvcmcuZHJvb2xzLnJ1bGUuTGl0ZXJhbFJlc3RyaWN0aW9u
+AAAAAAAAAUACAAJMAAlldmFsdWF0b3J0ABpMb3JnL2Ryb29scy9zcGkvRXZhbHVhdG9yO0wABWZp
+ZWxkdAAbTG9yZy9kcm9vbHMvc3BpL0ZpZWxkVmFsdWU7eHBzcgA9b3JnLmRyb29scy5iYXNlLmV2
+YWx1YXRvcnMuU3RyaW5nRmFjdG9yeSRTdHJpbmdFcXVhbEV2YWx1YXRvcgAAAAAAAAFAAgAAeHIA
+HW9yZy5kcm9vbHMuYmFzZS5CYXNlRXZhbHVhdG9yVSSLs2Wsrn8CAAJMAAhvcGVyYXRvcnQAJUxv
+cmcvZHJvb2xzL2Jhc2UvZXZhbHVhdG9ycy9PcGVyYXRvcjtMAAR0eXBlcQB+ACB4cHNyACNvcmcu
+ZHJvb2xzLmJhc2UuZXZhbHVhdG9ycy5PcGVyYXRvcgAAAAAAAAFAAgABTAAIb3BlcmF0b3JxAH4A
+BXhwdAACPT1zcQB+ACJ2cgAQamF2YS5sYW5nLlN0cmluZ6DwpDh6O7NCAgAAeHBzcgAob3JnLmRy
+b29scy5iYXNlLmV2YWx1YXRvcnMuU3RyaW5nRmFjdG9yeeeM/6nABRq+AgAAeHB0AAZTdHJpbmdz
+cgAZb3JnLmRyb29scy5iYXNlLkZpZWxkSW1wbAAAAAAAAAFAAgABTAAFdmFsdWV0ABJMamF2YS9s
+YW5nL09iamVjdDt4cHQAB2NoZWRkYXJxAH4AE3hxAH4AMXEAfgAzc3EAfgA9AAAAAQAAAABzcQB+
+ADsAAAADdwQAAAAEc3IAIm9yZy5kcm9vbHMucnVsZS5WYXJpYWJsZUNvbnN0cmFpbnQAAAAAAAAB
+QAIAAkwADmZpZWxkRXh0cmFjdG9ycQB+AEJMAAtyZXN0cmljdGlvbnQAJUxvcmcvZHJvb2xzL3J1
+bGUvVmFyaWFibGVSZXN0cmljdGlvbjt4cHEAfgAsc3IAI29yZy5kcm9vbHMucnVsZS5WYXJpYWJs
+ZVJlc3RyaWN0aW9uAAAAAAAAAUACAARJAAZjb2x1bW5MAAtkZWNsYXJhdGlvbnEAfgA+TAAJZXZh
+bHVhdG9ycQB+AEZbABRyZXF1aXJlZERlY2xhcmF0aW9uc3EAfgAHeHAAAAAAcQB+ACtxAH4ATHVx
+AH4ADwAAAAFxAH4AK3EAfgAvc3IAI29yZy5kcm9vbHMucnVsZS5QcmVkaWNhdGVDb25zdHJhaW50
+/pCPpiJbhzgCAANMAAtkZWNsYXJhdGlvbnEAfgA+TAAKZXhwcmVzc2lvbnQAJExvcmcvZHJvb2xz
L3NwaS9QcmVkaWNhdGVFeHByZXNzaW9uO1sAFHJlcXVpcmVkRGVjbGFyYXRpb25zcQB+AAd4cHEA
-fgAmc3IATG9yZy5kcm9vbHMuY29tcGlsZXIuUnVsZV90aHJlZV9jb2x1bW5zX3dpdGhfY29uc3Ry
+fgAvc3IATG9yZy5kcm9vbHMuY29tcGlsZXIuUnVsZV90aHJlZV9jb2x1bW5zX3dpdGhfY29uc3Ry
YWludHNfMV8wUHJlZGljYXRlMEludm9rZXJuXqy++rNzagIAAHhwdXEAfgAPAAAAAXEAfgATeHEA
-fgAbcQB+ACBzcQB+ADQAAAACAAAAAHNxAH4AMgAAAAF3BAAAAAFzcQB+AEYAAAAAcQB+ACJxAH4A
-P3NxAH4AFHZyABFvcmcuZHJvb2xzLlBlcnNvbiSkLwIXn7hmAgAISQADYWdlWgAFYWxpdmVDAANz
-ZXhMAApiaWdEZWNpbWFsdAAWTGphdmEvbWF0aC9CaWdEZWNpbWFsO0wACmJpZ0ludGVnZXJ0ABZM
-amF2YS9tYXRoL0JpZ0ludGVnZXI7TAAFbGlrZXNxAH4ABUwABG5hbWVxAH4ABUwABnN0YXR1c3EA
-fgAFeHB0AARuYW1ldXEAfgAPAAAAAXEAfgAieHBzcQB+AB8AAADScQB+AFZ4cQB+AANwdAAgdGhy
-ZWUgY29sdW1ucyB3aXRoIGNvbnN0cmFpbnRzIDJzcQB+AAQAAAAAAAAAAAIAAAAAAAFwcQB+AAxz
-cgBNb3JnLmRyb29scy5jb21waWxlci5SdWxlX3RocmVlX2NvbHVtbnNfd2l0aF9jb25zdHJhaW50
-c18yXzBDb25zZXF1ZW5jZUludm9rZXJuXqy++rNzagIAAHhwdXEAfgAPAAAABXNxAH4AEQAAAABx
-AH4AFnQAByRwcmljZTFzcQB+ABEAAAABc3EAfgAcc3EAfgAfAAAA0nEAfgAYdAAIJGNoZWVzZTJz
-cQB+ABEAAAAAcQB+ACN0AAUkdHlwZXNxAH4AEQAAAAFxAH4AFnQAByRwcmljZTJzcQB+ABEAAAAA
-c3EAfgAcc3EAfgAfAAAA0nEAfgAYdAAIJGNoZWVzZTFzcQB+AAE/QAAAAAAADHcIAAAAEAAAAAVx
-AH4AYHEAfgBfcQB+AGRxAH4AYXEAfgBmcQB+AGVxAH4AaHEAfgBncQB+AGxxAH4AaXhwc3EAfgAt
-c3EAfgAyAAAAAncEAAAACnNxAH4ANAAAAAAAAAAAc3EAfgAyAAAAA3cEAAAABHEAfgBlc3EAfgA4
-cQB+AD9xAH4AI3NxAH4AQHEAfgBDcQB+AF94cQB+AGlxAH4Aa3NxAH4ANAAAAAEAAAAAc3EAfgAy
-AAAAA3cEAAAABHNxAH4ARgAAAABxAH4AZXEAfgA/cQB+ACN1cQB+AA8AAAABcQB+AGVxAH4AZ3Nx
-AH4ASXEAfgBnc3IATG9yZy5kcm9vbHMuY29tcGlsZXIuUnVsZV90aHJlZV9jb2x1bW5zX3dpdGhf
-Y29uc3RyYWludHNfMl8wUHJlZGljYXRlMEludm9rZXJuXqy++rNzagIAAHhwdXEAfgAPAAAAAXEA
-fgBfeHEAfgBhcQB+AGN4cQB+AFpweAA=</byte-array>
+fgAbcQB+ACFzcQB+AD0AAAACAAAAAHNxAH4AOwAAAAF3BAAAAAFzcQB+AFxzcQB+ABR2cgARb3Jn
+LmRyb29scy5QZXJzb24kpC8CF5+4ZgIACUkAA2FnZVoABWFsaXZlQwADc2V4TAAKYmlnRGVjaW1h
+bHQAFkxqYXZhL21hdGgvQmlnRGVjaW1hbDtMAApiaWdJbnRlZ2VydAAWTGphdmEvbWF0aC9CaWdJ
+bnRlZ2VyO0wABGhhaXJxAH4ABUwABWxpa2VzcQB+AAVMAARuYW1lcQB+AAVMAAZzdGF0dXNxAH4A
+BXhwdAAEbmFtZXNxAH4AXwAAAABxAH4AK3EAfgBMdXEAfgAPAAAAAXEAfgAreHBzcQB+AB9xAH4A
+b3EAfgAkeHEAfgADcHQAIHRocmVlIGNvbHVtbnMgd2l0aCBjb25zdHJhaW50cyAyc3EAfgAEAAAA
+AAAAAAACAAAAAAABcHEAfgAMc3IATW9yZy5kcm9vbHMuY29tcGlsZXIuUnVsZV90aHJlZV9jb2x1
+bW5zX3dpdGhfY29uc3RyYWludHNfMl8wQ29uc2VxdWVuY2VJbnZva2Vybl6svvqzc2oCAAB4cHVx
+AH4ADwAAAAVzcQB+ABEAAAAAcQB+ABZ0AAckcHJpY2Uxc3EAfgARAAAAAXNxAH4AHHNxAH4AH3EA
+fgAYcQB+ACR0AAgkY2hlZXNlMnNxAH4AEQAAAABxAH4ALHQABSR0eXBlc3EAfgARAAAAAXEAfgAW
+dAAHJHByaWNlMnNxAH4AEQAAAABzcQB+ABxzcQB+AB9xAH4AGHEAfgAkdAAIJGNoZWVzZTFzcQB+
+AAE/QAAAAAAADHcIAAAAEAAAAAVxAH4AenEAfgB5cQB+AH5xAH4Ae3EAfgCAcQB+AH9xAH4AgnEA
+fgCBcQB+AIZxAH4Ag3hwc3EAfgA2c3EAfgA7AAAAAncEAAAACnNxAH4APQAAAAAAAAAAc3EAfgA7
+AAAAA3cEAAAABHEAfgB/c3EAfgBBcQB+ACxzcQB+AEVxAH4ATHNxAH4AVnEAfgBZcQB+AHl4cQB+
+AINxAH4AhXNxAH4APQAAAAEAAAAAc3EAfgA7AAAAA3cEAAAABHNxAH4AXHEAfgAsc3EAfgBfAAAA
+AHEAfgB/cQB+AEx1cQB+AA8AAAABcQB+AH9xAH4AgXNxAH4AYnEAfgCBc3IATG9yZy5kcm9vbHMu
+Y29tcGlsZXIuUnVsZV90aHJlZV9jb2x1bW5zX3dpdGhfY29uc3RyYWludHNfMl8wUHJlZGljYXRl
+MEludm9rZXJuXqy++rNzagIAAHhwdXEAfgAPAAAAAXEAfgB5eHEAfgB7cQB+AH14cQB+AHRweAA=
+</byte-array>
</org.drools.rule.Package>
</entry>
</map>
- <byte-array>rO0ABXQAJDNhYzNhMzdlLWY0ZmMtNGQzMi1iNGVlLTkwYjY4OWMyNjcyN3NyAClvcmcuZHJvb2xz
+ <byte-array>rO0ABXQAJDFkMDU1YmY2LTEyZGUtNGU0My04ZWYyLTI0MzA2NTVkNzU0ZnNyAClvcmcuZHJvb2xz
LnJldGVvby5SZXRlb29GYWN0SGFuZGxlRmFjdG9yeQAAAAAAAAEsAgAAeHIAK29yZy5kcm9vbHMu
Y29tbW9uLkFic3RyYWN0RmFjdEhhbmRsZUZhY3RvcnlrwcaUre4SdAIAA0oAB2NvdW50ZXJKAAJp
ZEwADmZhY3RIYW5kbGVQb29sdAAkTG9yZy9kcm9vbHMvdXRpbC9QcmltaXRpdmVMb25nU3RhY2s7
@@ -496,86 +521,99 @@
ZS5EZWNsYXJhdGlvbjv1p88LNGgp4wIAAHhwAAAABXNyABtvcmcuZHJvb2xzLnJ1bGUuRGVjbGFy
YXRpb24DczwB8iDr1gIAA0kABmNvbHVtbkwACWV4dHJhY3RvcnQAGkxvcmcvZHJvb2xzL3NwaS9F
eHRyYWN0b3I7TAAKaWRlbnRpZmllcnEAfgA9eHAAAAAAc3IAI29yZy5kcm9vbHMuYmFzZS5DbGFz
-c0ZpZWxkRXh0cmFjdG9yGeJAAYkQ8aMCAAJMAAVjbGF6enQAEUxqYXZhL2xhbmcvQ2xhc3M7TAAJ
+c0ZpZWxkRXh0cmFjdG9yAAAAAAAAAUACAAJMAAVjbGF6enQAEUxqYXZhL2xhbmcvQ2xhc3M7TAAJ
ZmllbGROYW1lcQB+AD14cHZyABFvcmcuZHJvb2xzLkNoZWVzZe+FAhE7Rf31AgACSQAFcHJpY2VM
AAR0eXBlcQB+AD14cHQABXByaWNldAAHJHByaWNlMXNxAH4ASAAAAAFzcgAeb3JnLmRyb29scy5z
cGkuQ29sdW1uRXh0cmFjdG9yfa0D3zT82ZwCAAFMAApvYmplY3RUeXBlcQB+ACh4cHNyAB9vcmcu
-ZHJvb2xzLmJhc2UuQ2xhc3NPYmplY3RUeXBl3OzYF9SU+/0CAAJJAAl2YWx1ZVR5cGVMAA9vYmpl
-Y3RUeXBlQ2xhc3NxAH4ATHhwAAAA0nEAfgBPdAAIJGNoZWVzZTJzcQB+AEgAAAAAc3EAfgBLcQB+
-AE90AAR0eXBldAAFJHR5cGVzcQB+AEgAAAABcQB+AE10AAckcHJpY2Uyc3EAfgBIAAAAAHNxAH4A
-U3NxAH4AVQAAANJxAH4AT3QACCRjaGVlc2Uxc3EAfgANP0AAAAAAAAx3CAAAABAAAAAFcQB+AFFx
-AH4ASnEAfgBXcQB+AFJxAH4AW3EAfgBYcQB+AF1xAH4AXHEAfgBhcQB+AF54cHNyABNvcmcuZHJv
-b2xzLnJ1bGUuQW5k/PjnIvCmw3YCAAB4cgAcb3JnLmRyb29scy5ydWxlLkdyb3VwRWxlbWVudMbc
-k79vtelYAgABTAAIY2hpbGRyZW5xAH4ALHhyACJvcmcuZHJvb2xzLnJ1bGUuQ29uZGl0aW9uYWxF
-bGVtZW50xgxz6WbzojYCAAB4cHNxAH4AJQAAAAN3BAAAAApzcgAWb3JnLmRyb29scy5ydWxlLkNv
-bHVtbn85sAJAr1HmAgAFSQAFaW5kZXhJAAZvZmZzZXRMAAtjb25zdHJhaW50c3EAfgAsTAALZGVj
-bGFyYXRpb250AB1Mb3JnL2Ryb29scy9ydWxlL0RlY2xhcmF0aW9uO0wACm9iamVjdFR5cGVxAH4A
-KHhwAAAAAAAAAABzcQB+ACUAAAADdwQAAAAEcQB+AFhzcgAhb3JnLmRyb29scy5ydWxlLkxpdGVy
-YWxDb25zdHJhaW50A5L61uT5krMCAANMAAlldmFsdWF0b3J0ABpMb3JnL2Ryb29scy9zcGkvRXZh
-bHVhdG9yO0wACWV4dHJhY3RvcnQAH0xvcmcvZHJvb2xzL3NwaS9GaWVsZEV4dHJhY3RvcjtMAAVm
-aWVsZHQAG0xvcmcvZHJvb2xzL3NwaS9GaWVsZFZhbHVlO3hwc3IAPW9yZy5kcm9vbHMuYmFzZS5l
-dmFsdWF0b3JzLlN0cmluZ0ZhY3RvcnkkU3RyaW5nRXF1YWxFdmFsdWF0b3JJT+W90OVIlgIAAHhy
-AB1vcmcuZHJvb2xzLmJhc2UuQmFzZUV2YWx1YXRvcq5Bcaw04Y1rAgACSQAIb3BlcmF0b3JJAAR0
-eXBleHAAAAABAAAAtHEAfgBZc3IAGW9yZy5kcm9vbHMuYmFzZS5GaWVsZEltcGyumU30rN12RAIA
-AUwABXZhbHVldAASTGphdmEvbGFuZy9PYmplY3Q7eHB0AAdjaGVkZGFycQB+AEp4cQB+AF5xAH4A
-YHNxAH4AaAAAAAEAAAAAc3EAfgAlAAAAA3cEAAAABHNyACdvcmcuZHJvb2xzLnJ1bGUuQm91bmRW
-YXJpYWJsZUNvbnN0cmFpbnRw+tSAX/7WVwIABUkABmNvbHVtbkwAC2RlY2xhcmF0aW9ucQB+AGlM
-AAlldmFsdWF0b3JxAH4AbUwADmZpZWxkRXh0cmFjdG9ycQB+AG5bABRyZXF1aXJlZERlY2xhcmF0
-aW9uc3EAfgA/eHAAAAAAcQB+AFhxAH4Ac3EAfgBZdXEAfgBGAAAAAXEAfgBYcQB+AFxzcgAjb3Jn
+ZHJvb2xzLmJhc2UuQ2xhc3NPYmplY3RUeXBl3OzYF9SU+/0CAAJMAA9vYmplY3RUeXBlQ2xhc3Nx
+AH4ATEwACXZhbHVlVHlwZXQAG0xvcmcvZHJvb2xzL2Jhc2UvVmFsdWVUeXBlO3hwcQB+AE9zcgAZ
+b3JnLmRyb29scy5iYXNlLlZhbHVlVHlwZQAAAAAAAAFAAgADTAAJY2xhc3NUeXBlcQB+AExMABBl
+dmFsdWF0b3JGYWN0b3J5dAAtTG9yZy9kcm9vbHMvYmFzZS9ldmFsdWF0b3JzL0V2YWx1YXRvckZh
+Y3Rvcnk7TAAEbmFtZXEAfgA9eHB2cgAQamF2YS5sYW5nLk9iamVjdAAAAAAAAAAAAAAAeHBzcgAo
+b3JnLmRyb29scy5iYXNlLmV2YWx1YXRvcnMuT2JqZWN0RmFjdG9yeYlic5veGVY5AgAAeHB0AAZP
+YmplY3R0AAgkY2hlZXNlMnNxAH4ASAAAAABzcQB+AEtxAH4AT3QABHR5cGV0AAUkdHlwZXNxAH4A
+SAAAAAFxAH4ATXQAByRwcmljZTJzcQB+AEgAAAAAc3EAfgBTc3EAfgBVcQB+AE9xAH4AWnQACCRj
+aGVlc2Uxc3EAfgANP0AAAAAAAAx3CAAAABAAAAAFcQB+AFFxAH4ASnEAfgBgcQB+AFJxAH4AZHEA
+fgBhcQB+AGZxAH4AZXEAfgBqcQB+AGd4cHNyABNvcmcuZHJvb2xzLnJ1bGUuQW5k/PjnIvCmw3YC
+AAB4cgAcb3JnLmRyb29scy5ydWxlLkdyb3VwRWxlbWVudMbck79vtelYAgABTAAIY2hpbGRyZW5x
+AH4ALHhyACJvcmcuZHJvb2xzLnJ1bGUuQ29uZGl0aW9uYWxFbGVtZW50xgxz6WbzojYCAAB4cHNx
+AH4AJQAAAAN3BAAAAApzcgAWb3JnLmRyb29scy5ydWxlLkNvbHVtbn85sAJAr1HmAgAFSQAFaW5k
+ZXhJAAZvZmZzZXRMAAtjb25zdHJhaW50c3EAfgAsTAALZGVjbGFyYXRpb250AB1Mb3JnL2Ryb29s
+cy9ydWxlL0RlY2xhcmF0aW9uO0wACm9iamVjdFR5cGVxAH4AKHhwAAAAAAAAAABzcQB+ACUAAAAD
+dwQAAAAEcQB+AGFzcgAhb3JnLmRyb29scy5ydWxlLkxpdGVyYWxDb25zdHJhaW50AAAAAAAAAUAC
+AAJMAAlleHRyYWN0b3J0AB9Mb3JnL2Ryb29scy9zcGkvRmllbGRFeHRyYWN0b3I7TAALcmVzdHJp
+Y3Rpb250ACRMb3JnL2Ryb29scy9ydWxlL0xpdGVyYWxSZXN0cmljdGlvbjt4cHEAfgBic3IAIm9y
+Zy5kcm9vbHMucnVsZS5MaXRlcmFsUmVzdHJpY3Rpb24AAAAAAAABQAIAAkwACWV2YWx1YXRvcnQA
+GkxvcmcvZHJvb2xzL3NwaS9FdmFsdWF0b3I7TAAFZmllbGR0ABtMb3JnL2Ryb29scy9zcGkvRmll
+bGRWYWx1ZTt4cHNyAD1vcmcuZHJvb2xzLmJhc2UuZXZhbHVhdG9ycy5TdHJpbmdGYWN0b3J5JFN0
+cmluZ0VxdWFsRXZhbHVhdG9yAAAAAAAAAUACAAB4cgAdb3JnLmRyb29scy5iYXNlLkJhc2VFdmFs
+dWF0b3JVJIuzZayufwIAAkwACG9wZXJhdG9ydAAlTG9yZy9kcm9vbHMvYmFzZS9ldmFsdWF0b3Jz
+L09wZXJhdG9yO0wABHR5cGVxAH4AVnhwc3IAI29yZy5kcm9vbHMuYmFzZS5ldmFsdWF0b3JzLk9w
+ZXJhdG9yAAAAAAAAAUACAAFMAAhvcGVyYXRvcnEAfgA9eHB0AAI9PXNxAH4AWHZyABBqYXZhLmxh
+bmcuU3RyaW5noPCkOHo7s0ICAAB4cHNyAChvcmcuZHJvb2xzLmJhc2UuZXZhbHVhdG9ycy5TdHJp
+bmdGYWN0b3J554z/qcAFGr4CAAB4cHQABlN0cmluZ3NyABlvcmcuZHJvb2xzLmJhc2UuRmllbGRJ
+bXBsAAAAAAAAAUACAAFMAAV2YWx1ZXQAEkxqYXZhL2xhbmcvT2JqZWN0O3hwdAAHY2hlZGRhcnEA
+fgBKeHEAfgBncQB+AGlzcQB+AHEAAAABAAAAAHNxAH4AJQAAAAN3BAAAAARzcgAib3JnLmRyb29s
+cy5ydWxlLlZhcmlhYmxlQ29uc3RyYWludAAAAAAAAAFAAgACTAAOZmllbGRFeHRyYWN0b3JxAH4A
+dkwAC3Jlc3RyaWN0aW9udAAlTG9yZy9kcm9vbHMvcnVsZS9WYXJpYWJsZVJlc3RyaWN0aW9uO3hw
+cQB+AGJzcgAjb3JnLmRyb29scy5ydWxlLlZhcmlhYmxlUmVzdHJpY3Rpb24AAAAAAAABQAIABEkA
+BmNvbHVtbkwAC2RlY2xhcmF0aW9ucQB+AHJMAAlldmFsdWF0b3JxAH4AelsAFHJlcXVpcmVkRGVj
+bGFyYXRpb25zcQB+AD94cAAAAABxAH4AYXEAfgCAdXEAfgBGAAAAAXEAfgBhcQB+AGVzcgAjb3Jn
LmRyb29scy5ydWxlLlByZWRpY2F0ZUNvbnN0cmFpbnT+kI+mIluHOAIAA0wAC2RlY2xhcmF0aW9u
-cQB+AGlMAApleHByZXNzaW9udAAkTG9yZy9kcm9vbHMvc3BpL1ByZWRpY2F0ZUV4cHJlc3Npb247
-WwAUcmVxdWlyZWREZWNsYXJhdGlvbnNxAH4AP3hwcQB+AFxzcgBMb3JnLmRyb29scy5jb21waWxl
+cQB+AHJMAApleHByZXNzaW9udAAkTG9yZy9kcm9vbHMvc3BpL1ByZWRpY2F0ZUV4cHJlc3Npb247
+WwAUcmVxdWlyZWREZWNsYXJhdGlvbnNxAH4AP3hwcQB+AGVzcgBMb3JnLmRyb29scy5jb21waWxl
ci5SdWxlX3RocmVlX2NvbHVtbnNfd2l0aF9jb25zdHJhaW50c18xXzBQcmVkaWNhdGUwSW52b2tl
-cm5erL76s3NqAgAAeHB1cQB+AEYAAAABcQB+AEp4cQB+AFJxAH4AVnNxAH4AaAAAAAIAAAAAc3EA
-fgAlAAAAAXcEAAAAAXNxAH4AegAAAABxAH4AWHEAfgBzc3EAfgBLdnIAEW9yZy5kcm9vbHMuUGVy
-c29uJKQvAhefuGYCAAhJAANhZ2VaAAVhbGl2ZUMAA3NleEwACmJpZ0RlY2ltYWx0ABZMamF2YS9t
-YXRoL0JpZ0RlY2ltYWw7TAAKYmlnSW50ZWdlcnQAFkxqYXZhL21hdGgvQmlnSW50ZWdlcjtMAAVs
-aWtlc3EAfgA9TAAEbmFtZXEAfgA9TAAGc3RhdHVzcQB+AD14cHQABG5hbWV1cQB+AEYAAAABcQB+
-AFh4cHNxAH4AVQAAANJxAH4Ainh0ACB0aHJlZSBjb2x1bW5zIHdpdGggY29uc3RyYWludHMgMXBx
-AH4AN3hzcgAgb3JnLmRyb29scy5jb21tb24uQmV0YU5vZGVCaW5kZXLZOk2QQfBaswIAAVsAC2Nv
-bnN0cmFpbnRzdAAhW0xvcmcvZHJvb2xzL3NwaS9GaWVsZENvbnN0cmFpbnQ7eHB1cgAhW0xvcmcu
-ZHJvb2xzLnNwaS5GaWVsZENvbnN0cmFpbnQ7mvaX9rRKD8YCAAB4cAAAAAFxAH4AhXNxAH4AMQAA
-AAAABAAAAAFzcQB+ACUAAAACdwQAAAACcQB+ADdzcQB+ADkAAAAAAAgAAAAAc3EAfgA8AAAAAAAA
-AAACAAAAAAABcHEAfgBDc3IATW9yZy5kcm9vbHMuY29tcGlsZXIuUnVsZV90aHJlZV9jb2x1bW5z
-X3dpdGhfY29uc3RyYWludHNfMl8wQ29uc2VxdWVuY2VJbnZva2Vybl6svvqzc2oCAAB4cHVxAH4A
-RgAAAAVzcQB+AEgAAAAAcQB+AE10AAckcHJpY2Uxc3EAfgBIAAAAAXNxAH4AU3NxAH4AVQAAANJx
-AH4AT3QACCRjaGVlc2Uyc3EAfgBIAAAAAHEAfgBZdAAFJHR5cGVzcQB+AEgAAAABcQB+AE10AAck
-cHJpY2Uyc3EAfgBIAAAAAHNxAH4AU3NxAH4AVQAAANJxAH4AT3QACCRjaGVlc2Uxc3EAfgANP0AA
-AAAAAAx3CAAAABAAAAAFcQB+AJxxAH4Am3EAfgCgcQB+AJ1xAH4AonEAfgChcQB+AKRxAH4Ao3EA
-fgCocQB+AKV4cHNxAH4AY3NxAH4AJQAAAAJ3BAAAAApzcQB+AGgAAAAAAAAAAHNxAH4AJQAAAAN3
-BAAAAARxAH4AoXNxAH4AbHEAfgBzcQB+AFlzcQB+AHRxAH4Ad3EAfgCbeHEAfgClcQB+AKdzcQB+
-AGgAAAABAAAAAHNxAH4AJQAAAAN3BAAAAARzcQB+AHoAAAAAcQB+AKFxAH4Ac3EAfgBZdXEAfgBG
-AAAAAXEAfgChcQB+AKNzcQB+AH1xAH4Ao3NyAExvcmcuZHJvb2xzLmNvbXBpbGVyLlJ1bGVfdGhy
-ZWVfY29sdW1uc193aXRoX2NvbnN0cmFpbnRzXzJfMFByZWRpY2F0ZTBJbnZva2Vybl6svvqzc2oC
-AAB4cHVxAH4ARgAAAAFxAH4Am3hxAH4AnXEAfgCfeHQAIHRocmVlIGNvbHVtbnMgd2l0aCBjb25z
-dHJhaW50cyAycHEAfgCUeHNxAH4Aj3VxAH4AkgAAAANzcgAtb3JnLmRyb29scy5jb21tb24uSW5z
-dGFuY2VOb3RFcXVhbHNDb25zdHJhaW50u86LzZRlbJsCAAJJAAtvdGhlckNvbHVtblsADGRlY2xh
-cmF0aW9uc3EAfgA/eHAAAAAAdXEAfgBGAAAAAHEAfgB7cQB+AH9zcgAmb3JnLmRyb29scy5yZXRl
-b28uTGVmdElucHV0QWRhcHRlck5vZGVmYbm/CjpSNAIAAkwABmJpbmRlcnEAfgAzTAAMb2JqZWN0
-U291cmNlcQB+ADV4cQB+ADYAAQAAAAMAAAABc3EAfgAlAAAAAXcEAAAAAXEAfgCUeHNxAH4Aj3Vx
-AH4AkgAAAABzcgAbb3JnLmRyb29scy5yZXRlb28uQWxwaGFOb2RlfATd0T3MWuYCAAJMAApjb25z
-dHJhaW50dAAgTG9yZy9kcm9vbHMvc3BpL0ZpZWxkQ29uc3RyYWludDtMAAxvYmplY3RTb3VyY2Vx
-AH4ANXhxAH4AIAABAAAAAgAAAAFzcQB+ACQAAAABdwQAAAABcQB+AL94cQB+AHBzcQB+ACcAAQAA
-AAEAAAADc3EAfgArc3EAfgANP0AAAAAAAAx3CAAAABAAAAABc3IAIW9yZy5kcm9vbHMucmV0ZW9v
-LkFscGhhTm9kZVN3aXRjaDGboVVzvIvyAgACTAALYWxwaGFTd2l0Y2hxAH4AEEwACmNvbnN0cmFp
-bnR0ACNMb3JnL2Ryb29scy9ydWxlL0xpdGVyYWxDb25zdHJhaW50O3hwc3EAfgANP0AAAAAAAAx3
-CAAAABAAAAABcQB+AHdxAH4AxXhxAH4AcHEAfgDMeHNxAH4AJQAAAAF3BAAAAAFxAH4AxXhxAH4A
-lHNxAH4AJQAAAAF3BAAAAAFxAH4AlHhxAH4AYHEAfgAjcQB+AMdxAH4AKnNxAH4AJQAAAAF3BAAA
-AAFxAH4AN3hxAH4AjXEAfgAjc3EAfgANP0AAAAAAAAx3CAAAABAAAAACcQB+AI1xAH4AKnEAfgBg
-cQB+AMd4c3IAJm9yZy5kcm9vbHMuc3BpLkNsYXNzT2JqZWN0VHlwZVJlc29sdmVyAoTY/HCxsOsC
-AAFMAApvYmplY3RUeXBldABDTG9yZy9kcm9vbHMvc3BpL0NsYXNzT2JqZWN0VHlwZVJlc29sdmVy
-JE1vZGlmaWVhYmxlQ2xhc3NPYmplY3RUeXBlO3hwc3IAQW9yZy5kcm9vbHMuc3BpLkNsYXNzT2Jq
-ZWN0VHlwZVJlc29sdmVyJE1vZGlmaWVhYmxlQ2xhc3NPYmplY3RUeXBlRKWrlAI3+zUCAAB4cQB+
-AFUAAAEscHNyAB9vcmcuZHJvb2xzLnJldGVvby5SZXRlb29CdWlsZGVyGB1Z+4/IA/ACAAlJABdj
-dXJyZW50T2Zmc2V0QWRqdXN0bWVudEkAAmlkTAANYXR0YWNoZWROb2Rlc3EAfgAQTAAMZGVjbGFy
-YXRpb25zcQB+ABBMAAxvYmplY3RTb3VyY2VxAH4ANUwACm9iamVjdFR5cGVxAH4AEEwACHJlc29s
-dmVycQB+AB9MAAVydWxlc3EAfgAQTAALdHVwbGVTb3VyY2VxAH4ANHhwAAAAAAAAAAlzcQB+AA0/
-QAAAAAAADHcIAAAAEAAAAAZxAH4AKnEAfgAqcQB+AL9xAH4Av3EAfgDFcQB+AMVxAH4AlHEAfgCU
-cQB+ADdxAH4AN3EAfgDHcQB+AMd4c3EAfgANP0AAAAAAAAx3CAAAABAAAAAFcQB+AJxxAH4Am3EA
-fgCgcQB+AJ1xAH4AonEAfgChcQB+AKRxAH4Ao3EAfgCocQB+AKV4cQB+AMdzcgAXamF2YS51dGls
-LkxpbmtlZEhhc2hNYXA0wE5cEGzA+wIAAVoAC2FjY2Vzc09yZGVyeHEAfgANP0AAAAAAAAx3CAAA
-ABAAAAABcQB+AKdzcgARamF2YS5sYW5nLkludGVnZXIS4qCk94GHOAIAAUkABXZhbHVleHIAEGph
-dmEubGFuZy5OdW1iZXKGrJUdC5TgiwIAAHhwAAAAAXgAcQB+ANRzcQB+AA0/QAAAAAAADHcIAAAA
-EAAAAAJxAH4AQnVyAB1bTG9yZy5kcm9vbHMucmV0ZW9vLkJhc2VOb2RlOwvnyZNDnLPqAgAAeHAA
-AAABcQB+ADtxAH4Al3VxAH4A4QAAAAFxAH4AlnhxAH4AlA==</byte-array>
+cm5erL76s3NqAgAAeHB1cQB+AEYAAAABcQB+AEp4cQB+AFJxAH4AV3NxAH4AcQAAAAIAAAAAc3EA
+fgAlAAAAAXcEAAAAAXNxAH4AkHNxAH4AS3ZyABFvcmcuZHJvb2xzLlBlcnNvbiSkLwIXn7hmAgAJ
+SQADYWdlWgAFYWxpdmVDAANzZXhMAApiaWdEZWNpbWFsdAAWTGphdmEvbWF0aC9CaWdEZWNpbWFs
+O0wACmJpZ0ludGVnZXJ0ABZMamF2YS9tYXRoL0JpZ0ludGVnZXI7TAAEaGFpcnEAfgA9TAAFbGlr
+ZXNxAH4APUwABG5hbWVxAH4APUwABnN0YXR1c3EAfgA9eHB0AARuYW1lc3EAfgCTAAAAAHEAfgBh
+cQB+AIB1cQB+AEYAAAABcQB+AGF4cHNxAH4AVXEAfgCjcQB+AFp4dAAgdGhyZWUgY29sdW1ucyB3
+aXRoIGNvbnN0cmFpbnRzIDFwcQB+ADd4c3IAIG9yZy5kcm9vbHMuY29tbW9uLkJldGFOb2RlQmlu
+ZGVy2TpNkEHwWrMCAAFbAAtjb25zdHJhaW50c3QAIVtMb3JnL2Ryb29scy9zcGkvRmllbGRDb25z
+dHJhaW50O3hwdXIAIVtMb3JnLmRyb29scy5zcGkuRmllbGRDb25zdHJhaW50O5r2l/a0Sg/GAgAA
+eHAAAAABcQB+AJ5zcQB+ADEAAAAAAAQAAAABc3EAfgAlAAAAAncEAAAAAnEAfgA3c3EAfgA5AAAA
+AAAIAAAAAHNxAH4APAAAAAAAAAAAAgAAAAAAAXBxAH4AQ3NyAE1vcmcuZHJvb2xzLmNvbXBpbGVy
+LlJ1bGVfdGhyZWVfY29sdW1uc193aXRoX2NvbnN0cmFpbnRzXzJfMENvbnNlcXVlbmNlSW52b2tl
+cm5erL76s3NqAgAAeHB1cQB+AEYAAAAFc3EAfgBIAAAAAHEAfgBNdAAHJHByaWNlMXNxAH4ASAAA
+AAFzcQB+AFNzcQB+AFVxAH4AT3EAfgBadAAIJGNoZWVzZTJzcQB+AEgAAAAAcQB+AGJ0AAUkdHlw
+ZXNxAH4ASAAAAAFxAH4ATXQAByRwcmljZTJzcQB+AEgAAAAAc3EAfgBTc3EAfgBVcQB+AE9xAH4A
+WnQACCRjaGVlc2Uxc3EAfgANP0AAAAAAAAx3CAAAABAAAAAFcQB+ALZxAH4AtXEAfgC6cQB+ALdx
+AH4AvHEAfgC7cQB+AL5xAH4AvXEAfgDCcQB+AL94cHNxAH4AbHNxAH4AJQAAAAJ3BAAAAApzcQB+
+AHEAAAAAAAAAAHNxAH4AJQAAAAN3BAAAAARxAH4Au3NxAH4AdXEAfgBic3EAfgB5cQB+AIBzcQB+
+AIpxAH4AjXEAfgC1eHEAfgC/cQB+AMFzcQB+AHEAAAABAAAAAHNxAH4AJQAAAAN3BAAAAARzcQB+
+AJBxAH4AYnNxAH4AkwAAAABxAH4Au3EAfgCAdXEAfgBGAAAAAXEAfgC7cQB+AL1zcQB+AJZxAH4A
+vXNyAExvcmcuZHJvb2xzLmNvbXBpbGVyLlJ1bGVfdGhyZWVfY29sdW1uc193aXRoX2NvbnN0cmFp
+bnRzXzJfMFByZWRpY2F0ZTBJbnZva2Vybl6svvqzc2oCAAB4cHVxAH4ARgAAAAFxAH4AtXhxAH4A
+t3EAfgC5eHQAIHRocmVlIGNvbHVtbnMgd2l0aCBjb25zdHJhaW50cyAycHEAfgCueHNxAH4AqXVx
+AH4ArAAAAANzcgAtb3JnLmRyb29scy5jb21tb24uSW5zdGFuY2VOb3RFcXVhbHNDb25zdHJhaW50
+u86LzZRlbJsCAAJJAAtvdGhlckNvbHVtblsADGRlY2xhcmF0aW9uc3EAfgA/eHAAAAAAdXEAfgBG
+AAAAAHEAfgCScQB+AJhzcgAmb3JnLmRyb29scy5yZXRlb28uTGVmdElucHV0QWRhcHRlck5vZGVm
+Ybm/CjpSNAIAAkwABmJpbmRlcnEAfgAzTAAMb2JqZWN0U291cmNlcQB+ADV4cQB+ADYAAQAAAAMA
+AAABc3EAfgAlAAAAAXcEAAAAAXEAfgCueHNxAH4AqXVxAH4ArAAAAABzcgAbb3JnLmRyb29scy5y
+ZXRlb28uQWxwaGFOb2RlfATd0T3MWuYCAAJMAApjb25zdHJhaW50dAAgTG9yZy9kcm9vbHMvc3Bp
+L0ZpZWxkQ29uc3RyYWludDtMAAxvYmplY3RTb3VyY2VxAH4ANXhxAH4AIAABAAAAAgAAAAFzcQB+
+ACQAAAABdwQAAAABcQB+ANt4cQB+AHhzcQB+ACcAAQAAAAEAAAADc3EAfgArc3EAfgANP0AAAAAA
+AAx3CAAAABAAAAABc3IAIW9yZy5kcm9vbHMucmV0ZW9vLkFscGhhTm9kZVN3aXRjaDGboVVzvIvy
+AgACTAALYWxwaGFTd2l0Y2hxAH4AEEwACmNvbnN0cmFpbnR0ACNMb3JnL2Ryb29scy9ydWxlL0xp
+dGVyYWxDb25zdHJhaW50O3hwc3EAfgANP0AAAAAAAAx3CAAAABAAAAABcQB+AI1xAH4A4XhxAH4A
+eHEAfgDoeHNxAH4AJQAAAAF3BAAAAAFxAH4A4XhxAH4ArnNxAH4AJQAAAAF3BAAAAAFxAH4Arnhx
+AH4AaXEAfgAjcQB+AONxAH4AKnNxAH4AJQAAAAF3BAAAAAFxAH4AN3hxAH4Ap3EAfgAjc3EAfgAN
+P0AAAAAAAAx3CAAAABAAAAACcQB+AKdxAH4AKnEAfgBpcQB+AON4c3IAJm9yZy5kcm9vbHMuc3Bp
+LkNsYXNzT2JqZWN0VHlwZVJlc29sdmVyAoTY/HCxsOsCAAFMAApvYmplY3RUeXBldABDTG9yZy9k
+cm9vbHMvc3BpL0NsYXNzT2JqZWN0VHlwZVJlc29sdmVyJE1vZGlmaWVhYmxlQ2xhc3NPYmplY3RU
+eXBlO3hwc3IAQW9yZy5kcm9vbHMuc3BpLkNsYXNzT2JqZWN0VHlwZVJlc29sdmVyJE1vZGlmaWVh
+YmxlQ2xhc3NPYmplY3RUeXBlRKWrlAI3+zUCAAB4cQB+AFVwc3EAfgBYcHB0AARudWxsc3IAH29y
+Zy5kcm9vbHMucmV0ZW9vLlJldGVvb0J1aWxkZXIYHVn7j8gD8AIACUkAF2N1cnJlbnRPZmZzZXRB
+ZGp1c3RtZW50SQACaWRMAA1hdHRhY2hlZE5vZGVzcQB+ABBMAAxkZWNsYXJhdGlvbnNxAH4AEEwA
+DG9iamVjdFNvdXJjZXEAfgA1TAAKb2JqZWN0VHlwZXEAfgAQTAAIcmVzb2x2ZXJxAH4AH0wABXJ1
+bGVzcQB+ABBMAAt0dXBsZVNvdXJjZXEAfgA0eHAAAAAAAAAACXNxAH4ADT9AAAAAAAAMdwgAAAAQ
+AAAABnEAfgA3cQB+ADdxAH4AKnEAfgAqcQB+ANtxAH4A23EAfgDhcQB+AOFxAH4ArnEAfgCucQB+
+AONxAH4A43hzcQB+AA0/QAAAAAAADHcIAAAAEAAAAAVxAH4AtnEAfgC1cQB+ALpxAH4At3EAfgC8
+cQB+ALtxAH4AvnEAfgC9cQB+AMJxAH4Av3hxAH4A43NyABdqYXZhLnV0aWwuTGlua2VkSGFzaE1h
+cDTATlwQbMD7AgABWgALYWNjZXNzT3JkZXJ4cQB+AA0/QAAAAAAADHcIAAAAEAAAAAFxAH4AwXNy
+ABFqYXZhLmxhbmcuSW50ZWdlchLioKT3gYc4AgABSQAFdmFsdWV4cgAQamF2YS5sYW5nLk51bWJl
+coaslR0LlOCLAgAAeHAAAAABeABxAH4A8HNxAH4ADT9AAAAAAAAMdwgAAAAQAAAAAnEAfgBCdXIA
+HVtMb3JnLmRyb29scy5yZXRlb28uQmFzZU5vZGU7C+fJk0Ocs+oCAAB4cAAAAAFxAH4AO3EAfgCx
+dXEAfgD/AAAAAXEAfgCweHEAfgCu</byte-array>
</org.drools.reteoo.ReteooRuleBase>
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_Dump.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_Dump.drl 2006-08-02 21:58:31 UTC (rev 5420)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_Dump.drl 2006-08-03 00:14:06 UTC (rev 5421)
@@ -1,9 +1,14 @@
-package foo
+package foo;
-rule simple_rule
+rule "simple_rule"
+ salience 10
+ no-loop true
+ agenda-group "agenda-group"
+ activation-group "activation-group"
when
- foo3 : Bar(a==3)
- foo4 : Bar(a4:a==4)
+ foo3 : Bar( a == 3 | == 4, a3 == "hello")
+ foo4 : Bar( a4 : a != 4 & != 5)
+ foo5 : Bar( b == (a4 + 1) | > a4)
Baz()
then
if ( a == b ) {
Modified: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_ParseLhs.xml
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_ParseLhs.xml 2006-08-02 21:58:31 UTC (rev 5420)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_ParseLhs.xml 2006-08-03 00:14:06 UTC (rev 5421)
@@ -34,15 +34,15 @@
</column>
<column object-type="Foo">
- <literal field-name="field1" evaluator="==" value="value1" />
+ <field-constraint field-name="field1">
+ <literal-restriction evaluator="==" value="value1" />
+ <return-value-restriction evaluator="==">1==1</return-value-restriction>
+ <variable-restriction evaluator="==" identifier="var1" />
+ </field-constraint>
<predicate field-name="field1" identifier="var1">1==1</predicate>
-
- <return-value field-name="field1" evaluator="==">1==1</return-value>
-
- <field-binding field-name="field1" identifier="var1" />
-
- <bound-variable field-name="field1" evaluator="==" identifier="var1" />
+
+ <field-binding field-name="field1" identifier="var1" />
</column>
<not>
More information about the jboss-svn-commits
mailing list