All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.contextmapper.dsl.parser.antlr.internal.InternalContextMappingDSLParser Maven / Gradle / Ivy

There is a newer version: 6.12.0
Show newest version
package org.contextmapper.dsl.parser.antlr.internal;

import org.eclipse.xtext.*;
import org.eclipse.xtext.parser.*;
import org.eclipse.xtext.parser.impl.*;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.common.util.Enumerator;
import org.eclipse.xtext.parser.antlr.AbstractInternalAntlrParser;
import org.eclipse.xtext.parser.antlr.XtextTokenStream;
import org.eclipse.xtext.parser.antlr.XtextTokenStream.HiddenTokens;
import org.eclipse.xtext.parser.antlr.AntlrDatatypeRuleToken;
import org.contextmapper.dsl.services.ContextMappingDSLGrammarAccess;



import org.antlr.runtime.*;
import java.util.Stack;
import java.util.List;
import java.util.ArrayList;

@SuppressWarnings("all")
public class InternalContextMappingDSLParser extends AbstractInternalAntlrParser {
    public static final String[] tokenNames = new String[] {
        "", "", "", "", "RULE_SL_COMMENT", "RULE_STRING", "RULE_ID", "RULE_OPEN", "RULE_CLOSE", "RULE_DELEGATE", "RULE_MAP_COLLECTION_TYPE", "RULE_NOT", "RULE_REF", "RULE_OPPOSITE", "RULE_INT", "RULE_ML_COMMENT", "RULE_WS", "RULE_ANY_OTHER", "'import'", "'ContextMap'", "'type'", "'='", "'state'", "'contains'", "','", "'BoundedContext'", "'implements'", "'realizes'", "'refines'", "'domainVisionStatement'", "'responsibilities'", "'implementationTechnology'", "'knowledgeLevel'", "'Domain'", "'Subdomain'", "'['", "'P'", "']'", "'<->'", "'Partnership'", "':'", "'SK'", "'Shared-Kernel'", "'U'", "'->'", "'D'", "'<-'", "'Upstream-Downstream'", "'Downstream-Upstream'", "'exposedAggregates'", "'downstreamRights'", "'S'", "'C'", "'Customer-Supplier'", "'Supplier-Customer'", "'Aggregate'", "'useCases'", "'owner'", "'likelihoodForChange'", "'UseCase'", "'isLatencyCritical'", "'true'", "'reads'", "'writes'", "'Module'", "'external'", "'basePackage'", "'hint'", "'Application'", "'ApplicationPart'", "'Service'", "'gap'", "'nogap'", "'webservice'", "'Resource'", "'scaffold'", "'path'", "'Consumer'", "'unmarshall to'", "'@'", "'queueName'", "'topicName'", "'subscribe'", "'to'", "'eventBus'", "'publish'", "'void'", "'('", "')'", "'throws'", "';'", "'.'", "'return'", "'cache'", "'query'", "'condition'", "'select'", "'groupBy'", "'orderBy'", "'construct'", "'build'", "'map'", "'AccessObject'", "'<'", "'>'", "'abstract'", "'Entity'", "'extends'", "'with'", "'package'", "'optimisticLocking'", "'auditable'", "'databaseTable'", "'discriminatorValue'", "'discriminatorColumn'", "'discriminatorType'", "'discriminatorLength'", "'inheritanceType'", "'validate'", "'aggregateRoot'", "'belongsTo'", "'ValueObject'", "'immutable'", "'persistent'", "'DomainEvent'", "'CommandEvent'", "'Trait'", "'def'", "'*'", "'DataTransferObject'", "'BasicType'", "'key'", "'changeable'", "'required'", "'nullable'", "'index'", "'assertFalse'", "'assertTrue'", "'creditCardNumber'", "'digits'", "'email'", "'future'", "'past'", "'max'", "'min'", "'decimalMax'", "'decimalMin'", "'notEmpty'", "'notBlank'", "'pattern'", "'range'", "'size'", "'length'", "'scriptAssert'", "'url'", "'transient'", "'databaseColumn'", "'databaseType'", "'cascade'", "'fetch'", "'inverse'", "'databaseJoinTable'", "'databaseJoinColumn'", "'valid'", "'orderby'", "'orderColumn'", "'Repository'", "'inject'", "'enum'", "'ordinal'", "'String'", "'int'", "'Integer'", "'long'", "'Long'", "'boolean'", "'Boolean'", "'Date'", "'DateTime'", "'Timestamp'", "'BigDecimal'", "'BigInteger'", "'double'", "'Double'", "'float'", "'Float'", "'Key'", "'PagingParameter'", "'PagedResult'", "'Blob'", "'Clob'", "'Object[]'", "'/'", "'PL'", "'OHS'", "'ACL'", "'CF'", "'AS_IS'", "'TO_BE'", "'SYSTEM_LANDSCAPE'", "'ORGANIZATIONAL'", "'FEATURE'", "'APPLICATION'", "'SYSTEM'", "'TEAM'", "'CORE_DOMAIN'", "'SUPPORTING_DOMAIN'", "'GENERIC_SUBDOMAIN'", "'INFLUENCER'", "'OPINION_LEADER'", "'VETO_RIGHT'", "'DECISION_MAKER'", "'MONOPOLIST'", "'META'", "'CONCRETE'", "'NORMAL'", "'RARELY'", "'OFTEN'", "'None'", "'GET'", "'POST'", "'PUT'", "'DELETE'", "'JOINED'", "'SINGLE_TABLE'", "'STRING'", "'CHAR'", "'INTEGER'", "'Set'", "'List'", "'Bag'", "'Collection'", "'public'", "'protected'", "'private'"
    };
    public static final int T__144=144;
    public static final int T__143=143;
    public static final int T__146=146;
    public static final int T__50=50;
    public static final int T__145=145;
    public static final int T__140=140;
    public static final int T__142=142;
    public static final int T__141=141;
    public static final int T__59=59;
    public static final int T__55=55;
    public static final int T__56=56;
    public static final int T__57=57;
    public static final int T__58=58;
    public static final int T__51=51;
    public static final int T__137=137;
    public static final int T__52=52;
    public static final int T__136=136;
    public static final int T__53=53;
    public static final int T__139=139;
    public static final int T__54=54;
    public static final int T__138=138;
    public static final int T__133=133;
    public static final int T__132=132;
    public static final int T__60=60;
    public static final int T__135=135;
    public static final int T__61=61;
    public static final int T__134=134;
    public static final int RULE_ID=6;
    public static final int T__131=131;
    public static final int T__130=130;
    public static final int RULE_INT=14;
    public static final int T__66=66;
    public static final int T__67=67;
    public static final int T__129=129;
    public static final int T__68=68;
    public static final int T__69=69;
    public static final int T__62=62;
    public static final int T__126=126;
    public static final int T__63=63;
    public static final int T__125=125;
    public static final int T__64=64;
    public static final int T__128=128;
    public static final int T__65=65;
    public static final int T__127=127;
    public static final int T__166=166;
    public static final int T__165=165;
    public static final int T__168=168;
    public static final int T__167=167;
    public static final int T__162=162;
    public static final int T__161=161;
    public static final int T__164=164;
    public static final int T__163=163;
    public static final int T__160=160;
    public static final int T__37=37;
    public static final int T__38=38;
    public static final int T__39=39;
    public static final int T__33=33;
    public static final int T__34=34;
    public static final int T__35=35;
    public static final int T__36=36;
    public static final int T__159=159;
    public static final int T__30=30;
    public static final int T__158=158;
    public static final int T__31=31;
    public static final int T__32=32;
    public static final int T__155=155;
    public static final int T__154=154;
    public static final int T__157=157;
    public static final int T__156=156;
    public static final int T__151=151;
    public static final int T__150=150;
    public static final int T__153=153;
    public static final int T__152=152;
    public static final int T__48=48;
    public static final int T__49=49;
    public static final int T__44=44;
    public static final int T__45=45;
    public static final int T__46=46;
    public static final int T__47=47;
    public static final int T__40=40;
    public static final int T__148=148;
    public static final int T__41=41;
    public static final int T__147=147;
    public static final int T__42=42;
    public static final int T__43=43;
    public static final int T__149=149;
    public static final int T__100=100;
    public static final int T__221=221;
    public static final int T__220=220;
    public static final int T__102=102;
    public static final int T__223=223;
    public static final int T__101=101;
    public static final int T__222=222;
    public static final int RULE_OPEN=7;
    public static final int RULE_REF=12;
    public static final int T__19=19;
    public static final int T__18=18;
    public static final int T__218=218;
    public static final int T__217=217;
    public static final int T__219=219;
    public static final int T__214=214;
    public static final int T__213=213;
    public static final int T__216=216;
    public static final int T__215=215;
    public static final int T__210=210;
    public static final int T__212=212;
    public static final int T__211=211;
    public static final int T__26=26;
    public static final int T__27=27;
    public static final int T__28=28;
    public static final int RULE_OPPOSITE=13;
    public static final int T__29=29;
    public static final int T__22=22;
    public static final int T__207=207;
    public static final int T__23=23;
    public static final int T__206=206;
    public static final int T__24=24;
    public static final int T__209=209;
    public static final int T__25=25;
    public static final int T__208=208;
    public static final int T__203=203;
    public static final int T__202=202;
    public static final int T__20=20;
    public static final int T__205=205;
    public static final int T__21=21;
    public static final int T__204=204;
    public static final int T__122=122;
    public static final int T__121=121;
    public static final int T__124=124;
    public static final int T__123=123;
    public static final int T__120=120;
    public static final int RULE_NOT=11;
    public static final int RULE_SL_COMMENT=4;
    public static final int T__119=119;
    public static final int T__118=118;
    public static final int T__115=115;
    public static final int EOF=-1;
    public static final int T__114=114;
    public static final int T__117=117;
    public static final int T__116=116;
    public static final int T__111=111;
    public static final int T__232=232;
    public static final int T__110=110;
    public static final int T__231=231;
    public static final int T__113=113;
    public static final int T__234=234;
    public static final int T__112=112;
    public static final int T__233=233;
    public static final int T__230=230;
    public static final int T__108=108;
    public static final int T__229=229;
    public static final int T__107=107;
    public static final int T__228=228;
    public static final int T__109=109;
    public static final int T__104=104;
    public static final int T__225=225;
    public static final int T__103=103;
    public static final int T__224=224;
    public static final int T__106=106;
    public static final int T__227=227;
    public static final int T__105=105;
    public static final int T__226=226;
    public static final int RULE_ML_COMMENT=15;
    public static final int T__201=201;
    public static final int T__200=200;
    public static final int RULE_MAP_COLLECTION_TYPE=10;
    public static final int T__91=91;
    public static final int T__188=188;
    public static final int T__92=92;
    public static final int T__187=187;
    public static final int T__93=93;
    public static final int T__94=94;
    public static final int T__189=189;
    public static final int T__184=184;
    public static final int T__183=183;
    public static final int T__186=186;
    public static final int T__90=90;
    public static final int T__185=185;
    public static final int T__180=180;
    public static final int T__182=182;
    public static final int T__181=181;
    public static final int T__99=99;
    public static final int T__95=95;
    public static final int T__96=96;
    public static final int T__97=97;
    public static final int T__98=98;
    public static final int T__177=177;
    public static final int T__176=176;
    public static final int T__179=179;
    public static final int T__178=178;
    public static final int T__173=173;
    public static final int T__172=172;
    public static final int T__175=175;
    public static final int T__174=174;
    public static final int T__171=171;
    public static final int T__170=170;
    public static final int T__169=169;
    public static final int T__70=70;
    public static final int T__71=71;
    public static final int T__72=72;
    public static final int RULE_CLOSE=8;
    public static final int RULE_STRING=5;
    public static final int T__77=77;
    public static final int T__78=78;
    public static final int T__79=79;
    public static final int T__73=73;
    public static final int T__74=74;
    public static final int T__75=75;
    public static final int T__76=76;
    public static final int T__80=80;
    public static final int T__199=199;
    public static final int T__81=81;
    public static final int T__198=198;
    public static final int T__82=82;
    public static final int T__83=83;
    public static final int T__195=195;
    public static final int T__194=194;
    public static final int RULE_WS=16;
    public static final int T__197=197;
    public static final int T__196=196;
    public static final int T__191=191;
    public static final int T__190=190;
    public static final int T__193=193;
    public static final int T__192=192;
    public static final int RULE_ANY_OTHER=17;
    public static final int RULE_DELEGATE=9;
    public static final int T__88=88;
    public static final int T__89=89;
    public static final int T__84=84;
    public static final int T__85=85;
    public static final int T__86=86;
    public static final int T__87=87;

    // delegates
    // delegators


        public InternalContextMappingDSLParser(TokenStream input) {
            this(input, new RecognizerSharedState());
        }
        public InternalContextMappingDSLParser(TokenStream input, RecognizerSharedState state) {
            super(input, state);
             
        }
        

    public String[] getTokenNames() { return InternalContextMappingDSLParser.tokenNames; }
    public String getGrammarFileName() { return "InternalContextMappingDSL.g"; }



     	private ContextMappingDSLGrammarAccess grammarAccess;

        public InternalContextMappingDSLParser(TokenStream input, ContextMappingDSLGrammarAccess grammarAccess) {
            this(input);
            this.grammarAccess = grammarAccess;
            registerRules(grammarAccess.getGrammar());
        }

        @Override
        protected String getFirstRuleName() {
        	return "ContextMappingModel";
       	}

       	@Override
       	protected ContextMappingDSLGrammarAccess getGrammarAccess() {
       		return grammarAccess;
       	}




    // $ANTLR start "entryRuleContextMappingModel"
    // InternalContextMappingDSL.g:65:1: entryRuleContextMappingModel returns [EObject current=null] : iv_ruleContextMappingModel= ruleContextMappingModel EOF ;
    public final EObject entryRuleContextMappingModel() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleContextMappingModel = null;


        try {
            // InternalContextMappingDSL.g:65:60: (iv_ruleContextMappingModel= ruleContextMappingModel EOF )
            // InternalContextMappingDSL.g:66:2: iv_ruleContextMappingModel= ruleContextMappingModel EOF
            {
             newCompositeNode(grammarAccess.getContextMappingModelRule()); 
            pushFollow(FOLLOW_1);
            iv_ruleContextMappingModel=ruleContextMappingModel();

            state._fsp--;

             current =iv_ruleContextMappingModel; 
            match(input,EOF,FOLLOW_2); 

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleContextMappingModel"


    // $ANTLR start "ruleContextMappingModel"
    // InternalContextMappingDSL.g:72:1: ruleContextMappingModel returns [EObject current=null] : ( ( ( ( ({...}? => ( ({...}? => ( (lv_firstLineComment_1_0= RULE_SL_COMMENT ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_imports_2_0= ruleImport ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_map_3_0= ruleContextMap ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_boundedContexts_4_0= ruleBoundedContext ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_domains_5_0= ruleDomain ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_useCases_6_0= ruleUseCase ) ) )+ ) ) )* ) ) ) ;
    public final EObject ruleContextMappingModel() throws RecognitionException {
        EObject current = null;

        Token lv_firstLineComment_1_0=null;
        EObject lv_imports_2_0 = null;

        EObject lv_map_3_0 = null;

        EObject lv_boundedContexts_4_0 = null;

        EObject lv_domains_5_0 = null;

        EObject lv_useCases_6_0 = null;



        	enterRule();

        try {
            // InternalContextMappingDSL.g:78:2: ( ( ( ( ( ({...}? => ( ({...}? => ( (lv_firstLineComment_1_0= RULE_SL_COMMENT ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_imports_2_0= ruleImport ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_map_3_0= ruleContextMap ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_boundedContexts_4_0= ruleBoundedContext ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_domains_5_0= ruleDomain ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_useCases_6_0= ruleUseCase ) ) )+ ) ) )* ) ) ) )
            // InternalContextMappingDSL.g:79:2: ( ( ( ( ({...}? => ( ({...}? => ( (lv_firstLineComment_1_0= RULE_SL_COMMENT ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_imports_2_0= ruleImport ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_map_3_0= ruleContextMap ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_boundedContexts_4_0= ruleBoundedContext ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_domains_5_0= ruleDomain ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_useCases_6_0= ruleUseCase ) ) )+ ) ) )* ) ) )
            {
            // InternalContextMappingDSL.g:79:2: ( ( ( ( ({...}? => ( ({...}? => ( (lv_firstLineComment_1_0= RULE_SL_COMMENT ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_imports_2_0= ruleImport ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_map_3_0= ruleContextMap ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_boundedContexts_4_0= ruleBoundedContext ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_domains_5_0= ruleDomain ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_useCases_6_0= ruleUseCase ) ) )+ ) ) )* ) ) )
            // InternalContextMappingDSL.g:80:3: ( ( ( ({...}? => ( ({...}? => ( (lv_firstLineComment_1_0= RULE_SL_COMMENT ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_imports_2_0= ruleImport ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_map_3_0= ruleContextMap ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_boundedContexts_4_0= ruleBoundedContext ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_domains_5_0= ruleDomain ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_useCases_6_0= ruleUseCase ) ) )+ ) ) )* ) )
            {
            // InternalContextMappingDSL.g:80:3: ( ( ( ({...}? => ( ({...}? => ( (lv_firstLineComment_1_0= RULE_SL_COMMENT ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_imports_2_0= ruleImport ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_map_3_0= ruleContextMap ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_boundedContexts_4_0= ruleBoundedContext ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_domains_5_0= ruleDomain ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_useCases_6_0= ruleUseCase ) ) )+ ) ) )* ) )
            // InternalContextMappingDSL.g:81:4: ( ( ({...}? => ( ({...}? => ( (lv_firstLineComment_1_0= RULE_SL_COMMENT ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_imports_2_0= ruleImport ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_map_3_0= ruleContextMap ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_boundedContexts_4_0= ruleBoundedContext ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_domains_5_0= ruleDomain ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_useCases_6_0= ruleUseCase ) ) )+ ) ) )* )
            {
             
            			  getUnorderedGroupHelper().enter(grammarAccess.getContextMappingModelAccess().getUnorderedGroup());
            			
            // InternalContextMappingDSL.g:84:4: ( ( ({...}? => ( ({...}? => ( (lv_firstLineComment_1_0= RULE_SL_COMMENT ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_imports_2_0= ruleImport ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_map_3_0= ruleContextMap ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_boundedContexts_4_0= ruleBoundedContext ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_domains_5_0= ruleDomain ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_useCases_6_0= ruleUseCase ) ) )+ ) ) )* )
            // InternalContextMappingDSL.g:85:5: ( ({...}? => ( ({...}? => ( (lv_firstLineComment_1_0= RULE_SL_COMMENT ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_imports_2_0= ruleImport ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_map_3_0= ruleContextMap ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_boundedContexts_4_0= ruleBoundedContext ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_domains_5_0= ruleDomain ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_useCases_6_0= ruleUseCase ) ) )+ ) ) )*
            {
            // InternalContextMappingDSL.g:85:5: ( ({...}? => ( ({...}? => ( (lv_firstLineComment_1_0= RULE_SL_COMMENT ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_imports_2_0= ruleImport ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_map_3_0= ruleContextMap ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_boundedContexts_4_0= ruleBoundedContext ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_domains_5_0= ruleDomain ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_useCases_6_0= ruleUseCase ) ) )+ ) ) )*
            loop5:
            do {
                int alt5=7;
                int LA5_0 = input.LA(1);

                if ( LA5_0 == RULE_SL_COMMENT && ( getUnorderedGroupHelper().canSelect(grammarAccess.getContextMappingModelAccess().getUnorderedGroup(), 0) || getUnorderedGroupHelper().canSelect(grammarAccess.getContextMappingModelAccess().getUnorderedGroup(), 3) ) ) {
                    int LA5_2 = input.LA(2);

                    if ( getUnorderedGroupHelper().canSelect(grammarAccess.getContextMappingModelAccess().getUnorderedGroup(), 0) ) {
                        alt5=1;
                    }
                    else if ( getUnorderedGroupHelper().canSelect(grammarAccess.getContextMappingModelAccess().getUnorderedGroup(), 3) ) {
                        alt5=4;
                    }


                }
                else if ( LA5_0 == 18 && getUnorderedGroupHelper().canSelect(grammarAccess.getContextMappingModelAccess().getUnorderedGroup(), 1) ) {
                    alt5=2;
                }
                else if ( LA5_0 == 19 && getUnorderedGroupHelper().canSelect(grammarAccess.getContextMappingModelAccess().getUnorderedGroup(), 2) ) {
                    alt5=3;
                }
                else if ( LA5_0 == 25 && getUnorderedGroupHelper().canSelect(grammarAccess.getContextMappingModelAccess().getUnorderedGroup(), 3) ) {
                    alt5=4;
                }
                else if ( LA5_0 == 33 && getUnorderedGroupHelper().canSelect(grammarAccess.getContextMappingModelAccess().getUnorderedGroup(), 4) ) {
                    alt5=5;
                }
                else if ( LA5_0 == 59 && getUnorderedGroupHelper().canSelect(grammarAccess.getContextMappingModelAccess().getUnorderedGroup(), 5) ) {
                    alt5=6;
                }


                switch (alt5) {
            	case 1 :
            	    // InternalContextMappingDSL.g:86:3: ({...}? => ( ({...}? => ( (lv_firstLineComment_1_0= RULE_SL_COMMENT ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:86:3: ({...}? => ( ({...}? => ( (lv_firstLineComment_1_0= RULE_SL_COMMENT ) ) ) ) )
            	    // InternalContextMappingDSL.g:87:4: {...}? => ( ({...}? => ( (lv_firstLineComment_1_0= RULE_SL_COMMENT ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getContextMappingModelAccess().getUnorderedGroup(), 0) ) {
            	        throw new FailedPredicateException(input, "ruleContextMappingModel", "getUnorderedGroupHelper().canSelect(grammarAccess.getContextMappingModelAccess().getUnorderedGroup(), 0)");
            	    }
            	    // InternalContextMappingDSL.g:87:113: ( ({...}? => ( (lv_firstLineComment_1_0= RULE_SL_COMMENT ) ) ) )
            	    // InternalContextMappingDSL.g:88:5: ({...}? => ( (lv_firstLineComment_1_0= RULE_SL_COMMENT ) ) )
            	    {

            	    					getUnorderedGroupHelper().select(grammarAccess.getContextMappingModelAccess().getUnorderedGroup(), 0);
            	    				
            	    // InternalContextMappingDSL.g:91:8: ({...}? => ( (lv_firstLineComment_1_0= RULE_SL_COMMENT ) ) )
            	    // InternalContextMappingDSL.g:91:9: {...}? => ( (lv_firstLineComment_1_0= RULE_SL_COMMENT ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleContextMappingModel", "true");
            	    }
            	    // InternalContextMappingDSL.g:91:18: ( (lv_firstLineComment_1_0= RULE_SL_COMMENT ) )
            	    // InternalContextMappingDSL.g:91:19: (lv_firstLineComment_1_0= RULE_SL_COMMENT )
            	    {
            	    // InternalContextMappingDSL.g:91:19: (lv_firstLineComment_1_0= RULE_SL_COMMENT )
            	    // InternalContextMappingDSL.g:92:9: lv_firstLineComment_1_0= RULE_SL_COMMENT
            	    {
            	    lv_firstLineComment_1_0=(Token)match(input,RULE_SL_COMMENT,FOLLOW_3); 

            	    									newLeafNode(lv_firstLineComment_1_0, grammarAccess.getContextMappingModelAccess().getFirstLineCommentSL_COMMENTTerminalRuleCall_0_0());
            	    								

            	    									if (current==null) {
            	    										current = createModelElement(grammarAccess.getContextMappingModelRule());
            	    									}
            	    									setWithLastConsumed(
            	    										current,
            	    										"firstLineComment",
            	    										lv_firstLineComment_1_0,
            	    										"org.eclipse.xtext.common.Terminals.SL_COMMENT");
            	    								

            	    }


            	    }


            	    }

            	     
            	    					getUnorderedGroupHelper().returnFromSelection(grammarAccess.getContextMappingModelAccess().getUnorderedGroup());
            	    				

            	    }


            	    }


            	    }
            	    break;
            	case 2 :
            	    // InternalContextMappingDSL.g:113:3: ({...}? => ( ({...}? => ( (lv_imports_2_0= ruleImport ) ) )+ ) )
            	    {
            	    // InternalContextMappingDSL.g:113:3: ({...}? => ( ({...}? => ( (lv_imports_2_0= ruleImport ) ) )+ ) )
            	    // InternalContextMappingDSL.g:114:4: {...}? => ( ({...}? => ( (lv_imports_2_0= ruleImport ) ) )+ )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getContextMappingModelAccess().getUnorderedGroup(), 1) ) {
            	        throw new FailedPredicateException(input, "ruleContextMappingModel", "getUnorderedGroupHelper().canSelect(grammarAccess.getContextMappingModelAccess().getUnorderedGroup(), 1)");
            	    }
            	    // InternalContextMappingDSL.g:114:113: ( ({...}? => ( (lv_imports_2_0= ruleImport ) ) )+ )
            	    // InternalContextMappingDSL.g:115:5: ({...}? => ( (lv_imports_2_0= ruleImport ) ) )+
            	    {

            	    					getUnorderedGroupHelper().select(grammarAccess.getContextMappingModelAccess().getUnorderedGroup(), 1);
            	    				
            	    // InternalContextMappingDSL.g:118:8: ({...}? => ( (lv_imports_2_0= ruleImport ) ) )+
            	    int cnt1=0;
            	    loop1:
            	    do {
            	        int alt1=2;
            	        int LA1_0 = input.LA(1);

            	        if ( (LA1_0==18) ) {
            	            int LA1_2 = input.LA(2);

            	            if ( ((true)) ) {
            	                alt1=1;
            	            }


            	        }


            	        switch (alt1) {
            	    	case 1 :
            	    	    // InternalContextMappingDSL.g:118:9: {...}? => ( (lv_imports_2_0= ruleImport ) )
            	    	    {
            	    	    if ( !((true)) ) {
            	    	        throw new FailedPredicateException(input, "ruleContextMappingModel", "true");
            	    	    }
            	    	    // InternalContextMappingDSL.g:118:18: ( (lv_imports_2_0= ruleImport ) )
            	    	    // InternalContextMappingDSL.g:118:19: (lv_imports_2_0= ruleImport )
            	    	    {
            	    	    // InternalContextMappingDSL.g:118:19: (lv_imports_2_0= ruleImport )
            	    	    // InternalContextMappingDSL.g:119:9: lv_imports_2_0= ruleImport
            	    	    {

            	    	    									newCompositeNode(grammarAccess.getContextMappingModelAccess().getImportsImportParserRuleCall_1_0());
            	    	    								
            	    	    pushFollow(FOLLOW_3);
            	    	    lv_imports_2_0=ruleImport();

            	    	    state._fsp--;


            	    	    									if (current==null) {
            	    	    										current = createModelElementForParent(grammarAccess.getContextMappingModelRule());
            	    	    									}
            	    	    									add(
            	    	    										current,
            	    	    										"imports",
            	    	    										lv_imports_2_0,
            	    	    										"org.contextmapper.dsl.ContextMappingDSL.Import");
            	    	    									afterParserOrEnumRuleCall();
            	    	    								

            	    	    }


            	    	    }


            	    	    }
            	    	    break;

            	    	default :
            	    	    if ( cnt1 >= 1 ) break loop1;
            	                EarlyExitException eee =
            	                    new EarlyExitException(1, input);
            	                throw eee;
            	        }
            	        cnt1++;
            	    } while (true);

            	     
            	    					getUnorderedGroupHelper().returnFromSelection(grammarAccess.getContextMappingModelAccess().getUnorderedGroup());
            	    				

            	    }


            	    }


            	    }
            	    break;
            	case 3 :
            	    // InternalContextMappingDSL.g:141:3: ({...}? => ( ({...}? => ( (lv_map_3_0= ruleContextMap ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:141:3: ({...}? => ( ({...}? => ( (lv_map_3_0= ruleContextMap ) ) ) ) )
            	    // InternalContextMappingDSL.g:142:4: {...}? => ( ({...}? => ( (lv_map_3_0= ruleContextMap ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getContextMappingModelAccess().getUnorderedGroup(), 2) ) {
            	        throw new FailedPredicateException(input, "ruleContextMappingModel", "getUnorderedGroupHelper().canSelect(grammarAccess.getContextMappingModelAccess().getUnorderedGroup(), 2)");
            	    }
            	    // InternalContextMappingDSL.g:142:113: ( ({...}? => ( (lv_map_3_0= ruleContextMap ) ) ) )
            	    // InternalContextMappingDSL.g:143:5: ({...}? => ( (lv_map_3_0= ruleContextMap ) ) )
            	    {

            	    					getUnorderedGroupHelper().select(grammarAccess.getContextMappingModelAccess().getUnorderedGroup(), 2);
            	    				
            	    // InternalContextMappingDSL.g:146:8: ({...}? => ( (lv_map_3_0= ruleContextMap ) ) )
            	    // InternalContextMappingDSL.g:146:9: {...}? => ( (lv_map_3_0= ruleContextMap ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleContextMappingModel", "true");
            	    }
            	    // InternalContextMappingDSL.g:146:18: ( (lv_map_3_0= ruleContextMap ) )
            	    // InternalContextMappingDSL.g:146:19: (lv_map_3_0= ruleContextMap )
            	    {
            	    // InternalContextMappingDSL.g:146:19: (lv_map_3_0= ruleContextMap )
            	    // InternalContextMappingDSL.g:147:9: lv_map_3_0= ruleContextMap
            	    {

            	    									newCompositeNode(grammarAccess.getContextMappingModelAccess().getMapContextMapParserRuleCall_2_0());
            	    								
            	    pushFollow(FOLLOW_3);
            	    lv_map_3_0=ruleContextMap();

            	    state._fsp--;


            	    									if (current==null) {
            	    										current = createModelElementForParent(grammarAccess.getContextMappingModelRule());
            	    									}
            	    									set(
            	    										current,
            	    										"map",
            	    										lv_map_3_0,
            	    										"org.contextmapper.dsl.ContextMappingDSL.ContextMap");
            	    									afterParserOrEnumRuleCall();
            	    								

            	    }


            	    }


            	    }

            	     
            	    					getUnorderedGroupHelper().returnFromSelection(grammarAccess.getContextMappingModelAccess().getUnorderedGroup());
            	    				

            	    }


            	    }


            	    }
            	    break;
            	case 4 :
            	    // InternalContextMappingDSL.g:169:3: ({...}? => ( ({...}? => ( (lv_boundedContexts_4_0= ruleBoundedContext ) ) )+ ) )
            	    {
            	    // InternalContextMappingDSL.g:169:3: ({...}? => ( ({...}? => ( (lv_boundedContexts_4_0= ruleBoundedContext ) ) )+ ) )
            	    // InternalContextMappingDSL.g:170:4: {...}? => ( ({...}? => ( (lv_boundedContexts_4_0= ruleBoundedContext ) ) )+ )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getContextMappingModelAccess().getUnorderedGroup(), 3) ) {
            	        throw new FailedPredicateException(input, "ruleContextMappingModel", "getUnorderedGroupHelper().canSelect(grammarAccess.getContextMappingModelAccess().getUnorderedGroup(), 3)");
            	    }
            	    // InternalContextMappingDSL.g:170:113: ( ({...}? => ( (lv_boundedContexts_4_0= ruleBoundedContext ) ) )+ )
            	    // InternalContextMappingDSL.g:171:5: ({...}? => ( (lv_boundedContexts_4_0= ruleBoundedContext ) ) )+
            	    {

            	    					getUnorderedGroupHelper().select(grammarAccess.getContextMappingModelAccess().getUnorderedGroup(), 3);
            	    				
            	    // InternalContextMappingDSL.g:174:8: ({...}? => ( (lv_boundedContexts_4_0= ruleBoundedContext ) ) )+
            	    int cnt2=0;
            	    loop2:
            	    do {
            	        int alt2=2;
            	        int LA2_0 = input.LA(1);

            	        if ( (LA2_0==RULE_SL_COMMENT) ) {
            	            int LA2_2 = input.LA(2);

            	            if ( ((true)) ) {
            	                alt2=1;
            	            }


            	        }
            	        else if ( (LA2_0==25) ) {
            	            int LA2_3 = input.LA(2);

            	            if ( ((true)) ) {
            	                alt2=1;
            	            }


            	        }


            	        switch (alt2) {
            	    	case 1 :
            	    	    // InternalContextMappingDSL.g:174:9: {...}? => ( (lv_boundedContexts_4_0= ruleBoundedContext ) )
            	    	    {
            	    	    if ( !((true)) ) {
            	    	        throw new FailedPredicateException(input, "ruleContextMappingModel", "true");
            	    	    }
            	    	    // InternalContextMappingDSL.g:174:18: ( (lv_boundedContexts_4_0= ruleBoundedContext ) )
            	    	    // InternalContextMappingDSL.g:174:19: (lv_boundedContexts_4_0= ruleBoundedContext )
            	    	    {
            	    	    // InternalContextMappingDSL.g:174:19: (lv_boundedContexts_4_0= ruleBoundedContext )
            	    	    // InternalContextMappingDSL.g:175:9: lv_boundedContexts_4_0= ruleBoundedContext
            	    	    {

            	    	    									newCompositeNode(grammarAccess.getContextMappingModelAccess().getBoundedContextsBoundedContextParserRuleCall_3_0());
            	    	    								
            	    	    pushFollow(FOLLOW_3);
            	    	    lv_boundedContexts_4_0=ruleBoundedContext();

            	    	    state._fsp--;


            	    	    									if (current==null) {
            	    	    										current = createModelElementForParent(grammarAccess.getContextMappingModelRule());
            	    	    									}
            	    	    									add(
            	    	    										current,
            	    	    										"boundedContexts",
            	    	    										lv_boundedContexts_4_0,
            	    	    										"org.contextmapper.dsl.ContextMappingDSL.BoundedContext");
            	    	    									afterParserOrEnumRuleCall();
            	    	    								

            	    	    }


            	    	    }


            	    	    }
            	    	    break;

            	    	default :
            	    	    if ( cnt2 >= 1 ) break loop2;
            	                EarlyExitException eee =
            	                    new EarlyExitException(2, input);
            	                throw eee;
            	        }
            	        cnt2++;
            	    } while (true);

            	     
            	    					getUnorderedGroupHelper().returnFromSelection(grammarAccess.getContextMappingModelAccess().getUnorderedGroup());
            	    				

            	    }


            	    }


            	    }
            	    break;
            	case 5 :
            	    // InternalContextMappingDSL.g:197:3: ({...}? => ( ({...}? => ( (lv_domains_5_0= ruleDomain ) ) )+ ) )
            	    {
            	    // InternalContextMappingDSL.g:197:3: ({...}? => ( ({...}? => ( (lv_domains_5_0= ruleDomain ) ) )+ ) )
            	    // InternalContextMappingDSL.g:198:4: {...}? => ( ({...}? => ( (lv_domains_5_0= ruleDomain ) ) )+ )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getContextMappingModelAccess().getUnorderedGroup(), 4) ) {
            	        throw new FailedPredicateException(input, "ruleContextMappingModel", "getUnorderedGroupHelper().canSelect(grammarAccess.getContextMappingModelAccess().getUnorderedGroup(), 4)");
            	    }
            	    // InternalContextMappingDSL.g:198:113: ( ({...}? => ( (lv_domains_5_0= ruleDomain ) ) )+ )
            	    // InternalContextMappingDSL.g:199:5: ({...}? => ( (lv_domains_5_0= ruleDomain ) ) )+
            	    {

            	    					getUnorderedGroupHelper().select(grammarAccess.getContextMappingModelAccess().getUnorderedGroup(), 4);
            	    				
            	    // InternalContextMappingDSL.g:202:8: ({...}? => ( (lv_domains_5_0= ruleDomain ) ) )+
            	    int cnt3=0;
            	    loop3:
            	    do {
            	        int alt3=2;
            	        int LA3_0 = input.LA(1);

            	        if ( (LA3_0==33) ) {
            	            int LA3_2 = input.LA(2);

            	            if ( ((true)) ) {
            	                alt3=1;
            	            }


            	        }


            	        switch (alt3) {
            	    	case 1 :
            	    	    // InternalContextMappingDSL.g:202:9: {...}? => ( (lv_domains_5_0= ruleDomain ) )
            	    	    {
            	    	    if ( !((true)) ) {
            	    	        throw new FailedPredicateException(input, "ruleContextMappingModel", "true");
            	    	    }
            	    	    // InternalContextMappingDSL.g:202:18: ( (lv_domains_5_0= ruleDomain ) )
            	    	    // InternalContextMappingDSL.g:202:19: (lv_domains_5_0= ruleDomain )
            	    	    {
            	    	    // InternalContextMappingDSL.g:202:19: (lv_domains_5_0= ruleDomain )
            	    	    // InternalContextMappingDSL.g:203:9: lv_domains_5_0= ruleDomain
            	    	    {

            	    	    									newCompositeNode(grammarAccess.getContextMappingModelAccess().getDomainsDomainParserRuleCall_4_0());
            	    	    								
            	    	    pushFollow(FOLLOW_3);
            	    	    lv_domains_5_0=ruleDomain();

            	    	    state._fsp--;


            	    	    									if (current==null) {
            	    	    										current = createModelElementForParent(grammarAccess.getContextMappingModelRule());
            	    	    									}
            	    	    									add(
            	    	    										current,
            	    	    										"domains",
            	    	    										lv_domains_5_0,
            	    	    										"org.contextmapper.dsl.ContextMappingDSL.Domain");
            	    	    									afterParserOrEnumRuleCall();
            	    	    								

            	    	    }


            	    	    }


            	    	    }
            	    	    break;

            	    	default :
            	    	    if ( cnt3 >= 1 ) break loop3;
            	                EarlyExitException eee =
            	                    new EarlyExitException(3, input);
            	                throw eee;
            	        }
            	        cnt3++;
            	    } while (true);

            	     
            	    					getUnorderedGroupHelper().returnFromSelection(grammarAccess.getContextMappingModelAccess().getUnorderedGroup());
            	    				

            	    }


            	    }


            	    }
            	    break;
            	case 6 :
            	    // InternalContextMappingDSL.g:225:3: ({...}? => ( ({...}? => ( (lv_useCases_6_0= ruleUseCase ) ) )+ ) )
            	    {
            	    // InternalContextMappingDSL.g:225:3: ({...}? => ( ({...}? => ( (lv_useCases_6_0= ruleUseCase ) ) )+ ) )
            	    // InternalContextMappingDSL.g:226:4: {...}? => ( ({...}? => ( (lv_useCases_6_0= ruleUseCase ) ) )+ )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getContextMappingModelAccess().getUnorderedGroup(), 5) ) {
            	        throw new FailedPredicateException(input, "ruleContextMappingModel", "getUnorderedGroupHelper().canSelect(grammarAccess.getContextMappingModelAccess().getUnorderedGroup(), 5)");
            	    }
            	    // InternalContextMappingDSL.g:226:113: ( ({...}? => ( (lv_useCases_6_0= ruleUseCase ) ) )+ )
            	    // InternalContextMappingDSL.g:227:5: ({...}? => ( (lv_useCases_6_0= ruleUseCase ) ) )+
            	    {

            	    					getUnorderedGroupHelper().select(grammarAccess.getContextMappingModelAccess().getUnorderedGroup(), 5);
            	    				
            	    // InternalContextMappingDSL.g:230:8: ({...}? => ( (lv_useCases_6_0= ruleUseCase ) ) )+
            	    int cnt4=0;
            	    loop4:
            	    do {
            	        int alt4=2;
            	        int LA4_0 = input.LA(1);

            	        if ( (LA4_0==59) ) {
            	            int LA4_2 = input.LA(2);

            	            if ( ((true)) ) {
            	                alt4=1;
            	            }


            	        }


            	        switch (alt4) {
            	    	case 1 :
            	    	    // InternalContextMappingDSL.g:230:9: {...}? => ( (lv_useCases_6_0= ruleUseCase ) )
            	    	    {
            	    	    if ( !((true)) ) {
            	    	        throw new FailedPredicateException(input, "ruleContextMappingModel", "true");
            	    	    }
            	    	    // InternalContextMappingDSL.g:230:18: ( (lv_useCases_6_0= ruleUseCase ) )
            	    	    // InternalContextMappingDSL.g:230:19: (lv_useCases_6_0= ruleUseCase )
            	    	    {
            	    	    // InternalContextMappingDSL.g:230:19: (lv_useCases_6_0= ruleUseCase )
            	    	    // InternalContextMappingDSL.g:231:9: lv_useCases_6_0= ruleUseCase
            	    	    {

            	    	    									newCompositeNode(grammarAccess.getContextMappingModelAccess().getUseCasesUseCaseParserRuleCall_5_0());
            	    	    								
            	    	    pushFollow(FOLLOW_3);
            	    	    lv_useCases_6_0=ruleUseCase();

            	    	    state._fsp--;


            	    	    									if (current==null) {
            	    	    										current = createModelElementForParent(grammarAccess.getContextMappingModelRule());
            	    	    									}
            	    	    									add(
            	    	    										current,
            	    	    										"useCases",
            	    	    										lv_useCases_6_0,
            	    	    										"org.contextmapper.dsl.ContextMappingDSL.UseCase");
            	    	    									afterParserOrEnumRuleCall();
            	    	    								

            	    	    }


            	    	    }


            	    	    }
            	    	    break;

            	    	default :
            	    	    if ( cnt4 >= 1 ) break loop4;
            	                EarlyExitException eee =
            	                    new EarlyExitException(4, input);
            	                throw eee;
            	        }
            	        cnt4++;
            	    } while (true);

            	     
            	    					getUnorderedGroupHelper().returnFromSelection(grammarAccess.getContextMappingModelAccess().getUnorderedGroup());
            	    				

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop5;
                }
            } while (true);


            }


            }

             
            			  getUnorderedGroupHelper().leave(grammarAccess.getContextMappingModelAccess().getUnorderedGroup());
            			

            }


            }


            	leaveRule();

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleContextMappingModel"


    // $ANTLR start "entryRuleImport"
    // InternalContextMappingDSL.g:263:1: entryRuleImport returns [EObject current=null] : iv_ruleImport= ruleImport EOF ;
    public final EObject entryRuleImport() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleImport = null;


        try {
            // InternalContextMappingDSL.g:263:47: (iv_ruleImport= ruleImport EOF )
            // InternalContextMappingDSL.g:264:2: iv_ruleImport= ruleImport EOF
            {
             newCompositeNode(grammarAccess.getImportRule()); 
            pushFollow(FOLLOW_1);
            iv_ruleImport=ruleImport();

            state._fsp--;

             current =iv_ruleImport; 
            match(input,EOF,FOLLOW_2); 

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleImport"


    // $ANTLR start "ruleImport"
    // InternalContextMappingDSL.g:270:1: ruleImport returns [EObject current=null] : (otherlv_0= 'import' ( (lv_importURI_1_0= RULE_STRING ) ) ) ;
    public final EObject ruleImport() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_importURI_1_0=null;


        	enterRule();

        try {
            // InternalContextMappingDSL.g:276:2: ( (otherlv_0= 'import' ( (lv_importURI_1_0= RULE_STRING ) ) ) )
            // InternalContextMappingDSL.g:277:2: (otherlv_0= 'import' ( (lv_importURI_1_0= RULE_STRING ) ) )
            {
            // InternalContextMappingDSL.g:277:2: (otherlv_0= 'import' ( (lv_importURI_1_0= RULE_STRING ) ) )
            // InternalContextMappingDSL.g:278:3: otherlv_0= 'import' ( (lv_importURI_1_0= RULE_STRING ) )
            {
            otherlv_0=(Token)match(input,18,FOLLOW_4); 

            			newLeafNode(otherlv_0, grammarAccess.getImportAccess().getImportKeyword_0());
            		
            // InternalContextMappingDSL.g:282:3: ( (lv_importURI_1_0= RULE_STRING ) )
            // InternalContextMappingDSL.g:283:4: (lv_importURI_1_0= RULE_STRING )
            {
            // InternalContextMappingDSL.g:283:4: (lv_importURI_1_0= RULE_STRING )
            // InternalContextMappingDSL.g:284:5: lv_importURI_1_0= RULE_STRING
            {
            lv_importURI_1_0=(Token)match(input,RULE_STRING,FOLLOW_2); 

            					newLeafNode(lv_importURI_1_0, grammarAccess.getImportAccess().getImportURISTRINGTerminalRuleCall_1_0());
            				

            					if (current==null) {
            						current = createModelElement(grammarAccess.getImportRule());
            					}
            					setWithLastConsumed(
            						current,
            						"importURI",
            						lv_importURI_1_0,
            						"org.eclipse.xtext.common.Terminals.STRING");
            				

            }


            }


            }


            }


            	leaveRule();

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleImport"


    // $ANTLR start "entryRuleContextMap"
    // InternalContextMappingDSL.g:304:1: entryRuleContextMap returns [EObject current=null] : iv_ruleContextMap= ruleContextMap EOF ;
    public final EObject entryRuleContextMap() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleContextMap = null;


        try {
            // InternalContextMappingDSL.g:304:51: (iv_ruleContextMap= ruleContextMap EOF )
            // InternalContextMappingDSL.g:305:2: iv_ruleContextMap= ruleContextMap EOF
            {
             newCompositeNode(grammarAccess.getContextMapRule()); 
            pushFollow(FOLLOW_1);
            iv_ruleContextMap=ruleContextMap();

            state._fsp--;

             current =iv_ruleContextMap; 
            match(input,EOF,FOLLOW_2); 

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleContextMap"


    // $ANTLR start "ruleContextMap"
    // InternalContextMappingDSL.g:311:1: ruleContextMap returns [EObject current=null] : ( () otherlv_1= 'ContextMap' ( (lv_name_2_0= RULE_ID ) )? this_OPEN_3= RULE_OPEN ( ( ( ( ({...}? => ( ({...}? => (otherlv_5= 'type' (otherlv_6= '=' )? ( (lv_type_7_0= ruleContextMapType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_8= 'state' (otherlv_9= '=' )? ( (lv_state_10_0= ruleContextMapState ) ) ) ) ) ) )* ) ) ) (otherlv_11= 'contains' ( (otherlv_12= RULE_ID ) ) (otherlv_13= ',' ( (otherlv_14= RULE_ID ) ) )* )* ( (lv_relationships_15_0= ruleRelationship ) )* this_CLOSE_16= RULE_CLOSE ) ;
    public final EObject ruleContextMap() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token lv_name_2_0=null;
        Token this_OPEN_3=null;
        Token otherlv_5=null;
        Token otherlv_6=null;
        Token otherlv_8=null;
        Token otherlv_9=null;
        Token otherlv_11=null;
        Token otherlv_12=null;
        Token otherlv_13=null;
        Token otherlv_14=null;
        Token this_CLOSE_16=null;
        Enumerator lv_type_7_0 = null;

        Enumerator lv_state_10_0 = null;

        EObject lv_relationships_15_0 = null;



        	enterRule();

        try {
            // InternalContextMappingDSL.g:317:2: ( ( () otherlv_1= 'ContextMap' ( (lv_name_2_0= RULE_ID ) )? this_OPEN_3= RULE_OPEN ( ( ( ( ({...}? => ( ({...}? => (otherlv_5= 'type' (otherlv_6= '=' )? ( (lv_type_7_0= ruleContextMapType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_8= 'state' (otherlv_9= '=' )? ( (lv_state_10_0= ruleContextMapState ) ) ) ) ) ) )* ) ) ) (otherlv_11= 'contains' ( (otherlv_12= RULE_ID ) ) (otherlv_13= ',' ( (otherlv_14= RULE_ID ) ) )* )* ( (lv_relationships_15_0= ruleRelationship ) )* this_CLOSE_16= RULE_CLOSE ) )
            // InternalContextMappingDSL.g:318:2: ( () otherlv_1= 'ContextMap' ( (lv_name_2_0= RULE_ID ) )? this_OPEN_3= RULE_OPEN ( ( ( ( ({...}? => ( ({...}? => (otherlv_5= 'type' (otherlv_6= '=' )? ( (lv_type_7_0= ruleContextMapType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_8= 'state' (otherlv_9= '=' )? ( (lv_state_10_0= ruleContextMapState ) ) ) ) ) ) )* ) ) ) (otherlv_11= 'contains' ( (otherlv_12= RULE_ID ) ) (otherlv_13= ',' ( (otherlv_14= RULE_ID ) ) )* )* ( (lv_relationships_15_0= ruleRelationship ) )* this_CLOSE_16= RULE_CLOSE )
            {
            // InternalContextMappingDSL.g:318:2: ( () otherlv_1= 'ContextMap' ( (lv_name_2_0= RULE_ID ) )? this_OPEN_3= RULE_OPEN ( ( ( ( ({...}? => ( ({...}? => (otherlv_5= 'type' (otherlv_6= '=' )? ( (lv_type_7_0= ruleContextMapType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_8= 'state' (otherlv_9= '=' )? ( (lv_state_10_0= ruleContextMapState ) ) ) ) ) ) )* ) ) ) (otherlv_11= 'contains' ( (otherlv_12= RULE_ID ) ) (otherlv_13= ',' ( (otherlv_14= RULE_ID ) ) )* )* ( (lv_relationships_15_0= ruleRelationship ) )* this_CLOSE_16= RULE_CLOSE )
            // InternalContextMappingDSL.g:319:3: () otherlv_1= 'ContextMap' ( (lv_name_2_0= RULE_ID ) )? this_OPEN_3= RULE_OPEN ( ( ( ( ({...}? => ( ({...}? => (otherlv_5= 'type' (otherlv_6= '=' )? ( (lv_type_7_0= ruleContextMapType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_8= 'state' (otherlv_9= '=' )? ( (lv_state_10_0= ruleContextMapState ) ) ) ) ) ) )* ) ) ) (otherlv_11= 'contains' ( (otherlv_12= RULE_ID ) ) (otherlv_13= ',' ( (otherlv_14= RULE_ID ) ) )* )* ( (lv_relationships_15_0= ruleRelationship ) )* this_CLOSE_16= RULE_CLOSE
            {
            // InternalContextMappingDSL.g:319:3: ()
            // InternalContextMappingDSL.g:320:4: 
            {

            				current = forceCreateModelElement(
            					grammarAccess.getContextMapAccess().getContextMapAction_0(),
            					current);
            			

            }

            otherlv_1=(Token)match(input,19,FOLLOW_5); 

            			newLeafNode(otherlv_1, grammarAccess.getContextMapAccess().getContextMapKeyword_1());
            		
            // InternalContextMappingDSL.g:330:3: ( (lv_name_2_0= RULE_ID ) )?
            int alt6=2;
            int LA6_0 = input.LA(1);

            if ( (LA6_0==RULE_ID) ) {
                alt6=1;
            }
            switch (alt6) {
                case 1 :
                    // InternalContextMappingDSL.g:331:4: (lv_name_2_0= RULE_ID )
                    {
                    // InternalContextMappingDSL.g:331:4: (lv_name_2_0= RULE_ID )
                    // InternalContextMappingDSL.g:332:5: lv_name_2_0= RULE_ID
                    {
                    lv_name_2_0=(Token)match(input,RULE_ID,FOLLOW_6); 

                    					newLeafNode(lv_name_2_0, grammarAccess.getContextMapAccess().getNameIDTerminalRuleCall_2_0());
                    				

                    					if (current==null) {
                    						current = createModelElement(grammarAccess.getContextMapRule());
                    					}
                    					setWithLastConsumed(
                    						current,
                    						"name",
                    						lv_name_2_0,
                    						"org.eclipse.xtext.common.Terminals.ID");
                    				

                    }


                    }
                    break;

            }

            this_OPEN_3=(Token)match(input,RULE_OPEN,FOLLOW_7); 

            			newLeafNode(this_OPEN_3, grammarAccess.getContextMapAccess().getOPENTerminalRuleCall_3());
            		
            // InternalContextMappingDSL.g:352:3: ( ( ( ( ({...}? => ( ({...}? => (otherlv_5= 'type' (otherlv_6= '=' )? ( (lv_type_7_0= ruleContextMapType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_8= 'state' (otherlv_9= '=' )? ( (lv_state_10_0= ruleContextMapState ) ) ) ) ) ) )* ) ) )
            // InternalContextMappingDSL.g:353:4: ( ( ( ({...}? => ( ({...}? => (otherlv_5= 'type' (otherlv_6= '=' )? ( (lv_type_7_0= ruleContextMapType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_8= 'state' (otherlv_9= '=' )? ( (lv_state_10_0= ruleContextMapState ) ) ) ) ) ) )* ) )
            {
            // InternalContextMappingDSL.g:353:4: ( ( ( ({...}? => ( ({...}? => (otherlv_5= 'type' (otherlv_6= '=' )? ( (lv_type_7_0= ruleContextMapType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_8= 'state' (otherlv_9= '=' )? ( (lv_state_10_0= ruleContextMapState ) ) ) ) ) ) )* ) )
            // InternalContextMappingDSL.g:354:5: ( ( ({...}? => ( ({...}? => (otherlv_5= 'type' (otherlv_6= '=' )? ( (lv_type_7_0= ruleContextMapType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_8= 'state' (otherlv_9= '=' )? ( (lv_state_10_0= ruleContextMapState ) ) ) ) ) ) )* )
            {
             
            				  getUnorderedGroupHelper().enter(grammarAccess.getContextMapAccess().getUnorderedGroup_4());
            				
            // InternalContextMappingDSL.g:357:5: ( ( ({...}? => ( ({...}? => (otherlv_5= 'type' (otherlv_6= '=' )? ( (lv_type_7_0= ruleContextMapType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_8= 'state' (otherlv_9= '=' )? ( (lv_state_10_0= ruleContextMapState ) ) ) ) ) ) )* )
            // InternalContextMappingDSL.g:358:6: ( ({...}? => ( ({...}? => (otherlv_5= 'type' (otherlv_6= '=' )? ( (lv_type_7_0= ruleContextMapType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_8= 'state' (otherlv_9= '=' )? ( (lv_state_10_0= ruleContextMapState ) ) ) ) ) ) )*
            {
            // InternalContextMappingDSL.g:358:6: ( ({...}? => ( ({...}? => (otherlv_5= 'type' (otherlv_6= '=' )? ( (lv_type_7_0= ruleContextMapType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_8= 'state' (otherlv_9= '=' )? ( (lv_state_10_0= ruleContextMapState ) ) ) ) ) ) )*
            loop9:
            do {
                int alt9=3;
                int LA9_0 = input.LA(1);

                if ( LA9_0 == 20 && getUnorderedGroupHelper().canSelect(grammarAccess.getContextMapAccess().getUnorderedGroup_4(), 0) ) {
                    alt9=1;
                }
                else if ( LA9_0 == 22 && getUnorderedGroupHelper().canSelect(grammarAccess.getContextMapAccess().getUnorderedGroup_4(), 1) ) {
                    alt9=2;
                }


                switch (alt9) {
            	case 1 :
            	    // InternalContextMappingDSL.g:359:4: ({...}? => ( ({...}? => (otherlv_5= 'type' (otherlv_6= '=' )? ( (lv_type_7_0= ruleContextMapType ) ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:359:4: ({...}? => ( ({...}? => (otherlv_5= 'type' (otherlv_6= '=' )? ( (lv_type_7_0= ruleContextMapType ) ) ) ) ) )
            	    // InternalContextMappingDSL.g:360:5: {...}? => ( ({...}? => (otherlv_5= 'type' (otherlv_6= '=' )? ( (lv_type_7_0= ruleContextMapType ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getContextMapAccess().getUnorderedGroup_4(), 0) ) {
            	        throw new FailedPredicateException(input, "ruleContextMap", "getUnorderedGroupHelper().canSelect(grammarAccess.getContextMapAccess().getUnorderedGroup_4(), 0)");
            	    }
            	    // InternalContextMappingDSL.g:360:107: ( ({...}? => (otherlv_5= 'type' (otherlv_6= '=' )? ( (lv_type_7_0= ruleContextMapType ) ) ) ) )
            	    // InternalContextMappingDSL.g:361:6: ({...}? => (otherlv_5= 'type' (otherlv_6= '=' )? ( (lv_type_7_0= ruleContextMapType ) ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getContextMapAccess().getUnorderedGroup_4(), 0);
            	    					
            	    // InternalContextMappingDSL.g:364:9: ({...}? => (otherlv_5= 'type' (otherlv_6= '=' )? ( (lv_type_7_0= ruleContextMapType ) ) ) )
            	    // InternalContextMappingDSL.g:364:10: {...}? => (otherlv_5= 'type' (otherlv_6= '=' )? ( (lv_type_7_0= ruleContextMapType ) ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleContextMap", "true");
            	    }
            	    // InternalContextMappingDSL.g:364:19: (otherlv_5= 'type' (otherlv_6= '=' )? ( (lv_type_7_0= ruleContextMapType ) ) )
            	    // InternalContextMappingDSL.g:364:20: otherlv_5= 'type' (otherlv_6= '=' )? ( (lv_type_7_0= ruleContextMapType ) )
            	    {
            	    otherlv_5=(Token)match(input,20,FOLLOW_8); 

            	    									newLeafNode(otherlv_5, grammarAccess.getContextMapAccess().getTypeKeyword_4_0_0());
            	    								
            	    // InternalContextMappingDSL.g:368:9: (otherlv_6= '=' )?
            	    int alt7=2;
            	    int LA7_0 = input.LA(1);

            	    if ( (LA7_0==21) ) {
            	        alt7=1;
            	    }
            	    switch (alt7) {
            	        case 1 :
            	            // InternalContextMappingDSL.g:369:10: otherlv_6= '='
            	            {
            	            otherlv_6=(Token)match(input,21,FOLLOW_8); 

            	            										newLeafNode(otherlv_6, grammarAccess.getContextMapAccess().getEqualsSignKeyword_4_0_1());
            	            									

            	            }
            	            break;

            	    }

            	    // InternalContextMappingDSL.g:374:9: ( (lv_type_7_0= ruleContextMapType ) )
            	    // InternalContextMappingDSL.g:375:10: (lv_type_7_0= ruleContextMapType )
            	    {
            	    // InternalContextMappingDSL.g:375:10: (lv_type_7_0= ruleContextMapType )
            	    // InternalContextMappingDSL.g:376:11: lv_type_7_0= ruleContextMapType
            	    {

            	    											newCompositeNode(grammarAccess.getContextMapAccess().getTypeContextMapTypeEnumRuleCall_4_0_2_0());
            	    										
            	    pushFollow(FOLLOW_7);
            	    lv_type_7_0=ruleContextMapType();

            	    state._fsp--;


            	    											if (current==null) {
            	    												current = createModelElementForParent(grammarAccess.getContextMapRule());
            	    											}
            	    											set(
            	    												current,
            	    												"type",
            	    												lv_type_7_0,
            	    												"org.contextmapper.dsl.ContextMappingDSL.ContextMapType");
            	    											afterParserOrEnumRuleCall();
            	    										

            	    }


            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getContextMapAccess().getUnorderedGroup_4());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 2 :
            	    // InternalContextMappingDSL.g:399:4: ({...}? => ( ({...}? => (otherlv_8= 'state' (otherlv_9= '=' )? ( (lv_state_10_0= ruleContextMapState ) ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:399:4: ({...}? => ( ({...}? => (otherlv_8= 'state' (otherlv_9= '=' )? ( (lv_state_10_0= ruleContextMapState ) ) ) ) ) )
            	    // InternalContextMappingDSL.g:400:5: {...}? => ( ({...}? => (otherlv_8= 'state' (otherlv_9= '=' )? ( (lv_state_10_0= ruleContextMapState ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getContextMapAccess().getUnorderedGroup_4(), 1) ) {
            	        throw new FailedPredicateException(input, "ruleContextMap", "getUnorderedGroupHelper().canSelect(grammarAccess.getContextMapAccess().getUnorderedGroup_4(), 1)");
            	    }
            	    // InternalContextMappingDSL.g:400:107: ( ({...}? => (otherlv_8= 'state' (otherlv_9= '=' )? ( (lv_state_10_0= ruleContextMapState ) ) ) ) )
            	    // InternalContextMappingDSL.g:401:6: ({...}? => (otherlv_8= 'state' (otherlv_9= '=' )? ( (lv_state_10_0= ruleContextMapState ) ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getContextMapAccess().getUnorderedGroup_4(), 1);
            	    					
            	    // InternalContextMappingDSL.g:404:9: ({...}? => (otherlv_8= 'state' (otherlv_9= '=' )? ( (lv_state_10_0= ruleContextMapState ) ) ) )
            	    // InternalContextMappingDSL.g:404:10: {...}? => (otherlv_8= 'state' (otherlv_9= '=' )? ( (lv_state_10_0= ruleContextMapState ) ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleContextMap", "true");
            	    }
            	    // InternalContextMappingDSL.g:404:19: (otherlv_8= 'state' (otherlv_9= '=' )? ( (lv_state_10_0= ruleContextMapState ) ) )
            	    // InternalContextMappingDSL.g:404:20: otherlv_8= 'state' (otherlv_9= '=' )? ( (lv_state_10_0= ruleContextMapState ) )
            	    {
            	    otherlv_8=(Token)match(input,22,FOLLOW_9); 

            	    									newLeafNode(otherlv_8, grammarAccess.getContextMapAccess().getStateKeyword_4_1_0());
            	    								
            	    // InternalContextMappingDSL.g:408:9: (otherlv_9= '=' )?
            	    int alt8=2;
            	    int LA8_0 = input.LA(1);

            	    if ( (LA8_0==21) ) {
            	        alt8=1;
            	    }
            	    switch (alt8) {
            	        case 1 :
            	            // InternalContextMappingDSL.g:409:10: otherlv_9= '='
            	            {
            	            otherlv_9=(Token)match(input,21,FOLLOW_9); 

            	            										newLeafNode(otherlv_9, grammarAccess.getContextMapAccess().getEqualsSignKeyword_4_1_1());
            	            									

            	            }
            	            break;

            	    }

            	    // InternalContextMappingDSL.g:414:9: ( (lv_state_10_0= ruleContextMapState ) )
            	    // InternalContextMappingDSL.g:415:10: (lv_state_10_0= ruleContextMapState )
            	    {
            	    // InternalContextMappingDSL.g:415:10: (lv_state_10_0= ruleContextMapState )
            	    // InternalContextMappingDSL.g:416:11: lv_state_10_0= ruleContextMapState
            	    {

            	    											newCompositeNode(grammarAccess.getContextMapAccess().getStateContextMapStateEnumRuleCall_4_1_2_0());
            	    										
            	    pushFollow(FOLLOW_7);
            	    lv_state_10_0=ruleContextMapState();

            	    state._fsp--;


            	    											if (current==null) {
            	    												current = createModelElementForParent(grammarAccess.getContextMapRule());
            	    											}
            	    											set(
            	    												current,
            	    												"state",
            	    												lv_state_10_0,
            	    												"org.contextmapper.dsl.ContextMappingDSL.ContextMapState");
            	    											afterParserOrEnumRuleCall();
            	    										

            	    }


            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getContextMapAccess().getUnorderedGroup_4());
            	    					

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop9;
                }
            } while (true);


            }


            }

             
            				  getUnorderedGroupHelper().leave(grammarAccess.getContextMapAccess().getUnorderedGroup_4());
            				

            }

            // InternalContextMappingDSL.g:446:3: (otherlv_11= 'contains' ( (otherlv_12= RULE_ID ) ) (otherlv_13= ',' ( (otherlv_14= RULE_ID ) ) )* )*
            loop11:
            do {
                int alt11=2;
                int LA11_0 = input.LA(1);

                if ( (LA11_0==23) ) {
                    alt11=1;
                }


                switch (alt11) {
            	case 1 :
            	    // InternalContextMappingDSL.g:447:4: otherlv_11= 'contains' ( (otherlv_12= RULE_ID ) ) (otherlv_13= ',' ( (otherlv_14= RULE_ID ) ) )*
            	    {
            	    otherlv_11=(Token)match(input,23,FOLLOW_10); 

            	    				newLeafNode(otherlv_11, grammarAccess.getContextMapAccess().getContainsKeyword_5_0());
            	    			
            	    // InternalContextMappingDSL.g:451:4: ( (otherlv_12= RULE_ID ) )
            	    // InternalContextMappingDSL.g:452:5: (otherlv_12= RULE_ID )
            	    {
            	    // InternalContextMappingDSL.g:452:5: (otherlv_12= RULE_ID )
            	    // InternalContextMappingDSL.g:453:6: otherlv_12= RULE_ID
            	    {

            	    						if (current==null) {
            	    							current = createModelElement(grammarAccess.getContextMapRule());
            	    						}
            	    					
            	    otherlv_12=(Token)match(input,RULE_ID,FOLLOW_11); 

            	    						newLeafNode(otherlv_12, grammarAccess.getContextMapAccess().getBoundedContextsBoundedContextCrossReference_5_1_0());
            	    					

            	    }


            	    }

            	    // InternalContextMappingDSL.g:464:4: (otherlv_13= ',' ( (otherlv_14= RULE_ID ) ) )*
            	    loop10:
            	    do {
            	        int alt10=2;
            	        int LA10_0 = input.LA(1);

            	        if ( (LA10_0==24) ) {
            	            alt10=1;
            	        }


            	        switch (alt10) {
            	    	case 1 :
            	    	    // InternalContextMappingDSL.g:465:5: otherlv_13= ',' ( (otherlv_14= RULE_ID ) )
            	    	    {
            	    	    otherlv_13=(Token)match(input,24,FOLLOW_10); 

            	    	    					newLeafNode(otherlv_13, grammarAccess.getContextMapAccess().getCommaKeyword_5_2_0());
            	    	    				
            	    	    // InternalContextMappingDSL.g:469:5: ( (otherlv_14= RULE_ID ) )
            	    	    // InternalContextMappingDSL.g:470:6: (otherlv_14= RULE_ID )
            	    	    {
            	    	    // InternalContextMappingDSL.g:470:6: (otherlv_14= RULE_ID )
            	    	    // InternalContextMappingDSL.g:471:7: otherlv_14= RULE_ID
            	    	    {

            	    	    							if (current==null) {
            	    	    								current = createModelElement(grammarAccess.getContextMapRule());
            	    	    							}
            	    	    						
            	    	    otherlv_14=(Token)match(input,RULE_ID,FOLLOW_11); 

            	    	    							newLeafNode(otherlv_14, grammarAccess.getContextMapAccess().getBoundedContextsBoundedContextCrossReference_5_2_1_0());
            	    	    						

            	    	    }


            	    	    }


            	    	    }
            	    	    break;

            	    	default :
            	    	    break loop10;
            	        }
            	    } while (true);


            	    }
            	    break;

            	default :
            	    break loop11;
                }
            } while (true);

            // InternalContextMappingDSL.g:484:3: ( (lv_relationships_15_0= ruleRelationship ) )*
            loop12:
            do {
                int alt12=2;
                int LA12_0 = input.LA(1);

                if ( (LA12_0==RULE_ID||LA12_0==35) ) {
                    alt12=1;
                }


                switch (alt12) {
            	case 1 :
            	    // InternalContextMappingDSL.g:485:4: (lv_relationships_15_0= ruleRelationship )
            	    {
            	    // InternalContextMappingDSL.g:485:4: (lv_relationships_15_0= ruleRelationship )
            	    // InternalContextMappingDSL.g:486:5: lv_relationships_15_0= ruleRelationship
            	    {

            	    					newCompositeNode(grammarAccess.getContextMapAccess().getRelationshipsRelationshipParserRuleCall_6_0());
            	    				
            	    pushFollow(FOLLOW_12);
            	    lv_relationships_15_0=ruleRelationship();

            	    state._fsp--;


            	    					if (current==null) {
            	    						current = createModelElementForParent(grammarAccess.getContextMapRule());
            	    					}
            	    					add(
            	    						current,
            	    						"relationships",
            	    						lv_relationships_15_0,
            	    						"org.contextmapper.dsl.ContextMappingDSL.Relationship");
            	    					afterParserOrEnumRuleCall();
            	    				

            	    }


            	    }
            	    break;

            	default :
            	    break loop12;
                }
            } while (true);

            this_CLOSE_16=(Token)match(input,RULE_CLOSE,FOLLOW_2); 

            			newLeafNode(this_CLOSE_16, grammarAccess.getContextMapAccess().getCLOSETerminalRuleCall_7());
            		

            }


            }


            	leaveRule();

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleContextMap"


    // $ANTLR start "entryRuleBoundedContext"
    // InternalContextMappingDSL.g:511:1: entryRuleBoundedContext returns [EObject current=null] : iv_ruleBoundedContext= ruleBoundedContext EOF ;
    public final EObject entryRuleBoundedContext() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleBoundedContext = null;


        try {
            // InternalContextMappingDSL.g:511:55: (iv_ruleBoundedContext= ruleBoundedContext EOF )
            // InternalContextMappingDSL.g:512:2: iv_ruleBoundedContext= ruleBoundedContext EOF
            {
             newCompositeNode(grammarAccess.getBoundedContextRule()); 
            pushFollow(FOLLOW_1);
            iv_ruleBoundedContext=ruleBoundedContext();

            state._fsp--;

             current =iv_ruleBoundedContext; 
            match(input,EOF,FOLLOW_2); 

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleBoundedContext"


    // $ANTLR start "ruleBoundedContext"
    // InternalContextMappingDSL.g:518:1: ruleBoundedContext returns [EObject current=null] : ( ( (lv_comment_0_0= RULE_SL_COMMENT ) )? otherlv_1= 'BoundedContext' ( (lv_name_2_0= RULE_ID ) ) ( ( ( ( ({...}? => ( ({...}? => (otherlv_4= 'implements' ( (otherlv_5= RULE_ID ) ) (otherlv_6= ',' ( (otherlv_7= RULE_ID ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_8= 'realizes' ( (otherlv_9= RULE_ID ) ) (otherlv_10= ',' ( (otherlv_11= RULE_ID ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_12= 'refines' ( (otherlv_13= RULE_ID ) ) ) ) ) ) )* ) ) ) (this_OPEN_14= RULE_OPEN ( ( ( ( ({...}? => ( ({...}? => (otherlv_16= 'domainVisionStatement' (otherlv_17= '=' )? ( (lv_domainVisionStatement_18_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'type' (otherlv_20= '=' )? ( (lv_type_21_0= ruleBoundedContextType ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_22= 'responsibilities' (otherlv_23= '=' )? ( (lv_responsibilities_24_0= RULE_STRING ) ) ) (otherlv_25= ',' ( (lv_responsibilities_26_0= RULE_STRING ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_27= 'implementationTechnology' (otherlv_28= '=' )? ( (lv_implementationTechnology_29_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_30= 'knowledgeLevel' (otherlv_31= '=' )? ( (lv_knowledgeLevel_32_0= ruleKnowledgeLevel ) ) ) ) ) ) )* ) ) ) ( (lv_modules_33_0= ruleSculptorModule ) )* ( (lv_aggregates_34_0= ruleAggregate ) )* this_CLOSE_35= RULE_CLOSE )? ) ;
    public final EObject ruleBoundedContext() throws RecognitionException {
        EObject current = null;

        Token lv_comment_0_0=null;
        Token otherlv_1=null;
        Token lv_name_2_0=null;
        Token otherlv_4=null;
        Token otherlv_5=null;
        Token otherlv_6=null;
        Token otherlv_7=null;
        Token otherlv_8=null;
        Token otherlv_9=null;
        Token otherlv_10=null;
        Token otherlv_11=null;
        Token otherlv_12=null;
        Token otherlv_13=null;
        Token this_OPEN_14=null;
        Token otherlv_16=null;
        Token otherlv_17=null;
        Token lv_domainVisionStatement_18_0=null;
        Token otherlv_19=null;
        Token otherlv_20=null;
        Token otherlv_22=null;
        Token otherlv_23=null;
        Token lv_responsibilities_24_0=null;
        Token otherlv_25=null;
        Token lv_responsibilities_26_0=null;
        Token otherlv_27=null;
        Token otherlv_28=null;
        Token lv_implementationTechnology_29_0=null;
        Token otherlv_30=null;
        Token otherlv_31=null;
        Token this_CLOSE_35=null;
        Enumerator lv_type_21_0 = null;

        Enumerator lv_knowledgeLevel_32_0 = null;

        EObject lv_modules_33_0 = null;

        EObject lv_aggregates_34_0 = null;



        	enterRule();

        try {
            // InternalContextMappingDSL.g:524:2: ( ( ( (lv_comment_0_0= RULE_SL_COMMENT ) )? otherlv_1= 'BoundedContext' ( (lv_name_2_0= RULE_ID ) ) ( ( ( ( ({...}? => ( ({...}? => (otherlv_4= 'implements' ( (otherlv_5= RULE_ID ) ) (otherlv_6= ',' ( (otherlv_7= RULE_ID ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_8= 'realizes' ( (otherlv_9= RULE_ID ) ) (otherlv_10= ',' ( (otherlv_11= RULE_ID ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_12= 'refines' ( (otherlv_13= RULE_ID ) ) ) ) ) ) )* ) ) ) (this_OPEN_14= RULE_OPEN ( ( ( ( ({...}? => ( ({...}? => (otherlv_16= 'domainVisionStatement' (otherlv_17= '=' )? ( (lv_domainVisionStatement_18_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'type' (otherlv_20= '=' )? ( (lv_type_21_0= ruleBoundedContextType ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_22= 'responsibilities' (otherlv_23= '=' )? ( (lv_responsibilities_24_0= RULE_STRING ) ) ) (otherlv_25= ',' ( (lv_responsibilities_26_0= RULE_STRING ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_27= 'implementationTechnology' (otherlv_28= '=' )? ( (lv_implementationTechnology_29_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_30= 'knowledgeLevel' (otherlv_31= '=' )? ( (lv_knowledgeLevel_32_0= ruleKnowledgeLevel ) ) ) ) ) ) )* ) ) ) ( (lv_modules_33_0= ruleSculptorModule ) )* ( (lv_aggregates_34_0= ruleAggregate ) )* this_CLOSE_35= RULE_CLOSE )? ) )
            // InternalContextMappingDSL.g:525:2: ( ( (lv_comment_0_0= RULE_SL_COMMENT ) )? otherlv_1= 'BoundedContext' ( (lv_name_2_0= RULE_ID ) ) ( ( ( ( ({...}? => ( ({...}? => (otherlv_4= 'implements' ( (otherlv_5= RULE_ID ) ) (otherlv_6= ',' ( (otherlv_7= RULE_ID ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_8= 'realizes' ( (otherlv_9= RULE_ID ) ) (otherlv_10= ',' ( (otherlv_11= RULE_ID ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_12= 'refines' ( (otherlv_13= RULE_ID ) ) ) ) ) ) )* ) ) ) (this_OPEN_14= RULE_OPEN ( ( ( ( ({...}? => ( ({...}? => (otherlv_16= 'domainVisionStatement' (otherlv_17= '=' )? ( (lv_domainVisionStatement_18_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'type' (otherlv_20= '=' )? ( (lv_type_21_0= ruleBoundedContextType ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_22= 'responsibilities' (otherlv_23= '=' )? ( (lv_responsibilities_24_0= RULE_STRING ) ) ) (otherlv_25= ',' ( (lv_responsibilities_26_0= RULE_STRING ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_27= 'implementationTechnology' (otherlv_28= '=' )? ( (lv_implementationTechnology_29_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_30= 'knowledgeLevel' (otherlv_31= '=' )? ( (lv_knowledgeLevel_32_0= ruleKnowledgeLevel ) ) ) ) ) ) )* ) ) ) ( (lv_modules_33_0= ruleSculptorModule ) )* ( (lv_aggregates_34_0= ruleAggregate ) )* this_CLOSE_35= RULE_CLOSE )? )
            {
            // InternalContextMappingDSL.g:525:2: ( ( (lv_comment_0_0= RULE_SL_COMMENT ) )? otherlv_1= 'BoundedContext' ( (lv_name_2_0= RULE_ID ) ) ( ( ( ( ({...}? => ( ({...}? => (otherlv_4= 'implements' ( (otherlv_5= RULE_ID ) ) (otherlv_6= ',' ( (otherlv_7= RULE_ID ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_8= 'realizes' ( (otherlv_9= RULE_ID ) ) (otherlv_10= ',' ( (otherlv_11= RULE_ID ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_12= 'refines' ( (otherlv_13= RULE_ID ) ) ) ) ) ) )* ) ) ) (this_OPEN_14= RULE_OPEN ( ( ( ( ({...}? => ( ({...}? => (otherlv_16= 'domainVisionStatement' (otherlv_17= '=' )? ( (lv_domainVisionStatement_18_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'type' (otherlv_20= '=' )? ( (lv_type_21_0= ruleBoundedContextType ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_22= 'responsibilities' (otherlv_23= '=' )? ( (lv_responsibilities_24_0= RULE_STRING ) ) ) (otherlv_25= ',' ( (lv_responsibilities_26_0= RULE_STRING ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_27= 'implementationTechnology' (otherlv_28= '=' )? ( (lv_implementationTechnology_29_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_30= 'knowledgeLevel' (otherlv_31= '=' )? ( (lv_knowledgeLevel_32_0= ruleKnowledgeLevel ) ) ) ) ) ) )* ) ) ) ( (lv_modules_33_0= ruleSculptorModule ) )* ( (lv_aggregates_34_0= ruleAggregate ) )* this_CLOSE_35= RULE_CLOSE )? )
            // InternalContextMappingDSL.g:526:3: ( (lv_comment_0_0= RULE_SL_COMMENT ) )? otherlv_1= 'BoundedContext' ( (lv_name_2_0= RULE_ID ) ) ( ( ( ( ({...}? => ( ({...}? => (otherlv_4= 'implements' ( (otherlv_5= RULE_ID ) ) (otherlv_6= ',' ( (otherlv_7= RULE_ID ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_8= 'realizes' ( (otherlv_9= RULE_ID ) ) (otherlv_10= ',' ( (otherlv_11= RULE_ID ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_12= 'refines' ( (otherlv_13= RULE_ID ) ) ) ) ) ) )* ) ) ) (this_OPEN_14= RULE_OPEN ( ( ( ( ({...}? => ( ({...}? => (otherlv_16= 'domainVisionStatement' (otherlv_17= '=' )? ( (lv_domainVisionStatement_18_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'type' (otherlv_20= '=' )? ( (lv_type_21_0= ruleBoundedContextType ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_22= 'responsibilities' (otherlv_23= '=' )? ( (lv_responsibilities_24_0= RULE_STRING ) ) ) (otherlv_25= ',' ( (lv_responsibilities_26_0= RULE_STRING ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_27= 'implementationTechnology' (otherlv_28= '=' )? ( (lv_implementationTechnology_29_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_30= 'knowledgeLevel' (otherlv_31= '=' )? ( (lv_knowledgeLevel_32_0= ruleKnowledgeLevel ) ) ) ) ) ) )* ) ) ) ( (lv_modules_33_0= ruleSculptorModule ) )* ( (lv_aggregates_34_0= ruleAggregate ) )* this_CLOSE_35= RULE_CLOSE )?
            {
            // InternalContextMappingDSL.g:526:3: ( (lv_comment_0_0= RULE_SL_COMMENT ) )?
            int alt13=2;
            int LA13_0 = input.LA(1);

            if ( (LA13_0==RULE_SL_COMMENT) ) {
                alt13=1;
            }
            switch (alt13) {
                case 1 :
                    // InternalContextMappingDSL.g:527:4: (lv_comment_0_0= RULE_SL_COMMENT )
                    {
                    // InternalContextMappingDSL.g:527:4: (lv_comment_0_0= RULE_SL_COMMENT )
                    // InternalContextMappingDSL.g:528:5: lv_comment_0_0= RULE_SL_COMMENT
                    {
                    lv_comment_0_0=(Token)match(input,RULE_SL_COMMENT,FOLLOW_13); 

                    					newLeafNode(lv_comment_0_0, grammarAccess.getBoundedContextAccess().getCommentSL_COMMENTTerminalRuleCall_0_0());
                    				

                    					if (current==null) {
                    						current = createModelElement(grammarAccess.getBoundedContextRule());
                    					}
                    					setWithLastConsumed(
                    						current,
                    						"comment",
                    						lv_comment_0_0,
                    						"org.eclipse.xtext.common.Terminals.SL_COMMENT");
                    				

                    }


                    }
                    break;

            }

            otherlv_1=(Token)match(input,25,FOLLOW_10); 

            			newLeafNode(otherlv_1, grammarAccess.getBoundedContextAccess().getBoundedContextKeyword_1());
            		
            // InternalContextMappingDSL.g:548:3: ( (lv_name_2_0= RULE_ID ) )
            // InternalContextMappingDSL.g:549:4: (lv_name_2_0= RULE_ID )
            {
            // InternalContextMappingDSL.g:549:4: (lv_name_2_0= RULE_ID )
            // InternalContextMappingDSL.g:550:5: lv_name_2_0= RULE_ID
            {
            lv_name_2_0=(Token)match(input,RULE_ID,FOLLOW_14); 

            					newLeafNode(lv_name_2_0, grammarAccess.getBoundedContextAccess().getNameIDTerminalRuleCall_2_0());
            				

            					if (current==null) {
            						current = createModelElement(grammarAccess.getBoundedContextRule());
            					}
            					setWithLastConsumed(
            						current,
            						"name",
            						lv_name_2_0,
            						"org.eclipse.xtext.common.Terminals.ID");
            				

            }


            }

            // InternalContextMappingDSL.g:566:3: ( ( ( ( ({...}? => ( ({...}? => (otherlv_4= 'implements' ( (otherlv_5= RULE_ID ) ) (otherlv_6= ',' ( (otherlv_7= RULE_ID ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_8= 'realizes' ( (otherlv_9= RULE_ID ) ) (otherlv_10= ',' ( (otherlv_11= RULE_ID ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_12= 'refines' ( (otherlv_13= RULE_ID ) ) ) ) ) ) )* ) ) )
            // InternalContextMappingDSL.g:567:4: ( ( ( ({...}? => ( ({...}? => (otherlv_4= 'implements' ( (otherlv_5= RULE_ID ) ) (otherlv_6= ',' ( (otherlv_7= RULE_ID ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_8= 'realizes' ( (otherlv_9= RULE_ID ) ) (otherlv_10= ',' ( (otherlv_11= RULE_ID ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_12= 'refines' ( (otherlv_13= RULE_ID ) ) ) ) ) ) )* ) )
            {
            // InternalContextMappingDSL.g:567:4: ( ( ( ({...}? => ( ({...}? => (otherlv_4= 'implements' ( (otherlv_5= RULE_ID ) ) (otherlv_6= ',' ( (otherlv_7= RULE_ID ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_8= 'realizes' ( (otherlv_9= RULE_ID ) ) (otherlv_10= ',' ( (otherlv_11= RULE_ID ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_12= 'refines' ( (otherlv_13= RULE_ID ) ) ) ) ) ) )* ) )
            // InternalContextMappingDSL.g:568:5: ( ( ({...}? => ( ({...}? => (otherlv_4= 'implements' ( (otherlv_5= RULE_ID ) ) (otherlv_6= ',' ( (otherlv_7= RULE_ID ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_8= 'realizes' ( (otherlv_9= RULE_ID ) ) (otherlv_10= ',' ( (otherlv_11= RULE_ID ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_12= 'refines' ( (otherlv_13= RULE_ID ) ) ) ) ) ) )* )
            {
             
            				  getUnorderedGroupHelper().enter(grammarAccess.getBoundedContextAccess().getUnorderedGroup_3());
            				
            // InternalContextMappingDSL.g:571:5: ( ( ({...}? => ( ({...}? => (otherlv_4= 'implements' ( (otherlv_5= RULE_ID ) ) (otherlv_6= ',' ( (otherlv_7= RULE_ID ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_8= 'realizes' ( (otherlv_9= RULE_ID ) ) (otherlv_10= ',' ( (otherlv_11= RULE_ID ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_12= 'refines' ( (otherlv_13= RULE_ID ) ) ) ) ) ) )* )
            // InternalContextMappingDSL.g:572:6: ( ({...}? => ( ({...}? => (otherlv_4= 'implements' ( (otherlv_5= RULE_ID ) ) (otherlv_6= ',' ( (otherlv_7= RULE_ID ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_8= 'realizes' ( (otherlv_9= RULE_ID ) ) (otherlv_10= ',' ( (otherlv_11= RULE_ID ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_12= 'refines' ( (otherlv_13= RULE_ID ) ) ) ) ) ) )*
            {
            // InternalContextMappingDSL.g:572:6: ( ({...}? => ( ({...}? => (otherlv_4= 'implements' ( (otherlv_5= RULE_ID ) ) (otherlv_6= ',' ( (otherlv_7= RULE_ID ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_8= 'realizes' ( (otherlv_9= RULE_ID ) ) (otherlv_10= ',' ( (otherlv_11= RULE_ID ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_12= 'refines' ( (otherlv_13= RULE_ID ) ) ) ) ) ) )*
            loop16:
            do {
                int alt16=4;
                int LA16_0 = input.LA(1);

                if ( LA16_0 == 26 && getUnorderedGroupHelper().canSelect(grammarAccess.getBoundedContextAccess().getUnorderedGroup_3(), 0) ) {
                    alt16=1;
                }
                else if ( LA16_0 == 27 && getUnorderedGroupHelper().canSelect(grammarAccess.getBoundedContextAccess().getUnorderedGroup_3(), 1) ) {
                    alt16=2;
                }
                else if ( LA16_0 == 28 && getUnorderedGroupHelper().canSelect(grammarAccess.getBoundedContextAccess().getUnorderedGroup_3(), 2) ) {
                    alt16=3;
                }


                switch (alt16) {
            	case 1 :
            	    // InternalContextMappingDSL.g:573:4: ({...}? => ( ({...}? => (otherlv_4= 'implements' ( (otherlv_5= RULE_ID ) ) (otherlv_6= ',' ( (otherlv_7= RULE_ID ) ) )* ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:573:4: ({...}? => ( ({...}? => (otherlv_4= 'implements' ( (otherlv_5= RULE_ID ) ) (otherlv_6= ',' ( (otherlv_7= RULE_ID ) ) )* ) ) ) )
            	    // InternalContextMappingDSL.g:574:5: {...}? => ( ({...}? => (otherlv_4= 'implements' ( (otherlv_5= RULE_ID ) ) (otherlv_6= ',' ( (otherlv_7= RULE_ID ) ) )* ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getBoundedContextAccess().getUnorderedGroup_3(), 0) ) {
            	        throw new FailedPredicateException(input, "ruleBoundedContext", "getUnorderedGroupHelper().canSelect(grammarAccess.getBoundedContextAccess().getUnorderedGroup_3(), 0)");
            	    }
            	    // InternalContextMappingDSL.g:574:111: ( ({...}? => (otherlv_4= 'implements' ( (otherlv_5= RULE_ID ) ) (otherlv_6= ',' ( (otherlv_7= RULE_ID ) ) )* ) ) )
            	    // InternalContextMappingDSL.g:575:6: ({...}? => (otherlv_4= 'implements' ( (otherlv_5= RULE_ID ) ) (otherlv_6= ',' ( (otherlv_7= RULE_ID ) ) )* ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getBoundedContextAccess().getUnorderedGroup_3(), 0);
            	    					
            	    // InternalContextMappingDSL.g:578:9: ({...}? => (otherlv_4= 'implements' ( (otherlv_5= RULE_ID ) ) (otherlv_6= ',' ( (otherlv_7= RULE_ID ) ) )* ) )
            	    // InternalContextMappingDSL.g:578:10: {...}? => (otherlv_4= 'implements' ( (otherlv_5= RULE_ID ) ) (otherlv_6= ',' ( (otherlv_7= RULE_ID ) ) )* )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleBoundedContext", "true");
            	    }
            	    // InternalContextMappingDSL.g:578:19: (otherlv_4= 'implements' ( (otherlv_5= RULE_ID ) ) (otherlv_6= ',' ( (otherlv_7= RULE_ID ) ) )* )
            	    // InternalContextMappingDSL.g:578:20: otherlv_4= 'implements' ( (otherlv_5= RULE_ID ) ) (otherlv_6= ',' ( (otherlv_7= RULE_ID ) ) )*
            	    {
            	    otherlv_4=(Token)match(input,26,FOLLOW_10); 

            	    									newLeafNode(otherlv_4, grammarAccess.getBoundedContextAccess().getImplementsKeyword_3_0_0());
            	    								
            	    // InternalContextMappingDSL.g:582:9: ( (otherlv_5= RULE_ID ) )
            	    // InternalContextMappingDSL.g:583:10: (otherlv_5= RULE_ID )
            	    {
            	    // InternalContextMappingDSL.g:583:10: (otherlv_5= RULE_ID )
            	    // InternalContextMappingDSL.g:584:11: otherlv_5= RULE_ID
            	    {

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getBoundedContextRule());
            	    											}
            	    										
            	    otherlv_5=(Token)match(input,RULE_ID,FOLLOW_15); 

            	    											newLeafNode(otherlv_5, grammarAccess.getBoundedContextAccess().getImplementedDomainPartsDomainPartCrossReference_3_0_1_0());
            	    										

            	    }


            	    }

            	    // InternalContextMappingDSL.g:595:9: (otherlv_6= ',' ( (otherlv_7= RULE_ID ) ) )*
            	    loop14:
            	    do {
            	        int alt14=2;
            	        int LA14_0 = input.LA(1);

            	        if ( (LA14_0==24) ) {
            	            alt14=1;
            	        }


            	        switch (alt14) {
            	    	case 1 :
            	    	    // InternalContextMappingDSL.g:596:10: otherlv_6= ',' ( (otherlv_7= RULE_ID ) )
            	    	    {
            	    	    otherlv_6=(Token)match(input,24,FOLLOW_10); 

            	    	    										newLeafNode(otherlv_6, grammarAccess.getBoundedContextAccess().getCommaKeyword_3_0_2_0());
            	    	    									
            	    	    // InternalContextMappingDSL.g:600:10: ( (otherlv_7= RULE_ID ) )
            	    	    // InternalContextMappingDSL.g:601:11: (otherlv_7= RULE_ID )
            	    	    {
            	    	    // InternalContextMappingDSL.g:601:11: (otherlv_7= RULE_ID )
            	    	    // InternalContextMappingDSL.g:602:12: otherlv_7= RULE_ID
            	    	    {

            	    	    												if (current==null) {
            	    	    													current = createModelElement(grammarAccess.getBoundedContextRule());
            	    	    												}
            	    	    											
            	    	    otherlv_7=(Token)match(input,RULE_ID,FOLLOW_15); 

            	    	    												newLeafNode(otherlv_7, grammarAccess.getBoundedContextAccess().getImplementedDomainPartsDomainPartCrossReference_3_0_2_1_0());
            	    	    											

            	    	    }


            	    	    }


            	    	    }
            	    	    break;

            	    	default :
            	    	    break loop14;
            	        }
            	    } while (true);


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getBoundedContextAccess().getUnorderedGroup_3());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 2 :
            	    // InternalContextMappingDSL.g:620:4: ({...}? => ( ({...}? => (otherlv_8= 'realizes' ( (otherlv_9= RULE_ID ) ) (otherlv_10= ',' ( (otherlv_11= RULE_ID ) ) )* ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:620:4: ({...}? => ( ({...}? => (otherlv_8= 'realizes' ( (otherlv_9= RULE_ID ) ) (otherlv_10= ',' ( (otherlv_11= RULE_ID ) ) )* ) ) ) )
            	    // InternalContextMappingDSL.g:621:5: {...}? => ( ({...}? => (otherlv_8= 'realizes' ( (otherlv_9= RULE_ID ) ) (otherlv_10= ',' ( (otherlv_11= RULE_ID ) ) )* ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getBoundedContextAccess().getUnorderedGroup_3(), 1) ) {
            	        throw new FailedPredicateException(input, "ruleBoundedContext", "getUnorderedGroupHelper().canSelect(grammarAccess.getBoundedContextAccess().getUnorderedGroup_3(), 1)");
            	    }
            	    // InternalContextMappingDSL.g:621:111: ( ({...}? => (otherlv_8= 'realizes' ( (otherlv_9= RULE_ID ) ) (otherlv_10= ',' ( (otherlv_11= RULE_ID ) ) )* ) ) )
            	    // InternalContextMappingDSL.g:622:6: ({...}? => (otherlv_8= 'realizes' ( (otherlv_9= RULE_ID ) ) (otherlv_10= ',' ( (otherlv_11= RULE_ID ) ) )* ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getBoundedContextAccess().getUnorderedGroup_3(), 1);
            	    					
            	    // InternalContextMappingDSL.g:625:9: ({...}? => (otherlv_8= 'realizes' ( (otherlv_9= RULE_ID ) ) (otherlv_10= ',' ( (otherlv_11= RULE_ID ) ) )* ) )
            	    // InternalContextMappingDSL.g:625:10: {...}? => (otherlv_8= 'realizes' ( (otherlv_9= RULE_ID ) ) (otherlv_10= ',' ( (otherlv_11= RULE_ID ) ) )* )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleBoundedContext", "true");
            	    }
            	    // InternalContextMappingDSL.g:625:19: (otherlv_8= 'realizes' ( (otherlv_9= RULE_ID ) ) (otherlv_10= ',' ( (otherlv_11= RULE_ID ) ) )* )
            	    // InternalContextMappingDSL.g:625:20: otherlv_8= 'realizes' ( (otherlv_9= RULE_ID ) ) (otherlv_10= ',' ( (otherlv_11= RULE_ID ) ) )*
            	    {
            	    otherlv_8=(Token)match(input,27,FOLLOW_10); 

            	    									newLeafNode(otherlv_8, grammarAccess.getBoundedContextAccess().getRealizesKeyword_3_1_0());
            	    								
            	    // InternalContextMappingDSL.g:629:9: ( (otherlv_9= RULE_ID ) )
            	    // InternalContextMappingDSL.g:630:10: (otherlv_9= RULE_ID )
            	    {
            	    // InternalContextMappingDSL.g:630:10: (otherlv_9= RULE_ID )
            	    // InternalContextMappingDSL.g:631:11: otherlv_9= RULE_ID
            	    {

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getBoundedContextRule());
            	    											}
            	    										
            	    otherlv_9=(Token)match(input,RULE_ID,FOLLOW_15); 

            	    											newLeafNode(otherlv_9, grammarAccess.getBoundedContextAccess().getRealizedBoundedContextsBoundedContextCrossReference_3_1_1_0());
            	    										

            	    }


            	    }

            	    // InternalContextMappingDSL.g:642:9: (otherlv_10= ',' ( (otherlv_11= RULE_ID ) ) )*
            	    loop15:
            	    do {
            	        int alt15=2;
            	        int LA15_0 = input.LA(1);

            	        if ( (LA15_0==24) ) {
            	            alt15=1;
            	        }


            	        switch (alt15) {
            	    	case 1 :
            	    	    // InternalContextMappingDSL.g:643:10: otherlv_10= ',' ( (otherlv_11= RULE_ID ) )
            	    	    {
            	    	    otherlv_10=(Token)match(input,24,FOLLOW_10); 

            	    	    										newLeafNode(otherlv_10, grammarAccess.getBoundedContextAccess().getCommaKeyword_3_1_2_0());
            	    	    									
            	    	    // InternalContextMappingDSL.g:647:10: ( (otherlv_11= RULE_ID ) )
            	    	    // InternalContextMappingDSL.g:648:11: (otherlv_11= RULE_ID )
            	    	    {
            	    	    // InternalContextMappingDSL.g:648:11: (otherlv_11= RULE_ID )
            	    	    // InternalContextMappingDSL.g:649:12: otherlv_11= RULE_ID
            	    	    {

            	    	    												if (current==null) {
            	    	    													current = createModelElement(grammarAccess.getBoundedContextRule());
            	    	    												}
            	    	    											
            	    	    otherlv_11=(Token)match(input,RULE_ID,FOLLOW_15); 

            	    	    												newLeafNode(otherlv_11, grammarAccess.getBoundedContextAccess().getRealizedBoundedContextsBoundedContextCrossReference_3_1_2_1_0());
            	    	    											

            	    	    }


            	    	    }


            	    	    }
            	    	    break;

            	    	default :
            	    	    break loop15;
            	        }
            	    } while (true);


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getBoundedContextAccess().getUnorderedGroup_3());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 3 :
            	    // InternalContextMappingDSL.g:667:4: ({...}? => ( ({...}? => (otherlv_12= 'refines' ( (otherlv_13= RULE_ID ) ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:667:4: ({...}? => ( ({...}? => (otherlv_12= 'refines' ( (otherlv_13= RULE_ID ) ) ) ) ) )
            	    // InternalContextMappingDSL.g:668:5: {...}? => ( ({...}? => (otherlv_12= 'refines' ( (otherlv_13= RULE_ID ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getBoundedContextAccess().getUnorderedGroup_3(), 2) ) {
            	        throw new FailedPredicateException(input, "ruleBoundedContext", "getUnorderedGroupHelper().canSelect(grammarAccess.getBoundedContextAccess().getUnorderedGroup_3(), 2)");
            	    }
            	    // InternalContextMappingDSL.g:668:111: ( ({...}? => (otherlv_12= 'refines' ( (otherlv_13= RULE_ID ) ) ) ) )
            	    // InternalContextMappingDSL.g:669:6: ({...}? => (otherlv_12= 'refines' ( (otherlv_13= RULE_ID ) ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getBoundedContextAccess().getUnorderedGroup_3(), 2);
            	    					
            	    // InternalContextMappingDSL.g:672:9: ({...}? => (otherlv_12= 'refines' ( (otherlv_13= RULE_ID ) ) ) )
            	    // InternalContextMappingDSL.g:672:10: {...}? => (otherlv_12= 'refines' ( (otherlv_13= RULE_ID ) ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleBoundedContext", "true");
            	    }
            	    // InternalContextMappingDSL.g:672:19: (otherlv_12= 'refines' ( (otherlv_13= RULE_ID ) ) )
            	    // InternalContextMappingDSL.g:672:20: otherlv_12= 'refines' ( (otherlv_13= RULE_ID ) )
            	    {
            	    otherlv_12=(Token)match(input,28,FOLLOW_10); 

            	    									newLeafNode(otherlv_12, grammarAccess.getBoundedContextAccess().getRefinesKeyword_3_2_0());
            	    								
            	    // InternalContextMappingDSL.g:676:9: ( (otherlv_13= RULE_ID ) )
            	    // InternalContextMappingDSL.g:677:10: (otherlv_13= RULE_ID )
            	    {
            	    // InternalContextMappingDSL.g:677:10: (otherlv_13= RULE_ID )
            	    // InternalContextMappingDSL.g:678:11: otherlv_13= RULE_ID
            	    {

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getBoundedContextRule());
            	    											}
            	    										
            	    otherlv_13=(Token)match(input,RULE_ID,FOLLOW_14); 

            	    											newLeafNode(otherlv_13, grammarAccess.getBoundedContextAccess().getRefinedBoundedContextBoundedContextCrossReference_3_2_1_0());
            	    										

            	    }


            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getBoundedContextAccess().getUnorderedGroup_3());
            	    					

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop16;
                }
            } while (true);


            }


            }

             
            				  getUnorderedGroupHelper().leave(grammarAccess.getBoundedContextAccess().getUnorderedGroup_3());
            				

            }

            // InternalContextMappingDSL.g:702:3: (this_OPEN_14= RULE_OPEN ( ( ( ( ({...}? => ( ({...}? => (otherlv_16= 'domainVisionStatement' (otherlv_17= '=' )? ( (lv_domainVisionStatement_18_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'type' (otherlv_20= '=' )? ( (lv_type_21_0= ruleBoundedContextType ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_22= 'responsibilities' (otherlv_23= '=' )? ( (lv_responsibilities_24_0= RULE_STRING ) ) ) (otherlv_25= ',' ( (lv_responsibilities_26_0= RULE_STRING ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_27= 'implementationTechnology' (otherlv_28= '=' )? ( (lv_implementationTechnology_29_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_30= 'knowledgeLevel' (otherlv_31= '=' )? ( (lv_knowledgeLevel_32_0= ruleKnowledgeLevel ) ) ) ) ) ) )* ) ) ) ( (lv_modules_33_0= ruleSculptorModule ) )* ( (lv_aggregates_34_0= ruleAggregate ) )* this_CLOSE_35= RULE_CLOSE )?
            int alt26=2;
            int LA26_0 = input.LA(1);

            if ( (LA26_0==RULE_OPEN) ) {
                alt26=1;
            }
            switch (alt26) {
                case 1 :
                    // InternalContextMappingDSL.g:703:4: this_OPEN_14= RULE_OPEN ( ( ( ( ({...}? => ( ({...}? => (otherlv_16= 'domainVisionStatement' (otherlv_17= '=' )? ( (lv_domainVisionStatement_18_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'type' (otherlv_20= '=' )? ( (lv_type_21_0= ruleBoundedContextType ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_22= 'responsibilities' (otherlv_23= '=' )? ( (lv_responsibilities_24_0= RULE_STRING ) ) ) (otherlv_25= ',' ( (lv_responsibilities_26_0= RULE_STRING ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_27= 'implementationTechnology' (otherlv_28= '=' )? ( (lv_implementationTechnology_29_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_30= 'knowledgeLevel' (otherlv_31= '=' )? ( (lv_knowledgeLevel_32_0= ruleKnowledgeLevel ) ) ) ) ) ) )* ) ) ) ( (lv_modules_33_0= ruleSculptorModule ) )* ( (lv_aggregates_34_0= ruleAggregate ) )* this_CLOSE_35= RULE_CLOSE
                    {
                    this_OPEN_14=(Token)match(input,RULE_OPEN,FOLLOW_16); 

                    				newLeafNode(this_OPEN_14, grammarAccess.getBoundedContextAccess().getOPENTerminalRuleCall_4_0());
                    			
                    // InternalContextMappingDSL.g:707:4: ( ( ( ( ({...}? => ( ({...}? => (otherlv_16= 'domainVisionStatement' (otherlv_17= '=' )? ( (lv_domainVisionStatement_18_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'type' (otherlv_20= '=' )? ( (lv_type_21_0= ruleBoundedContextType ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_22= 'responsibilities' (otherlv_23= '=' )? ( (lv_responsibilities_24_0= RULE_STRING ) ) ) (otherlv_25= ',' ( (lv_responsibilities_26_0= RULE_STRING ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_27= 'implementationTechnology' (otherlv_28= '=' )? ( (lv_implementationTechnology_29_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_30= 'knowledgeLevel' (otherlv_31= '=' )? ( (lv_knowledgeLevel_32_0= ruleKnowledgeLevel ) ) ) ) ) ) )* ) ) )
                    // InternalContextMappingDSL.g:708:5: ( ( ( ({...}? => ( ({...}? => (otherlv_16= 'domainVisionStatement' (otherlv_17= '=' )? ( (lv_domainVisionStatement_18_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'type' (otherlv_20= '=' )? ( (lv_type_21_0= ruleBoundedContextType ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_22= 'responsibilities' (otherlv_23= '=' )? ( (lv_responsibilities_24_0= RULE_STRING ) ) ) (otherlv_25= ',' ( (lv_responsibilities_26_0= RULE_STRING ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_27= 'implementationTechnology' (otherlv_28= '=' )? ( (lv_implementationTechnology_29_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_30= 'knowledgeLevel' (otherlv_31= '=' )? ( (lv_knowledgeLevel_32_0= ruleKnowledgeLevel ) ) ) ) ) ) )* ) )
                    {
                    // InternalContextMappingDSL.g:708:5: ( ( ( ({...}? => ( ({...}? => (otherlv_16= 'domainVisionStatement' (otherlv_17= '=' )? ( (lv_domainVisionStatement_18_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'type' (otherlv_20= '=' )? ( (lv_type_21_0= ruleBoundedContextType ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_22= 'responsibilities' (otherlv_23= '=' )? ( (lv_responsibilities_24_0= RULE_STRING ) ) ) (otherlv_25= ',' ( (lv_responsibilities_26_0= RULE_STRING ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_27= 'implementationTechnology' (otherlv_28= '=' )? ( (lv_implementationTechnology_29_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_30= 'knowledgeLevel' (otherlv_31= '=' )? ( (lv_knowledgeLevel_32_0= ruleKnowledgeLevel ) ) ) ) ) ) )* ) )
                    // InternalContextMappingDSL.g:709:6: ( ( ({...}? => ( ({...}? => (otherlv_16= 'domainVisionStatement' (otherlv_17= '=' )? ( (lv_domainVisionStatement_18_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'type' (otherlv_20= '=' )? ( (lv_type_21_0= ruleBoundedContextType ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_22= 'responsibilities' (otherlv_23= '=' )? ( (lv_responsibilities_24_0= RULE_STRING ) ) ) (otherlv_25= ',' ( (lv_responsibilities_26_0= RULE_STRING ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_27= 'implementationTechnology' (otherlv_28= '=' )? ( (lv_implementationTechnology_29_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_30= 'knowledgeLevel' (otherlv_31= '=' )? ( (lv_knowledgeLevel_32_0= ruleKnowledgeLevel ) ) ) ) ) ) )* )
                    {
                     
                    					  getUnorderedGroupHelper().enter(grammarAccess.getBoundedContextAccess().getUnorderedGroup_4_1());
                    					
                    // InternalContextMappingDSL.g:712:6: ( ( ({...}? => ( ({...}? => (otherlv_16= 'domainVisionStatement' (otherlv_17= '=' )? ( (lv_domainVisionStatement_18_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'type' (otherlv_20= '=' )? ( (lv_type_21_0= ruleBoundedContextType ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_22= 'responsibilities' (otherlv_23= '=' )? ( (lv_responsibilities_24_0= RULE_STRING ) ) ) (otherlv_25= ',' ( (lv_responsibilities_26_0= RULE_STRING ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_27= 'implementationTechnology' (otherlv_28= '=' )? ( (lv_implementationTechnology_29_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_30= 'knowledgeLevel' (otherlv_31= '=' )? ( (lv_knowledgeLevel_32_0= ruleKnowledgeLevel ) ) ) ) ) ) )* )
                    // InternalContextMappingDSL.g:713:7: ( ({...}? => ( ({...}? => (otherlv_16= 'domainVisionStatement' (otherlv_17= '=' )? ( (lv_domainVisionStatement_18_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'type' (otherlv_20= '=' )? ( (lv_type_21_0= ruleBoundedContextType ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_22= 'responsibilities' (otherlv_23= '=' )? ( (lv_responsibilities_24_0= RULE_STRING ) ) ) (otherlv_25= ',' ( (lv_responsibilities_26_0= RULE_STRING ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_27= 'implementationTechnology' (otherlv_28= '=' )? ( (lv_implementationTechnology_29_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_30= 'knowledgeLevel' (otherlv_31= '=' )? ( (lv_knowledgeLevel_32_0= ruleKnowledgeLevel ) ) ) ) ) ) )*
                    {
                    // InternalContextMappingDSL.g:713:7: ( ({...}? => ( ({...}? => (otherlv_16= 'domainVisionStatement' (otherlv_17= '=' )? ( (lv_domainVisionStatement_18_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'type' (otherlv_20= '=' )? ( (lv_type_21_0= ruleBoundedContextType ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_22= 'responsibilities' (otherlv_23= '=' )? ( (lv_responsibilities_24_0= RULE_STRING ) ) ) (otherlv_25= ',' ( (lv_responsibilities_26_0= RULE_STRING ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_27= 'implementationTechnology' (otherlv_28= '=' )? ( (lv_implementationTechnology_29_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_30= 'knowledgeLevel' (otherlv_31= '=' )? ( (lv_knowledgeLevel_32_0= ruleKnowledgeLevel ) ) ) ) ) ) )*
                    loop23:
                    do {
                        int alt23=6;
                        int LA23_0 = input.LA(1);

                        if ( LA23_0 == 29 && getUnorderedGroupHelper().canSelect(grammarAccess.getBoundedContextAccess().getUnorderedGroup_4_1(), 0) ) {
                            alt23=1;
                        }
                        else if ( LA23_0 == 20 && getUnorderedGroupHelper().canSelect(grammarAccess.getBoundedContextAccess().getUnorderedGroup_4_1(), 1) ) {
                            alt23=2;
                        }
                        else if ( LA23_0 == 30 && getUnorderedGroupHelper().canSelect(grammarAccess.getBoundedContextAccess().getUnorderedGroup_4_1(), 2) ) {
                            alt23=3;
                        }
                        else if ( LA23_0 == 31 && getUnorderedGroupHelper().canSelect(grammarAccess.getBoundedContextAccess().getUnorderedGroup_4_1(), 3) ) {
                            alt23=4;
                        }
                        else if ( LA23_0 == 32 && getUnorderedGroupHelper().canSelect(grammarAccess.getBoundedContextAccess().getUnorderedGroup_4_1(), 4) ) {
                            alt23=5;
                        }


                        switch (alt23) {
                    	case 1 :
                    	    // InternalContextMappingDSL.g:714:5: ({...}? => ( ({...}? => (otherlv_16= 'domainVisionStatement' (otherlv_17= '=' )? ( (lv_domainVisionStatement_18_0= RULE_STRING ) ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:714:5: ({...}? => ( ({...}? => (otherlv_16= 'domainVisionStatement' (otherlv_17= '=' )? ( (lv_domainVisionStatement_18_0= RULE_STRING ) ) ) ) ) )
                    	    // InternalContextMappingDSL.g:715:6: {...}? => ( ({...}? => (otherlv_16= 'domainVisionStatement' (otherlv_17= '=' )? ( (lv_domainVisionStatement_18_0= RULE_STRING ) ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getBoundedContextAccess().getUnorderedGroup_4_1(), 0) ) {
                    	        throw new FailedPredicateException(input, "ruleBoundedContext", "getUnorderedGroupHelper().canSelect(grammarAccess.getBoundedContextAccess().getUnorderedGroup_4_1(), 0)");
                    	    }
                    	    // InternalContextMappingDSL.g:715:114: ( ({...}? => (otherlv_16= 'domainVisionStatement' (otherlv_17= '=' )? ( (lv_domainVisionStatement_18_0= RULE_STRING ) ) ) ) )
                    	    // InternalContextMappingDSL.g:716:7: ({...}? => (otherlv_16= 'domainVisionStatement' (otherlv_17= '=' )? ( (lv_domainVisionStatement_18_0= RULE_STRING ) ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getBoundedContextAccess().getUnorderedGroup_4_1(), 0);
                    	    						
                    	    // InternalContextMappingDSL.g:719:10: ({...}? => (otherlv_16= 'domainVisionStatement' (otherlv_17= '=' )? ( (lv_domainVisionStatement_18_0= RULE_STRING ) ) ) )
                    	    // InternalContextMappingDSL.g:719:11: {...}? => (otherlv_16= 'domainVisionStatement' (otherlv_17= '=' )? ( (lv_domainVisionStatement_18_0= RULE_STRING ) ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleBoundedContext", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:719:20: (otherlv_16= 'domainVisionStatement' (otherlv_17= '=' )? ( (lv_domainVisionStatement_18_0= RULE_STRING ) ) )
                    	    // InternalContextMappingDSL.g:719:21: otherlv_16= 'domainVisionStatement' (otherlv_17= '=' )? ( (lv_domainVisionStatement_18_0= RULE_STRING ) )
                    	    {
                    	    otherlv_16=(Token)match(input,29,FOLLOW_17); 

                    	    										newLeafNode(otherlv_16, grammarAccess.getBoundedContextAccess().getDomainVisionStatementKeyword_4_1_0_0());
                    	    									
                    	    // InternalContextMappingDSL.g:723:10: (otherlv_17= '=' )?
                    	    int alt17=2;
                    	    int LA17_0 = input.LA(1);

                    	    if ( (LA17_0==21) ) {
                    	        alt17=1;
                    	    }
                    	    switch (alt17) {
                    	        case 1 :
                    	            // InternalContextMappingDSL.g:724:11: otherlv_17= '='
                    	            {
                    	            otherlv_17=(Token)match(input,21,FOLLOW_4); 

                    	            											newLeafNode(otherlv_17, grammarAccess.getBoundedContextAccess().getEqualsSignKeyword_4_1_0_1());
                    	            										

                    	            }
                    	            break;

                    	    }

                    	    // InternalContextMappingDSL.g:729:10: ( (lv_domainVisionStatement_18_0= RULE_STRING ) )
                    	    // InternalContextMappingDSL.g:730:11: (lv_domainVisionStatement_18_0= RULE_STRING )
                    	    {
                    	    // InternalContextMappingDSL.g:730:11: (lv_domainVisionStatement_18_0= RULE_STRING )
                    	    // InternalContextMappingDSL.g:731:12: lv_domainVisionStatement_18_0= RULE_STRING
                    	    {
                    	    lv_domainVisionStatement_18_0=(Token)match(input,RULE_STRING,FOLLOW_16); 

                    	    												newLeafNode(lv_domainVisionStatement_18_0, grammarAccess.getBoundedContextAccess().getDomainVisionStatementSTRINGTerminalRuleCall_4_1_0_2_0());
                    	    											

                    	    												if (current==null) {
                    	    													current = createModelElement(grammarAccess.getBoundedContextRule());
                    	    												}
                    	    												setWithLastConsumed(
                    	    													current,
                    	    													"domainVisionStatement",
                    	    													lv_domainVisionStatement_18_0,
                    	    													"org.eclipse.xtext.common.Terminals.STRING");
                    	    											

                    	    }


                    	    }


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getBoundedContextAccess().getUnorderedGroup_4_1());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 2 :
                    	    // InternalContextMappingDSL.g:753:5: ({...}? => ( ({...}? => (otherlv_19= 'type' (otherlv_20= '=' )? ( (lv_type_21_0= ruleBoundedContextType ) ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:753:5: ({...}? => ( ({...}? => (otherlv_19= 'type' (otherlv_20= '=' )? ( (lv_type_21_0= ruleBoundedContextType ) ) ) ) ) )
                    	    // InternalContextMappingDSL.g:754:6: {...}? => ( ({...}? => (otherlv_19= 'type' (otherlv_20= '=' )? ( (lv_type_21_0= ruleBoundedContextType ) ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getBoundedContextAccess().getUnorderedGroup_4_1(), 1) ) {
                    	        throw new FailedPredicateException(input, "ruleBoundedContext", "getUnorderedGroupHelper().canSelect(grammarAccess.getBoundedContextAccess().getUnorderedGroup_4_1(), 1)");
                    	    }
                    	    // InternalContextMappingDSL.g:754:114: ( ({...}? => (otherlv_19= 'type' (otherlv_20= '=' )? ( (lv_type_21_0= ruleBoundedContextType ) ) ) ) )
                    	    // InternalContextMappingDSL.g:755:7: ({...}? => (otherlv_19= 'type' (otherlv_20= '=' )? ( (lv_type_21_0= ruleBoundedContextType ) ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getBoundedContextAccess().getUnorderedGroup_4_1(), 1);
                    	    						
                    	    // InternalContextMappingDSL.g:758:10: ({...}? => (otherlv_19= 'type' (otherlv_20= '=' )? ( (lv_type_21_0= ruleBoundedContextType ) ) ) )
                    	    // InternalContextMappingDSL.g:758:11: {...}? => (otherlv_19= 'type' (otherlv_20= '=' )? ( (lv_type_21_0= ruleBoundedContextType ) ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleBoundedContext", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:758:20: (otherlv_19= 'type' (otherlv_20= '=' )? ( (lv_type_21_0= ruleBoundedContextType ) ) )
                    	    // InternalContextMappingDSL.g:758:21: otherlv_19= 'type' (otherlv_20= '=' )? ( (lv_type_21_0= ruleBoundedContextType ) )
                    	    {
                    	    otherlv_19=(Token)match(input,20,FOLLOW_18); 

                    	    										newLeafNode(otherlv_19, grammarAccess.getBoundedContextAccess().getTypeKeyword_4_1_1_0());
                    	    									
                    	    // InternalContextMappingDSL.g:762:10: (otherlv_20= '=' )?
                    	    int alt18=2;
                    	    int LA18_0 = input.LA(1);

                    	    if ( (LA18_0==21) ) {
                    	        alt18=1;
                    	    }
                    	    switch (alt18) {
                    	        case 1 :
                    	            // InternalContextMappingDSL.g:763:11: otherlv_20= '='
                    	            {
                    	            otherlv_20=(Token)match(input,21,FOLLOW_18); 

                    	            											newLeafNode(otherlv_20, grammarAccess.getBoundedContextAccess().getEqualsSignKeyword_4_1_1_1());
                    	            										

                    	            }
                    	            break;

                    	    }

                    	    // InternalContextMappingDSL.g:768:10: ( (lv_type_21_0= ruleBoundedContextType ) )
                    	    // InternalContextMappingDSL.g:769:11: (lv_type_21_0= ruleBoundedContextType )
                    	    {
                    	    // InternalContextMappingDSL.g:769:11: (lv_type_21_0= ruleBoundedContextType )
                    	    // InternalContextMappingDSL.g:770:12: lv_type_21_0= ruleBoundedContextType
                    	    {

                    	    												newCompositeNode(grammarAccess.getBoundedContextAccess().getTypeBoundedContextTypeEnumRuleCall_4_1_1_2_0());
                    	    											
                    	    pushFollow(FOLLOW_16);
                    	    lv_type_21_0=ruleBoundedContextType();

                    	    state._fsp--;


                    	    												if (current==null) {
                    	    													current = createModelElementForParent(grammarAccess.getBoundedContextRule());
                    	    												}
                    	    												set(
                    	    													current,
                    	    													"type",
                    	    													lv_type_21_0,
                    	    													"org.contextmapper.dsl.ContextMappingDSL.BoundedContextType");
                    	    												afterParserOrEnumRuleCall();
                    	    											

                    	    }


                    	    }


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getBoundedContextAccess().getUnorderedGroup_4_1());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 3 :
                    	    // InternalContextMappingDSL.g:793:5: ({...}? => ( ({...}? => ( (otherlv_22= 'responsibilities' (otherlv_23= '=' )? ( (lv_responsibilities_24_0= RULE_STRING ) ) ) (otherlv_25= ',' ( (lv_responsibilities_26_0= RULE_STRING ) ) )* ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:793:5: ({...}? => ( ({...}? => ( (otherlv_22= 'responsibilities' (otherlv_23= '=' )? ( (lv_responsibilities_24_0= RULE_STRING ) ) ) (otherlv_25= ',' ( (lv_responsibilities_26_0= RULE_STRING ) ) )* ) ) ) )
                    	    // InternalContextMappingDSL.g:794:6: {...}? => ( ({...}? => ( (otherlv_22= 'responsibilities' (otherlv_23= '=' )? ( (lv_responsibilities_24_0= RULE_STRING ) ) ) (otherlv_25= ',' ( (lv_responsibilities_26_0= RULE_STRING ) ) )* ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getBoundedContextAccess().getUnorderedGroup_4_1(), 2) ) {
                    	        throw new FailedPredicateException(input, "ruleBoundedContext", "getUnorderedGroupHelper().canSelect(grammarAccess.getBoundedContextAccess().getUnorderedGroup_4_1(), 2)");
                    	    }
                    	    // InternalContextMappingDSL.g:794:114: ( ({...}? => ( (otherlv_22= 'responsibilities' (otherlv_23= '=' )? ( (lv_responsibilities_24_0= RULE_STRING ) ) ) (otherlv_25= ',' ( (lv_responsibilities_26_0= RULE_STRING ) ) )* ) ) )
                    	    // InternalContextMappingDSL.g:795:7: ({...}? => ( (otherlv_22= 'responsibilities' (otherlv_23= '=' )? ( (lv_responsibilities_24_0= RULE_STRING ) ) ) (otherlv_25= ',' ( (lv_responsibilities_26_0= RULE_STRING ) ) )* ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getBoundedContextAccess().getUnorderedGroup_4_1(), 2);
                    	    						
                    	    // InternalContextMappingDSL.g:798:10: ({...}? => ( (otherlv_22= 'responsibilities' (otherlv_23= '=' )? ( (lv_responsibilities_24_0= RULE_STRING ) ) ) (otherlv_25= ',' ( (lv_responsibilities_26_0= RULE_STRING ) ) )* ) )
                    	    // InternalContextMappingDSL.g:798:11: {...}? => ( (otherlv_22= 'responsibilities' (otherlv_23= '=' )? ( (lv_responsibilities_24_0= RULE_STRING ) ) ) (otherlv_25= ',' ( (lv_responsibilities_26_0= RULE_STRING ) ) )* )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleBoundedContext", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:798:20: ( (otherlv_22= 'responsibilities' (otherlv_23= '=' )? ( (lv_responsibilities_24_0= RULE_STRING ) ) ) (otherlv_25= ',' ( (lv_responsibilities_26_0= RULE_STRING ) ) )* )
                    	    // InternalContextMappingDSL.g:798:21: (otherlv_22= 'responsibilities' (otherlv_23= '=' )? ( (lv_responsibilities_24_0= RULE_STRING ) ) ) (otherlv_25= ',' ( (lv_responsibilities_26_0= RULE_STRING ) ) )*
                    	    {
                    	    // InternalContextMappingDSL.g:798:21: (otherlv_22= 'responsibilities' (otherlv_23= '=' )? ( (lv_responsibilities_24_0= RULE_STRING ) ) )
                    	    // InternalContextMappingDSL.g:799:11: otherlv_22= 'responsibilities' (otherlv_23= '=' )? ( (lv_responsibilities_24_0= RULE_STRING ) )
                    	    {
                    	    otherlv_22=(Token)match(input,30,FOLLOW_17); 

                    	    											newLeafNode(otherlv_22, grammarAccess.getBoundedContextAccess().getResponsibilitiesKeyword_4_1_2_0_0());
                    	    										
                    	    // InternalContextMappingDSL.g:803:11: (otherlv_23= '=' )?
                    	    int alt19=2;
                    	    int LA19_0 = input.LA(1);

                    	    if ( (LA19_0==21) ) {
                    	        alt19=1;
                    	    }
                    	    switch (alt19) {
                    	        case 1 :
                    	            // InternalContextMappingDSL.g:804:12: otherlv_23= '='
                    	            {
                    	            otherlv_23=(Token)match(input,21,FOLLOW_4); 

                    	            												newLeafNode(otherlv_23, grammarAccess.getBoundedContextAccess().getEqualsSignKeyword_4_1_2_0_1());
                    	            											

                    	            }
                    	            break;

                    	    }

                    	    // InternalContextMappingDSL.g:809:11: ( (lv_responsibilities_24_0= RULE_STRING ) )
                    	    // InternalContextMappingDSL.g:810:12: (lv_responsibilities_24_0= RULE_STRING )
                    	    {
                    	    // InternalContextMappingDSL.g:810:12: (lv_responsibilities_24_0= RULE_STRING )
                    	    // InternalContextMappingDSL.g:811:13: lv_responsibilities_24_0= RULE_STRING
                    	    {
                    	    lv_responsibilities_24_0=(Token)match(input,RULE_STRING,FOLLOW_19); 

                    	    													newLeafNode(lv_responsibilities_24_0, grammarAccess.getBoundedContextAccess().getResponsibilitiesSTRINGTerminalRuleCall_4_1_2_0_2_0());
                    	    												

                    	    													if (current==null) {
                    	    														current = createModelElement(grammarAccess.getBoundedContextRule());
                    	    													}
                    	    													addWithLastConsumed(
                    	    														current,
                    	    														"responsibilities",
                    	    														lv_responsibilities_24_0,
                    	    														"org.eclipse.xtext.common.Terminals.STRING");
                    	    												

                    	    }


                    	    }


                    	    }

                    	    // InternalContextMappingDSL.g:828:10: (otherlv_25= ',' ( (lv_responsibilities_26_0= RULE_STRING ) ) )*
                    	    loop20:
                    	    do {
                    	        int alt20=2;
                    	        int LA20_0 = input.LA(1);

                    	        if ( (LA20_0==24) ) {
                    	            alt20=1;
                    	        }


                    	        switch (alt20) {
                    	    	case 1 :
                    	    	    // InternalContextMappingDSL.g:829:11: otherlv_25= ',' ( (lv_responsibilities_26_0= RULE_STRING ) )
                    	    	    {
                    	    	    otherlv_25=(Token)match(input,24,FOLLOW_4); 

                    	    	    											newLeafNode(otherlv_25, grammarAccess.getBoundedContextAccess().getCommaKeyword_4_1_2_1_0());
                    	    	    										
                    	    	    // InternalContextMappingDSL.g:833:11: ( (lv_responsibilities_26_0= RULE_STRING ) )
                    	    	    // InternalContextMappingDSL.g:834:12: (lv_responsibilities_26_0= RULE_STRING )
                    	    	    {
                    	    	    // InternalContextMappingDSL.g:834:12: (lv_responsibilities_26_0= RULE_STRING )
                    	    	    // InternalContextMappingDSL.g:835:13: lv_responsibilities_26_0= RULE_STRING
                    	    	    {
                    	    	    lv_responsibilities_26_0=(Token)match(input,RULE_STRING,FOLLOW_19); 

                    	    	    													newLeafNode(lv_responsibilities_26_0, grammarAccess.getBoundedContextAccess().getResponsibilitiesSTRINGTerminalRuleCall_4_1_2_1_1_0());
                    	    	    												

                    	    	    													if (current==null) {
                    	    	    														current = createModelElement(grammarAccess.getBoundedContextRule());
                    	    	    													}
                    	    	    													addWithLastConsumed(
                    	    	    														current,
                    	    	    														"responsibilities",
                    	    	    														lv_responsibilities_26_0,
                    	    	    														"org.eclipse.xtext.common.Terminals.STRING");
                    	    	    												

                    	    	    }


                    	    	    }


                    	    	    }
                    	    	    break;

                    	    	default :
                    	    	    break loop20;
                    	        }
                    	    } while (true);


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getBoundedContextAccess().getUnorderedGroup_4_1());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 4 :
                    	    // InternalContextMappingDSL.g:858:5: ({...}? => ( ({...}? => (otherlv_27= 'implementationTechnology' (otherlv_28= '=' )? ( (lv_implementationTechnology_29_0= RULE_STRING ) ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:858:5: ({...}? => ( ({...}? => (otherlv_27= 'implementationTechnology' (otherlv_28= '=' )? ( (lv_implementationTechnology_29_0= RULE_STRING ) ) ) ) ) )
                    	    // InternalContextMappingDSL.g:859:6: {...}? => ( ({...}? => (otherlv_27= 'implementationTechnology' (otherlv_28= '=' )? ( (lv_implementationTechnology_29_0= RULE_STRING ) ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getBoundedContextAccess().getUnorderedGroup_4_1(), 3) ) {
                    	        throw new FailedPredicateException(input, "ruleBoundedContext", "getUnorderedGroupHelper().canSelect(grammarAccess.getBoundedContextAccess().getUnorderedGroup_4_1(), 3)");
                    	    }
                    	    // InternalContextMappingDSL.g:859:114: ( ({...}? => (otherlv_27= 'implementationTechnology' (otherlv_28= '=' )? ( (lv_implementationTechnology_29_0= RULE_STRING ) ) ) ) )
                    	    // InternalContextMappingDSL.g:860:7: ({...}? => (otherlv_27= 'implementationTechnology' (otherlv_28= '=' )? ( (lv_implementationTechnology_29_0= RULE_STRING ) ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getBoundedContextAccess().getUnorderedGroup_4_1(), 3);
                    	    						
                    	    // InternalContextMappingDSL.g:863:10: ({...}? => (otherlv_27= 'implementationTechnology' (otherlv_28= '=' )? ( (lv_implementationTechnology_29_0= RULE_STRING ) ) ) )
                    	    // InternalContextMappingDSL.g:863:11: {...}? => (otherlv_27= 'implementationTechnology' (otherlv_28= '=' )? ( (lv_implementationTechnology_29_0= RULE_STRING ) ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleBoundedContext", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:863:20: (otherlv_27= 'implementationTechnology' (otherlv_28= '=' )? ( (lv_implementationTechnology_29_0= RULE_STRING ) ) )
                    	    // InternalContextMappingDSL.g:863:21: otherlv_27= 'implementationTechnology' (otherlv_28= '=' )? ( (lv_implementationTechnology_29_0= RULE_STRING ) )
                    	    {
                    	    otherlv_27=(Token)match(input,31,FOLLOW_17); 

                    	    										newLeafNode(otherlv_27, grammarAccess.getBoundedContextAccess().getImplementationTechnologyKeyword_4_1_3_0());
                    	    									
                    	    // InternalContextMappingDSL.g:867:10: (otherlv_28= '=' )?
                    	    int alt21=2;
                    	    int LA21_0 = input.LA(1);

                    	    if ( (LA21_0==21) ) {
                    	        alt21=1;
                    	    }
                    	    switch (alt21) {
                    	        case 1 :
                    	            // InternalContextMappingDSL.g:868:11: otherlv_28= '='
                    	            {
                    	            otherlv_28=(Token)match(input,21,FOLLOW_4); 

                    	            											newLeafNode(otherlv_28, grammarAccess.getBoundedContextAccess().getEqualsSignKeyword_4_1_3_1());
                    	            										

                    	            }
                    	            break;

                    	    }

                    	    // InternalContextMappingDSL.g:873:10: ( (lv_implementationTechnology_29_0= RULE_STRING ) )
                    	    // InternalContextMappingDSL.g:874:11: (lv_implementationTechnology_29_0= RULE_STRING )
                    	    {
                    	    // InternalContextMappingDSL.g:874:11: (lv_implementationTechnology_29_0= RULE_STRING )
                    	    // InternalContextMappingDSL.g:875:12: lv_implementationTechnology_29_0= RULE_STRING
                    	    {
                    	    lv_implementationTechnology_29_0=(Token)match(input,RULE_STRING,FOLLOW_16); 

                    	    												newLeafNode(lv_implementationTechnology_29_0, grammarAccess.getBoundedContextAccess().getImplementationTechnologySTRINGTerminalRuleCall_4_1_3_2_0());
                    	    											

                    	    												if (current==null) {
                    	    													current = createModelElement(grammarAccess.getBoundedContextRule());
                    	    												}
                    	    												setWithLastConsumed(
                    	    													current,
                    	    													"implementationTechnology",
                    	    													lv_implementationTechnology_29_0,
                    	    													"org.eclipse.xtext.common.Terminals.STRING");
                    	    											

                    	    }


                    	    }


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getBoundedContextAccess().getUnorderedGroup_4_1());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 5 :
                    	    // InternalContextMappingDSL.g:897:5: ({...}? => ( ({...}? => (otherlv_30= 'knowledgeLevel' (otherlv_31= '=' )? ( (lv_knowledgeLevel_32_0= ruleKnowledgeLevel ) ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:897:5: ({...}? => ( ({...}? => (otherlv_30= 'knowledgeLevel' (otherlv_31= '=' )? ( (lv_knowledgeLevel_32_0= ruleKnowledgeLevel ) ) ) ) ) )
                    	    // InternalContextMappingDSL.g:898:6: {...}? => ( ({...}? => (otherlv_30= 'knowledgeLevel' (otherlv_31= '=' )? ( (lv_knowledgeLevel_32_0= ruleKnowledgeLevel ) ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getBoundedContextAccess().getUnorderedGroup_4_1(), 4) ) {
                    	        throw new FailedPredicateException(input, "ruleBoundedContext", "getUnorderedGroupHelper().canSelect(grammarAccess.getBoundedContextAccess().getUnorderedGroup_4_1(), 4)");
                    	    }
                    	    // InternalContextMappingDSL.g:898:114: ( ({...}? => (otherlv_30= 'knowledgeLevel' (otherlv_31= '=' )? ( (lv_knowledgeLevel_32_0= ruleKnowledgeLevel ) ) ) ) )
                    	    // InternalContextMappingDSL.g:899:7: ({...}? => (otherlv_30= 'knowledgeLevel' (otherlv_31= '=' )? ( (lv_knowledgeLevel_32_0= ruleKnowledgeLevel ) ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getBoundedContextAccess().getUnorderedGroup_4_1(), 4);
                    	    						
                    	    // InternalContextMappingDSL.g:902:10: ({...}? => (otherlv_30= 'knowledgeLevel' (otherlv_31= '=' )? ( (lv_knowledgeLevel_32_0= ruleKnowledgeLevel ) ) ) )
                    	    // InternalContextMappingDSL.g:902:11: {...}? => (otherlv_30= 'knowledgeLevel' (otherlv_31= '=' )? ( (lv_knowledgeLevel_32_0= ruleKnowledgeLevel ) ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleBoundedContext", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:902:20: (otherlv_30= 'knowledgeLevel' (otherlv_31= '=' )? ( (lv_knowledgeLevel_32_0= ruleKnowledgeLevel ) ) )
                    	    // InternalContextMappingDSL.g:902:21: otherlv_30= 'knowledgeLevel' (otherlv_31= '=' )? ( (lv_knowledgeLevel_32_0= ruleKnowledgeLevel ) )
                    	    {
                    	    otherlv_30=(Token)match(input,32,FOLLOW_20); 

                    	    										newLeafNode(otherlv_30, grammarAccess.getBoundedContextAccess().getKnowledgeLevelKeyword_4_1_4_0());
                    	    									
                    	    // InternalContextMappingDSL.g:906:10: (otherlv_31= '=' )?
                    	    int alt22=2;
                    	    int LA22_0 = input.LA(1);

                    	    if ( (LA22_0==21) ) {
                    	        alt22=1;
                    	    }
                    	    switch (alt22) {
                    	        case 1 :
                    	            // InternalContextMappingDSL.g:907:11: otherlv_31= '='
                    	            {
                    	            otherlv_31=(Token)match(input,21,FOLLOW_20); 

                    	            											newLeafNode(otherlv_31, grammarAccess.getBoundedContextAccess().getEqualsSignKeyword_4_1_4_1());
                    	            										

                    	            }
                    	            break;

                    	    }

                    	    // InternalContextMappingDSL.g:912:10: ( (lv_knowledgeLevel_32_0= ruleKnowledgeLevel ) )
                    	    // InternalContextMappingDSL.g:913:11: (lv_knowledgeLevel_32_0= ruleKnowledgeLevel )
                    	    {
                    	    // InternalContextMappingDSL.g:913:11: (lv_knowledgeLevel_32_0= ruleKnowledgeLevel )
                    	    // InternalContextMappingDSL.g:914:12: lv_knowledgeLevel_32_0= ruleKnowledgeLevel
                    	    {

                    	    												newCompositeNode(grammarAccess.getBoundedContextAccess().getKnowledgeLevelKnowledgeLevelEnumRuleCall_4_1_4_2_0());
                    	    											
                    	    pushFollow(FOLLOW_16);
                    	    lv_knowledgeLevel_32_0=ruleKnowledgeLevel();

                    	    state._fsp--;


                    	    												if (current==null) {
                    	    													current = createModelElementForParent(grammarAccess.getBoundedContextRule());
                    	    												}
                    	    												set(
                    	    													current,
                    	    													"knowledgeLevel",
                    	    													lv_knowledgeLevel_32_0,
                    	    													"org.contextmapper.dsl.ContextMappingDSL.KnowledgeLevel");
                    	    												afterParserOrEnumRuleCall();
                    	    											

                    	    }


                    	    }


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getBoundedContextAccess().getUnorderedGroup_4_1());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop23;
                        }
                    } while (true);


                    }


                    }

                     
                    					  getUnorderedGroupHelper().leave(grammarAccess.getBoundedContextAccess().getUnorderedGroup_4_1());
                    					

                    }

                    // InternalContextMappingDSL.g:944:4: ( (lv_modules_33_0= ruleSculptorModule ) )*
                    loop24:
                    do {
                        int alt24=2;
                        int LA24_0 = input.LA(1);

                        if ( (LA24_0==RULE_STRING) ) {
                            int LA24_2 = input.LA(2);

                            if ( (LA24_2==64) ) {
                                alt24=1;
                            }


                        }
                        else if ( (LA24_0==64) ) {
                            alt24=1;
                        }


                        switch (alt24) {
                    	case 1 :
                    	    // InternalContextMappingDSL.g:945:5: (lv_modules_33_0= ruleSculptorModule )
                    	    {
                    	    // InternalContextMappingDSL.g:945:5: (lv_modules_33_0= ruleSculptorModule )
                    	    // InternalContextMappingDSL.g:946:6: lv_modules_33_0= ruleSculptorModule
                    	    {

                    	    						newCompositeNode(grammarAccess.getBoundedContextAccess().getModulesSculptorModuleParserRuleCall_4_2_0());
                    	    					
                    	    pushFollow(FOLLOW_21);
                    	    lv_modules_33_0=ruleSculptorModule();

                    	    state._fsp--;


                    	    						if (current==null) {
                    	    							current = createModelElementForParent(grammarAccess.getBoundedContextRule());
                    	    						}
                    	    						add(
                    	    							current,
                    	    							"modules",
                    	    							lv_modules_33_0,
                    	    							"org.contextmapper.dsl.ContextMappingDSL.SculptorModule");
                    	    						afterParserOrEnumRuleCall();
                    	    					

                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop24;
                        }
                    } while (true);

                    // InternalContextMappingDSL.g:963:4: ( (lv_aggregates_34_0= ruleAggregate ) )*
                    loop25:
                    do {
                        int alt25=2;
                        int LA25_0 = input.LA(1);

                        if ( ((LA25_0>=RULE_SL_COMMENT && LA25_0<=RULE_STRING)||LA25_0==55) ) {
                            alt25=1;
                        }


                        switch (alt25) {
                    	case 1 :
                    	    // InternalContextMappingDSL.g:964:5: (lv_aggregates_34_0= ruleAggregate )
                    	    {
                    	    // InternalContextMappingDSL.g:964:5: (lv_aggregates_34_0= ruleAggregate )
                    	    // InternalContextMappingDSL.g:965:6: lv_aggregates_34_0= ruleAggregate
                    	    {

                    	    						newCompositeNode(grammarAccess.getBoundedContextAccess().getAggregatesAggregateParserRuleCall_4_3_0());
                    	    					
                    	    pushFollow(FOLLOW_22);
                    	    lv_aggregates_34_0=ruleAggregate();

                    	    state._fsp--;


                    	    						if (current==null) {
                    	    							current = createModelElementForParent(grammarAccess.getBoundedContextRule());
                    	    						}
                    	    						add(
                    	    							current,
                    	    							"aggregates",
                    	    							lv_aggregates_34_0,
                    	    							"org.contextmapper.dsl.ContextMappingDSL.Aggregate");
                    	    						afterParserOrEnumRuleCall();
                    	    					

                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop25;
                        }
                    } while (true);

                    this_CLOSE_35=(Token)match(input,RULE_CLOSE,FOLLOW_2); 

                    				newLeafNode(this_CLOSE_35, grammarAccess.getBoundedContextAccess().getCLOSETerminalRuleCall_4_4());
                    			

                    }
                    break;

            }


            }


            }


            	leaveRule();

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleBoundedContext"


    // $ANTLR start "entryRuleDomain"
    // InternalContextMappingDSL.g:991:1: entryRuleDomain returns [EObject current=null] : iv_ruleDomain= ruleDomain EOF ;
    public final EObject entryRuleDomain() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleDomain = null;


        try {
            // InternalContextMappingDSL.g:991:47: (iv_ruleDomain= ruleDomain EOF )
            // InternalContextMappingDSL.g:992:2: iv_ruleDomain= ruleDomain EOF
            {
             newCompositeNode(grammarAccess.getDomainRule()); 
            pushFollow(FOLLOW_1);
            iv_ruleDomain=ruleDomain();

            state._fsp--;

             current =iv_ruleDomain; 
            match(input,EOF,FOLLOW_2); 

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleDomain"


    // $ANTLR start "ruleDomain"
    // InternalContextMappingDSL.g:998:1: ruleDomain returns [EObject current=null] : (otherlv_0= 'Domain' ( (lv_name_1_0= RULE_ID ) ) (this_OPEN_2= RULE_OPEN ( ( ( ( ({...}? => ( ({...}? => (otherlv_4= 'domainVisionStatement' (otherlv_5= '=' )? ( (lv_domainVisionStatement_6_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_subdomains_7_0= ruleSubdomain ) ) )+ ) ) )* ) ) ) this_CLOSE_8= RULE_CLOSE )? ) ;
    public final EObject ruleDomain() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_name_1_0=null;
        Token this_OPEN_2=null;
        Token otherlv_4=null;
        Token otherlv_5=null;
        Token lv_domainVisionStatement_6_0=null;
        Token this_CLOSE_8=null;
        EObject lv_subdomains_7_0 = null;



        	enterRule();

        try {
            // InternalContextMappingDSL.g:1004:2: ( (otherlv_0= 'Domain' ( (lv_name_1_0= RULE_ID ) ) (this_OPEN_2= RULE_OPEN ( ( ( ( ({...}? => ( ({...}? => (otherlv_4= 'domainVisionStatement' (otherlv_5= '=' )? ( (lv_domainVisionStatement_6_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_subdomains_7_0= ruleSubdomain ) ) )+ ) ) )* ) ) ) this_CLOSE_8= RULE_CLOSE )? ) )
            // InternalContextMappingDSL.g:1005:2: (otherlv_0= 'Domain' ( (lv_name_1_0= RULE_ID ) ) (this_OPEN_2= RULE_OPEN ( ( ( ( ({...}? => ( ({...}? => (otherlv_4= 'domainVisionStatement' (otherlv_5= '=' )? ( (lv_domainVisionStatement_6_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_subdomains_7_0= ruleSubdomain ) ) )+ ) ) )* ) ) ) this_CLOSE_8= RULE_CLOSE )? )
            {
            // InternalContextMappingDSL.g:1005:2: (otherlv_0= 'Domain' ( (lv_name_1_0= RULE_ID ) ) (this_OPEN_2= RULE_OPEN ( ( ( ( ({...}? => ( ({...}? => (otherlv_4= 'domainVisionStatement' (otherlv_5= '=' )? ( (lv_domainVisionStatement_6_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_subdomains_7_0= ruleSubdomain ) ) )+ ) ) )* ) ) ) this_CLOSE_8= RULE_CLOSE )? )
            // InternalContextMappingDSL.g:1006:3: otherlv_0= 'Domain' ( (lv_name_1_0= RULE_ID ) ) (this_OPEN_2= RULE_OPEN ( ( ( ( ({...}? => ( ({...}? => (otherlv_4= 'domainVisionStatement' (otherlv_5= '=' )? ( (lv_domainVisionStatement_6_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_subdomains_7_0= ruleSubdomain ) ) )+ ) ) )* ) ) ) this_CLOSE_8= RULE_CLOSE )?
            {
            otherlv_0=(Token)match(input,33,FOLLOW_10); 

            			newLeafNode(otherlv_0, grammarAccess.getDomainAccess().getDomainKeyword_0());
            		
            // InternalContextMappingDSL.g:1010:3: ( (lv_name_1_0= RULE_ID ) )
            // InternalContextMappingDSL.g:1011:4: (lv_name_1_0= RULE_ID )
            {
            // InternalContextMappingDSL.g:1011:4: (lv_name_1_0= RULE_ID )
            // InternalContextMappingDSL.g:1012:5: lv_name_1_0= RULE_ID
            {
            lv_name_1_0=(Token)match(input,RULE_ID,FOLLOW_23); 

            					newLeafNode(lv_name_1_0, grammarAccess.getDomainAccess().getNameIDTerminalRuleCall_1_0());
            				

            					if (current==null) {
            						current = createModelElement(grammarAccess.getDomainRule());
            					}
            					setWithLastConsumed(
            						current,
            						"name",
            						lv_name_1_0,
            						"org.eclipse.xtext.common.Terminals.ID");
            				

            }


            }

            // InternalContextMappingDSL.g:1028:3: (this_OPEN_2= RULE_OPEN ( ( ( ( ({...}? => ( ({...}? => (otherlv_4= 'domainVisionStatement' (otherlv_5= '=' )? ( (lv_domainVisionStatement_6_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_subdomains_7_0= ruleSubdomain ) ) )+ ) ) )* ) ) ) this_CLOSE_8= RULE_CLOSE )?
            int alt30=2;
            int LA30_0 = input.LA(1);

            if ( (LA30_0==RULE_OPEN) ) {
                alt30=1;
            }
            switch (alt30) {
                case 1 :
                    // InternalContextMappingDSL.g:1029:4: this_OPEN_2= RULE_OPEN ( ( ( ( ({...}? => ( ({...}? => (otherlv_4= 'domainVisionStatement' (otherlv_5= '=' )? ( (lv_domainVisionStatement_6_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_subdomains_7_0= ruleSubdomain ) ) )+ ) ) )* ) ) ) this_CLOSE_8= RULE_CLOSE
                    {
                    this_OPEN_2=(Token)match(input,RULE_OPEN,FOLLOW_24); 

                    				newLeafNode(this_OPEN_2, grammarAccess.getDomainAccess().getOPENTerminalRuleCall_2_0());
                    			
                    // InternalContextMappingDSL.g:1033:4: ( ( ( ( ({...}? => ( ({...}? => (otherlv_4= 'domainVisionStatement' (otherlv_5= '=' )? ( (lv_domainVisionStatement_6_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_subdomains_7_0= ruleSubdomain ) ) )+ ) ) )* ) ) )
                    // InternalContextMappingDSL.g:1034:5: ( ( ( ({...}? => ( ({...}? => (otherlv_4= 'domainVisionStatement' (otherlv_5= '=' )? ( (lv_domainVisionStatement_6_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_subdomains_7_0= ruleSubdomain ) ) )+ ) ) )* ) )
                    {
                    // InternalContextMappingDSL.g:1034:5: ( ( ( ({...}? => ( ({...}? => (otherlv_4= 'domainVisionStatement' (otherlv_5= '=' )? ( (lv_domainVisionStatement_6_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_subdomains_7_0= ruleSubdomain ) ) )+ ) ) )* ) )
                    // InternalContextMappingDSL.g:1035:6: ( ( ({...}? => ( ({...}? => (otherlv_4= 'domainVisionStatement' (otherlv_5= '=' )? ( (lv_domainVisionStatement_6_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_subdomains_7_0= ruleSubdomain ) ) )+ ) ) )* )
                    {
                     
                    					  getUnorderedGroupHelper().enter(grammarAccess.getDomainAccess().getUnorderedGroup_2_1());
                    					
                    // InternalContextMappingDSL.g:1038:6: ( ( ({...}? => ( ({...}? => (otherlv_4= 'domainVisionStatement' (otherlv_5= '=' )? ( (lv_domainVisionStatement_6_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_subdomains_7_0= ruleSubdomain ) ) )+ ) ) )* )
                    // InternalContextMappingDSL.g:1039:7: ( ({...}? => ( ({...}? => (otherlv_4= 'domainVisionStatement' (otherlv_5= '=' )? ( (lv_domainVisionStatement_6_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_subdomains_7_0= ruleSubdomain ) ) )+ ) ) )*
                    {
                    // InternalContextMappingDSL.g:1039:7: ( ({...}? => ( ({...}? => (otherlv_4= 'domainVisionStatement' (otherlv_5= '=' )? ( (lv_domainVisionStatement_6_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_subdomains_7_0= ruleSubdomain ) ) )+ ) ) )*
                    loop29:
                    do {
                        int alt29=3;
                        int LA29_0 = input.LA(1);

                        if ( LA29_0 == 29 && getUnorderedGroupHelper().canSelect(grammarAccess.getDomainAccess().getUnorderedGroup_2_1(), 0) ) {
                            alt29=1;
                        }
                        else if ( LA29_0 == 34 && getUnorderedGroupHelper().canSelect(grammarAccess.getDomainAccess().getUnorderedGroup_2_1(), 1) ) {
                            alt29=2;
                        }


                        switch (alt29) {
                    	case 1 :
                    	    // InternalContextMappingDSL.g:1040:5: ({...}? => ( ({...}? => (otherlv_4= 'domainVisionStatement' (otherlv_5= '=' )? ( (lv_domainVisionStatement_6_0= RULE_STRING ) ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:1040:5: ({...}? => ( ({...}? => (otherlv_4= 'domainVisionStatement' (otherlv_5= '=' )? ( (lv_domainVisionStatement_6_0= RULE_STRING ) ) ) ) ) )
                    	    // InternalContextMappingDSL.g:1041:6: {...}? => ( ({...}? => (otherlv_4= 'domainVisionStatement' (otherlv_5= '=' )? ( (lv_domainVisionStatement_6_0= RULE_STRING ) ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDomainAccess().getUnorderedGroup_2_1(), 0) ) {
                    	        throw new FailedPredicateException(input, "ruleDomain", "getUnorderedGroupHelper().canSelect(grammarAccess.getDomainAccess().getUnorderedGroup_2_1(), 0)");
                    	    }
                    	    // InternalContextMappingDSL.g:1041:106: ( ({...}? => (otherlv_4= 'domainVisionStatement' (otherlv_5= '=' )? ( (lv_domainVisionStatement_6_0= RULE_STRING ) ) ) ) )
                    	    // InternalContextMappingDSL.g:1042:7: ({...}? => (otherlv_4= 'domainVisionStatement' (otherlv_5= '=' )? ( (lv_domainVisionStatement_6_0= RULE_STRING ) ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getDomainAccess().getUnorderedGroup_2_1(), 0);
                    	    						
                    	    // InternalContextMappingDSL.g:1045:10: ({...}? => (otherlv_4= 'domainVisionStatement' (otherlv_5= '=' )? ( (lv_domainVisionStatement_6_0= RULE_STRING ) ) ) )
                    	    // InternalContextMappingDSL.g:1045:11: {...}? => (otherlv_4= 'domainVisionStatement' (otherlv_5= '=' )? ( (lv_domainVisionStatement_6_0= RULE_STRING ) ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleDomain", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:1045:20: (otherlv_4= 'domainVisionStatement' (otherlv_5= '=' )? ( (lv_domainVisionStatement_6_0= RULE_STRING ) ) )
                    	    // InternalContextMappingDSL.g:1045:21: otherlv_4= 'domainVisionStatement' (otherlv_5= '=' )? ( (lv_domainVisionStatement_6_0= RULE_STRING ) )
                    	    {
                    	    otherlv_4=(Token)match(input,29,FOLLOW_17); 

                    	    										newLeafNode(otherlv_4, grammarAccess.getDomainAccess().getDomainVisionStatementKeyword_2_1_0_0());
                    	    									
                    	    // InternalContextMappingDSL.g:1049:10: (otherlv_5= '=' )?
                    	    int alt27=2;
                    	    int LA27_0 = input.LA(1);

                    	    if ( (LA27_0==21) ) {
                    	        alt27=1;
                    	    }
                    	    switch (alt27) {
                    	        case 1 :
                    	            // InternalContextMappingDSL.g:1050:11: otherlv_5= '='
                    	            {
                    	            otherlv_5=(Token)match(input,21,FOLLOW_4); 

                    	            											newLeafNode(otherlv_5, grammarAccess.getDomainAccess().getEqualsSignKeyword_2_1_0_1());
                    	            										

                    	            }
                    	            break;

                    	    }

                    	    // InternalContextMappingDSL.g:1055:10: ( (lv_domainVisionStatement_6_0= RULE_STRING ) )
                    	    // InternalContextMappingDSL.g:1056:11: (lv_domainVisionStatement_6_0= RULE_STRING )
                    	    {
                    	    // InternalContextMappingDSL.g:1056:11: (lv_domainVisionStatement_6_0= RULE_STRING )
                    	    // InternalContextMappingDSL.g:1057:12: lv_domainVisionStatement_6_0= RULE_STRING
                    	    {
                    	    lv_domainVisionStatement_6_0=(Token)match(input,RULE_STRING,FOLLOW_24); 

                    	    												newLeafNode(lv_domainVisionStatement_6_0, grammarAccess.getDomainAccess().getDomainVisionStatementSTRINGTerminalRuleCall_2_1_0_2_0());
                    	    											

                    	    												if (current==null) {
                    	    													current = createModelElement(grammarAccess.getDomainRule());
                    	    												}
                    	    												setWithLastConsumed(
                    	    													current,
                    	    													"domainVisionStatement",
                    	    													lv_domainVisionStatement_6_0,
                    	    													"org.eclipse.xtext.common.Terminals.STRING");
                    	    											

                    	    }


                    	    }


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDomainAccess().getUnorderedGroup_2_1());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 2 :
                    	    // InternalContextMappingDSL.g:1079:5: ({...}? => ( ({...}? => ( (lv_subdomains_7_0= ruleSubdomain ) ) )+ ) )
                    	    {
                    	    // InternalContextMappingDSL.g:1079:5: ({...}? => ( ({...}? => ( (lv_subdomains_7_0= ruleSubdomain ) ) )+ ) )
                    	    // InternalContextMappingDSL.g:1080:6: {...}? => ( ({...}? => ( (lv_subdomains_7_0= ruleSubdomain ) ) )+ )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDomainAccess().getUnorderedGroup_2_1(), 1) ) {
                    	        throw new FailedPredicateException(input, "ruleDomain", "getUnorderedGroupHelper().canSelect(grammarAccess.getDomainAccess().getUnorderedGroup_2_1(), 1)");
                    	    }
                    	    // InternalContextMappingDSL.g:1080:106: ( ({...}? => ( (lv_subdomains_7_0= ruleSubdomain ) ) )+ )
                    	    // InternalContextMappingDSL.g:1081:7: ({...}? => ( (lv_subdomains_7_0= ruleSubdomain ) ) )+
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getDomainAccess().getUnorderedGroup_2_1(), 1);
                    	    						
                    	    // InternalContextMappingDSL.g:1084:10: ({...}? => ( (lv_subdomains_7_0= ruleSubdomain ) ) )+
                    	    int cnt28=0;
                    	    loop28:
                    	    do {
                    	        int alt28=2;
                    	        int LA28_0 = input.LA(1);

                    	        if ( (LA28_0==34) ) {
                    	            int LA28_2 = input.LA(2);

                    	            if ( ((true)) ) {
                    	                alt28=1;
                    	            }


                    	        }


                    	        switch (alt28) {
                    	    	case 1 :
                    	    	    // InternalContextMappingDSL.g:1084:11: {...}? => ( (lv_subdomains_7_0= ruleSubdomain ) )
                    	    	    {
                    	    	    if ( !((true)) ) {
                    	    	        throw new FailedPredicateException(input, "ruleDomain", "true");
                    	    	    }
                    	    	    // InternalContextMappingDSL.g:1084:20: ( (lv_subdomains_7_0= ruleSubdomain ) )
                    	    	    // InternalContextMappingDSL.g:1084:21: (lv_subdomains_7_0= ruleSubdomain )
                    	    	    {
                    	    	    // InternalContextMappingDSL.g:1084:21: (lv_subdomains_7_0= ruleSubdomain )
                    	    	    // InternalContextMappingDSL.g:1085:11: lv_subdomains_7_0= ruleSubdomain
                    	    	    {

                    	    	    											newCompositeNode(grammarAccess.getDomainAccess().getSubdomainsSubdomainParserRuleCall_2_1_1_0());
                    	    	    										
                    	    	    pushFollow(FOLLOW_24);
                    	    	    lv_subdomains_7_0=ruleSubdomain();

                    	    	    state._fsp--;


                    	    	    											if (current==null) {
                    	    	    												current = createModelElementForParent(grammarAccess.getDomainRule());
                    	    	    											}
                    	    	    											add(
                    	    	    												current,
                    	    	    												"subdomains",
                    	    	    												lv_subdomains_7_0,
                    	    	    												"org.contextmapper.dsl.ContextMappingDSL.Subdomain");
                    	    	    											afterParserOrEnumRuleCall();
                    	    	    										

                    	    	    }


                    	    	    }


                    	    	    }
                    	    	    break;

                    	    	default :
                    	    	    if ( cnt28 >= 1 ) break loop28;
                    	                EarlyExitException eee =
                    	                    new EarlyExitException(28, input);
                    	                throw eee;
                    	        }
                    	        cnt28++;
                    	    } while (true);

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDomainAccess().getUnorderedGroup_2_1());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop29;
                        }
                    } while (true);


                    }


                    }

                     
                    					  getUnorderedGroupHelper().leave(grammarAccess.getDomainAccess().getUnorderedGroup_2_1());
                    					

                    }

                    this_CLOSE_8=(Token)match(input,RULE_CLOSE,FOLLOW_2); 

                    				newLeafNode(this_CLOSE_8, grammarAccess.getDomainAccess().getCLOSETerminalRuleCall_2_2());
                    			

                    }
                    break;

            }


            }


            }


            	leaveRule();

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleDomain"


    // $ANTLR start "entryRuleSubdomain"
    // InternalContextMappingDSL.g:1123:1: entryRuleSubdomain returns [EObject current=null] : iv_ruleSubdomain= ruleSubdomain EOF ;
    public final EObject entryRuleSubdomain() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleSubdomain = null;


        try {
            // InternalContextMappingDSL.g:1123:50: (iv_ruleSubdomain= ruleSubdomain EOF )
            // InternalContextMappingDSL.g:1124:2: iv_ruleSubdomain= ruleSubdomain EOF
            {
             newCompositeNode(grammarAccess.getSubdomainRule()); 
            pushFollow(FOLLOW_1);
            iv_ruleSubdomain=ruleSubdomain();

            state._fsp--;

             current =iv_ruleSubdomain; 
            match(input,EOF,FOLLOW_2); 

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleSubdomain"


    // $ANTLR start "ruleSubdomain"
    // InternalContextMappingDSL.g:1130:1: ruleSubdomain returns [EObject current=null] : (otherlv_0= 'Subdomain' ( (lv_name_1_0= RULE_ID ) ) (this_OPEN_2= RULE_OPEN ( ( ( ( ({...}? => ( ({...}? => (otherlv_4= 'type' (otherlv_5= '=' )? ( (lv_type_6_0= ruleSubDomainType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_7= 'domainVisionStatement' (otherlv_8= '=' )? ( (lv_domainVisionStatement_9_0= RULE_STRING ) ) ) ) ) ) )* ) ) ) ( (lv_entities_10_0= ruleEntity ) )* this_CLOSE_11= RULE_CLOSE )? ) ;
    public final EObject ruleSubdomain() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_name_1_0=null;
        Token this_OPEN_2=null;
        Token otherlv_4=null;
        Token otherlv_5=null;
        Token otherlv_7=null;
        Token otherlv_8=null;
        Token lv_domainVisionStatement_9_0=null;
        Token this_CLOSE_11=null;
        Enumerator lv_type_6_0 = null;

        EObject lv_entities_10_0 = null;



        	enterRule();

        try {
            // InternalContextMappingDSL.g:1136:2: ( (otherlv_0= 'Subdomain' ( (lv_name_1_0= RULE_ID ) ) (this_OPEN_2= RULE_OPEN ( ( ( ( ({...}? => ( ({...}? => (otherlv_4= 'type' (otherlv_5= '=' )? ( (lv_type_6_0= ruleSubDomainType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_7= 'domainVisionStatement' (otherlv_8= '=' )? ( (lv_domainVisionStatement_9_0= RULE_STRING ) ) ) ) ) ) )* ) ) ) ( (lv_entities_10_0= ruleEntity ) )* this_CLOSE_11= RULE_CLOSE )? ) )
            // InternalContextMappingDSL.g:1137:2: (otherlv_0= 'Subdomain' ( (lv_name_1_0= RULE_ID ) ) (this_OPEN_2= RULE_OPEN ( ( ( ( ({...}? => ( ({...}? => (otherlv_4= 'type' (otherlv_5= '=' )? ( (lv_type_6_0= ruleSubDomainType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_7= 'domainVisionStatement' (otherlv_8= '=' )? ( (lv_domainVisionStatement_9_0= RULE_STRING ) ) ) ) ) ) )* ) ) ) ( (lv_entities_10_0= ruleEntity ) )* this_CLOSE_11= RULE_CLOSE )? )
            {
            // InternalContextMappingDSL.g:1137:2: (otherlv_0= 'Subdomain' ( (lv_name_1_0= RULE_ID ) ) (this_OPEN_2= RULE_OPEN ( ( ( ( ({...}? => ( ({...}? => (otherlv_4= 'type' (otherlv_5= '=' )? ( (lv_type_6_0= ruleSubDomainType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_7= 'domainVisionStatement' (otherlv_8= '=' )? ( (lv_domainVisionStatement_9_0= RULE_STRING ) ) ) ) ) ) )* ) ) ) ( (lv_entities_10_0= ruleEntity ) )* this_CLOSE_11= RULE_CLOSE )? )
            // InternalContextMappingDSL.g:1138:3: otherlv_0= 'Subdomain' ( (lv_name_1_0= RULE_ID ) ) (this_OPEN_2= RULE_OPEN ( ( ( ( ({...}? => ( ({...}? => (otherlv_4= 'type' (otherlv_5= '=' )? ( (lv_type_6_0= ruleSubDomainType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_7= 'domainVisionStatement' (otherlv_8= '=' )? ( (lv_domainVisionStatement_9_0= RULE_STRING ) ) ) ) ) ) )* ) ) ) ( (lv_entities_10_0= ruleEntity ) )* this_CLOSE_11= RULE_CLOSE )?
            {
            otherlv_0=(Token)match(input,34,FOLLOW_10); 

            			newLeafNode(otherlv_0, grammarAccess.getSubdomainAccess().getSubdomainKeyword_0());
            		
            // InternalContextMappingDSL.g:1142:3: ( (lv_name_1_0= RULE_ID ) )
            // InternalContextMappingDSL.g:1143:4: (lv_name_1_0= RULE_ID )
            {
            // InternalContextMappingDSL.g:1143:4: (lv_name_1_0= RULE_ID )
            // InternalContextMappingDSL.g:1144:5: lv_name_1_0= RULE_ID
            {
            lv_name_1_0=(Token)match(input,RULE_ID,FOLLOW_23); 

            					newLeafNode(lv_name_1_0, grammarAccess.getSubdomainAccess().getNameIDTerminalRuleCall_1_0());
            				

            					if (current==null) {
            						current = createModelElement(grammarAccess.getSubdomainRule());
            					}
            					setWithLastConsumed(
            						current,
            						"name",
            						lv_name_1_0,
            						"org.eclipse.xtext.common.Terminals.ID");
            				

            }


            }

            // InternalContextMappingDSL.g:1160:3: (this_OPEN_2= RULE_OPEN ( ( ( ( ({...}? => ( ({...}? => (otherlv_4= 'type' (otherlv_5= '=' )? ( (lv_type_6_0= ruleSubDomainType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_7= 'domainVisionStatement' (otherlv_8= '=' )? ( (lv_domainVisionStatement_9_0= RULE_STRING ) ) ) ) ) ) )* ) ) ) ( (lv_entities_10_0= ruleEntity ) )* this_CLOSE_11= RULE_CLOSE )?
            int alt35=2;
            int LA35_0 = input.LA(1);

            if ( (LA35_0==RULE_OPEN) ) {
                alt35=1;
            }
            switch (alt35) {
                case 1 :
                    // InternalContextMappingDSL.g:1161:4: this_OPEN_2= RULE_OPEN ( ( ( ( ({...}? => ( ({...}? => (otherlv_4= 'type' (otherlv_5= '=' )? ( (lv_type_6_0= ruleSubDomainType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_7= 'domainVisionStatement' (otherlv_8= '=' )? ( (lv_domainVisionStatement_9_0= RULE_STRING ) ) ) ) ) ) )* ) ) ) ( (lv_entities_10_0= ruleEntity ) )* this_CLOSE_11= RULE_CLOSE
                    {
                    this_OPEN_2=(Token)match(input,RULE_OPEN,FOLLOW_25); 

                    				newLeafNode(this_OPEN_2, grammarAccess.getSubdomainAccess().getOPENTerminalRuleCall_2_0());
                    			
                    // InternalContextMappingDSL.g:1165:4: ( ( ( ( ({...}? => ( ({...}? => (otherlv_4= 'type' (otherlv_5= '=' )? ( (lv_type_6_0= ruleSubDomainType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_7= 'domainVisionStatement' (otherlv_8= '=' )? ( (lv_domainVisionStatement_9_0= RULE_STRING ) ) ) ) ) ) )* ) ) )
                    // InternalContextMappingDSL.g:1166:5: ( ( ( ({...}? => ( ({...}? => (otherlv_4= 'type' (otherlv_5= '=' )? ( (lv_type_6_0= ruleSubDomainType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_7= 'domainVisionStatement' (otherlv_8= '=' )? ( (lv_domainVisionStatement_9_0= RULE_STRING ) ) ) ) ) ) )* ) )
                    {
                    // InternalContextMappingDSL.g:1166:5: ( ( ( ({...}? => ( ({...}? => (otherlv_4= 'type' (otherlv_5= '=' )? ( (lv_type_6_0= ruleSubDomainType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_7= 'domainVisionStatement' (otherlv_8= '=' )? ( (lv_domainVisionStatement_9_0= RULE_STRING ) ) ) ) ) ) )* ) )
                    // InternalContextMappingDSL.g:1167:6: ( ( ({...}? => ( ({...}? => (otherlv_4= 'type' (otherlv_5= '=' )? ( (lv_type_6_0= ruleSubDomainType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_7= 'domainVisionStatement' (otherlv_8= '=' )? ( (lv_domainVisionStatement_9_0= RULE_STRING ) ) ) ) ) ) )* )
                    {
                     
                    					  getUnorderedGroupHelper().enter(grammarAccess.getSubdomainAccess().getUnorderedGroup_2_1());
                    					
                    // InternalContextMappingDSL.g:1170:6: ( ( ({...}? => ( ({...}? => (otherlv_4= 'type' (otherlv_5= '=' )? ( (lv_type_6_0= ruleSubDomainType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_7= 'domainVisionStatement' (otherlv_8= '=' )? ( (lv_domainVisionStatement_9_0= RULE_STRING ) ) ) ) ) ) )* )
                    // InternalContextMappingDSL.g:1171:7: ( ({...}? => ( ({...}? => (otherlv_4= 'type' (otherlv_5= '=' )? ( (lv_type_6_0= ruleSubDomainType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_7= 'domainVisionStatement' (otherlv_8= '=' )? ( (lv_domainVisionStatement_9_0= RULE_STRING ) ) ) ) ) ) )*
                    {
                    // InternalContextMappingDSL.g:1171:7: ( ({...}? => ( ({...}? => (otherlv_4= 'type' (otherlv_5= '=' )? ( (lv_type_6_0= ruleSubDomainType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_7= 'domainVisionStatement' (otherlv_8= '=' )? ( (lv_domainVisionStatement_9_0= RULE_STRING ) ) ) ) ) ) )*
                    loop33:
                    do {
                        int alt33=3;
                        int LA33_0 = input.LA(1);

                        if ( LA33_0 == 20 && getUnorderedGroupHelper().canSelect(grammarAccess.getSubdomainAccess().getUnorderedGroup_2_1(), 0) ) {
                            alt33=1;
                        }
                        else if ( LA33_0 == 29 && getUnorderedGroupHelper().canSelect(grammarAccess.getSubdomainAccess().getUnorderedGroup_2_1(), 1) ) {
                            alt33=2;
                        }


                        switch (alt33) {
                    	case 1 :
                    	    // InternalContextMappingDSL.g:1172:5: ({...}? => ( ({...}? => (otherlv_4= 'type' (otherlv_5= '=' )? ( (lv_type_6_0= ruleSubDomainType ) ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:1172:5: ({...}? => ( ({...}? => (otherlv_4= 'type' (otherlv_5= '=' )? ( (lv_type_6_0= ruleSubDomainType ) ) ) ) ) )
                    	    // InternalContextMappingDSL.g:1173:6: {...}? => ( ({...}? => (otherlv_4= 'type' (otherlv_5= '=' )? ( (lv_type_6_0= ruleSubDomainType ) ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getSubdomainAccess().getUnorderedGroup_2_1(), 0) ) {
                    	        throw new FailedPredicateException(input, "ruleSubdomain", "getUnorderedGroupHelper().canSelect(grammarAccess.getSubdomainAccess().getUnorderedGroup_2_1(), 0)");
                    	    }
                    	    // InternalContextMappingDSL.g:1173:109: ( ({...}? => (otherlv_4= 'type' (otherlv_5= '=' )? ( (lv_type_6_0= ruleSubDomainType ) ) ) ) )
                    	    // InternalContextMappingDSL.g:1174:7: ({...}? => (otherlv_4= 'type' (otherlv_5= '=' )? ( (lv_type_6_0= ruleSubDomainType ) ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getSubdomainAccess().getUnorderedGroup_2_1(), 0);
                    	    						
                    	    // InternalContextMappingDSL.g:1177:10: ({...}? => (otherlv_4= 'type' (otherlv_5= '=' )? ( (lv_type_6_0= ruleSubDomainType ) ) ) )
                    	    // InternalContextMappingDSL.g:1177:11: {...}? => (otherlv_4= 'type' (otherlv_5= '=' )? ( (lv_type_6_0= ruleSubDomainType ) ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleSubdomain", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:1177:20: (otherlv_4= 'type' (otherlv_5= '=' )? ( (lv_type_6_0= ruleSubDomainType ) ) )
                    	    // InternalContextMappingDSL.g:1177:21: otherlv_4= 'type' (otherlv_5= '=' )? ( (lv_type_6_0= ruleSubDomainType ) )
                    	    {
                    	    otherlv_4=(Token)match(input,20,FOLLOW_26); 

                    	    										newLeafNode(otherlv_4, grammarAccess.getSubdomainAccess().getTypeKeyword_2_1_0_0());
                    	    									
                    	    // InternalContextMappingDSL.g:1181:10: (otherlv_5= '=' )?
                    	    int alt31=2;
                    	    int LA31_0 = input.LA(1);

                    	    if ( (LA31_0==21) ) {
                    	        alt31=1;
                    	    }
                    	    switch (alt31) {
                    	        case 1 :
                    	            // InternalContextMappingDSL.g:1182:11: otherlv_5= '='
                    	            {
                    	            otherlv_5=(Token)match(input,21,FOLLOW_26); 

                    	            											newLeafNode(otherlv_5, grammarAccess.getSubdomainAccess().getEqualsSignKeyword_2_1_0_1());
                    	            										

                    	            }
                    	            break;

                    	    }

                    	    // InternalContextMappingDSL.g:1187:10: ( (lv_type_6_0= ruleSubDomainType ) )
                    	    // InternalContextMappingDSL.g:1188:11: (lv_type_6_0= ruleSubDomainType )
                    	    {
                    	    // InternalContextMappingDSL.g:1188:11: (lv_type_6_0= ruleSubDomainType )
                    	    // InternalContextMappingDSL.g:1189:12: lv_type_6_0= ruleSubDomainType
                    	    {

                    	    												newCompositeNode(grammarAccess.getSubdomainAccess().getTypeSubDomainTypeEnumRuleCall_2_1_0_2_0());
                    	    											
                    	    pushFollow(FOLLOW_25);
                    	    lv_type_6_0=ruleSubDomainType();

                    	    state._fsp--;


                    	    												if (current==null) {
                    	    													current = createModelElementForParent(grammarAccess.getSubdomainRule());
                    	    												}
                    	    												set(
                    	    													current,
                    	    													"type",
                    	    													lv_type_6_0,
                    	    													"org.contextmapper.dsl.ContextMappingDSL.SubDomainType");
                    	    												afterParserOrEnumRuleCall();
                    	    											

                    	    }


                    	    }


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getSubdomainAccess().getUnorderedGroup_2_1());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 2 :
                    	    // InternalContextMappingDSL.g:1212:5: ({...}? => ( ({...}? => (otherlv_7= 'domainVisionStatement' (otherlv_8= '=' )? ( (lv_domainVisionStatement_9_0= RULE_STRING ) ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:1212:5: ({...}? => ( ({...}? => (otherlv_7= 'domainVisionStatement' (otherlv_8= '=' )? ( (lv_domainVisionStatement_9_0= RULE_STRING ) ) ) ) ) )
                    	    // InternalContextMappingDSL.g:1213:6: {...}? => ( ({...}? => (otherlv_7= 'domainVisionStatement' (otherlv_8= '=' )? ( (lv_domainVisionStatement_9_0= RULE_STRING ) ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getSubdomainAccess().getUnorderedGroup_2_1(), 1) ) {
                    	        throw new FailedPredicateException(input, "ruleSubdomain", "getUnorderedGroupHelper().canSelect(grammarAccess.getSubdomainAccess().getUnorderedGroup_2_1(), 1)");
                    	    }
                    	    // InternalContextMappingDSL.g:1213:109: ( ({...}? => (otherlv_7= 'domainVisionStatement' (otherlv_8= '=' )? ( (lv_domainVisionStatement_9_0= RULE_STRING ) ) ) ) )
                    	    // InternalContextMappingDSL.g:1214:7: ({...}? => (otherlv_7= 'domainVisionStatement' (otherlv_8= '=' )? ( (lv_domainVisionStatement_9_0= RULE_STRING ) ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getSubdomainAccess().getUnorderedGroup_2_1(), 1);
                    	    						
                    	    // InternalContextMappingDSL.g:1217:10: ({...}? => (otherlv_7= 'domainVisionStatement' (otherlv_8= '=' )? ( (lv_domainVisionStatement_9_0= RULE_STRING ) ) ) )
                    	    // InternalContextMappingDSL.g:1217:11: {...}? => (otherlv_7= 'domainVisionStatement' (otherlv_8= '=' )? ( (lv_domainVisionStatement_9_0= RULE_STRING ) ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleSubdomain", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:1217:20: (otherlv_7= 'domainVisionStatement' (otherlv_8= '=' )? ( (lv_domainVisionStatement_9_0= RULE_STRING ) ) )
                    	    // InternalContextMappingDSL.g:1217:21: otherlv_7= 'domainVisionStatement' (otherlv_8= '=' )? ( (lv_domainVisionStatement_9_0= RULE_STRING ) )
                    	    {
                    	    otherlv_7=(Token)match(input,29,FOLLOW_17); 

                    	    										newLeafNode(otherlv_7, grammarAccess.getSubdomainAccess().getDomainVisionStatementKeyword_2_1_1_0());
                    	    									
                    	    // InternalContextMappingDSL.g:1221:10: (otherlv_8= '=' )?
                    	    int alt32=2;
                    	    int LA32_0 = input.LA(1);

                    	    if ( (LA32_0==21) ) {
                    	        alt32=1;
                    	    }
                    	    switch (alt32) {
                    	        case 1 :
                    	            // InternalContextMappingDSL.g:1222:11: otherlv_8= '='
                    	            {
                    	            otherlv_8=(Token)match(input,21,FOLLOW_4); 

                    	            											newLeafNode(otherlv_8, grammarAccess.getSubdomainAccess().getEqualsSignKeyword_2_1_1_1());
                    	            										

                    	            }
                    	            break;

                    	    }

                    	    // InternalContextMappingDSL.g:1227:10: ( (lv_domainVisionStatement_9_0= RULE_STRING ) )
                    	    // InternalContextMappingDSL.g:1228:11: (lv_domainVisionStatement_9_0= RULE_STRING )
                    	    {
                    	    // InternalContextMappingDSL.g:1228:11: (lv_domainVisionStatement_9_0= RULE_STRING )
                    	    // InternalContextMappingDSL.g:1229:12: lv_domainVisionStatement_9_0= RULE_STRING
                    	    {
                    	    lv_domainVisionStatement_9_0=(Token)match(input,RULE_STRING,FOLLOW_25); 

                    	    												newLeafNode(lv_domainVisionStatement_9_0, grammarAccess.getSubdomainAccess().getDomainVisionStatementSTRINGTerminalRuleCall_2_1_1_2_0());
                    	    											

                    	    												if (current==null) {
                    	    													current = createModelElement(grammarAccess.getSubdomainRule());
                    	    												}
                    	    												setWithLastConsumed(
                    	    													current,
                    	    													"domainVisionStatement",
                    	    													lv_domainVisionStatement_9_0,
                    	    													"org.eclipse.xtext.common.Terminals.STRING");
                    	    											

                    	    }


                    	    }


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getSubdomainAccess().getUnorderedGroup_2_1());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop33;
                        }
                    } while (true);


                    }


                    }

                     
                    					  getUnorderedGroupHelper().leave(grammarAccess.getSubdomainAccess().getUnorderedGroup_2_1());
                    					

                    }

                    // InternalContextMappingDSL.g:1258:4: ( (lv_entities_10_0= ruleEntity ) )*
                    loop34:
                    do {
                        int alt34=2;
                        int LA34_0 = input.LA(1);

                        if ( ((LA34_0>=RULE_SL_COMMENT && LA34_0<=RULE_STRING)||(LA34_0>=105 && LA34_0<=106)) ) {
                            alt34=1;
                        }


                        switch (alt34) {
                    	case 1 :
                    	    // InternalContextMappingDSL.g:1259:5: (lv_entities_10_0= ruleEntity )
                    	    {
                    	    // InternalContextMappingDSL.g:1259:5: (lv_entities_10_0= ruleEntity )
                    	    // InternalContextMappingDSL.g:1260:6: lv_entities_10_0= ruleEntity
                    	    {

                    	    						newCompositeNode(grammarAccess.getSubdomainAccess().getEntitiesEntityParserRuleCall_2_2_0());
                    	    					
                    	    pushFollow(FOLLOW_27);
                    	    lv_entities_10_0=ruleEntity();

                    	    state._fsp--;


                    	    						if (current==null) {
                    	    							current = createModelElementForParent(grammarAccess.getSubdomainRule());
                    	    						}
                    	    						add(
                    	    							current,
                    	    							"entities",
                    	    							lv_entities_10_0,
                    	    							"org.contextmapper.tactic.dsl.TacticDDDLanguage.Entity");
                    	    						afterParserOrEnumRuleCall();
                    	    					

                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop34;
                        }
                    } while (true);

                    this_CLOSE_11=(Token)match(input,RULE_CLOSE,FOLLOW_2); 

                    				newLeafNode(this_CLOSE_11, grammarAccess.getSubdomainAccess().getCLOSETerminalRuleCall_2_3());
                    			

                    }
                    break;

            }


            }


            }


            	leaveRule();

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleSubdomain"


    // $ANTLR start "entryRuleRelationship"
    // InternalContextMappingDSL.g:1286:1: entryRuleRelationship returns [EObject current=null] : iv_ruleRelationship= ruleRelationship EOF ;
    public final EObject entryRuleRelationship() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleRelationship = null;


        try {
            // InternalContextMappingDSL.g:1286:53: (iv_ruleRelationship= ruleRelationship EOF )
            // InternalContextMappingDSL.g:1287:2: iv_ruleRelationship= ruleRelationship EOF
            {
             newCompositeNode(grammarAccess.getRelationshipRule()); 
            pushFollow(FOLLOW_1);
            iv_ruleRelationship=ruleRelationship();

            state._fsp--;

             current =iv_ruleRelationship; 
            match(input,EOF,FOLLOW_2); 

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleRelationship"


    // $ANTLR start "ruleRelationship"
    // InternalContextMappingDSL.g:1293:1: ruleRelationship returns [EObject current=null] : (this_SymmetricRelationship_0= ruleSymmetricRelationship | this_UpstreamDownstreamRelationship_1= ruleUpstreamDownstreamRelationship ) ;
    public final EObject ruleRelationship() throws RecognitionException {
        EObject current = null;

        EObject this_SymmetricRelationship_0 = null;

        EObject this_UpstreamDownstreamRelationship_1 = null;



        	enterRule();

        try {
            // InternalContextMappingDSL.g:1299:2: ( (this_SymmetricRelationship_0= ruleSymmetricRelationship | this_UpstreamDownstreamRelationship_1= ruleUpstreamDownstreamRelationship ) )
            // InternalContextMappingDSL.g:1300:2: (this_SymmetricRelationship_0= ruleSymmetricRelationship | this_UpstreamDownstreamRelationship_1= ruleUpstreamDownstreamRelationship )
            {
            // InternalContextMappingDSL.g:1300:2: (this_SymmetricRelationship_0= ruleSymmetricRelationship | this_UpstreamDownstreamRelationship_1= ruleUpstreamDownstreamRelationship )
            int alt36=2;
            int LA36_0 = input.LA(1);

            if ( (LA36_0==RULE_ID) ) {
                switch ( input.LA(2) ) {
                case 35:
                    {
                    int LA36_3 = input.LA(3);

                    if ( (LA36_3==37||LA36_3==43||LA36_3==45||(LA36_3>=51 && LA36_3<=52)||(LA36_3>=193 && LA36_3<=196)) ) {
                        alt36=2;
                    }
                    else if ( (LA36_3==36||LA36_3==41) ) {
                        alt36=1;
                    }
                    else {
                        NoViableAltException nvae =
                            new NoViableAltException("", 36, 3, input);

                        throw nvae;
                    }
                    }
                    break;
                case 44:
                case 46:
                case 47:
                case 48:
                case 53:
                case 54:
                    {
                    alt36=2;
                    }
                    break;
                case 38:
                case 39:
                case 42:
                    {
                    alt36=1;
                    }
                    break;
                default:
                    NoViableAltException nvae =
                        new NoViableAltException("", 36, 1, input);

                    throw nvae;
                }

            }
            else if ( (LA36_0==35) ) {
                alt36=1;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 36, 0, input);

                throw nvae;
            }
            switch (alt36) {
                case 1 :
                    // InternalContextMappingDSL.g:1301:3: this_SymmetricRelationship_0= ruleSymmetricRelationship
                    {

                    			newCompositeNode(grammarAccess.getRelationshipAccess().getSymmetricRelationshipParserRuleCall_0());
                    		
                    pushFollow(FOLLOW_2);
                    this_SymmetricRelationship_0=ruleSymmetricRelationship();

                    state._fsp--;


                    			current = this_SymmetricRelationship_0;
                    			afterParserOrEnumRuleCall();
                    		

                    }
                    break;
                case 2 :
                    // InternalContextMappingDSL.g:1310:3: this_UpstreamDownstreamRelationship_1= ruleUpstreamDownstreamRelationship
                    {

                    			newCompositeNode(grammarAccess.getRelationshipAccess().getUpstreamDownstreamRelationshipParserRuleCall_1());
                    		
                    pushFollow(FOLLOW_2);
                    this_UpstreamDownstreamRelationship_1=ruleUpstreamDownstreamRelationship();

                    state._fsp--;


                    			current = this_UpstreamDownstreamRelationship_1;
                    			afterParserOrEnumRuleCall();
                    		

                    }
                    break;

            }


            }


            	leaveRule();

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleRelationship"


    // $ANTLR start "entryRuleSymmetricRelationship"
    // InternalContextMappingDSL.g:1322:1: entryRuleSymmetricRelationship returns [EObject current=null] : iv_ruleSymmetricRelationship= ruleSymmetricRelationship EOF ;
    public final EObject entryRuleSymmetricRelationship() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleSymmetricRelationship = null;


        try {
            // InternalContextMappingDSL.g:1322:62: (iv_ruleSymmetricRelationship= ruleSymmetricRelationship EOF )
            // InternalContextMappingDSL.g:1323:2: iv_ruleSymmetricRelationship= ruleSymmetricRelationship EOF
            {
             newCompositeNode(grammarAccess.getSymmetricRelationshipRule()); 
            pushFollow(FOLLOW_1);
            iv_ruleSymmetricRelationship=ruleSymmetricRelationship();

            state._fsp--;

             current =iv_ruleSymmetricRelationship; 
            match(input,EOF,FOLLOW_2); 

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleSymmetricRelationship"


    // $ANTLR start "ruleSymmetricRelationship"
    // InternalContextMappingDSL.g:1329:1: ruleSymmetricRelationship returns [EObject current=null] : (this_Partnership_0= rulePartnership | this_SharedKernel_1= ruleSharedKernel ) ;
    public final EObject ruleSymmetricRelationship() throws RecognitionException {
        EObject current = null;

        EObject this_Partnership_0 = null;

        EObject this_SharedKernel_1 = null;



        	enterRule();

        try {
            // InternalContextMappingDSL.g:1335:2: ( (this_Partnership_0= rulePartnership | this_SharedKernel_1= ruleSharedKernel ) )
            // InternalContextMappingDSL.g:1336:2: (this_Partnership_0= rulePartnership | this_SharedKernel_1= ruleSharedKernel )
            {
            // InternalContextMappingDSL.g:1336:2: (this_Partnership_0= rulePartnership | this_SharedKernel_1= ruleSharedKernel )
            int alt37=2;
            int LA37_0 = input.LA(1);

            if ( (LA37_0==RULE_ID) ) {
                switch ( input.LA(2) ) {
                case 39:
                    {
                    alt37=1;
                    }
                    break;
                case 38:
                case 42:
                    {
                    alt37=2;
                    }
                    break;
                case 35:
                    {
                    int LA37_5 = input.LA(3);

                    if ( (LA37_5==36) ) {
                        alt37=1;
                    }
                    else if ( (LA37_5==41) ) {
                        alt37=2;
                    }
                    else {
                        NoViableAltException nvae =
                            new NoViableAltException("", 37, 5, input);

                        throw nvae;
                    }
                    }
                    break;
                default:
                    NoViableAltException nvae =
                        new NoViableAltException("", 37, 1, input);

                    throw nvae;
                }

            }
            else if ( (LA37_0==35) ) {
                int LA37_2 = input.LA(2);

                if ( (LA37_2==36) ) {
                    alt37=1;
                }
                else if ( (LA37_2==41) ) {
                    alt37=2;
                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("", 37, 2, input);

                    throw nvae;
                }
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 37, 0, input);

                throw nvae;
            }
            switch (alt37) {
                case 1 :
                    // InternalContextMappingDSL.g:1337:3: this_Partnership_0= rulePartnership
                    {

                    			newCompositeNode(grammarAccess.getSymmetricRelationshipAccess().getPartnershipParserRuleCall_0());
                    		
                    pushFollow(FOLLOW_2);
                    this_Partnership_0=rulePartnership();

                    state._fsp--;


                    			current = this_Partnership_0;
                    			afterParserOrEnumRuleCall();
                    		

                    }
                    break;
                case 2 :
                    // InternalContextMappingDSL.g:1346:3: this_SharedKernel_1= ruleSharedKernel
                    {

                    			newCompositeNode(grammarAccess.getSymmetricRelationshipAccess().getSharedKernelParserRuleCall_1());
                    		
                    pushFollow(FOLLOW_2);
                    this_SharedKernel_1=ruleSharedKernel();

                    state._fsp--;


                    			current = this_SharedKernel_1;
                    			afterParserOrEnumRuleCall();
                    		

                    }
                    break;

            }


            }


            	leaveRule();

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleSymmetricRelationship"


    // $ANTLR start "entryRulePartnership"
    // InternalContextMappingDSL.g:1358:1: entryRulePartnership returns [EObject current=null] : iv_rulePartnership= rulePartnership EOF ;
    public final EObject entryRulePartnership() throws RecognitionException {
        EObject current = null;

        EObject iv_rulePartnership = null;


        try {
            // InternalContextMappingDSL.g:1358:52: (iv_rulePartnership= rulePartnership EOF )
            // InternalContextMappingDSL.g:1359:2: iv_rulePartnership= rulePartnership EOF
            {
             newCompositeNode(grammarAccess.getPartnershipRule()); 
            pushFollow(FOLLOW_1);
            iv_rulePartnership=rulePartnership();

            state._fsp--;

             current =iv_rulePartnership; 
            match(input,EOF,FOLLOW_2); 

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRulePartnership"


    // $ANTLR start "rulePartnership"
    // InternalContextMappingDSL.g:1365:1: rulePartnership returns [EObject current=null] : ( ( ( ( (otherlv_0= RULE_ID ) ) otherlv_1= '[' otherlv_2= 'P' otherlv_3= ']' otherlv_4= '<->' otherlv_5= '[' otherlv_6= 'P' otherlv_7= ']' ( (otherlv_8= RULE_ID ) ) ) | (otherlv_9= '[' otherlv_10= 'P' otherlv_11= ']' ( (otherlv_12= RULE_ID ) ) otherlv_13= '<->' otherlv_14= '[' otherlv_15= 'P' otherlv_16= ']' ( (otherlv_17= RULE_ID ) ) ) | ( ( (otherlv_18= RULE_ID ) ) otherlv_19= '[' otherlv_20= 'P' otherlv_21= ']' otherlv_22= '<->' ( (otherlv_23= RULE_ID ) ) otherlv_24= '[' otherlv_25= 'P' otherlv_26= ']' ) | (otherlv_27= '[' otherlv_28= 'P' otherlv_29= ']' ( (otherlv_30= RULE_ID ) ) otherlv_31= '<->' ( (otherlv_32= RULE_ID ) ) otherlv_33= '[' otherlv_34= 'P' otherlv_35= ']' ) | ( ( (otherlv_36= RULE_ID ) ) otherlv_37= 'Partnership' ( (otherlv_38= RULE_ID ) ) ) ) (otherlv_39= ':' ( (lv_name_40_0= RULE_ID ) ) )? (this_OPEN_41= RULE_OPEN (otherlv_42= 'implementationTechnology' (otherlv_43= '=' )? ( (lv_implementationTechnology_44_0= RULE_STRING ) ) )? this_CLOSE_45= RULE_CLOSE )? ) ;
    public final EObject rulePartnership() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_1=null;
        Token otherlv_2=null;
        Token otherlv_3=null;
        Token otherlv_4=null;
        Token otherlv_5=null;
        Token otherlv_6=null;
        Token otherlv_7=null;
        Token otherlv_8=null;
        Token otherlv_9=null;
        Token otherlv_10=null;
        Token otherlv_11=null;
        Token otherlv_12=null;
        Token otherlv_13=null;
        Token otherlv_14=null;
        Token otherlv_15=null;
        Token otherlv_16=null;
        Token otherlv_17=null;
        Token otherlv_18=null;
        Token otherlv_19=null;
        Token otherlv_20=null;
        Token otherlv_21=null;
        Token otherlv_22=null;
        Token otherlv_23=null;
        Token otherlv_24=null;
        Token otherlv_25=null;
        Token otherlv_26=null;
        Token otherlv_27=null;
        Token otherlv_28=null;
        Token otherlv_29=null;
        Token otherlv_30=null;
        Token otherlv_31=null;
        Token otherlv_32=null;
        Token otherlv_33=null;
        Token otherlv_34=null;
        Token otherlv_35=null;
        Token otherlv_36=null;
        Token otherlv_37=null;
        Token otherlv_38=null;
        Token otherlv_39=null;
        Token lv_name_40_0=null;
        Token this_OPEN_41=null;
        Token otherlv_42=null;
        Token otherlv_43=null;
        Token lv_implementationTechnology_44_0=null;
        Token this_CLOSE_45=null;


        	enterRule();

        try {
            // InternalContextMappingDSL.g:1371:2: ( ( ( ( ( (otherlv_0= RULE_ID ) ) otherlv_1= '[' otherlv_2= 'P' otherlv_3= ']' otherlv_4= '<->' otherlv_5= '[' otherlv_6= 'P' otherlv_7= ']' ( (otherlv_8= RULE_ID ) ) ) | (otherlv_9= '[' otherlv_10= 'P' otherlv_11= ']' ( (otherlv_12= RULE_ID ) ) otherlv_13= '<->' otherlv_14= '[' otherlv_15= 'P' otherlv_16= ']' ( (otherlv_17= RULE_ID ) ) ) | ( ( (otherlv_18= RULE_ID ) ) otherlv_19= '[' otherlv_20= 'P' otherlv_21= ']' otherlv_22= '<->' ( (otherlv_23= RULE_ID ) ) otherlv_24= '[' otherlv_25= 'P' otherlv_26= ']' ) | (otherlv_27= '[' otherlv_28= 'P' otherlv_29= ']' ( (otherlv_30= RULE_ID ) ) otherlv_31= '<->' ( (otherlv_32= RULE_ID ) ) otherlv_33= '[' otherlv_34= 'P' otherlv_35= ']' ) | ( ( (otherlv_36= RULE_ID ) ) otherlv_37= 'Partnership' ( (otherlv_38= RULE_ID ) ) ) ) (otherlv_39= ':' ( (lv_name_40_0= RULE_ID ) ) )? (this_OPEN_41= RULE_OPEN (otherlv_42= 'implementationTechnology' (otherlv_43= '=' )? ( (lv_implementationTechnology_44_0= RULE_STRING ) ) )? this_CLOSE_45= RULE_CLOSE )? ) )
            // InternalContextMappingDSL.g:1372:2: ( ( ( ( (otherlv_0= RULE_ID ) ) otherlv_1= '[' otherlv_2= 'P' otherlv_3= ']' otherlv_4= '<->' otherlv_5= '[' otherlv_6= 'P' otherlv_7= ']' ( (otherlv_8= RULE_ID ) ) ) | (otherlv_9= '[' otherlv_10= 'P' otherlv_11= ']' ( (otherlv_12= RULE_ID ) ) otherlv_13= '<->' otherlv_14= '[' otherlv_15= 'P' otherlv_16= ']' ( (otherlv_17= RULE_ID ) ) ) | ( ( (otherlv_18= RULE_ID ) ) otherlv_19= '[' otherlv_20= 'P' otherlv_21= ']' otherlv_22= '<->' ( (otherlv_23= RULE_ID ) ) otherlv_24= '[' otherlv_25= 'P' otherlv_26= ']' ) | (otherlv_27= '[' otherlv_28= 'P' otherlv_29= ']' ( (otherlv_30= RULE_ID ) ) otherlv_31= '<->' ( (otherlv_32= RULE_ID ) ) otherlv_33= '[' otherlv_34= 'P' otherlv_35= ']' ) | ( ( (otherlv_36= RULE_ID ) ) otherlv_37= 'Partnership' ( (otherlv_38= RULE_ID ) ) ) ) (otherlv_39= ':' ( (lv_name_40_0= RULE_ID ) ) )? (this_OPEN_41= RULE_OPEN (otherlv_42= 'implementationTechnology' (otherlv_43= '=' )? ( (lv_implementationTechnology_44_0= RULE_STRING ) ) )? this_CLOSE_45= RULE_CLOSE )? )
            {
            // InternalContextMappingDSL.g:1372:2: ( ( ( ( (otherlv_0= RULE_ID ) ) otherlv_1= '[' otherlv_2= 'P' otherlv_3= ']' otherlv_4= '<->' otherlv_5= '[' otherlv_6= 'P' otherlv_7= ']' ( (otherlv_8= RULE_ID ) ) ) | (otherlv_9= '[' otherlv_10= 'P' otherlv_11= ']' ( (otherlv_12= RULE_ID ) ) otherlv_13= '<->' otherlv_14= '[' otherlv_15= 'P' otherlv_16= ']' ( (otherlv_17= RULE_ID ) ) ) | ( ( (otherlv_18= RULE_ID ) ) otherlv_19= '[' otherlv_20= 'P' otherlv_21= ']' otherlv_22= '<->' ( (otherlv_23= RULE_ID ) ) otherlv_24= '[' otherlv_25= 'P' otherlv_26= ']' ) | (otherlv_27= '[' otherlv_28= 'P' otherlv_29= ']' ( (otherlv_30= RULE_ID ) ) otherlv_31= '<->' ( (otherlv_32= RULE_ID ) ) otherlv_33= '[' otherlv_34= 'P' otherlv_35= ']' ) | ( ( (otherlv_36= RULE_ID ) ) otherlv_37= 'Partnership' ( (otherlv_38= RULE_ID ) ) ) ) (otherlv_39= ':' ( (lv_name_40_0= RULE_ID ) ) )? (this_OPEN_41= RULE_OPEN (otherlv_42= 'implementationTechnology' (otherlv_43= '=' )? ( (lv_implementationTechnology_44_0= RULE_STRING ) ) )? this_CLOSE_45= RULE_CLOSE )? )
            // InternalContextMappingDSL.g:1373:3: ( ( ( (otherlv_0= RULE_ID ) ) otherlv_1= '[' otherlv_2= 'P' otherlv_3= ']' otherlv_4= '<->' otherlv_5= '[' otherlv_6= 'P' otherlv_7= ']' ( (otherlv_8= RULE_ID ) ) ) | (otherlv_9= '[' otherlv_10= 'P' otherlv_11= ']' ( (otherlv_12= RULE_ID ) ) otherlv_13= '<->' otherlv_14= '[' otherlv_15= 'P' otherlv_16= ']' ( (otherlv_17= RULE_ID ) ) ) | ( ( (otherlv_18= RULE_ID ) ) otherlv_19= '[' otherlv_20= 'P' otherlv_21= ']' otherlv_22= '<->' ( (otherlv_23= RULE_ID ) ) otherlv_24= '[' otherlv_25= 'P' otherlv_26= ']' ) | (otherlv_27= '[' otherlv_28= 'P' otherlv_29= ']' ( (otherlv_30= RULE_ID ) ) otherlv_31= '<->' ( (otherlv_32= RULE_ID ) ) otherlv_33= '[' otherlv_34= 'P' otherlv_35= ']' ) | ( ( (otherlv_36= RULE_ID ) ) otherlv_37= 'Partnership' ( (otherlv_38= RULE_ID ) ) ) ) (otherlv_39= ':' ( (lv_name_40_0= RULE_ID ) ) )? (this_OPEN_41= RULE_OPEN (otherlv_42= 'implementationTechnology' (otherlv_43= '=' )? ( (lv_implementationTechnology_44_0= RULE_STRING ) ) )? this_CLOSE_45= RULE_CLOSE )?
            {
            // InternalContextMappingDSL.g:1373:3: ( ( ( (otherlv_0= RULE_ID ) ) otherlv_1= '[' otherlv_2= 'P' otherlv_3= ']' otherlv_4= '<->' otherlv_5= '[' otherlv_6= 'P' otherlv_7= ']' ( (otherlv_8= RULE_ID ) ) ) | (otherlv_9= '[' otherlv_10= 'P' otherlv_11= ']' ( (otherlv_12= RULE_ID ) ) otherlv_13= '<->' otherlv_14= '[' otherlv_15= 'P' otherlv_16= ']' ( (otherlv_17= RULE_ID ) ) ) | ( ( (otherlv_18= RULE_ID ) ) otherlv_19= '[' otherlv_20= 'P' otherlv_21= ']' otherlv_22= '<->' ( (otherlv_23= RULE_ID ) ) otherlv_24= '[' otherlv_25= 'P' otherlv_26= ']' ) | (otherlv_27= '[' otherlv_28= 'P' otherlv_29= ']' ( (otherlv_30= RULE_ID ) ) otherlv_31= '<->' ( (otherlv_32= RULE_ID ) ) otherlv_33= '[' otherlv_34= 'P' otherlv_35= ']' ) | ( ( (otherlv_36= RULE_ID ) ) otherlv_37= 'Partnership' ( (otherlv_38= RULE_ID ) ) ) )
            int alt38=5;
            alt38 = dfa38.predict(input);
            switch (alt38) {
                case 1 :
                    // InternalContextMappingDSL.g:1374:4: ( ( (otherlv_0= RULE_ID ) ) otherlv_1= '[' otherlv_2= 'P' otherlv_3= ']' otherlv_4= '<->' otherlv_5= '[' otherlv_6= 'P' otherlv_7= ']' ( (otherlv_8= RULE_ID ) ) )
                    {
                    // InternalContextMappingDSL.g:1374:4: ( ( (otherlv_0= RULE_ID ) ) otherlv_1= '[' otherlv_2= 'P' otherlv_3= ']' otherlv_4= '<->' otherlv_5= '[' otherlv_6= 'P' otherlv_7= ']' ( (otherlv_8= RULE_ID ) ) )
                    // InternalContextMappingDSL.g:1375:5: ( (otherlv_0= RULE_ID ) ) otherlv_1= '[' otherlv_2= 'P' otherlv_3= ']' otherlv_4= '<->' otherlv_5= '[' otherlv_6= 'P' otherlv_7= ']' ( (otherlv_8= RULE_ID ) )
                    {
                    // InternalContextMappingDSL.g:1375:5: ( (otherlv_0= RULE_ID ) )
                    // InternalContextMappingDSL.g:1376:6: (otherlv_0= RULE_ID )
                    {
                    // InternalContextMappingDSL.g:1376:6: (otherlv_0= RULE_ID )
                    // InternalContextMappingDSL.g:1377:7: otherlv_0= RULE_ID
                    {

                    							if (current==null) {
                    								current = createModelElement(grammarAccess.getPartnershipRule());
                    							}
                    						
                    otherlv_0=(Token)match(input,RULE_ID,FOLLOW_28); 

                    							newLeafNode(otherlv_0, grammarAccess.getPartnershipAccess().getParticipant1BoundedContextCrossReference_0_0_0_0());
                    						

                    }


                    }

                    otherlv_1=(Token)match(input,35,FOLLOW_29); 

                    					newLeafNode(otherlv_1, grammarAccess.getPartnershipAccess().getLeftSquareBracketKeyword_0_0_1());
                    				
                    otherlv_2=(Token)match(input,36,FOLLOW_30); 

                    					newLeafNode(otherlv_2, grammarAccess.getPartnershipAccess().getPKeyword_0_0_2());
                    				
                    otherlv_3=(Token)match(input,37,FOLLOW_31); 

                    					newLeafNode(otherlv_3, grammarAccess.getPartnershipAccess().getRightSquareBracketKeyword_0_0_3());
                    				
                    otherlv_4=(Token)match(input,38,FOLLOW_28); 

                    					newLeafNode(otherlv_4, grammarAccess.getPartnershipAccess().getLessThanSignHyphenMinusGreaterThanSignKeyword_0_0_4());
                    				
                    otherlv_5=(Token)match(input,35,FOLLOW_29); 

                    					newLeafNode(otherlv_5, grammarAccess.getPartnershipAccess().getLeftSquareBracketKeyword_0_0_5());
                    				
                    otherlv_6=(Token)match(input,36,FOLLOW_30); 

                    					newLeafNode(otherlv_6, grammarAccess.getPartnershipAccess().getPKeyword_0_0_6());
                    				
                    otherlv_7=(Token)match(input,37,FOLLOW_10); 

                    					newLeafNode(otherlv_7, grammarAccess.getPartnershipAccess().getRightSquareBracketKeyword_0_0_7());
                    				
                    // InternalContextMappingDSL.g:1416:5: ( (otherlv_8= RULE_ID ) )
                    // InternalContextMappingDSL.g:1417:6: (otherlv_8= RULE_ID )
                    {
                    // InternalContextMappingDSL.g:1417:6: (otherlv_8= RULE_ID )
                    // InternalContextMappingDSL.g:1418:7: otherlv_8= RULE_ID
                    {

                    							if (current==null) {
                    								current = createModelElement(grammarAccess.getPartnershipRule());
                    							}
                    						
                    otherlv_8=(Token)match(input,RULE_ID,FOLLOW_32); 

                    							newLeafNode(otherlv_8, grammarAccess.getPartnershipAccess().getParticipant2BoundedContextCrossReference_0_0_8_0());
                    						

                    }


                    }


                    }


                    }
                    break;
                case 2 :
                    // InternalContextMappingDSL.g:1431:4: (otherlv_9= '[' otherlv_10= 'P' otherlv_11= ']' ( (otherlv_12= RULE_ID ) ) otherlv_13= '<->' otherlv_14= '[' otherlv_15= 'P' otherlv_16= ']' ( (otherlv_17= RULE_ID ) ) )
                    {
                    // InternalContextMappingDSL.g:1431:4: (otherlv_9= '[' otherlv_10= 'P' otherlv_11= ']' ( (otherlv_12= RULE_ID ) ) otherlv_13= '<->' otherlv_14= '[' otherlv_15= 'P' otherlv_16= ']' ( (otherlv_17= RULE_ID ) ) )
                    // InternalContextMappingDSL.g:1432:5: otherlv_9= '[' otherlv_10= 'P' otherlv_11= ']' ( (otherlv_12= RULE_ID ) ) otherlv_13= '<->' otherlv_14= '[' otherlv_15= 'P' otherlv_16= ']' ( (otherlv_17= RULE_ID ) )
                    {
                    otherlv_9=(Token)match(input,35,FOLLOW_29); 

                    					newLeafNode(otherlv_9, grammarAccess.getPartnershipAccess().getLeftSquareBracketKeyword_0_1_0());
                    				
                    otherlv_10=(Token)match(input,36,FOLLOW_30); 

                    					newLeafNode(otherlv_10, grammarAccess.getPartnershipAccess().getPKeyword_0_1_1());
                    				
                    otherlv_11=(Token)match(input,37,FOLLOW_10); 

                    					newLeafNode(otherlv_11, grammarAccess.getPartnershipAccess().getRightSquareBracketKeyword_0_1_2());
                    				
                    // InternalContextMappingDSL.g:1444:5: ( (otherlv_12= RULE_ID ) )
                    // InternalContextMappingDSL.g:1445:6: (otherlv_12= RULE_ID )
                    {
                    // InternalContextMappingDSL.g:1445:6: (otherlv_12= RULE_ID )
                    // InternalContextMappingDSL.g:1446:7: otherlv_12= RULE_ID
                    {

                    							if (current==null) {
                    								current = createModelElement(grammarAccess.getPartnershipRule());
                    							}
                    						
                    otherlv_12=(Token)match(input,RULE_ID,FOLLOW_31); 

                    							newLeafNode(otherlv_12, grammarAccess.getPartnershipAccess().getParticipant1BoundedContextCrossReference_0_1_3_0());
                    						

                    }


                    }

                    otherlv_13=(Token)match(input,38,FOLLOW_28); 

                    					newLeafNode(otherlv_13, grammarAccess.getPartnershipAccess().getLessThanSignHyphenMinusGreaterThanSignKeyword_0_1_4());
                    				
                    otherlv_14=(Token)match(input,35,FOLLOW_29); 

                    					newLeafNode(otherlv_14, grammarAccess.getPartnershipAccess().getLeftSquareBracketKeyword_0_1_5());
                    				
                    otherlv_15=(Token)match(input,36,FOLLOW_30); 

                    					newLeafNode(otherlv_15, grammarAccess.getPartnershipAccess().getPKeyword_0_1_6());
                    				
                    otherlv_16=(Token)match(input,37,FOLLOW_10); 

                    					newLeafNode(otherlv_16, grammarAccess.getPartnershipAccess().getRightSquareBracketKeyword_0_1_7());
                    				
                    // InternalContextMappingDSL.g:1473:5: ( (otherlv_17= RULE_ID ) )
                    // InternalContextMappingDSL.g:1474:6: (otherlv_17= RULE_ID )
                    {
                    // InternalContextMappingDSL.g:1474:6: (otherlv_17= RULE_ID )
                    // InternalContextMappingDSL.g:1475:7: otherlv_17= RULE_ID
                    {

                    							if (current==null) {
                    								current = createModelElement(grammarAccess.getPartnershipRule());
                    							}
                    						
                    otherlv_17=(Token)match(input,RULE_ID,FOLLOW_32); 

                    							newLeafNode(otherlv_17, grammarAccess.getPartnershipAccess().getParticipant2BoundedContextCrossReference_0_1_8_0());
                    						

                    }


                    }


                    }


                    }
                    break;
                case 3 :
                    // InternalContextMappingDSL.g:1488:4: ( ( (otherlv_18= RULE_ID ) ) otherlv_19= '[' otherlv_20= 'P' otherlv_21= ']' otherlv_22= '<->' ( (otherlv_23= RULE_ID ) ) otherlv_24= '[' otherlv_25= 'P' otherlv_26= ']' )
                    {
                    // InternalContextMappingDSL.g:1488:4: ( ( (otherlv_18= RULE_ID ) ) otherlv_19= '[' otherlv_20= 'P' otherlv_21= ']' otherlv_22= '<->' ( (otherlv_23= RULE_ID ) ) otherlv_24= '[' otherlv_25= 'P' otherlv_26= ']' )
                    // InternalContextMappingDSL.g:1489:5: ( (otherlv_18= RULE_ID ) ) otherlv_19= '[' otherlv_20= 'P' otherlv_21= ']' otherlv_22= '<->' ( (otherlv_23= RULE_ID ) ) otherlv_24= '[' otherlv_25= 'P' otherlv_26= ']'
                    {
                    // InternalContextMappingDSL.g:1489:5: ( (otherlv_18= RULE_ID ) )
                    // InternalContextMappingDSL.g:1490:6: (otherlv_18= RULE_ID )
                    {
                    // InternalContextMappingDSL.g:1490:6: (otherlv_18= RULE_ID )
                    // InternalContextMappingDSL.g:1491:7: otherlv_18= RULE_ID
                    {

                    							if (current==null) {
                    								current = createModelElement(grammarAccess.getPartnershipRule());
                    							}
                    						
                    otherlv_18=(Token)match(input,RULE_ID,FOLLOW_28); 

                    							newLeafNode(otherlv_18, grammarAccess.getPartnershipAccess().getParticipant1BoundedContextCrossReference_0_2_0_0());
                    						

                    }


                    }

                    otherlv_19=(Token)match(input,35,FOLLOW_29); 

                    					newLeafNode(otherlv_19, grammarAccess.getPartnershipAccess().getLeftSquareBracketKeyword_0_2_1());
                    				
                    otherlv_20=(Token)match(input,36,FOLLOW_30); 

                    					newLeafNode(otherlv_20, grammarAccess.getPartnershipAccess().getPKeyword_0_2_2());
                    				
                    otherlv_21=(Token)match(input,37,FOLLOW_31); 

                    					newLeafNode(otherlv_21, grammarAccess.getPartnershipAccess().getRightSquareBracketKeyword_0_2_3());
                    				
                    otherlv_22=(Token)match(input,38,FOLLOW_10); 

                    					newLeafNode(otherlv_22, grammarAccess.getPartnershipAccess().getLessThanSignHyphenMinusGreaterThanSignKeyword_0_2_4());
                    				
                    // InternalContextMappingDSL.g:1518:5: ( (otherlv_23= RULE_ID ) )
                    // InternalContextMappingDSL.g:1519:6: (otherlv_23= RULE_ID )
                    {
                    // InternalContextMappingDSL.g:1519:6: (otherlv_23= RULE_ID )
                    // InternalContextMappingDSL.g:1520:7: otherlv_23= RULE_ID
                    {

                    							if (current==null) {
                    								current = createModelElement(grammarAccess.getPartnershipRule());
                    							}
                    						
                    otherlv_23=(Token)match(input,RULE_ID,FOLLOW_28); 

                    							newLeafNode(otherlv_23, grammarAccess.getPartnershipAccess().getParticipant2BoundedContextCrossReference_0_2_5_0());
                    						

                    }


                    }

                    otherlv_24=(Token)match(input,35,FOLLOW_29); 

                    					newLeafNode(otherlv_24, grammarAccess.getPartnershipAccess().getLeftSquareBracketKeyword_0_2_6());
                    				
                    otherlv_25=(Token)match(input,36,FOLLOW_30); 

                    					newLeafNode(otherlv_25, grammarAccess.getPartnershipAccess().getPKeyword_0_2_7());
                    				
                    otherlv_26=(Token)match(input,37,FOLLOW_32); 

                    					newLeafNode(otherlv_26, grammarAccess.getPartnershipAccess().getRightSquareBracketKeyword_0_2_8());
                    				

                    }


                    }
                    break;
                case 4 :
                    // InternalContextMappingDSL.g:1545:4: (otherlv_27= '[' otherlv_28= 'P' otherlv_29= ']' ( (otherlv_30= RULE_ID ) ) otherlv_31= '<->' ( (otherlv_32= RULE_ID ) ) otherlv_33= '[' otherlv_34= 'P' otherlv_35= ']' )
                    {
                    // InternalContextMappingDSL.g:1545:4: (otherlv_27= '[' otherlv_28= 'P' otherlv_29= ']' ( (otherlv_30= RULE_ID ) ) otherlv_31= '<->' ( (otherlv_32= RULE_ID ) ) otherlv_33= '[' otherlv_34= 'P' otherlv_35= ']' )
                    // InternalContextMappingDSL.g:1546:5: otherlv_27= '[' otherlv_28= 'P' otherlv_29= ']' ( (otherlv_30= RULE_ID ) ) otherlv_31= '<->' ( (otherlv_32= RULE_ID ) ) otherlv_33= '[' otherlv_34= 'P' otherlv_35= ']'
                    {
                    otherlv_27=(Token)match(input,35,FOLLOW_29); 

                    					newLeafNode(otherlv_27, grammarAccess.getPartnershipAccess().getLeftSquareBracketKeyword_0_3_0());
                    				
                    otherlv_28=(Token)match(input,36,FOLLOW_30); 

                    					newLeafNode(otherlv_28, grammarAccess.getPartnershipAccess().getPKeyword_0_3_1());
                    				
                    otherlv_29=(Token)match(input,37,FOLLOW_10); 

                    					newLeafNode(otherlv_29, grammarAccess.getPartnershipAccess().getRightSquareBracketKeyword_0_3_2());
                    				
                    // InternalContextMappingDSL.g:1558:5: ( (otherlv_30= RULE_ID ) )
                    // InternalContextMappingDSL.g:1559:6: (otherlv_30= RULE_ID )
                    {
                    // InternalContextMappingDSL.g:1559:6: (otherlv_30= RULE_ID )
                    // InternalContextMappingDSL.g:1560:7: otherlv_30= RULE_ID
                    {

                    							if (current==null) {
                    								current = createModelElement(grammarAccess.getPartnershipRule());
                    							}
                    						
                    otherlv_30=(Token)match(input,RULE_ID,FOLLOW_31); 

                    							newLeafNode(otherlv_30, grammarAccess.getPartnershipAccess().getParticipant1BoundedContextCrossReference_0_3_3_0());
                    						

                    }


                    }

                    otherlv_31=(Token)match(input,38,FOLLOW_10); 

                    					newLeafNode(otherlv_31, grammarAccess.getPartnershipAccess().getLessThanSignHyphenMinusGreaterThanSignKeyword_0_3_4());
                    				
                    // InternalContextMappingDSL.g:1575:5: ( (otherlv_32= RULE_ID ) )
                    // InternalContextMappingDSL.g:1576:6: (otherlv_32= RULE_ID )
                    {
                    // InternalContextMappingDSL.g:1576:6: (otherlv_32= RULE_ID )
                    // InternalContextMappingDSL.g:1577:7: otherlv_32= RULE_ID
                    {

                    							if (current==null) {
                    								current = createModelElement(grammarAccess.getPartnershipRule());
                    							}
                    						
                    otherlv_32=(Token)match(input,RULE_ID,FOLLOW_28); 

                    							newLeafNode(otherlv_32, grammarAccess.getPartnershipAccess().getParticipant2BoundedContextCrossReference_0_3_5_0());
                    						

                    }


                    }

                    otherlv_33=(Token)match(input,35,FOLLOW_29); 

                    					newLeafNode(otherlv_33, grammarAccess.getPartnershipAccess().getLeftSquareBracketKeyword_0_3_6());
                    				
                    otherlv_34=(Token)match(input,36,FOLLOW_30); 

                    					newLeafNode(otherlv_34, grammarAccess.getPartnershipAccess().getPKeyword_0_3_7());
                    				
                    otherlv_35=(Token)match(input,37,FOLLOW_32); 

                    					newLeafNode(otherlv_35, grammarAccess.getPartnershipAccess().getRightSquareBracketKeyword_0_3_8());
                    				

                    }


                    }
                    break;
                case 5 :
                    // InternalContextMappingDSL.g:1602:4: ( ( (otherlv_36= RULE_ID ) ) otherlv_37= 'Partnership' ( (otherlv_38= RULE_ID ) ) )
                    {
                    // InternalContextMappingDSL.g:1602:4: ( ( (otherlv_36= RULE_ID ) ) otherlv_37= 'Partnership' ( (otherlv_38= RULE_ID ) ) )
                    // InternalContextMappingDSL.g:1603:5: ( (otherlv_36= RULE_ID ) ) otherlv_37= 'Partnership' ( (otherlv_38= RULE_ID ) )
                    {
                    // InternalContextMappingDSL.g:1603:5: ( (otherlv_36= RULE_ID ) )
                    // InternalContextMappingDSL.g:1604:6: (otherlv_36= RULE_ID )
                    {
                    // InternalContextMappingDSL.g:1604:6: (otherlv_36= RULE_ID )
                    // InternalContextMappingDSL.g:1605:7: otherlv_36= RULE_ID
                    {

                    							if (current==null) {
                    								current = createModelElement(grammarAccess.getPartnershipRule());
                    							}
                    						
                    otherlv_36=(Token)match(input,RULE_ID,FOLLOW_33); 

                    							newLeafNode(otherlv_36, grammarAccess.getPartnershipAccess().getParticipant1BoundedContextCrossReference_0_4_0_0());
                    						

                    }


                    }

                    otherlv_37=(Token)match(input,39,FOLLOW_10); 

                    					newLeafNode(otherlv_37, grammarAccess.getPartnershipAccess().getPartnershipKeyword_0_4_1());
                    				
                    // InternalContextMappingDSL.g:1620:5: ( (otherlv_38= RULE_ID ) )
                    // InternalContextMappingDSL.g:1621:6: (otherlv_38= RULE_ID )
                    {
                    // InternalContextMappingDSL.g:1621:6: (otherlv_38= RULE_ID )
                    // InternalContextMappingDSL.g:1622:7: otherlv_38= RULE_ID
                    {

                    							if (current==null) {
                    								current = createModelElement(grammarAccess.getPartnershipRule());
                    							}
                    						
                    otherlv_38=(Token)match(input,RULE_ID,FOLLOW_32); 

                    							newLeafNode(otherlv_38, grammarAccess.getPartnershipAccess().getParticipant2BoundedContextCrossReference_0_4_2_0());
                    						

                    }


                    }


                    }


                    }
                    break;

            }

            // InternalContextMappingDSL.g:1635:3: (otherlv_39= ':' ( (lv_name_40_0= RULE_ID ) ) )?
            int alt39=2;
            int LA39_0 = input.LA(1);

            if ( (LA39_0==40) ) {
                alt39=1;
            }
            switch (alt39) {
                case 1 :
                    // InternalContextMappingDSL.g:1636:4: otherlv_39= ':' ( (lv_name_40_0= RULE_ID ) )
                    {
                    otherlv_39=(Token)match(input,40,FOLLOW_10); 

                    				newLeafNode(otherlv_39, grammarAccess.getPartnershipAccess().getColonKeyword_1_0());
                    			
                    // InternalContextMappingDSL.g:1640:4: ( (lv_name_40_0= RULE_ID ) )
                    // InternalContextMappingDSL.g:1641:5: (lv_name_40_0= RULE_ID )
                    {
                    // InternalContextMappingDSL.g:1641:5: (lv_name_40_0= RULE_ID )
                    // InternalContextMappingDSL.g:1642:6: lv_name_40_0= RULE_ID
                    {
                    lv_name_40_0=(Token)match(input,RULE_ID,FOLLOW_23); 

                    						newLeafNode(lv_name_40_0, grammarAccess.getPartnershipAccess().getNameIDTerminalRuleCall_1_1_0());
                    					

                    						if (current==null) {
                    							current = createModelElement(grammarAccess.getPartnershipRule());
                    						}
                    						setWithLastConsumed(
                    							current,
                    							"name",
                    							lv_name_40_0,
                    							"org.eclipse.xtext.common.Terminals.ID");
                    					

                    }


                    }


                    }
                    break;

            }

            // InternalContextMappingDSL.g:1659:3: (this_OPEN_41= RULE_OPEN (otherlv_42= 'implementationTechnology' (otherlv_43= '=' )? ( (lv_implementationTechnology_44_0= RULE_STRING ) ) )? this_CLOSE_45= RULE_CLOSE )?
            int alt42=2;
            int LA42_0 = input.LA(1);

            if ( (LA42_0==RULE_OPEN) ) {
                alt42=1;
            }
            switch (alt42) {
                case 1 :
                    // InternalContextMappingDSL.g:1660:4: this_OPEN_41= RULE_OPEN (otherlv_42= 'implementationTechnology' (otherlv_43= '=' )? ( (lv_implementationTechnology_44_0= RULE_STRING ) ) )? this_CLOSE_45= RULE_CLOSE
                    {
                    this_OPEN_41=(Token)match(input,RULE_OPEN,FOLLOW_34); 

                    				newLeafNode(this_OPEN_41, grammarAccess.getPartnershipAccess().getOPENTerminalRuleCall_2_0());
                    			
                    // InternalContextMappingDSL.g:1664:4: (otherlv_42= 'implementationTechnology' (otherlv_43= '=' )? ( (lv_implementationTechnology_44_0= RULE_STRING ) ) )?
                    int alt41=2;
                    int LA41_0 = input.LA(1);

                    if ( (LA41_0==31) ) {
                        alt41=1;
                    }
                    switch (alt41) {
                        case 1 :
                            // InternalContextMappingDSL.g:1665:5: otherlv_42= 'implementationTechnology' (otherlv_43= '=' )? ( (lv_implementationTechnology_44_0= RULE_STRING ) )
                            {
                            otherlv_42=(Token)match(input,31,FOLLOW_17); 

                            					newLeafNode(otherlv_42, grammarAccess.getPartnershipAccess().getImplementationTechnologyKeyword_2_1_0());
                            				
                            // InternalContextMappingDSL.g:1669:5: (otherlv_43= '=' )?
                            int alt40=2;
                            int LA40_0 = input.LA(1);

                            if ( (LA40_0==21) ) {
                                alt40=1;
                            }
                            switch (alt40) {
                                case 1 :
                                    // InternalContextMappingDSL.g:1670:6: otherlv_43= '='
                                    {
                                    otherlv_43=(Token)match(input,21,FOLLOW_4); 

                                    						newLeafNode(otherlv_43, grammarAccess.getPartnershipAccess().getEqualsSignKeyword_2_1_1());
                                    					

                                    }
                                    break;

                            }

                            // InternalContextMappingDSL.g:1675:5: ( (lv_implementationTechnology_44_0= RULE_STRING ) )
                            // InternalContextMappingDSL.g:1676:6: (lv_implementationTechnology_44_0= RULE_STRING )
                            {
                            // InternalContextMappingDSL.g:1676:6: (lv_implementationTechnology_44_0= RULE_STRING )
                            // InternalContextMappingDSL.g:1677:7: lv_implementationTechnology_44_0= RULE_STRING
                            {
                            lv_implementationTechnology_44_0=(Token)match(input,RULE_STRING,FOLLOW_35); 

                            							newLeafNode(lv_implementationTechnology_44_0, grammarAccess.getPartnershipAccess().getImplementationTechnologySTRINGTerminalRuleCall_2_1_2_0());
                            						

                            							if (current==null) {
                            								current = createModelElement(grammarAccess.getPartnershipRule());
                            							}
                            							setWithLastConsumed(
                            								current,
                            								"implementationTechnology",
                            								lv_implementationTechnology_44_0,
                            								"org.eclipse.xtext.common.Terminals.STRING");
                            						

                            }


                            }


                            }
                            break;

                    }

                    this_CLOSE_45=(Token)match(input,RULE_CLOSE,FOLLOW_2); 

                    				newLeafNode(this_CLOSE_45, grammarAccess.getPartnershipAccess().getCLOSETerminalRuleCall_2_2());
                    			

                    }
                    break;

            }


            }


            }


            	leaveRule();

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "rulePartnership"


    // $ANTLR start "entryRuleSharedKernel"
    // InternalContextMappingDSL.g:1703:1: entryRuleSharedKernel returns [EObject current=null] : iv_ruleSharedKernel= ruleSharedKernel EOF ;
    public final EObject entryRuleSharedKernel() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleSharedKernel = null;


        try {
            // InternalContextMappingDSL.g:1703:53: (iv_ruleSharedKernel= ruleSharedKernel EOF )
            // InternalContextMappingDSL.g:1704:2: iv_ruleSharedKernel= ruleSharedKernel EOF
            {
             newCompositeNode(grammarAccess.getSharedKernelRule()); 
            pushFollow(FOLLOW_1);
            iv_ruleSharedKernel=ruleSharedKernel();

            state._fsp--;

             current =iv_ruleSharedKernel; 
            match(input,EOF,FOLLOW_2); 

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleSharedKernel"


    // $ANTLR start "ruleSharedKernel"
    // InternalContextMappingDSL.g:1710:1: ruleSharedKernel returns [EObject current=null] : ( ( ( ( (otherlv_0= RULE_ID ) ) otherlv_1= '[' otherlv_2= 'SK' otherlv_3= ']' otherlv_4= '<->' otherlv_5= '[' otherlv_6= 'SK' otherlv_7= ']' ( (otherlv_8= RULE_ID ) ) ) | (otherlv_9= '[' otherlv_10= 'SK' otherlv_11= ']' ( (otherlv_12= RULE_ID ) ) otherlv_13= '<->' otherlv_14= '[' otherlv_15= 'SK' otherlv_16= ']' ( (otherlv_17= RULE_ID ) ) ) | ( ( (otherlv_18= RULE_ID ) ) otherlv_19= '[' otherlv_20= 'SK' otherlv_21= ']' otherlv_22= '<->' ( (otherlv_23= RULE_ID ) ) otherlv_24= '[' otherlv_25= 'SK' otherlv_26= ']' ) | (otherlv_27= '[' otherlv_28= 'SK' otherlv_29= ']' ( (otherlv_30= RULE_ID ) ) otherlv_31= '<->' ( (otherlv_32= RULE_ID ) ) otherlv_33= '[' otherlv_34= 'SK' otherlv_35= ']' ) | ( ( (otherlv_36= RULE_ID ) ) otherlv_37= 'Shared-Kernel' ( (otherlv_38= RULE_ID ) ) ) | ( ( (otherlv_39= RULE_ID ) ) otherlv_40= '<->' ( (otherlv_41= RULE_ID ) ) ) ) (otherlv_42= ':' ( (lv_name_43_0= RULE_ID ) ) )? (this_OPEN_44= RULE_OPEN (otherlv_45= 'implementationTechnology' (otherlv_46= '=' )? ( (lv_implementationTechnology_47_0= RULE_STRING ) ) )? this_CLOSE_48= RULE_CLOSE )? ) ;
    public final EObject ruleSharedKernel() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_1=null;
        Token otherlv_2=null;
        Token otherlv_3=null;
        Token otherlv_4=null;
        Token otherlv_5=null;
        Token otherlv_6=null;
        Token otherlv_7=null;
        Token otherlv_8=null;
        Token otherlv_9=null;
        Token otherlv_10=null;
        Token otherlv_11=null;
        Token otherlv_12=null;
        Token otherlv_13=null;
        Token otherlv_14=null;
        Token otherlv_15=null;
        Token otherlv_16=null;
        Token otherlv_17=null;
        Token otherlv_18=null;
        Token otherlv_19=null;
        Token otherlv_20=null;
        Token otherlv_21=null;
        Token otherlv_22=null;
        Token otherlv_23=null;
        Token otherlv_24=null;
        Token otherlv_25=null;
        Token otherlv_26=null;
        Token otherlv_27=null;
        Token otherlv_28=null;
        Token otherlv_29=null;
        Token otherlv_30=null;
        Token otherlv_31=null;
        Token otherlv_32=null;
        Token otherlv_33=null;
        Token otherlv_34=null;
        Token otherlv_35=null;
        Token otherlv_36=null;
        Token otherlv_37=null;
        Token otherlv_38=null;
        Token otherlv_39=null;
        Token otherlv_40=null;
        Token otherlv_41=null;
        Token otherlv_42=null;
        Token lv_name_43_0=null;
        Token this_OPEN_44=null;
        Token otherlv_45=null;
        Token otherlv_46=null;
        Token lv_implementationTechnology_47_0=null;
        Token this_CLOSE_48=null;


        	enterRule();

        try {
            // InternalContextMappingDSL.g:1716:2: ( ( ( ( ( (otherlv_0= RULE_ID ) ) otherlv_1= '[' otherlv_2= 'SK' otherlv_3= ']' otherlv_4= '<->' otherlv_5= '[' otherlv_6= 'SK' otherlv_7= ']' ( (otherlv_8= RULE_ID ) ) ) | (otherlv_9= '[' otherlv_10= 'SK' otherlv_11= ']' ( (otherlv_12= RULE_ID ) ) otherlv_13= '<->' otherlv_14= '[' otherlv_15= 'SK' otherlv_16= ']' ( (otherlv_17= RULE_ID ) ) ) | ( ( (otherlv_18= RULE_ID ) ) otherlv_19= '[' otherlv_20= 'SK' otherlv_21= ']' otherlv_22= '<->' ( (otherlv_23= RULE_ID ) ) otherlv_24= '[' otherlv_25= 'SK' otherlv_26= ']' ) | (otherlv_27= '[' otherlv_28= 'SK' otherlv_29= ']' ( (otherlv_30= RULE_ID ) ) otherlv_31= '<->' ( (otherlv_32= RULE_ID ) ) otherlv_33= '[' otherlv_34= 'SK' otherlv_35= ']' ) | ( ( (otherlv_36= RULE_ID ) ) otherlv_37= 'Shared-Kernel' ( (otherlv_38= RULE_ID ) ) ) | ( ( (otherlv_39= RULE_ID ) ) otherlv_40= '<->' ( (otherlv_41= RULE_ID ) ) ) ) (otherlv_42= ':' ( (lv_name_43_0= RULE_ID ) ) )? (this_OPEN_44= RULE_OPEN (otherlv_45= 'implementationTechnology' (otherlv_46= '=' )? ( (lv_implementationTechnology_47_0= RULE_STRING ) ) )? this_CLOSE_48= RULE_CLOSE )? ) )
            // InternalContextMappingDSL.g:1717:2: ( ( ( ( (otherlv_0= RULE_ID ) ) otherlv_1= '[' otherlv_2= 'SK' otherlv_3= ']' otherlv_4= '<->' otherlv_5= '[' otherlv_6= 'SK' otherlv_7= ']' ( (otherlv_8= RULE_ID ) ) ) | (otherlv_9= '[' otherlv_10= 'SK' otherlv_11= ']' ( (otherlv_12= RULE_ID ) ) otherlv_13= '<->' otherlv_14= '[' otherlv_15= 'SK' otherlv_16= ']' ( (otherlv_17= RULE_ID ) ) ) | ( ( (otherlv_18= RULE_ID ) ) otherlv_19= '[' otherlv_20= 'SK' otherlv_21= ']' otherlv_22= '<->' ( (otherlv_23= RULE_ID ) ) otherlv_24= '[' otherlv_25= 'SK' otherlv_26= ']' ) | (otherlv_27= '[' otherlv_28= 'SK' otherlv_29= ']' ( (otherlv_30= RULE_ID ) ) otherlv_31= '<->' ( (otherlv_32= RULE_ID ) ) otherlv_33= '[' otherlv_34= 'SK' otherlv_35= ']' ) | ( ( (otherlv_36= RULE_ID ) ) otherlv_37= 'Shared-Kernel' ( (otherlv_38= RULE_ID ) ) ) | ( ( (otherlv_39= RULE_ID ) ) otherlv_40= '<->' ( (otherlv_41= RULE_ID ) ) ) ) (otherlv_42= ':' ( (lv_name_43_0= RULE_ID ) ) )? (this_OPEN_44= RULE_OPEN (otherlv_45= 'implementationTechnology' (otherlv_46= '=' )? ( (lv_implementationTechnology_47_0= RULE_STRING ) ) )? this_CLOSE_48= RULE_CLOSE )? )
            {
            // InternalContextMappingDSL.g:1717:2: ( ( ( ( (otherlv_0= RULE_ID ) ) otherlv_1= '[' otherlv_2= 'SK' otherlv_3= ']' otherlv_4= '<->' otherlv_5= '[' otherlv_6= 'SK' otherlv_7= ']' ( (otherlv_8= RULE_ID ) ) ) | (otherlv_9= '[' otherlv_10= 'SK' otherlv_11= ']' ( (otherlv_12= RULE_ID ) ) otherlv_13= '<->' otherlv_14= '[' otherlv_15= 'SK' otherlv_16= ']' ( (otherlv_17= RULE_ID ) ) ) | ( ( (otherlv_18= RULE_ID ) ) otherlv_19= '[' otherlv_20= 'SK' otherlv_21= ']' otherlv_22= '<->' ( (otherlv_23= RULE_ID ) ) otherlv_24= '[' otherlv_25= 'SK' otherlv_26= ']' ) | (otherlv_27= '[' otherlv_28= 'SK' otherlv_29= ']' ( (otherlv_30= RULE_ID ) ) otherlv_31= '<->' ( (otherlv_32= RULE_ID ) ) otherlv_33= '[' otherlv_34= 'SK' otherlv_35= ']' ) | ( ( (otherlv_36= RULE_ID ) ) otherlv_37= 'Shared-Kernel' ( (otherlv_38= RULE_ID ) ) ) | ( ( (otherlv_39= RULE_ID ) ) otherlv_40= '<->' ( (otherlv_41= RULE_ID ) ) ) ) (otherlv_42= ':' ( (lv_name_43_0= RULE_ID ) ) )? (this_OPEN_44= RULE_OPEN (otherlv_45= 'implementationTechnology' (otherlv_46= '=' )? ( (lv_implementationTechnology_47_0= RULE_STRING ) ) )? this_CLOSE_48= RULE_CLOSE )? )
            // InternalContextMappingDSL.g:1718:3: ( ( ( (otherlv_0= RULE_ID ) ) otherlv_1= '[' otherlv_2= 'SK' otherlv_3= ']' otherlv_4= '<->' otherlv_5= '[' otherlv_6= 'SK' otherlv_7= ']' ( (otherlv_8= RULE_ID ) ) ) | (otherlv_9= '[' otherlv_10= 'SK' otherlv_11= ']' ( (otherlv_12= RULE_ID ) ) otherlv_13= '<->' otherlv_14= '[' otherlv_15= 'SK' otherlv_16= ']' ( (otherlv_17= RULE_ID ) ) ) | ( ( (otherlv_18= RULE_ID ) ) otherlv_19= '[' otherlv_20= 'SK' otherlv_21= ']' otherlv_22= '<->' ( (otherlv_23= RULE_ID ) ) otherlv_24= '[' otherlv_25= 'SK' otherlv_26= ']' ) | (otherlv_27= '[' otherlv_28= 'SK' otherlv_29= ']' ( (otherlv_30= RULE_ID ) ) otherlv_31= '<->' ( (otherlv_32= RULE_ID ) ) otherlv_33= '[' otherlv_34= 'SK' otherlv_35= ']' ) | ( ( (otherlv_36= RULE_ID ) ) otherlv_37= 'Shared-Kernel' ( (otherlv_38= RULE_ID ) ) ) | ( ( (otherlv_39= RULE_ID ) ) otherlv_40= '<->' ( (otherlv_41= RULE_ID ) ) ) ) (otherlv_42= ':' ( (lv_name_43_0= RULE_ID ) ) )? (this_OPEN_44= RULE_OPEN (otherlv_45= 'implementationTechnology' (otherlv_46= '=' )? ( (lv_implementationTechnology_47_0= RULE_STRING ) ) )? this_CLOSE_48= RULE_CLOSE )?
            {
            // InternalContextMappingDSL.g:1718:3: ( ( ( (otherlv_0= RULE_ID ) ) otherlv_1= '[' otherlv_2= 'SK' otherlv_3= ']' otherlv_4= '<->' otherlv_5= '[' otherlv_6= 'SK' otherlv_7= ']' ( (otherlv_8= RULE_ID ) ) ) | (otherlv_9= '[' otherlv_10= 'SK' otherlv_11= ']' ( (otherlv_12= RULE_ID ) ) otherlv_13= '<->' otherlv_14= '[' otherlv_15= 'SK' otherlv_16= ']' ( (otherlv_17= RULE_ID ) ) ) | ( ( (otherlv_18= RULE_ID ) ) otherlv_19= '[' otherlv_20= 'SK' otherlv_21= ']' otherlv_22= '<->' ( (otherlv_23= RULE_ID ) ) otherlv_24= '[' otherlv_25= 'SK' otherlv_26= ']' ) | (otherlv_27= '[' otherlv_28= 'SK' otherlv_29= ']' ( (otherlv_30= RULE_ID ) ) otherlv_31= '<->' ( (otherlv_32= RULE_ID ) ) otherlv_33= '[' otherlv_34= 'SK' otherlv_35= ']' ) | ( ( (otherlv_36= RULE_ID ) ) otherlv_37= 'Shared-Kernel' ( (otherlv_38= RULE_ID ) ) ) | ( ( (otherlv_39= RULE_ID ) ) otherlv_40= '<->' ( (otherlv_41= RULE_ID ) ) ) )
            int alt43=6;
            alt43 = dfa43.predict(input);
            switch (alt43) {
                case 1 :
                    // InternalContextMappingDSL.g:1719:4: ( ( (otherlv_0= RULE_ID ) ) otherlv_1= '[' otherlv_2= 'SK' otherlv_3= ']' otherlv_4= '<->' otherlv_5= '[' otherlv_6= 'SK' otherlv_7= ']' ( (otherlv_8= RULE_ID ) ) )
                    {
                    // InternalContextMappingDSL.g:1719:4: ( ( (otherlv_0= RULE_ID ) ) otherlv_1= '[' otherlv_2= 'SK' otherlv_3= ']' otherlv_4= '<->' otherlv_5= '[' otherlv_6= 'SK' otherlv_7= ']' ( (otherlv_8= RULE_ID ) ) )
                    // InternalContextMappingDSL.g:1720:5: ( (otherlv_0= RULE_ID ) ) otherlv_1= '[' otherlv_2= 'SK' otherlv_3= ']' otherlv_4= '<->' otherlv_5= '[' otherlv_6= 'SK' otherlv_7= ']' ( (otherlv_8= RULE_ID ) )
                    {
                    // InternalContextMappingDSL.g:1720:5: ( (otherlv_0= RULE_ID ) )
                    // InternalContextMappingDSL.g:1721:6: (otherlv_0= RULE_ID )
                    {
                    // InternalContextMappingDSL.g:1721:6: (otherlv_0= RULE_ID )
                    // InternalContextMappingDSL.g:1722:7: otherlv_0= RULE_ID
                    {

                    							if (current==null) {
                    								current = createModelElement(grammarAccess.getSharedKernelRule());
                    							}
                    						
                    otherlv_0=(Token)match(input,RULE_ID,FOLLOW_28); 

                    							newLeafNode(otherlv_0, grammarAccess.getSharedKernelAccess().getParticipant1BoundedContextCrossReference_0_0_0_0());
                    						

                    }


                    }

                    otherlv_1=(Token)match(input,35,FOLLOW_36); 

                    					newLeafNode(otherlv_1, grammarAccess.getSharedKernelAccess().getLeftSquareBracketKeyword_0_0_1());
                    				
                    otherlv_2=(Token)match(input,41,FOLLOW_30); 

                    					newLeafNode(otherlv_2, grammarAccess.getSharedKernelAccess().getSKKeyword_0_0_2());
                    				
                    otherlv_3=(Token)match(input,37,FOLLOW_31); 

                    					newLeafNode(otherlv_3, grammarAccess.getSharedKernelAccess().getRightSquareBracketKeyword_0_0_3());
                    				
                    otherlv_4=(Token)match(input,38,FOLLOW_28); 

                    					newLeafNode(otherlv_4, grammarAccess.getSharedKernelAccess().getLessThanSignHyphenMinusGreaterThanSignKeyword_0_0_4());
                    				
                    otherlv_5=(Token)match(input,35,FOLLOW_36); 

                    					newLeafNode(otherlv_5, grammarAccess.getSharedKernelAccess().getLeftSquareBracketKeyword_0_0_5());
                    				
                    otherlv_6=(Token)match(input,41,FOLLOW_30); 

                    					newLeafNode(otherlv_6, grammarAccess.getSharedKernelAccess().getSKKeyword_0_0_6());
                    				
                    otherlv_7=(Token)match(input,37,FOLLOW_10); 

                    					newLeafNode(otherlv_7, grammarAccess.getSharedKernelAccess().getRightSquareBracketKeyword_0_0_7());
                    				
                    // InternalContextMappingDSL.g:1761:5: ( (otherlv_8= RULE_ID ) )
                    // InternalContextMappingDSL.g:1762:6: (otherlv_8= RULE_ID )
                    {
                    // InternalContextMappingDSL.g:1762:6: (otherlv_8= RULE_ID )
                    // InternalContextMappingDSL.g:1763:7: otherlv_8= RULE_ID
                    {

                    							if (current==null) {
                    								current = createModelElement(grammarAccess.getSharedKernelRule());
                    							}
                    						
                    otherlv_8=(Token)match(input,RULE_ID,FOLLOW_32); 

                    							newLeafNode(otherlv_8, grammarAccess.getSharedKernelAccess().getParticipant2BoundedContextCrossReference_0_0_8_0());
                    						

                    }


                    }


                    }


                    }
                    break;
                case 2 :
                    // InternalContextMappingDSL.g:1776:4: (otherlv_9= '[' otherlv_10= 'SK' otherlv_11= ']' ( (otherlv_12= RULE_ID ) ) otherlv_13= '<->' otherlv_14= '[' otherlv_15= 'SK' otherlv_16= ']' ( (otherlv_17= RULE_ID ) ) )
                    {
                    // InternalContextMappingDSL.g:1776:4: (otherlv_9= '[' otherlv_10= 'SK' otherlv_11= ']' ( (otherlv_12= RULE_ID ) ) otherlv_13= '<->' otherlv_14= '[' otherlv_15= 'SK' otherlv_16= ']' ( (otherlv_17= RULE_ID ) ) )
                    // InternalContextMappingDSL.g:1777:5: otherlv_9= '[' otherlv_10= 'SK' otherlv_11= ']' ( (otherlv_12= RULE_ID ) ) otherlv_13= '<->' otherlv_14= '[' otherlv_15= 'SK' otherlv_16= ']' ( (otherlv_17= RULE_ID ) )
                    {
                    otherlv_9=(Token)match(input,35,FOLLOW_36); 

                    					newLeafNode(otherlv_9, grammarAccess.getSharedKernelAccess().getLeftSquareBracketKeyword_0_1_0());
                    				
                    otherlv_10=(Token)match(input,41,FOLLOW_30); 

                    					newLeafNode(otherlv_10, grammarAccess.getSharedKernelAccess().getSKKeyword_0_1_1());
                    				
                    otherlv_11=(Token)match(input,37,FOLLOW_10); 

                    					newLeafNode(otherlv_11, grammarAccess.getSharedKernelAccess().getRightSquareBracketKeyword_0_1_2());
                    				
                    // InternalContextMappingDSL.g:1789:5: ( (otherlv_12= RULE_ID ) )
                    // InternalContextMappingDSL.g:1790:6: (otherlv_12= RULE_ID )
                    {
                    // InternalContextMappingDSL.g:1790:6: (otherlv_12= RULE_ID )
                    // InternalContextMappingDSL.g:1791:7: otherlv_12= RULE_ID
                    {

                    							if (current==null) {
                    								current = createModelElement(grammarAccess.getSharedKernelRule());
                    							}
                    						
                    otherlv_12=(Token)match(input,RULE_ID,FOLLOW_31); 

                    							newLeafNode(otherlv_12, grammarAccess.getSharedKernelAccess().getParticipant1BoundedContextCrossReference_0_1_3_0());
                    						

                    }


                    }

                    otherlv_13=(Token)match(input,38,FOLLOW_28); 

                    					newLeafNode(otherlv_13, grammarAccess.getSharedKernelAccess().getLessThanSignHyphenMinusGreaterThanSignKeyword_0_1_4());
                    				
                    otherlv_14=(Token)match(input,35,FOLLOW_36); 

                    					newLeafNode(otherlv_14, grammarAccess.getSharedKernelAccess().getLeftSquareBracketKeyword_0_1_5());
                    				
                    otherlv_15=(Token)match(input,41,FOLLOW_30); 

                    					newLeafNode(otherlv_15, grammarAccess.getSharedKernelAccess().getSKKeyword_0_1_6());
                    				
                    otherlv_16=(Token)match(input,37,FOLLOW_10); 

                    					newLeafNode(otherlv_16, grammarAccess.getSharedKernelAccess().getRightSquareBracketKeyword_0_1_7());
                    				
                    // InternalContextMappingDSL.g:1818:5: ( (otherlv_17= RULE_ID ) )
                    // InternalContextMappingDSL.g:1819:6: (otherlv_17= RULE_ID )
                    {
                    // InternalContextMappingDSL.g:1819:6: (otherlv_17= RULE_ID )
                    // InternalContextMappingDSL.g:1820:7: otherlv_17= RULE_ID
                    {

                    							if (current==null) {
                    								current = createModelElement(grammarAccess.getSharedKernelRule());
                    							}
                    						
                    otherlv_17=(Token)match(input,RULE_ID,FOLLOW_32); 

                    							newLeafNode(otherlv_17, grammarAccess.getSharedKernelAccess().getParticipant2BoundedContextCrossReference_0_1_8_0());
                    						

                    }


                    }


                    }


                    }
                    break;
                case 3 :
                    // InternalContextMappingDSL.g:1833:4: ( ( (otherlv_18= RULE_ID ) ) otherlv_19= '[' otherlv_20= 'SK' otherlv_21= ']' otherlv_22= '<->' ( (otherlv_23= RULE_ID ) ) otherlv_24= '[' otherlv_25= 'SK' otherlv_26= ']' )
                    {
                    // InternalContextMappingDSL.g:1833:4: ( ( (otherlv_18= RULE_ID ) ) otherlv_19= '[' otherlv_20= 'SK' otherlv_21= ']' otherlv_22= '<->' ( (otherlv_23= RULE_ID ) ) otherlv_24= '[' otherlv_25= 'SK' otherlv_26= ']' )
                    // InternalContextMappingDSL.g:1834:5: ( (otherlv_18= RULE_ID ) ) otherlv_19= '[' otherlv_20= 'SK' otherlv_21= ']' otherlv_22= '<->' ( (otherlv_23= RULE_ID ) ) otherlv_24= '[' otherlv_25= 'SK' otherlv_26= ']'
                    {
                    // InternalContextMappingDSL.g:1834:5: ( (otherlv_18= RULE_ID ) )
                    // InternalContextMappingDSL.g:1835:6: (otherlv_18= RULE_ID )
                    {
                    // InternalContextMappingDSL.g:1835:6: (otherlv_18= RULE_ID )
                    // InternalContextMappingDSL.g:1836:7: otherlv_18= RULE_ID
                    {

                    							if (current==null) {
                    								current = createModelElement(grammarAccess.getSharedKernelRule());
                    							}
                    						
                    otherlv_18=(Token)match(input,RULE_ID,FOLLOW_28); 

                    							newLeafNode(otherlv_18, grammarAccess.getSharedKernelAccess().getParticipant1BoundedContextCrossReference_0_2_0_0());
                    						

                    }


                    }

                    otherlv_19=(Token)match(input,35,FOLLOW_36); 

                    					newLeafNode(otherlv_19, grammarAccess.getSharedKernelAccess().getLeftSquareBracketKeyword_0_2_1());
                    				
                    otherlv_20=(Token)match(input,41,FOLLOW_30); 

                    					newLeafNode(otherlv_20, grammarAccess.getSharedKernelAccess().getSKKeyword_0_2_2());
                    				
                    otherlv_21=(Token)match(input,37,FOLLOW_31); 

                    					newLeafNode(otherlv_21, grammarAccess.getSharedKernelAccess().getRightSquareBracketKeyword_0_2_3());
                    				
                    otherlv_22=(Token)match(input,38,FOLLOW_10); 

                    					newLeafNode(otherlv_22, grammarAccess.getSharedKernelAccess().getLessThanSignHyphenMinusGreaterThanSignKeyword_0_2_4());
                    				
                    // InternalContextMappingDSL.g:1863:5: ( (otherlv_23= RULE_ID ) )
                    // InternalContextMappingDSL.g:1864:6: (otherlv_23= RULE_ID )
                    {
                    // InternalContextMappingDSL.g:1864:6: (otherlv_23= RULE_ID )
                    // InternalContextMappingDSL.g:1865:7: otherlv_23= RULE_ID
                    {

                    							if (current==null) {
                    								current = createModelElement(grammarAccess.getSharedKernelRule());
                    							}
                    						
                    otherlv_23=(Token)match(input,RULE_ID,FOLLOW_28); 

                    							newLeafNode(otherlv_23, grammarAccess.getSharedKernelAccess().getParticipant2BoundedContextCrossReference_0_2_5_0());
                    						

                    }


                    }

                    otherlv_24=(Token)match(input,35,FOLLOW_36); 

                    					newLeafNode(otherlv_24, grammarAccess.getSharedKernelAccess().getLeftSquareBracketKeyword_0_2_6());
                    				
                    otherlv_25=(Token)match(input,41,FOLLOW_30); 

                    					newLeafNode(otherlv_25, grammarAccess.getSharedKernelAccess().getSKKeyword_0_2_7());
                    				
                    otherlv_26=(Token)match(input,37,FOLLOW_32); 

                    					newLeafNode(otherlv_26, grammarAccess.getSharedKernelAccess().getRightSquareBracketKeyword_0_2_8());
                    				

                    }


                    }
                    break;
                case 4 :
                    // InternalContextMappingDSL.g:1890:4: (otherlv_27= '[' otherlv_28= 'SK' otherlv_29= ']' ( (otherlv_30= RULE_ID ) ) otherlv_31= '<->' ( (otherlv_32= RULE_ID ) ) otherlv_33= '[' otherlv_34= 'SK' otherlv_35= ']' )
                    {
                    // InternalContextMappingDSL.g:1890:4: (otherlv_27= '[' otherlv_28= 'SK' otherlv_29= ']' ( (otherlv_30= RULE_ID ) ) otherlv_31= '<->' ( (otherlv_32= RULE_ID ) ) otherlv_33= '[' otherlv_34= 'SK' otherlv_35= ']' )
                    // InternalContextMappingDSL.g:1891:5: otherlv_27= '[' otherlv_28= 'SK' otherlv_29= ']' ( (otherlv_30= RULE_ID ) ) otherlv_31= '<->' ( (otherlv_32= RULE_ID ) ) otherlv_33= '[' otherlv_34= 'SK' otherlv_35= ']'
                    {
                    otherlv_27=(Token)match(input,35,FOLLOW_36); 

                    					newLeafNode(otherlv_27, grammarAccess.getSharedKernelAccess().getLeftSquareBracketKeyword_0_3_0());
                    				
                    otherlv_28=(Token)match(input,41,FOLLOW_30); 

                    					newLeafNode(otherlv_28, grammarAccess.getSharedKernelAccess().getSKKeyword_0_3_1());
                    				
                    otherlv_29=(Token)match(input,37,FOLLOW_10); 

                    					newLeafNode(otherlv_29, grammarAccess.getSharedKernelAccess().getRightSquareBracketKeyword_0_3_2());
                    				
                    // InternalContextMappingDSL.g:1903:5: ( (otherlv_30= RULE_ID ) )
                    // InternalContextMappingDSL.g:1904:6: (otherlv_30= RULE_ID )
                    {
                    // InternalContextMappingDSL.g:1904:6: (otherlv_30= RULE_ID )
                    // InternalContextMappingDSL.g:1905:7: otherlv_30= RULE_ID
                    {

                    							if (current==null) {
                    								current = createModelElement(grammarAccess.getSharedKernelRule());
                    							}
                    						
                    otherlv_30=(Token)match(input,RULE_ID,FOLLOW_31); 

                    							newLeafNode(otherlv_30, grammarAccess.getSharedKernelAccess().getParticipant1BoundedContextCrossReference_0_3_3_0());
                    						

                    }


                    }

                    otherlv_31=(Token)match(input,38,FOLLOW_10); 

                    					newLeafNode(otherlv_31, grammarAccess.getSharedKernelAccess().getLessThanSignHyphenMinusGreaterThanSignKeyword_0_3_4());
                    				
                    // InternalContextMappingDSL.g:1920:5: ( (otherlv_32= RULE_ID ) )
                    // InternalContextMappingDSL.g:1921:6: (otherlv_32= RULE_ID )
                    {
                    // InternalContextMappingDSL.g:1921:6: (otherlv_32= RULE_ID )
                    // InternalContextMappingDSL.g:1922:7: otherlv_32= RULE_ID
                    {

                    							if (current==null) {
                    								current = createModelElement(grammarAccess.getSharedKernelRule());
                    							}
                    						
                    otherlv_32=(Token)match(input,RULE_ID,FOLLOW_28); 

                    							newLeafNode(otherlv_32, grammarAccess.getSharedKernelAccess().getParticipant2BoundedContextCrossReference_0_3_5_0());
                    						

                    }


                    }

                    otherlv_33=(Token)match(input,35,FOLLOW_36); 

                    					newLeafNode(otherlv_33, grammarAccess.getSharedKernelAccess().getLeftSquareBracketKeyword_0_3_6());
                    				
                    otherlv_34=(Token)match(input,41,FOLLOW_30); 

                    					newLeafNode(otherlv_34, grammarAccess.getSharedKernelAccess().getSKKeyword_0_3_7());
                    				
                    otherlv_35=(Token)match(input,37,FOLLOW_32); 

                    					newLeafNode(otherlv_35, grammarAccess.getSharedKernelAccess().getRightSquareBracketKeyword_0_3_8());
                    				

                    }


                    }
                    break;
                case 5 :
                    // InternalContextMappingDSL.g:1947:4: ( ( (otherlv_36= RULE_ID ) ) otherlv_37= 'Shared-Kernel' ( (otherlv_38= RULE_ID ) ) )
                    {
                    // InternalContextMappingDSL.g:1947:4: ( ( (otherlv_36= RULE_ID ) ) otherlv_37= 'Shared-Kernel' ( (otherlv_38= RULE_ID ) ) )
                    // InternalContextMappingDSL.g:1948:5: ( (otherlv_36= RULE_ID ) ) otherlv_37= 'Shared-Kernel' ( (otherlv_38= RULE_ID ) )
                    {
                    // InternalContextMappingDSL.g:1948:5: ( (otherlv_36= RULE_ID ) )
                    // InternalContextMappingDSL.g:1949:6: (otherlv_36= RULE_ID )
                    {
                    // InternalContextMappingDSL.g:1949:6: (otherlv_36= RULE_ID )
                    // InternalContextMappingDSL.g:1950:7: otherlv_36= RULE_ID
                    {

                    							if (current==null) {
                    								current = createModelElement(grammarAccess.getSharedKernelRule());
                    							}
                    						
                    otherlv_36=(Token)match(input,RULE_ID,FOLLOW_37); 

                    							newLeafNode(otherlv_36, grammarAccess.getSharedKernelAccess().getParticipant1BoundedContextCrossReference_0_4_0_0());
                    						

                    }


                    }

                    otherlv_37=(Token)match(input,42,FOLLOW_10); 

                    					newLeafNode(otherlv_37, grammarAccess.getSharedKernelAccess().getSharedKernelKeyword_0_4_1());
                    				
                    // InternalContextMappingDSL.g:1965:5: ( (otherlv_38= RULE_ID ) )
                    // InternalContextMappingDSL.g:1966:6: (otherlv_38= RULE_ID )
                    {
                    // InternalContextMappingDSL.g:1966:6: (otherlv_38= RULE_ID )
                    // InternalContextMappingDSL.g:1967:7: otherlv_38= RULE_ID
                    {

                    							if (current==null) {
                    								current = createModelElement(grammarAccess.getSharedKernelRule());
                    							}
                    						
                    otherlv_38=(Token)match(input,RULE_ID,FOLLOW_32); 

                    							newLeafNode(otherlv_38, grammarAccess.getSharedKernelAccess().getParticipant2BoundedContextCrossReference_0_4_2_0());
                    						

                    }


                    }


                    }


                    }
                    break;
                case 6 :
                    // InternalContextMappingDSL.g:1980:4: ( ( (otherlv_39= RULE_ID ) ) otherlv_40= '<->' ( (otherlv_41= RULE_ID ) ) )
                    {
                    // InternalContextMappingDSL.g:1980:4: ( ( (otherlv_39= RULE_ID ) ) otherlv_40= '<->' ( (otherlv_41= RULE_ID ) ) )
                    // InternalContextMappingDSL.g:1981:5: ( (otherlv_39= RULE_ID ) ) otherlv_40= '<->' ( (otherlv_41= RULE_ID ) )
                    {
                    // InternalContextMappingDSL.g:1981:5: ( (otherlv_39= RULE_ID ) )
                    // InternalContextMappingDSL.g:1982:6: (otherlv_39= RULE_ID )
                    {
                    // InternalContextMappingDSL.g:1982:6: (otherlv_39= RULE_ID )
                    // InternalContextMappingDSL.g:1983:7: otherlv_39= RULE_ID
                    {

                    							if (current==null) {
                    								current = createModelElement(grammarAccess.getSharedKernelRule());
                    							}
                    						
                    otherlv_39=(Token)match(input,RULE_ID,FOLLOW_31); 

                    							newLeafNode(otherlv_39, grammarAccess.getSharedKernelAccess().getParticipant1BoundedContextCrossReference_0_5_0_0());
                    						

                    }


                    }

                    otherlv_40=(Token)match(input,38,FOLLOW_10); 

                    					newLeafNode(otherlv_40, grammarAccess.getSharedKernelAccess().getLessThanSignHyphenMinusGreaterThanSignKeyword_0_5_1());
                    				
                    // InternalContextMappingDSL.g:1998:5: ( (otherlv_41= RULE_ID ) )
                    // InternalContextMappingDSL.g:1999:6: (otherlv_41= RULE_ID )
                    {
                    // InternalContextMappingDSL.g:1999:6: (otherlv_41= RULE_ID )
                    // InternalContextMappingDSL.g:2000:7: otherlv_41= RULE_ID
                    {

                    							if (current==null) {
                    								current = createModelElement(grammarAccess.getSharedKernelRule());
                    							}
                    						
                    otherlv_41=(Token)match(input,RULE_ID,FOLLOW_32); 

                    							newLeafNode(otherlv_41, grammarAccess.getSharedKernelAccess().getParticipant2BoundedContextCrossReference_0_5_2_0());
                    						

                    }


                    }


                    }


                    }
                    break;

            }

            // InternalContextMappingDSL.g:2013:3: (otherlv_42= ':' ( (lv_name_43_0= RULE_ID ) ) )?
            int alt44=2;
            int LA44_0 = input.LA(1);

            if ( (LA44_0==40) ) {
                alt44=1;
            }
            switch (alt44) {
                case 1 :
                    // InternalContextMappingDSL.g:2014:4: otherlv_42= ':' ( (lv_name_43_0= RULE_ID ) )
                    {
                    otherlv_42=(Token)match(input,40,FOLLOW_10); 

                    				newLeafNode(otherlv_42, grammarAccess.getSharedKernelAccess().getColonKeyword_1_0());
                    			
                    // InternalContextMappingDSL.g:2018:4: ( (lv_name_43_0= RULE_ID ) )
                    // InternalContextMappingDSL.g:2019:5: (lv_name_43_0= RULE_ID )
                    {
                    // InternalContextMappingDSL.g:2019:5: (lv_name_43_0= RULE_ID )
                    // InternalContextMappingDSL.g:2020:6: lv_name_43_0= RULE_ID
                    {
                    lv_name_43_0=(Token)match(input,RULE_ID,FOLLOW_23); 

                    						newLeafNode(lv_name_43_0, grammarAccess.getSharedKernelAccess().getNameIDTerminalRuleCall_1_1_0());
                    					

                    						if (current==null) {
                    							current = createModelElement(grammarAccess.getSharedKernelRule());
                    						}
                    						setWithLastConsumed(
                    							current,
                    							"name",
                    							lv_name_43_0,
                    							"org.eclipse.xtext.common.Terminals.ID");
                    					

                    }


                    }


                    }
                    break;

            }

            // InternalContextMappingDSL.g:2037:3: (this_OPEN_44= RULE_OPEN (otherlv_45= 'implementationTechnology' (otherlv_46= '=' )? ( (lv_implementationTechnology_47_0= RULE_STRING ) ) )? this_CLOSE_48= RULE_CLOSE )?
            int alt47=2;
            int LA47_0 = input.LA(1);

            if ( (LA47_0==RULE_OPEN) ) {
                alt47=1;
            }
            switch (alt47) {
                case 1 :
                    // InternalContextMappingDSL.g:2038:4: this_OPEN_44= RULE_OPEN (otherlv_45= 'implementationTechnology' (otherlv_46= '=' )? ( (lv_implementationTechnology_47_0= RULE_STRING ) ) )? this_CLOSE_48= RULE_CLOSE
                    {
                    this_OPEN_44=(Token)match(input,RULE_OPEN,FOLLOW_34); 

                    				newLeafNode(this_OPEN_44, grammarAccess.getSharedKernelAccess().getOPENTerminalRuleCall_2_0());
                    			
                    // InternalContextMappingDSL.g:2042:4: (otherlv_45= 'implementationTechnology' (otherlv_46= '=' )? ( (lv_implementationTechnology_47_0= RULE_STRING ) ) )?
                    int alt46=2;
                    int LA46_0 = input.LA(1);

                    if ( (LA46_0==31) ) {
                        alt46=1;
                    }
                    switch (alt46) {
                        case 1 :
                            // InternalContextMappingDSL.g:2043:5: otherlv_45= 'implementationTechnology' (otherlv_46= '=' )? ( (lv_implementationTechnology_47_0= RULE_STRING ) )
                            {
                            otherlv_45=(Token)match(input,31,FOLLOW_17); 

                            					newLeafNode(otherlv_45, grammarAccess.getSharedKernelAccess().getImplementationTechnologyKeyword_2_1_0());
                            				
                            // InternalContextMappingDSL.g:2047:5: (otherlv_46= '=' )?
                            int alt45=2;
                            int LA45_0 = input.LA(1);

                            if ( (LA45_0==21) ) {
                                alt45=1;
                            }
                            switch (alt45) {
                                case 1 :
                                    // InternalContextMappingDSL.g:2048:6: otherlv_46= '='
                                    {
                                    otherlv_46=(Token)match(input,21,FOLLOW_4); 

                                    						newLeafNode(otherlv_46, grammarAccess.getSharedKernelAccess().getEqualsSignKeyword_2_1_1());
                                    					

                                    }
                                    break;

                            }

                            // InternalContextMappingDSL.g:2053:5: ( (lv_implementationTechnology_47_0= RULE_STRING ) )
                            // InternalContextMappingDSL.g:2054:6: (lv_implementationTechnology_47_0= RULE_STRING )
                            {
                            // InternalContextMappingDSL.g:2054:6: (lv_implementationTechnology_47_0= RULE_STRING )
                            // InternalContextMappingDSL.g:2055:7: lv_implementationTechnology_47_0= RULE_STRING
                            {
                            lv_implementationTechnology_47_0=(Token)match(input,RULE_STRING,FOLLOW_35); 

                            							newLeafNode(lv_implementationTechnology_47_0, grammarAccess.getSharedKernelAccess().getImplementationTechnologySTRINGTerminalRuleCall_2_1_2_0());
                            						

                            							if (current==null) {
                            								current = createModelElement(grammarAccess.getSharedKernelRule());
                            							}
                            							setWithLastConsumed(
                            								current,
                            								"implementationTechnology",
                            								lv_implementationTechnology_47_0,
                            								"org.eclipse.xtext.common.Terminals.STRING");
                            						

                            }


                            }


                            }
                            break;

                    }

                    this_CLOSE_48=(Token)match(input,RULE_CLOSE,FOLLOW_2); 

                    				newLeafNode(this_CLOSE_48, grammarAccess.getSharedKernelAccess().getCLOSETerminalRuleCall_2_2());
                    			

                    }
                    break;

            }


            }


            }


            	leaveRule();

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleSharedKernel"


    // $ANTLR start "entryRuleUpstreamDownstreamRelationship"
    // InternalContextMappingDSL.g:2081:1: entryRuleUpstreamDownstreamRelationship returns [EObject current=null] : iv_ruleUpstreamDownstreamRelationship= ruleUpstreamDownstreamRelationship EOF ;
    public final EObject entryRuleUpstreamDownstreamRelationship() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleUpstreamDownstreamRelationship = null;


        try {
            // InternalContextMappingDSL.g:2081:71: (iv_ruleUpstreamDownstreamRelationship= ruleUpstreamDownstreamRelationship EOF )
            // InternalContextMappingDSL.g:2082:2: iv_ruleUpstreamDownstreamRelationship= ruleUpstreamDownstreamRelationship EOF
            {
             newCompositeNode(grammarAccess.getUpstreamDownstreamRelationshipRule()); 
            pushFollow(FOLLOW_1);
            iv_ruleUpstreamDownstreamRelationship=ruleUpstreamDownstreamRelationship();

            state._fsp--;

             current =iv_ruleUpstreamDownstreamRelationship; 
            match(input,EOF,FOLLOW_2); 

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleUpstreamDownstreamRelationship"


    // $ANTLR start "ruleUpstreamDownstreamRelationship"
    // InternalContextMappingDSL.g:2088:1: ruleUpstreamDownstreamRelationship returns [EObject current=null] : (this_CustomerSupplierRelationship_0= ruleCustomerSupplierRelationship | ( ( ( ( (otherlv_1= RULE_ID ) ) ( (otherlv_2= '[' otherlv_3= 'U' otherlv_4= ']' ) | ( (otherlv_5= '[' (otherlv_6= 'U' otherlv_7= ',' )? ( (lv_upstreamRoles_8_0= ruleUpstreamRole ) ) (otherlv_9= ',' ( (lv_upstreamRoles_10_0= ruleUpstreamRole ) ) )* ) otherlv_11= ']' ) )? otherlv_12= '->' ( (otherlv_13= '[' otherlv_14= 'D' otherlv_15= ']' ) | ( (otherlv_16= '[' (otherlv_17= 'D' otherlv_18= ',' )? ( (lv_downstreamRoles_19_0= ruleDownstreamRole ) ) (otherlv_20= ',' ( (lv_downstreamRoles_21_0= ruleDownstreamRole ) ) )* ) otherlv_22= ']' ) )? ( (otherlv_23= RULE_ID ) ) ) | ( ( (otherlv_24= RULE_ID ) ) ( (otherlv_25= '[' otherlv_26= 'D' otherlv_27= ']' ) | ( (otherlv_28= '[' (otherlv_29= 'D' otherlv_30= ',' )? ( (lv_downstreamRoles_31_0= ruleDownstreamRole ) ) (otherlv_32= ',' ( (lv_downstreamRoles_33_0= ruleDownstreamRole ) ) )* ) otherlv_34= ']' ) )? otherlv_35= '<-' ( (otherlv_36= '[' otherlv_37= 'U' otherlv_38= ']' ) | ( (otherlv_39= '[' (otherlv_40= 'U' otherlv_41= ',' )? ( (lv_upstreamRoles_42_0= ruleUpstreamRole ) ) (otherlv_43= ',' ( (lv_upstreamRoles_44_0= ruleUpstreamRole ) ) )* ) otherlv_45= ']' ) )? ( (otherlv_46= RULE_ID ) ) ) | ( ( (otherlv_47= RULE_ID ) ) (otherlv_48= '[' ( ( (lv_upstreamRoles_49_0= ruleUpstreamRole ) ) (otherlv_50= ',' ( (lv_upstreamRoles_51_0= ruleUpstreamRole ) ) )* )? otherlv_52= ']' )? otherlv_53= 'Upstream-Downstream' (otherlv_54= '[' ( ( (lv_downstreamRoles_55_0= ruleDownstreamRole ) ) (otherlv_56= ',' ( (lv_downstreamRoles_57_0= ruleDownstreamRole ) ) )* )? otherlv_58= ']' )? ( (otherlv_59= RULE_ID ) ) ) | ( ( (otherlv_60= RULE_ID ) ) (otherlv_61= '[' ( ( (lv_downstreamRoles_62_0= ruleDownstreamRole ) ) (otherlv_63= ',' ( (lv_downstreamRoles_64_0= ruleDownstreamRole ) ) )* )? otherlv_65= ']' )? otherlv_66= 'Downstream-Upstream' (otherlv_67= '[' ( ( (lv_upstreamRoles_68_0= ruleUpstreamRole ) ) (otherlv_69= ',' ( (lv_upstreamRoles_70_0= ruleUpstreamRole ) ) )* )? otherlv_71= ']' )? ( (otherlv_72= RULE_ID ) ) ) ) (otherlv_73= ':' ( (lv_name_74_0= RULE_ID ) ) )? (this_OPEN_75= RULE_OPEN ( ( ( ( ({...}? => ( ({...}? => (otherlv_77= 'implementationTechnology' (otherlv_78= '=' )? ( (lv_implementationTechnology_79_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_80= 'exposedAggregates' (otherlv_81= '=' )? ( (otherlv_82= RULE_ID ) ) ) (otherlv_83= ',' ( (otherlv_84= RULE_ID ) ) )* ( (lv_exposedAggregatesComment_85_0= RULE_SL_COMMENT ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_86= 'downstreamRights' (otherlv_87= '=' )? ( (lv_downstreamGovernanceRights_88_0= ruleDownstreamGovernanceRights ) ) ) ) ) ) )* ) ) ) this_CLOSE_89= RULE_CLOSE )? ) ) ;
    public final EObject ruleUpstreamDownstreamRelationship() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_2=null;
        Token otherlv_3=null;
        Token otherlv_4=null;
        Token otherlv_5=null;
        Token otherlv_6=null;
        Token otherlv_7=null;
        Token otherlv_9=null;
        Token otherlv_11=null;
        Token otherlv_12=null;
        Token otherlv_13=null;
        Token otherlv_14=null;
        Token otherlv_15=null;
        Token otherlv_16=null;
        Token otherlv_17=null;
        Token otherlv_18=null;
        Token otherlv_20=null;
        Token otherlv_22=null;
        Token otherlv_23=null;
        Token otherlv_24=null;
        Token otherlv_25=null;
        Token otherlv_26=null;
        Token otherlv_27=null;
        Token otherlv_28=null;
        Token otherlv_29=null;
        Token otherlv_30=null;
        Token otherlv_32=null;
        Token otherlv_34=null;
        Token otherlv_35=null;
        Token otherlv_36=null;
        Token otherlv_37=null;
        Token otherlv_38=null;
        Token otherlv_39=null;
        Token otherlv_40=null;
        Token otherlv_41=null;
        Token otherlv_43=null;
        Token otherlv_45=null;
        Token otherlv_46=null;
        Token otherlv_47=null;
        Token otherlv_48=null;
        Token otherlv_50=null;
        Token otherlv_52=null;
        Token otherlv_53=null;
        Token otherlv_54=null;
        Token otherlv_56=null;
        Token otherlv_58=null;
        Token otherlv_59=null;
        Token otherlv_60=null;
        Token otherlv_61=null;
        Token otherlv_63=null;
        Token otherlv_65=null;
        Token otherlv_66=null;
        Token otherlv_67=null;
        Token otherlv_69=null;
        Token otherlv_71=null;
        Token otherlv_72=null;
        Token otherlv_73=null;
        Token lv_name_74_0=null;
        Token this_OPEN_75=null;
        Token otherlv_77=null;
        Token otherlv_78=null;
        Token lv_implementationTechnology_79_0=null;
        Token otherlv_80=null;
        Token otherlv_81=null;
        Token otherlv_82=null;
        Token otherlv_83=null;
        Token otherlv_84=null;
        Token lv_exposedAggregatesComment_85_0=null;
        Token otherlv_86=null;
        Token otherlv_87=null;
        Token this_CLOSE_89=null;
        EObject this_CustomerSupplierRelationship_0 = null;

        Enumerator lv_upstreamRoles_8_0 = null;

        Enumerator lv_upstreamRoles_10_0 = null;

        Enumerator lv_downstreamRoles_19_0 = null;

        Enumerator lv_downstreamRoles_21_0 = null;

        Enumerator lv_downstreamRoles_31_0 = null;

        Enumerator lv_downstreamRoles_33_0 = null;

        Enumerator lv_upstreamRoles_42_0 = null;

        Enumerator lv_upstreamRoles_44_0 = null;

        Enumerator lv_upstreamRoles_49_0 = null;

        Enumerator lv_upstreamRoles_51_0 = null;

        Enumerator lv_downstreamRoles_55_0 = null;

        Enumerator lv_downstreamRoles_57_0 = null;

        Enumerator lv_downstreamRoles_62_0 = null;

        Enumerator lv_downstreamRoles_64_0 = null;

        Enumerator lv_upstreamRoles_68_0 = null;

        Enumerator lv_upstreamRoles_70_0 = null;

        Enumerator lv_downstreamGovernanceRights_88_0 = null;



        	enterRule();

        try {
            // InternalContextMappingDSL.g:2094:2: ( (this_CustomerSupplierRelationship_0= ruleCustomerSupplierRelationship | ( ( ( ( (otherlv_1= RULE_ID ) ) ( (otherlv_2= '[' otherlv_3= 'U' otherlv_4= ']' ) | ( (otherlv_5= '[' (otherlv_6= 'U' otherlv_7= ',' )? ( (lv_upstreamRoles_8_0= ruleUpstreamRole ) ) (otherlv_9= ',' ( (lv_upstreamRoles_10_0= ruleUpstreamRole ) ) )* ) otherlv_11= ']' ) )? otherlv_12= '->' ( (otherlv_13= '[' otherlv_14= 'D' otherlv_15= ']' ) | ( (otherlv_16= '[' (otherlv_17= 'D' otherlv_18= ',' )? ( (lv_downstreamRoles_19_0= ruleDownstreamRole ) ) (otherlv_20= ',' ( (lv_downstreamRoles_21_0= ruleDownstreamRole ) ) )* ) otherlv_22= ']' ) )? ( (otherlv_23= RULE_ID ) ) ) | ( ( (otherlv_24= RULE_ID ) ) ( (otherlv_25= '[' otherlv_26= 'D' otherlv_27= ']' ) | ( (otherlv_28= '[' (otherlv_29= 'D' otherlv_30= ',' )? ( (lv_downstreamRoles_31_0= ruleDownstreamRole ) ) (otherlv_32= ',' ( (lv_downstreamRoles_33_0= ruleDownstreamRole ) ) )* ) otherlv_34= ']' ) )? otherlv_35= '<-' ( (otherlv_36= '[' otherlv_37= 'U' otherlv_38= ']' ) | ( (otherlv_39= '[' (otherlv_40= 'U' otherlv_41= ',' )? ( (lv_upstreamRoles_42_0= ruleUpstreamRole ) ) (otherlv_43= ',' ( (lv_upstreamRoles_44_0= ruleUpstreamRole ) ) )* ) otherlv_45= ']' ) )? ( (otherlv_46= RULE_ID ) ) ) | ( ( (otherlv_47= RULE_ID ) ) (otherlv_48= '[' ( ( (lv_upstreamRoles_49_0= ruleUpstreamRole ) ) (otherlv_50= ',' ( (lv_upstreamRoles_51_0= ruleUpstreamRole ) ) )* )? otherlv_52= ']' )? otherlv_53= 'Upstream-Downstream' (otherlv_54= '[' ( ( (lv_downstreamRoles_55_0= ruleDownstreamRole ) ) (otherlv_56= ',' ( (lv_downstreamRoles_57_0= ruleDownstreamRole ) ) )* )? otherlv_58= ']' )? ( (otherlv_59= RULE_ID ) ) ) | ( ( (otherlv_60= RULE_ID ) ) (otherlv_61= '[' ( ( (lv_downstreamRoles_62_0= ruleDownstreamRole ) ) (otherlv_63= ',' ( (lv_downstreamRoles_64_0= ruleDownstreamRole ) ) )* )? otherlv_65= ']' )? otherlv_66= 'Downstream-Upstream' (otherlv_67= '[' ( ( (lv_upstreamRoles_68_0= ruleUpstreamRole ) ) (otherlv_69= ',' ( (lv_upstreamRoles_70_0= ruleUpstreamRole ) ) )* )? otherlv_71= ']' )? ( (otherlv_72= RULE_ID ) ) ) ) (otherlv_73= ':' ( (lv_name_74_0= RULE_ID ) ) )? (this_OPEN_75= RULE_OPEN ( ( ( ( ({...}? => ( ({...}? => (otherlv_77= 'implementationTechnology' (otherlv_78= '=' )? ( (lv_implementationTechnology_79_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_80= 'exposedAggregates' (otherlv_81= '=' )? ( (otherlv_82= RULE_ID ) ) ) (otherlv_83= ',' ( (otherlv_84= RULE_ID ) ) )* ( (lv_exposedAggregatesComment_85_0= RULE_SL_COMMENT ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_86= 'downstreamRights' (otherlv_87= '=' )? ( (lv_downstreamGovernanceRights_88_0= ruleDownstreamGovernanceRights ) ) ) ) ) ) )* ) ) ) this_CLOSE_89= RULE_CLOSE )? ) ) )
            // InternalContextMappingDSL.g:2095:2: (this_CustomerSupplierRelationship_0= ruleCustomerSupplierRelationship | ( ( ( ( (otherlv_1= RULE_ID ) ) ( (otherlv_2= '[' otherlv_3= 'U' otherlv_4= ']' ) | ( (otherlv_5= '[' (otherlv_6= 'U' otherlv_7= ',' )? ( (lv_upstreamRoles_8_0= ruleUpstreamRole ) ) (otherlv_9= ',' ( (lv_upstreamRoles_10_0= ruleUpstreamRole ) ) )* ) otherlv_11= ']' ) )? otherlv_12= '->' ( (otherlv_13= '[' otherlv_14= 'D' otherlv_15= ']' ) | ( (otherlv_16= '[' (otherlv_17= 'D' otherlv_18= ',' )? ( (lv_downstreamRoles_19_0= ruleDownstreamRole ) ) (otherlv_20= ',' ( (lv_downstreamRoles_21_0= ruleDownstreamRole ) ) )* ) otherlv_22= ']' ) )? ( (otherlv_23= RULE_ID ) ) ) | ( ( (otherlv_24= RULE_ID ) ) ( (otherlv_25= '[' otherlv_26= 'D' otherlv_27= ']' ) | ( (otherlv_28= '[' (otherlv_29= 'D' otherlv_30= ',' )? ( (lv_downstreamRoles_31_0= ruleDownstreamRole ) ) (otherlv_32= ',' ( (lv_downstreamRoles_33_0= ruleDownstreamRole ) ) )* ) otherlv_34= ']' ) )? otherlv_35= '<-' ( (otherlv_36= '[' otherlv_37= 'U' otherlv_38= ']' ) | ( (otherlv_39= '[' (otherlv_40= 'U' otherlv_41= ',' )? ( (lv_upstreamRoles_42_0= ruleUpstreamRole ) ) (otherlv_43= ',' ( (lv_upstreamRoles_44_0= ruleUpstreamRole ) ) )* ) otherlv_45= ']' ) )? ( (otherlv_46= RULE_ID ) ) ) | ( ( (otherlv_47= RULE_ID ) ) (otherlv_48= '[' ( ( (lv_upstreamRoles_49_0= ruleUpstreamRole ) ) (otherlv_50= ',' ( (lv_upstreamRoles_51_0= ruleUpstreamRole ) ) )* )? otherlv_52= ']' )? otherlv_53= 'Upstream-Downstream' (otherlv_54= '[' ( ( (lv_downstreamRoles_55_0= ruleDownstreamRole ) ) (otherlv_56= ',' ( (lv_downstreamRoles_57_0= ruleDownstreamRole ) ) )* )? otherlv_58= ']' )? ( (otherlv_59= RULE_ID ) ) ) | ( ( (otherlv_60= RULE_ID ) ) (otherlv_61= '[' ( ( (lv_downstreamRoles_62_0= ruleDownstreamRole ) ) (otherlv_63= ',' ( (lv_downstreamRoles_64_0= ruleDownstreamRole ) ) )* )? otherlv_65= ']' )? otherlv_66= 'Downstream-Upstream' (otherlv_67= '[' ( ( (lv_upstreamRoles_68_0= ruleUpstreamRole ) ) (otherlv_69= ',' ( (lv_upstreamRoles_70_0= ruleUpstreamRole ) ) )* )? otherlv_71= ']' )? ( (otherlv_72= RULE_ID ) ) ) ) (otherlv_73= ':' ( (lv_name_74_0= RULE_ID ) ) )? (this_OPEN_75= RULE_OPEN ( ( ( ( ({...}? => ( ({...}? => (otherlv_77= 'implementationTechnology' (otherlv_78= '=' )? ( (lv_implementationTechnology_79_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_80= 'exposedAggregates' (otherlv_81= '=' )? ( (otherlv_82= RULE_ID ) ) ) (otherlv_83= ',' ( (otherlv_84= RULE_ID ) ) )* ( (lv_exposedAggregatesComment_85_0= RULE_SL_COMMENT ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_86= 'downstreamRights' (otherlv_87= '=' )? ( (lv_downstreamGovernanceRights_88_0= ruleDownstreamGovernanceRights ) ) ) ) ) ) )* ) ) ) this_CLOSE_89= RULE_CLOSE )? ) )
            {
            // InternalContextMappingDSL.g:2095:2: (this_CustomerSupplierRelationship_0= ruleCustomerSupplierRelationship | ( ( ( ( (otherlv_1= RULE_ID ) ) ( (otherlv_2= '[' otherlv_3= 'U' otherlv_4= ']' ) | ( (otherlv_5= '[' (otherlv_6= 'U' otherlv_7= ',' )? ( (lv_upstreamRoles_8_0= ruleUpstreamRole ) ) (otherlv_9= ',' ( (lv_upstreamRoles_10_0= ruleUpstreamRole ) ) )* ) otherlv_11= ']' ) )? otherlv_12= '->' ( (otherlv_13= '[' otherlv_14= 'D' otherlv_15= ']' ) | ( (otherlv_16= '[' (otherlv_17= 'D' otherlv_18= ',' )? ( (lv_downstreamRoles_19_0= ruleDownstreamRole ) ) (otherlv_20= ',' ( (lv_downstreamRoles_21_0= ruleDownstreamRole ) ) )* ) otherlv_22= ']' ) )? ( (otherlv_23= RULE_ID ) ) ) | ( ( (otherlv_24= RULE_ID ) ) ( (otherlv_25= '[' otherlv_26= 'D' otherlv_27= ']' ) | ( (otherlv_28= '[' (otherlv_29= 'D' otherlv_30= ',' )? ( (lv_downstreamRoles_31_0= ruleDownstreamRole ) ) (otherlv_32= ',' ( (lv_downstreamRoles_33_0= ruleDownstreamRole ) ) )* ) otherlv_34= ']' ) )? otherlv_35= '<-' ( (otherlv_36= '[' otherlv_37= 'U' otherlv_38= ']' ) | ( (otherlv_39= '[' (otherlv_40= 'U' otherlv_41= ',' )? ( (lv_upstreamRoles_42_0= ruleUpstreamRole ) ) (otherlv_43= ',' ( (lv_upstreamRoles_44_0= ruleUpstreamRole ) ) )* ) otherlv_45= ']' ) )? ( (otherlv_46= RULE_ID ) ) ) | ( ( (otherlv_47= RULE_ID ) ) (otherlv_48= '[' ( ( (lv_upstreamRoles_49_0= ruleUpstreamRole ) ) (otherlv_50= ',' ( (lv_upstreamRoles_51_0= ruleUpstreamRole ) ) )* )? otherlv_52= ']' )? otherlv_53= 'Upstream-Downstream' (otherlv_54= '[' ( ( (lv_downstreamRoles_55_0= ruleDownstreamRole ) ) (otherlv_56= ',' ( (lv_downstreamRoles_57_0= ruleDownstreamRole ) ) )* )? otherlv_58= ']' )? ( (otherlv_59= RULE_ID ) ) ) | ( ( (otherlv_60= RULE_ID ) ) (otherlv_61= '[' ( ( (lv_downstreamRoles_62_0= ruleDownstreamRole ) ) (otherlv_63= ',' ( (lv_downstreamRoles_64_0= ruleDownstreamRole ) ) )* )? otherlv_65= ']' )? otherlv_66= 'Downstream-Upstream' (otherlv_67= '[' ( ( (lv_upstreamRoles_68_0= ruleUpstreamRole ) ) (otherlv_69= ',' ( (lv_upstreamRoles_70_0= ruleUpstreamRole ) ) )* )? otherlv_71= ']' )? ( (otherlv_72= RULE_ID ) ) ) ) (otherlv_73= ':' ( (lv_name_74_0= RULE_ID ) ) )? (this_OPEN_75= RULE_OPEN ( ( ( ( ({...}? => ( ({...}? => (otherlv_77= 'implementationTechnology' (otherlv_78= '=' )? ( (lv_implementationTechnology_79_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_80= 'exposedAggregates' (otherlv_81= '=' )? ( (otherlv_82= RULE_ID ) ) ) (otherlv_83= ',' ( (otherlv_84= RULE_ID ) ) )* ( (lv_exposedAggregatesComment_85_0= RULE_SL_COMMENT ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_86= 'downstreamRights' (otherlv_87= '=' )? ( (lv_downstreamGovernanceRights_88_0= ruleDownstreamGovernanceRights ) ) ) ) ) ) )* ) ) ) this_CLOSE_89= RULE_CLOSE )? ) )
            int alt81=2;
            alt81 = dfa81.predict(input);
            switch (alt81) {
                case 1 :
                    // InternalContextMappingDSL.g:2096:3: this_CustomerSupplierRelationship_0= ruleCustomerSupplierRelationship
                    {

                    			newCompositeNode(grammarAccess.getUpstreamDownstreamRelationshipAccess().getCustomerSupplierRelationshipParserRuleCall_0());
                    		
                    pushFollow(FOLLOW_2);
                    this_CustomerSupplierRelationship_0=ruleCustomerSupplierRelationship();

                    state._fsp--;


                    			current = this_CustomerSupplierRelationship_0;
                    			afterParserOrEnumRuleCall();
                    		

                    }
                    break;
                case 2 :
                    // InternalContextMappingDSL.g:2105:3: ( ( ( ( (otherlv_1= RULE_ID ) ) ( (otherlv_2= '[' otherlv_3= 'U' otherlv_4= ']' ) | ( (otherlv_5= '[' (otherlv_6= 'U' otherlv_7= ',' )? ( (lv_upstreamRoles_8_0= ruleUpstreamRole ) ) (otherlv_9= ',' ( (lv_upstreamRoles_10_0= ruleUpstreamRole ) ) )* ) otherlv_11= ']' ) )? otherlv_12= '->' ( (otherlv_13= '[' otherlv_14= 'D' otherlv_15= ']' ) | ( (otherlv_16= '[' (otherlv_17= 'D' otherlv_18= ',' )? ( (lv_downstreamRoles_19_0= ruleDownstreamRole ) ) (otherlv_20= ',' ( (lv_downstreamRoles_21_0= ruleDownstreamRole ) ) )* ) otherlv_22= ']' ) )? ( (otherlv_23= RULE_ID ) ) ) | ( ( (otherlv_24= RULE_ID ) ) ( (otherlv_25= '[' otherlv_26= 'D' otherlv_27= ']' ) | ( (otherlv_28= '[' (otherlv_29= 'D' otherlv_30= ',' )? ( (lv_downstreamRoles_31_0= ruleDownstreamRole ) ) (otherlv_32= ',' ( (lv_downstreamRoles_33_0= ruleDownstreamRole ) ) )* ) otherlv_34= ']' ) )? otherlv_35= '<-' ( (otherlv_36= '[' otherlv_37= 'U' otherlv_38= ']' ) | ( (otherlv_39= '[' (otherlv_40= 'U' otherlv_41= ',' )? ( (lv_upstreamRoles_42_0= ruleUpstreamRole ) ) (otherlv_43= ',' ( (lv_upstreamRoles_44_0= ruleUpstreamRole ) ) )* ) otherlv_45= ']' ) )? ( (otherlv_46= RULE_ID ) ) ) | ( ( (otherlv_47= RULE_ID ) ) (otherlv_48= '[' ( ( (lv_upstreamRoles_49_0= ruleUpstreamRole ) ) (otherlv_50= ',' ( (lv_upstreamRoles_51_0= ruleUpstreamRole ) ) )* )? otherlv_52= ']' )? otherlv_53= 'Upstream-Downstream' (otherlv_54= '[' ( ( (lv_downstreamRoles_55_0= ruleDownstreamRole ) ) (otherlv_56= ',' ( (lv_downstreamRoles_57_0= ruleDownstreamRole ) ) )* )? otherlv_58= ']' )? ( (otherlv_59= RULE_ID ) ) ) | ( ( (otherlv_60= RULE_ID ) ) (otherlv_61= '[' ( ( (lv_downstreamRoles_62_0= ruleDownstreamRole ) ) (otherlv_63= ',' ( (lv_downstreamRoles_64_0= ruleDownstreamRole ) ) )* )? otherlv_65= ']' )? otherlv_66= 'Downstream-Upstream' (otherlv_67= '[' ( ( (lv_upstreamRoles_68_0= ruleUpstreamRole ) ) (otherlv_69= ',' ( (lv_upstreamRoles_70_0= ruleUpstreamRole ) ) )* )? otherlv_71= ']' )? ( (otherlv_72= RULE_ID ) ) ) ) (otherlv_73= ':' ( (lv_name_74_0= RULE_ID ) ) )? (this_OPEN_75= RULE_OPEN ( ( ( ( ({...}? => ( ({...}? => (otherlv_77= 'implementationTechnology' (otherlv_78= '=' )? ( (lv_implementationTechnology_79_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_80= 'exposedAggregates' (otherlv_81= '=' )? ( (otherlv_82= RULE_ID ) ) ) (otherlv_83= ',' ( (otherlv_84= RULE_ID ) ) )* ( (lv_exposedAggregatesComment_85_0= RULE_SL_COMMENT ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_86= 'downstreamRights' (otherlv_87= '=' )? ( (lv_downstreamGovernanceRights_88_0= ruleDownstreamGovernanceRights ) ) ) ) ) ) )* ) ) ) this_CLOSE_89= RULE_CLOSE )? )
                    {
                    // InternalContextMappingDSL.g:2105:3: ( ( ( ( (otherlv_1= RULE_ID ) ) ( (otherlv_2= '[' otherlv_3= 'U' otherlv_4= ']' ) | ( (otherlv_5= '[' (otherlv_6= 'U' otherlv_7= ',' )? ( (lv_upstreamRoles_8_0= ruleUpstreamRole ) ) (otherlv_9= ',' ( (lv_upstreamRoles_10_0= ruleUpstreamRole ) ) )* ) otherlv_11= ']' ) )? otherlv_12= '->' ( (otherlv_13= '[' otherlv_14= 'D' otherlv_15= ']' ) | ( (otherlv_16= '[' (otherlv_17= 'D' otherlv_18= ',' )? ( (lv_downstreamRoles_19_0= ruleDownstreamRole ) ) (otherlv_20= ',' ( (lv_downstreamRoles_21_0= ruleDownstreamRole ) ) )* ) otherlv_22= ']' ) )? ( (otherlv_23= RULE_ID ) ) ) | ( ( (otherlv_24= RULE_ID ) ) ( (otherlv_25= '[' otherlv_26= 'D' otherlv_27= ']' ) | ( (otherlv_28= '[' (otherlv_29= 'D' otherlv_30= ',' )? ( (lv_downstreamRoles_31_0= ruleDownstreamRole ) ) (otherlv_32= ',' ( (lv_downstreamRoles_33_0= ruleDownstreamRole ) ) )* ) otherlv_34= ']' ) )? otherlv_35= '<-' ( (otherlv_36= '[' otherlv_37= 'U' otherlv_38= ']' ) | ( (otherlv_39= '[' (otherlv_40= 'U' otherlv_41= ',' )? ( (lv_upstreamRoles_42_0= ruleUpstreamRole ) ) (otherlv_43= ',' ( (lv_upstreamRoles_44_0= ruleUpstreamRole ) ) )* ) otherlv_45= ']' ) )? ( (otherlv_46= RULE_ID ) ) ) | ( ( (otherlv_47= RULE_ID ) ) (otherlv_48= '[' ( ( (lv_upstreamRoles_49_0= ruleUpstreamRole ) ) (otherlv_50= ',' ( (lv_upstreamRoles_51_0= ruleUpstreamRole ) ) )* )? otherlv_52= ']' )? otherlv_53= 'Upstream-Downstream' (otherlv_54= '[' ( ( (lv_downstreamRoles_55_0= ruleDownstreamRole ) ) (otherlv_56= ',' ( (lv_downstreamRoles_57_0= ruleDownstreamRole ) ) )* )? otherlv_58= ']' )? ( (otherlv_59= RULE_ID ) ) ) | ( ( (otherlv_60= RULE_ID ) ) (otherlv_61= '[' ( ( (lv_downstreamRoles_62_0= ruleDownstreamRole ) ) (otherlv_63= ',' ( (lv_downstreamRoles_64_0= ruleDownstreamRole ) ) )* )? otherlv_65= ']' )? otherlv_66= 'Downstream-Upstream' (otherlv_67= '[' ( ( (lv_upstreamRoles_68_0= ruleUpstreamRole ) ) (otherlv_69= ',' ( (lv_upstreamRoles_70_0= ruleUpstreamRole ) ) )* )? otherlv_71= ']' )? ( (otherlv_72= RULE_ID ) ) ) ) (otherlv_73= ':' ( (lv_name_74_0= RULE_ID ) ) )? (this_OPEN_75= RULE_OPEN ( ( ( ( ({...}? => ( ({...}? => (otherlv_77= 'implementationTechnology' (otherlv_78= '=' )? ( (lv_implementationTechnology_79_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_80= 'exposedAggregates' (otherlv_81= '=' )? ( (otherlv_82= RULE_ID ) ) ) (otherlv_83= ',' ( (otherlv_84= RULE_ID ) ) )* ( (lv_exposedAggregatesComment_85_0= RULE_SL_COMMENT ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_86= 'downstreamRights' (otherlv_87= '=' )? ( (lv_downstreamGovernanceRights_88_0= ruleDownstreamGovernanceRights ) ) ) ) ) ) )* ) ) ) this_CLOSE_89= RULE_CLOSE )? )
                    // InternalContextMappingDSL.g:2106:4: ( ( ( (otherlv_1= RULE_ID ) ) ( (otherlv_2= '[' otherlv_3= 'U' otherlv_4= ']' ) | ( (otherlv_5= '[' (otherlv_6= 'U' otherlv_7= ',' )? ( (lv_upstreamRoles_8_0= ruleUpstreamRole ) ) (otherlv_9= ',' ( (lv_upstreamRoles_10_0= ruleUpstreamRole ) ) )* ) otherlv_11= ']' ) )? otherlv_12= '->' ( (otherlv_13= '[' otherlv_14= 'D' otherlv_15= ']' ) | ( (otherlv_16= '[' (otherlv_17= 'D' otherlv_18= ',' )? ( (lv_downstreamRoles_19_0= ruleDownstreamRole ) ) (otherlv_20= ',' ( (lv_downstreamRoles_21_0= ruleDownstreamRole ) ) )* ) otherlv_22= ']' ) )? ( (otherlv_23= RULE_ID ) ) ) | ( ( (otherlv_24= RULE_ID ) ) ( (otherlv_25= '[' otherlv_26= 'D' otherlv_27= ']' ) | ( (otherlv_28= '[' (otherlv_29= 'D' otherlv_30= ',' )? ( (lv_downstreamRoles_31_0= ruleDownstreamRole ) ) (otherlv_32= ',' ( (lv_downstreamRoles_33_0= ruleDownstreamRole ) ) )* ) otherlv_34= ']' ) )? otherlv_35= '<-' ( (otherlv_36= '[' otherlv_37= 'U' otherlv_38= ']' ) | ( (otherlv_39= '[' (otherlv_40= 'U' otherlv_41= ',' )? ( (lv_upstreamRoles_42_0= ruleUpstreamRole ) ) (otherlv_43= ',' ( (lv_upstreamRoles_44_0= ruleUpstreamRole ) ) )* ) otherlv_45= ']' ) )? ( (otherlv_46= RULE_ID ) ) ) | ( ( (otherlv_47= RULE_ID ) ) (otherlv_48= '[' ( ( (lv_upstreamRoles_49_0= ruleUpstreamRole ) ) (otherlv_50= ',' ( (lv_upstreamRoles_51_0= ruleUpstreamRole ) ) )* )? otherlv_52= ']' )? otherlv_53= 'Upstream-Downstream' (otherlv_54= '[' ( ( (lv_downstreamRoles_55_0= ruleDownstreamRole ) ) (otherlv_56= ',' ( (lv_downstreamRoles_57_0= ruleDownstreamRole ) ) )* )? otherlv_58= ']' )? ( (otherlv_59= RULE_ID ) ) ) | ( ( (otherlv_60= RULE_ID ) ) (otherlv_61= '[' ( ( (lv_downstreamRoles_62_0= ruleDownstreamRole ) ) (otherlv_63= ',' ( (lv_downstreamRoles_64_0= ruleDownstreamRole ) ) )* )? otherlv_65= ']' )? otherlv_66= 'Downstream-Upstream' (otherlv_67= '[' ( ( (lv_upstreamRoles_68_0= ruleUpstreamRole ) ) (otherlv_69= ',' ( (lv_upstreamRoles_70_0= ruleUpstreamRole ) ) )* )? otherlv_71= ']' )? ( (otherlv_72= RULE_ID ) ) ) ) (otherlv_73= ':' ( (lv_name_74_0= RULE_ID ) ) )? (this_OPEN_75= RULE_OPEN ( ( ( ( ({...}? => ( ({...}? => (otherlv_77= 'implementationTechnology' (otherlv_78= '=' )? ( (lv_implementationTechnology_79_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_80= 'exposedAggregates' (otherlv_81= '=' )? ( (otherlv_82= RULE_ID ) ) ) (otherlv_83= ',' ( (otherlv_84= RULE_ID ) ) )* ( (lv_exposedAggregatesComment_85_0= RULE_SL_COMMENT ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_86= 'downstreamRights' (otherlv_87= '=' )? ( (lv_downstreamGovernanceRights_88_0= ruleDownstreamGovernanceRights ) ) ) ) ) ) )* ) ) ) this_CLOSE_89= RULE_CLOSE )?
                    {
                    // InternalContextMappingDSL.g:2106:4: ( ( ( (otherlv_1= RULE_ID ) ) ( (otherlv_2= '[' otherlv_3= 'U' otherlv_4= ']' ) | ( (otherlv_5= '[' (otherlv_6= 'U' otherlv_7= ',' )? ( (lv_upstreamRoles_8_0= ruleUpstreamRole ) ) (otherlv_9= ',' ( (lv_upstreamRoles_10_0= ruleUpstreamRole ) ) )* ) otherlv_11= ']' ) )? otherlv_12= '->' ( (otherlv_13= '[' otherlv_14= 'D' otherlv_15= ']' ) | ( (otherlv_16= '[' (otherlv_17= 'D' otherlv_18= ',' )? ( (lv_downstreamRoles_19_0= ruleDownstreamRole ) ) (otherlv_20= ',' ( (lv_downstreamRoles_21_0= ruleDownstreamRole ) ) )* ) otherlv_22= ']' ) )? ( (otherlv_23= RULE_ID ) ) ) | ( ( (otherlv_24= RULE_ID ) ) ( (otherlv_25= '[' otherlv_26= 'D' otherlv_27= ']' ) | ( (otherlv_28= '[' (otherlv_29= 'D' otherlv_30= ',' )? ( (lv_downstreamRoles_31_0= ruleDownstreamRole ) ) (otherlv_32= ',' ( (lv_downstreamRoles_33_0= ruleDownstreamRole ) ) )* ) otherlv_34= ']' ) )? otherlv_35= '<-' ( (otherlv_36= '[' otherlv_37= 'U' otherlv_38= ']' ) | ( (otherlv_39= '[' (otherlv_40= 'U' otherlv_41= ',' )? ( (lv_upstreamRoles_42_0= ruleUpstreamRole ) ) (otherlv_43= ',' ( (lv_upstreamRoles_44_0= ruleUpstreamRole ) ) )* ) otherlv_45= ']' ) )? ( (otherlv_46= RULE_ID ) ) ) | ( ( (otherlv_47= RULE_ID ) ) (otherlv_48= '[' ( ( (lv_upstreamRoles_49_0= ruleUpstreamRole ) ) (otherlv_50= ',' ( (lv_upstreamRoles_51_0= ruleUpstreamRole ) ) )* )? otherlv_52= ']' )? otherlv_53= 'Upstream-Downstream' (otherlv_54= '[' ( ( (lv_downstreamRoles_55_0= ruleDownstreamRole ) ) (otherlv_56= ',' ( (lv_downstreamRoles_57_0= ruleDownstreamRole ) ) )* )? otherlv_58= ']' )? ( (otherlv_59= RULE_ID ) ) ) | ( ( (otherlv_60= RULE_ID ) ) (otherlv_61= '[' ( ( (lv_downstreamRoles_62_0= ruleDownstreamRole ) ) (otherlv_63= ',' ( (lv_downstreamRoles_64_0= ruleDownstreamRole ) ) )* )? otherlv_65= ']' )? otherlv_66= 'Downstream-Upstream' (otherlv_67= '[' ( ( (lv_upstreamRoles_68_0= ruleUpstreamRole ) ) (otherlv_69= ',' ( (lv_upstreamRoles_70_0= ruleUpstreamRole ) ) )* )? otherlv_71= ']' )? ( (otherlv_72= RULE_ID ) ) ) )
                    int alt72=4;
                    alt72 = dfa72.predict(input);
                    switch (alt72) {
                        case 1 :
                            // InternalContextMappingDSL.g:2107:5: ( ( (otherlv_1= RULE_ID ) ) ( (otherlv_2= '[' otherlv_3= 'U' otherlv_4= ']' ) | ( (otherlv_5= '[' (otherlv_6= 'U' otherlv_7= ',' )? ( (lv_upstreamRoles_8_0= ruleUpstreamRole ) ) (otherlv_9= ',' ( (lv_upstreamRoles_10_0= ruleUpstreamRole ) ) )* ) otherlv_11= ']' ) )? otherlv_12= '->' ( (otherlv_13= '[' otherlv_14= 'D' otherlv_15= ']' ) | ( (otherlv_16= '[' (otherlv_17= 'D' otherlv_18= ',' )? ( (lv_downstreamRoles_19_0= ruleDownstreamRole ) ) (otherlv_20= ',' ( (lv_downstreamRoles_21_0= ruleDownstreamRole ) ) )* ) otherlv_22= ']' ) )? ( (otherlv_23= RULE_ID ) ) )
                            {
                            // InternalContextMappingDSL.g:2107:5: ( ( (otherlv_1= RULE_ID ) ) ( (otherlv_2= '[' otherlv_3= 'U' otherlv_4= ']' ) | ( (otherlv_5= '[' (otherlv_6= 'U' otherlv_7= ',' )? ( (lv_upstreamRoles_8_0= ruleUpstreamRole ) ) (otherlv_9= ',' ( (lv_upstreamRoles_10_0= ruleUpstreamRole ) ) )* ) otherlv_11= ']' ) )? otherlv_12= '->' ( (otherlv_13= '[' otherlv_14= 'D' otherlv_15= ']' ) | ( (otherlv_16= '[' (otherlv_17= 'D' otherlv_18= ',' )? ( (lv_downstreamRoles_19_0= ruleDownstreamRole ) ) (otherlv_20= ',' ( (lv_downstreamRoles_21_0= ruleDownstreamRole ) ) )* ) otherlv_22= ']' ) )? ( (otherlv_23= RULE_ID ) ) )
                            // InternalContextMappingDSL.g:2108:6: ( (otherlv_1= RULE_ID ) ) ( (otherlv_2= '[' otherlv_3= 'U' otherlv_4= ']' ) | ( (otherlv_5= '[' (otherlv_6= 'U' otherlv_7= ',' )? ( (lv_upstreamRoles_8_0= ruleUpstreamRole ) ) (otherlv_9= ',' ( (lv_upstreamRoles_10_0= ruleUpstreamRole ) ) )* ) otherlv_11= ']' ) )? otherlv_12= '->' ( (otherlv_13= '[' otherlv_14= 'D' otherlv_15= ']' ) | ( (otherlv_16= '[' (otherlv_17= 'D' otherlv_18= ',' )? ( (lv_downstreamRoles_19_0= ruleDownstreamRole ) ) (otherlv_20= ',' ( (lv_downstreamRoles_21_0= ruleDownstreamRole ) ) )* ) otherlv_22= ']' ) )? ( (otherlv_23= RULE_ID ) )
                            {
                            // InternalContextMappingDSL.g:2108:6: ( (otherlv_1= RULE_ID ) )
                            // InternalContextMappingDSL.g:2109:7: (otherlv_1= RULE_ID )
                            {
                            // InternalContextMappingDSL.g:2109:7: (otherlv_1= RULE_ID )
                            // InternalContextMappingDSL.g:2110:8: otherlv_1= RULE_ID
                            {

                            								if (current==null) {
                            									current = createModelElement(grammarAccess.getUpstreamDownstreamRelationshipRule());
                            								}
                            							
                            otherlv_1=(Token)match(input,RULE_ID,FOLLOW_38); 

                            								newLeafNode(otherlv_1, grammarAccess.getUpstreamDownstreamRelationshipAccess().getUpstreamBoundedContextCrossReference_1_0_0_0_0());
                            							

                            }


                            }

                            // InternalContextMappingDSL.g:2121:6: ( (otherlv_2= '[' otherlv_3= 'U' otherlv_4= ']' ) | ( (otherlv_5= '[' (otherlv_6= 'U' otherlv_7= ',' )? ( (lv_upstreamRoles_8_0= ruleUpstreamRole ) ) (otherlv_9= ',' ( (lv_upstreamRoles_10_0= ruleUpstreamRole ) ) )* ) otherlv_11= ']' ) )?
                            int alt50=3;
                            int LA50_0 = input.LA(1);

                            if ( (LA50_0==35) ) {
                                int LA50_1 = input.LA(2);

                                if ( (LA50_1==43) ) {
                                    int LA50_3 = input.LA(3);

                                    if ( (LA50_3==24) ) {
                                        alt50=2;
                                    }
                                    else if ( (LA50_3==37) ) {
                                        alt50=1;
                                    }
                                }
                                else if ( ((LA50_1>=193 && LA50_1<=194)) ) {
                                    alt50=2;
                                }
                            }
                            switch (alt50) {
                                case 1 :
                                    // InternalContextMappingDSL.g:2122:7: (otherlv_2= '[' otherlv_3= 'U' otherlv_4= ']' )
                                    {
                                    // InternalContextMappingDSL.g:2122:7: (otherlv_2= '[' otherlv_3= 'U' otherlv_4= ']' )
                                    // InternalContextMappingDSL.g:2123:8: otherlv_2= '[' otherlv_3= 'U' otherlv_4= ']'
                                    {
                                    otherlv_2=(Token)match(input,35,FOLLOW_39); 

                                    								newLeafNode(otherlv_2, grammarAccess.getUpstreamDownstreamRelationshipAccess().getLeftSquareBracketKeyword_1_0_0_1_0_0());
                                    							
                                    otherlv_3=(Token)match(input,43,FOLLOW_30); 

                                    								newLeafNode(otherlv_3, grammarAccess.getUpstreamDownstreamRelationshipAccess().getUKeyword_1_0_0_1_0_1());
                                    							
                                    otherlv_4=(Token)match(input,37,FOLLOW_40); 

                                    								newLeafNode(otherlv_4, grammarAccess.getUpstreamDownstreamRelationshipAccess().getRightSquareBracketKeyword_1_0_0_1_0_2());
                                    							

                                    }


                                    }
                                    break;
                                case 2 :
                                    // InternalContextMappingDSL.g:2137:7: ( (otherlv_5= '[' (otherlv_6= 'U' otherlv_7= ',' )? ( (lv_upstreamRoles_8_0= ruleUpstreamRole ) ) (otherlv_9= ',' ( (lv_upstreamRoles_10_0= ruleUpstreamRole ) ) )* ) otherlv_11= ']' )
                                    {
                                    // InternalContextMappingDSL.g:2137:7: ( (otherlv_5= '[' (otherlv_6= 'U' otherlv_7= ',' )? ( (lv_upstreamRoles_8_0= ruleUpstreamRole ) ) (otherlv_9= ',' ( (lv_upstreamRoles_10_0= ruleUpstreamRole ) ) )* ) otherlv_11= ']' )
                                    // InternalContextMappingDSL.g:2138:8: (otherlv_5= '[' (otherlv_6= 'U' otherlv_7= ',' )? ( (lv_upstreamRoles_8_0= ruleUpstreamRole ) ) (otherlv_9= ',' ( (lv_upstreamRoles_10_0= ruleUpstreamRole ) ) )* ) otherlv_11= ']'
                                    {
                                    // InternalContextMappingDSL.g:2138:8: (otherlv_5= '[' (otherlv_6= 'U' otherlv_7= ',' )? ( (lv_upstreamRoles_8_0= ruleUpstreamRole ) ) (otherlv_9= ',' ( (lv_upstreamRoles_10_0= ruleUpstreamRole ) ) )* )
                                    // InternalContextMappingDSL.g:2139:9: otherlv_5= '[' (otherlv_6= 'U' otherlv_7= ',' )? ( (lv_upstreamRoles_8_0= ruleUpstreamRole ) ) (otherlv_9= ',' ( (lv_upstreamRoles_10_0= ruleUpstreamRole ) ) )*
                                    {
                                    otherlv_5=(Token)match(input,35,FOLLOW_41); 

                                    									newLeafNode(otherlv_5, grammarAccess.getUpstreamDownstreamRelationshipAccess().getLeftSquareBracketKeyword_1_0_0_1_1_0_0());
                                    								
                                    // InternalContextMappingDSL.g:2143:9: (otherlv_6= 'U' otherlv_7= ',' )?
                                    int alt48=2;
                                    int LA48_0 = input.LA(1);

                                    if ( (LA48_0==43) ) {
                                        alt48=1;
                                    }
                                    switch (alt48) {
                                        case 1 :
                                            // InternalContextMappingDSL.g:2144:10: otherlv_6= 'U' otherlv_7= ','
                                            {
                                            otherlv_6=(Token)match(input,43,FOLLOW_42); 

                                            										newLeafNode(otherlv_6, grammarAccess.getUpstreamDownstreamRelationshipAccess().getUKeyword_1_0_0_1_1_0_1_0());
                                            									
                                            otherlv_7=(Token)match(input,24,FOLLOW_41); 

                                            										newLeafNode(otherlv_7, grammarAccess.getUpstreamDownstreamRelationshipAccess().getCommaKeyword_1_0_0_1_1_0_1_1());
                                            									

                                            }
                                            break;

                                    }

                                    // InternalContextMappingDSL.g:2153:9: ( (lv_upstreamRoles_8_0= ruleUpstreamRole ) )
                                    // InternalContextMappingDSL.g:2154:10: (lv_upstreamRoles_8_0= ruleUpstreamRole )
                                    {
                                    // InternalContextMappingDSL.g:2154:10: (lv_upstreamRoles_8_0= ruleUpstreamRole )
                                    // InternalContextMappingDSL.g:2155:11: lv_upstreamRoles_8_0= ruleUpstreamRole
                                    {

                                    											newCompositeNode(grammarAccess.getUpstreamDownstreamRelationshipAccess().getUpstreamRolesUpstreamRoleEnumRuleCall_1_0_0_1_1_0_2_0());
                                    										
                                    pushFollow(FOLLOW_43);
                                    lv_upstreamRoles_8_0=ruleUpstreamRole();

                                    state._fsp--;


                                    											if (current==null) {
                                    												current = createModelElementForParent(grammarAccess.getUpstreamDownstreamRelationshipRule());
                                    											}
                                    											add(
                                    												current,
                                    												"upstreamRoles",
                                    												lv_upstreamRoles_8_0,
                                    												"org.contextmapper.dsl.ContextMappingDSL.UpstreamRole");
                                    											afterParserOrEnumRuleCall();
                                    										

                                    }


                                    }

                                    // InternalContextMappingDSL.g:2172:9: (otherlv_9= ',' ( (lv_upstreamRoles_10_0= ruleUpstreamRole ) ) )*
                                    loop49:
                                    do {
                                        int alt49=2;
                                        int LA49_0 = input.LA(1);

                                        if ( (LA49_0==24) ) {
                                            alt49=1;
                                        }


                                        switch (alt49) {
                                    	case 1 :
                                    	    // InternalContextMappingDSL.g:2173:10: otherlv_9= ',' ( (lv_upstreamRoles_10_0= ruleUpstreamRole ) )
                                    	    {
                                    	    otherlv_9=(Token)match(input,24,FOLLOW_41); 

                                    	    										newLeafNode(otherlv_9, grammarAccess.getUpstreamDownstreamRelationshipAccess().getCommaKeyword_1_0_0_1_1_0_3_0());
                                    	    									
                                    	    // InternalContextMappingDSL.g:2177:10: ( (lv_upstreamRoles_10_0= ruleUpstreamRole ) )
                                    	    // InternalContextMappingDSL.g:2178:11: (lv_upstreamRoles_10_0= ruleUpstreamRole )
                                    	    {
                                    	    // InternalContextMappingDSL.g:2178:11: (lv_upstreamRoles_10_0= ruleUpstreamRole )
                                    	    // InternalContextMappingDSL.g:2179:12: lv_upstreamRoles_10_0= ruleUpstreamRole
                                    	    {

                                    	    												newCompositeNode(grammarAccess.getUpstreamDownstreamRelationshipAccess().getUpstreamRolesUpstreamRoleEnumRuleCall_1_0_0_1_1_0_3_1_0());
                                    	    											
                                    	    pushFollow(FOLLOW_43);
                                    	    lv_upstreamRoles_10_0=ruleUpstreamRole();

                                    	    state._fsp--;


                                    	    												if (current==null) {
                                    	    													current = createModelElementForParent(grammarAccess.getUpstreamDownstreamRelationshipRule());
                                    	    												}
                                    	    												add(
                                    	    													current,
                                    	    													"upstreamRoles",
                                    	    													lv_upstreamRoles_10_0,
                                    	    													"org.contextmapper.dsl.ContextMappingDSL.UpstreamRole");
                                    	    												afterParserOrEnumRuleCall();
                                    	    											

                                    	    }


                                    	    }


                                    	    }
                                    	    break;

                                    	default :
                                    	    break loop49;
                                        }
                                    } while (true);


                                    }

                                    otherlv_11=(Token)match(input,37,FOLLOW_40); 

                                    								newLeafNode(otherlv_11, grammarAccess.getUpstreamDownstreamRelationshipAccess().getRightSquareBracketKeyword_1_0_0_1_1_1());
                                    							

                                    }


                                    }
                                    break;

                            }

                            otherlv_12=(Token)match(input,44,FOLLOW_44); 

                            						newLeafNode(otherlv_12, grammarAccess.getUpstreamDownstreamRelationshipAccess().getHyphenMinusGreaterThanSignKeyword_1_0_0_2());
                            					
                            // InternalContextMappingDSL.g:2208:6: ( (otherlv_13= '[' otherlv_14= 'D' otherlv_15= ']' ) | ( (otherlv_16= '[' (otherlv_17= 'D' otherlv_18= ',' )? ( (lv_downstreamRoles_19_0= ruleDownstreamRole ) ) (otherlv_20= ',' ( (lv_downstreamRoles_21_0= ruleDownstreamRole ) ) )* ) otherlv_22= ']' ) )?
                            int alt53=3;
                            int LA53_0 = input.LA(1);

                            if ( (LA53_0==35) ) {
                                int LA53_1 = input.LA(2);

                                if ( (LA53_1==45) ) {
                                    int LA53_3 = input.LA(3);

                                    if ( (LA53_3==24) ) {
                                        alt53=2;
                                    }
                                    else if ( (LA53_3==37) ) {
                                        alt53=1;
                                    }
                                }
                                else if ( ((LA53_1>=195 && LA53_1<=196)) ) {
                                    alt53=2;
                                }
                            }
                            switch (alt53) {
                                case 1 :
                                    // InternalContextMappingDSL.g:2209:7: (otherlv_13= '[' otherlv_14= 'D' otherlv_15= ']' )
                                    {
                                    // InternalContextMappingDSL.g:2209:7: (otherlv_13= '[' otherlv_14= 'D' otherlv_15= ']' )
                                    // InternalContextMappingDSL.g:2210:8: otherlv_13= '[' otherlv_14= 'D' otherlv_15= ']'
                                    {
                                    otherlv_13=(Token)match(input,35,FOLLOW_45); 

                                    								newLeafNode(otherlv_13, grammarAccess.getUpstreamDownstreamRelationshipAccess().getLeftSquareBracketKeyword_1_0_0_3_0_0());
                                    							
                                    otherlv_14=(Token)match(input,45,FOLLOW_30); 

                                    								newLeafNode(otherlv_14, grammarAccess.getUpstreamDownstreamRelationshipAccess().getDKeyword_1_0_0_3_0_1());
                                    							
                                    otherlv_15=(Token)match(input,37,FOLLOW_10); 

                                    								newLeafNode(otherlv_15, grammarAccess.getUpstreamDownstreamRelationshipAccess().getRightSquareBracketKeyword_1_0_0_3_0_2());
                                    							

                                    }


                                    }
                                    break;
                                case 2 :
                                    // InternalContextMappingDSL.g:2224:7: ( (otherlv_16= '[' (otherlv_17= 'D' otherlv_18= ',' )? ( (lv_downstreamRoles_19_0= ruleDownstreamRole ) ) (otherlv_20= ',' ( (lv_downstreamRoles_21_0= ruleDownstreamRole ) ) )* ) otherlv_22= ']' )
                                    {
                                    // InternalContextMappingDSL.g:2224:7: ( (otherlv_16= '[' (otherlv_17= 'D' otherlv_18= ',' )? ( (lv_downstreamRoles_19_0= ruleDownstreamRole ) ) (otherlv_20= ',' ( (lv_downstreamRoles_21_0= ruleDownstreamRole ) ) )* ) otherlv_22= ']' )
                                    // InternalContextMappingDSL.g:2225:8: (otherlv_16= '[' (otherlv_17= 'D' otherlv_18= ',' )? ( (lv_downstreamRoles_19_0= ruleDownstreamRole ) ) (otherlv_20= ',' ( (lv_downstreamRoles_21_0= ruleDownstreamRole ) ) )* ) otherlv_22= ']'
                                    {
                                    // InternalContextMappingDSL.g:2225:8: (otherlv_16= '[' (otherlv_17= 'D' otherlv_18= ',' )? ( (lv_downstreamRoles_19_0= ruleDownstreamRole ) ) (otherlv_20= ',' ( (lv_downstreamRoles_21_0= ruleDownstreamRole ) ) )* )
                                    // InternalContextMappingDSL.g:2226:9: otherlv_16= '[' (otherlv_17= 'D' otherlv_18= ',' )? ( (lv_downstreamRoles_19_0= ruleDownstreamRole ) ) (otherlv_20= ',' ( (lv_downstreamRoles_21_0= ruleDownstreamRole ) ) )*
                                    {
                                    otherlv_16=(Token)match(input,35,FOLLOW_46); 

                                    									newLeafNode(otherlv_16, grammarAccess.getUpstreamDownstreamRelationshipAccess().getLeftSquareBracketKeyword_1_0_0_3_1_0_0());
                                    								
                                    // InternalContextMappingDSL.g:2230:9: (otherlv_17= 'D' otherlv_18= ',' )?
                                    int alt51=2;
                                    int LA51_0 = input.LA(1);

                                    if ( (LA51_0==45) ) {
                                        alt51=1;
                                    }
                                    switch (alt51) {
                                        case 1 :
                                            // InternalContextMappingDSL.g:2231:10: otherlv_17= 'D' otherlv_18= ','
                                            {
                                            otherlv_17=(Token)match(input,45,FOLLOW_42); 

                                            										newLeafNode(otherlv_17, grammarAccess.getUpstreamDownstreamRelationshipAccess().getDKeyword_1_0_0_3_1_0_1_0());
                                            									
                                            otherlv_18=(Token)match(input,24,FOLLOW_46); 

                                            										newLeafNode(otherlv_18, grammarAccess.getUpstreamDownstreamRelationshipAccess().getCommaKeyword_1_0_0_3_1_0_1_1());
                                            									

                                            }
                                            break;

                                    }

                                    // InternalContextMappingDSL.g:2240:9: ( (lv_downstreamRoles_19_0= ruleDownstreamRole ) )
                                    // InternalContextMappingDSL.g:2241:10: (lv_downstreamRoles_19_0= ruleDownstreamRole )
                                    {
                                    // InternalContextMappingDSL.g:2241:10: (lv_downstreamRoles_19_0= ruleDownstreamRole )
                                    // InternalContextMappingDSL.g:2242:11: lv_downstreamRoles_19_0= ruleDownstreamRole
                                    {

                                    											newCompositeNode(grammarAccess.getUpstreamDownstreamRelationshipAccess().getDownstreamRolesDownstreamRoleEnumRuleCall_1_0_0_3_1_0_2_0());
                                    										
                                    pushFollow(FOLLOW_43);
                                    lv_downstreamRoles_19_0=ruleDownstreamRole();

                                    state._fsp--;


                                    											if (current==null) {
                                    												current = createModelElementForParent(grammarAccess.getUpstreamDownstreamRelationshipRule());
                                    											}
                                    											add(
                                    												current,
                                    												"downstreamRoles",
                                    												lv_downstreamRoles_19_0,
                                    												"org.contextmapper.dsl.ContextMappingDSL.DownstreamRole");
                                    											afterParserOrEnumRuleCall();
                                    										

                                    }


                                    }

                                    // InternalContextMappingDSL.g:2259:9: (otherlv_20= ',' ( (lv_downstreamRoles_21_0= ruleDownstreamRole ) ) )*
                                    loop52:
                                    do {
                                        int alt52=2;
                                        int LA52_0 = input.LA(1);

                                        if ( (LA52_0==24) ) {
                                            alt52=1;
                                        }


                                        switch (alt52) {
                                    	case 1 :
                                    	    // InternalContextMappingDSL.g:2260:10: otherlv_20= ',' ( (lv_downstreamRoles_21_0= ruleDownstreamRole ) )
                                    	    {
                                    	    otherlv_20=(Token)match(input,24,FOLLOW_46); 

                                    	    										newLeafNode(otherlv_20, grammarAccess.getUpstreamDownstreamRelationshipAccess().getCommaKeyword_1_0_0_3_1_0_3_0());
                                    	    									
                                    	    // InternalContextMappingDSL.g:2264:10: ( (lv_downstreamRoles_21_0= ruleDownstreamRole ) )
                                    	    // InternalContextMappingDSL.g:2265:11: (lv_downstreamRoles_21_0= ruleDownstreamRole )
                                    	    {
                                    	    // InternalContextMappingDSL.g:2265:11: (lv_downstreamRoles_21_0= ruleDownstreamRole )
                                    	    // InternalContextMappingDSL.g:2266:12: lv_downstreamRoles_21_0= ruleDownstreamRole
                                    	    {

                                    	    												newCompositeNode(grammarAccess.getUpstreamDownstreamRelationshipAccess().getDownstreamRolesDownstreamRoleEnumRuleCall_1_0_0_3_1_0_3_1_0());
                                    	    											
                                    	    pushFollow(FOLLOW_43);
                                    	    lv_downstreamRoles_21_0=ruleDownstreamRole();

                                    	    state._fsp--;


                                    	    												if (current==null) {
                                    	    													current = createModelElementForParent(grammarAccess.getUpstreamDownstreamRelationshipRule());
                                    	    												}
                                    	    												add(
                                    	    													current,
                                    	    													"downstreamRoles",
                                    	    													lv_downstreamRoles_21_0,
                                    	    													"org.contextmapper.dsl.ContextMappingDSL.DownstreamRole");
                                    	    												afterParserOrEnumRuleCall();
                                    	    											

                                    	    }


                                    	    }


                                    	    }
                                    	    break;

                                    	default :
                                    	    break loop52;
                                        }
                                    } while (true);


                                    }

                                    otherlv_22=(Token)match(input,37,FOLLOW_10); 

                                    								newLeafNode(otherlv_22, grammarAccess.getUpstreamDownstreamRelationshipAccess().getRightSquareBracketKeyword_1_0_0_3_1_1());
                                    							

                                    }


                                    }
                                    break;

                            }

                            // InternalContextMappingDSL.g:2291:6: ( (otherlv_23= RULE_ID ) )
                            // InternalContextMappingDSL.g:2292:7: (otherlv_23= RULE_ID )
                            {
                            // InternalContextMappingDSL.g:2292:7: (otherlv_23= RULE_ID )
                            // InternalContextMappingDSL.g:2293:8: otherlv_23= RULE_ID
                            {

                            								if (current==null) {
                            									current = createModelElement(grammarAccess.getUpstreamDownstreamRelationshipRule());
                            								}
                            							
                            otherlv_23=(Token)match(input,RULE_ID,FOLLOW_32); 

                            								newLeafNode(otherlv_23, grammarAccess.getUpstreamDownstreamRelationshipAccess().getDownstreamBoundedContextCrossReference_1_0_0_4_0());
                            							

                            }


                            }


                            }


                            }
                            break;
                        case 2 :
                            // InternalContextMappingDSL.g:2306:5: ( ( (otherlv_24= RULE_ID ) ) ( (otherlv_25= '[' otherlv_26= 'D' otherlv_27= ']' ) | ( (otherlv_28= '[' (otherlv_29= 'D' otherlv_30= ',' )? ( (lv_downstreamRoles_31_0= ruleDownstreamRole ) ) (otherlv_32= ',' ( (lv_downstreamRoles_33_0= ruleDownstreamRole ) ) )* ) otherlv_34= ']' ) )? otherlv_35= '<-' ( (otherlv_36= '[' otherlv_37= 'U' otherlv_38= ']' ) | ( (otherlv_39= '[' (otherlv_40= 'U' otherlv_41= ',' )? ( (lv_upstreamRoles_42_0= ruleUpstreamRole ) ) (otherlv_43= ',' ( (lv_upstreamRoles_44_0= ruleUpstreamRole ) ) )* ) otherlv_45= ']' ) )? ( (otherlv_46= RULE_ID ) ) )
                            {
                            // InternalContextMappingDSL.g:2306:5: ( ( (otherlv_24= RULE_ID ) ) ( (otherlv_25= '[' otherlv_26= 'D' otherlv_27= ']' ) | ( (otherlv_28= '[' (otherlv_29= 'D' otherlv_30= ',' )? ( (lv_downstreamRoles_31_0= ruleDownstreamRole ) ) (otherlv_32= ',' ( (lv_downstreamRoles_33_0= ruleDownstreamRole ) ) )* ) otherlv_34= ']' ) )? otherlv_35= '<-' ( (otherlv_36= '[' otherlv_37= 'U' otherlv_38= ']' ) | ( (otherlv_39= '[' (otherlv_40= 'U' otherlv_41= ',' )? ( (lv_upstreamRoles_42_0= ruleUpstreamRole ) ) (otherlv_43= ',' ( (lv_upstreamRoles_44_0= ruleUpstreamRole ) ) )* ) otherlv_45= ']' ) )? ( (otherlv_46= RULE_ID ) ) )
                            // InternalContextMappingDSL.g:2307:6: ( (otherlv_24= RULE_ID ) ) ( (otherlv_25= '[' otherlv_26= 'D' otherlv_27= ']' ) | ( (otherlv_28= '[' (otherlv_29= 'D' otherlv_30= ',' )? ( (lv_downstreamRoles_31_0= ruleDownstreamRole ) ) (otherlv_32= ',' ( (lv_downstreamRoles_33_0= ruleDownstreamRole ) ) )* ) otherlv_34= ']' ) )? otherlv_35= '<-' ( (otherlv_36= '[' otherlv_37= 'U' otherlv_38= ']' ) | ( (otherlv_39= '[' (otherlv_40= 'U' otherlv_41= ',' )? ( (lv_upstreamRoles_42_0= ruleUpstreamRole ) ) (otherlv_43= ',' ( (lv_upstreamRoles_44_0= ruleUpstreamRole ) ) )* ) otherlv_45= ']' ) )? ( (otherlv_46= RULE_ID ) )
                            {
                            // InternalContextMappingDSL.g:2307:6: ( (otherlv_24= RULE_ID ) )
                            // InternalContextMappingDSL.g:2308:7: (otherlv_24= RULE_ID )
                            {
                            // InternalContextMappingDSL.g:2308:7: (otherlv_24= RULE_ID )
                            // InternalContextMappingDSL.g:2309:8: otherlv_24= RULE_ID
                            {

                            								if (current==null) {
                            									current = createModelElement(grammarAccess.getUpstreamDownstreamRelationshipRule());
                            								}
                            							
                            otherlv_24=(Token)match(input,RULE_ID,FOLLOW_47); 

                            								newLeafNode(otherlv_24, grammarAccess.getUpstreamDownstreamRelationshipAccess().getDownstreamBoundedContextCrossReference_1_0_1_0_0());
                            							

                            }


                            }

                            // InternalContextMappingDSL.g:2320:6: ( (otherlv_25= '[' otherlv_26= 'D' otherlv_27= ']' ) | ( (otherlv_28= '[' (otherlv_29= 'D' otherlv_30= ',' )? ( (lv_downstreamRoles_31_0= ruleDownstreamRole ) ) (otherlv_32= ',' ( (lv_downstreamRoles_33_0= ruleDownstreamRole ) ) )* ) otherlv_34= ']' ) )?
                            int alt56=3;
                            int LA56_0 = input.LA(1);

                            if ( (LA56_0==35) ) {
                                int LA56_1 = input.LA(2);

                                if ( (LA56_1==45) ) {
                                    int LA56_3 = input.LA(3);

                                    if ( (LA56_3==24) ) {
                                        alt56=2;
                                    }
                                    else if ( (LA56_3==37) ) {
                                        alt56=1;
                                    }
                                }
                                else if ( ((LA56_1>=195 && LA56_1<=196)) ) {
                                    alt56=2;
                                }
                            }
                            switch (alt56) {
                                case 1 :
                                    // InternalContextMappingDSL.g:2321:7: (otherlv_25= '[' otherlv_26= 'D' otherlv_27= ']' )
                                    {
                                    // InternalContextMappingDSL.g:2321:7: (otherlv_25= '[' otherlv_26= 'D' otherlv_27= ']' )
                                    // InternalContextMappingDSL.g:2322:8: otherlv_25= '[' otherlv_26= 'D' otherlv_27= ']'
                                    {
                                    otherlv_25=(Token)match(input,35,FOLLOW_45); 

                                    								newLeafNode(otherlv_25, grammarAccess.getUpstreamDownstreamRelationshipAccess().getLeftSquareBracketKeyword_1_0_1_1_0_0());
                                    							
                                    otherlv_26=(Token)match(input,45,FOLLOW_30); 

                                    								newLeafNode(otherlv_26, grammarAccess.getUpstreamDownstreamRelationshipAccess().getDKeyword_1_0_1_1_0_1());
                                    							
                                    otherlv_27=(Token)match(input,37,FOLLOW_48); 

                                    								newLeafNode(otherlv_27, grammarAccess.getUpstreamDownstreamRelationshipAccess().getRightSquareBracketKeyword_1_0_1_1_0_2());
                                    							

                                    }


                                    }
                                    break;
                                case 2 :
                                    // InternalContextMappingDSL.g:2336:7: ( (otherlv_28= '[' (otherlv_29= 'D' otherlv_30= ',' )? ( (lv_downstreamRoles_31_0= ruleDownstreamRole ) ) (otherlv_32= ',' ( (lv_downstreamRoles_33_0= ruleDownstreamRole ) ) )* ) otherlv_34= ']' )
                                    {
                                    // InternalContextMappingDSL.g:2336:7: ( (otherlv_28= '[' (otherlv_29= 'D' otherlv_30= ',' )? ( (lv_downstreamRoles_31_0= ruleDownstreamRole ) ) (otherlv_32= ',' ( (lv_downstreamRoles_33_0= ruleDownstreamRole ) ) )* ) otherlv_34= ']' )
                                    // InternalContextMappingDSL.g:2337:8: (otherlv_28= '[' (otherlv_29= 'D' otherlv_30= ',' )? ( (lv_downstreamRoles_31_0= ruleDownstreamRole ) ) (otherlv_32= ',' ( (lv_downstreamRoles_33_0= ruleDownstreamRole ) ) )* ) otherlv_34= ']'
                                    {
                                    // InternalContextMappingDSL.g:2337:8: (otherlv_28= '[' (otherlv_29= 'D' otherlv_30= ',' )? ( (lv_downstreamRoles_31_0= ruleDownstreamRole ) ) (otherlv_32= ',' ( (lv_downstreamRoles_33_0= ruleDownstreamRole ) ) )* )
                                    // InternalContextMappingDSL.g:2338:9: otherlv_28= '[' (otherlv_29= 'D' otherlv_30= ',' )? ( (lv_downstreamRoles_31_0= ruleDownstreamRole ) ) (otherlv_32= ',' ( (lv_downstreamRoles_33_0= ruleDownstreamRole ) ) )*
                                    {
                                    otherlv_28=(Token)match(input,35,FOLLOW_46); 

                                    									newLeafNode(otherlv_28, grammarAccess.getUpstreamDownstreamRelationshipAccess().getLeftSquareBracketKeyword_1_0_1_1_1_0_0());
                                    								
                                    // InternalContextMappingDSL.g:2342:9: (otherlv_29= 'D' otherlv_30= ',' )?
                                    int alt54=2;
                                    int LA54_0 = input.LA(1);

                                    if ( (LA54_0==45) ) {
                                        alt54=1;
                                    }
                                    switch (alt54) {
                                        case 1 :
                                            // InternalContextMappingDSL.g:2343:10: otherlv_29= 'D' otherlv_30= ','
                                            {
                                            otherlv_29=(Token)match(input,45,FOLLOW_42); 

                                            										newLeafNode(otherlv_29, grammarAccess.getUpstreamDownstreamRelationshipAccess().getDKeyword_1_0_1_1_1_0_1_0());
                                            									
                                            otherlv_30=(Token)match(input,24,FOLLOW_46); 

                                            										newLeafNode(otherlv_30, grammarAccess.getUpstreamDownstreamRelationshipAccess().getCommaKeyword_1_0_1_1_1_0_1_1());
                                            									

                                            }
                                            break;

                                    }

                                    // InternalContextMappingDSL.g:2352:9: ( (lv_downstreamRoles_31_0= ruleDownstreamRole ) )
                                    // InternalContextMappingDSL.g:2353:10: (lv_downstreamRoles_31_0= ruleDownstreamRole )
                                    {
                                    // InternalContextMappingDSL.g:2353:10: (lv_downstreamRoles_31_0= ruleDownstreamRole )
                                    // InternalContextMappingDSL.g:2354:11: lv_downstreamRoles_31_0= ruleDownstreamRole
                                    {

                                    											newCompositeNode(grammarAccess.getUpstreamDownstreamRelationshipAccess().getDownstreamRolesDownstreamRoleEnumRuleCall_1_0_1_1_1_0_2_0());
                                    										
                                    pushFollow(FOLLOW_43);
                                    lv_downstreamRoles_31_0=ruleDownstreamRole();

                                    state._fsp--;


                                    											if (current==null) {
                                    												current = createModelElementForParent(grammarAccess.getUpstreamDownstreamRelationshipRule());
                                    											}
                                    											add(
                                    												current,
                                    												"downstreamRoles",
                                    												lv_downstreamRoles_31_0,
                                    												"org.contextmapper.dsl.ContextMappingDSL.DownstreamRole");
                                    											afterParserOrEnumRuleCall();
                                    										

                                    }


                                    }

                                    // InternalContextMappingDSL.g:2371:9: (otherlv_32= ',' ( (lv_downstreamRoles_33_0= ruleDownstreamRole ) ) )*
                                    loop55:
                                    do {
                                        int alt55=2;
                                        int LA55_0 = input.LA(1);

                                        if ( (LA55_0==24) ) {
                                            alt55=1;
                                        }


                                        switch (alt55) {
                                    	case 1 :
                                    	    // InternalContextMappingDSL.g:2372:10: otherlv_32= ',' ( (lv_downstreamRoles_33_0= ruleDownstreamRole ) )
                                    	    {
                                    	    otherlv_32=(Token)match(input,24,FOLLOW_46); 

                                    	    										newLeafNode(otherlv_32, grammarAccess.getUpstreamDownstreamRelationshipAccess().getCommaKeyword_1_0_1_1_1_0_3_0());
                                    	    									
                                    	    // InternalContextMappingDSL.g:2376:10: ( (lv_downstreamRoles_33_0= ruleDownstreamRole ) )
                                    	    // InternalContextMappingDSL.g:2377:11: (lv_downstreamRoles_33_0= ruleDownstreamRole )
                                    	    {
                                    	    // InternalContextMappingDSL.g:2377:11: (lv_downstreamRoles_33_0= ruleDownstreamRole )
                                    	    // InternalContextMappingDSL.g:2378:12: lv_downstreamRoles_33_0= ruleDownstreamRole
                                    	    {

                                    	    												newCompositeNode(grammarAccess.getUpstreamDownstreamRelationshipAccess().getDownstreamRolesDownstreamRoleEnumRuleCall_1_0_1_1_1_0_3_1_0());
                                    	    											
                                    	    pushFollow(FOLLOW_43);
                                    	    lv_downstreamRoles_33_0=ruleDownstreamRole();

                                    	    state._fsp--;


                                    	    												if (current==null) {
                                    	    													current = createModelElementForParent(grammarAccess.getUpstreamDownstreamRelationshipRule());
                                    	    												}
                                    	    												add(
                                    	    													current,
                                    	    													"downstreamRoles",
                                    	    													lv_downstreamRoles_33_0,
                                    	    													"org.contextmapper.dsl.ContextMappingDSL.DownstreamRole");
                                    	    												afterParserOrEnumRuleCall();
                                    	    											

                                    	    }


                                    	    }


                                    	    }
                                    	    break;

                                    	default :
                                    	    break loop55;
                                        }
                                    } while (true);


                                    }

                                    otherlv_34=(Token)match(input,37,FOLLOW_48); 

                                    								newLeafNode(otherlv_34, grammarAccess.getUpstreamDownstreamRelationshipAccess().getRightSquareBracketKeyword_1_0_1_1_1_1());
                                    							

                                    }


                                    }
                                    break;

                            }

                            otherlv_35=(Token)match(input,46,FOLLOW_44); 

                            						newLeafNode(otherlv_35, grammarAccess.getUpstreamDownstreamRelationshipAccess().getLessThanSignHyphenMinusKeyword_1_0_1_2());
                            					
                            // InternalContextMappingDSL.g:2407:6: ( (otherlv_36= '[' otherlv_37= 'U' otherlv_38= ']' ) | ( (otherlv_39= '[' (otherlv_40= 'U' otherlv_41= ',' )? ( (lv_upstreamRoles_42_0= ruleUpstreamRole ) ) (otherlv_43= ',' ( (lv_upstreamRoles_44_0= ruleUpstreamRole ) ) )* ) otherlv_45= ']' ) )?
                            int alt59=3;
                            int LA59_0 = input.LA(1);

                            if ( (LA59_0==35) ) {
                                int LA59_1 = input.LA(2);

                                if ( (LA59_1==43) ) {
                                    int LA59_3 = input.LA(3);

                                    if ( (LA59_3==37) ) {
                                        alt59=1;
                                    }
                                    else if ( (LA59_3==24) ) {
                                        alt59=2;
                                    }
                                }
                                else if ( ((LA59_1>=193 && LA59_1<=194)) ) {
                                    alt59=2;
                                }
                            }
                            switch (alt59) {
                                case 1 :
                                    // InternalContextMappingDSL.g:2408:7: (otherlv_36= '[' otherlv_37= 'U' otherlv_38= ']' )
                                    {
                                    // InternalContextMappingDSL.g:2408:7: (otherlv_36= '[' otherlv_37= 'U' otherlv_38= ']' )
                                    // InternalContextMappingDSL.g:2409:8: otherlv_36= '[' otherlv_37= 'U' otherlv_38= ']'
                                    {
                                    otherlv_36=(Token)match(input,35,FOLLOW_39); 

                                    								newLeafNode(otherlv_36, grammarAccess.getUpstreamDownstreamRelationshipAccess().getLeftSquareBracketKeyword_1_0_1_3_0_0());
                                    							
                                    otherlv_37=(Token)match(input,43,FOLLOW_30); 

                                    								newLeafNode(otherlv_37, grammarAccess.getUpstreamDownstreamRelationshipAccess().getUKeyword_1_0_1_3_0_1());
                                    							
                                    otherlv_38=(Token)match(input,37,FOLLOW_10); 

                                    								newLeafNode(otherlv_38, grammarAccess.getUpstreamDownstreamRelationshipAccess().getRightSquareBracketKeyword_1_0_1_3_0_2());
                                    							

                                    }


                                    }
                                    break;
                                case 2 :
                                    // InternalContextMappingDSL.g:2423:7: ( (otherlv_39= '[' (otherlv_40= 'U' otherlv_41= ',' )? ( (lv_upstreamRoles_42_0= ruleUpstreamRole ) ) (otherlv_43= ',' ( (lv_upstreamRoles_44_0= ruleUpstreamRole ) ) )* ) otherlv_45= ']' )
                                    {
                                    // InternalContextMappingDSL.g:2423:7: ( (otherlv_39= '[' (otherlv_40= 'U' otherlv_41= ',' )? ( (lv_upstreamRoles_42_0= ruleUpstreamRole ) ) (otherlv_43= ',' ( (lv_upstreamRoles_44_0= ruleUpstreamRole ) ) )* ) otherlv_45= ']' )
                                    // InternalContextMappingDSL.g:2424:8: (otherlv_39= '[' (otherlv_40= 'U' otherlv_41= ',' )? ( (lv_upstreamRoles_42_0= ruleUpstreamRole ) ) (otherlv_43= ',' ( (lv_upstreamRoles_44_0= ruleUpstreamRole ) ) )* ) otherlv_45= ']'
                                    {
                                    // InternalContextMappingDSL.g:2424:8: (otherlv_39= '[' (otherlv_40= 'U' otherlv_41= ',' )? ( (lv_upstreamRoles_42_0= ruleUpstreamRole ) ) (otherlv_43= ',' ( (lv_upstreamRoles_44_0= ruleUpstreamRole ) ) )* )
                                    // InternalContextMappingDSL.g:2425:9: otherlv_39= '[' (otherlv_40= 'U' otherlv_41= ',' )? ( (lv_upstreamRoles_42_0= ruleUpstreamRole ) ) (otherlv_43= ',' ( (lv_upstreamRoles_44_0= ruleUpstreamRole ) ) )*
                                    {
                                    otherlv_39=(Token)match(input,35,FOLLOW_41); 

                                    									newLeafNode(otherlv_39, grammarAccess.getUpstreamDownstreamRelationshipAccess().getLeftSquareBracketKeyword_1_0_1_3_1_0_0());
                                    								
                                    // InternalContextMappingDSL.g:2429:9: (otherlv_40= 'U' otherlv_41= ',' )?
                                    int alt57=2;
                                    int LA57_0 = input.LA(1);

                                    if ( (LA57_0==43) ) {
                                        alt57=1;
                                    }
                                    switch (alt57) {
                                        case 1 :
                                            // InternalContextMappingDSL.g:2430:10: otherlv_40= 'U' otherlv_41= ','
                                            {
                                            otherlv_40=(Token)match(input,43,FOLLOW_42); 

                                            										newLeafNode(otherlv_40, grammarAccess.getUpstreamDownstreamRelationshipAccess().getUKeyword_1_0_1_3_1_0_1_0());
                                            									
                                            otherlv_41=(Token)match(input,24,FOLLOW_41); 

                                            										newLeafNode(otherlv_41, grammarAccess.getUpstreamDownstreamRelationshipAccess().getCommaKeyword_1_0_1_3_1_0_1_1());
                                            									

                                            }
                                            break;

                                    }

                                    // InternalContextMappingDSL.g:2439:9: ( (lv_upstreamRoles_42_0= ruleUpstreamRole ) )
                                    // InternalContextMappingDSL.g:2440:10: (lv_upstreamRoles_42_0= ruleUpstreamRole )
                                    {
                                    // InternalContextMappingDSL.g:2440:10: (lv_upstreamRoles_42_0= ruleUpstreamRole )
                                    // InternalContextMappingDSL.g:2441:11: lv_upstreamRoles_42_0= ruleUpstreamRole
                                    {

                                    											newCompositeNode(grammarAccess.getUpstreamDownstreamRelationshipAccess().getUpstreamRolesUpstreamRoleEnumRuleCall_1_0_1_3_1_0_2_0());
                                    										
                                    pushFollow(FOLLOW_43);
                                    lv_upstreamRoles_42_0=ruleUpstreamRole();

                                    state._fsp--;


                                    											if (current==null) {
                                    												current = createModelElementForParent(grammarAccess.getUpstreamDownstreamRelationshipRule());
                                    											}
                                    											add(
                                    												current,
                                    												"upstreamRoles",
                                    												lv_upstreamRoles_42_0,
                                    												"org.contextmapper.dsl.ContextMappingDSL.UpstreamRole");
                                    											afterParserOrEnumRuleCall();
                                    										

                                    }


                                    }

                                    // InternalContextMappingDSL.g:2458:9: (otherlv_43= ',' ( (lv_upstreamRoles_44_0= ruleUpstreamRole ) ) )*
                                    loop58:
                                    do {
                                        int alt58=2;
                                        int LA58_0 = input.LA(1);

                                        if ( (LA58_0==24) ) {
                                            alt58=1;
                                        }


                                        switch (alt58) {
                                    	case 1 :
                                    	    // InternalContextMappingDSL.g:2459:10: otherlv_43= ',' ( (lv_upstreamRoles_44_0= ruleUpstreamRole ) )
                                    	    {
                                    	    otherlv_43=(Token)match(input,24,FOLLOW_41); 

                                    	    										newLeafNode(otherlv_43, grammarAccess.getUpstreamDownstreamRelationshipAccess().getCommaKeyword_1_0_1_3_1_0_3_0());
                                    	    									
                                    	    // InternalContextMappingDSL.g:2463:10: ( (lv_upstreamRoles_44_0= ruleUpstreamRole ) )
                                    	    // InternalContextMappingDSL.g:2464:11: (lv_upstreamRoles_44_0= ruleUpstreamRole )
                                    	    {
                                    	    // InternalContextMappingDSL.g:2464:11: (lv_upstreamRoles_44_0= ruleUpstreamRole )
                                    	    // InternalContextMappingDSL.g:2465:12: lv_upstreamRoles_44_0= ruleUpstreamRole
                                    	    {

                                    	    												newCompositeNode(grammarAccess.getUpstreamDownstreamRelationshipAccess().getUpstreamRolesUpstreamRoleEnumRuleCall_1_0_1_3_1_0_3_1_0());
                                    	    											
                                    	    pushFollow(FOLLOW_43);
                                    	    lv_upstreamRoles_44_0=ruleUpstreamRole();

                                    	    state._fsp--;


                                    	    												if (current==null) {
                                    	    													current = createModelElementForParent(grammarAccess.getUpstreamDownstreamRelationshipRule());
                                    	    												}
                                    	    												add(
                                    	    													current,
                                    	    													"upstreamRoles",
                                    	    													lv_upstreamRoles_44_0,
                                    	    													"org.contextmapper.dsl.ContextMappingDSL.UpstreamRole");
                                    	    												afterParserOrEnumRuleCall();
                                    	    											

                                    	    }


                                    	    }


                                    	    }
                                    	    break;

                                    	default :
                                    	    break loop58;
                                        }
                                    } while (true);


                                    }

                                    otherlv_45=(Token)match(input,37,FOLLOW_10); 

                                    								newLeafNode(otherlv_45, grammarAccess.getUpstreamDownstreamRelationshipAccess().getRightSquareBracketKeyword_1_0_1_3_1_1());
                                    							

                                    }


                                    }
                                    break;

                            }

                            // InternalContextMappingDSL.g:2490:6: ( (otherlv_46= RULE_ID ) )
                            // InternalContextMappingDSL.g:2491:7: (otherlv_46= RULE_ID )
                            {
                            // InternalContextMappingDSL.g:2491:7: (otherlv_46= RULE_ID )
                            // InternalContextMappingDSL.g:2492:8: otherlv_46= RULE_ID
                            {

                            								if (current==null) {
                            									current = createModelElement(grammarAccess.getUpstreamDownstreamRelationshipRule());
                            								}
                            							
                            otherlv_46=(Token)match(input,RULE_ID,FOLLOW_32); 

                            								newLeafNode(otherlv_46, grammarAccess.getUpstreamDownstreamRelationshipAccess().getUpstreamBoundedContextCrossReference_1_0_1_4_0());
                            							

                            }


                            }


                            }


                            }
                            break;
                        case 3 :
                            // InternalContextMappingDSL.g:2505:5: ( ( (otherlv_47= RULE_ID ) ) (otherlv_48= '[' ( ( (lv_upstreamRoles_49_0= ruleUpstreamRole ) ) (otherlv_50= ',' ( (lv_upstreamRoles_51_0= ruleUpstreamRole ) ) )* )? otherlv_52= ']' )? otherlv_53= 'Upstream-Downstream' (otherlv_54= '[' ( ( (lv_downstreamRoles_55_0= ruleDownstreamRole ) ) (otherlv_56= ',' ( (lv_downstreamRoles_57_0= ruleDownstreamRole ) ) )* )? otherlv_58= ']' )? ( (otherlv_59= RULE_ID ) ) )
                            {
                            // InternalContextMappingDSL.g:2505:5: ( ( (otherlv_47= RULE_ID ) ) (otherlv_48= '[' ( ( (lv_upstreamRoles_49_0= ruleUpstreamRole ) ) (otherlv_50= ',' ( (lv_upstreamRoles_51_0= ruleUpstreamRole ) ) )* )? otherlv_52= ']' )? otherlv_53= 'Upstream-Downstream' (otherlv_54= '[' ( ( (lv_downstreamRoles_55_0= ruleDownstreamRole ) ) (otherlv_56= ',' ( (lv_downstreamRoles_57_0= ruleDownstreamRole ) ) )* )? otherlv_58= ']' )? ( (otherlv_59= RULE_ID ) ) )
                            // InternalContextMappingDSL.g:2506:6: ( (otherlv_47= RULE_ID ) ) (otherlv_48= '[' ( ( (lv_upstreamRoles_49_0= ruleUpstreamRole ) ) (otherlv_50= ',' ( (lv_upstreamRoles_51_0= ruleUpstreamRole ) ) )* )? otherlv_52= ']' )? otherlv_53= 'Upstream-Downstream' (otherlv_54= '[' ( ( (lv_downstreamRoles_55_0= ruleDownstreamRole ) ) (otherlv_56= ',' ( (lv_downstreamRoles_57_0= ruleDownstreamRole ) ) )* )? otherlv_58= ']' )? ( (otherlv_59= RULE_ID ) )
                            {
                            // InternalContextMappingDSL.g:2506:6: ( (otherlv_47= RULE_ID ) )
                            // InternalContextMappingDSL.g:2507:7: (otherlv_47= RULE_ID )
                            {
                            // InternalContextMappingDSL.g:2507:7: (otherlv_47= RULE_ID )
                            // InternalContextMappingDSL.g:2508:8: otherlv_47= RULE_ID
                            {

                            								if (current==null) {
                            									current = createModelElement(grammarAccess.getUpstreamDownstreamRelationshipRule());
                            								}
                            							
                            otherlv_47=(Token)match(input,RULE_ID,FOLLOW_49); 

                            								newLeafNode(otherlv_47, grammarAccess.getUpstreamDownstreamRelationshipAccess().getUpstreamBoundedContextCrossReference_1_0_2_0_0());
                            							

                            }


                            }

                            // InternalContextMappingDSL.g:2519:6: (otherlv_48= '[' ( ( (lv_upstreamRoles_49_0= ruleUpstreamRole ) ) (otherlv_50= ',' ( (lv_upstreamRoles_51_0= ruleUpstreamRole ) ) )* )? otherlv_52= ']' )?
                            int alt62=2;
                            int LA62_0 = input.LA(1);

                            if ( (LA62_0==35) ) {
                                alt62=1;
                            }
                            switch (alt62) {
                                case 1 :
                                    // InternalContextMappingDSL.g:2520:7: otherlv_48= '[' ( ( (lv_upstreamRoles_49_0= ruleUpstreamRole ) ) (otherlv_50= ',' ( (lv_upstreamRoles_51_0= ruleUpstreamRole ) ) )* )? otherlv_52= ']'
                                    {
                                    otherlv_48=(Token)match(input,35,FOLLOW_50); 

                                    							newLeafNode(otherlv_48, grammarAccess.getUpstreamDownstreamRelationshipAccess().getLeftSquareBracketKeyword_1_0_2_1_0());
                                    						
                                    // InternalContextMappingDSL.g:2524:7: ( ( (lv_upstreamRoles_49_0= ruleUpstreamRole ) ) (otherlv_50= ',' ( (lv_upstreamRoles_51_0= ruleUpstreamRole ) ) )* )?
                                    int alt61=2;
                                    int LA61_0 = input.LA(1);

                                    if ( ((LA61_0>=193 && LA61_0<=194)) ) {
                                        alt61=1;
                                    }
                                    switch (alt61) {
                                        case 1 :
                                            // InternalContextMappingDSL.g:2525:8: ( (lv_upstreamRoles_49_0= ruleUpstreamRole ) ) (otherlv_50= ',' ( (lv_upstreamRoles_51_0= ruleUpstreamRole ) ) )*
                                            {
                                            // InternalContextMappingDSL.g:2525:8: ( (lv_upstreamRoles_49_0= ruleUpstreamRole ) )
                                            // InternalContextMappingDSL.g:2526:9: (lv_upstreamRoles_49_0= ruleUpstreamRole )
                                            {
                                            // InternalContextMappingDSL.g:2526:9: (lv_upstreamRoles_49_0= ruleUpstreamRole )
                                            // InternalContextMappingDSL.g:2527:10: lv_upstreamRoles_49_0= ruleUpstreamRole
                                            {

                                            										newCompositeNode(grammarAccess.getUpstreamDownstreamRelationshipAccess().getUpstreamRolesUpstreamRoleEnumRuleCall_1_0_2_1_1_0_0());
                                            									
                                            pushFollow(FOLLOW_43);
                                            lv_upstreamRoles_49_0=ruleUpstreamRole();

                                            state._fsp--;


                                            										if (current==null) {
                                            											current = createModelElementForParent(grammarAccess.getUpstreamDownstreamRelationshipRule());
                                            										}
                                            										add(
                                            											current,
                                            											"upstreamRoles",
                                            											lv_upstreamRoles_49_0,
                                            											"org.contextmapper.dsl.ContextMappingDSL.UpstreamRole");
                                            										afterParserOrEnumRuleCall();
                                            									

                                            }


                                            }

                                            // InternalContextMappingDSL.g:2544:8: (otherlv_50= ',' ( (lv_upstreamRoles_51_0= ruleUpstreamRole ) ) )*
                                            loop60:
                                            do {
                                                int alt60=2;
                                                int LA60_0 = input.LA(1);

                                                if ( (LA60_0==24) ) {
                                                    alt60=1;
                                                }


                                                switch (alt60) {
                                            	case 1 :
                                            	    // InternalContextMappingDSL.g:2545:9: otherlv_50= ',' ( (lv_upstreamRoles_51_0= ruleUpstreamRole ) )
                                            	    {
                                            	    otherlv_50=(Token)match(input,24,FOLLOW_41); 

                                            	    									newLeafNode(otherlv_50, grammarAccess.getUpstreamDownstreamRelationshipAccess().getCommaKeyword_1_0_2_1_1_1_0());
                                            	    								
                                            	    // InternalContextMappingDSL.g:2549:9: ( (lv_upstreamRoles_51_0= ruleUpstreamRole ) )
                                            	    // InternalContextMappingDSL.g:2550:10: (lv_upstreamRoles_51_0= ruleUpstreamRole )
                                            	    {
                                            	    // InternalContextMappingDSL.g:2550:10: (lv_upstreamRoles_51_0= ruleUpstreamRole )
                                            	    // InternalContextMappingDSL.g:2551:11: lv_upstreamRoles_51_0= ruleUpstreamRole
                                            	    {

                                            	    											newCompositeNode(grammarAccess.getUpstreamDownstreamRelationshipAccess().getUpstreamRolesUpstreamRoleEnumRuleCall_1_0_2_1_1_1_1_0());
                                            	    										
                                            	    pushFollow(FOLLOW_43);
                                            	    lv_upstreamRoles_51_0=ruleUpstreamRole();

                                            	    state._fsp--;


                                            	    											if (current==null) {
                                            	    												current = createModelElementForParent(grammarAccess.getUpstreamDownstreamRelationshipRule());
                                            	    											}
                                            	    											add(
                                            	    												current,
                                            	    												"upstreamRoles",
                                            	    												lv_upstreamRoles_51_0,
                                            	    												"org.contextmapper.dsl.ContextMappingDSL.UpstreamRole");
                                            	    											afterParserOrEnumRuleCall();
                                            	    										

                                            	    }


                                            	    }


                                            	    }
                                            	    break;

                                            	default :
                                            	    break loop60;
                                                }
                                            } while (true);


                                            }
                                            break;

                                    }

                                    otherlv_52=(Token)match(input,37,FOLLOW_51); 

                                    							newLeafNode(otherlv_52, grammarAccess.getUpstreamDownstreamRelationshipAccess().getRightSquareBracketKeyword_1_0_2_1_2());
                                    						

                                    }
                                    break;

                            }

                            otherlv_53=(Token)match(input,47,FOLLOW_44); 

                            						newLeafNode(otherlv_53, grammarAccess.getUpstreamDownstreamRelationshipAccess().getUpstreamDownstreamKeyword_1_0_2_2());
                            					
                            // InternalContextMappingDSL.g:2579:6: (otherlv_54= '[' ( ( (lv_downstreamRoles_55_0= ruleDownstreamRole ) ) (otherlv_56= ',' ( (lv_downstreamRoles_57_0= ruleDownstreamRole ) ) )* )? otherlv_58= ']' )?
                            int alt65=2;
                            int LA65_0 = input.LA(1);

                            if ( (LA65_0==35) ) {
                                alt65=1;
                            }
                            switch (alt65) {
                                case 1 :
                                    // InternalContextMappingDSL.g:2580:7: otherlv_54= '[' ( ( (lv_downstreamRoles_55_0= ruleDownstreamRole ) ) (otherlv_56= ',' ( (lv_downstreamRoles_57_0= ruleDownstreamRole ) ) )* )? otherlv_58= ']'
                                    {
                                    otherlv_54=(Token)match(input,35,FOLLOW_52); 

                                    							newLeafNode(otherlv_54, grammarAccess.getUpstreamDownstreamRelationshipAccess().getLeftSquareBracketKeyword_1_0_2_3_0());
                                    						
                                    // InternalContextMappingDSL.g:2584:7: ( ( (lv_downstreamRoles_55_0= ruleDownstreamRole ) ) (otherlv_56= ',' ( (lv_downstreamRoles_57_0= ruleDownstreamRole ) ) )* )?
                                    int alt64=2;
                                    int LA64_0 = input.LA(1);

                                    if ( ((LA64_0>=195 && LA64_0<=196)) ) {
                                        alt64=1;
                                    }
                                    switch (alt64) {
                                        case 1 :
                                            // InternalContextMappingDSL.g:2585:8: ( (lv_downstreamRoles_55_0= ruleDownstreamRole ) ) (otherlv_56= ',' ( (lv_downstreamRoles_57_0= ruleDownstreamRole ) ) )*
                                            {
                                            // InternalContextMappingDSL.g:2585:8: ( (lv_downstreamRoles_55_0= ruleDownstreamRole ) )
                                            // InternalContextMappingDSL.g:2586:9: (lv_downstreamRoles_55_0= ruleDownstreamRole )
                                            {
                                            // InternalContextMappingDSL.g:2586:9: (lv_downstreamRoles_55_0= ruleDownstreamRole )
                                            // InternalContextMappingDSL.g:2587:10: lv_downstreamRoles_55_0= ruleDownstreamRole
                                            {

                                            										newCompositeNode(grammarAccess.getUpstreamDownstreamRelationshipAccess().getDownstreamRolesDownstreamRoleEnumRuleCall_1_0_2_3_1_0_0());
                                            									
                                            pushFollow(FOLLOW_43);
                                            lv_downstreamRoles_55_0=ruleDownstreamRole();

                                            state._fsp--;


                                            										if (current==null) {
                                            											current = createModelElementForParent(grammarAccess.getUpstreamDownstreamRelationshipRule());
                                            										}
                                            										add(
                                            											current,
                                            											"downstreamRoles",
                                            											lv_downstreamRoles_55_0,
                                            											"org.contextmapper.dsl.ContextMappingDSL.DownstreamRole");
                                            										afterParserOrEnumRuleCall();
                                            									

                                            }


                                            }

                                            // InternalContextMappingDSL.g:2604:8: (otherlv_56= ',' ( (lv_downstreamRoles_57_0= ruleDownstreamRole ) ) )*
                                            loop63:
                                            do {
                                                int alt63=2;
                                                int LA63_0 = input.LA(1);

                                                if ( (LA63_0==24) ) {
                                                    alt63=1;
                                                }


                                                switch (alt63) {
                                            	case 1 :
                                            	    // InternalContextMappingDSL.g:2605:9: otherlv_56= ',' ( (lv_downstreamRoles_57_0= ruleDownstreamRole ) )
                                            	    {
                                            	    otherlv_56=(Token)match(input,24,FOLLOW_46); 

                                            	    									newLeafNode(otherlv_56, grammarAccess.getUpstreamDownstreamRelationshipAccess().getCommaKeyword_1_0_2_3_1_1_0());
                                            	    								
                                            	    // InternalContextMappingDSL.g:2609:9: ( (lv_downstreamRoles_57_0= ruleDownstreamRole ) )
                                            	    // InternalContextMappingDSL.g:2610:10: (lv_downstreamRoles_57_0= ruleDownstreamRole )
                                            	    {
                                            	    // InternalContextMappingDSL.g:2610:10: (lv_downstreamRoles_57_0= ruleDownstreamRole )
                                            	    // InternalContextMappingDSL.g:2611:11: lv_downstreamRoles_57_0= ruleDownstreamRole
                                            	    {

                                            	    											newCompositeNode(grammarAccess.getUpstreamDownstreamRelationshipAccess().getDownstreamRolesDownstreamRoleEnumRuleCall_1_0_2_3_1_1_1_0());
                                            	    										
                                            	    pushFollow(FOLLOW_43);
                                            	    lv_downstreamRoles_57_0=ruleDownstreamRole();

                                            	    state._fsp--;


                                            	    											if (current==null) {
                                            	    												current = createModelElementForParent(grammarAccess.getUpstreamDownstreamRelationshipRule());
                                            	    											}
                                            	    											add(
                                            	    												current,
                                            	    												"downstreamRoles",
                                            	    												lv_downstreamRoles_57_0,
                                            	    												"org.contextmapper.dsl.ContextMappingDSL.DownstreamRole");
                                            	    											afterParserOrEnumRuleCall();
                                            	    										

                                            	    }


                                            	    }


                                            	    }
                                            	    break;

                                            	default :
                                            	    break loop63;
                                                }
                                            } while (true);


                                            }
                                            break;

                                    }

                                    otherlv_58=(Token)match(input,37,FOLLOW_10); 

                                    							newLeafNode(otherlv_58, grammarAccess.getUpstreamDownstreamRelationshipAccess().getRightSquareBracketKeyword_1_0_2_3_2());
                                    						

                                    }
                                    break;

                            }

                            // InternalContextMappingDSL.g:2635:6: ( (otherlv_59= RULE_ID ) )
                            // InternalContextMappingDSL.g:2636:7: (otherlv_59= RULE_ID )
                            {
                            // InternalContextMappingDSL.g:2636:7: (otherlv_59= RULE_ID )
                            // InternalContextMappingDSL.g:2637:8: otherlv_59= RULE_ID
                            {

                            								if (current==null) {
                            									current = createModelElement(grammarAccess.getUpstreamDownstreamRelationshipRule());
                            								}
                            							
                            otherlv_59=(Token)match(input,RULE_ID,FOLLOW_32); 

                            								newLeafNode(otherlv_59, grammarAccess.getUpstreamDownstreamRelationshipAccess().getDownstreamBoundedContextCrossReference_1_0_2_4_0());
                            							

                            }


                            }


                            }


                            }
                            break;
                        case 4 :
                            // InternalContextMappingDSL.g:2650:5: ( ( (otherlv_60= RULE_ID ) ) (otherlv_61= '[' ( ( (lv_downstreamRoles_62_0= ruleDownstreamRole ) ) (otherlv_63= ',' ( (lv_downstreamRoles_64_0= ruleDownstreamRole ) ) )* )? otherlv_65= ']' )? otherlv_66= 'Downstream-Upstream' (otherlv_67= '[' ( ( (lv_upstreamRoles_68_0= ruleUpstreamRole ) ) (otherlv_69= ',' ( (lv_upstreamRoles_70_0= ruleUpstreamRole ) ) )* )? otherlv_71= ']' )? ( (otherlv_72= RULE_ID ) ) )
                            {
                            // InternalContextMappingDSL.g:2650:5: ( ( (otherlv_60= RULE_ID ) ) (otherlv_61= '[' ( ( (lv_downstreamRoles_62_0= ruleDownstreamRole ) ) (otherlv_63= ',' ( (lv_downstreamRoles_64_0= ruleDownstreamRole ) ) )* )? otherlv_65= ']' )? otherlv_66= 'Downstream-Upstream' (otherlv_67= '[' ( ( (lv_upstreamRoles_68_0= ruleUpstreamRole ) ) (otherlv_69= ',' ( (lv_upstreamRoles_70_0= ruleUpstreamRole ) ) )* )? otherlv_71= ']' )? ( (otherlv_72= RULE_ID ) ) )
                            // InternalContextMappingDSL.g:2651:6: ( (otherlv_60= RULE_ID ) ) (otherlv_61= '[' ( ( (lv_downstreamRoles_62_0= ruleDownstreamRole ) ) (otherlv_63= ',' ( (lv_downstreamRoles_64_0= ruleDownstreamRole ) ) )* )? otherlv_65= ']' )? otherlv_66= 'Downstream-Upstream' (otherlv_67= '[' ( ( (lv_upstreamRoles_68_0= ruleUpstreamRole ) ) (otherlv_69= ',' ( (lv_upstreamRoles_70_0= ruleUpstreamRole ) ) )* )? otherlv_71= ']' )? ( (otherlv_72= RULE_ID ) )
                            {
                            // InternalContextMappingDSL.g:2651:6: ( (otherlv_60= RULE_ID ) )
                            // InternalContextMappingDSL.g:2652:7: (otherlv_60= RULE_ID )
                            {
                            // InternalContextMappingDSL.g:2652:7: (otherlv_60= RULE_ID )
                            // InternalContextMappingDSL.g:2653:8: otherlv_60= RULE_ID
                            {

                            								if (current==null) {
                            									current = createModelElement(grammarAccess.getUpstreamDownstreamRelationshipRule());
                            								}
                            							
                            otherlv_60=(Token)match(input,RULE_ID,FOLLOW_53); 

                            								newLeafNode(otherlv_60, grammarAccess.getUpstreamDownstreamRelationshipAccess().getDownstreamBoundedContextCrossReference_1_0_3_0_0());
                            							

                            }


                            }

                            // InternalContextMappingDSL.g:2664:6: (otherlv_61= '[' ( ( (lv_downstreamRoles_62_0= ruleDownstreamRole ) ) (otherlv_63= ',' ( (lv_downstreamRoles_64_0= ruleDownstreamRole ) ) )* )? otherlv_65= ']' )?
                            int alt68=2;
                            int LA68_0 = input.LA(1);

                            if ( (LA68_0==35) ) {
                                alt68=1;
                            }
                            switch (alt68) {
                                case 1 :
                                    // InternalContextMappingDSL.g:2665:7: otherlv_61= '[' ( ( (lv_downstreamRoles_62_0= ruleDownstreamRole ) ) (otherlv_63= ',' ( (lv_downstreamRoles_64_0= ruleDownstreamRole ) ) )* )? otherlv_65= ']'
                                    {
                                    otherlv_61=(Token)match(input,35,FOLLOW_52); 

                                    							newLeafNode(otherlv_61, grammarAccess.getUpstreamDownstreamRelationshipAccess().getLeftSquareBracketKeyword_1_0_3_1_0());
                                    						
                                    // InternalContextMappingDSL.g:2669:7: ( ( (lv_downstreamRoles_62_0= ruleDownstreamRole ) ) (otherlv_63= ',' ( (lv_downstreamRoles_64_0= ruleDownstreamRole ) ) )* )?
                                    int alt67=2;
                                    int LA67_0 = input.LA(1);

                                    if ( ((LA67_0>=195 && LA67_0<=196)) ) {
                                        alt67=1;
                                    }
                                    switch (alt67) {
                                        case 1 :
                                            // InternalContextMappingDSL.g:2670:8: ( (lv_downstreamRoles_62_0= ruleDownstreamRole ) ) (otherlv_63= ',' ( (lv_downstreamRoles_64_0= ruleDownstreamRole ) ) )*
                                            {
                                            // InternalContextMappingDSL.g:2670:8: ( (lv_downstreamRoles_62_0= ruleDownstreamRole ) )
                                            // InternalContextMappingDSL.g:2671:9: (lv_downstreamRoles_62_0= ruleDownstreamRole )
                                            {
                                            // InternalContextMappingDSL.g:2671:9: (lv_downstreamRoles_62_0= ruleDownstreamRole )
                                            // InternalContextMappingDSL.g:2672:10: lv_downstreamRoles_62_0= ruleDownstreamRole
                                            {

                                            										newCompositeNode(grammarAccess.getUpstreamDownstreamRelationshipAccess().getDownstreamRolesDownstreamRoleEnumRuleCall_1_0_3_1_1_0_0());
                                            									
                                            pushFollow(FOLLOW_43);
                                            lv_downstreamRoles_62_0=ruleDownstreamRole();

                                            state._fsp--;


                                            										if (current==null) {
                                            											current = createModelElementForParent(grammarAccess.getUpstreamDownstreamRelationshipRule());
                                            										}
                                            										add(
                                            											current,
                                            											"downstreamRoles",
                                            											lv_downstreamRoles_62_0,
                                            											"org.contextmapper.dsl.ContextMappingDSL.DownstreamRole");
                                            										afterParserOrEnumRuleCall();
                                            									

                                            }


                                            }

                                            // InternalContextMappingDSL.g:2689:8: (otherlv_63= ',' ( (lv_downstreamRoles_64_0= ruleDownstreamRole ) ) )*
                                            loop66:
                                            do {
                                                int alt66=2;
                                                int LA66_0 = input.LA(1);

                                                if ( (LA66_0==24) ) {
                                                    alt66=1;
                                                }


                                                switch (alt66) {
                                            	case 1 :
                                            	    // InternalContextMappingDSL.g:2690:9: otherlv_63= ',' ( (lv_downstreamRoles_64_0= ruleDownstreamRole ) )
                                            	    {
                                            	    otherlv_63=(Token)match(input,24,FOLLOW_46); 

                                            	    									newLeafNode(otherlv_63, grammarAccess.getUpstreamDownstreamRelationshipAccess().getCommaKeyword_1_0_3_1_1_1_0());
                                            	    								
                                            	    // InternalContextMappingDSL.g:2694:9: ( (lv_downstreamRoles_64_0= ruleDownstreamRole ) )
                                            	    // InternalContextMappingDSL.g:2695:10: (lv_downstreamRoles_64_0= ruleDownstreamRole )
                                            	    {
                                            	    // InternalContextMappingDSL.g:2695:10: (lv_downstreamRoles_64_0= ruleDownstreamRole )
                                            	    // InternalContextMappingDSL.g:2696:11: lv_downstreamRoles_64_0= ruleDownstreamRole
                                            	    {

                                            	    											newCompositeNode(grammarAccess.getUpstreamDownstreamRelationshipAccess().getDownstreamRolesDownstreamRoleEnumRuleCall_1_0_3_1_1_1_1_0());
                                            	    										
                                            	    pushFollow(FOLLOW_43);
                                            	    lv_downstreamRoles_64_0=ruleDownstreamRole();

                                            	    state._fsp--;


                                            	    											if (current==null) {
                                            	    												current = createModelElementForParent(grammarAccess.getUpstreamDownstreamRelationshipRule());
                                            	    											}
                                            	    											add(
                                            	    												current,
                                            	    												"downstreamRoles",
                                            	    												lv_downstreamRoles_64_0,
                                            	    												"org.contextmapper.dsl.ContextMappingDSL.DownstreamRole");
                                            	    											afterParserOrEnumRuleCall();
                                            	    										

                                            	    }


                                            	    }


                                            	    }
                                            	    break;

                                            	default :
                                            	    break loop66;
                                                }
                                            } while (true);


                                            }
                                            break;

                                    }

                                    otherlv_65=(Token)match(input,37,FOLLOW_54); 

                                    							newLeafNode(otherlv_65, grammarAccess.getUpstreamDownstreamRelationshipAccess().getRightSquareBracketKeyword_1_0_3_1_2());
                                    						

                                    }
                                    break;

                            }

                            otherlv_66=(Token)match(input,48,FOLLOW_44); 

                            						newLeafNode(otherlv_66, grammarAccess.getUpstreamDownstreamRelationshipAccess().getDownstreamUpstreamKeyword_1_0_3_2());
                            					
                            // InternalContextMappingDSL.g:2724:6: (otherlv_67= '[' ( ( (lv_upstreamRoles_68_0= ruleUpstreamRole ) ) (otherlv_69= ',' ( (lv_upstreamRoles_70_0= ruleUpstreamRole ) ) )* )? otherlv_71= ']' )?
                            int alt71=2;
                            int LA71_0 = input.LA(1);

                            if ( (LA71_0==35) ) {
                                alt71=1;
                            }
                            switch (alt71) {
                                case 1 :
                                    // InternalContextMappingDSL.g:2725:7: otherlv_67= '[' ( ( (lv_upstreamRoles_68_0= ruleUpstreamRole ) ) (otherlv_69= ',' ( (lv_upstreamRoles_70_0= ruleUpstreamRole ) ) )* )? otherlv_71= ']'
                                    {
                                    otherlv_67=(Token)match(input,35,FOLLOW_50); 

                                    							newLeafNode(otherlv_67, grammarAccess.getUpstreamDownstreamRelationshipAccess().getLeftSquareBracketKeyword_1_0_3_3_0());
                                    						
                                    // InternalContextMappingDSL.g:2729:7: ( ( (lv_upstreamRoles_68_0= ruleUpstreamRole ) ) (otherlv_69= ',' ( (lv_upstreamRoles_70_0= ruleUpstreamRole ) ) )* )?
                                    int alt70=2;
                                    int LA70_0 = input.LA(1);

                                    if ( ((LA70_0>=193 && LA70_0<=194)) ) {
                                        alt70=1;
                                    }
                                    switch (alt70) {
                                        case 1 :
                                            // InternalContextMappingDSL.g:2730:8: ( (lv_upstreamRoles_68_0= ruleUpstreamRole ) ) (otherlv_69= ',' ( (lv_upstreamRoles_70_0= ruleUpstreamRole ) ) )*
                                            {
                                            // InternalContextMappingDSL.g:2730:8: ( (lv_upstreamRoles_68_0= ruleUpstreamRole ) )
                                            // InternalContextMappingDSL.g:2731:9: (lv_upstreamRoles_68_0= ruleUpstreamRole )
                                            {
                                            // InternalContextMappingDSL.g:2731:9: (lv_upstreamRoles_68_0= ruleUpstreamRole )
                                            // InternalContextMappingDSL.g:2732:10: lv_upstreamRoles_68_0= ruleUpstreamRole
                                            {

                                            										newCompositeNode(grammarAccess.getUpstreamDownstreamRelationshipAccess().getUpstreamRolesUpstreamRoleEnumRuleCall_1_0_3_3_1_0_0());
                                            									
                                            pushFollow(FOLLOW_43);
                                            lv_upstreamRoles_68_0=ruleUpstreamRole();

                                            state._fsp--;


                                            										if (current==null) {
                                            											current = createModelElementForParent(grammarAccess.getUpstreamDownstreamRelationshipRule());
                                            										}
                                            										add(
                                            											current,
                                            											"upstreamRoles",
                                            											lv_upstreamRoles_68_0,
                                            											"org.contextmapper.dsl.ContextMappingDSL.UpstreamRole");
                                            										afterParserOrEnumRuleCall();
                                            									

                                            }


                                            }

                                            // InternalContextMappingDSL.g:2749:8: (otherlv_69= ',' ( (lv_upstreamRoles_70_0= ruleUpstreamRole ) ) )*
                                            loop69:
                                            do {
                                                int alt69=2;
                                                int LA69_0 = input.LA(1);

                                                if ( (LA69_0==24) ) {
                                                    alt69=1;
                                                }


                                                switch (alt69) {
                                            	case 1 :
                                            	    // InternalContextMappingDSL.g:2750:9: otherlv_69= ',' ( (lv_upstreamRoles_70_0= ruleUpstreamRole ) )
                                            	    {
                                            	    otherlv_69=(Token)match(input,24,FOLLOW_41); 

                                            	    									newLeafNode(otherlv_69, grammarAccess.getUpstreamDownstreamRelationshipAccess().getCommaKeyword_1_0_3_3_1_1_0());
                                            	    								
                                            	    // InternalContextMappingDSL.g:2754:9: ( (lv_upstreamRoles_70_0= ruleUpstreamRole ) )
                                            	    // InternalContextMappingDSL.g:2755:10: (lv_upstreamRoles_70_0= ruleUpstreamRole )
                                            	    {
                                            	    // InternalContextMappingDSL.g:2755:10: (lv_upstreamRoles_70_0= ruleUpstreamRole )
                                            	    // InternalContextMappingDSL.g:2756:11: lv_upstreamRoles_70_0= ruleUpstreamRole
                                            	    {

                                            	    											newCompositeNode(grammarAccess.getUpstreamDownstreamRelationshipAccess().getUpstreamRolesUpstreamRoleEnumRuleCall_1_0_3_3_1_1_1_0());
                                            	    										
                                            	    pushFollow(FOLLOW_43);
                                            	    lv_upstreamRoles_70_0=ruleUpstreamRole();

                                            	    state._fsp--;


                                            	    											if (current==null) {
                                            	    												current = createModelElementForParent(grammarAccess.getUpstreamDownstreamRelationshipRule());
                                            	    											}
                                            	    											add(
                                            	    												current,
                                            	    												"upstreamRoles",
                                            	    												lv_upstreamRoles_70_0,
                                            	    												"org.contextmapper.dsl.ContextMappingDSL.UpstreamRole");
                                            	    											afterParserOrEnumRuleCall();
                                            	    										

                                            	    }


                                            	    }


                                            	    }
                                            	    break;

                                            	default :
                                            	    break loop69;
                                                }
                                            } while (true);


                                            }
                                            break;

                                    }

                                    otherlv_71=(Token)match(input,37,FOLLOW_10); 

                                    							newLeafNode(otherlv_71, grammarAccess.getUpstreamDownstreamRelationshipAccess().getRightSquareBracketKeyword_1_0_3_3_2());
                                    						

                                    }
                                    break;

                            }

                            // InternalContextMappingDSL.g:2780:6: ( (otherlv_72= RULE_ID ) )
                            // InternalContextMappingDSL.g:2781:7: (otherlv_72= RULE_ID )
                            {
                            // InternalContextMappingDSL.g:2781:7: (otherlv_72= RULE_ID )
                            // InternalContextMappingDSL.g:2782:8: otherlv_72= RULE_ID
                            {

                            								if (current==null) {
                            									current = createModelElement(grammarAccess.getUpstreamDownstreamRelationshipRule());
                            								}
                            							
                            otherlv_72=(Token)match(input,RULE_ID,FOLLOW_32); 

                            								newLeafNode(otherlv_72, grammarAccess.getUpstreamDownstreamRelationshipAccess().getUpstreamBoundedContextCrossReference_1_0_3_4_0());
                            							

                            }


                            }


                            }


                            }
                            break;

                    }

                    // InternalContextMappingDSL.g:2795:4: (otherlv_73= ':' ( (lv_name_74_0= RULE_ID ) ) )?
                    int alt73=2;
                    int LA73_0 = input.LA(1);

                    if ( (LA73_0==40) ) {
                        alt73=1;
                    }
                    switch (alt73) {
                        case 1 :
                            // InternalContextMappingDSL.g:2796:5: otherlv_73= ':' ( (lv_name_74_0= RULE_ID ) )
                            {
                            otherlv_73=(Token)match(input,40,FOLLOW_10); 

                            					newLeafNode(otherlv_73, grammarAccess.getUpstreamDownstreamRelationshipAccess().getColonKeyword_1_1_0());
                            				
                            // InternalContextMappingDSL.g:2800:5: ( (lv_name_74_0= RULE_ID ) )
                            // InternalContextMappingDSL.g:2801:6: (lv_name_74_0= RULE_ID )
                            {
                            // InternalContextMappingDSL.g:2801:6: (lv_name_74_0= RULE_ID )
                            // InternalContextMappingDSL.g:2802:7: lv_name_74_0= RULE_ID
                            {
                            lv_name_74_0=(Token)match(input,RULE_ID,FOLLOW_23); 

                            							newLeafNode(lv_name_74_0, grammarAccess.getUpstreamDownstreamRelationshipAccess().getNameIDTerminalRuleCall_1_1_1_0());
                            						

                            							if (current==null) {
                            								current = createModelElement(grammarAccess.getUpstreamDownstreamRelationshipRule());
                            							}
                            							setWithLastConsumed(
                            								current,
                            								"name",
                            								lv_name_74_0,
                            								"org.eclipse.xtext.common.Terminals.ID");
                            						

                            }


                            }


                            }
                            break;

                    }

                    // InternalContextMappingDSL.g:2819:4: (this_OPEN_75= RULE_OPEN ( ( ( ( ({...}? => ( ({...}? => (otherlv_77= 'implementationTechnology' (otherlv_78= '=' )? ( (lv_implementationTechnology_79_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_80= 'exposedAggregates' (otherlv_81= '=' )? ( (otherlv_82= RULE_ID ) ) ) (otherlv_83= ',' ( (otherlv_84= RULE_ID ) ) )* ( (lv_exposedAggregatesComment_85_0= RULE_SL_COMMENT ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_86= 'downstreamRights' (otherlv_87= '=' )? ( (lv_downstreamGovernanceRights_88_0= ruleDownstreamGovernanceRights ) ) ) ) ) ) )* ) ) ) this_CLOSE_89= RULE_CLOSE )?
                    int alt80=2;
                    int LA80_0 = input.LA(1);

                    if ( (LA80_0==RULE_OPEN) ) {
                        alt80=1;
                    }
                    switch (alt80) {
                        case 1 :
                            // InternalContextMappingDSL.g:2820:5: this_OPEN_75= RULE_OPEN ( ( ( ( ({...}? => ( ({...}? => (otherlv_77= 'implementationTechnology' (otherlv_78= '=' )? ( (lv_implementationTechnology_79_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_80= 'exposedAggregates' (otherlv_81= '=' )? ( (otherlv_82= RULE_ID ) ) ) (otherlv_83= ',' ( (otherlv_84= RULE_ID ) ) )* ( (lv_exposedAggregatesComment_85_0= RULE_SL_COMMENT ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_86= 'downstreamRights' (otherlv_87= '=' )? ( (lv_downstreamGovernanceRights_88_0= ruleDownstreamGovernanceRights ) ) ) ) ) ) )* ) ) ) this_CLOSE_89= RULE_CLOSE
                            {
                            this_OPEN_75=(Token)match(input,RULE_OPEN,FOLLOW_55); 

                            					newLeafNode(this_OPEN_75, grammarAccess.getUpstreamDownstreamRelationshipAccess().getOPENTerminalRuleCall_1_2_0());
                            				
                            // InternalContextMappingDSL.g:2824:5: ( ( ( ( ({...}? => ( ({...}? => (otherlv_77= 'implementationTechnology' (otherlv_78= '=' )? ( (lv_implementationTechnology_79_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_80= 'exposedAggregates' (otherlv_81= '=' )? ( (otherlv_82= RULE_ID ) ) ) (otherlv_83= ',' ( (otherlv_84= RULE_ID ) ) )* ( (lv_exposedAggregatesComment_85_0= RULE_SL_COMMENT ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_86= 'downstreamRights' (otherlv_87= '=' )? ( (lv_downstreamGovernanceRights_88_0= ruleDownstreamGovernanceRights ) ) ) ) ) ) )* ) ) )
                            // InternalContextMappingDSL.g:2825:6: ( ( ( ({...}? => ( ({...}? => (otherlv_77= 'implementationTechnology' (otherlv_78= '=' )? ( (lv_implementationTechnology_79_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_80= 'exposedAggregates' (otherlv_81= '=' )? ( (otherlv_82= RULE_ID ) ) ) (otherlv_83= ',' ( (otherlv_84= RULE_ID ) ) )* ( (lv_exposedAggregatesComment_85_0= RULE_SL_COMMENT ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_86= 'downstreamRights' (otherlv_87= '=' )? ( (lv_downstreamGovernanceRights_88_0= ruleDownstreamGovernanceRights ) ) ) ) ) ) )* ) )
                            {
                            // InternalContextMappingDSL.g:2825:6: ( ( ( ({...}? => ( ({...}? => (otherlv_77= 'implementationTechnology' (otherlv_78= '=' )? ( (lv_implementationTechnology_79_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_80= 'exposedAggregates' (otherlv_81= '=' )? ( (otherlv_82= RULE_ID ) ) ) (otherlv_83= ',' ( (otherlv_84= RULE_ID ) ) )* ( (lv_exposedAggregatesComment_85_0= RULE_SL_COMMENT ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_86= 'downstreamRights' (otherlv_87= '=' )? ( (lv_downstreamGovernanceRights_88_0= ruleDownstreamGovernanceRights ) ) ) ) ) ) )* ) )
                            // InternalContextMappingDSL.g:2826:7: ( ( ({...}? => ( ({...}? => (otherlv_77= 'implementationTechnology' (otherlv_78= '=' )? ( (lv_implementationTechnology_79_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_80= 'exposedAggregates' (otherlv_81= '=' )? ( (otherlv_82= RULE_ID ) ) ) (otherlv_83= ',' ( (otherlv_84= RULE_ID ) ) )* ( (lv_exposedAggregatesComment_85_0= RULE_SL_COMMENT ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_86= 'downstreamRights' (otherlv_87= '=' )? ( (lv_downstreamGovernanceRights_88_0= ruleDownstreamGovernanceRights ) ) ) ) ) ) )* )
                            {
                             
                            						  getUnorderedGroupHelper().enter(grammarAccess.getUpstreamDownstreamRelationshipAccess().getUnorderedGroup_1_2_1());
                            						
                            // InternalContextMappingDSL.g:2829:7: ( ( ({...}? => ( ({...}? => (otherlv_77= 'implementationTechnology' (otherlv_78= '=' )? ( (lv_implementationTechnology_79_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_80= 'exposedAggregates' (otherlv_81= '=' )? ( (otherlv_82= RULE_ID ) ) ) (otherlv_83= ',' ( (otherlv_84= RULE_ID ) ) )* ( (lv_exposedAggregatesComment_85_0= RULE_SL_COMMENT ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_86= 'downstreamRights' (otherlv_87= '=' )? ( (lv_downstreamGovernanceRights_88_0= ruleDownstreamGovernanceRights ) ) ) ) ) ) )* )
                            // InternalContextMappingDSL.g:2830:8: ( ({...}? => ( ({...}? => (otherlv_77= 'implementationTechnology' (otherlv_78= '=' )? ( (lv_implementationTechnology_79_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_80= 'exposedAggregates' (otherlv_81= '=' )? ( (otherlv_82= RULE_ID ) ) ) (otherlv_83= ',' ( (otherlv_84= RULE_ID ) ) )* ( (lv_exposedAggregatesComment_85_0= RULE_SL_COMMENT ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_86= 'downstreamRights' (otherlv_87= '=' )? ( (lv_downstreamGovernanceRights_88_0= ruleDownstreamGovernanceRights ) ) ) ) ) ) )*
                            {
                            // InternalContextMappingDSL.g:2830:8: ( ({...}? => ( ({...}? => (otherlv_77= 'implementationTechnology' (otherlv_78= '=' )? ( (lv_implementationTechnology_79_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_80= 'exposedAggregates' (otherlv_81= '=' )? ( (otherlv_82= RULE_ID ) ) ) (otherlv_83= ',' ( (otherlv_84= RULE_ID ) ) )* ( (lv_exposedAggregatesComment_85_0= RULE_SL_COMMENT ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_86= 'downstreamRights' (otherlv_87= '=' )? ( (lv_downstreamGovernanceRights_88_0= ruleDownstreamGovernanceRights ) ) ) ) ) ) )*
                            loop79:
                            do {
                                int alt79=4;
                                int LA79_0 = input.LA(1);

                                if ( LA79_0 == 31 && getUnorderedGroupHelper().canSelect(grammarAccess.getUpstreamDownstreamRelationshipAccess().getUnorderedGroup_1_2_1(), 0) ) {
                                    alt79=1;
                                }
                                else if ( LA79_0 == 49 && getUnorderedGroupHelper().canSelect(grammarAccess.getUpstreamDownstreamRelationshipAccess().getUnorderedGroup_1_2_1(), 1) ) {
                                    alt79=2;
                                }
                                else if ( LA79_0 == 50 && getUnorderedGroupHelper().canSelect(grammarAccess.getUpstreamDownstreamRelationshipAccess().getUnorderedGroup_1_2_1(), 2) ) {
                                    alt79=3;
                                }


                                switch (alt79) {
                            	case 1 :
                            	    // InternalContextMappingDSL.g:2831:6: ({...}? => ( ({...}? => (otherlv_77= 'implementationTechnology' (otherlv_78= '=' )? ( (lv_implementationTechnology_79_0= RULE_STRING ) ) ) ) ) )
                            	    {
                            	    // InternalContextMappingDSL.g:2831:6: ({...}? => ( ({...}? => (otherlv_77= 'implementationTechnology' (otherlv_78= '=' )? ( (lv_implementationTechnology_79_0= RULE_STRING ) ) ) ) ) )
                            	    // InternalContextMappingDSL.g:2832:7: {...}? => ( ({...}? => (otherlv_77= 'implementationTechnology' (otherlv_78= '=' )? ( (lv_implementationTechnology_79_0= RULE_STRING ) ) ) ) )
                            	    {
                            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getUpstreamDownstreamRelationshipAccess().getUnorderedGroup_1_2_1(), 0) ) {
                            	        throw new FailedPredicateException(input, "ruleUpstreamDownstreamRelationship", "getUnorderedGroupHelper().canSelect(grammarAccess.getUpstreamDownstreamRelationshipAccess().getUnorderedGroup_1_2_1(), 0)");
                            	    }
                            	    // InternalContextMappingDSL.g:2832:133: ( ({...}? => (otherlv_77= 'implementationTechnology' (otherlv_78= '=' )? ( (lv_implementationTechnology_79_0= RULE_STRING ) ) ) ) )
                            	    // InternalContextMappingDSL.g:2833:8: ({...}? => (otherlv_77= 'implementationTechnology' (otherlv_78= '=' )? ( (lv_implementationTechnology_79_0= RULE_STRING ) ) ) )
                            	    {

                            	    								getUnorderedGroupHelper().select(grammarAccess.getUpstreamDownstreamRelationshipAccess().getUnorderedGroup_1_2_1(), 0);
                            	    							
                            	    // InternalContextMappingDSL.g:2836:11: ({...}? => (otherlv_77= 'implementationTechnology' (otherlv_78= '=' )? ( (lv_implementationTechnology_79_0= RULE_STRING ) ) ) )
                            	    // InternalContextMappingDSL.g:2836:12: {...}? => (otherlv_77= 'implementationTechnology' (otherlv_78= '=' )? ( (lv_implementationTechnology_79_0= RULE_STRING ) ) )
                            	    {
                            	    if ( !((true)) ) {
                            	        throw new FailedPredicateException(input, "ruleUpstreamDownstreamRelationship", "true");
                            	    }
                            	    // InternalContextMappingDSL.g:2836:21: (otherlv_77= 'implementationTechnology' (otherlv_78= '=' )? ( (lv_implementationTechnology_79_0= RULE_STRING ) ) )
                            	    // InternalContextMappingDSL.g:2836:22: otherlv_77= 'implementationTechnology' (otherlv_78= '=' )? ( (lv_implementationTechnology_79_0= RULE_STRING ) )
                            	    {
                            	    otherlv_77=(Token)match(input,31,FOLLOW_17); 

                            	    											newLeafNode(otherlv_77, grammarAccess.getUpstreamDownstreamRelationshipAccess().getImplementationTechnologyKeyword_1_2_1_0_0());
                            	    										
                            	    // InternalContextMappingDSL.g:2840:11: (otherlv_78= '=' )?
                            	    int alt74=2;
                            	    int LA74_0 = input.LA(1);

                            	    if ( (LA74_0==21) ) {
                            	        alt74=1;
                            	    }
                            	    switch (alt74) {
                            	        case 1 :
                            	            // InternalContextMappingDSL.g:2841:12: otherlv_78= '='
                            	            {
                            	            otherlv_78=(Token)match(input,21,FOLLOW_4); 

                            	            												newLeafNode(otherlv_78, grammarAccess.getUpstreamDownstreamRelationshipAccess().getEqualsSignKeyword_1_2_1_0_1());
                            	            											

                            	            }
                            	            break;

                            	    }

                            	    // InternalContextMappingDSL.g:2846:11: ( (lv_implementationTechnology_79_0= RULE_STRING ) )
                            	    // InternalContextMappingDSL.g:2847:12: (lv_implementationTechnology_79_0= RULE_STRING )
                            	    {
                            	    // InternalContextMappingDSL.g:2847:12: (lv_implementationTechnology_79_0= RULE_STRING )
                            	    // InternalContextMappingDSL.g:2848:13: lv_implementationTechnology_79_0= RULE_STRING
                            	    {
                            	    lv_implementationTechnology_79_0=(Token)match(input,RULE_STRING,FOLLOW_55); 

                            	    													newLeafNode(lv_implementationTechnology_79_0, grammarAccess.getUpstreamDownstreamRelationshipAccess().getImplementationTechnologySTRINGTerminalRuleCall_1_2_1_0_2_0());
                            	    												

                            	    													if (current==null) {
                            	    														current = createModelElement(grammarAccess.getUpstreamDownstreamRelationshipRule());
                            	    													}
                            	    													setWithLastConsumed(
                            	    														current,
                            	    														"implementationTechnology",
                            	    														lv_implementationTechnology_79_0,
                            	    														"org.eclipse.xtext.common.Terminals.STRING");
                            	    												

                            	    }


                            	    }


                            	    }


                            	    }

                            	     
                            	    								getUnorderedGroupHelper().returnFromSelection(grammarAccess.getUpstreamDownstreamRelationshipAccess().getUnorderedGroup_1_2_1());
                            	    							

                            	    }


                            	    }


                            	    }
                            	    break;
                            	case 2 :
                            	    // InternalContextMappingDSL.g:2870:6: ({...}? => ( ({...}? => ( (otherlv_80= 'exposedAggregates' (otherlv_81= '=' )? ( (otherlv_82= RULE_ID ) ) ) (otherlv_83= ',' ( (otherlv_84= RULE_ID ) ) )* ( (lv_exposedAggregatesComment_85_0= RULE_SL_COMMENT ) )? ) ) ) )
                            	    {
                            	    // InternalContextMappingDSL.g:2870:6: ({...}? => ( ({...}? => ( (otherlv_80= 'exposedAggregates' (otherlv_81= '=' )? ( (otherlv_82= RULE_ID ) ) ) (otherlv_83= ',' ( (otherlv_84= RULE_ID ) ) )* ( (lv_exposedAggregatesComment_85_0= RULE_SL_COMMENT ) )? ) ) ) )
                            	    // InternalContextMappingDSL.g:2871:7: {...}? => ( ({...}? => ( (otherlv_80= 'exposedAggregates' (otherlv_81= '=' )? ( (otherlv_82= RULE_ID ) ) ) (otherlv_83= ',' ( (otherlv_84= RULE_ID ) ) )* ( (lv_exposedAggregatesComment_85_0= RULE_SL_COMMENT ) )? ) ) )
                            	    {
                            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getUpstreamDownstreamRelationshipAccess().getUnorderedGroup_1_2_1(), 1) ) {
                            	        throw new FailedPredicateException(input, "ruleUpstreamDownstreamRelationship", "getUnorderedGroupHelper().canSelect(grammarAccess.getUpstreamDownstreamRelationshipAccess().getUnorderedGroup_1_2_1(), 1)");
                            	    }
                            	    // InternalContextMappingDSL.g:2871:133: ( ({...}? => ( (otherlv_80= 'exposedAggregates' (otherlv_81= '=' )? ( (otherlv_82= RULE_ID ) ) ) (otherlv_83= ',' ( (otherlv_84= RULE_ID ) ) )* ( (lv_exposedAggregatesComment_85_0= RULE_SL_COMMENT ) )? ) ) )
                            	    // InternalContextMappingDSL.g:2872:8: ({...}? => ( (otherlv_80= 'exposedAggregates' (otherlv_81= '=' )? ( (otherlv_82= RULE_ID ) ) ) (otherlv_83= ',' ( (otherlv_84= RULE_ID ) ) )* ( (lv_exposedAggregatesComment_85_0= RULE_SL_COMMENT ) )? ) )
                            	    {

                            	    								getUnorderedGroupHelper().select(grammarAccess.getUpstreamDownstreamRelationshipAccess().getUnorderedGroup_1_2_1(), 1);
                            	    							
                            	    // InternalContextMappingDSL.g:2875:11: ({...}? => ( (otherlv_80= 'exposedAggregates' (otherlv_81= '=' )? ( (otherlv_82= RULE_ID ) ) ) (otherlv_83= ',' ( (otherlv_84= RULE_ID ) ) )* ( (lv_exposedAggregatesComment_85_0= RULE_SL_COMMENT ) )? ) )
                            	    // InternalContextMappingDSL.g:2875:12: {...}? => ( (otherlv_80= 'exposedAggregates' (otherlv_81= '=' )? ( (otherlv_82= RULE_ID ) ) ) (otherlv_83= ',' ( (otherlv_84= RULE_ID ) ) )* ( (lv_exposedAggregatesComment_85_0= RULE_SL_COMMENT ) )? )
                            	    {
                            	    if ( !((true)) ) {
                            	        throw new FailedPredicateException(input, "ruleUpstreamDownstreamRelationship", "true");
                            	    }
                            	    // InternalContextMappingDSL.g:2875:21: ( (otherlv_80= 'exposedAggregates' (otherlv_81= '=' )? ( (otherlv_82= RULE_ID ) ) ) (otherlv_83= ',' ( (otherlv_84= RULE_ID ) ) )* ( (lv_exposedAggregatesComment_85_0= RULE_SL_COMMENT ) )? )
                            	    // InternalContextMappingDSL.g:2875:22: (otherlv_80= 'exposedAggregates' (otherlv_81= '=' )? ( (otherlv_82= RULE_ID ) ) ) (otherlv_83= ',' ( (otherlv_84= RULE_ID ) ) )* ( (lv_exposedAggregatesComment_85_0= RULE_SL_COMMENT ) )?
                            	    {
                            	    // InternalContextMappingDSL.g:2875:22: (otherlv_80= 'exposedAggregates' (otherlv_81= '=' )? ( (otherlv_82= RULE_ID ) ) )
                            	    // InternalContextMappingDSL.g:2876:12: otherlv_80= 'exposedAggregates' (otherlv_81= '=' )? ( (otherlv_82= RULE_ID ) )
                            	    {
                            	    otherlv_80=(Token)match(input,49,FOLLOW_56); 

                            	    												newLeafNode(otherlv_80, grammarAccess.getUpstreamDownstreamRelationshipAccess().getExposedAggregatesKeyword_1_2_1_1_0_0());
                            	    											
                            	    // InternalContextMappingDSL.g:2880:12: (otherlv_81= '=' )?
                            	    int alt75=2;
                            	    int LA75_0 = input.LA(1);

                            	    if ( (LA75_0==21) ) {
                            	        alt75=1;
                            	    }
                            	    switch (alt75) {
                            	        case 1 :
                            	            // InternalContextMappingDSL.g:2881:13: otherlv_81= '='
                            	            {
                            	            otherlv_81=(Token)match(input,21,FOLLOW_10); 

                            	            													newLeafNode(otherlv_81, grammarAccess.getUpstreamDownstreamRelationshipAccess().getEqualsSignKeyword_1_2_1_1_0_1());
                            	            												

                            	            }
                            	            break;

                            	    }

                            	    // InternalContextMappingDSL.g:2886:12: ( (otherlv_82= RULE_ID ) )
                            	    // InternalContextMappingDSL.g:2887:13: (otherlv_82= RULE_ID )
                            	    {
                            	    // InternalContextMappingDSL.g:2887:13: (otherlv_82= RULE_ID )
                            	    // InternalContextMappingDSL.g:2888:14: otherlv_82= RULE_ID
                            	    {

                            	    														if (current==null) {
                            	    															current = createModelElement(grammarAccess.getUpstreamDownstreamRelationshipRule());
                            	    														}
                            	    													
                            	    otherlv_82=(Token)match(input,RULE_ID,FOLLOW_57); 

                            	    														newLeafNode(otherlv_82, grammarAccess.getUpstreamDownstreamRelationshipAccess().getUpstreamExposedAggregatesAggregateCrossReference_1_2_1_1_0_2_0());
                            	    													

                            	    }


                            	    }


                            	    }

                            	    // InternalContextMappingDSL.g:2900:11: (otherlv_83= ',' ( (otherlv_84= RULE_ID ) ) )*
                            	    loop76:
                            	    do {
                            	        int alt76=2;
                            	        int LA76_0 = input.LA(1);

                            	        if ( (LA76_0==24) ) {
                            	            alt76=1;
                            	        }


                            	        switch (alt76) {
                            	    	case 1 :
                            	    	    // InternalContextMappingDSL.g:2901:12: otherlv_83= ',' ( (otherlv_84= RULE_ID ) )
                            	    	    {
                            	    	    otherlv_83=(Token)match(input,24,FOLLOW_10); 

                            	    	    												newLeafNode(otherlv_83, grammarAccess.getUpstreamDownstreamRelationshipAccess().getCommaKeyword_1_2_1_1_1_0());
                            	    	    											
                            	    	    // InternalContextMappingDSL.g:2905:12: ( (otherlv_84= RULE_ID ) )
                            	    	    // InternalContextMappingDSL.g:2906:13: (otherlv_84= RULE_ID )
                            	    	    {
                            	    	    // InternalContextMappingDSL.g:2906:13: (otherlv_84= RULE_ID )
                            	    	    // InternalContextMappingDSL.g:2907:14: otherlv_84= RULE_ID
                            	    	    {

                            	    	    														if (current==null) {
                            	    	    															current = createModelElement(grammarAccess.getUpstreamDownstreamRelationshipRule());
                            	    	    														}
                            	    	    													
                            	    	    otherlv_84=(Token)match(input,RULE_ID,FOLLOW_57); 

                            	    	    														newLeafNode(otherlv_84, grammarAccess.getUpstreamDownstreamRelationshipAccess().getUpstreamExposedAggregatesAggregateCrossReference_1_2_1_1_1_1_0());
                            	    	    													

                            	    	    }


                            	    	    }


                            	    	    }
                            	    	    break;

                            	    	default :
                            	    	    break loop76;
                            	        }
                            	    } while (true);

                            	    // InternalContextMappingDSL.g:2919:11: ( (lv_exposedAggregatesComment_85_0= RULE_SL_COMMENT ) )?
                            	    int alt77=2;
                            	    int LA77_0 = input.LA(1);

                            	    if ( (LA77_0==RULE_SL_COMMENT) ) {
                            	        alt77=1;
                            	    }
                            	    switch (alt77) {
                            	        case 1 :
                            	            // InternalContextMappingDSL.g:2920:12: (lv_exposedAggregatesComment_85_0= RULE_SL_COMMENT )
                            	            {
                            	            // InternalContextMappingDSL.g:2920:12: (lv_exposedAggregatesComment_85_0= RULE_SL_COMMENT )
                            	            // InternalContextMappingDSL.g:2921:13: lv_exposedAggregatesComment_85_0= RULE_SL_COMMENT
                            	            {
                            	            lv_exposedAggregatesComment_85_0=(Token)match(input,RULE_SL_COMMENT,FOLLOW_55); 

                            	            													newLeafNode(lv_exposedAggregatesComment_85_0, grammarAccess.getUpstreamDownstreamRelationshipAccess().getExposedAggregatesCommentSL_COMMENTTerminalRuleCall_1_2_1_1_2_0());
                            	            												

                            	            													if (current==null) {
                            	            														current = createModelElement(grammarAccess.getUpstreamDownstreamRelationshipRule());
                            	            													}
                            	            													setWithLastConsumed(
                            	            														current,
                            	            														"exposedAggregatesComment",
                            	            														lv_exposedAggregatesComment_85_0,
                            	            														"org.eclipse.xtext.common.Terminals.SL_COMMENT");
                            	            												

                            	            }


                            	            }
                            	            break;

                            	    }


                            	    }


                            	    }

                            	     
                            	    								getUnorderedGroupHelper().returnFromSelection(grammarAccess.getUpstreamDownstreamRelationshipAccess().getUnorderedGroup_1_2_1());
                            	    							

                            	    }


                            	    }


                            	    }
                            	    break;
                            	case 3 :
                            	    // InternalContextMappingDSL.g:2943:6: ({...}? => ( ({...}? => (otherlv_86= 'downstreamRights' (otherlv_87= '=' )? ( (lv_downstreamGovernanceRights_88_0= ruleDownstreamGovernanceRights ) ) ) ) ) )
                            	    {
                            	    // InternalContextMappingDSL.g:2943:6: ({...}? => ( ({...}? => (otherlv_86= 'downstreamRights' (otherlv_87= '=' )? ( (lv_downstreamGovernanceRights_88_0= ruleDownstreamGovernanceRights ) ) ) ) ) )
                            	    // InternalContextMappingDSL.g:2944:7: {...}? => ( ({...}? => (otherlv_86= 'downstreamRights' (otherlv_87= '=' )? ( (lv_downstreamGovernanceRights_88_0= ruleDownstreamGovernanceRights ) ) ) ) )
                            	    {
                            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getUpstreamDownstreamRelationshipAccess().getUnorderedGroup_1_2_1(), 2) ) {
                            	        throw new FailedPredicateException(input, "ruleUpstreamDownstreamRelationship", "getUnorderedGroupHelper().canSelect(grammarAccess.getUpstreamDownstreamRelationshipAccess().getUnorderedGroup_1_2_1(), 2)");
                            	    }
                            	    // InternalContextMappingDSL.g:2944:133: ( ({...}? => (otherlv_86= 'downstreamRights' (otherlv_87= '=' )? ( (lv_downstreamGovernanceRights_88_0= ruleDownstreamGovernanceRights ) ) ) ) )
                            	    // InternalContextMappingDSL.g:2945:8: ({...}? => (otherlv_86= 'downstreamRights' (otherlv_87= '=' )? ( (lv_downstreamGovernanceRights_88_0= ruleDownstreamGovernanceRights ) ) ) )
                            	    {

                            	    								getUnorderedGroupHelper().select(grammarAccess.getUpstreamDownstreamRelationshipAccess().getUnorderedGroup_1_2_1(), 2);
                            	    							
                            	    // InternalContextMappingDSL.g:2948:11: ({...}? => (otherlv_86= 'downstreamRights' (otherlv_87= '=' )? ( (lv_downstreamGovernanceRights_88_0= ruleDownstreamGovernanceRights ) ) ) )
                            	    // InternalContextMappingDSL.g:2948:12: {...}? => (otherlv_86= 'downstreamRights' (otherlv_87= '=' )? ( (lv_downstreamGovernanceRights_88_0= ruleDownstreamGovernanceRights ) ) )
                            	    {
                            	    if ( !((true)) ) {
                            	        throw new FailedPredicateException(input, "ruleUpstreamDownstreamRelationship", "true");
                            	    }
                            	    // InternalContextMappingDSL.g:2948:21: (otherlv_86= 'downstreamRights' (otherlv_87= '=' )? ( (lv_downstreamGovernanceRights_88_0= ruleDownstreamGovernanceRights ) ) )
                            	    // InternalContextMappingDSL.g:2948:22: otherlv_86= 'downstreamRights' (otherlv_87= '=' )? ( (lv_downstreamGovernanceRights_88_0= ruleDownstreamGovernanceRights ) )
                            	    {
                            	    otherlv_86=(Token)match(input,50,FOLLOW_58); 

                            	    											newLeafNode(otherlv_86, grammarAccess.getUpstreamDownstreamRelationshipAccess().getDownstreamRightsKeyword_1_2_1_2_0());
                            	    										
                            	    // InternalContextMappingDSL.g:2952:11: (otherlv_87= '=' )?
                            	    int alt78=2;
                            	    int LA78_0 = input.LA(1);

                            	    if ( (LA78_0==21) ) {
                            	        alt78=1;
                            	    }
                            	    switch (alt78) {
                            	        case 1 :
                            	            // InternalContextMappingDSL.g:2953:12: otherlv_87= '='
                            	            {
                            	            otherlv_87=(Token)match(input,21,FOLLOW_58); 

                            	            												newLeafNode(otherlv_87, grammarAccess.getUpstreamDownstreamRelationshipAccess().getEqualsSignKeyword_1_2_1_2_1());
                            	            											

                            	            }
                            	            break;

                            	    }

                            	    // InternalContextMappingDSL.g:2958:11: ( (lv_downstreamGovernanceRights_88_0= ruleDownstreamGovernanceRights ) )
                            	    // InternalContextMappingDSL.g:2959:12: (lv_downstreamGovernanceRights_88_0= ruleDownstreamGovernanceRights )
                            	    {
                            	    // InternalContextMappingDSL.g:2959:12: (lv_downstreamGovernanceRights_88_0= ruleDownstreamGovernanceRights )
                            	    // InternalContextMappingDSL.g:2960:13: lv_downstreamGovernanceRights_88_0= ruleDownstreamGovernanceRights
                            	    {

                            	    													newCompositeNode(grammarAccess.getUpstreamDownstreamRelationshipAccess().getDownstreamGovernanceRightsDownstreamGovernanceRightsEnumRuleCall_1_2_1_2_2_0());
                            	    												
                            	    pushFollow(FOLLOW_55);
                            	    lv_downstreamGovernanceRights_88_0=ruleDownstreamGovernanceRights();

                            	    state._fsp--;


                            	    													if (current==null) {
                            	    														current = createModelElementForParent(grammarAccess.getUpstreamDownstreamRelationshipRule());
                            	    													}
                            	    													set(
                            	    														current,
                            	    														"downstreamGovernanceRights",
                            	    														lv_downstreamGovernanceRights_88_0,
                            	    														"org.contextmapper.dsl.ContextMappingDSL.DownstreamGovernanceRights");
                            	    													afterParserOrEnumRuleCall();
                            	    												

                            	    }


                            	    }


                            	    }


                            	    }

                            	     
                            	    								getUnorderedGroupHelper().returnFromSelection(grammarAccess.getUpstreamDownstreamRelationshipAccess().getUnorderedGroup_1_2_1());
                            	    							

                            	    }


                            	    }


                            	    }
                            	    break;

                            	default :
                            	    break loop79;
                                }
                            } while (true);


                            }


                            }

                             
                            						  getUnorderedGroupHelper().leave(grammarAccess.getUpstreamDownstreamRelationshipAccess().getUnorderedGroup_1_2_1());
                            						

                            }

                            this_CLOSE_89=(Token)match(input,RULE_CLOSE,FOLLOW_2); 

                            					newLeafNode(this_CLOSE_89, grammarAccess.getUpstreamDownstreamRelationshipAccess().getCLOSETerminalRuleCall_1_2_2());
                            				

                            }
                            break;

                    }


                    }


                    }
                    break;

            }


            }


            	leaveRule();

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleUpstreamDownstreamRelationship"


    // $ANTLR start "entryRuleCustomerSupplierRelationship"
    // InternalContextMappingDSL.g:3000:1: entryRuleCustomerSupplierRelationship returns [EObject current=null] : iv_ruleCustomerSupplierRelationship= ruleCustomerSupplierRelationship EOF ;
    public final EObject entryRuleCustomerSupplierRelationship() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleCustomerSupplierRelationship = null;


        try {
            // InternalContextMappingDSL.g:3000:69: (iv_ruleCustomerSupplierRelationship= ruleCustomerSupplierRelationship EOF )
            // InternalContextMappingDSL.g:3001:2: iv_ruleCustomerSupplierRelationship= ruleCustomerSupplierRelationship EOF
            {
             newCompositeNode(grammarAccess.getCustomerSupplierRelationshipRule()); 
            pushFollow(FOLLOW_1);
            iv_ruleCustomerSupplierRelationship=ruleCustomerSupplierRelationship();

            state._fsp--;

             current =iv_ruleCustomerSupplierRelationship; 
            match(input,EOF,FOLLOW_2); 

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleCustomerSupplierRelationship"


    // $ANTLR start "ruleCustomerSupplierRelationship"
    // InternalContextMappingDSL.g:3007:1: ruleCustomerSupplierRelationship returns [EObject current=null] : ( ( ( ( (otherlv_0= RULE_ID ) ) otherlv_1= '[' (otherlv_2= 'U' otherlv_3= ',' )? otherlv_4= 'S' (otherlv_5= ',' ( (lv_upstreamRoles_6_0= ruleUpstreamRole ) ) (otherlv_7= ',' ( (lv_upstreamRoles_8_0= ruleUpstreamRole ) ) )* )? otherlv_9= ']' otherlv_10= '->' otherlv_11= '[' (otherlv_12= 'D' otherlv_13= ',' )? otherlv_14= 'C' (otherlv_15= ',' ( (lv_downstreamRoles_16_0= ruleDownstreamRole ) ) (otherlv_17= ',' ( (lv_downstreamRoles_18_0= ruleDownstreamRole ) ) )* )? otherlv_19= ']' ( (otherlv_20= RULE_ID ) ) ) | ( ( (otherlv_21= RULE_ID ) ) otherlv_22= '[' (otherlv_23= 'D' otherlv_24= ',' )? otherlv_25= 'C' (otherlv_26= ',' ( (lv_downstreamRoles_27_0= ruleDownstreamRole ) ) (otherlv_28= ',' ( (lv_downstreamRoles_29_0= ruleDownstreamRole ) ) )* )? otherlv_30= ']' otherlv_31= '<-' otherlv_32= '[' (otherlv_33= 'U' otherlv_34= ',' )? otherlv_35= 'S' (otherlv_36= ',' ( (lv_upstreamRoles_37_0= ruleUpstreamRole ) ) (otherlv_38= ',' ( (lv_upstreamRoles_39_0= ruleUpstreamRole ) ) )* )? otherlv_40= ']' ( (otherlv_41= RULE_ID ) ) ) | ( ( (otherlv_42= RULE_ID ) ) (otherlv_43= '[' ( ( (lv_downstreamRoles_44_0= ruleDownstreamRole ) ) (otherlv_45= ',' ( (lv_downstreamRoles_46_0= ruleDownstreamRole ) ) )* )? otherlv_47= ']' )? otherlv_48= 'Customer-Supplier' (otherlv_49= '[' ( ( (lv_upstreamRoles_50_0= ruleUpstreamRole ) ) (otherlv_51= ',' ( (lv_upstreamRoles_52_0= ruleUpstreamRole ) ) )* )? otherlv_53= ']' )? ( (otherlv_54= RULE_ID ) ) ) | ( ( (otherlv_55= RULE_ID ) ) (otherlv_56= '[' ( ( (lv_upstreamRoles_57_0= ruleUpstreamRole ) ) (otherlv_58= ',' ( (lv_upstreamRoles_59_0= ruleUpstreamRole ) ) )* )? otherlv_60= ']' )? otherlv_61= 'Supplier-Customer' (otherlv_62= '[' ( ( (lv_downstreamRoles_63_0= ruleDownstreamRole ) ) (otherlv_64= ',' ( (lv_downstreamRoles_65_0= ruleDownstreamRole ) ) )* )? otherlv_66= ']' )? ( (otherlv_67= RULE_ID ) ) ) ) (otherlv_68= ':' ( (lv_name_69_0= RULE_ID ) ) )? (this_OPEN_70= RULE_OPEN ( ( ( ( ({...}? => ( ({...}? => (otherlv_72= 'implementationTechnology' (otherlv_73= '=' )? ( (lv_implementationTechnology_74_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_75= 'exposedAggregates' (otherlv_76= '=' )? ( (otherlv_77= RULE_ID ) ) ) (otherlv_78= ',' ( (otherlv_79= RULE_ID ) ) )* ( (lv_exposedAggregatesComment_80_0= RULE_SL_COMMENT ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_81= 'downstreamRights' (otherlv_82= '=' )? ( (lv_downstreamGovernanceRights_83_0= ruleDownstreamGovernanceRights ) ) ) ) ) ) )* ) ) ) this_CLOSE_84= RULE_CLOSE )? ) ;
    public final EObject ruleCustomerSupplierRelationship() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_1=null;
        Token otherlv_2=null;
        Token otherlv_3=null;
        Token otherlv_4=null;
        Token otherlv_5=null;
        Token otherlv_7=null;
        Token otherlv_9=null;
        Token otherlv_10=null;
        Token otherlv_11=null;
        Token otherlv_12=null;
        Token otherlv_13=null;
        Token otherlv_14=null;
        Token otherlv_15=null;
        Token otherlv_17=null;
        Token otherlv_19=null;
        Token otherlv_20=null;
        Token otherlv_21=null;
        Token otherlv_22=null;
        Token otherlv_23=null;
        Token otherlv_24=null;
        Token otherlv_25=null;
        Token otherlv_26=null;
        Token otherlv_28=null;
        Token otherlv_30=null;
        Token otherlv_31=null;
        Token otherlv_32=null;
        Token otherlv_33=null;
        Token otherlv_34=null;
        Token otherlv_35=null;
        Token otherlv_36=null;
        Token otherlv_38=null;
        Token otherlv_40=null;
        Token otherlv_41=null;
        Token otherlv_42=null;
        Token otherlv_43=null;
        Token otherlv_45=null;
        Token otherlv_47=null;
        Token otherlv_48=null;
        Token otherlv_49=null;
        Token otherlv_51=null;
        Token otherlv_53=null;
        Token otherlv_54=null;
        Token otherlv_55=null;
        Token otherlv_56=null;
        Token otherlv_58=null;
        Token otherlv_60=null;
        Token otherlv_61=null;
        Token otherlv_62=null;
        Token otherlv_64=null;
        Token otherlv_66=null;
        Token otherlv_67=null;
        Token otherlv_68=null;
        Token lv_name_69_0=null;
        Token this_OPEN_70=null;
        Token otherlv_72=null;
        Token otherlv_73=null;
        Token lv_implementationTechnology_74_0=null;
        Token otherlv_75=null;
        Token otherlv_76=null;
        Token otherlv_77=null;
        Token otherlv_78=null;
        Token otherlv_79=null;
        Token lv_exposedAggregatesComment_80_0=null;
        Token otherlv_81=null;
        Token otherlv_82=null;
        Token this_CLOSE_84=null;
        Enumerator lv_upstreamRoles_6_0 = null;

        Enumerator lv_upstreamRoles_8_0 = null;

        Enumerator lv_downstreamRoles_16_0 = null;

        Enumerator lv_downstreamRoles_18_0 = null;

        Enumerator lv_downstreamRoles_27_0 = null;

        Enumerator lv_downstreamRoles_29_0 = null;

        Enumerator lv_upstreamRoles_37_0 = null;

        Enumerator lv_upstreamRoles_39_0 = null;

        Enumerator lv_downstreamRoles_44_0 = null;

        Enumerator lv_downstreamRoles_46_0 = null;

        Enumerator lv_upstreamRoles_50_0 = null;

        Enumerator lv_upstreamRoles_52_0 = null;

        Enumerator lv_upstreamRoles_57_0 = null;

        Enumerator lv_upstreamRoles_59_0 = null;

        Enumerator lv_downstreamRoles_63_0 = null;

        Enumerator lv_downstreamRoles_65_0 = null;

        Enumerator lv_downstreamGovernanceRights_83_0 = null;



        	enterRule();

        try {
            // InternalContextMappingDSL.g:3013:2: ( ( ( ( ( (otherlv_0= RULE_ID ) ) otherlv_1= '[' (otherlv_2= 'U' otherlv_3= ',' )? otherlv_4= 'S' (otherlv_5= ',' ( (lv_upstreamRoles_6_0= ruleUpstreamRole ) ) (otherlv_7= ',' ( (lv_upstreamRoles_8_0= ruleUpstreamRole ) ) )* )? otherlv_9= ']' otherlv_10= '->' otherlv_11= '[' (otherlv_12= 'D' otherlv_13= ',' )? otherlv_14= 'C' (otherlv_15= ',' ( (lv_downstreamRoles_16_0= ruleDownstreamRole ) ) (otherlv_17= ',' ( (lv_downstreamRoles_18_0= ruleDownstreamRole ) ) )* )? otherlv_19= ']' ( (otherlv_20= RULE_ID ) ) ) | ( ( (otherlv_21= RULE_ID ) ) otherlv_22= '[' (otherlv_23= 'D' otherlv_24= ',' )? otherlv_25= 'C' (otherlv_26= ',' ( (lv_downstreamRoles_27_0= ruleDownstreamRole ) ) (otherlv_28= ',' ( (lv_downstreamRoles_29_0= ruleDownstreamRole ) ) )* )? otherlv_30= ']' otherlv_31= '<-' otherlv_32= '[' (otherlv_33= 'U' otherlv_34= ',' )? otherlv_35= 'S' (otherlv_36= ',' ( (lv_upstreamRoles_37_0= ruleUpstreamRole ) ) (otherlv_38= ',' ( (lv_upstreamRoles_39_0= ruleUpstreamRole ) ) )* )? otherlv_40= ']' ( (otherlv_41= RULE_ID ) ) ) | ( ( (otherlv_42= RULE_ID ) ) (otherlv_43= '[' ( ( (lv_downstreamRoles_44_0= ruleDownstreamRole ) ) (otherlv_45= ',' ( (lv_downstreamRoles_46_0= ruleDownstreamRole ) ) )* )? otherlv_47= ']' )? otherlv_48= 'Customer-Supplier' (otherlv_49= '[' ( ( (lv_upstreamRoles_50_0= ruleUpstreamRole ) ) (otherlv_51= ',' ( (lv_upstreamRoles_52_0= ruleUpstreamRole ) ) )* )? otherlv_53= ']' )? ( (otherlv_54= RULE_ID ) ) ) | ( ( (otherlv_55= RULE_ID ) ) (otherlv_56= '[' ( ( (lv_upstreamRoles_57_0= ruleUpstreamRole ) ) (otherlv_58= ',' ( (lv_upstreamRoles_59_0= ruleUpstreamRole ) ) )* )? otherlv_60= ']' )? otherlv_61= 'Supplier-Customer' (otherlv_62= '[' ( ( (lv_downstreamRoles_63_0= ruleDownstreamRole ) ) (otherlv_64= ',' ( (lv_downstreamRoles_65_0= ruleDownstreamRole ) ) )* )? otherlv_66= ']' )? ( (otherlv_67= RULE_ID ) ) ) ) (otherlv_68= ':' ( (lv_name_69_0= RULE_ID ) ) )? (this_OPEN_70= RULE_OPEN ( ( ( ( ({...}? => ( ({...}? => (otherlv_72= 'implementationTechnology' (otherlv_73= '=' )? ( (lv_implementationTechnology_74_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_75= 'exposedAggregates' (otherlv_76= '=' )? ( (otherlv_77= RULE_ID ) ) ) (otherlv_78= ',' ( (otherlv_79= RULE_ID ) ) )* ( (lv_exposedAggregatesComment_80_0= RULE_SL_COMMENT ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_81= 'downstreamRights' (otherlv_82= '=' )? ( (lv_downstreamGovernanceRights_83_0= ruleDownstreamGovernanceRights ) ) ) ) ) ) )* ) ) ) this_CLOSE_84= RULE_CLOSE )? ) )
            // InternalContextMappingDSL.g:3014:2: ( ( ( ( (otherlv_0= RULE_ID ) ) otherlv_1= '[' (otherlv_2= 'U' otherlv_3= ',' )? otherlv_4= 'S' (otherlv_5= ',' ( (lv_upstreamRoles_6_0= ruleUpstreamRole ) ) (otherlv_7= ',' ( (lv_upstreamRoles_8_0= ruleUpstreamRole ) ) )* )? otherlv_9= ']' otherlv_10= '->' otherlv_11= '[' (otherlv_12= 'D' otherlv_13= ',' )? otherlv_14= 'C' (otherlv_15= ',' ( (lv_downstreamRoles_16_0= ruleDownstreamRole ) ) (otherlv_17= ',' ( (lv_downstreamRoles_18_0= ruleDownstreamRole ) ) )* )? otherlv_19= ']' ( (otherlv_20= RULE_ID ) ) ) | ( ( (otherlv_21= RULE_ID ) ) otherlv_22= '[' (otherlv_23= 'D' otherlv_24= ',' )? otherlv_25= 'C' (otherlv_26= ',' ( (lv_downstreamRoles_27_0= ruleDownstreamRole ) ) (otherlv_28= ',' ( (lv_downstreamRoles_29_0= ruleDownstreamRole ) ) )* )? otherlv_30= ']' otherlv_31= '<-' otherlv_32= '[' (otherlv_33= 'U' otherlv_34= ',' )? otherlv_35= 'S' (otherlv_36= ',' ( (lv_upstreamRoles_37_0= ruleUpstreamRole ) ) (otherlv_38= ',' ( (lv_upstreamRoles_39_0= ruleUpstreamRole ) ) )* )? otherlv_40= ']' ( (otherlv_41= RULE_ID ) ) ) | ( ( (otherlv_42= RULE_ID ) ) (otherlv_43= '[' ( ( (lv_downstreamRoles_44_0= ruleDownstreamRole ) ) (otherlv_45= ',' ( (lv_downstreamRoles_46_0= ruleDownstreamRole ) ) )* )? otherlv_47= ']' )? otherlv_48= 'Customer-Supplier' (otherlv_49= '[' ( ( (lv_upstreamRoles_50_0= ruleUpstreamRole ) ) (otherlv_51= ',' ( (lv_upstreamRoles_52_0= ruleUpstreamRole ) ) )* )? otherlv_53= ']' )? ( (otherlv_54= RULE_ID ) ) ) | ( ( (otherlv_55= RULE_ID ) ) (otherlv_56= '[' ( ( (lv_upstreamRoles_57_0= ruleUpstreamRole ) ) (otherlv_58= ',' ( (lv_upstreamRoles_59_0= ruleUpstreamRole ) ) )* )? otherlv_60= ']' )? otherlv_61= 'Supplier-Customer' (otherlv_62= '[' ( ( (lv_downstreamRoles_63_0= ruleDownstreamRole ) ) (otherlv_64= ',' ( (lv_downstreamRoles_65_0= ruleDownstreamRole ) ) )* )? otherlv_66= ']' )? ( (otherlv_67= RULE_ID ) ) ) ) (otherlv_68= ':' ( (lv_name_69_0= RULE_ID ) ) )? (this_OPEN_70= RULE_OPEN ( ( ( ( ({...}? => ( ({...}? => (otherlv_72= 'implementationTechnology' (otherlv_73= '=' )? ( (lv_implementationTechnology_74_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_75= 'exposedAggregates' (otherlv_76= '=' )? ( (otherlv_77= RULE_ID ) ) ) (otherlv_78= ',' ( (otherlv_79= RULE_ID ) ) )* ( (lv_exposedAggregatesComment_80_0= RULE_SL_COMMENT ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_81= 'downstreamRights' (otherlv_82= '=' )? ( (lv_downstreamGovernanceRights_83_0= ruleDownstreamGovernanceRights ) ) ) ) ) ) )* ) ) ) this_CLOSE_84= RULE_CLOSE )? )
            {
            // InternalContextMappingDSL.g:3014:2: ( ( ( ( (otherlv_0= RULE_ID ) ) otherlv_1= '[' (otherlv_2= 'U' otherlv_3= ',' )? otherlv_4= 'S' (otherlv_5= ',' ( (lv_upstreamRoles_6_0= ruleUpstreamRole ) ) (otherlv_7= ',' ( (lv_upstreamRoles_8_0= ruleUpstreamRole ) ) )* )? otherlv_9= ']' otherlv_10= '->' otherlv_11= '[' (otherlv_12= 'D' otherlv_13= ',' )? otherlv_14= 'C' (otherlv_15= ',' ( (lv_downstreamRoles_16_0= ruleDownstreamRole ) ) (otherlv_17= ',' ( (lv_downstreamRoles_18_0= ruleDownstreamRole ) ) )* )? otherlv_19= ']' ( (otherlv_20= RULE_ID ) ) ) | ( ( (otherlv_21= RULE_ID ) ) otherlv_22= '[' (otherlv_23= 'D' otherlv_24= ',' )? otherlv_25= 'C' (otherlv_26= ',' ( (lv_downstreamRoles_27_0= ruleDownstreamRole ) ) (otherlv_28= ',' ( (lv_downstreamRoles_29_0= ruleDownstreamRole ) ) )* )? otherlv_30= ']' otherlv_31= '<-' otherlv_32= '[' (otherlv_33= 'U' otherlv_34= ',' )? otherlv_35= 'S' (otherlv_36= ',' ( (lv_upstreamRoles_37_0= ruleUpstreamRole ) ) (otherlv_38= ',' ( (lv_upstreamRoles_39_0= ruleUpstreamRole ) ) )* )? otherlv_40= ']' ( (otherlv_41= RULE_ID ) ) ) | ( ( (otherlv_42= RULE_ID ) ) (otherlv_43= '[' ( ( (lv_downstreamRoles_44_0= ruleDownstreamRole ) ) (otherlv_45= ',' ( (lv_downstreamRoles_46_0= ruleDownstreamRole ) ) )* )? otherlv_47= ']' )? otherlv_48= 'Customer-Supplier' (otherlv_49= '[' ( ( (lv_upstreamRoles_50_0= ruleUpstreamRole ) ) (otherlv_51= ',' ( (lv_upstreamRoles_52_0= ruleUpstreamRole ) ) )* )? otherlv_53= ']' )? ( (otherlv_54= RULE_ID ) ) ) | ( ( (otherlv_55= RULE_ID ) ) (otherlv_56= '[' ( ( (lv_upstreamRoles_57_0= ruleUpstreamRole ) ) (otherlv_58= ',' ( (lv_upstreamRoles_59_0= ruleUpstreamRole ) ) )* )? otherlv_60= ']' )? otherlv_61= 'Supplier-Customer' (otherlv_62= '[' ( ( (lv_downstreamRoles_63_0= ruleDownstreamRole ) ) (otherlv_64= ',' ( (lv_downstreamRoles_65_0= ruleDownstreamRole ) ) )* )? otherlv_66= ']' )? ( (otherlv_67= RULE_ID ) ) ) ) (otherlv_68= ':' ( (lv_name_69_0= RULE_ID ) ) )? (this_OPEN_70= RULE_OPEN ( ( ( ( ({...}? => ( ({...}? => (otherlv_72= 'implementationTechnology' (otherlv_73= '=' )? ( (lv_implementationTechnology_74_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_75= 'exposedAggregates' (otherlv_76= '=' )? ( (otherlv_77= RULE_ID ) ) ) (otherlv_78= ',' ( (otherlv_79= RULE_ID ) ) )* ( (lv_exposedAggregatesComment_80_0= RULE_SL_COMMENT ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_81= 'downstreamRights' (otherlv_82= '=' )? ( (lv_downstreamGovernanceRights_83_0= ruleDownstreamGovernanceRights ) ) ) ) ) ) )* ) ) ) this_CLOSE_84= RULE_CLOSE )? )
            // InternalContextMappingDSL.g:3015:3: ( ( ( (otherlv_0= RULE_ID ) ) otherlv_1= '[' (otherlv_2= 'U' otherlv_3= ',' )? otherlv_4= 'S' (otherlv_5= ',' ( (lv_upstreamRoles_6_0= ruleUpstreamRole ) ) (otherlv_7= ',' ( (lv_upstreamRoles_8_0= ruleUpstreamRole ) ) )* )? otherlv_9= ']' otherlv_10= '->' otherlv_11= '[' (otherlv_12= 'D' otherlv_13= ',' )? otherlv_14= 'C' (otherlv_15= ',' ( (lv_downstreamRoles_16_0= ruleDownstreamRole ) ) (otherlv_17= ',' ( (lv_downstreamRoles_18_0= ruleDownstreamRole ) ) )* )? otherlv_19= ']' ( (otherlv_20= RULE_ID ) ) ) | ( ( (otherlv_21= RULE_ID ) ) otherlv_22= '[' (otherlv_23= 'D' otherlv_24= ',' )? otherlv_25= 'C' (otherlv_26= ',' ( (lv_downstreamRoles_27_0= ruleDownstreamRole ) ) (otherlv_28= ',' ( (lv_downstreamRoles_29_0= ruleDownstreamRole ) ) )* )? otherlv_30= ']' otherlv_31= '<-' otherlv_32= '[' (otherlv_33= 'U' otherlv_34= ',' )? otherlv_35= 'S' (otherlv_36= ',' ( (lv_upstreamRoles_37_0= ruleUpstreamRole ) ) (otherlv_38= ',' ( (lv_upstreamRoles_39_0= ruleUpstreamRole ) ) )* )? otherlv_40= ']' ( (otherlv_41= RULE_ID ) ) ) | ( ( (otherlv_42= RULE_ID ) ) (otherlv_43= '[' ( ( (lv_downstreamRoles_44_0= ruleDownstreamRole ) ) (otherlv_45= ',' ( (lv_downstreamRoles_46_0= ruleDownstreamRole ) ) )* )? otherlv_47= ']' )? otherlv_48= 'Customer-Supplier' (otherlv_49= '[' ( ( (lv_upstreamRoles_50_0= ruleUpstreamRole ) ) (otherlv_51= ',' ( (lv_upstreamRoles_52_0= ruleUpstreamRole ) ) )* )? otherlv_53= ']' )? ( (otherlv_54= RULE_ID ) ) ) | ( ( (otherlv_55= RULE_ID ) ) (otherlv_56= '[' ( ( (lv_upstreamRoles_57_0= ruleUpstreamRole ) ) (otherlv_58= ',' ( (lv_upstreamRoles_59_0= ruleUpstreamRole ) ) )* )? otherlv_60= ']' )? otherlv_61= 'Supplier-Customer' (otherlv_62= '[' ( ( (lv_downstreamRoles_63_0= ruleDownstreamRole ) ) (otherlv_64= ',' ( (lv_downstreamRoles_65_0= ruleDownstreamRole ) ) )* )? otherlv_66= ']' )? ( (otherlv_67= RULE_ID ) ) ) ) (otherlv_68= ':' ( (lv_name_69_0= RULE_ID ) ) )? (this_OPEN_70= RULE_OPEN ( ( ( ( ({...}? => ( ({...}? => (otherlv_72= 'implementationTechnology' (otherlv_73= '=' )? ( (lv_implementationTechnology_74_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_75= 'exposedAggregates' (otherlv_76= '=' )? ( (otherlv_77= RULE_ID ) ) ) (otherlv_78= ',' ( (otherlv_79= RULE_ID ) ) )* ( (lv_exposedAggregatesComment_80_0= RULE_SL_COMMENT ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_81= 'downstreamRights' (otherlv_82= '=' )? ( (lv_downstreamGovernanceRights_83_0= ruleDownstreamGovernanceRights ) ) ) ) ) ) )* ) ) ) this_CLOSE_84= RULE_CLOSE )?
            {
            // InternalContextMappingDSL.g:3015:3: ( ( ( (otherlv_0= RULE_ID ) ) otherlv_1= '[' (otherlv_2= 'U' otherlv_3= ',' )? otherlv_4= 'S' (otherlv_5= ',' ( (lv_upstreamRoles_6_0= ruleUpstreamRole ) ) (otherlv_7= ',' ( (lv_upstreamRoles_8_0= ruleUpstreamRole ) ) )* )? otherlv_9= ']' otherlv_10= '->' otherlv_11= '[' (otherlv_12= 'D' otherlv_13= ',' )? otherlv_14= 'C' (otherlv_15= ',' ( (lv_downstreamRoles_16_0= ruleDownstreamRole ) ) (otherlv_17= ',' ( (lv_downstreamRoles_18_0= ruleDownstreamRole ) ) )* )? otherlv_19= ']' ( (otherlv_20= RULE_ID ) ) ) | ( ( (otherlv_21= RULE_ID ) ) otherlv_22= '[' (otherlv_23= 'D' otherlv_24= ',' )? otherlv_25= 'C' (otherlv_26= ',' ( (lv_downstreamRoles_27_0= ruleDownstreamRole ) ) (otherlv_28= ',' ( (lv_downstreamRoles_29_0= ruleDownstreamRole ) ) )* )? otherlv_30= ']' otherlv_31= '<-' otherlv_32= '[' (otherlv_33= 'U' otherlv_34= ',' )? otherlv_35= 'S' (otherlv_36= ',' ( (lv_upstreamRoles_37_0= ruleUpstreamRole ) ) (otherlv_38= ',' ( (lv_upstreamRoles_39_0= ruleUpstreamRole ) ) )* )? otherlv_40= ']' ( (otherlv_41= RULE_ID ) ) ) | ( ( (otherlv_42= RULE_ID ) ) (otherlv_43= '[' ( ( (lv_downstreamRoles_44_0= ruleDownstreamRole ) ) (otherlv_45= ',' ( (lv_downstreamRoles_46_0= ruleDownstreamRole ) ) )* )? otherlv_47= ']' )? otherlv_48= 'Customer-Supplier' (otherlv_49= '[' ( ( (lv_upstreamRoles_50_0= ruleUpstreamRole ) ) (otherlv_51= ',' ( (lv_upstreamRoles_52_0= ruleUpstreamRole ) ) )* )? otherlv_53= ']' )? ( (otherlv_54= RULE_ID ) ) ) | ( ( (otherlv_55= RULE_ID ) ) (otherlv_56= '[' ( ( (lv_upstreamRoles_57_0= ruleUpstreamRole ) ) (otherlv_58= ',' ( (lv_upstreamRoles_59_0= ruleUpstreamRole ) ) )* )? otherlv_60= ']' )? otherlv_61= 'Supplier-Customer' (otherlv_62= '[' ( ( (lv_downstreamRoles_63_0= ruleDownstreamRole ) ) (otherlv_64= ',' ( (lv_downstreamRoles_65_0= ruleDownstreamRole ) ) )* )? otherlv_66= ']' )? ( (otherlv_67= RULE_ID ) ) ) )
            int alt106=4;
            int LA106_0 = input.LA(1);

            if ( (LA106_0==RULE_ID) ) {
                switch ( input.LA(2) ) {
                case 35:
                    {
                    switch ( input.LA(3) ) {
                    case 45:
                    case 52:
                        {
                        alt106=2;
                        }
                        break;
                    case 195:
                    case 196:
                        {
                        alt106=3;
                        }
                        break;
                    case 37:
                        {
                        int LA106_6 = input.LA(4);

                        if ( (LA106_6==53) ) {
                            alt106=3;
                        }
                        else if ( (LA106_6==54) ) {
                            alt106=4;
                        }
                        else {
                            NoViableAltException nvae =
                                new NoViableAltException("", 106, 6, input);

                            throw nvae;
                        }
                        }
                        break;
                    case 43:
                    case 51:
                        {
                        alt106=1;
                        }
                        break;
                    case 193:
                    case 194:
                        {
                        alt106=4;
                        }
                        break;
                    default:
                        NoViableAltException nvae =
                            new NoViableAltException("", 106, 2, input);

                        throw nvae;
                    }

                    }
                    break;
                case 53:
                    {
                    alt106=3;
                    }
                    break;
                case 54:
                    {
                    alt106=4;
                    }
                    break;
                default:
                    NoViableAltException nvae =
                        new NoViableAltException("", 106, 1, input);

                    throw nvae;
                }

            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 106, 0, input);

                throw nvae;
            }
            switch (alt106) {
                case 1 :
                    // InternalContextMappingDSL.g:3016:4: ( ( (otherlv_0= RULE_ID ) ) otherlv_1= '[' (otherlv_2= 'U' otherlv_3= ',' )? otherlv_4= 'S' (otherlv_5= ',' ( (lv_upstreamRoles_6_0= ruleUpstreamRole ) ) (otherlv_7= ',' ( (lv_upstreamRoles_8_0= ruleUpstreamRole ) ) )* )? otherlv_9= ']' otherlv_10= '->' otherlv_11= '[' (otherlv_12= 'D' otherlv_13= ',' )? otherlv_14= 'C' (otherlv_15= ',' ( (lv_downstreamRoles_16_0= ruleDownstreamRole ) ) (otherlv_17= ',' ( (lv_downstreamRoles_18_0= ruleDownstreamRole ) ) )* )? otherlv_19= ']' ( (otherlv_20= RULE_ID ) ) )
                    {
                    // InternalContextMappingDSL.g:3016:4: ( ( (otherlv_0= RULE_ID ) ) otherlv_1= '[' (otherlv_2= 'U' otherlv_3= ',' )? otherlv_4= 'S' (otherlv_5= ',' ( (lv_upstreamRoles_6_0= ruleUpstreamRole ) ) (otherlv_7= ',' ( (lv_upstreamRoles_8_0= ruleUpstreamRole ) ) )* )? otherlv_9= ']' otherlv_10= '->' otherlv_11= '[' (otherlv_12= 'D' otherlv_13= ',' )? otherlv_14= 'C' (otherlv_15= ',' ( (lv_downstreamRoles_16_0= ruleDownstreamRole ) ) (otherlv_17= ',' ( (lv_downstreamRoles_18_0= ruleDownstreamRole ) ) )* )? otherlv_19= ']' ( (otherlv_20= RULE_ID ) ) )
                    // InternalContextMappingDSL.g:3017:5: ( (otherlv_0= RULE_ID ) ) otherlv_1= '[' (otherlv_2= 'U' otherlv_3= ',' )? otherlv_4= 'S' (otherlv_5= ',' ( (lv_upstreamRoles_6_0= ruleUpstreamRole ) ) (otherlv_7= ',' ( (lv_upstreamRoles_8_0= ruleUpstreamRole ) ) )* )? otherlv_9= ']' otherlv_10= '->' otherlv_11= '[' (otherlv_12= 'D' otherlv_13= ',' )? otherlv_14= 'C' (otherlv_15= ',' ( (lv_downstreamRoles_16_0= ruleDownstreamRole ) ) (otherlv_17= ',' ( (lv_downstreamRoles_18_0= ruleDownstreamRole ) ) )* )? otherlv_19= ']' ( (otherlv_20= RULE_ID ) )
                    {
                    // InternalContextMappingDSL.g:3017:5: ( (otherlv_0= RULE_ID ) )
                    // InternalContextMappingDSL.g:3018:6: (otherlv_0= RULE_ID )
                    {
                    // InternalContextMappingDSL.g:3018:6: (otherlv_0= RULE_ID )
                    // InternalContextMappingDSL.g:3019:7: otherlv_0= RULE_ID
                    {

                    							if (current==null) {
                    								current = createModelElement(grammarAccess.getCustomerSupplierRelationshipRule());
                    							}
                    						
                    otherlv_0=(Token)match(input,RULE_ID,FOLLOW_28); 

                    							newLeafNode(otherlv_0, grammarAccess.getCustomerSupplierRelationshipAccess().getUpstreamBoundedContextCrossReference_0_0_0_0());
                    						

                    }


                    }

                    otherlv_1=(Token)match(input,35,FOLLOW_59); 

                    					newLeafNode(otherlv_1, grammarAccess.getCustomerSupplierRelationshipAccess().getLeftSquareBracketKeyword_0_0_1());
                    				
                    // InternalContextMappingDSL.g:3034:5: (otherlv_2= 'U' otherlv_3= ',' )?
                    int alt82=2;
                    int LA82_0 = input.LA(1);

                    if ( (LA82_0==43) ) {
                        alt82=1;
                    }
                    switch (alt82) {
                        case 1 :
                            // InternalContextMappingDSL.g:3035:6: otherlv_2= 'U' otherlv_3= ','
                            {
                            otherlv_2=(Token)match(input,43,FOLLOW_42); 

                            						newLeafNode(otherlv_2, grammarAccess.getCustomerSupplierRelationshipAccess().getUKeyword_0_0_2_0());
                            					
                            otherlv_3=(Token)match(input,24,FOLLOW_60); 

                            						newLeafNode(otherlv_3, grammarAccess.getCustomerSupplierRelationshipAccess().getCommaKeyword_0_0_2_1());
                            					

                            }
                            break;

                    }

                    otherlv_4=(Token)match(input,51,FOLLOW_43); 

                    					newLeafNode(otherlv_4, grammarAccess.getCustomerSupplierRelationshipAccess().getSKeyword_0_0_3());
                    				
                    // InternalContextMappingDSL.g:3048:5: (otherlv_5= ',' ( (lv_upstreamRoles_6_0= ruleUpstreamRole ) ) (otherlv_7= ',' ( (lv_upstreamRoles_8_0= ruleUpstreamRole ) ) )* )?
                    int alt84=2;
                    int LA84_0 = input.LA(1);

                    if ( (LA84_0==24) ) {
                        alt84=1;
                    }
                    switch (alt84) {
                        case 1 :
                            // InternalContextMappingDSL.g:3049:6: otherlv_5= ',' ( (lv_upstreamRoles_6_0= ruleUpstreamRole ) ) (otherlv_7= ',' ( (lv_upstreamRoles_8_0= ruleUpstreamRole ) ) )*
                            {
                            otherlv_5=(Token)match(input,24,FOLLOW_41); 

                            						newLeafNode(otherlv_5, grammarAccess.getCustomerSupplierRelationshipAccess().getCommaKeyword_0_0_4_0());
                            					
                            // InternalContextMappingDSL.g:3053:6: ( (lv_upstreamRoles_6_0= ruleUpstreamRole ) )
                            // InternalContextMappingDSL.g:3054:7: (lv_upstreamRoles_6_0= ruleUpstreamRole )
                            {
                            // InternalContextMappingDSL.g:3054:7: (lv_upstreamRoles_6_0= ruleUpstreamRole )
                            // InternalContextMappingDSL.g:3055:8: lv_upstreamRoles_6_0= ruleUpstreamRole
                            {

                            								newCompositeNode(grammarAccess.getCustomerSupplierRelationshipAccess().getUpstreamRolesUpstreamRoleEnumRuleCall_0_0_4_1_0());
                            							
                            pushFollow(FOLLOW_43);
                            lv_upstreamRoles_6_0=ruleUpstreamRole();

                            state._fsp--;


                            								if (current==null) {
                            									current = createModelElementForParent(grammarAccess.getCustomerSupplierRelationshipRule());
                            								}
                            								add(
                            									current,
                            									"upstreamRoles",
                            									lv_upstreamRoles_6_0,
                            									"org.contextmapper.dsl.ContextMappingDSL.UpstreamRole");
                            								afterParserOrEnumRuleCall();
                            							

                            }


                            }

                            // InternalContextMappingDSL.g:3072:6: (otherlv_7= ',' ( (lv_upstreamRoles_8_0= ruleUpstreamRole ) ) )*
                            loop83:
                            do {
                                int alt83=2;
                                int LA83_0 = input.LA(1);

                                if ( (LA83_0==24) ) {
                                    alt83=1;
                                }


                                switch (alt83) {
                            	case 1 :
                            	    // InternalContextMappingDSL.g:3073:7: otherlv_7= ',' ( (lv_upstreamRoles_8_0= ruleUpstreamRole ) )
                            	    {
                            	    otherlv_7=(Token)match(input,24,FOLLOW_41); 

                            	    							newLeafNode(otherlv_7, grammarAccess.getCustomerSupplierRelationshipAccess().getCommaKeyword_0_0_4_2_0());
                            	    						
                            	    // InternalContextMappingDSL.g:3077:7: ( (lv_upstreamRoles_8_0= ruleUpstreamRole ) )
                            	    // InternalContextMappingDSL.g:3078:8: (lv_upstreamRoles_8_0= ruleUpstreamRole )
                            	    {
                            	    // InternalContextMappingDSL.g:3078:8: (lv_upstreamRoles_8_0= ruleUpstreamRole )
                            	    // InternalContextMappingDSL.g:3079:9: lv_upstreamRoles_8_0= ruleUpstreamRole
                            	    {

                            	    									newCompositeNode(grammarAccess.getCustomerSupplierRelationshipAccess().getUpstreamRolesUpstreamRoleEnumRuleCall_0_0_4_2_1_0());
                            	    								
                            	    pushFollow(FOLLOW_43);
                            	    lv_upstreamRoles_8_0=ruleUpstreamRole();

                            	    state._fsp--;


                            	    									if (current==null) {
                            	    										current = createModelElementForParent(grammarAccess.getCustomerSupplierRelationshipRule());
                            	    									}
                            	    									add(
                            	    										current,
                            	    										"upstreamRoles",
                            	    										lv_upstreamRoles_8_0,
                            	    										"org.contextmapper.dsl.ContextMappingDSL.UpstreamRole");
                            	    									afterParserOrEnumRuleCall();
                            	    								

                            	    }


                            	    }


                            	    }
                            	    break;

                            	default :
                            	    break loop83;
                                }
                            } while (true);


                            }
                            break;

                    }

                    otherlv_9=(Token)match(input,37,FOLLOW_40); 

                    					newLeafNode(otherlv_9, grammarAccess.getCustomerSupplierRelationshipAccess().getRightSquareBracketKeyword_0_0_5());
                    				
                    otherlv_10=(Token)match(input,44,FOLLOW_28); 

                    					newLeafNode(otherlv_10, grammarAccess.getCustomerSupplierRelationshipAccess().getHyphenMinusGreaterThanSignKeyword_0_0_6());
                    				
                    otherlv_11=(Token)match(input,35,FOLLOW_61); 

                    					newLeafNode(otherlv_11, grammarAccess.getCustomerSupplierRelationshipAccess().getLeftSquareBracketKeyword_0_0_7());
                    				
                    // InternalContextMappingDSL.g:3110:5: (otherlv_12= 'D' otherlv_13= ',' )?
                    int alt85=2;
                    int LA85_0 = input.LA(1);

                    if ( (LA85_0==45) ) {
                        alt85=1;
                    }
                    switch (alt85) {
                        case 1 :
                            // InternalContextMappingDSL.g:3111:6: otherlv_12= 'D' otherlv_13= ','
                            {
                            otherlv_12=(Token)match(input,45,FOLLOW_42); 

                            						newLeafNode(otherlv_12, grammarAccess.getCustomerSupplierRelationshipAccess().getDKeyword_0_0_8_0());
                            					
                            otherlv_13=(Token)match(input,24,FOLLOW_62); 

                            						newLeafNode(otherlv_13, grammarAccess.getCustomerSupplierRelationshipAccess().getCommaKeyword_0_0_8_1());
                            					

                            }
                            break;

                    }

                    otherlv_14=(Token)match(input,52,FOLLOW_43); 

                    					newLeafNode(otherlv_14, grammarAccess.getCustomerSupplierRelationshipAccess().getCKeyword_0_0_9());
                    				
                    // InternalContextMappingDSL.g:3124:5: (otherlv_15= ',' ( (lv_downstreamRoles_16_0= ruleDownstreamRole ) ) (otherlv_17= ',' ( (lv_downstreamRoles_18_0= ruleDownstreamRole ) ) )* )?
                    int alt87=2;
                    int LA87_0 = input.LA(1);

                    if ( (LA87_0==24) ) {
                        alt87=1;
                    }
                    switch (alt87) {
                        case 1 :
                            // InternalContextMappingDSL.g:3125:6: otherlv_15= ',' ( (lv_downstreamRoles_16_0= ruleDownstreamRole ) ) (otherlv_17= ',' ( (lv_downstreamRoles_18_0= ruleDownstreamRole ) ) )*
                            {
                            otherlv_15=(Token)match(input,24,FOLLOW_46); 

                            						newLeafNode(otherlv_15, grammarAccess.getCustomerSupplierRelationshipAccess().getCommaKeyword_0_0_10_0());
                            					
                            // InternalContextMappingDSL.g:3129:6: ( (lv_downstreamRoles_16_0= ruleDownstreamRole ) )
                            // InternalContextMappingDSL.g:3130:7: (lv_downstreamRoles_16_0= ruleDownstreamRole )
                            {
                            // InternalContextMappingDSL.g:3130:7: (lv_downstreamRoles_16_0= ruleDownstreamRole )
                            // InternalContextMappingDSL.g:3131:8: lv_downstreamRoles_16_0= ruleDownstreamRole
                            {

                            								newCompositeNode(grammarAccess.getCustomerSupplierRelationshipAccess().getDownstreamRolesDownstreamRoleEnumRuleCall_0_0_10_1_0());
                            							
                            pushFollow(FOLLOW_43);
                            lv_downstreamRoles_16_0=ruleDownstreamRole();

                            state._fsp--;


                            								if (current==null) {
                            									current = createModelElementForParent(grammarAccess.getCustomerSupplierRelationshipRule());
                            								}
                            								add(
                            									current,
                            									"downstreamRoles",
                            									lv_downstreamRoles_16_0,
                            									"org.contextmapper.dsl.ContextMappingDSL.DownstreamRole");
                            								afterParserOrEnumRuleCall();
                            							

                            }


                            }

                            // InternalContextMappingDSL.g:3148:6: (otherlv_17= ',' ( (lv_downstreamRoles_18_0= ruleDownstreamRole ) ) )*
                            loop86:
                            do {
                                int alt86=2;
                                int LA86_0 = input.LA(1);

                                if ( (LA86_0==24) ) {
                                    alt86=1;
                                }


                                switch (alt86) {
                            	case 1 :
                            	    // InternalContextMappingDSL.g:3149:7: otherlv_17= ',' ( (lv_downstreamRoles_18_0= ruleDownstreamRole ) )
                            	    {
                            	    otherlv_17=(Token)match(input,24,FOLLOW_46); 

                            	    							newLeafNode(otherlv_17, grammarAccess.getCustomerSupplierRelationshipAccess().getCommaKeyword_0_0_10_2_0());
                            	    						
                            	    // InternalContextMappingDSL.g:3153:7: ( (lv_downstreamRoles_18_0= ruleDownstreamRole ) )
                            	    // InternalContextMappingDSL.g:3154:8: (lv_downstreamRoles_18_0= ruleDownstreamRole )
                            	    {
                            	    // InternalContextMappingDSL.g:3154:8: (lv_downstreamRoles_18_0= ruleDownstreamRole )
                            	    // InternalContextMappingDSL.g:3155:9: lv_downstreamRoles_18_0= ruleDownstreamRole
                            	    {

                            	    									newCompositeNode(grammarAccess.getCustomerSupplierRelationshipAccess().getDownstreamRolesDownstreamRoleEnumRuleCall_0_0_10_2_1_0());
                            	    								
                            	    pushFollow(FOLLOW_43);
                            	    lv_downstreamRoles_18_0=ruleDownstreamRole();

                            	    state._fsp--;


                            	    									if (current==null) {
                            	    										current = createModelElementForParent(grammarAccess.getCustomerSupplierRelationshipRule());
                            	    									}
                            	    									add(
                            	    										current,
                            	    										"downstreamRoles",
                            	    										lv_downstreamRoles_18_0,
                            	    										"org.contextmapper.dsl.ContextMappingDSL.DownstreamRole");
                            	    									afterParserOrEnumRuleCall();
                            	    								

                            	    }


                            	    }


                            	    }
                            	    break;

                            	default :
                            	    break loop86;
                                }
                            } while (true);


                            }
                            break;

                    }

                    otherlv_19=(Token)match(input,37,FOLLOW_10); 

                    					newLeafNode(otherlv_19, grammarAccess.getCustomerSupplierRelationshipAccess().getRightSquareBracketKeyword_0_0_11());
                    				
                    // InternalContextMappingDSL.g:3178:5: ( (otherlv_20= RULE_ID ) )
                    // InternalContextMappingDSL.g:3179:6: (otherlv_20= RULE_ID )
                    {
                    // InternalContextMappingDSL.g:3179:6: (otherlv_20= RULE_ID )
                    // InternalContextMappingDSL.g:3180:7: otherlv_20= RULE_ID
                    {

                    							if (current==null) {
                    								current = createModelElement(grammarAccess.getCustomerSupplierRelationshipRule());
                    							}
                    						
                    otherlv_20=(Token)match(input,RULE_ID,FOLLOW_32); 

                    							newLeafNode(otherlv_20, grammarAccess.getCustomerSupplierRelationshipAccess().getDownstreamBoundedContextCrossReference_0_0_12_0());
                    						

                    }


                    }


                    }


                    }
                    break;
                case 2 :
                    // InternalContextMappingDSL.g:3193:4: ( ( (otherlv_21= RULE_ID ) ) otherlv_22= '[' (otherlv_23= 'D' otherlv_24= ',' )? otherlv_25= 'C' (otherlv_26= ',' ( (lv_downstreamRoles_27_0= ruleDownstreamRole ) ) (otherlv_28= ',' ( (lv_downstreamRoles_29_0= ruleDownstreamRole ) ) )* )? otherlv_30= ']' otherlv_31= '<-' otherlv_32= '[' (otherlv_33= 'U' otherlv_34= ',' )? otherlv_35= 'S' (otherlv_36= ',' ( (lv_upstreamRoles_37_0= ruleUpstreamRole ) ) (otherlv_38= ',' ( (lv_upstreamRoles_39_0= ruleUpstreamRole ) ) )* )? otherlv_40= ']' ( (otherlv_41= RULE_ID ) ) )
                    {
                    // InternalContextMappingDSL.g:3193:4: ( ( (otherlv_21= RULE_ID ) ) otherlv_22= '[' (otherlv_23= 'D' otherlv_24= ',' )? otherlv_25= 'C' (otherlv_26= ',' ( (lv_downstreamRoles_27_0= ruleDownstreamRole ) ) (otherlv_28= ',' ( (lv_downstreamRoles_29_0= ruleDownstreamRole ) ) )* )? otherlv_30= ']' otherlv_31= '<-' otherlv_32= '[' (otherlv_33= 'U' otherlv_34= ',' )? otherlv_35= 'S' (otherlv_36= ',' ( (lv_upstreamRoles_37_0= ruleUpstreamRole ) ) (otherlv_38= ',' ( (lv_upstreamRoles_39_0= ruleUpstreamRole ) ) )* )? otherlv_40= ']' ( (otherlv_41= RULE_ID ) ) )
                    // InternalContextMappingDSL.g:3194:5: ( (otherlv_21= RULE_ID ) ) otherlv_22= '[' (otherlv_23= 'D' otherlv_24= ',' )? otherlv_25= 'C' (otherlv_26= ',' ( (lv_downstreamRoles_27_0= ruleDownstreamRole ) ) (otherlv_28= ',' ( (lv_downstreamRoles_29_0= ruleDownstreamRole ) ) )* )? otherlv_30= ']' otherlv_31= '<-' otherlv_32= '[' (otherlv_33= 'U' otherlv_34= ',' )? otherlv_35= 'S' (otherlv_36= ',' ( (lv_upstreamRoles_37_0= ruleUpstreamRole ) ) (otherlv_38= ',' ( (lv_upstreamRoles_39_0= ruleUpstreamRole ) ) )* )? otherlv_40= ']' ( (otherlv_41= RULE_ID ) )
                    {
                    // InternalContextMappingDSL.g:3194:5: ( (otherlv_21= RULE_ID ) )
                    // InternalContextMappingDSL.g:3195:6: (otherlv_21= RULE_ID )
                    {
                    // InternalContextMappingDSL.g:3195:6: (otherlv_21= RULE_ID )
                    // InternalContextMappingDSL.g:3196:7: otherlv_21= RULE_ID
                    {

                    							if (current==null) {
                    								current = createModelElement(grammarAccess.getCustomerSupplierRelationshipRule());
                    							}
                    						
                    otherlv_21=(Token)match(input,RULE_ID,FOLLOW_28); 

                    							newLeafNode(otherlv_21, grammarAccess.getCustomerSupplierRelationshipAccess().getDownstreamBoundedContextCrossReference_0_1_0_0());
                    						

                    }


                    }

                    otherlv_22=(Token)match(input,35,FOLLOW_61); 

                    					newLeafNode(otherlv_22, grammarAccess.getCustomerSupplierRelationshipAccess().getLeftSquareBracketKeyword_0_1_1());
                    				
                    // InternalContextMappingDSL.g:3211:5: (otherlv_23= 'D' otherlv_24= ',' )?
                    int alt88=2;
                    int LA88_0 = input.LA(1);

                    if ( (LA88_0==45) ) {
                        alt88=1;
                    }
                    switch (alt88) {
                        case 1 :
                            // InternalContextMappingDSL.g:3212:6: otherlv_23= 'D' otherlv_24= ','
                            {
                            otherlv_23=(Token)match(input,45,FOLLOW_42); 

                            						newLeafNode(otherlv_23, grammarAccess.getCustomerSupplierRelationshipAccess().getDKeyword_0_1_2_0());
                            					
                            otherlv_24=(Token)match(input,24,FOLLOW_62); 

                            						newLeafNode(otherlv_24, grammarAccess.getCustomerSupplierRelationshipAccess().getCommaKeyword_0_1_2_1());
                            					

                            }
                            break;

                    }

                    otherlv_25=(Token)match(input,52,FOLLOW_43); 

                    					newLeafNode(otherlv_25, grammarAccess.getCustomerSupplierRelationshipAccess().getCKeyword_0_1_3());
                    				
                    // InternalContextMappingDSL.g:3225:5: (otherlv_26= ',' ( (lv_downstreamRoles_27_0= ruleDownstreamRole ) ) (otherlv_28= ',' ( (lv_downstreamRoles_29_0= ruleDownstreamRole ) ) )* )?
                    int alt90=2;
                    int LA90_0 = input.LA(1);

                    if ( (LA90_0==24) ) {
                        alt90=1;
                    }
                    switch (alt90) {
                        case 1 :
                            // InternalContextMappingDSL.g:3226:6: otherlv_26= ',' ( (lv_downstreamRoles_27_0= ruleDownstreamRole ) ) (otherlv_28= ',' ( (lv_downstreamRoles_29_0= ruleDownstreamRole ) ) )*
                            {
                            otherlv_26=(Token)match(input,24,FOLLOW_46); 

                            						newLeafNode(otherlv_26, grammarAccess.getCustomerSupplierRelationshipAccess().getCommaKeyword_0_1_4_0());
                            					
                            // InternalContextMappingDSL.g:3230:6: ( (lv_downstreamRoles_27_0= ruleDownstreamRole ) )
                            // InternalContextMappingDSL.g:3231:7: (lv_downstreamRoles_27_0= ruleDownstreamRole )
                            {
                            // InternalContextMappingDSL.g:3231:7: (lv_downstreamRoles_27_0= ruleDownstreamRole )
                            // InternalContextMappingDSL.g:3232:8: lv_downstreamRoles_27_0= ruleDownstreamRole
                            {

                            								newCompositeNode(grammarAccess.getCustomerSupplierRelationshipAccess().getDownstreamRolesDownstreamRoleEnumRuleCall_0_1_4_1_0());
                            							
                            pushFollow(FOLLOW_43);
                            lv_downstreamRoles_27_0=ruleDownstreamRole();

                            state._fsp--;


                            								if (current==null) {
                            									current = createModelElementForParent(grammarAccess.getCustomerSupplierRelationshipRule());
                            								}
                            								add(
                            									current,
                            									"downstreamRoles",
                            									lv_downstreamRoles_27_0,
                            									"org.contextmapper.dsl.ContextMappingDSL.DownstreamRole");
                            								afterParserOrEnumRuleCall();
                            							

                            }


                            }

                            // InternalContextMappingDSL.g:3249:6: (otherlv_28= ',' ( (lv_downstreamRoles_29_0= ruleDownstreamRole ) ) )*
                            loop89:
                            do {
                                int alt89=2;
                                int LA89_0 = input.LA(1);

                                if ( (LA89_0==24) ) {
                                    alt89=1;
                                }


                                switch (alt89) {
                            	case 1 :
                            	    // InternalContextMappingDSL.g:3250:7: otherlv_28= ',' ( (lv_downstreamRoles_29_0= ruleDownstreamRole ) )
                            	    {
                            	    otherlv_28=(Token)match(input,24,FOLLOW_46); 

                            	    							newLeafNode(otherlv_28, grammarAccess.getCustomerSupplierRelationshipAccess().getCommaKeyword_0_1_4_2_0());
                            	    						
                            	    // InternalContextMappingDSL.g:3254:7: ( (lv_downstreamRoles_29_0= ruleDownstreamRole ) )
                            	    // InternalContextMappingDSL.g:3255:8: (lv_downstreamRoles_29_0= ruleDownstreamRole )
                            	    {
                            	    // InternalContextMappingDSL.g:3255:8: (lv_downstreamRoles_29_0= ruleDownstreamRole )
                            	    // InternalContextMappingDSL.g:3256:9: lv_downstreamRoles_29_0= ruleDownstreamRole
                            	    {

                            	    									newCompositeNode(grammarAccess.getCustomerSupplierRelationshipAccess().getDownstreamRolesDownstreamRoleEnumRuleCall_0_1_4_2_1_0());
                            	    								
                            	    pushFollow(FOLLOW_43);
                            	    lv_downstreamRoles_29_0=ruleDownstreamRole();

                            	    state._fsp--;


                            	    									if (current==null) {
                            	    										current = createModelElementForParent(grammarAccess.getCustomerSupplierRelationshipRule());
                            	    									}
                            	    									add(
                            	    										current,
                            	    										"downstreamRoles",
                            	    										lv_downstreamRoles_29_0,
                            	    										"org.contextmapper.dsl.ContextMappingDSL.DownstreamRole");
                            	    									afterParserOrEnumRuleCall();
                            	    								

                            	    }


                            	    }


                            	    }
                            	    break;

                            	default :
                            	    break loop89;
                                }
                            } while (true);


                            }
                            break;

                    }

                    otherlv_30=(Token)match(input,37,FOLLOW_48); 

                    					newLeafNode(otherlv_30, grammarAccess.getCustomerSupplierRelationshipAccess().getRightSquareBracketKeyword_0_1_5());
                    				
                    otherlv_31=(Token)match(input,46,FOLLOW_28); 

                    					newLeafNode(otherlv_31, grammarAccess.getCustomerSupplierRelationshipAccess().getLessThanSignHyphenMinusKeyword_0_1_6());
                    				
                    otherlv_32=(Token)match(input,35,FOLLOW_59); 

                    					newLeafNode(otherlv_32, grammarAccess.getCustomerSupplierRelationshipAccess().getLeftSquareBracketKeyword_0_1_7());
                    				
                    // InternalContextMappingDSL.g:3287:5: (otherlv_33= 'U' otherlv_34= ',' )?
                    int alt91=2;
                    int LA91_0 = input.LA(1);

                    if ( (LA91_0==43) ) {
                        alt91=1;
                    }
                    switch (alt91) {
                        case 1 :
                            // InternalContextMappingDSL.g:3288:6: otherlv_33= 'U' otherlv_34= ','
                            {
                            otherlv_33=(Token)match(input,43,FOLLOW_42); 

                            						newLeafNode(otherlv_33, grammarAccess.getCustomerSupplierRelationshipAccess().getUKeyword_0_1_8_0());
                            					
                            otherlv_34=(Token)match(input,24,FOLLOW_60); 

                            						newLeafNode(otherlv_34, grammarAccess.getCustomerSupplierRelationshipAccess().getCommaKeyword_0_1_8_1());
                            					

                            }
                            break;

                    }

                    otherlv_35=(Token)match(input,51,FOLLOW_43); 

                    					newLeafNode(otherlv_35, grammarAccess.getCustomerSupplierRelationshipAccess().getSKeyword_0_1_9());
                    				
                    // InternalContextMappingDSL.g:3301:5: (otherlv_36= ',' ( (lv_upstreamRoles_37_0= ruleUpstreamRole ) ) (otherlv_38= ',' ( (lv_upstreamRoles_39_0= ruleUpstreamRole ) ) )* )?
                    int alt93=2;
                    int LA93_0 = input.LA(1);

                    if ( (LA93_0==24) ) {
                        alt93=1;
                    }
                    switch (alt93) {
                        case 1 :
                            // InternalContextMappingDSL.g:3302:6: otherlv_36= ',' ( (lv_upstreamRoles_37_0= ruleUpstreamRole ) ) (otherlv_38= ',' ( (lv_upstreamRoles_39_0= ruleUpstreamRole ) ) )*
                            {
                            otherlv_36=(Token)match(input,24,FOLLOW_41); 

                            						newLeafNode(otherlv_36, grammarAccess.getCustomerSupplierRelationshipAccess().getCommaKeyword_0_1_10_0());
                            					
                            // InternalContextMappingDSL.g:3306:6: ( (lv_upstreamRoles_37_0= ruleUpstreamRole ) )
                            // InternalContextMappingDSL.g:3307:7: (lv_upstreamRoles_37_0= ruleUpstreamRole )
                            {
                            // InternalContextMappingDSL.g:3307:7: (lv_upstreamRoles_37_0= ruleUpstreamRole )
                            // InternalContextMappingDSL.g:3308:8: lv_upstreamRoles_37_0= ruleUpstreamRole
                            {

                            								newCompositeNode(grammarAccess.getCustomerSupplierRelationshipAccess().getUpstreamRolesUpstreamRoleEnumRuleCall_0_1_10_1_0());
                            							
                            pushFollow(FOLLOW_43);
                            lv_upstreamRoles_37_0=ruleUpstreamRole();

                            state._fsp--;


                            								if (current==null) {
                            									current = createModelElementForParent(grammarAccess.getCustomerSupplierRelationshipRule());
                            								}
                            								add(
                            									current,
                            									"upstreamRoles",
                            									lv_upstreamRoles_37_0,
                            									"org.contextmapper.dsl.ContextMappingDSL.UpstreamRole");
                            								afterParserOrEnumRuleCall();
                            							

                            }


                            }

                            // InternalContextMappingDSL.g:3325:6: (otherlv_38= ',' ( (lv_upstreamRoles_39_0= ruleUpstreamRole ) ) )*
                            loop92:
                            do {
                                int alt92=2;
                                int LA92_0 = input.LA(1);

                                if ( (LA92_0==24) ) {
                                    alt92=1;
                                }


                                switch (alt92) {
                            	case 1 :
                            	    // InternalContextMappingDSL.g:3326:7: otherlv_38= ',' ( (lv_upstreamRoles_39_0= ruleUpstreamRole ) )
                            	    {
                            	    otherlv_38=(Token)match(input,24,FOLLOW_41); 

                            	    							newLeafNode(otherlv_38, grammarAccess.getCustomerSupplierRelationshipAccess().getCommaKeyword_0_1_10_2_0());
                            	    						
                            	    // InternalContextMappingDSL.g:3330:7: ( (lv_upstreamRoles_39_0= ruleUpstreamRole ) )
                            	    // InternalContextMappingDSL.g:3331:8: (lv_upstreamRoles_39_0= ruleUpstreamRole )
                            	    {
                            	    // InternalContextMappingDSL.g:3331:8: (lv_upstreamRoles_39_0= ruleUpstreamRole )
                            	    // InternalContextMappingDSL.g:3332:9: lv_upstreamRoles_39_0= ruleUpstreamRole
                            	    {

                            	    									newCompositeNode(grammarAccess.getCustomerSupplierRelationshipAccess().getUpstreamRolesUpstreamRoleEnumRuleCall_0_1_10_2_1_0());
                            	    								
                            	    pushFollow(FOLLOW_43);
                            	    lv_upstreamRoles_39_0=ruleUpstreamRole();

                            	    state._fsp--;


                            	    									if (current==null) {
                            	    										current = createModelElementForParent(grammarAccess.getCustomerSupplierRelationshipRule());
                            	    									}
                            	    									add(
                            	    										current,
                            	    										"upstreamRoles",
                            	    										lv_upstreamRoles_39_0,
                            	    										"org.contextmapper.dsl.ContextMappingDSL.UpstreamRole");
                            	    									afterParserOrEnumRuleCall();
                            	    								

                            	    }


                            	    }


                            	    }
                            	    break;

                            	default :
                            	    break loop92;
                                }
                            } while (true);


                            }
                            break;

                    }

                    otherlv_40=(Token)match(input,37,FOLLOW_10); 

                    					newLeafNode(otherlv_40, grammarAccess.getCustomerSupplierRelationshipAccess().getRightSquareBracketKeyword_0_1_11());
                    				
                    // InternalContextMappingDSL.g:3355:5: ( (otherlv_41= RULE_ID ) )
                    // InternalContextMappingDSL.g:3356:6: (otherlv_41= RULE_ID )
                    {
                    // InternalContextMappingDSL.g:3356:6: (otherlv_41= RULE_ID )
                    // InternalContextMappingDSL.g:3357:7: otherlv_41= RULE_ID
                    {

                    							if (current==null) {
                    								current = createModelElement(grammarAccess.getCustomerSupplierRelationshipRule());
                    							}
                    						
                    otherlv_41=(Token)match(input,RULE_ID,FOLLOW_32); 

                    							newLeafNode(otherlv_41, grammarAccess.getCustomerSupplierRelationshipAccess().getUpstreamBoundedContextCrossReference_0_1_12_0());
                    						

                    }


                    }


                    }


                    }
                    break;
                case 3 :
                    // InternalContextMappingDSL.g:3370:4: ( ( (otherlv_42= RULE_ID ) ) (otherlv_43= '[' ( ( (lv_downstreamRoles_44_0= ruleDownstreamRole ) ) (otherlv_45= ',' ( (lv_downstreamRoles_46_0= ruleDownstreamRole ) ) )* )? otherlv_47= ']' )? otherlv_48= 'Customer-Supplier' (otherlv_49= '[' ( ( (lv_upstreamRoles_50_0= ruleUpstreamRole ) ) (otherlv_51= ',' ( (lv_upstreamRoles_52_0= ruleUpstreamRole ) ) )* )? otherlv_53= ']' )? ( (otherlv_54= RULE_ID ) ) )
                    {
                    // InternalContextMappingDSL.g:3370:4: ( ( (otherlv_42= RULE_ID ) ) (otherlv_43= '[' ( ( (lv_downstreamRoles_44_0= ruleDownstreamRole ) ) (otherlv_45= ',' ( (lv_downstreamRoles_46_0= ruleDownstreamRole ) ) )* )? otherlv_47= ']' )? otherlv_48= 'Customer-Supplier' (otherlv_49= '[' ( ( (lv_upstreamRoles_50_0= ruleUpstreamRole ) ) (otherlv_51= ',' ( (lv_upstreamRoles_52_0= ruleUpstreamRole ) ) )* )? otherlv_53= ']' )? ( (otherlv_54= RULE_ID ) ) )
                    // InternalContextMappingDSL.g:3371:5: ( (otherlv_42= RULE_ID ) ) (otherlv_43= '[' ( ( (lv_downstreamRoles_44_0= ruleDownstreamRole ) ) (otherlv_45= ',' ( (lv_downstreamRoles_46_0= ruleDownstreamRole ) ) )* )? otherlv_47= ']' )? otherlv_48= 'Customer-Supplier' (otherlv_49= '[' ( ( (lv_upstreamRoles_50_0= ruleUpstreamRole ) ) (otherlv_51= ',' ( (lv_upstreamRoles_52_0= ruleUpstreamRole ) ) )* )? otherlv_53= ']' )? ( (otherlv_54= RULE_ID ) )
                    {
                    // InternalContextMappingDSL.g:3371:5: ( (otherlv_42= RULE_ID ) )
                    // InternalContextMappingDSL.g:3372:6: (otherlv_42= RULE_ID )
                    {
                    // InternalContextMappingDSL.g:3372:6: (otherlv_42= RULE_ID )
                    // InternalContextMappingDSL.g:3373:7: otherlv_42= RULE_ID
                    {

                    							if (current==null) {
                    								current = createModelElement(grammarAccess.getCustomerSupplierRelationshipRule());
                    							}
                    						
                    otherlv_42=(Token)match(input,RULE_ID,FOLLOW_63); 

                    							newLeafNode(otherlv_42, grammarAccess.getCustomerSupplierRelationshipAccess().getDownstreamBoundedContextCrossReference_0_2_0_0());
                    						

                    }


                    }

                    // InternalContextMappingDSL.g:3384:5: (otherlv_43= '[' ( ( (lv_downstreamRoles_44_0= ruleDownstreamRole ) ) (otherlv_45= ',' ( (lv_downstreamRoles_46_0= ruleDownstreamRole ) ) )* )? otherlv_47= ']' )?
                    int alt96=2;
                    int LA96_0 = input.LA(1);

                    if ( (LA96_0==35) ) {
                        alt96=1;
                    }
                    switch (alt96) {
                        case 1 :
                            // InternalContextMappingDSL.g:3385:6: otherlv_43= '[' ( ( (lv_downstreamRoles_44_0= ruleDownstreamRole ) ) (otherlv_45= ',' ( (lv_downstreamRoles_46_0= ruleDownstreamRole ) ) )* )? otherlv_47= ']'
                            {
                            otherlv_43=(Token)match(input,35,FOLLOW_52); 

                            						newLeafNode(otherlv_43, grammarAccess.getCustomerSupplierRelationshipAccess().getLeftSquareBracketKeyword_0_2_1_0());
                            					
                            // InternalContextMappingDSL.g:3389:6: ( ( (lv_downstreamRoles_44_0= ruleDownstreamRole ) ) (otherlv_45= ',' ( (lv_downstreamRoles_46_0= ruleDownstreamRole ) ) )* )?
                            int alt95=2;
                            int LA95_0 = input.LA(1);

                            if ( ((LA95_0>=195 && LA95_0<=196)) ) {
                                alt95=1;
                            }
                            switch (alt95) {
                                case 1 :
                                    // InternalContextMappingDSL.g:3390:7: ( (lv_downstreamRoles_44_0= ruleDownstreamRole ) ) (otherlv_45= ',' ( (lv_downstreamRoles_46_0= ruleDownstreamRole ) ) )*
                                    {
                                    // InternalContextMappingDSL.g:3390:7: ( (lv_downstreamRoles_44_0= ruleDownstreamRole ) )
                                    // InternalContextMappingDSL.g:3391:8: (lv_downstreamRoles_44_0= ruleDownstreamRole )
                                    {
                                    // InternalContextMappingDSL.g:3391:8: (lv_downstreamRoles_44_0= ruleDownstreamRole )
                                    // InternalContextMappingDSL.g:3392:9: lv_downstreamRoles_44_0= ruleDownstreamRole
                                    {

                                    									newCompositeNode(grammarAccess.getCustomerSupplierRelationshipAccess().getDownstreamRolesDownstreamRoleEnumRuleCall_0_2_1_1_0_0());
                                    								
                                    pushFollow(FOLLOW_43);
                                    lv_downstreamRoles_44_0=ruleDownstreamRole();

                                    state._fsp--;


                                    									if (current==null) {
                                    										current = createModelElementForParent(grammarAccess.getCustomerSupplierRelationshipRule());
                                    									}
                                    									add(
                                    										current,
                                    										"downstreamRoles",
                                    										lv_downstreamRoles_44_0,
                                    										"org.contextmapper.dsl.ContextMappingDSL.DownstreamRole");
                                    									afterParserOrEnumRuleCall();
                                    								

                                    }


                                    }

                                    // InternalContextMappingDSL.g:3409:7: (otherlv_45= ',' ( (lv_downstreamRoles_46_0= ruleDownstreamRole ) ) )*
                                    loop94:
                                    do {
                                        int alt94=2;
                                        int LA94_0 = input.LA(1);

                                        if ( (LA94_0==24) ) {
                                            alt94=1;
                                        }


                                        switch (alt94) {
                                    	case 1 :
                                    	    // InternalContextMappingDSL.g:3410:8: otherlv_45= ',' ( (lv_downstreamRoles_46_0= ruleDownstreamRole ) )
                                    	    {
                                    	    otherlv_45=(Token)match(input,24,FOLLOW_46); 

                                    	    								newLeafNode(otherlv_45, grammarAccess.getCustomerSupplierRelationshipAccess().getCommaKeyword_0_2_1_1_1_0());
                                    	    							
                                    	    // InternalContextMappingDSL.g:3414:8: ( (lv_downstreamRoles_46_0= ruleDownstreamRole ) )
                                    	    // InternalContextMappingDSL.g:3415:9: (lv_downstreamRoles_46_0= ruleDownstreamRole )
                                    	    {
                                    	    // InternalContextMappingDSL.g:3415:9: (lv_downstreamRoles_46_0= ruleDownstreamRole )
                                    	    // InternalContextMappingDSL.g:3416:10: lv_downstreamRoles_46_0= ruleDownstreamRole
                                    	    {

                                    	    										newCompositeNode(grammarAccess.getCustomerSupplierRelationshipAccess().getDownstreamRolesDownstreamRoleEnumRuleCall_0_2_1_1_1_1_0());
                                    	    									
                                    	    pushFollow(FOLLOW_43);
                                    	    lv_downstreamRoles_46_0=ruleDownstreamRole();

                                    	    state._fsp--;


                                    	    										if (current==null) {
                                    	    											current = createModelElementForParent(grammarAccess.getCustomerSupplierRelationshipRule());
                                    	    										}
                                    	    										add(
                                    	    											current,
                                    	    											"downstreamRoles",
                                    	    											lv_downstreamRoles_46_0,
                                    	    											"org.contextmapper.dsl.ContextMappingDSL.DownstreamRole");
                                    	    										afterParserOrEnumRuleCall();
                                    	    									

                                    	    }


                                    	    }


                                    	    }
                                    	    break;

                                    	default :
                                    	    break loop94;
                                        }
                                    } while (true);


                                    }
                                    break;

                            }

                            otherlv_47=(Token)match(input,37,FOLLOW_64); 

                            						newLeafNode(otherlv_47, grammarAccess.getCustomerSupplierRelationshipAccess().getRightSquareBracketKeyword_0_2_1_2());
                            					

                            }
                            break;

                    }

                    otherlv_48=(Token)match(input,53,FOLLOW_44); 

                    					newLeafNode(otherlv_48, grammarAccess.getCustomerSupplierRelationshipAccess().getCustomerSupplierKeyword_0_2_2());
                    				
                    // InternalContextMappingDSL.g:3444:5: (otherlv_49= '[' ( ( (lv_upstreamRoles_50_0= ruleUpstreamRole ) ) (otherlv_51= ',' ( (lv_upstreamRoles_52_0= ruleUpstreamRole ) ) )* )? otherlv_53= ']' )?
                    int alt99=2;
                    int LA99_0 = input.LA(1);

                    if ( (LA99_0==35) ) {
                        alt99=1;
                    }
                    switch (alt99) {
                        case 1 :
                            // InternalContextMappingDSL.g:3445:6: otherlv_49= '[' ( ( (lv_upstreamRoles_50_0= ruleUpstreamRole ) ) (otherlv_51= ',' ( (lv_upstreamRoles_52_0= ruleUpstreamRole ) ) )* )? otherlv_53= ']'
                            {
                            otherlv_49=(Token)match(input,35,FOLLOW_50); 

                            						newLeafNode(otherlv_49, grammarAccess.getCustomerSupplierRelationshipAccess().getLeftSquareBracketKeyword_0_2_3_0());
                            					
                            // InternalContextMappingDSL.g:3449:6: ( ( (lv_upstreamRoles_50_0= ruleUpstreamRole ) ) (otherlv_51= ',' ( (lv_upstreamRoles_52_0= ruleUpstreamRole ) ) )* )?
                            int alt98=2;
                            int LA98_0 = input.LA(1);

                            if ( ((LA98_0>=193 && LA98_0<=194)) ) {
                                alt98=1;
                            }
                            switch (alt98) {
                                case 1 :
                                    // InternalContextMappingDSL.g:3450:7: ( (lv_upstreamRoles_50_0= ruleUpstreamRole ) ) (otherlv_51= ',' ( (lv_upstreamRoles_52_0= ruleUpstreamRole ) ) )*
                                    {
                                    // InternalContextMappingDSL.g:3450:7: ( (lv_upstreamRoles_50_0= ruleUpstreamRole ) )
                                    // InternalContextMappingDSL.g:3451:8: (lv_upstreamRoles_50_0= ruleUpstreamRole )
                                    {
                                    // InternalContextMappingDSL.g:3451:8: (lv_upstreamRoles_50_0= ruleUpstreamRole )
                                    // InternalContextMappingDSL.g:3452:9: lv_upstreamRoles_50_0= ruleUpstreamRole
                                    {

                                    									newCompositeNode(grammarAccess.getCustomerSupplierRelationshipAccess().getUpstreamRolesUpstreamRoleEnumRuleCall_0_2_3_1_0_0());
                                    								
                                    pushFollow(FOLLOW_43);
                                    lv_upstreamRoles_50_0=ruleUpstreamRole();

                                    state._fsp--;


                                    									if (current==null) {
                                    										current = createModelElementForParent(grammarAccess.getCustomerSupplierRelationshipRule());
                                    									}
                                    									add(
                                    										current,
                                    										"upstreamRoles",
                                    										lv_upstreamRoles_50_0,
                                    										"org.contextmapper.dsl.ContextMappingDSL.UpstreamRole");
                                    									afterParserOrEnumRuleCall();
                                    								

                                    }


                                    }

                                    // InternalContextMappingDSL.g:3469:7: (otherlv_51= ',' ( (lv_upstreamRoles_52_0= ruleUpstreamRole ) ) )*
                                    loop97:
                                    do {
                                        int alt97=2;
                                        int LA97_0 = input.LA(1);

                                        if ( (LA97_0==24) ) {
                                            alt97=1;
                                        }


                                        switch (alt97) {
                                    	case 1 :
                                    	    // InternalContextMappingDSL.g:3470:8: otherlv_51= ',' ( (lv_upstreamRoles_52_0= ruleUpstreamRole ) )
                                    	    {
                                    	    otherlv_51=(Token)match(input,24,FOLLOW_41); 

                                    	    								newLeafNode(otherlv_51, grammarAccess.getCustomerSupplierRelationshipAccess().getCommaKeyword_0_2_3_1_1_0());
                                    	    							
                                    	    // InternalContextMappingDSL.g:3474:8: ( (lv_upstreamRoles_52_0= ruleUpstreamRole ) )
                                    	    // InternalContextMappingDSL.g:3475:9: (lv_upstreamRoles_52_0= ruleUpstreamRole )
                                    	    {
                                    	    // InternalContextMappingDSL.g:3475:9: (lv_upstreamRoles_52_0= ruleUpstreamRole )
                                    	    // InternalContextMappingDSL.g:3476:10: lv_upstreamRoles_52_0= ruleUpstreamRole
                                    	    {

                                    	    										newCompositeNode(grammarAccess.getCustomerSupplierRelationshipAccess().getUpstreamRolesUpstreamRoleEnumRuleCall_0_2_3_1_1_1_0());
                                    	    									
                                    	    pushFollow(FOLLOW_43);
                                    	    lv_upstreamRoles_52_0=ruleUpstreamRole();

                                    	    state._fsp--;


                                    	    										if (current==null) {
                                    	    											current = createModelElementForParent(grammarAccess.getCustomerSupplierRelationshipRule());
                                    	    										}
                                    	    										add(
                                    	    											current,
                                    	    											"upstreamRoles",
                                    	    											lv_upstreamRoles_52_0,
                                    	    											"org.contextmapper.dsl.ContextMappingDSL.UpstreamRole");
                                    	    										afterParserOrEnumRuleCall();
                                    	    									

                                    	    }


                                    	    }


                                    	    }
                                    	    break;

                                    	default :
                                    	    break loop97;
                                        }
                                    } while (true);


                                    }
                                    break;

                            }

                            otherlv_53=(Token)match(input,37,FOLLOW_10); 

                            						newLeafNode(otherlv_53, grammarAccess.getCustomerSupplierRelationshipAccess().getRightSquareBracketKeyword_0_2_3_2());
                            					

                            }
                            break;

                    }

                    // InternalContextMappingDSL.g:3500:5: ( (otherlv_54= RULE_ID ) )
                    // InternalContextMappingDSL.g:3501:6: (otherlv_54= RULE_ID )
                    {
                    // InternalContextMappingDSL.g:3501:6: (otherlv_54= RULE_ID )
                    // InternalContextMappingDSL.g:3502:7: otherlv_54= RULE_ID
                    {

                    							if (current==null) {
                    								current = createModelElement(grammarAccess.getCustomerSupplierRelationshipRule());
                    							}
                    						
                    otherlv_54=(Token)match(input,RULE_ID,FOLLOW_32); 

                    							newLeafNode(otherlv_54, grammarAccess.getCustomerSupplierRelationshipAccess().getUpstreamBoundedContextCrossReference_0_2_4_0());
                    						

                    }


                    }


                    }


                    }
                    break;
                case 4 :
                    // InternalContextMappingDSL.g:3515:4: ( ( (otherlv_55= RULE_ID ) ) (otherlv_56= '[' ( ( (lv_upstreamRoles_57_0= ruleUpstreamRole ) ) (otherlv_58= ',' ( (lv_upstreamRoles_59_0= ruleUpstreamRole ) ) )* )? otherlv_60= ']' )? otherlv_61= 'Supplier-Customer' (otherlv_62= '[' ( ( (lv_downstreamRoles_63_0= ruleDownstreamRole ) ) (otherlv_64= ',' ( (lv_downstreamRoles_65_0= ruleDownstreamRole ) ) )* )? otherlv_66= ']' )? ( (otherlv_67= RULE_ID ) ) )
                    {
                    // InternalContextMappingDSL.g:3515:4: ( ( (otherlv_55= RULE_ID ) ) (otherlv_56= '[' ( ( (lv_upstreamRoles_57_0= ruleUpstreamRole ) ) (otherlv_58= ',' ( (lv_upstreamRoles_59_0= ruleUpstreamRole ) ) )* )? otherlv_60= ']' )? otherlv_61= 'Supplier-Customer' (otherlv_62= '[' ( ( (lv_downstreamRoles_63_0= ruleDownstreamRole ) ) (otherlv_64= ',' ( (lv_downstreamRoles_65_0= ruleDownstreamRole ) ) )* )? otherlv_66= ']' )? ( (otherlv_67= RULE_ID ) ) )
                    // InternalContextMappingDSL.g:3516:5: ( (otherlv_55= RULE_ID ) ) (otherlv_56= '[' ( ( (lv_upstreamRoles_57_0= ruleUpstreamRole ) ) (otherlv_58= ',' ( (lv_upstreamRoles_59_0= ruleUpstreamRole ) ) )* )? otherlv_60= ']' )? otherlv_61= 'Supplier-Customer' (otherlv_62= '[' ( ( (lv_downstreamRoles_63_0= ruleDownstreamRole ) ) (otherlv_64= ',' ( (lv_downstreamRoles_65_0= ruleDownstreamRole ) ) )* )? otherlv_66= ']' )? ( (otherlv_67= RULE_ID ) )
                    {
                    // InternalContextMappingDSL.g:3516:5: ( (otherlv_55= RULE_ID ) )
                    // InternalContextMappingDSL.g:3517:6: (otherlv_55= RULE_ID )
                    {
                    // InternalContextMappingDSL.g:3517:6: (otherlv_55= RULE_ID )
                    // InternalContextMappingDSL.g:3518:7: otherlv_55= RULE_ID
                    {

                    							if (current==null) {
                    								current = createModelElement(grammarAccess.getCustomerSupplierRelationshipRule());
                    							}
                    						
                    otherlv_55=(Token)match(input,RULE_ID,FOLLOW_65); 

                    							newLeafNode(otherlv_55, grammarAccess.getCustomerSupplierRelationshipAccess().getUpstreamBoundedContextCrossReference_0_3_0_0());
                    						

                    }


                    }

                    // InternalContextMappingDSL.g:3529:5: (otherlv_56= '[' ( ( (lv_upstreamRoles_57_0= ruleUpstreamRole ) ) (otherlv_58= ',' ( (lv_upstreamRoles_59_0= ruleUpstreamRole ) ) )* )? otherlv_60= ']' )?
                    int alt102=2;
                    int LA102_0 = input.LA(1);

                    if ( (LA102_0==35) ) {
                        alt102=1;
                    }
                    switch (alt102) {
                        case 1 :
                            // InternalContextMappingDSL.g:3530:6: otherlv_56= '[' ( ( (lv_upstreamRoles_57_0= ruleUpstreamRole ) ) (otherlv_58= ',' ( (lv_upstreamRoles_59_0= ruleUpstreamRole ) ) )* )? otherlv_60= ']'
                            {
                            otherlv_56=(Token)match(input,35,FOLLOW_50); 

                            						newLeafNode(otherlv_56, grammarAccess.getCustomerSupplierRelationshipAccess().getLeftSquareBracketKeyword_0_3_1_0());
                            					
                            // InternalContextMappingDSL.g:3534:6: ( ( (lv_upstreamRoles_57_0= ruleUpstreamRole ) ) (otherlv_58= ',' ( (lv_upstreamRoles_59_0= ruleUpstreamRole ) ) )* )?
                            int alt101=2;
                            int LA101_0 = input.LA(1);

                            if ( ((LA101_0>=193 && LA101_0<=194)) ) {
                                alt101=1;
                            }
                            switch (alt101) {
                                case 1 :
                                    // InternalContextMappingDSL.g:3535:7: ( (lv_upstreamRoles_57_0= ruleUpstreamRole ) ) (otherlv_58= ',' ( (lv_upstreamRoles_59_0= ruleUpstreamRole ) ) )*
                                    {
                                    // InternalContextMappingDSL.g:3535:7: ( (lv_upstreamRoles_57_0= ruleUpstreamRole ) )
                                    // InternalContextMappingDSL.g:3536:8: (lv_upstreamRoles_57_0= ruleUpstreamRole )
                                    {
                                    // InternalContextMappingDSL.g:3536:8: (lv_upstreamRoles_57_0= ruleUpstreamRole )
                                    // InternalContextMappingDSL.g:3537:9: lv_upstreamRoles_57_0= ruleUpstreamRole
                                    {

                                    									newCompositeNode(grammarAccess.getCustomerSupplierRelationshipAccess().getUpstreamRolesUpstreamRoleEnumRuleCall_0_3_1_1_0_0());
                                    								
                                    pushFollow(FOLLOW_43);
                                    lv_upstreamRoles_57_0=ruleUpstreamRole();

                                    state._fsp--;


                                    									if (current==null) {
                                    										current = createModelElementForParent(grammarAccess.getCustomerSupplierRelationshipRule());
                                    									}
                                    									add(
                                    										current,
                                    										"upstreamRoles",
                                    										lv_upstreamRoles_57_0,
                                    										"org.contextmapper.dsl.ContextMappingDSL.UpstreamRole");
                                    									afterParserOrEnumRuleCall();
                                    								

                                    }


                                    }

                                    // InternalContextMappingDSL.g:3554:7: (otherlv_58= ',' ( (lv_upstreamRoles_59_0= ruleUpstreamRole ) ) )*
                                    loop100:
                                    do {
                                        int alt100=2;
                                        int LA100_0 = input.LA(1);

                                        if ( (LA100_0==24) ) {
                                            alt100=1;
                                        }


                                        switch (alt100) {
                                    	case 1 :
                                    	    // InternalContextMappingDSL.g:3555:8: otherlv_58= ',' ( (lv_upstreamRoles_59_0= ruleUpstreamRole ) )
                                    	    {
                                    	    otherlv_58=(Token)match(input,24,FOLLOW_41); 

                                    	    								newLeafNode(otherlv_58, grammarAccess.getCustomerSupplierRelationshipAccess().getCommaKeyword_0_3_1_1_1_0());
                                    	    							
                                    	    // InternalContextMappingDSL.g:3559:8: ( (lv_upstreamRoles_59_0= ruleUpstreamRole ) )
                                    	    // InternalContextMappingDSL.g:3560:9: (lv_upstreamRoles_59_0= ruleUpstreamRole )
                                    	    {
                                    	    // InternalContextMappingDSL.g:3560:9: (lv_upstreamRoles_59_0= ruleUpstreamRole )
                                    	    // InternalContextMappingDSL.g:3561:10: lv_upstreamRoles_59_0= ruleUpstreamRole
                                    	    {

                                    	    										newCompositeNode(grammarAccess.getCustomerSupplierRelationshipAccess().getUpstreamRolesUpstreamRoleEnumRuleCall_0_3_1_1_1_1_0());
                                    	    									
                                    	    pushFollow(FOLLOW_43);
                                    	    lv_upstreamRoles_59_0=ruleUpstreamRole();

                                    	    state._fsp--;


                                    	    										if (current==null) {
                                    	    											current = createModelElementForParent(grammarAccess.getCustomerSupplierRelationshipRule());
                                    	    										}
                                    	    										add(
                                    	    											current,
                                    	    											"upstreamRoles",
                                    	    											lv_upstreamRoles_59_0,
                                    	    											"org.contextmapper.dsl.ContextMappingDSL.UpstreamRole");
                                    	    										afterParserOrEnumRuleCall();
                                    	    									

                                    	    }


                                    	    }


                                    	    }
                                    	    break;

                                    	default :
                                    	    break loop100;
                                        }
                                    } while (true);


                                    }
                                    break;

                            }

                            otherlv_60=(Token)match(input,37,FOLLOW_66); 

                            						newLeafNode(otherlv_60, grammarAccess.getCustomerSupplierRelationshipAccess().getRightSquareBracketKeyword_0_3_1_2());
                            					

                            }
                            break;

                    }

                    otherlv_61=(Token)match(input,54,FOLLOW_44); 

                    					newLeafNode(otherlv_61, grammarAccess.getCustomerSupplierRelationshipAccess().getSupplierCustomerKeyword_0_3_2());
                    				
                    // InternalContextMappingDSL.g:3589:5: (otherlv_62= '[' ( ( (lv_downstreamRoles_63_0= ruleDownstreamRole ) ) (otherlv_64= ',' ( (lv_downstreamRoles_65_0= ruleDownstreamRole ) ) )* )? otherlv_66= ']' )?
                    int alt105=2;
                    int LA105_0 = input.LA(1);

                    if ( (LA105_0==35) ) {
                        alt105=1;
                    }
                    switch (alt105) {
                        case 1 :
                            // InternalContextMappingDSL.g:3590:6: otherlv_62= '[' ( ( (lv_downstreamRoles_63_0= ruleDownstreamRole ) ) (otherlv_64= ',' ( (lv_downstreamRoles_65_0= ruleDownstreamRole ) ) )* )? otherlv_66= ']'
                            {
                            otherlv_62=(Token)match(input,35,FOLLOW_52); 

                            						newLeafNode(otherlv_62, grammarAccess.getCustomerSupplierRelationshipAccess().getLeftSquareBracketKeyword_0_3_3_0());
                            					
                            // InternalContextMappingDSL.g:3594:6: ( ( (lv_downstreamRoles_63_0= ruleDownstreamRole ) ) (otherlv_64= ',' ( (lv_downstreamRoles_65_0= ruleDownstreamRole ) ) )* )?
                            int alt104=2;
                            int LA104_0 = input.LA(1);

                            if ( ((LA104_0>=195 && LA104_0<=196)) ) {
                                alt104=1;
                            }
                            switch (alt104) {
                                case 1 :
                                    // InternalContextMappingDSL.g:3595:7: ( (lv_downstreamRoles_63_0= ruleDownstreamRole ) ) (otherlv_64= ',' ( (lv_downstreamRoles_65_0= ruleDownstreamRole ) ) )*
                                    {
                                    // InternalContextMappingDSL.g:3595:7: ( (lv_downstreamRoles_63_0= ruleDownstreamRole ) )
                                    // InternalContextMappingDSL.g:3596:8: (lv_downstreamRoles_63_0= ruleDownstreamRole )
                                    {
                                    // InternalContextMappingDSL.g:3596:8: (lv_downstreamRoles_63_0= ruleDownstreamRole )
                                    // InternalContextMappingDSL.g:3597:9: lv_downstreamRoles_63_0= ruleDownstreamRole
                                    {

                                    									newCompositeNode(grammarAccess.getCustomerSupplierRelationshipAccess().getDownstreamRolesDownstreamRoleEnumRuleCall_0_3_3_1_0_0());
                                    								
                                    pushFollow(FOLLOW_43);
                                    lv_downstreamRoles_63_0=ruleDownstreamRole();

                                    state._fsp--;


                                    									if (current==null) {
                                    										current = createModelElementForParent(grammarAccess.getCustomerSupplierRelationshipRule());
                                    									}
                                    									add(
                                    										current,
                                    										"downstreamRoles",
                                    										lv_downstreamRoles_63_0,
                                    										"org.contextmapper.dsl.ContextMappingDSL.DownstreamRole");
                                    									afterParserOrEnumRuleCall();
                                    								

                                    }


                                    }

                                    // InternalContextMappingDSL.g:3614:7: (otherlv_64= ',' ( (lv_downstreamRoles_65_0= ruleDownstreamRole ) ) )*
                                    loop103:
                                    do {
                                        int alt103=2;
                                        int LA103_0 = input.LA(1);

                                        if ( (LA103_0==24) ) {
                                            alt103=1;
                                        }


                                        switch (alt103) {
                                    	case 1 :
                                    	    // InternalContextMappingDSL.g:3615:8: otherlv_64= ',' ( (lv_downstreamRoles_65_0= ruleDownstreamRole ) )
                                    	    {
                                    	    otherlv_64=(Token)match(input,24,FOLLOW_46); 

                                    	    								newLeafNode(otherlv_64, grammarAccess.getCustomerSupplierRelationshipAccess().getCommaKeyword_0_3_3_1_1_0());
                                    	    							
                                    	    // InternalContextMappingDSL.g:3619:8: ( (lv_downstreamRoles_65_0= ruleDownstreamRole ) )
                                    	    // InternalContextMappingDSL.g:3620:9: (lv_downstreamRoles_65_0= ruleDownstreamRole )
                                    	    {
                                    	    // InternalContextMappingDSL.g:3620:9: (lv_downstreamRoles_65_0= ruleDownstreamRole )
                                    	    // InternalContextMappingDSL.g:3621:10: lv_downstreamRoles_65_0= ruleDownstreamRole
                                    	    {

                                    	    										newCompositeNode(grammarAccess.getCustomerSupplierRelationshipAccess().getDownstreamRolesDownstreamRoleEnumRuleCall_0_3_3_1_1_1_0());
                                    	    									
                                    	    pushFollow(FOLLOW_43);
                                    	    lv_downstreamRoles_65_0=ruleDownstreamRole();

                                    	    state._fsp--;


                                    	    										if (current==null) {
                                    	    											current = createModelElementForParent(grammarAccess.getCustomerSupplierRelationshipRule());
                                    	    										}
                                    	    										add(
                                    	    											current,
                                    	    											"downstreamRoles",
                                    	    											lv_downstreamRoles_65_0,
                                    	    											"org.contextmapper.dsl.ContextMappingDSL.DownstreamRole");
                                    	    										afterParserOrEnumRuleCall();
                                    	    									

                                    	    }


                                    	    }


                                    	    }
                                    	    break;

                                    	default :
                                    	    break loop103;
                                        }
                                    } while (true);


                                    }
                                    break;

                            }

                            otherlv_66=(Token)match(input,37,FOLLOW_10); 

                            						newLeafNode(otherlv_66, grammarAccess.getCustomerSupplierRelationshipAccess().getRightSquareBracketKeyword_0_3_3_2());
                            					

                            }
                            break;

                    }

                    // InternalContextMappingDSL.g:3645:5: ( (otherlv_67= RULE_ID ) )
                    // InternalContextMappingDSL.g:3646:6: (otherlv_67= RULE_ID )
                    {
                    // InternalContextMappingDSL.g:3646:6: (otherlv_67= RULE_ID )
                    // InternalContextMappingDSL.g:3647:7: otherlv_67= RULE_ID
                    {

                    							if (current==null) {
                    								current = createModelElement(grammarAccess.getCustomerSupplierRelationshipRule());
                    							}
                    						
                    otherlv_67=(Token)match(input,RULE_ID,FOLLOW_32); 

                    							newLeafNode(otherlv_67, grammarAccess.getCustomerSupplierRelationshipAccess().getDownstreamBoundedContextCrossReference_0_3_4_0());
                    						

                    }


                    }


                    }


                    }
                    break;

            }

            // InternalContextMappingDSL.g:3660:3: (otherlv_68= ':' ( (lv_name_69_0= RULE_ID ) ) )?
            int alt107=2;
            int LA107_0 = input.LA(1);

            if ( (LA107_0==40) ) {
                alt107=1;
            }
            switch (alt107) {
                case 1 :
                    // InternalContextMappingDSL.g:3661:4: otherlv_68= ':' ( (lv_name_69_0= RULE_ID ) )
                    {
                    otherlv_68=(Token)match(input,40,FOLLOW_10); 

                    				newLeafNode(otherlv_68, grammarAccess.getCustomerSupplierRelationshipAccess().getColonKeyword_1_0());
                    			
                    // InternalContextMappingDSL.g:3665:4: ( (lv_name_69_0= RULE_ID ) )
                    // InternalContextMappingDSL.g:3666:5: (lv_name_69_0= RULE_ID )
                    {
                    // InternalContextMappingDSL.g:3666:5: (lv_name_69_0= RULE_ID )
                    // InternalContextMappingDSL.g:3667:6: lv_name_69_0= RULE_ID
                    {
                    lv_name_69_0=(Token)match(input,RULE_ID,FOLLOW_23); 

                    						newLeafNode(lv_name_69_0, grammarAccess.getCustomerSupplierRelationshipAccess().getNameIDTerminalRuleCall_1_1_0());
                    					

                    						if (current==null) {
                    							current = createModelElement(grammarAccess.getCustomerSupplierRelationshipRule());
                    						}
                    						setWithLastConsumed(
                    							current,
                    							"name",
                    							lv_name_69_0,
                    							"org.eclipse.xtext.common.Terminals.ID");
                    					

                    }


                    }


                    }
                    break;

            }

            // InternalContextMappingDSL.g:3684:3: (this_OPEN_70= RULE_OPEN ( ( ( ( ({...}? => ( ({...}? => (otherlv_72= 'implementationTechnology' (otherlv_73= '=' )? ( (lv_implementationTechnology_74_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_75= 'exposedAggregates' (otherlv_76= '=' )? ( (otherlv_77= RULE_ID ) ) ) (otherlv_78= ',' ( (otherlv_79= RULE_ID ) ) )* ( (lv_exposedAggregatesComment_80_0= RULE_SL_COMMENT ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_81= 'downstreamRights' (otherlv_82= '=' )? ( (lv_downstreamGovernanceRights_83_0= ruleDownstreamGovernanceRights ) ) ) ) ) ) )* ) ) ) this_CLOSE_84= RULE_CLOSE )?
            int alt114=2;
            int LA114_0 = input.LA(1);

            if ( (LA114_0==RULE_OPEN) ) {
                alt114=1;
            }
            switch (alt114) {
                case 1 :
                    // InternalContextMappingDSL.g:3685:4: this_OPEN_70= RULE_OPEN ( ( ( ( ({...}? => ( ({...}? => (otherlv_72= 'implementationTechnology' (otherlv_73= '=' )? ( (lv_implementationTechnology_74_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_75= 'exposedAggregates' (otherlv_76= '=' )? ( (otherlv_77= RULE_ID ) ) ) (otherlv_78= ',' ( (otherlv_79= RULE_ID ) ) )* ( (lv_exposedAggregatesComment_80_0= RULE_SL_COMMENT ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_81= 'downstreamRights' (otherlv_82= '=' )? ( (lv_downstreamGovernanceRights_83_0= ruleDownstreamGovernanceRights ) ) ) ) ) ) )* ) ) ) this_CLOSE_84= RULE_CLOSE
                    {
                    this_OPEN_70=(Token)match(input,RULE_OPEN,FOLLOW_55); 

                    				newLeafNode(this_OPEN_70, grammarAccess.getCustomerSupplierRelationshipAccess().getOPENTerminalRuleCall_2_0());
                    			
                    // InternalContextMappingDSL.g:3689:4: ( ( ( ( ({...}? => ( ({...}? => (otherlv_72= 'implementationTechnology' (otherlv_73= '=' )? ( (lv_implementationTechnology_74_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_75= 'exposedAggregates' (otherlv_76= '=' )? ( (otherlv_77= RULE_ID ) ) ) (otherlv_78= ',' ( (otherlv_79= RULE_ID ) ) )* ( (lv_exposedAggregatesComment_80_0= RULE_SL_COMMENT ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_81= 'downstreamRights' (otherlv_82= '=' )? ( (lv_downstreamGovernanceRights_83_0= ruleDownstreamGovernanceRights ) ) ) ) ) ) )* ) ) )
                    // InternalContextMappingDSL.g:3690:5: ( ( ( ({...}? => ( ({...}? => (otherlv_72= 'implementationTechnology' (otherlv_73= '=' )? ( (lv_implementationTechnology_74_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_75= 'exposedAggregates' (otherlv_76= '=' )? ( (otherlv_77= RULE_ID ) ) ) (otherlv_78= ',' ( (otherlv_79= RULE_ID ) ) )* ( (lv_exposedAggregatesComment_80_0= RULE_SL_COMMENT ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_81= 'downstreamRights' (otherlv_82= '=' )? ( (lv_downstreamGovernanceRights_83_0= ruleDownstreamGovernanceRights ) ) ) ) ) ) )* ) )
                    {
                    // InternalContextMappingDSL.g:3690:5: ( ( ( ({...}? => ( ({...}? => (otherlv_72= 'implementationTechnology' (otherlv_73= '=' )? ( (lv_implementationTechnology_74_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_75= 'exposedAggregates' (otherlv_76= '=' )? ( (otherlv_77= RULE_ID ) ) ) (otherlv_78= ',' ( (otherlv_79= RULE_ID ) ) )* ( (lv_exposedAggregatesComment_80_0= RULE_SL_COMMENT ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_81= 'downstreamRights' (otherlv_82= '=' )? ( (lv_downstreamGovernanceRights_83_0= ruleDownstreamGovernanceRights ) ) ) ) ) ) )* ) )
                    // InternalContextMappingDSL.g:3691:6: ( ( ({...}? => ( ({...}? => (otherlv_72= 'implementationTechnology' (otherlv_73= '=' )? ( (lv_implementationTechnology_74_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_75= 'exposedAggregates' (otherlv_76= '=' )? ( (otherlv_77= RULE_ID ) ) ) (otherlv_78= ',' ( (otherlv_79= RULE_ID ) ) )* ( (lv_exposedAggregatesComment_80_0= RULE_SL_COMMENT ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_81= 'downstreamRights' (otherlv_82= '=' )? ( (lv_downstreamGovernanceRights_83_0= ruleDownstreamGovernanceRights ) ) ) ) ) ) )* )
                    {
                     
                    					  getUnorderedGroupHelper().enter(grammarAccess.getCustomerSupplierRelationshipAccess().getUnorderedGroup_2_1());
                    					
                    // InternalContextMappingDSL.g:3694:6: ( ( ({...}? => ( ({...}? => (otherlv_72= 'implementationTechnology' (otherlv_73= '=' )? ( (lv_implementationTechnology_74_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_75= 'exposedAggregates' (otherlv_76= '=' )? ( (otherlv_77= RULE_ID ) ) ) (otherlv_78= ',' ( (otherlv_79= RULE_ID ) ) )* ( (lv_exposedAggregatesComment_80_0= RULE_SL_COMMENT ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_81= 'downstreamRights' (otherlv_82= '=' )? ( (lv_downstreamGovernanceRights_83_0= ruleDownstreamGovernanceRights ) ) ) ) ) ) )* )
                    // InternalContextMappingDSL.g:3695:7: ( ({...}? => ( ({...}? => (otherlv_72= 'implementationTechnology' (otherlv_73= '=' )? ( (lv_implementationTechnology_74_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_75= 'exposedAggregates' (otherlv_76= '=' )? ( (otherlv_77= RULE_ID ) ) ) (otherlv_78= ',' ( (otherlv_79= RULE_ID ) ) )* ( (lv_exposedAggregatesComment_80_0= RULE_SL_COMMENT ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_81= 'downstreamRights' (otherlv_82= '=' )? ( (lv_downstreamGovernanceRights_83_0= ruleDownstreamGovernanceRights ) ) ) ) ) ) )*
                    {
                    // InternalContextMappingDSL.g:3695:7: ( ({...}? => ( ({...}? => (otherlv_72= 'implementationTechnology' (otherlv_73= '=' )? ( (lv_implementationTechnology_74_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_75= 'exposedAggregates' (otherlv_76= '=' )? ( (otherlv_77= RULE_ID ) ) ) (otherlv_78= ',' ( (otherlv_79= RULE_ID ) ) )* ( (lv_exposedAggregatesComment_80_0= RULE_SL_COMMENT ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_81= 'downstreamRights' (otherlv_82= '=' )? ( (lv_downstreamGovernanceRights_83_0= ruleDownstreamGovernanceRights ) ) ) ) ) ) )*
                    loop113:
                    do {
                        int alt113=4;
                        int LA113_0 = input.LA(1);

                        if ( LA113_0 == 31 && getUnorderedGroupHelper().canSelect(grammarAccess.getCustomerSupplierRelationshipAccess().getUnorderedGroup_2_1(), 0) ) {
                            alt113=1;
                        }
                        else if ( LA113_0 == 49 && getUnorderedGroupHelper().canSelect(grammarAccess.getCustomerSupplierRelationshipAccess().getUnorderedGroup_2_1(), 1) ) {
                            alt113=2;
                        }
                        else if ( LA113_0 == 50 && getUnorderedGroupHelper().canSelect(grammarAccess.getCustomerSupplierRelationshipAccess().getUnorderedGroup_2_1(), 2) ) {
                            alt113=3;
                        }


                        switch (alt113) {
                    	case 1 :
                    	    // InternalContextMappingDSL.g:3696:5: ({...}? => ( ({...}? => (otherlv_72= 'implementationTechnology' (otherlv_73= '=' )? ( (lv_implementationTechnology_74_0= RULE_STRING ) ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:3696:5: ({...}? => ( ({...}? => (otherlv_72= 'implementationTechnology' (otherlv_73= '=' )? ( (lv_implementationTechnology_74_0= RULE_STRING ) ) ) ) ) )
                    	    // InternalContextMappingDSL.g:3697:6: {...}? => ( ({...}? => (otherlv_72= 'implementationTechnology' (otherlv_73= '=' )? ( (lv_implementationTechnology_74_0= RULE_STRING ) ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getCustomerSupplierRelationshipAccess().getUnorderedGroup_2_1(), 0) ) {
                    	        throw new FailedPredicateException(input, "ruleCustomerSupplierRelationship", "getUnorderedGroupHelper().canSelect(grammarAccess.getCustomerSupplierRelationshipAccess().getUnorderedGroup_2_1(), 0)");
                    	    }
                    	    // InternalContextMappingDSL.g:3697:128: ( ({...}? => (otherlv_72= 'implementationTechnology' (otherlv_73= '=' )? ( (lv_implementationTechnology_74_0= RULE_STRING ) ) ) ) )
                    	    // InternalContextMappingDSL.g:3698:7: ({...}? => (otherlv_72= 'implementationTechnology' (otherlv_73= '=' )? ( (lv_implementationTechnology_74_0= RULE_STRING ) ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getCustomerSupplierRelationshipAccess().getUnorderedGroup_2_1(), 0);
                    	    						
                    	    // InternalContextMappingDSL.g:3701:10: ({...}? => (otherlv_72= 'implementationTechnology' (otherlv_73= '=' )? ( (lv_implementationTechnology_74_0= RULE_STRING ) ) ) )
                    	    // InternalContextMappingDSL.g:3701:11: {...}? => (otherlv_72= 'implementationTechnology' (otherlv_73= '=' )? ( (lv_implementationTechnology_74_0= RULE_STRING ) ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleCustomerSupplierRelationship", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:3701:20: (otherlv_72= 'implementationTechnology' (otherlv_73= '=' )? ( (lv_implementationTechnology_74_0= RULE_STRING ) ) )
                    	    // InternalContextMappingDSL.g:3701:21: otherlv_72= 'implementationTechnology' (otherlv_73= '=' )? ( (lv_implementationTechnology_74_0= RULE_STRING ) )
                    	    {
                    	    otherlv_72=(Token)match(input,31,FOLLOW_17); 

                    	    										newLeafNode(otherlv_72, grammarAccess.getCustomerSupplierRelationshipAccess().getImplementationTechnologyKeyword_2_1_0_0());
                    	    									
                    	    // InternalContextMappingDSL.g:3705:10: (otherlv_73= '=' )?
                    	    int alt108=2;
                    	    int LA108_0 = input.LA(1);

                    	    if ( (LA108_0==21) ) {
                    	        alt108=1;
                    	    }
                    	    switch (alt108) {
                    	        case 1 :
                    	            // InternalContextMappingDSL.g:3706:11: otherlv_73= '='
                    	            {
                    	            otherlv_73=(Token)match(input,21,FOLLOW_4); 

                    	            											newLeafNode(otherlv_73, grammarAccess.getCustomerSupplierRelationshipAccess().getEqualsSignKeyword_2_1_0_1());
                    	            										

                    	            }
                    	            break;

                    	    }

                    	    // InternalContextMappingDSL.g:3711:10: ( (lv_implementationTechnology_74_0= RULE_STRING ) )
                    	    // InternalContextMappingDSL.g:3712:11: (lv_implementationTechnology_74_0= RULE_STRING )
                    	    {
                    	    // InternalContextMappingDSL.g:3712:11: (lv_implementationTechnology_74_0= RULE_STRING )
                    	    // InternalContextMappingDSL.g:3713:12: lv_implementationTechnology_74_0= RULE_STRING
                    	    {
                    	    lv_implementationTechnology_74_0=(Token)match(input,RULE_STRING,FOLLOW_55); 

                    	    												newLeafNode(lv_implementationTechnology_74_0, grammarAccess.getCustomerSupplierRelationshipAccess().getImplementationTechnologySTRINGTerminalRuleCall_2_1_0_2_0());
                    	    											

                    	    												if (current==null) {
                    	    													current = createModelElement(grammarAccess.getCustomerSupplierRelationshipRule());
                    	    												}
                    	    												setWithLastConsumed(
                    	    													current,
                    	    													"implementationTechnology",
                    	    													lv_implementationTechnology_74_0,
                    	    													"org.eclipse.xtext.common.Terminals.STRING");
                    	    											

                    	    }


                    	    }


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getCustomerSupplierRelationshipAccess().getUnorderedGroup_2_1());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 2 :
                    	    // InternalContextMappingDSL.g:3735:5: ({...}? => ( ({...}? => ( (otherlv_75= 'exposedAggregates' (otherlv_76= '=' )? ( (otherlv_77= RULE_ID ) ) ) (otherlv_78= ',' ( (otherlv_79= RULE_ID ) ) )* ( (lv_exposedAggregatesComment_80_0= RULE_SL_COMMENT ) )? ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:3735:5: ({...}? => ( ({...}? => ( (otherlv_75= 'exposedAggregates' (otherlv_76= '=' )? ( (otherlv_77= RULE_ID ) ) ) (otherlv_78= ',' ( (otherlv_79= RULE_ID ) ) )* ( (lv_exposedAggregatesComment_80_0= RULE_SL_COMMENT ) )? ) ) ) )
                    	    // InternalContextMappingDSL.g:3736:6: {...}? => ( ({...}? => ( (otherlv_75= 'exposedAggregates' (otherlv_76= '=' )? ( (otherlv_77= RULE_ID ) ) ) (otherlv_78= ',' ( (otherlv_79= RULE_ID ) ) )* ( (lv_exposedAggregatesComment_80_0= RULE_SL_COMMENT ) )? ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getCustomerSupplierRelationshipAccess().getUnorderedGroup_2_1(), 1) ) {
                    	        throw new FailedPredicateException(input, "ruleCustomerSupplierRelationship", "getUnorderedGroupHelper().canSelect(grammarAccess.getCustomerSupplierRelationshipAccess().getUnorderedGroup_2_1(), 1)");
                    	    }
                    	    // InternalContextMappingDSL.g:3736:128: ( ({...}? => ( (otherlv_75= 'exposedAggregates' (otherlv_76= '=' )? ( (otherlv_77= RULE_ID ) ) ) (otherlv_78= ',' ( (otherlv_79= RULE_ID ) ) )* ( (lv_exposedAggregatesComment_80_0= RULE_SL_COMMENT ) )? ) ) )
                    	    // InternalContextMappingDSL.g:3737:7: ({...}? => ( (otherlv_75= 'exposedAggregates' (otherlv_76= '=' )? ( (otherlv_77= RULE_ID ) ) ) (otherlv_78= ',' ( (otherlv_79= RULE_ID ) ) )* ( (lv_exposedAggregatesComment_80_0= RULE_SL_COMMENT ) )? ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getCustomerSupplierRelationshipAccess().getUnorderedGroup_2_1(), 1);
                    	    						
                    	    // InternalContextMappingDSL.g:3740:10: ({...}? => ( (otherlv_75= 'exposedAggregates' (otherlv_76= '=' )? ( (otherlv_77= RULE_ID ) ) ) (otherlv_78= ',' ( (otherlv_79= RULE_ID ) ) )* ( (lv_exposedAggregatesComment_80_0= RULE_SL_COMMENT ) )? ) )
                    	    // InternalContextMappingDSL.g:3740:11: {...}? => ( (otherlv_75= 'exposedAggregates' (otherlv_76= '=' )? ( (otherlv_77= RULE_ID ) ) ) (otherlv_78= ',' ( (otherlv_79= RULE_ID ) ) )* ( (lv_exposedAggregatesComment_80_0= RULE_SL_COMMENT ) )? )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleCustomerSupplierRelationship", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:3740:20: ( (otherlv_75= 'exposedAggregates' (otherlv_76= '=' )? ( (otherlv_77= RULE_ID ) ) ) (otherlv_78= ',' ( (otherlv_79= RULE_ID ) ) )* ( (lv_exposedAggregatesComment_80_0= RULE_SL_COMMENT ) )? )
                    	    // InternalContextMappingDSL.g:3740:21: (otherlv_75= 'exposedAggregates' (otherlv_76= '=' )? ( (otherlv_77= RULE_ID ) ) ) (otherlv_78= ',' ( (otherlv_79= RULE_ID ) ) )* ( (lv_exposedAggregatesComment_80_0= RULE_SL_COMMENT ) )?
                    	    {
                    	    // InternalContextMappingDSL.g:3740:21: (otherlv_75= 'exposedAggregates' (otherlv_76= '=' )? ( (otherlv_77= RULE_ID ) ) )
                    	    // InternalContextMappingDSL.g:3741:11: otherlv_75= 'exposedAggregates' (otherlv_76= '=' )? ( (otherlv_77= RULE_ID ) )
                    	    {
                    	    otherlv_75=(Token)match(input,49,FOLLOW_56); 

                    	    											newLeafNode(otherlv_75, grammarAccess.getCustomerSupplierRelationshipAccess().getExposedAggregatesKeyword_2_1_1_0_0());
                    	    										
                    	    // InternalContextMappingDSL.g:3745:11: (otherlv_76= '=' )?
                    	    int alt109=2;
                    	    int LA109_0 = input.LA(1);

                    	    if ( (LA109_0==21) ) {
                    	        alt109=1;
                    	    }
                    	    switch (alt109) {
                    	        case 1 :
                    	            // InternalContextMappingDSL.g:3746:12: otherlv_76= '='
                    	            {
                    	            otherlv_76=(Token)match(input,21,FOLLOW_10); 

                    	            												newLeafNode(otherlv_76, grammarAccess.getCustomerSupplierRelationshipAccess().getEqualsSignKeyword_2_1_1_0_1());
                    	            											

                    	            }
                    	            break;

                    	    }

                    	    // InternalContextMappingDSL.g:3751:11: ( (otherlv_77= RULE_ID ) )
                    	    // InternalContextMappingDSL.g:3752:12: (otherlv_77= RULE_ID )
                    	    {
                    	    // InternalContextMappingDSL.g:3752:12: (otherlv_77= RULE_ID )
                    	    // InternalContextMappingDSL.g:3753:13: otherlv_77= RULE_ID
                    	    {

                    	    													if (current==null) {
                    	    														current = createModelElement(grammarAccess.getCustomerSupplierRelationshipRule());
                    	    													}
                    	    												
                    	    otherlv_77=(Token)match(input,RULE_ID,FOLLOW_57); 

                    	    													newLeafNode(otherlv_77, grammarAccess.getCustomerSupplierRelationshipAccess().getUpstreamExposedAggregatesAggregateCrossReference_2_1_1_0_2_0());
                    	    												

                    	    }


                    	    }


                    	    }

                    	    // InternalContextMappingDSL.g:3765:10: (otherlv_78= ',' ( (otherlv_79= RULE_ID ) ) )*
                    	    loop110:
                    	    do {
                    	        int alt110=2;
                    	        int LA110_0 = input.LA(1);

                    	        if ( (LA110_0==24) ) {
                    	            alt110=1;
                    	        }


                    	        switch (alt110) {
                    	    	case 1 :
                    	    	    // InternalContextMappingDSL.g:3766:11: otherlv_78= ',' ( (otherlv_79= RULE_ID ) )
                    	    	    {
                    	    	    otherlv_78=(Token)match(input,24,FOLLOW_10); 

                    	    	    											newLeafNode(otherlv_78, grammarAccess.getCustomerSupplierRelationshipAccess().getCommaKeyword_2_1_1_1_0());
                    	    	    										
                    	    	    // InternalContextMappingDSL.g:3770:11: ( (otherlv_79= RULE_ID ) )
                    	    	    // InternalContextMappingDSL.g:3771:12: (otherlv_79= RULE_ID )
                    	    	    {
                    	    	    // InternalContextMappingDSL.g:3771:12: (otherlv_79= RULE_ID )
                    	    	    // InternalContextMappingDSL.g:3772:13: otherlv_79= RULE_ID
                    	    	    {

                    	    	    													if (current==null) {
                    	    	    														current = createModelElement(grammarAccess.getCustomerSupplierRelationshipRule());
                    	    	    													}
                    	    	    												
                    	    	    otherlv_79=(Token)match(input,RULE_ID,FOLLOW_57); 

                    	    	    													newLeafNode(otherlv_79, grammarAccess.getCustomerSupplierRelationshipAccess().getUpstreamExposedAggregatesAggregateCrossReference_2_1_1_1_1_0());
                    	    	    												

                    	    	    }


                    	    	    }


                    	    	    }
                    	    	    break;

                    	    	default :
                    	    	    break loop110;
                    	        }
                    	    } while (true);

                    	    // InternalContextMappingDSL.g:3784:10: ( (lv_exposedAggregatesComment_80_0= RULE_SL_COMMENT ) )?
                    	    int alt111=2;
                    	    int LA111_0 = input.LA(1);

                    	    if ( (LA111_0==RULE_SL_COMMENT) ) {
                    	        alt111=1;
                    	    }
                    	    switch (alt111) {
                    	        case 1 :
                    	            // InternalContextMappingDSL.g:3785:11: (lv_exposedAggregatesComment_80_0= RULE_SL_COMMENT )
                    	            {
                    	            // InternalContextMappingDSL.g:3785:11: (lv_exposedAggregatesComment_80_0= RULE_SL_COMMENT )
                    	            // InternalContextMappingDSL.g:3786:12: lv_exposedAggregatesComment_80_0= RULE_SL_COMMENT
                    	            {
                    	            lv_exposedAggregatesComment_80_0=(Token)match(input,RULE_SL_COMMENT,FOLLOW_55); 

                    	            												newLeafNode(lv_exposedAggregatesComment_80_0, grammarAccess.getCustomerSupplierRelationshipAccess().getExposedAggregatesCommentSL_COMMENTTerminalRuleCall_2_1_1_2_0());
                    	            											

                    	            												if (current==null) {
                    	            													current = createModelElement(grammarAccess.getCustomerSupplierRelationshipRule());
                    	            												}
                    	            												setWithLastConsumed(
                    	            													current,
                    	            													"exposedAggregatesComment",
                    	            													lv_exposedAggregatesComment_80_0,
                    	            													"org.eclipse.xtext.common.Terminals.SL_COMMENT");
                    	            											

                    	            }


                    	            }
                    	            break;

                    	    }


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getCustomerSupplierRelationshipAccess().getUnorderedGroup_2_1());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 3 :
                    	    // InternalContextMappingDSL.g:3808:5: ({...}? => ( ({...}? => (otherlv_81= 'downstreamRights' (otherlv_82= '=' )? ( (lv_downstreamGovernanceRights_83_0= ruleDownstreamGovernanceRights ) ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:3808:5: ({...}? => ( ({...}? => (otherlv_81= 'downstreamRights' (otherlv_82= '=' )? ( (lv_downstreamGovernanceRights_83_0= ruleDownstreamGovernanceRights ) ) ) ) ) )
                    	    // InternalContextMappingDSL.g:3809:6: {...}? => ( ({...}? => (otherlv_81= 'downstreamRights' (otherlv_82= '=' )? ( (lv_downstreamGovernanceRights_83_0= ruleDownstreamGovernanceRights ) ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getCustomerSupplierRelationshipAccess().getUnorderedGroup_2_1(), 2) ) {
                    	        throw new FailedPredicateException(input, "ruleCustomerSupplierRelationship", "getUnorderedGroupHelper().canSelect(grammarAccess.getCustomerSupplierRelationshipAccess().getUnorderedGroup_2_1(), 2)");
                    	    }
                    	    // InternalContextMappingDSL.g:3809:128: ( ({...}? => (otherlv_81= 'downstreamRights' (otherlv_82= '=' )? ( (lv_downstreamGovernanceRights_83_0= ruleDownstreamGovernanceRights ) ) ) ) )
                    	    // InternalContextMappingDSL.g:3810:7: ({...}? => (otherlv_81= 'downstreamRights' (otherlv_82= '=' )? ( (lv_downstreamGovernanceRights_83_0= ruleDownstreamGovernanceRights ) ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getCustomerSupplierRelationshipAccess().getUnorderedGroup_2_1(), 2);
                    	    						
                    	    // InternalContextMappingDSL.g:3813:10: ({...}? => (otherlv_81= 'downstreamRights' (otherlv_82= '=' )? ( (lv_downstreamGovernanceRights_83_0= ruleDownstreamGovernanceRights ) ) ) )
                    	    // InternalContextMappingDSL.g:3813:11: {...}? => (otherlv_81= 'downstreamRights' (otherlv_82= '=' )? ( (lv_downstreamGovernanceRights_83_0= ruleDownstreamGovernanceRights ) ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleCustomerSupplierRelationship", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:3813:20: (otherlv_81= 'downstreamRights' (otherlv_82= '=' )? ( (lv_downstreamGovernanceRights_83_0= ruleDownstreamGovernanceRights ) ) )
                    	    // InternalContextMappingDSL.g:3813:21: otherlv_81= 'downstreamRights' (otherlv_82= '=' )? ( (lv_downstreamGovernanceRights_83_0= ruleDownstreamGovernanceRights ) )
                    	    {
                    	    otherlv_81=(Token)match(input,50,FOLLOW_58); 

                    	    										newLeafNode(otherlv_81, grammarAccess.getCustomerSupplierRelationshipAccess().getDownstreamRightsKeyword_2_1_2_0());
                    	    									
                    	    // InternalContextMappingDSL.g:3817:10: (otherlv_82= '=' )?
                    	    int alt112=2;
                    	    int LA112_0 = input.LA(1);

                    	    if ( (LA112_0==21) ) {
                    	        alt112=1;
                    	    }
                    	    switch (alt112) {
                    	        case 1 :
                    	            // InternalContextMappingDSL.g:3818:11: otherlv_82= '='
                    	            {
                    	            otherlv_82=(Token)match(input,21,FOLLOW_58); 

                    	            											newLeafNode(otherlv_82, grammarAccess.getCustomerSupplierRelationshipAccess().getEqualsSignKeyword_2_1_2_1());
                    	            										

                    	            }
                    	            break;

                    	    }

                    	    // InternalContextMappingDSL.g:3823:10: ( (lv_downstreamGovernanceRights_83_0= ruleDownstreamGovernanceRights ) )
                    	    // InternalContextMappingDSL.g:3824:11: (lv_downstreamGovernanceRights_83_0= ruleDownstreamGovernanceRights )
                    	    {
                    	    // InternalContextMappingDSL.g:3824:11: (lv_downstreamGovernanceRights_83_0= ruleDownstreamGovernanceRights )
                    	    // InternalContextMappingDSL.g:3825:12: lv_downstreamGovernanceRights_83_0= ruleDownstreamGovernanceRights
                    	    {

                    	    												newCompositeNode(grammarAccess.getCustomerSupplierRelationshipAccess().getDownstreamGovernanceRightsDownstreamGovernanceRightsEnumRuleCall_2_1_2_2_0());
                    	    											
                    	    pushFollow(FOLLOW_55);
                    	    lv_downstreamGovernanceRights_83_0=ruleDownstreamGovernanceRights();

                    	    state._fsp--;


                    	    												if (current==null) {
                    	    													current = createModelElementForParent(grammarAccess.getCustomerSupplierRelationshipRule());
                    	    												}
                    	    												set(
                    	    													current,
                    	    													"downstreamGovernanceRights",
                    	    													lv_downstreamGovernanceRights_83_0,
                    	    													"org.contextmapper.dsl.ContextMappingDSL.DownstreamGovernanceRights");
                    	    												afterParserOrEnumRuleCall();
                    	    											

                    	    }


                    	    }


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getCustomerSupplierRelationshipAccess().getUnorderedGroup_2_1());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop113;
                        }
                    } while (true);


                    }


                    }

                     
                    					  getUnorderedGroupHelper().leave(grammarAccess.getCustomerSupplierRelationshipAccess().getUnorderedGroup_2_1());
                    					

                    }

                    this_CLOSE_84=(Token)match(input,RULE_CLOSE,FOLLOW_2); 

                    				newLeafNode(this_CLOSE_84, grammarAccess.getCustomerSupplierRelationshipAccess().getCLOSETerminalRuleCall_2_2());
                    			

                    }
                    break;

            }


            }


            }


            	leaveRule();

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleCustomerSupplierRelationship"


    // $ANTLR start "entryRuleAggregate"
    // InternalContextMappingDSL.g:3864:1: entryRuleAggregate returns [EObject current=null] : iv_ruleAggregate= ruleAggregate EOF ;
    public final EObject entryRuleAggregate() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleAggregate = null;


        try {
            // InternalContextMappingDSL.g:3864:50: (iv_ruleAggregate= ruleAggregate EOF )
            // InternalContextMappingDSL.g:3865:2: iv_ruleAggregate= ruleAggregate EOF
            {
             newCompositeNode(grammarAccess.getAggregateRule()); 
            pushFollow(FOLLOW_1);
            iv_ruleAggregate=ruleAggregate();

            state._fsp--;

             current =iv_ruleAggregate; 
            match(input,EOF,FOLLOW_2); 

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleAggregate"


    // $ANTLR start "ruleAggregate"
    // InternalContextMappingDSL.g:3871:1: ruleAggregate returns [EObject current=null] : ( ( (lv_comment_0_0= RULE_SL_COMMENT ) )? ( (lv_doc_1_0= RULE_STRING ) )? otherlv_2= 'Aggregate' ( (lv_name_3_0= RULE_ID ) ) (this_OPEN_4= RULE_OPEN ( ( ( ( ({...}? => ( ({...}? => ( (otherlv_6= 'responsibilities' (otherlv_7= '=' )? ( (lv_responsibilities_8_0= RULE_STRING ) ) ) (otherlv_9= ',' ( (lv_responsibilities_10_0= RULE_STRING ) ) )* ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_11= 'useCases' (otherlv_12= '=' )? ( (otherlv_13= RULE_ID ) ) ) (otherlv_14= ',' ( (otherlv_15= RULE_ID ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_16= 'owner' (otherlv_17= '=' )? ( (otherlv_18= RULE_ID ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'knowledgeLevel' (otherlv_20= '=' )? ( (lv_knowledgeLevel_21_0= ruleKnowledgeLevel ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_22= 'likelihoodForChange' (otherlv_23= '=' )? ( (lv_likelihoodForChange_24_0= ruleLikelihoodForChange ) ) ) ) ) ) )* ) ) ) ( ( (lv_services_25_0= ruleService ) ) | ( (lv_resources_26_0= ruleResource ) ) | ( (lv_consumers_27_0= ruleConsumer ) ) | ( (lv_domainObjects_28_0= ruleSimpleDomainObject ) ) )* this_CLOSE_29= RULE_CLOSE )? ) ;
    public final EObject ruleAggregate() throws RecognitionException {
        EObject current = null;

        Token lv_comment_0_0=null;
        Token lv_doc_1_0=null;
        Token otherlv_2=null;
        Token lv_name_3_0=null;
        Token this_OPEN_4=null;
        Token otherlv_6=null;
        Token otherlv_7=null;
        Token lv_responsibilities_8_0=null;
        Token otherlv_9=null;
        Token lv_responsibilities_10_0=null;
        Token otherlv_11=null;
        Token otherlv_12=null;
        Token otherlv_13=null;
        Token otherlv_14=null;
        Token otherlv_15=null;
        Token otherlv_16=null;
        Token otherlv_17=null;
        Token otherlv_18=null;
        Token otherlv_19=null;
        Token otherlv_20=null;
        Token otherlv_22=null;
        Token otherlv_23=null;
        Token this_CLOSE_29=null;
        Enumerator lv_knowledgeLevel_21_0 = null;

        Enumerator lv_likelihoodForChange_24_0 = null;

        EObject lv_services_25_0 = null;

        EObject lv_resources_26_0 = null;

        EObject lv_consumers_27_0 = null;

        EObject lv_domainObjects_28_0 = null;



        	enterRule();

        try {
            // InternalContextMappingDSL.g:3877:2: ( ( ( (lv_comment_0_0= RULE_SL_COMMENT ) )? ( (lv_doc_1_0= RULE_STRING ) )? otherlv_2= 'Aggregate' ( (lv_name_3_0= RULE_ID ) ) (this_OPEN_4= RULE_OPEN ( ( ( ( ({...}? => ( ({...}? => ( (otherlv_6= 'responsibilities' (otherlv_7= '=' )? ( (lv_responsibilities_8_0= RULE_STRING ) ) ) (otherlv_9= ',' ( (lv_responsibilities_10_0= RULE_STRING ) ) )* ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_11= 'useCases' (otherlv_12= '=' )? ( (otherlv_13= RULE_ID ) ) ) (otherlv_14= ',' ( (otherlv_15= RULE_ID ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_16= 'owner' (otherlv_17= '=' )? ( (otherlv_18= RULE_ID ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'knowledgeLevel' (otherlv_20= '=' )? ( (lv_knowledgeLevel_21_0= ruleKnowledgeLevel ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_22= 'likelihoodForChange' (otherlv_23= '=' )? ( (lv_likelihoodForChange_24_0= ruleLikelihoodForChange ) ) ) ) ) ) )* ) ) ) ( ( (lv_services_25_0= ruleService ) ) | ( (lv_resources_26_0= ruleResource ) ) | ( (lv_consumers_27_0= ruleConsumer ) ) | ( (lv_domainObjects_28_0= ruleSimpleDomainObject ) ) )* this_CLOSE_29= RULE_CLOSE )? ) )
            // InternalContextMappingDSL.g:3878:2: ( ( (lv_comment_0_0= RULE_SL_COMMENT ) )? ( (lv_doc_1_0= RULE_STRING ) )? otherlv_2= 'Aggregate' ( (lv_name_3_0= RULE_ID ) ) (this_OPEN_4= RULE_OPEN ( ( ( ( ({...}? => ( ({...}? => ( (otherlv_6= 'responsibilities' (otherlv_7= '=' )? ( (lv_responsibilities_8_0= RULE_STRING ) ) ) (otherlv_9= ',' ( (lv_responsibilities_10_0= RULE_STRING ) ) )* ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_11= 'useCases' (otherlv_12= '=' )? ( (otherlv_13= RULE_ID ) ) ) (otherlv_14= ',' ( (otherlv_15= RULE_ID ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_16= 'owner' (otherlv_17= '=' )? ( (otherlv_18= RULE_ID ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'knowledgeLevel' (otherlv_20= '=' )? ( (lv_knowledgeLevel_21_0= ruleKnowledgeLevel ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_22= 'likelihoodForChange' (otherlv_23= '=' )? ( (lv_likelihoodForChange_24_0= ruleLikelihoodForChange ) ) ) ) ) ) )* ) ) ) ( ( (lv_services_25_0= ruleService ) ) | ( (lv_resources_26_0= ruleResource ) ) | ( (lv_consumers_27_0= ruleConsumer ) ) | ( (lv_domainObjects_28_0= ruleSimpleDomainObject ) ) )* this_CLOSE_29= RULE_CLOSE )? )
            {
            // InternalContextMappingDSL.g:3878:2: ( ( (lv_comment_0_0= RULE_SL_COMMENT ) )? ( (lv_doc_1_0= RULE_STRING ) )? otherlv_2= 'Aggregate' ( (lv_name_3_0= RULE_ID ) ) (this_OPEN_4= RULE_OPEN ( ( ( ( ({...}? => ( ({...}? => ( (otherlv_6= 'responsibilities' (otherlv_7= '=' )? ( (lv_responsibilities_8_0= RULE_STRING ) ) ) (otherlv_9= ',' ( (lv_responsibilities_10_0= RULE_STRING ) ) )* ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_11= 'useCases' (otherlv_12= '=' )? ( (otherlv_13= RULE_ID ) ) ) (otherlv_14= ',' ( (otherlv_15= RULE_ID ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_16= 'owner' (otherlv_17= '=' )? ( (otherlv_18= RULE_ID ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'knowledgeLevel' (otherlv_20= '=' )? ( (lv_knowledgeLevel_21_0= ruleKnowledgeLevel ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_22= 'likelihoodForChange' (otherlv_23= '=' )? ( (lv_likelihoodForChange_24_0= ruleLikelihoodForChange ) ) ) ) ) ) )* ) ) ) ( ( (lv_services_25_0= ruleService ) ) | ( (lv_resources_26_0= ruleResource ) ) | ( (lv_consumers_27_0= ruleConsumer ) ) | ( (lv_domainObjects_28_0= ruleSimpleDomainObject ) ) )* this_CLOSE_29= RULE_CLOSE )? )
            // InternalContextMappingDSL.g:3879:3: ( (lv_comment_0_0= RULE_SL_COMMENT ) )? ( (lv_doc_1_0= RULE_STRING ) )? otherlv_2= 'Aggregate' ( (lv_name_3_0= RULE_ID ) ) (this_OPEN_4= RULE_OPEN ( ( ( ( ({...}? => ( ({...}? => ( (otherlv_6= 'responsibilities' (otherlv_7= '=' )? ( (lv_responsibilities_8_0= RULE_STRING ) ) ) (otherlv_9= ',' ( (lv_responsibilities_10_0= RULE_STRING ) ) )* ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_11= 'useCases' (otherlv_12= '=' )? ( (otherlv_13= RULE_ID ) ) ) (otherlv_14= ',' ( (otherlv_15= RULE_ID ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_16= 'owner' (otherlv_17= '=' )? ( (otherlv_18= RULE_ID ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'knowledgeLevel' (otherlv_20= '=' )? ( (lv_knowledgeLevel_21_0= ruleKnowledgeLevel ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_22= 'likelihoodForChange' (otherlv_23= '=' )? ( (lv_likelihoodForChange_24_0= ruleLikelihoodForChange ) ) ) ) ) ) )* ) ) ) ( ( (lv_services_25_0= ruleService ) ) | ( (lv_resources_26_0= ruleResource ) ) | ( (lv_consumers_27_0= ruleConsumer ) ) | ( (lv_domainObjects_28_0= ruleSimpleDomainObject ) ) )* this_CLOSE_29= RULE_CLOSE )?
            {
            // InternalContextMappingDSL.g:3879:3: ( (lv_comment_0_0= RULE_SL_COMMENT ) )?
            int alt115=2;
            int LA115_0 = input.LA(1);

            if ( (LA115_0==RULE_SL_COMMENT) ) {
                alt115=1;
            }
            switch (alt115) {
                case 1 :
                    // InternalContextMappingDSL.g:3880:4: (lv_comment_0_0= RULE_SL_COMMENT )
                    {
                    // InternalContextMappingDSL.g:3880:4: (lv_comment_0_0= RULE_SL_COMMENT )
                    // InternalContextMappingDSL.g:3881:5: lv_comment_0_0= RULE_SL_COMMENT
                    {
                    lv_comment_0_0=(Token)match(input,RULE_SL_COMMENT,FOLLOW_67); 

                    					newLeafNode(lv_comment_0_0, grammarAccess.getAggregateAccess().getCommentSL_COMMENTTerminalRuleCall_0_0());
                    				

                    					if (current==null) {
                    						current = createModelElement(grammarAccess.getAggregateRule());
                    					}
                    					setWithLastConsumed(
                    						current,
                    						"comment",
                    						lv_comment_0_0,
                    						"org.eclipse.xtext.common.Terminals.SL_COMMENT");
                    				

                    }


                    }
                    break;

            }

            // InternalContextMappingDSL.g:3897:3: ( (lv_doc_1_0= RULE_STRING ) )?
            int alt116=2;
            int LA116_0 = input.LA(1);

            if ( (LA116_0==RULE_STRING) ) {
                alt116=1;
            }
            switch (alt116) {
                case 1 :
                    // InternalContextMappingDSL.g:3898:4: (lv_doc_1_0= RULE_STRING )
                    {
                    // InternalContextMappingDSL.g:3898:4: (lv_doc_1_0= RULE_STRING )
                    // InternalContextMappingDSL.g:3899:5: lv_doc_1_0= RULE_STRING
                    {
                    lv_doc_1_0=(Token)match(input,RULE_STRING,FOLLOW_68); 

                    					newLeafNode(lv_doc_1_0, grammarAccess.getAggregateAccess().getDocSTRINGTerminalRuleCall_1_0());
                    				

                    					if (current==null) {
                    						current = createModelElement(grammarAccess.getAggregateRule());
                    					}
                    					setWithLastConsumed(
                    						current,
                    						"doc",
                    						lv_doc_1_0,
                    						"org.eclipse.xtext.common.Terminals.STRING");
                    				

                    }


                    }
                    break;

            }

            otherlv_2=(Token)match(input,55,FOLLOW_10); 

            			newLeafNode(otherlv_2, grammarAccess.getAggregateAccess().getAggregateKeyword_2());
            		
            // InternalContextMappingDSL.g:3919:3: ( (lv_name_3_0= RULE_ID ) )
            // InternalContextMappingDSL.g:3920:4: (lv_name_3_0= RULE_ID )
            {
            // InternalContextMappingDSL.g:3920:4: (lv_name_3_0= RULE_ID )
            // InternalContextMappingDSL.g:3921:5: lv_name_3_0= RULE_ID
            {
            lv_name_3_0=(Token)match(input,RULE_ID,FOLLOW_23); 

            					newLeafNode(lv_name_3_0, grammarAccess.getAggregateAccess().getNameIDTerminalRuleCall_3_0());
            				

            					if (current==null) {
            						current = createModelElement(grammarAccess.getAggregateRule());
            					}
            					setWithLastConsumed(
            						current,
            						"name",
            						lv_name_3_0,
            						"org.eclipse.xtext.common.Terminals.ID");
            				

            }


            }

            // InternalContextMappingDSL.g:3937:3: (this_OPEN_4= RULE_OPEN ( ( ( ( ({...}? => ( ({...}? => ( (otherlv_6= 'responsibilities' (otherlv_7= '=' )? ( (lv_responsibilities_8_0= RULE_STRING ) ) ) (otherlv_9= ',' ( (lv_responsibilities_10_0= RULE_STRING ) ) )* ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_11= 'useCases' (otherlv_12= '=' )? ( (otherlv_13= RULE_ID ) ) ) (otherlv_14= ',' ( (otherlv_15= RULE_ID ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_16= 'owner' (otherlv_17= '=' )? ( (otherlv_18= RULE_ID ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'knowledgeLevel' (otherlv_20= '=' )? ( (lv_knowledgeLevel_21_0= ruleKnowledgeLevel ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_22= 'likelihoodForChange' (otherlv_23= '=' )? ( (lv_likelihoodForChange_24_0= ruleLikelihoodForChange ) ) ) ) ) ) )* ) ) ) ( ( (lv_services_25_0= ruleService ) ) | ( (lv_resources_26_0= ruleResource ) ) | ( (lv_consumers_27_0= ruleConsumer ) ) | ( (lv_domainObjects_28_0= ruleSimpleDomainObject ) ) )* this_CLOSE_29= RULE_CLOSE )?
            int alt126=2;
            int LA126_0 = input.LA(1);

            if ( (LA126_0==RULE_OPEN) ) {
                alt126=1;
            }
            switch (alt126) {
                case 1 :
                    // InternalContextMappingDSL.g:3938:4: this_OPEN_4= RULE_OPEN ( ( ( ( ({...}? => ( ({...}? => ( (otherlv_6= 'responsibilities' (otherlv_7= '=' )? ( (lv_responsibilities_8_0= RULE_STRING ) ) ) (otherlv_9= ',' ( (lv_responsibilities_10_0= RULE_STRING ) ) )* ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_11= 'useCases' (otherlv_12= '=' )? ( (otherlv_13= RULE_ID ) ) ) (otherlv_14= ',' ( (otherlv_15= RULE_ID ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_16= 'owner' (otherlv_17= '=' )? ( (otherlv_18= RULE_ID ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'knowledgeLevel' (otherlv_20= '=' )? ( (lv_knowledgeLevel_21_0= ruleKnowledgeLevel ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_22= 'likelihoodForChange' (otherlv_23= '=' )? ( (lv_likelihoodForChange_24_0= ruleLikelihoodForChange ) ) ) ) ) ) )* ) ) ) ( ( (lv_services_25_0= ruleService ) ) | ( (lv_resources_26_0= ruleResource ) ) | ( (lv_consumers_27_0= ruleConsumer ) ) | ( (lv_domainObjects_28_0= ruleSimpleDomainObject ) ) )* this_CLOSE_29= RULE_CLOSE
                    {
                    this_OPEN_4=(Token)match(input,RULE_OPEN,FOLLOW_69); 

                    				newLeafNode(this_OPEN_4, grammarAccess.getAggregateAccess().getOPENTerminalRuleCall_4_0());
                    			
                    // InternalContextMappingDSL.g:3942:4: ( ( ( ( ({...}? => ( ({...}? => ( (otherlv_6= 'responsibilities' (otherlv_7= '=' )? ( (lv_responsibilities_8_0= RULE_STRING ) ) ) (otherlv_9= ',' ( (lv_responsibilities_10_0= RULE_STRING ) ) )* ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_11= 'useCases' (otherlv_12= '=' )? ( (otherlv_13= RULE_ID ) ) ) (otherlv_14= ',' ( (otherlv_15= RULE_ID ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_16= 'owner' (otherlv_17= '=' )? ( (otherlv_18= RULE_ID ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'knowledgeLevel' (otherlv_20= '=' )? ( (lv_knowledgeLevel_21_0= ruleKnowledgeLevel ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_22= 'likelihoodForChange' (otherlv_23= '=' )? ( (lv_likelihoodForChange_24_0= ruleLikelihoodForChange ) ) ) ) ) ) )* ) ) )
                    // InternalContextMappingDSL.g:3943:5: ( ( ( ({...}? => ( ({...}? => ( (otherlv_6= 'responsibilities' (otherlv_7= '=' )? ( (lv_responsibilities_8_0= RULE_STRING ) ) ) (otherlv_9= ',' ( (lv_responsibilities_10_0= RULE_STRING ) ) )* ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_11= 'useCases' (otherlv_12= '=' )? ( (otherlv_13= RULE_ID ) ) ) (otherlv_14= ',' ( (otherlv_15= RULE_ID ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_16= 'owner' (otherlv_17= '=' )? ( (otherlv_18= RULE_ID ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'knowledgeLevel' (otherlv_20= '=' )? ( (lv_knowledgeLevel_21_0= ruleKnowledgeLevel ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_22= 'likelihoodForChange' (otherlv_23= '=' )? ( (lv_likelihoodForChange_24_0= ruleLikelihoodForChange ) ) ) ) ) ) )* ) )
                    {
                    // InternalContextMappingDSL.g:3943:5: ( ( ( ({...}? => ( ({...}? => ( (otherlv_6= 'responsibilities' (otherlv_7= '=' )? ( (lv_responsibilities_8_0= RULE_STRING ) ) ) (otherlv_9= ',' ( (lv_responsibilities_10_0= RULE_STRING ) ) )* ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_11= 'useCases' (otherlv_12= '=' )? ( (otherlv_13= RULE_ID ) ) ) (otherlv_14= ',' ( (otherlv_15= RULE_ID ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_16= 'owner' (otherlv_17= '=' )? ( (otherlv_18= RULE_ID ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'knowledgeLevel' (otherlv_20= '=' )? ( (lv_knowledgeLevel_21_0= ruleKnowledgeLevel ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_22= 'likelihoodForChange' (otherlv_23= '=' )? ( (lv_likelihoodForChange_24_0= ruleLikelihoodForChange ) ) ) ) ) ) )* ) )
                    // InternalContextMappingDSL.g:3944:6: ( ( ({...}? => ( ({...}? => ( (otherlv_6= 'responsibilities' (otherlv_7= '=' )? ( (lv_responsibilities_8_0= RULE_STRING ) ) ) (otherlv_9= ',' ( (lv_responsibilities_10_0= RULE_STRING ) ) )* ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_11= 'useCases' (otherlv_12= '=' )? ( (otherlv_13= RULE_ID ) ) ) (otherlv_14= ',' ( (otherlv_15= RULE_ID ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_16= 'owner' (otherlv_17= '=' )? ( (otherlv_18= RULE_ID ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'knowledgeLevel' (otherlv_20= '=' )? ( (lv_knowledgeLevel_21_0= ruleKnowledgeLevel ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_22= 'likelihoodForChange' (otherlv_23= '=' )? ( (lv_likelihoodForChange_24_0= ruleLikelihoodForChange ) ) ) ) ) ) )* )
                    {
                     
                    					  getUnorderedGroupHelper().enter(grammarAccess.getAggregateAccess().getUnorderedGroup_4_1());
                    					
                    // InternalContextMappingDSL.g:3947:6: ( ( ({...}? => ( ({...}? => ( (otherlv_6= 'responsibilities' (otherlv_7= '=' )? ( (lv_responsibilities_8_0= RULE_STRING ) ) ) (otherlv_9= ',' ( (lv_responsibilities_10_0= RULE_STRING ) ) )* ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_11= 'useCases' (otherlv_12= '=' )? ( (otherlv_13= RULE_ID ) ) ) (otherlv_14= ',' ( (otherlv_15= RULE_ID ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_16= 'owner' (otherlv_17= '=' )? ( (otherlv_18= RULE_ID ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'knowledgeLevel' (otherlv_20= '=' )? ( (lv_knowledgeLevel_21_0= ruleKnowledgeLevel ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_22= 'likelihoodForChange' (otherlv_23= '=' )? ( (lv_likelihoodForChange_24_0= ruleLikelihoodForChange ) ) ) ) ) ) )* )
                    // InternalContextMappingDSL.g:3948:7: ( ({...}? => ( ({...}? => ( (otherlv_6= 'responsibilities' (otherlv_7= '=' )? ( (lv_responsibilities_8_0= RULE_STRING ) ) ) (otherlv_9= ',' ( (lv_responsibilities_10_0= RULE_STRING ) ) )* ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_11= 'useCases' (otherlv_12= '=' )? ( (otherlv_13= RULE_ID ) ) ) (otherlv_14= ',' ( (otherlv_15= RULE_ID ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_16= 'owner' (otherlv_17= '=' )? ( (otherlv_18= RULE_ID ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'knowledgeLevel' (otherlv_20= '=' )? ( (lv_knowledgeLevel_21_0= ruleKnowledgeLevel ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_22= 'likelihoodForChange' (otherlv_23= '=' )? ( (lv_likelihoodForChange_24_0= ruleLikelihoodForChange ) ) ) ) ) ) )*
                    {
                    // InternalContextMappingDSL.g:3948:7: ( ({...}? => ( ({...}? => ( (otherlv_6= 'responsibilities' (otherlv_7= '=' )? ( (lv_responsibilities_8_0= RULE_STRING ) ) ) (otherlv_9= ',' ( (lv_responsibilities_10_0= RULE_STRING ) ) )* ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_11= 'useCases' (otherlv_12= '=' )? ( (otherlv_13= RULE_ID ) ) ) (otherlv_14= ',' ( (otherlv_15= RULE_ID ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_16= 'owner' (otherlv_17= '=' )? ( (otherlv_18= RULE_ID ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'knowledgeLevel' (otherlv_20= '=' )? ( (lv_knowledgeLevel_21_0= ruleKnowledgeLevel ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_22= 'likelihoodForChange' (otherlv_23= '=' )? ( (lv_likelihoodForChange_24_0= ruleLikelihoodForChange ) ) ) ) ) ) )*
                    loop124:
                    do {
                        int alt124=6;
                        int LA124_0 = input.LA(1);

                        if ( LA124_0 == 30 && getUnorderedGroupHelper().canSelect(grammarAccess.getAggregateAccess().getUnorderedGroup_4_1(), 0) ) {
                            alt124=1;
                        }
                        else if ( LA124_0 == 56 && getUnorderedGroupHelper().canSelect(grammarAccess.getAggregateAccess().getUnorderedGroup_4_1(), 1) ) {
                            alt124=2;
                        }
                        else if ( LA124_0 == 57 && getUnorderedGroupHelper().canSelect(grammarAccess.getAggregateAccess().getUnorderedGroup_4_1(), 2) ) {
                            alt124=3;
                        }
                        else if ( LA124_0 == 32 && getUnorderedGroupHelper().canSelect(grammarAccess.getAggregateAccess().getUnorderedGroup_4_1(), 3) ) {
                            alt124=4;
                        }
                        else if ( LA124_0 == 58 && getUnorderedGroupHelper().canSelect(grammarAccess.getAggregateAccess().getUnorderedGroup_4_1(), 4) ) {
                            alt124=5;
                        }


                        switch (alt124) {
                    	case 1 :
                    	    // InternalContextMappingDSL.g:3949:5: ({...}? => ( ({...}? => ( (otherlv_6= 'responsibilities' (otherlv_7= '=' )? ( (lv_responsibilities_8_0= RULE_STRING ) ) ) (otherlv_9= ',' ( (lv_responsibilities_10_0= RULE_STRING ) ) )* ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:3949:5: ({...}? => ( ({...}? => ( (otherlv_6= 'responsibilities' (otherlv_7= '=' )? ( (lv_responsibilities_8_0= RULE_STRING ) ) ) (otherlv_9= ',' ( (lv_responsibilities_10_0= RULE_STRING ) ) )* ) ) ) )
                    	    // InternalContextMappingDSL.g:3950:6: {...}? => ( ({...}? => ( (otherlv_6= 'responsibilities' (otherlv_7= '=' )? ( (lv_responsibilities_8_0= RULE_STRING ) ) ) (otherlv_9= ',' ( (lv_responsibilities_10_0= RULE_STRING ) ) )* ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAggregateAccess().getUnorderedGroup_4_1(), 0) ) {
                    	        throw new FailedPredicateException(input, "ruleAggregate", "getUnorderedGroupHelper().canSelect(grammarAccess.getAggregateAccess().getUnorderedGroup_4_1(), 0)");
                    	    }
                    	    // InternalContextMappingDSL.g:3950:109: ( ({...}? => ( (otherlv_6= 'responsibilities' (otherlv_7= '=' )? ( (lv_responsibilities_8_0= RULE_STRING ) ) ) (otherlv_9= ',' ( (lv_responsibilities_10_0= RULE_STRING ) ) )* ) ) )
                    	    // InternalContextMappingDSL.g:3951:7: ({...}? => ( (otherlv_6= 'responsibilities' (otherlv_7= '=' )? ( (lv_responsibilities_8_0= RULE_STRING ) ) ) (otherlv_9= ',' ( (lv_responsibilities_10_0= RULE_STRING ) ) )* ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getAggregateAccess().getUnorderedGroup_4_1(), 0);
                    	    						
                    	    // InternalContextMappingDSL.g:3954:10: ({...}? => ( (otherlv_6= 'responsibilities' (otherlv_7= '=' )? ( (lv_responsibilities_8_0= RULE_STRING ) ) ) (otherlv_9= ',' ( (lv_responsibilities_10_0= RULE_STRING ) ) )* ) )
                    	    // InternalContextMappingDSL.g:3954:11: {...}? => ( (otherlv_6= 'responsibilities' (otherlv_7= '=' )? ( (lv_responsibilities_8_0= RULE_STRING ) ) ) (otherlv_9= ',' ( (lv_responsibilities_10_0= RULE_STRING ) ) )* )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleAggregate", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:3954:20: ( (otherlv_6= 'responsibilities' (otherlv_7= '=' )? ( (lv_responsibilities_8_0= RULE_STRING ) ) ) (otherlv_9= ',' ( (lv_responsibilities_10_0= RULE_STRING ) ) )* )
                    	    // InternalContextMappingDSL.g:3954:21: (otherlv_6= 'responsibilities' (otherlv_7= '=' )? ( (lv_responsibilities_8_0= RULE_STRING ) ) ) (otherlv_9= ',' ( (lv_responsibilities_10_0= RULE_STRING ) ) )*
                    	    {
                    	    // InternalContextMappingDSL.g:3954:21: (otherlv_6= 'responsibilities' (otherlv_7= '=' )? ( (lv_responsibilities_8_0= RULE_STRING ) ) )
                    	    // InternalContextMappingDSL.g:3955:11: otherlv_6= 'responsibilities' (otherlv_7= '=' )? ( (lv_responsibilities_8_0= RULE_STRING ) )
                    	    {
                    	    otherlv_6=(Token)match(input,30,FOLLOW_17); 

                    	    											newLeafNode(otherlv_6, grammarAccess.getAggregateAccess().getResponsibilitiesKeyword_4_1_0_0_0());
                    	    										
                    	    // InternalContextMappingDSL.g:3959:11: (otherlv_7= '=' )?
                    	    int alt117=2;
                    	    int LA117_0 = input.LA(1);

                    	    if ( (LA117_0==21) ) {
                    	        alt117=1;
                    	    }
                    	    switch (alt117) {
                    	        case 1 :
                    	            // InternalContextMappingDSL.g:3960:12: otherlv_7= '='
                    	            {
                    	            otherlv_7=(Token)match(input,21,FOLLOW_4); 

                    	            												newLeafNode(otherlv_7, grammarAccess.getAggregateAccess().getEqualsSignKeyword_4_1_0_0_1());
                    	            											

                    	            }
                    	            break;

                    	    }

                    	    // InternalContextMappingDSL.g:3965:11: ( (lv_responsibilities_8_0= RULE_STRING ) )
                    	    // InternalContextMappingDSL.g:3966:12: (lv_responsibilities_8_0= RULE_STRING )
                    	    {
                    	    // InternalContextMappingDSL.g:3966:12: (lv_responsibilities_8_0= RULE_STRING )
                    	    // InternalContextMappingDSL.g:3967:13: lv_responsibilities_8_0= RULE_STRING
                    	    {
                    	    lv_responsibilities_8_0=(Token)match(input,RULE_STRING,FOLLOW_70); 

                    	    													newLeafNode(lv_responsibilities_8_0, grammarAccess.getAggregateAccess().getResponsibilitiesSTRINGTerminalRuleCall_4_1_0_0_2_0());
                    	    												

                    	    													if (current==null) {
                    	    														current = createModelElement(grammarAccess.getAggregateRule());
                    	    													}
                    	    													addWithLastConsumed(
                    	    														current,
                    	    														"responsibilities",
                    	    														lv_responsibilities_8_0,
                    	    														"org.eclipse.xtext.common.Terminals.STRING");
                    	    												

                    	    }


                    	    }


                    	    }

                    	    // InternalContextMappingDSL.g:3984:10: (otherlv_9= ',' ( (lv_responsibilities_10_0= RULE_STRING ) ) )*
                    	    loop118:
                    	    do {
                    	        int alt118=2;
                    	        int LA118_0 = input.LA(1);

                    	        if ( (LA118_0==24) ) {
                    	            alt118=1;
                    	        }


                    	        switch (alt118) {
                    	    	case 1 :
                    	    	    // InternalContextMappingDSL.g:3985:11: otherlv_9= ',' ( (lv_responsibilities_10_0= RULE_STRING ) )
                    	    	    {
                    	    	    otherlv_9=(Token)match(input,24,FOLLOW_4); 

                    	    	    											newLeafNode(otherlv_9, grammarAccess.getAggregateAccess().getCommaKeyword_4_1_0_1_0());
                    	    	    										
                    	    	    // InternalContextMappingDSL.g:3989:11: ( (lv_responsibilities_10_0= RULE_STRING ) )
                    	    	    // InternalContextMappingDSL.g:3990:12: (lv_responsibilities_10_0= RULE_STRING )
                    	    	    {
                    	    	    // InternalContextMappingDSL.g:3990:12: (lv_responsibilities_10_0= RULE_STRING )
                    	    	    // InternalContextMappingDSL.g:3991:13: lv_responsibilities_10_0= RULE_STRING
                    	    	    {
                    	    	    lv_responsibilities_10_0=(Token)match(input,RULE_STRING,FOLLOW_70); 

                    	    	    													newLeafNode(lv_responsibilities_10_0, grammarAccess.getAggregateAccess().getResponsibilitiesSTRINGTerminalRuleCall_4_1_0_1_1_0());
                    	    	    												

                    	    	    													if (current==null) {
                    	    	    														current = createModelElement(grammarAccess.getAggregateRule());
                    	    	    													}
                    	    	    													addWithLastConsumed(
                    	    	    														current,
                    	    	    														"responsibilities",
                    	    	    														lv_responsibilities_10_0,
                    	    	    														"org.eclipse.xtext.common.Terminals.STRING");
                    	    	    												

                    	    	    }


                    	    	    }


                    	    	    }
                    	    	    break;

                    	    	default :
                    	    	    break loop118;
                    	        }
                    	    } while (true);


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getAggregateAccess().getUnorderedGroup_4_1());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 2 :
                    	    // InternalContextMappingDSL.g:4014:5: ({...}? => ( ({...}? => ( (otherlv_11= 'useCases' (otherlv_12= '=' )? ( (otherlv_13= RULE_ID ) ) ) (otherlv_14= ',' ( (otherlv_15= RULE_ID ) ) )* ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:4014:5: ({...}? => ( ({...}? => ( (otherlv_11= 'useCases' (otherlv_12= '=' )? ( (otherlv_13= RULE_ID ) ) ) (otherlv_14= ',' ( (otherlv_15= RULE_ID ) ) )* ) ) ) )
                    	    // InternalContextMappingDSL.g:4015:6: {...}? => ( ({...}? => ( (otherlv_11= 'useCases' (otherlv_12= '=' )? ( (otherlv_13= RULE_ID ) ) ) (otherlv_14= ',' ( (otherlv_15= RULE_ID ) ) )* ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAggregateAccess().getUnorderedGroup_4_1(), 1) ) {
                    	        throw new FailedPredicateException(input, "ruleAggregate", "getUnorderedGroupHelper().canSelect(grammarAccess.getAggregateAccess().getUnorderedGroup_4_1(), 1)");
                    	    }
                    	    // InternalContextMappingDSL.g:4015:109: ( ({...}? => ( (otherlv_11= 'useCases' (otherlv_12= '=' )? ( (otherlv_13= RULE_ID ) ) ) (otherlv_14= ',' ( (otherlv_15= RULE_ID ) ) )* ) ) )
                    	    // InternalContextMappingDSL.g:4016:7: ({...}? => ( (otherlv_11= 'useCases' (otherlv_12= '=' )? ( (otherlv_13= RULE_ID ) ) ) (otherlv_14= ',' ( (otherlv_15= RULE_ID ) ) )* ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getAggregateAccess().getUnorderedGroup_4_1(), 1);
                    	    						
                    	    // InternalContextMappingDSL.g:4019:10: ({...}? => ( (otherlv_11= 'useCases' (otherlv_12= '=' )? ( (otherlv_13= RULE_ID ) ) ) (otherlv_14= ',' ( (otherlv_15= RULE_ID ) ) )* ) )
                    	    // InternalContextMappingDSL.g:4019:11: {...}? => ( (otherlv_11= 'useCases' (otherlv_12= '=' )? ( (otherlv_13= RULE_ID ) ) ) (otherlv_14= ',' ( (otherlv_15= RULE_ID ) ) )* )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleAggregate", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:4019:20: ( (otherlv_11= 'useCases' (otherlv_12= '=' )? ( (otherlv_13= RULE_ID ) ) ) (otherlv_14= ',' ( (otherlv_15= RULE_ID ) ) )* )
                    	    // InternalContextMappingDSL.g:4019:21: (otherlv_11= 'useCases' (otherlv_12= '=' )? ( (otherlv_13= RULE_ID ) ) ) (otherlv_14= ',' ( (otherlv_15= RULE_ID ) ) )*
                    	    {
                    	    // InternalContextMappingDSL.g:4019:21: (otherlv_11= 'useCases' (otherlv_12= '=' )? ( (otherlv_13= RULE_ID ) ) )
                    	    // InternalContextMappingDSL.g:4020:11: otherlv_11= 'useCases' (otherlv_12= '=' )? ( (otherlv_13= RULE_ID ) )
                    	    {
                    	    otherlv_11=(Token)match(input,56,FOLLOW_56); 

                    	    											newLeafNode(otherlv_11, grammarAccess.getAggregateAccess().getUseCasesKeyword_4_1_1_0_0());
                    	    										
                    	    // InternalContextMappingDSL.g:4024:11: (otherlv_12= '=' )?
                    	    int alt119=2;
                    	    int LA119_0 = input.LA(1);

                    	    if ( (LA119_0==21) ) {
                    	        alt119=1;
                    	    }
                    	    switch (alt119) {
                    	        case 1 :
                    	            // InternalContextMappingDSL.g:4025:12: otherlv_12= '='
                    	            {
                    	            otherlv_12=(Token)match(input,21,FOLLOW_10); 

                    	            												newLeafNode(otherlv_12, grammarAccess.getAggregateAccess().getEqualsSignKeyword_4_1_1_0_1());
                    	            											

                    	            }
                    	            break;

                    	    }

                    	    // InternalContextMappingDSL.g:4030:11: ( (otherlv_13= RULE_ID ) )
                    	    // InternalContextMappingDSL.g:4031:12: (otherlv_13= RULE_ID )
                    	    {
                    	    // InternalContextMappingDSL.g:4031:12: (otherlv_13= RULE_ID )
                    	    // InternalContextMappingDSL.g:4032:13: otherlv_13= RULE_ID
                    	    {

                    	    													if (current==null) {
                    	    														current = createModelElement(grammarAccess.getAggregateRule());
                    	    													}
                    	    												
                    	    otherlv_13=(Token)match(input,RULE_ID,FOLLOW_70); 

                    	    													newLeafNode(otherlv_13, grammarAccess.getAggregateAccess().getUseCasesUseCaseCrossReference_4_1_1_0_2_0());
                    	    												

                    	    }


                    	    }


                    	    }

                    	    // InternalContextMappingDSL.g:4044:10: (otherlv_14= ',' ( (otherlv_15= RULE_ID ) ) )*
                    	    loop120:
                    	    do {
                    	        int alt120=2;
                    	        int LA120_0 = input.LA(1);

                    	        if ( (LA120_0==24) ) {
                    	            alt120=1;
                    	        }


                    	        switch (alt120) {
                    	    	case 1 :
                    	    	    // InternalContextMappingDSL.g:4045:11: otherlv_14= ',' ( (otherlv_15= RULE_ID ) )
                    	    	    {
                    	    	    otherlv_14=(Token)match(input,24,FOLLOW_10); 

                    	    	    											newLeafNode(otherlv_14, grammarAccess.getAggregateAccess().getCommaKeyword_4_1_1_1_0());
                    	    	    										
                    	    	    // InternalContextMappingDSL.g:4049:11: ( (otherlv_15= RULE_ID ) )
                    	    	    // InternalContextMappingDSL.g:4050:12: (otherlv_15= RULE_ID )
                    	    	    {
                    	    	    // InternalContextMappingDSL.g:4050:12: (otherlv_15= RULE_ID )
                    	    	    // InternalContextMappingDSL.g:4051:13: otherlv_15= RULE_ID
                    	    	    {

                    	    	    													if (current==null) {
                    	    	    														current = createModelElement(grammarAccess.getAggregateRule());
                    	    	    													}
                    	    	    												
                    	    	    otherlv_15=(Token)match(input,RULE_ID,FOLLOW_70); 

                    	    	    													newLeafNode(otherlv_15, grammarAccess.getAggregateAccess().getUseCasesUseCaseCrossReference_4_1_1_1_1_0());
                    	    	    												

                    	    	    }


                    	    	    }


                    	    	    }
                    	    	    break;

                    	    	default :
                    	    	    break loop120;
                    	        }
                    	    } while (true);


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getAggregateAccess().getUnorderedGroup_4_1());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 3 :
                    	    // InternalContextMappingDSL.g:4069:5: ({...}? => ( ({...}? => (otherlv_16= 'owner' (otherlv_17= '=' )? ( (otherlv_18= RULE_ID ) ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:4069:5: ({...}? => ( ({...}? => (otherlv_16= 'owner' (otherlv_17= '=' )? ( (otherlv_18= RULE_ID ) ) ) ) ) )
                    	    // InternalContextMappingDSL.g:4070:6: {...}? => ( ({...}? => (otherlv_16= 'owner' (otherlv_17= '=' )? ( (otherlv_18= RULE_ID ) ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAggregateAccess().getUnorderedGroup_4_1(), 2) ) {
                    	        throw new FailedPredicateException(input, "ruleAggregate", "getUnorderedGroupHelper().canSelect(grammarAccess.getAggregateAccess().getUnorderedGroup_4_1(), 2)");
                    	    }
                    	    // InternalContextMappingDSL.g:4070:109: ( ({...}? => (otherlv_16= 'owner' (otherlv_17= '=' )? ( (otherlv_18= RULE_ID ) ) ) ) )
                    	    // InternalContextMappingDSL.g:4071:7: ({...}? => (otherlv_16= 'owner' (otherlv_17= '=' )? ( (otherlv_18= RULE_ID ) ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getAggregateAccess().getUnorderedGroup_4_1(), 2);
                    	    						
                    	    // InternalContextMappingDSL.g:4074:10: ({...}? => (otherlv_16= 'owner' (otherlv_17= '=' )? ( (otherlv_18= RULE_ID ) ) ) )
                    	    // InternalContextMappingDSL.g:4074:11: {...}? => (otherlv_16= 'owner' (otherlv_17= '=' )? ( (otherlv_18= RULE_ID ) ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleAggregate", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:4074:20: (otherlv_16= 'owner' (otherlv_17= '=' )? ( (otherlv_18= RULE_ID ) ) )
                    	    // InternalContextMappingDSL.g:4074:21: otherlv_16= 'owner' (otherlv_17= '=' )? ( (otherlv_18= RULE_ID ) )
                    	    {
                    	    otherlv_16=(Token)match(input,57,FOLLOW_56); 

                    	    										newLeafNode(otherlv_16, grammarAccess.getAggregateAccess().getOwnerKeyword_4_1_2_0());
                    	    									
                    	    // InternalContextMappingDSL.g:4078:10: (otherlv_17= '=' )?
                    	    int alt121=2;
                    	    int LA121_0 = input.LA(1);

                    	    if ( (LA121_0==21) ) {
                    	        alt121=1;
                    	    }
                    	    switch (alt121) {
                    	        case 1 :
                    	            // InternalContextMappingDSL.g:4079:11: otherlv_17= '='
                    	            {
                    	            otherlv_17=(Token)match(input,21,FOLLOW_10); 

                    	            											newLeafNode(otherlv_17, grammarAccess.getAggregateAccess().getEqualsSignKeyword_4_1_2_1());
                    	            										

                    	            }
                    	            break;

                    	    }

                    	    // InternalContextMappingDSL.g:4084:10: ( (otherlv_18= RULE_ID ) )
                    	    // InternalContextMappingDSL.g:4085:11: (otherlv_18= RULE_ID )
                    	    {
                    	    // InternalContextMappingDSL.g:4085:11: (otherlv_18= RULE_ID )
                    	    // InternalContextMappingDSL.g:4086:12: otherlv_18= RULE_ID
                    	    {

                    	    												if (current==null) {
                    	    													current = createModelElement(grammarAccess.getAggregateRule());
                    	    												}
                    	    											
                    	    otherlv_18=(Token)match(input,RULE_ID,FOLLOW_69); 

                    	    												newLeafNode(otherlv_18, grammarAccess.getAggregateAccess().getOwnerBoundedContextCrossReference_4_1_2_2_0());
                    	    											

                    	    }


                    	    }


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getAggregateAccess().getUnorderedGroup_4_1());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 4 :
                    	    // InternalContextMappingDSL.g:4103:5: ({...}? => ( ({...}? => (otherlv_19= 'knowledgeLevel' (otherlv_20= '=' )? ( (lv_knowledgeLevel_21_0= ruleKnowledgeLevel ) ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:4103:5: ({...}? => ( ({...}? => (otherlv_19= 'knowledgeLevel' (otherlv_20= '=' )? ( (lv_knowledgeLevel_21_0= ruleKnowledgeLevel ) ) ) ) ) )
                    	    // InternalContextMappingDSL.g:4104:6: {...}? => ( ({...}? => (otherlv_19= 'knowledgeLevel' (otherlv_20= '=' )? ( (lv_knowledgeLevel_21_0= ruleKnowledgeLevel ) ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAggregateAccess().getUnorderedGroup_4_1(), 3) ) {
                    	        throw new FailedPredicateException(input, "ruleAggregate", "getUnorderedGroupHelper().canSelect(grammarAccess.getAggregateAccess().getUnorderedGroup_4_1(), 3)");
                    	    }
                    	    // InternalContextMappingDSL.g:4104:109: ( ({...}? => (otherlv_19= 'knowledgeLevel' (otherlv_20= '=' )? ( (lv_knowledgeLevel_21_0= ruleKnowledgeLevel ) ) ) ) )
                    	    // InternalContextMappingDSL.g:4105:7: ({...}? => (otherlv_19= 'knowledgeLevel' (otherlv_20= '=' )? ( (lv_knowledgeLevel_21_0= ruleKnowledgeLevel ) ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getAggregateAccess().getUnorderedGroup_4_1(), 3);
                    	    						
                    	    // InternalContextMappingDSL.g:4108:10: ({...}? => (otherlv_19= 'knowledgeLevel' (otherlv_20= '=' )? ( (lv_knowledgeLevel_21_0= ruleKnowledgeLevel ) ) ) )
                    	    // InternalContextMappingDSL.g:4108:11: {...}? => (otherlv_19= 'knowledgeLevel' (otherlv_20= '=' )? ( (lv_knowledgeLevel_21_0= ruleKnowledgeLevel ) ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleAggregate", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:4108:20: (otherlv_19= 'knowledgeLevel' (otherlv_20= '=' )? ( (lv_knowledgeLevel_21_0= ruleKnowledgeLevel ) ) )
                    	    // InternalContextMappingDSL.g:4108:21: otherlv_19= 'knowledgeLevel' (otherlv_20= '=' )? ( (lv_knowledgeLevel_21_0= ruleKnowledgeLevel ) )
                    	    {
                    	    otherlv_19=(Token)match(input,32,FOLLOW_20); 

                    	    										newLeafNode(otherlv_19, grammarAccess.getAggregateAccess().getKnowledgeLevelKeyword_4_1_3_0());
                    	    									
                    	    // InternalContextMappingDSL.g:4112:10: (otherlv_20= '=' )?
                    	    int alt122=2;
                    	    int LA122_0 = input.LA(1);

                    	    if ( (LA122_0==21) ) {
                    	        alt122=1;
                    	    }
                    	    switch (alt122) {
                    	        case 1 :
                    	            // InternalContextMappingDSL.g:4113:11: otherlv_20= '='
                    	            {
                    	            otherlv_20=(Token)match(input,21,FOLLOW_20); 

                    	            											newLeafNode(otherlv_20, grammarAccess.getAggregateAccess().getEqualsSignKeyword_4_1_3_1());
                    	            										

                    	            }
                    	            break;

                    	    }

                    	    // InternalContextMappingDSL.g:4118:10: ( (lv_knowledgeLevel_21_0= ruleKnowledgeLevel ) )
                    	    // InternalContextMappingDSL.g:4119:11: (lv_knowledgeLevel_21_0= ruleKnowledgeLevel )
                    	    {
                    	    // InternalContextMappingDSL.g:4119:11: (lv_knowledgeLevel_21_0= ruleKnowledgeLevel )
                    	    // InternalContextMappingDSL.g:4120:12: lv_knowledgeLevel_21_0= ruleKnowledgeLevel
                    	    {

                    	    												newCompositeNode(grammarAccess.getAggregateAccess().getKnowledgeLevelKnowledgeLevelEnumRuleCall_4_1_3_2_0());
                    	    											
                    	    pushFollow(FOLLOW_69);
                    	    lv_knowledgeLevel_21_0=ruleKnowledgeLevel();

                    	    state._fsp--;


                    	    												if (current==null) {
                    	    													current = createModelElementForParent(grammarAccess.getAggregateRule());
                    	    												}
                    	    												set(
                    	    													current,
                    	    													"knowledgeLevel",
                    	    													lv_knowledgeLevel_21_0,
                    	    													"org.contextmapper.dsl.ContextMappingDSL.KnowledgeLevel");
                    	    												afterParserOrEnumRuleCall();
                    	    											

                    	    }


                    	    }


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getAggregateAccess().getUnorderedGroup_4_1());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 5 :
                    	    // InternalContextMappingDSL.g:4143:5: ({...}? => ( ({...}? => (otherlv_22= 'likelihoodForChange' (otherlv_23= '=' )? ( (lv_likelihoodForChange_24_0= ruleLikelihoodForChange ) ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:4143:5: ({...}? => ( ({...}? => (otherlv_22= 'likelihoodForChange' (otherlv_23= '=' )? ( (lv_likelihoodForChange_24_0= ruleLikelihoodForChange ) ) ) ) ) )
                    	    // InternalContextMappingDSL.g:4144:6: {...}? => ( ({...}? => (otherlv_22= 'likelihoodForChange' (otherlv_23= '=' )? ( (lv_likelihoodForChange_24_0= ruleLikelihoodForChange ) ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAggregateAccess().getUnorderedGroup_4_1(), 4) ) {
                    	        throw new FailedPredicateException(input, "ruleAggregate", "getUnorderedGroupHelper().canSelect(grammarAccess.getAggregateAccess().getUnorderedGroup_4_1(), 4)");
                    	    }
                    	    // InternalContextMappingDSL.g:4144:109: ( ({...}? => (otherlv_22= 'likelihoodForChange' (otherlv_23= '=' )? ( (lv_likelihoodForChange_24_0= ruleLikelihoodForChange ) ) ) ) )
                    	    // InternalContextMappingDSL.g:4145:7: ({...}? => (otherlv_22= 'likelihoodForChange' (otherlv_23= '=' )? ( (lv_likelihoodForChange_24_0= ruleLikelihoodForChange ) ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getAggregateAccess().getUnorderedGroup_4_1(), 4);
                    	    						
                    	    // InternalContextMappingDSL.g:4148:10: ({...}? => (otherlv_22= 'likelihoodForChange' (otherlv_23= '=' )? ( (lv_likelihoodForChange_24_0= ruleLikelihoodForChange ) ) ) )
                    	    // InternalContextMappingDSL.g:4148:11: {...}? => (otherlv_22= 'likelihoodForChange' (otherlv_23= '=' )? ( (lv_likelihoodForChange_24_0= ruleLikelihoodForChange ) ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleAggregate", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:4148:20: (otherlv_22= 'likelihoodForChange' (otherlv_23= '=' )? ( (lv_likelihoodForChange_24_0= ruleLikelihoodForChange ) ) )
                    	    // InternalContextMappingDSL.g:4148:21: otherlv_22= 'likelihoodForChange' (otherlv_23= '=' )? ( (lv_likelihoodForChange_24_0= ruleLikelihoodForChange ) )
                    	    {
                    	    otherlv_22=(Token)match(input,58,FOLLOW_71); 

                    	    										newLeafNode(otherlv_22, grammarAccess.getAggregateAccess().getLikelihoodForChangeKeyword_4_1_4_0());
                    	    									
                    	    // InternalContextMappingDSL.g:4152:10: (otherlv_23= '=' )?
                    	    int alt123=2;
                    	    int LA123_0 = input.LA(1);

                    	    if ( (LA123_0==21) ) {
                    	        alt123=1;
                    	    }
                    	    switch (alt123) {
                    	        case 1 :
                    	            // InternalContextMappingDSL.g:4153:11: otherlv_23= '='
                    	            {
                    	            otherlv_23=(Token)match(input,21,FOLLOW_71); 

                    	            											newLeafNode(otherlv_23, grammarAccess.getAggregateAccess().getEqualsSignKeyword_4_1_4_1());
                    	            										

                    	            }
                    	            break;

                    	    }

                    	    // InternalContextMappingDSL.g:4158:10: ( (lv_likelihoodForChange_24_0= ruleLikelihoodForChange ) )
                    	    // InternalContextMappingDSL.g:4159:11: (lv_likelihoodForChange_24_0= ruleLikelihoodForChange )
                    	    {
                    	    // InternalContextMappingDSL.g:4159:11: (lv_likelihoodForChange_24_0= ruleLikelihoodForChange )
                    	    // InternalContextMappingDSL.g:4160:12: lv_likelihoodForChange_24_0= ruleLikelihoodForChange
                    	    {

                    	    												newCompositeNode(grammarAccess.getAggregateAccess().getLikelihoodForChangeLikelihoodForChangeEnumRuleCall_4_1_4_2_0());
                    	    											
                    	    pushFollow(FOLLOW_69);
                    	    lv_likelihoodForChange_24_0=ruleLikelihoodForChange();

                    	    state._fsp--;


                    	    												if (current==null) {
                    	    													current = createModelElementForParent(grammarAccess.getAggregateRule());
                    	    												}
                    	    												set(
                    	    													current,
                    	    													"likelihoodForChange",
                    	    													lv_likelihoodForChange_24_0,
                    	    													"org.contextmapper.dsl.ContextMappingDSL.LikelihoodForChange");
                    	    												afterParserOrEnumRuleCall();
                    	    											

                    	    }


                    	    }


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getAggregateAccess().getUnorderedGroup_4_1());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop124;
                        }
                    } while (true);


                    }


                    }

                     
                    					  getUnorderedGroupHelper().leave(grammarAccess.getAggregateAccess().getUnorderedGroup_4_1());
                    					

                    }

                    // InternalContextMappingDSL.g:4190:4: ( ( (lv_services_25_0= ruleService ) ) | ( (lv_resources_26_0= ruleResource ) ) | ( (lv_consumers_27_0= ruleConsumer ) ) | ( (lv_domainObjects_28_0= ruleSimpleDomainObject ) ) )*
                    loop125:
                    do {
                        int alt125=5;
                        switch ( input.LA(1) ) {
                        case RULE_STRING:
                            {
                            switch ( input.LA(2) ) {
                            case 74:
                                {
                                alt125=2;
                                }
                                break;
                            case 105:
                            case 106:
                            case 121:
                            case 124:
                            case 125:
                            case 126:
                            case 129:
                            case 130:
                            case 168:
                                {
                                alt125=4;
                                }
                                break;
                            case 77:
                                {
                                alt125=3;
                                }
                                break;
                            case 70:
                                {
                                alt125=1;
                                }
                                break;

                            }

                            }
                            break;
                        case 70:
                            {
                            alt125=1;
                            }
                            break;
                        case 74:
                            {
                            alt125=2;
                            }
                            break;
                        case 77:
                            {
                            alt125=3;
                            }
                            break;
                        case RULE_SL_COMMENT:
                        case 105:
                        case 106:
                        case 121:
                        case 124:
                        case 125:
                        case 126:
                        case 129:
                        case 130:
                        case 168:
                            {
                            alt125=4;
                            }
                            break;

                        }

                        switch (alt125) {
                    	case 1 :
                    	    // InternalContextMappingDSL.g:4191:5: ( (lv_services_25_0= ruleService ) )
                    	    {
                    	    // InternalContextMappingDSL.g:4191:5: ( (lv_services_25_0= ruleService ) )
                    	    // InternalContextMappingDSL.g:4192:6: (lv_services_25_0= ruleService )
                    	    {
                    	    // InternalContextMappingDSL.g:4192:6: (lv_services_25_0= ruleService )
                    	    // InternalContextMappingDSL.g:4193:7: lv_services_25_0= ruleService
                    	    {

                    	    							newCompositeNode(grammarAccess.getAggregateAccess().getServicesServiceParserRuleCall_4_2_0_0());
                    	    						
                    	    pushFollow(FOLLOW_72);
                    	    lv_services_25_0=ruleService();

                    	    state._fsp--;


                    	    							if (current==null) {
                    	    								current = createModelElementForParent(grammarAccess.getAggregateRule());
                    	    							}
                    	    							add(
                    	    								current,
                    	    								"services",
                    	    								lv_services_25_0,
                    	    								"org.contextmapper.tactic.dsl.TacticDDDLanguage.Service");
                    	    							afterParserOrEnumRuleCall();
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 2 :
                    	    // InternalContextMappingDSL.g:4211:5: ( (lv_resources_26_0= ruleResource ) )
                    	    {
                    	    // InternalContextMappingDSL.g:4211:5: ( (lv_resources_26_0= ruleResource ) )
                    	    // InternalContextMappingDSL.g:4212:6: (lv_resources_26_0= ruleResource )
                    	    {
                    	    // InternalContextMappingDSL.g:4212:6: (lv_resources_26_0= ruleResource )
                    	    // InternalContextMappingDSL.g:4213:7: lv_resources_26_0= ruleResource
                    	    {

                    	    							newCompositeNode(grammarAccess.getAggregateAccess().getResourcesResourceParserRuleCall_4_2_1_0());
                    	    						
                    	    pushFollow(FOLLOW_72);
                    	    lv_resources_26_0=ruleResource();

                    	    state._fsp--;


                    	    							if (current==null) {
                    	    								current = createModelElementForParent(grammarAccess.getAggregateRule());
                    	    							}
                    	    							add(
                    	    								current,
                    	    								"resources",
                    	    								lv_resources_26_0,
                    	    								"org.contextmapper.tactic.dsl.TacticDDDLanguage.Resource");
                    	    							afterParserOrEnumRuleCall();
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 3 :
                    	    // InternalContextMappingDSL.g:4231:5: ( (lv_consumers_27_0= ruleConsumer ) )
                    	    {
                    	    // InternalContextMappingDSL.g:4231:5: ( (lv_consumers_27_0= ruleConsumer ) )
                    	    // InternalContextMappingDSL.g:4232:6: (lv_consumers_27_0= ruleConsumer )
                    	    {
                    	    // InternalContextMappingDSL.g:4232:6: (lv_consumers_27_0= ruleConsumer )
                    	    // InternalContextMappingDSL.g:4233:7: lv_consumers_27_0= ruleConsumer
                    	    {

                    	    							newCompositeNode(grammarAccess.getAggregateAccess().getConsumersConsumerParserRuleCall_4_2_2_0());
                    	    						
                    	    pushFollow(FOLLOW_72);
                    	    lv_consumers_27_0=ruleConsumer();

                    	    state._fsp--;


                    	    							if (current==null) {
                    	    								current = createModelElementForParent(grammarAccess.getAggregateRule());
                    	    							}
                    	    							add(
                    	    								current,
                    	    								"consumers",
                    	    								lv_consumers_27_0,
                    	    								"org.contextmapper.tactic.dsl.TacticDDDLanguage.Consumer");
                    	    							afterParserOrEnumRuleCall();
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 4 :
                    	    // InternalContextMappingDSL.g:4251:5: ( (lv_domainObjects_28_0= ruleSimpleDomainObject ) )
                    	    {
                    	    // InternalContextMappingDSL.g:4251:5: ( (lv_domainObjects_28_0= ruleSimpleDomainObject ) )
                    	    // InternalContextMappingDSL.g:4252:6: (lv_domainObjects_28_0= ruleSimpleDomainObject )
                    	    {
                    	    // InternalContextMappingDSL.g:4252:6: (lv_domainObjects_28_0= ruleSimpleDomainObject )
                    	    // InternalContextMappingDSL.g:4253:7: lv_domainObjects_28_0= ruleSimpleDomainObject
                    	    {

                    	    							newCompositeNode(grammarAccess.getAggregateAccess().getDomainObjectsSimpleDomainObjectParserRuleCall_4_2_3_0());
                    	    						
                    	    pushFollow(FOLLOW_72);
                    	    lv_domainObjects_28_0=ruleSimpleDomainObject();

                    	    state._fsp--;


                    	    							if (current==null) {
                    	    								current = createModelElementForParent(grammarAccess.getAggregateRule());
                    	    							}
                    	    							add(
                    	    								current,
                    	    								"domainObjects",
                    	    								lv_domainObjects_28_0,
                    	    								"org.contextmapper.tactic.dsl.TacticDDDLanguage.SimpleDomainObject");
                    	    							afterParserOrEnumRuleCall();
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop125;
                        }
                    } while (true);

                    this_CLOSE_29=(Token)match(input,RULE_CLOSE,FOLLOW_2); 

                    				newLeafNode(this_CLOSE_29, grammarAccess.getAggregateAccess().getCLOSETerminalRuleCall_4_3());
                    			

                    }
                    break;

            }


            }


            }


            	leaveRule();

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleAggregate"


    // $ANTLR start "entryRuleUseCase"
    // InternalContextMappingDSL.g:4280:1: entryRuleUseCase returns [EObject current=null] : iv_ruleUseCase= ruleUseCase EOF ;
    public final EObject entryRuleUseCase() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleUseCase = null;


        try {
            // InternalContextMappingDSL.g:4280:48: (iv_ruleUseCase= ruleUseCase EOF )
            // InternalContextMappingDSL.g:4281:2: iv_ruleUseCase= ruleUseCase EOF
            {
             newCompositeNode(grammarAccess.getUseCaseRule()); 
            pushFollow(FOLLOW_1);
            iv_ruleUseCase=ruleUseCase();

            state._fsp--;

             current =iv_ruleUseCase; 
            match(input,EOF,FOLLOW_2); 

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleUseCase"


    // $ANTLR start "ruleUseCase"
    // InternalContextMappingDSL.g:4287:1: ruleUseCase returns [EObject current=null] : (otherlv_0= 'UseCase' ( (lv_name_1_0= RULE_ID ) ) (this_OPEN_2= RULE_OPEN ( ( ( ( ({...}? => ( ({...}? => (otherlv_4= 'isLatencyCritical' (otherlv_5= '=' )? ( (lv_isLatencyCritical_6_0= 'true' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_7= 'reads' ( (lv_nanoentitiesRead_8_0= RULE_STRING ) )* ) (otherlv_9= ',' ( (lv_nanoentitiesRead_10_0= RULE_STRING ) ) )* ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_11= 'writes' ( (lv_nanoentitiesWritten_12_0= RULE_STRING ) )* ) (otherlv_13= ',' ( (lv_nanoentitiesWritten_14_0= RULE_STRING ) ) )* ) ) ) ) )* ) ) ) this_CLOSE_15= RULE_CLOSE )? ) ;
    public final EObject ruleUseCase() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_name_1_0=null;
        Token this_OPEN_2=null;
        Token otherlv_4=null;
        Token otherlv_5=null;
        Token lv_isLatencyCritical_6_0=null;
        Token otherlv_7=null;
        Token lv_nanoentitiesRead_8_0=null;
        Token otherlv_9=null;
        Token lv_nanoentitiesRead_10_0=null;
        Token otherlv_11=null;
        Token lv_nanoentitiesWritten_12_0=null;
        Token otherlv_13=null;
        Token lv_nanoentitiesWritten_14_0=null;
        Token this_CLOSE_15=null;


        	enterRule();

        try {
            // InternalContextMappingDSL.g:4293:2: ( (otherlv_0= 'UseCase' ( (lv_name_1_0= RULE_ID ) ) (this_OPEN_2= RULE_OPEN ( ( ( ( ({...}? => ( ({...}? => (otherlv_4= 'isLatencyCritical' (otherlv_5= '=' )? ( (lv_isLatencyCritical_6_0= 'true' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_7= 'reads' ( (lv_nanoentitiesRead_8_0= RULE_STRING ) )* ) (otherlv_9= ',' ( (lv_nanoentitiesRead_10_0= RULE_STRING ) ) )* ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_11= 'writes' ( (lv_nanoentitiesWritten_12_0= RULE_STRING ) )* ) (otherlv_13= ',' ( (lv_nanoentitiesWritten_14_0= RULE_STRING ) ) )* ) ) ) ) )* ) ) ) this_CLOSE_15= RULE_CLOSE )? ) )
            // InternalContextMappingDSL.g:4294:2: (otherlv_0= 'UseCase' ( (lv_name_1_0= RULE_ID ) ) (this_OPEN_2= RULE_OPEN ( ( ( ( ({...}? => ( ({...}? => (otherlv_4= 'isLatencyCritical' (otherlv_5= '=' )? ( (lv_isLatencyCritical_6_0= 'true' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_7= 'reads' ( (lv_nanoentitiesRead_8_0= RULE_STRING ) )* ) (otherlv_9= ',' ( (lv_nanoentitiesRead_10_0= RULE_STRING ) ) )* ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_11= 'writes' ( (lv_nanoentitiesWritten_12_0= RULE_STRING ) )* ) (otherlv_13= ',' ( (lv_nanoentitiesWritten_14_0= RULE_STRING ) ) )* ) ) ) ) )* ) ) ) this_CLOSE_15= RULE_CLOSE )? )
            {
            // InternalContextMappingDSL.g:4294:2: (otherlv_0= 'UseCase' ( (lv_name_1_0= RULE_ID ) ) (this_OPEN_2= RULE_OPEN ( ( ( ( ({...}? => ( ({...}? => (otherlv_4= 'isLatencyCritical' (otherlv_5= '=' )? ( (lv_isLatencyCritical_6_0= 'true' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_7= 'reads' ( (lv_nanoentitiesRead_8_0= RULE_STRING ) )* ) (otherlv_9= ',' ( (lv_nanoentitiesRead_10_0= RULE_STRING ) ) )* ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_11= 'writes' ( (lv_nanoentitiesWritten_12_0= RULE_STRING ) )* ) (otherlv_13= ',' ( (lv_nanoentitiesWritten_14_0= RULE_STRING ) ) )* ) ) ) ) )* ) ) ) this_CLOSE_15= RULE_CLOSE )? )
            // InternalContextMappingDSL.g:4295:3: otherlv_0= 'UseCase' ( (lv_name_1_0= RULE_ID ) ) (this_OPEN_2= RULE_OPEN ( ( ( ( ({...}? => ( ({...}? => (otherlv_4= 'isLatencyCritical' (otherlv_5= '=' )? ( (lv_isLatencyCritical_6_0= 'true' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_7= 'reads' ( (lv_nanoentitiesRead_8_0= RULE_STRING ) )* ) (otherlv_9= ',' ( (lv_nanoentitiesRead_10_0= RULE_STRING ) ) )* ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_11= 'writes' ( (lv_nanoentitiesWritten_12_0= RULE_STRING ) )* ) (otherlv_13= ',' ( (lv_nanoentitiesWritten_14_0= RULE_STRING ) ) )* ) ) ) ) )* ) ) ) this_CLOSE_15= RULE_CLOSE )?
            {
            otherlv_0=(Token)match(input,59,FOLLOW_10); 

            			newLeafNode(otherlv_0, grammarAccess.getUseCaseAccess().getUseCaseKeyword_0());
            		
            // InternalContextMappingDSL.g:4299:3: ( (lv_name_1_0= RULE_ID ) )
            // InternalContextMappingDSL.g:4300:4: (lv_name_1_0= RULE_ID )
            {
            // InternalContextMappingDSL.g:4300:4: (lv_name_1_0= RULE_ID )
            // InternalContextMappingDSL.g:4301:5: lv_name_1_0= RULE_ID
            {
            lv_name_1_0=(Token)match(input,RULE_ID,FOLLOW_23); 

            					newLeafNode(lv_name_1_0, grammarAccess.getUseCaseAccess().getNameIDTerminalRuleCall_1_0());
            				

            					if (current==null) {
            						current = createModelElement(grammarAccess.getUseCaseRule());
            					}
            					setWithLastConsumed(
            						current,
            						"name",
            						lv_name_1_0,
            						"org.eclipse.xtext.common.Terminals.ID");
            				

            }


            }

            // InternalContextMappingDSL.g:4317:3: (this_OPEN_2= RULE_OPEN ( ( ( ( ({...}? => ( ({...}? => (otherlv_4= 'isLatencyCritical' (otherlv_5= '=' )? ( (lv_isLatencyCritical_6_0= 'true' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_7= 'reads' ( (lv_nanoentitiesRead_8_0= RULE_STRING ) )* ) (otherlv_9= ',' ( (lv_nanoentitiesRead_10_0= RULE_STRING ) ) )* ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_11= 'writes' ( (lv_nanoentitiesWritten_12_0= RULE_STRING ) )* ) (otherlv_13= ',' ( (lv_nanoentitiesWritten_14_0= RULE_STRING ) ) )* ) ) ) ) )* ) ) ) this_CLOSE_15= RULE_CLOSE )?
            int alt133=2;
            int LA133_0 = input.LA(1);

            if ( (LA133_0==RULE_OPEN) ) {
                alt133=1;
            }
            switch (alt133) {
                case 1 :
                    // InternalContextMappingDSL.g:4318:4: this_OPEN_2= RULE_OPEN ( ( ( ( ({...}? => ( ({...}? => (otherlv_4= 'isLatencyCritical' (otherlv_5= '=' )? ( (lv_isLatencyCritical_6_0= 'true' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_7= 'reads' ( (lv_nanoentitiesRead_8_0= RULE_STRING ) )* ) (otherlv_9= ',' ( (lv_nanoentitiesRead_10_0= RULE_STRING ) ) )* ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_11= 'writes' ( (lv_nanoentitiesWritten_12_0= RULE_STRING ) )* ) (otherlv_13= ',' ( (lv_nanoentitiesWritten_14_0= RULE_STRING ) ) )* ) ) ) ) )* ) ) ) this_CLOSE_15= RULE_CLOSE
                    {
                    this_OPEN_2=(Token)match(input,RULE_OPEN,FOLLOW_73); 

                    				newLeafNode(this_OPEN_2, grammarAccess.getUseCaseAccess().getOPENTerminalRuleCall_2_0());
                    			
                    // InternalContextMappingDSL.g:4322:4: ( ( ( ( ({...}? => ( ({...}? => (otherlv_4= 'isLatencyCritical' (otherlv_5= '=' )? ( (lv_isLatencyCritical_6_0= 'true' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_7= 'reads' ( (lv_nanoentitiesRead_8_0= RULE_STRING ) )* ) (otherlv_9= ',' ( (lv_nanoentitiesRead_10_0= RULE_STRING ) ) )* ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_11= 'writes' ( (lv_nanoentitiesWritten_12_0= RULE_STRING ) )* ) (otherlv_13= ',' ( (lv_nanoentitiesWritten_14_0= RULE_STRING ) ) )* ) ) ) ) )* ) ) )
                    // InternalContextMappingDSL.g:4323:5: ( ( ( ({...}? => ( ({...}? => (otherlv_4= 'isLatencyCritical' (otherlv_5= '=' )? ( (lv_isLatencyCritical_6_0= 'true' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_7= 'reads' ( (lv_nanoentitiesRead_8_0= RULE_STRING ) )* ) (otherlv_9= ',' ( (lv_nanoentitiesRead_10_0= RULE_STRING ) ) )* ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_11= 'writes' ( (lv_nanoentitiesWritten_12_0= RULE_STRING ) )* ) (otherlv_13= ',' ( (lv_nanoentitiesWritten_14_0= RULE_STRING ) ) )* ) ) ) ) )* ) )
                    {
                    // InternalContextMappingDSL.g:4323:5: ( ( ( ({...}? => ( ({...}? => (otherlv_4= 'isLatencyCritical' (otherlv_5= '=' )? ( (lv_isLatencyCritical_6_0= 'true' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_7= 'reads' ( (lv_nanoentitiesRead_8_0= RULE_STRING ) )* ) (otherlv_9= ',' ( (lv_nanoentitiesRead_10_0= RULE_STRING ) ) )* ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_11= 'writes' ( (lv_nanoentitiesWritten_12_0= RULE_STRING ) )* ) (otherlv_13= ',' ( (lv_nanoentitiesWritten_14_0= RULE_STRING ) ) )* ) ) ) ) )* ) )
                    // InternalContextMappingDSL.g:4324:6: ( ( ({...}? => ( ({...}? => (otherlv_4= 'isLatencyCritical' (otherlv_5= '=' )? ( (lv_isLatencyCritical_6_0= 'true' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_7= 'reads' ( (lv_nanoentitiesRead_8_0= RULE_STRING ) )* ) (otherlv_9= ',' ( (lv_nanoentitiesRead_10_0= RULE_STRING ) ) )* ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_11= 'writes' ( (lv_nanoentitiesWritten_12_0= RULE_STRING ) )* ) (otherlv_13= ',' ( (lv_nanoentitiesWritten_14_0= RULE_STRING ) ) )* ) ) ) ) )* )
                    {
                     
                    					  getUnorderedGroupHelper().enter(grammarAccess.getUseCaseAccess().getUnorderedGroup_2_1());
                    					
                    // InternalContextMappingDSL.g:4327:6: ( ( ({...}? => ( ({...}? => (otherlv_4= 'isLatencyCritical' (otherlv_5= '=' )? ( (lv_isLatencyCritical_6_0= 'true' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_7= 'reads' ( (lv_nanoentitiesRead_8_0= RULE_STRING ) )* ) (otherlv_9= ',' ( (lv_nanoentitiesRead_10_0= RULE_STRING ) ) )* ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_11= 'writes' ( (lv_nanoentitiesWritten_12_0= RULE_STRING ) )* ) (otherlv_13= ',' ( (lv_nanoentitiesWritten_14_0= RULE_STRING ) ) )* ) ) ) ) )* )
                    // InternalContextMappingDSL.g:4328:7: ( ({...}? => ( ({...}? => (otherlv_4= 'isLatencyCritical' (otherlv_5= '=' )? ( (lv_isLatencyCritical_6_0= 'true' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_7= 'reads' ( (lv_nanoentitiesRead_8_0= RULE_STRING ) )* ) (otherlv_9= ',' ( (lv_nanoentitiesRead_10_0= RULE_STRING ) ) )* ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_11= 'writes' ( (lv_nanoentitiesWritten_12_0= RULE_STRING ) )* ) (otherlv_13= ',' ( (lv_nanoentitiesWritten_14_0= RULE_STRING ) ) )* ) ) ) ) )*
                    {
                    // InternalContextMappingDSL.g:4328:7: ( ({...}? => ( ({...}? => (otherlv_4= 'isLatencyCritical' (otherlv_5= '=' )? ( (lv_isLatencyCritical_6_0= 'true' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_7= 'reads' ( (lv_nanoentitiesRead_8_0= RULE_STRING ) )* ) (otherlv_9= ',' ( (lv_nanoentitiesRead_10_0= RULE_STRING ) ) )* ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_11= 'writes' ( (lv_nanoentitiesWritten_12_0= RULE_STRING ) )* ) (otherlv_13= ',' ( (lv_nanoentitiesWritten_14_0= RULE_STRING ) ) )* ) ) ) ) )*
                    loop132:
                    do {
                        int alt132=4;
                        int LA132_0 = input.LA(1);

                        if ( LA132_0 == 60 && getUnorderedGroupHelper().canSelect(grammarAccess.getUseCaseAccess().getUnorderedGroup_2_1(), 0) ) {
                            alt132=1;
                        }
                        else if ( LA132_0 == 62 && getUnorderedGroupHelper().canSelect(grammarAccess.getUseCaseAccess().getUnorderedGroup_2_1(), 1) ) {
                            alt132=2;
                        }
                        else if ( LA132_0 == 63 && getUnorderedGroupHelper().canSelect(grammarAccess.getUseCaseAccess().getUnorderedGroup_2_1(), 2) ) {
                            alt132=3;
                        }


                        switch (alt132) {
                    	case 1 :
                    	    // InternalContextMappingDSL.g:4329:5: ({...}? => ( ({...}? => (otherlv_4= 'isLatencyCritical' (otherlv_5= '=' )? ( (lv_isLatencyCritical_6_0= 'true' ) ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:4329:5: ({...}? => ( ({...}? => (otherlv_4= 'isLatencyCritical' (otherlv_5= '=' )? ( (lv_isLatencyCritical_6_0= 'true' ) ) ) ) ) )
                    	    // InternalContextMappingDSL.g:4330:6: {...}? => ( ({...}? => (otherlv_4= 'isLatencyCritical' (otherlv_5= '=' )? ( (lv_isLatencyCritical_6_0= 'true' ) ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getUseCaseAccess().getUnorderedGroup_2_1(), 0) ) {
                    	        throw new FailedPredicateException(input, "ruleUseCase", "getUnorderedGroupHelper().canSelect(grammarAccess.getUseCaseAccess().getUnorderedGroup_2_1(), 0)");
                    	    }
                    	    // InternalContextMappingDSL.g:4330:107: ( ({...}? => (otherlv_4= 'isLatencyCritical' (otherlv_5= '=' )? ( (lv_isLatencyCritical_6_0= 'true' ) ) ) ) )
                    	    // InternalContextMappingDSL.g:4331:7: ({...}? => (otherlv_4= 'isLatencyCritical' (otherlv_5= '=' )? ( (lv_isLatencyCritical_6_0= 'true' ) ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getUseCaseAccess().getUnorderedGroup_2_1(), 0);
                    	    						
                    	    // InternalContextMappingDSL.g:4334:10: ({...}? => (otherlv_4= 'isLatencyCritical' (otherlv_5= '=' )? ( (lv_isLatencyCritical_6_0= 'true' ) ) ) )
                    	    // InternalContextMappingDSL.g:4334:11: {...}? => (otherlv_4= 'isLatencyCritical' (otherlv_5= '=' )? ( (lv_isLatencyCritical_6_0= 'true' ) ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleUseCase", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:4334:20: (otherlv_4= 'isLatencyCritical' (otherlv_5= '=' )? ( (lv_isLatencyCritical_6_0= 'true' ) ) )
                    	    // InternalContextMappingDSL.g:4334:21: otherlv_4= 'isLatencyCritical' (otherlv_5= '=' )? ( (lv_isLatencyCritical_6_0= 'true' ) )
                    	    {
                    	    otherlv_4=(Token)match(input,60,FOLLOW_74); 

                    	    										newLeafNode(otherlv_4, grammarAccess.getUseCaseAccess().getIsLatencyCriticalKeyword_2_1_0_0());
                    	    									
                    	    // InternalContextMappingDSL.g:4338:10: (otherlv_5= '=' )?
                    	    int alt127=2;
                    	    int LA127_0 = input.LA(1);

                    	    if ( (LA127_0==21) ) {
                    	        alt127=1;
                    	    }
                    	    switch (alt127) {
                    	        case 1 :
                    	            // InternalContextMappingDSL.g:4339:11: otherlv_5= '='
                    	            {
                    	            otherlv_5=(Token)match(input,21,FOLLOW_75); 

                    	            											newLeafNode(otherlv_5, grammarAccess.getUseCaseAccess().getEqualsSignKeyword_2_1_0_1());
                    	            										

                    	            }
                    	            break;

                    	    }

                    	    // InternalContextMappingDSL.g:4344:10: ( (lv_isLatencyCritical_6_0= 'true' ) )
                    	    // InternalContextMappingDSL.g:4345:11: (lv_isLatencyCritical_6_0= 'true' )
                    	    {
                    	    // InternalContextMappingDSL.g:4345:11: (lv_isLatencyCritical_6_0= 'true' )
                    	    // InternalContextMappingDSL.g:4346:12: lv_isLatencyCritical_6_0= 'true'
                    	    {
                    	    lv_isLatencyCritical_6_0=(Token)match(input,61,FOLLOW_73); 

                    	    												newLeafNode(lv_isLatencyCritical_6_0, grammarAccess.getUseCaseAccess().getIsLatencyCriticalTrueKeyword_2_1_0_2_0());
                    	    											

                    	    												if (current==null) {
                    	    													current = createModelElement(grammarAccess.getUseCaseRule());
                    	    												}
                    	    												setWithLastConsumed(current, "isLatencyCritical", true, "true");
                    	    											

                    	    }


                    	    }


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getUseCaseAccess().getUnorderedGroup_2_1());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 2 :
                    	    // InternalContextMappingDSL.g:4364:5: ({...}? => ( ({...}? => ( (otherlv_7= 'reads' ( (lv_nanoentitiesRead_8_0= RULE_STRING ) )* ) (otherlv_9= ',' ( (lv_nanoentitiesRead_10_0= RULE_STRING ) ) )* ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:4364:5: ({...}? => ( ({...}? => ( (otherlv_7= 'reads' ( (lv_nanoentitiesRead_8_0= RULE_STRING ) )* ) (otherlv_9= ',' ( (lv_nanoentitiesRead_10_0= RULE_STRING ) ) )* ) ) ) )
                    	    // InternalContextMappingDSL.g:4365:6: {...}? => ( ({...}? => ( (otherlv_7= 'reads' ( (lv_nanoentitiesRead_8_0= RULE_STRING ) )* ) (otherlv_9= ',' ( (lv_nanoentitiesRead_10_0= RULE_STRING ) ) )* ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getUseCaseAccess().getUnorderedGroup_2_1(), 1) ) {
                    	        throw new FailedPredicateException(input, "ruleUseCase", "getUnorderedGroupHelper().canSelect(grammarAccess.getUseCaseAccess().getUnorderedGroup_2_1(), 1)");
                    	    }
                    	    // InternalContextMappingDSL.g:4365:107: ( ({...}? => ( (otherlv_7= 'reads' ( (lv_nanoentitiesRead_8_0= RULE_STRING ) )* ) (otherlv_9= ',' ( (lv_nanoentitiesRead_10_0= RULE_STRING ) ) )* ) ) )
                    	    // InternalContextMappingDSL.g:4366:7: ({...}? => ( (otherlv_7= 'reads' ( (lv_nanoentitiesRead_8_0= RULE_STRING ) )* ) (otherlv_9= ',' ( (lv_nanoentitiesRead_10_0= RULE_STRING ) ) )* ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getUseCaseAccess().getUnorderedGroup_2_1(), 1);
                    	    						
                    	    // InternalContextMappingDSL.g:4369:10: ({...}? => ( (otherlv_7= 'reads' ( (lv_nanoentitiesRead_8_0= RULE_STRING ) )* ) (otherlv_9= ',' ( (lv_nanoentitiesRead_10_0= RULE_STRING ) ) )* ) )
                    	    // InternalContextMappingDSL.g:4369:11: {...}? => ( (otherlv_7= 'reads' ( (lv_nanoentitiesRead_8_0= RULE_STRING ) )* ) (otherlv_9= ',' ( (lv_nanoentitiesRead_10_0= RULE_STRING ) ) )* )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleUseCase", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:4369:20: ( (otherlv_7= 'reads' ( (lv_nanoentitiesRead_8_0= RULE_STRING ) )* ) (otherlv_9= ',' ( (lv_nanoentitiesRead_10_0= RULE_STRING ) ) )* )
                    	    // InternalContextMappingDSL.g:4369:21: (otherlv_7= 'reads' ( (lv_nanoentitiesRead_8_0= RULE_STRING ) )* ) (otherlv_9= ',' ( (lv_nanoentitiesRead_10_0= RULE_STRING ) ) )*
                    	    {
                    	    // InternalContextMappingDSL.g:4369:21: (otherlv_7= 'reads' ( (lv_nanoentitiesRead_8_0= RULE_STRING ) )* )
                    	    // InternalContextMappingDSL.g:4370:11: otherlv_7= 'reads' ( (lv_nanoentitiesRead_8_0= RULE_STRING ) )*
                    	    {
                    	    otherlv_7=(Token)match(input,62,FOLLOW_76); 

                    	    											newLeafNode(otherlv_7, grammarAccess.getUseCaseAccess().getReadsKeyword_2_1_1_0_0());
                    	    										
                    	    // InternalContextMappingDSL.g:4374:11: ( (lv_nanoentitiesRead_8_0= RULE_STRING ) )*
                    	    loop128:
                    	    do {
                    	        int alt128=2;
                    	        int LA128_0 = input.LA(1);

                    	        if ( (LA128_0==RULE_STRING) ) {
                    	            alt128=1;
                    	        }


                    	        switch (alt128) {
                    	    	case 1 :
                    	    	    // InternalContextMappingDSL.g:4375:12: (lv_nanoentitiesRead_8_0= RULE_STRING )
                    	    	    {
                    	    	    // InternalContextMappingDSL.g:4375:12: (lv_nanoentitiesRead_8_0= RULE_STRING )
                    	    	    // InternalContextMappingDSL.g:4376:13: lv_nanoentitiesRead_8_0= RULE_STRING
                    	    	    {
                    	    	    lv_nanoentitiesRead_8_0=(Token)match(input,RULE_STRING,FOLLOW_76); 

                    	    	    													newLeafNode(lv_nanoentitiesRead_8_0, grammarAccess.getUseCaseAccess().getNanoentitiesReadSTRINGTerminalRuleCall_2_1_1_0_1_0());
                    	    	    												

                    	    	    													if (current==null) {
                    	    	    														current = createModelElement(grammarAccess.getUseCaseRule());
                    	    	    													}
                    	    	    													addWithLastConsumed(
                    	    	    														current,
                    	    	    														"nanoentitiesRead",
                    	    	    														lv_nanoentitiesRead_8_0,
                    	    	    														"org.eclipse.xtext.common.Terminals.STRING");
                    	    	    												

                    	    	    }


                    	    	    }
                    	    	    break;

                    	    	default :
                    	    	    break loop128;
                    	        }
                    	    } while (true);


                    	    }

                    	    // InternalContextMappingDSL.g:4393:10: (otherlv_9= ',' ( (lv_nanoentitiesRead_10_0= RULE_STRING ) ) )*
                    	    loop129:
                    	    do {
                    	        int alt129=2;
                    	        int LA129_0 = input.LA(1);

                    	        if ( (LA129_0==24) ) {
                    	            alt129=1;
                    	        }


                    	        switch (alt129) {
                    	    	case 1 :
                    	    	    // InternalContextMappingDSL.g:4394:11: otherlv_9= ',' ( (lv_nanoentitiesRead_10_0= RULE_STRING ) )
                    	    	    {
                    	    	    otherlv_9=(Token)match(input,24,FOLLOW_4); 

                    	    	    											newLeafNode(otherlv_9, grammarAccess.getUseCaseAccess().getCommaKeyword_2_1_1_1_0());
                    	    	    										
                    	    	    // InternalContextMappingDSL.g:4398:11: ( (lv_nanoentitiesRead_10_0= RULE_STRING ) )
                    	    	    // InternalContextMappingDSL.g:4399:12: (lv_nanoentitiesRead_10_0= RULE_STRING )
                    	    	    {
                    	    	    // InternalContextMappingDSL.g:4399:12: (lv_nanoentitiesRead_10_0= RULE_STRING )
                    	    	    // InternalContextMappingDSL.g:4400:13: lv_nanoentitiesRead_10_0= RULE_STRING
                    	    	    {
                    	    	    lv_nanoentitiesRead_10_0=(Token)match(input,RULE_STRING,FOLLOW_77); 

                    	    	    													newLeafNode(lv_nanoentitiesRead_10_0, grammarAccess.getUseCaseAccess().getNanoentitiesReadSTRINGTerminalRuleCall_2_1_1_1_1_0());
                    	    	    												

                    	    	    													if (current==null) {
                    	    	    														current = createModelElement(grammarAccess.getUseCaseRule());
                    	    	    													}
                    	    	    													addWithLastConsumed(
                    	    	    														current,
                    	    	    														"nanoentitiesRead",
                    	    	    														lv_nanoentitiesRead_10_0,
                    	    	    														"org.eclipse.xtext.common.Terminals.STRING");
                    	    	    												

                    	    	    }


                    	    	    }


                    	    	    }
                    	    	    break;

                    	    	default :
                    	    	    break loop129;
                    	        }
                    	    } while (true);


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getUseCaseAccess().getUnorderedGroup_2_1());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 3 :
                    	    // InternalContextMappingDSL.g:4423:5: ({...}? => ( ({...}? => ( (otherlv_11= 'writes' ( (lv_nanoentitiesWritten_12_0= RULE_STRING ) )* ) (otherlv_13= ',' ( (lv_nanoentitiesWritten_14_0= RULE_STRING ) ) )* ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:4423:5: ({...}? => ( ({...}? => ( (otherlv_11= 'writes' ( (lv_nanoentitiesWritten_12_0= RULE_STRING ) )* ) (otherlv_13= ',' ( (lv_nanoentitiesWritten_14_0= RULE_STRING ) ) )* ) ) ) )
                    	    // InternalContextMappingDSL.g:4424:6: {...}? => ( ({...}? => ( (otherlv_11= 'writes' ( (lv_nanoentitiesWritten_12_0= RULE_STRING ) )* ) (otherlv_13= ',' ( (lv_nanoentitiesWritten_14_0= RULE_STRING ) ) )* ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getUseCaseAccess().getUnorderedGroup_2_1(), 2) ) {
                    	        throw new FailedPredicateException(input, "ruleUseCase", "getUnorderedGroupHelper().canSelect(grammarAccess.getUseCaseAccess().getUnorderedGroup_2_1(), 2)");
                    	    }
                    	    // InternalContextMappingDSL.g:4424:107: ( ({...}? => ( (otherlv_11= 'writes' ( (lv_nanoentitiesWritten_12_0= RULE_STRING ) )* ) (otherlv_13= ',' ( (lv_nanoentitiesWritten_14_0= RULE_STRING ) ) )* ) ) )
                    	    // InternalContextMappingDSL.g:4425:7: ({...}? => ( (otherlv_11= 'writes' ( (lv_nanoentitiesWritten_12_0= RULE_STRING ) )* ) (otherlv_13= ',' ( (lv_nanoentitiesWritten_14_0= RULE_STRING ) ) )* ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getUseCaseAccess().getUnorderedGroup_2_1(), 2);
                    	    						
                    	    // InternalContextMappingDSL.g:4428:10: ({...}? => ( (otherlv_11= 'writes' ( (lv_nanoentitiesWritten_12_0= RULE_STRING ) )* ) (otherlv_13= ',' ( (lv_nanoentitiesWritten_14_0= RULE_STRING ) ) )* ) )
                    	    // InternalContextMappingDSL.g:4428:11: {...}? => ( (otherlv_11= 'writes' ( (lv_nanoentitiesWritten_12_0= RULE_STRING ) )* ) (otherlv_13= ',' ( (lv_nanoentitiesWritten_14_0= RULE_STRING ) ) )* )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleUseCase", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:4428:20: ( (otherlv_11= 'writes' ( (lv_nanoentitiesWritten_12_0= RULE_STRING ) )* ) (otherlv_13= ',' ( (lv_nanoentitiesWritten_14_0= RULE_STRING ) ) )* )
                    	    // InternalContextMappingDSL.g:4428:21: (otherlv_11= 'writes' ( (lv_nanoentitiesWritten_12_0= RULE_STRING ) )* ) (otherlv_13= ',' ( (lv_nanoentitiesWritten_14_0= RULE_STRING ) ) )*
                    	    {
                    	    // InternalContextMappingDSL.g:4428:21: (otherlv_11= 'writes' ( (lv_nanoentitiesWritten_12_0= RULE_STRING ) )* )
                    	    // InternalContextMappingDSL.g:4429:11: otherlv_11= 'writes' ( (lv_nanoentitiesWritten_12_0= RULE_STRING ) )*
                    	    {
                    	    otherlv_11=(Token)match(input,63,FOLLOW_76); 

                    	    											newLeafNode(otherlv_11, grammarAccess.getUseCaseAccess().getWritesKeyword_2_1_2_0_0());
                    	    										
                    	    // InternalContextMappingDSL.g:4433:11: ( (lv_nanoentitiesWritten_12_0= RULE_STRING ) )*
                    	    loop130:
                    	    do {
                    	        int alt130=2;
                    	        int LA130_0 = input.LA(1);

                    	        if ( (LA130_0==RULE_STRING) ) {
                    	            alt130=1;
                    	        }


                    	        switch (alt130) {
                    	    	case 1 :
                    	    	    // InternalContextMappingDSL.g:4434:12: (lv_nanoentitiesWritten_12_0= RULE_STRING )
                    	    	    {
                    	    	    // InternalContextMappingDSL.g:4434:12: (lv_nanoentitiesWritten_12_0= RULE_STRING )
                    	    	    // InternalContextMappingDSL.g:4435:13: lv_nanoentitiesWritten_12_0= RULE_STRING
                    	    	    {
                    	    	    lv_nanoentitiesWritten_12_0=(Token)match(input,RULE_STRING,FOLLOW_76); 

                    	    	    													newLeafNode(lv_nanoentitiesWritten_12_0, grammarAccess.getUseCaseAccess().getNanoentitiesWrittenSTRINGTerminalRuleCall_2_1_2_0_1_0());
                    	    	    												

                    	    	    													if (current==null) {
                    	    	    														current = createModelElement(grammarAccess.getUseCaseRule());
                    	    	    													}
                    	    	    													addWithLastConsumed(
                    	    	    														current,
                    	    	    														"nanoentitiesWritten",
                    	    	    														lv_nanoentitiesWritten_12_0,
                    	    	    														"org.eclipse.xtext.common.Terminals.STRING");
                    	    	    												

                    	    	    }


                    	    	    }
                    	    	    break;

                    	    	default :
                    	    	    break loop130;
                    	        }
                    	    } while (true);


                    	    }

                    	    // InternalContextMappingDSL.g:4452:10: (otherlv_13= ',' ( (lv_nanoentitiesWritten_14_0= RULE_STRING ) ) )*
                    	    loop131:
                    	    do {
                    	        int alt131=2;
                    	        int LA131_0 = input.LA(1);

                    	        if ( (LA131_0==24) ) {
                    	            alt131=1;
                    	        }


                    	        switch (alt131) {
                    	    	case 1 :
                    	    	    // InternalContextMappingDSL.g:4453:11: otherlv_13= ',' ( (lv_nanoentitiesWritten_14_0= RULE_STRING ) )
                    	    	    {
                    	    	    otherlv_13=(Token)match(input,24,FOLLOW_4); 

                    	    	    											newLeafNode(otherlv_13, grammarAccess.getUseCaseAccess().getCommaKeyword_2_1_2_1_0());
                    	    	    										
                    	    	    // InternalContextMappingDSL.g:4457:11: ( (lv_nanoentitiesWritten_14_0= RULE_STRING ) )
                    	    	    // InternalContextMappingDSL.g:4458:12: (lv_nanoentitiesWritten_14_0= RULE_STRING )
                    	    	    {
                    	    	    // InternalContextMappingDSL.g:4458:12: (lv_nanoentitiesWritten_14_0= RULE_STRING )
                    	    	    // InternalContextMappingDSL.g:4459:13: lv_nanoentitiesWritten_14_0= RULE_STRING
                    	    	    {
                    	    	    lv_nanoentitiesWritten_14_0=(Token)match(input,RULE_STRING,FOLLOW_77); 

                    	    	    													newLeafNode(lv_nanoentitiesWritten_14_0, grammarAccess.getUseCaseAccess().getNanoentitiesWrittenSTRINGTerminalRuleCall_2_1_2_1_1_0());
                    	    	    												

                    	    	    													if (current==null) {
                    	    	    														current = createModelElement(grammarAccess.getUseCaseRule());
                    	    	    													}
                    	    	    													addWithLastConsumed(
                    	    	    														current,
                    	    	    														"nanoentitiesWritten",
                    	    	    														lv_nanoentitiesWritten_14_0,
                    	    	    														"org.eclipse.xtext.common.Terminals.STRING");
                    	    	    												

                    	    	    }


                    	    	    }


                    	    	    }
                    	    	    break;

                    	    	default :
                    	    	    break loop131;
                    	        }
                    	    } while (true);


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getUseCaseAccess().getUnorderedGroup_2_1());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop132;
                        }
                    } while (true);


                    }


                    }

                     
                    					  getUnorderedGroupHelper().leave(grammarAccess.getUseCaseAccess().getUnorderedGroup_2_1());
                    					

                    }

                    this_CLOSE_15=(Token)match(input,RULE_CLOSE,FOLLOW_2); 

                    				newLeafNode(this_CLOSE_15, grammarAccess.getUseCaseAccess().getCLOSETerminalRuleCall_2_2());
                    			

                    }
                    break;

            }


            }


            }


            	leaveRule();

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleUseCase"


    // $ANTLR start "entryRuleSculptorModule"
    // InternalContextMappingDSL.g:4498:1: entryRuleSculptorModule returns [EObject current=null] : iv_ruleSculptorModule= ruleSculptorModule EOF ;
    public final EObject entryRuleSculptorModule() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleSculptorModule = null;


        try {
            // InternalContextMappingDSL.g:4498:55: (iv_ruleSculptorModule= ruleSculptorModule EOF )
            // InternalContextMappingDSL.g:4499:2: iv_ruleSculptorModule= ruleSculptorModule EOF
            {
             newCompositeNode(grammarAccess.getSculptorModuleRule()); 
            pushFollow(FOLLOW_1);
            iv_ruleSculptorModule=ruleSculptorModule();

            state._fsp--;

             current =iv_ruleSculptorModule; 
            match(input,EOF,FOLLOW_2); 

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleSculptorModule"


    // $ANTLR start "ruleSculptorModule"
    // InternalContextMappingDSL.g:4505:1: ruleSculptorModule returns [EObject current=null] : ( ( (lv_doc_0_0= RULE_STRING ) )? otherlv_1= 'Module' ( (lv_name_2_0= RULE_ID ) ) (this_OPEN_3= RULE_OPEN ( (lv_external_4_0= 'external' ) )? (otherlv_5= 'basePackage' otherlv_6= '=' ( (lv_basePackage_7_0= ruleJavaIdentifier ) ) )? (otherlv_8= 'hint' otherlv_9= '=' ( (lv_hint_10_0= RULE_STRING ) ) )? ( ( (lv_services_11_0= ruleService ) ) | ( (lv_resources_12_0= ruleResource ) ) | ( (lv_consumers_13_0= ruleConsumer ) ) | ( (lv_domainObjects_14_0= ruleSimpleDomainObject ) ) | ( (lv_aggregates_15_0= ruleAggregate ) ) )* this_CLOSE_16= RULE_CLOSE )? ) ;
    public final EObject ruleSculptorModule() throws RecognitionException {
        EObject current = null;

        Token lv_doc_0_0=null;
        Token otherlv_1=null;
        Token lv_name_2_0=null;
        Token this_OPEN_3=null;
        Token lv_external_4_0=null;
        Token otherlv_5=null;
        Token otherlv_6=null;
        Token otherlv_8=null;
        Token otherlv_9=null;
        Token lv_hint_10_0=null;
        Token this_CLOSE_16=null;
        AntlrDatatypeRuleToken lv_basePackage_7_0 = null;

        EObject lv_services_11_0 = null;

        EObject lv_resources_12_0 = null;

        EObject lv_consumers_13_0 = null;

        EObject lv_domainObjects_14_0 = null;

        EObject lv_aggregates_15_0 = null;



        	enterRule();

        try {
            // InternalContextMappingDSL.g:4511:2: ( ( ( (lv_doc_0_0= RULE_STRING ) )? otherlv_1= 'Module' ( (lv_name_2_0= RULE_ID ) ) (this_OPEN_3= RULE_OPEN ( (lv_external_4_0= 'external' ) )? (otherlv_5= 'basePackage' otherlv_6= '=' ( (lv_basePackage_7_0= ruleJavaIdentifier ) ) )? (otherlv_8= 'hint' otherlv_9= '=' ( (lv_hint_10_0= RULE_STRING ) ) )? ( ( (lv_services_11_0= ruleService ) ) | ( (lv_resources_12_0= ruleResource ) ) | ( (lv_consumers_13_0= ruleConsumer ) ) | ( (lv_domainObjects_14_0= ruleSimpleDomainObject ) ) | ( (lv_aggregates_15_0= ruleAggregate ) ) )* this_CLOSE_16= RULE_CLOSE )? ) )
            // InternalContextMappingDSL.g:4512:2: ( ( (lv_doc_0_0= RULE_STRING ) )? otherlv_1= 'Module' ( (lv_name_2_0= RULE_ID ) ) (this_OPEN_3= RULE_OPEN ( (lv_external_4_0= 'external' ) )? (otherlv_5= 'basePackage' otherlv_6= '=' ( (lv_basePackage_7_0= ruleJavaIdentifier ) ) )? (otherlv_8= 'hint' otherlv_9= '=' ( (lv_hint_10_0= RULE_STRING ) ) )? ( ( (lv_services_11_0= ruleService ) ) | ( (lv_resources_12_0= ruleResource ) ) | ( (lv_consumers_13_0= ruleConsumer ) ) | ( (lv_domainObjects_14_0= ruleSimpleDomainObject ) ) | ( (lv_aggregates_15_0= ruleAggregate ) ) )* this_CLOSE_16= RULE_CLOSE )? )
            {
            // InternalContextMappingDSL.g:4512:2: ( ( (lv_doc_0_0= RULE_STRING ) )? otherlv_1= 'Module' ( (lv_name_2_0= RULE_ID ) ) (this_OPEN_3= RULE_OPEN ( (lv_external_4_0= 'external' ) )? (otherlv_5= 'basePackage' otherlv_6= '=' ( (lv_basePackage_7_0= ruleJavaIdentifier ) ) )? (otherlv_8= 'hint' otherlv_9= '=' ( (lv_hint_10_0= RULE_STRING ) ) )? ( ( (lv_services_11_0= ruleService ) ) | ( (lv_resources_12_0= ruleResource ) ) | ( (lv_consumers_13_0= ruleConsumer ) ) | ( (lv_domainObjects_14_0= ruleSimpleDomainObject ) ) | ( (lv_aggregates_15_0= ruleAggregate ) ) )* this_CLOSE_16= RULE_CLOSE )? )
            // InternalContextMappingDSL.g:4513:3: ( (lv_doc_0_0= RULE_STRING ) )? otherlv_1= 'Module' ( (lv_name_2_0= RULE_ID ) ) (this_OPEN_3= RULE_OPEN ( (lv_external_4_0= 'external' ) )? (otherlv_5= 'basePackage' otherlv_6= '=' ( (lv_basePackage_7_0= ruleJavaIdentifier ) ) )? (otherlv_8= 'hint' otherlv_9= '=' ( (lv_hint_10_0= RULE_STRING ) ) )? ( ( (lv_services_11_0= ruleService ) ) | ( (lv_resources_12_0= ruleResource ) ) | ( (lv_consumers_13_0= ruleConsumer ) ) | ( (lv_domainObjects_14_0= ruleSimpleDomainObject ) ) | ( (lv_aggregates_15_0= ruleAggregate ) ) )* this_CLOSE_16= RULE_CLOSE )?
            {
            // InternalContextMappingDSL.g:4513:3: ( (lv_doc_0_0= RULE_STRING ) )?
            int alt134=2;
            int LA134_0 = input.LA(1);

            if ( (LA134_0==RULE_STRING) ) {
                alt134=1;
            }
            switch (alt134) {
                case 1 :
                    // InternalContextMappingDSL.g:4514:4: (lv_doc_0_0= RULE_STRING )
                    {
                    // InternalContextMappingDSL.g:4514:4: (lv_doc_0_0= RULE_STRING )
                    // InternalContextMappingDSL.g:4515:5: lv_doc_0_0= RULE_STRING
                    {
                    lv_doc_0_0=(Token)match(input,RULE_STRING,FOLLOW_78); 

                    					newLeafNode(lv_doc_0_0, grammarAccess.getSculptorModuleAccess().getDocSTRINGTerminalRuleCall_0_0());
                    				

                    					if (current==null) {
                    						current = createModelElement(grammarAccess.getSculptorModuleRule());
                    					}
                    					setWithLastConsumed(
                    						current,
                    						"doc",
                    						lv_doc_0_0,
                    						"org.eclipse.xtext.common.Terminals.STRING");
                    				

                    }


                    }
                    break;

            }

            otherlv_1=(Token)match(input,64,FOLLOW_10); 

            			newLeafNode(otherlv_1, grammarAccess.getSculptorModuleAccess().getModuleKeyword_1());
            		
            // InternalContextMappingDSL.g:4535:3: ( (lv_name_2_0= RULE_ID ) )
            // InternalContextMappingDSL.g:4536:4: (lv_name_2_0= RULE_ID )
            {
            // InternalContextMappingDSL.g:4536:4: (lv_name_2_0= RULE_ID )
            // InternalContextMappingDSL.g:4537:5: lv_name_2_0= RULE_ID
            {
            lv_name_2_0=(Token)match(input,RULE_ID,FOLLOW_23); 

            					newLeafNode(lv_name_2_0, grammarAccess.getSculptorModuleAccess().getNameIDTerminalRuleCall_2_0());
            				

            					if (current==null) {
            						current = createModelElement(grammarAccess.getSculptorModuleRule());
            					}
            					setWithLastConsumed(
            						current,
            						"name",
            						lv_name_2_0,
            						"org.eclipse.xtext.common.Terminals.ID");
            				

            }


            }

            // InternalContextMappingDSL.g:4553:3: (this_OPEN_3= RULE_OPEN ( (lv_external_4_0= 'external' ) )? (otherlv_5= 'basePackage' otherlv_6= '=' ( (lv_basePackage_7_0= ruleJavaIdentifier ) ) )? (otherlv_8= 'hint' otherlv_9= '=' ( (lv_hint_10_0= RULE_STRING ) ) )? ( ( (lv_services_11_0= ruleService ) ) | ( (lv_resources_12_0= ruleResource ) ) | ( (lv_consumers_13_0= ruleConsumer ) ) | ( (lv_domainObjects_14_0= ruleSimpleDomainObject ) ) | ( (lv_aggregates_15_0= ruleAggregate ) ) )* this_CLOSE_16= RULE_CLOSE )?
            int alt139=2;
            int LA139_0 = input.LA(1);

            if ( (LA139_0==RULE_OPEN) ) {
                alt139=1;
            }
            switch (alt139) {
                case 1 :
                    // InternalContextMappingDSL.g:4554:4: this_OPEN_3= RULE_OPEN ( (lv_external_4_0= 'external' ) )? (otherlv_5= 'basePackage' otherlv_6= '=' ( (lv_basePackage_7_0= ruleJavaIdentifier ) ) )? (otherlv_8= 'hint' otherlv_9= '=' ( (lv_hint_10_0= RULE_STRING ) ) )? ( ( (lv_services_11_0= ruleService ) ) | ( (lv_resources_12_0= ruleResource ) ) | ( (lv_consumers_13_0= ruleConsumer ) ) | ( (lv_domainObjects_14_0= ruleSimpleDomainObject ) ) | ( (lv_aggregates_15_0= ruleAggregate ) ) )* this_CLOSE_16= RULE_CLOSE
                    {
                    this_OPEN_3=(Token)match(input,RULE_OPEN,FOLLOW_79); 

                    				newLeafNode(this_OPEN_3, grammarAccess.getSculptorModuleAccess().getOPENTerminalRuleCall_3_0());
                    			
                    // InternalContextMappingDSL.g:4558:4: ( (lv_external_4_0= 'external' ) )?
                    int alt135=2;
                    int LA135_0 = input.LA(1);

                    if ( (LA135_0==65) ) {
                        alt135=1;
                    }
                    switch (alt135) {
                        case 1 :
                            // InternalContextMappingDSL.g:4559:5: (lv_external_4_0= 'external' )
                            {
                            // InternalContextMappingDSL.g:4559:5: (lv_external_4_0= 'external' )
                            // InternalContextMappingDSL.g:4560:6: lv_external_4_0= 'external'
                            {
                            lv_external_4_0=(Token)match(input,65,FOLLOW_80); 

                            						newLeafNode(lv_external_4_0, grammarAccess.getSculptorModuleAccess().getExternalExternalKeyword_3_1_0());
                            					

                            						if (current==null) {
                            							current = createModelElement(grammarAccess.getSculptorModuleRule());
                            						}
                            						setWithLastConsumed(current, "external", true, "external");
                            					

                            }


                            }
                            break;

                    }

                    // InternalContextMappingDSL.g:4572:4: (otherlv_5= 'basePackage' otherlv_6= '=' ( (lv_basePackage_7_0= ruleJavaIdentifier ) ) )?
                    int alt136=2;
                    int LA136_0 = input.LA(1);

                    if ( (LA136_0==66) ) {
                        alt136=1;
                    }
                    switch (alt136) {
                        case 1 :
                            // InternalContextMappingDSL.g:4573:5: otherlv_5= 'basePackage' otherlv_6= '=' ( (lv_basePackage_7_0= ruleJavaIdentifier ) )
                            {
                            otherlv_5=(Token)match(input,66,FOLLOW_81); 

                            					newLeafNode(otherlv_5, grammarAccess.getSculptorModuleAccess().getBasePackageKeyword_3_2_0());
                            				
                            otherlv_6=(Token)match(input,21,FOLLOW_10); 

                            					newLeafNode(otherlv_6, grammarAccess.getSculptorModuleAccess().getEqualsSignKeyword_3_2_1());
                            				
                            // InternalContextMappingDSL.g:4581:5: ( (lv_basePackage_7_0= ruleJavaIdentifier ) )
                            // InternalContextMappingDSL.g:4582:6: (lv_basePackage_7_0= ruleJavaIdentifier )
                            {
                            // InternalContextMappingDSL.g:4582:6: (lv_basePackage_7_0= ruleJavaIdentifier )
                            // InternalContextMappingDSL.g:4583:7: lv_basePackage_7_0= ruleJavaIdentifier
                            {

                            							newCompositeNode(grammarAccess.getSculptorModuleAccess().getBasePackageJavaIdentifierParserRuleCall_3_2_2_0());
                            						
                            pushFollow(FOLLOW_82);
                            lv_basePackage_7_0=ruleJavaIdentifier();

                            state._fsp--;


                            							if (current==null) {
                            								current = createModelElementForParent(grammarAccess.getSculptorModuleRule());
                            							}
                            							set(
                            								current,
                            								"basePackage",
                            								lv_basePackage_7_0,
                            								"org.contextmapper.tactic.dsl.TacticDDDLanguage.JavaIdentifier");
                            							afterParserOrEnumRuleCall();
                            						

                            }


                            }


                            }
                            break;

                    }

                    // InternalContextMappingDSL.g:4601:4: (otherlv_8= 'hint' otherlv_9= '=' ( (lv_hint_10_0= RULE_STRING ) ) )?
                    int alt137=2;
                    int LA137_0 = input.LA(1);

                    if ( (LA137_0==67) ) {
                        alt137=1;
                    }
                    switch (alt137) {
                        case 1 :
                            // InternalContextMappingDSL.g:4602:5: otherlv_8= 'hint' otherlv_9= '=' ( (lv_hint_10_0= RULE_STRING ) )
                            {
                            otherlv_8=(Token)match(input,67,FOLLOW_81); 

                            					newLeafNode(otherlv_8, grammarAccess.getSculptorModuleAccess().getHintKeyword_3_3_0());
                            				
                            otherlv_9=(Token)match(input,21,FOLLOW_4); 

                            					newLeafNode(otherlv_9, grammarAccess.getSculptorModuleAccess().getEqualsSignKeyword_3_3_1());
                            				
                            // InternalContextMappingDSL.g:4610:5: ( (lv_hint_10_0= RULE_STRING ) )
                            // InternalContextMappingDSL.g:4611:6: (lv_hint_10_0= RULE_STRING )
                            {
                            // InternalContextMappingDSL.g:4611:6: (lv_hint_10_0= RULE_STRING )
                            // InternalContextMappingDSL.g:4612:7: lv_hint_10_0= RULE_STRING
                            {
                            lv_hint_10_0=(Token)match(input,RULE_STRING,FOLLOW_83); 

                            							newLeafNode(lv_hint_10_0, grammarAccess.getSculptorModuleAccess().getHintSTRINGTerminalRuleCall_3_3_2_0());
                            						

                            							if (current==null) {
                            								current = createModelElement(grammarAccess.getSculptorModuleRule());
                            							}
                            							setWithLastConsumed(
                            								current,
                            								"hint",
                            								lv_hint_10_0,
                            								"org.eclipse.xtext.common.Terminals.STRING");
                            						

                            }


                            }


                            }
                            break;

                    }

                    // InternalContextMappingDSL.g:4629:4: ( ( (lv_services_11_0= ruleService ) ) | ( (lv_resources_12_0= ruleResource ) ) | ( (lv_consumers_13_0= ruleConsumer ) ) | ( (lv_domainObjects_14_0= ruleSimpleDomainObject ) ) | ( (lv_aggregates_15_0= ruleAggregate ) ) )*
                    loop138:
                    do {
                        int alt138=6;
                        alt138 = dfa138.predict(input);
                        switch (alt138) {
                    	case 1 :
                    	    // InternalContextMappingDSL.g:4630:5: ( (lv_services_11_0= ruleService ) )
                    	    {
                    	    // InternalContextMappingDSL.g:4630:5: ( (lv_services_11_0= ruleService ) )
                    	    // InternalContextMappingDSL.g:4631:6: (lv_services_11_0= ruleService )
                    	    {
                    	    // InternalContextMappingDSL.g:4631:6: (lv_services_11_0= ruleService )
                    	    // InternalContextMappingDSL.g:4632:7: lv_services_11_0= ruleService
                    	    {

                    	    							newCompositeNode(grammarAccess.getSculptorModuleAccess().getServicesServiceParserRuleCall_3_4_0_0());
                    	    						
                    	    pushFollow(FOLLOW_83);
                    	    lv_services_11_0=ruleService();

                    	    state._fsp--;


                    	    							if (current==null) {
                    	    								current = createModelElementForParent(grammarAccess.getSculptorModuleRule());
                    	    							}
                    	    							add(
                    	    								current,
                    	    								"services",
                    	    								lv_services_11_0,
                    	    								"org.contextmapper.tactic.dsl.TacticDDDLanguage.Service");
                    	    							afterParserOrEnumRuleCall();
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 2 :
                    	    // InternalContextMappingDSL.g:4650:5: ( (lv_resources_12_0= ruleResource ) )
                    	    {
                    	    // InternalContextMappingDSL.g:4650:5: ( (lv_resources_12_0= ruleResource ) )
                    	    // InternalContextMappingDSL.g:4651:6: (lv_resources_12_0= ruleResource )
                    	    {
                    	    // InternalContextMappingDSL.g:4651:6: (lv_resources_12_0= ruleResource )
                    	    // InternalContextMappingDSL.g:4652:7: lv_resources_12_0= ruleResource
                    	    {

                    	    							newCompositeNode(grammarAccess.getSculptorModuleAccess().getResourcesResourceParserRuleCall_3_4_1_0());
                    	    						
                    	    pushFollow(FOLLOW_83);
                    	    lv_resources_12_0=ruleResource();

                    	    state._fsp--;


                    	    							if (current==null) {
                    	    								current = createModelElementForParent(grammarAccess.getSculptorModuleRule());
                    	    							}
                    	    							add(
                    	    								current,
                    	    								"resources",
                    	    								lv_resources_12_0,
                    	    								"org.contextmapper.tactic.dsl.TacticDDDLanguage.Resource");
                    	    							afterParserOrEnumRuleCall();
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 3 :
                    	    // InternalContextMappingDSL.g:4670:5: ( (lv_consumers_13_0= ruleConsumer ) )
                    	    {
                    	    // InternalContextMappingDSL.g:4670:5: ( (lv_consumers_13_0= ruleConsumer ) )
                    	    // InternalContextMappingDSL.g:4671:6: (lv_consumers_13_0= ruleConsumer )
                    	    {
                    	    // InternalContextMappingDSL.g:4671:6: (lv_consumers_13_0= ruleConsumer )
                    	    // InternalContextMappingDSL.g:4672:7: lv_consumers_13_0= ruleConsumer
                    	    {

                    	    							newCompositeNode(grammarAccess.getSculptorModuleAccess().getConsumersConsumerParserRuleCall_3_4_2_0());
                    	    						
                    	    pushFollow(FOLLOW_83);
                    	    lv_consumers_13_0=ruleConsumer();

                    	    state._fsp--;


                    	    							if (current==null) {
                    	    								current = createModelElementForParent(grammarAccess.getSculptorModuleRule());
                    	    							}
                    	    							add(
                    	    								current,
                    	    								"consumers",
                    	    								lv_consumers_13_0,
                    	    								"org.contextmapper.tactic.dsl.TacticDDDLanguage.Consumer");
                    	    							afterParserOrEnumRuleCall();
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 4 :
                    	    // InternalContextMappingDSL.g:4690:5: ( (lv_domainObjects_14_0= ruleSimpleDomainObject ) )
                    	    {
                    	    // InternalContextMappingDSL.g:4690:5: ( (lv_domainObjects_14_0= ruleSimpleDomainObject ) )
                    	    // InternalContextMappingDSL.g:4691:6: (lv_domainObjects_14_0= ruleSimpleDomainObject )
                    	    {
                    	    // InternalContextMappingDSL.g:4691:6: (lv_domainObjects_14_0= ruleSimpleDomainObject )
                    	    // InternalContextMappingDSL.g:4692:7: lv_domainObjects_14_0= ruleSimpleDomainObject
                    	    {

                    	    							newCompositeNode(grammarAccess.getSculptorModuleAccess().getDomainObjectsSimpleDomainObjectParserRuleCall_3_4_3_0());
                    	    						
                    	    pushFollow(FOLLOW_83);
                    	    lv_domainObjects_14_0=ruleSimpleDomainObject();

                    	    state._fsp--;


                    	    							if (current==null) {
                    	    								current = createModelElementForParent(grammarAccess.getSculptorModuleRule());
                    	    							}
                    	    							add(
                    	    								current,
                    	    								"domainObjects",
                    	    								lv_domainObjects_14_0,
                    	    								"org.contextmapper.tactic.dsl.TacticDDDLanguage.SimpleDomainObject");
                    	    							afterParserOrEnumRuleCall();
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 5 :
                    	    // InternalContextMappingDSL.g:4710:5: ( (lv_aggregates_15_0= ruleAggregate ) )
                    	    {
                    	    // InternalContextMappingDSL.g:4710:5: ( (lv_aggregates_15_0= ruleAggregate ) )
                    	    // InternalContextMappingDSL.g:4711:6: (lv_aggregates_15_0= ruleAggregate )
                    	    {
                    	    // InternalContextMappingDSL.g:4711:6: (lv_aggregates_15_0= ruleAggregate )
                    	    // InternalContextMappingDSL.g:4712:7: lv_aggregates_15_0= ruleAggregate
                    	    {

                    	    							newCompositeNode(grammarAccess.getSculptorModuleAccess().getAggregatesAggregateParserRuleCall_3_4_4_0());
                    	    						
                    	    pushFollow(FOLLOW_83);
                    	    lv_aggregates_15_0=ruleAggregate();

                    	    state._fsp--;


                    	    							if (current==null) {
                    	    								current = createModelElementForParent(grammarAccess.getSculptorModuleRule());
                    	    							}
                    	    							add(
                    	    								current,
                    	    								"aggregates",
                    	    								lv_aggregates_15_0,
                    	    								"org.contextmapper.dsl.ContextMappingDSL.Aggregate");
                    	    							afterParserOrEnumRuleCall();
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop138;
                        }
                    } while (true);

                    this_CLOSE_16=(Token)match(input,RULE_CLOSE,FOLLOW_2); 

                    				newLeafNode(this_CLOSE_16, grammarAccess.getSculptorModuleAccess().getCLOSETerminalRuleCall_3_5());
                    			

                    }
                    break;

            }


            }


            }


            	leaveRule();

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleSculptorModule"


    // $ANTLR start "entryRuleApplication"
    // InternalContextMappingDSL.g:4739:1: entryRuleApplication returns [EObject current=null] : iv_ruleApplication= ruleApplication EOF ;
    public final EObject entryRuleApplication() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleApplication = null;


        try {
            // InternalContextMappingDSL.g:4739:52: (iv_ruleApplication= ruleApplication EOF )
            // InternalContextMappingDSL.g:4740:2: iv_ruleApplication= ruleApplication EOF
            {
             newCompositeNode(grammarAccess.getApplicationRule()); 
            pushFollow(FOLLOW_1);
            iv_ruleApplication=ruleApplication();

            state._fsp--;

             current =iv_ruleApplication; 
            match(input,EOF,FOLLOW_2); 

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleApplication"


    // $ANTLR start "ruleApplication"
    // InternalContextMappingDSL.g:4746:1: ruleApplication returns [EObject current=null] : ( ( (lv_doc_0_0= RULE_STRING ) )? ( (otherlv_1= 'Application' ( (lv_name_2_0= RULE_ID ) ) otherlv_3= '{' otherlv_4= 'basePackage' otherlv_5= '=' ( (lv_basePackage_6_0= ruleJavaIdentifier ) ) ) | (otherlv_7= 'ApplicationPart' ( (lv_name_8_0= RULE_ID ) ) otherlv_9= '{' ) ) ( ( (lv_services_10_0= ruleService ) ) | ( (lv_resources_11_0= ruleResource ) ) | ( (lv_consumers_12_0= ruleConsumer ) ) | ( (lv_domainObjects_13_0= ruleSimpleDomainObject ) ) )* otherlv_14= '}' ) ;
    public final EObject ruleApplication() throws RecognitionException {
        EObject current = null;

        Token lv_doc_0_0=null;
        Token otherlv_1=null;
        Token lv_name_2_0=null;
        Token otherlv_3=null;
        Token otherlv_4=null;
        Token otherlv_5=null;
        Token otherlv_7=null;
        Token lv_name_8_0=null;
        Token otherlv_9=null;
        Token otherlv_14=null;
        AntlrDatatypeRuleToken lv_basePackage_6_0 = null;

        EObject lv_services_10_0 = null;

        EObject lv_resources_11_0 = null;

        EObject lv_consumers_12_0 = null;

        EObject lv_domainObjects_13_0 = null;



        	enterRule();

        try {
            // InternalContextMappingDSL.g:4752:2: ( ( ( (lv_doc_0_0= RULE_STRING ) )? ( (otherlv_1= 'Application' ( (lv_name_2_0= RULE_ID ) ) otherlv_3= '{' otherlv_4= 'basePackage' otherlv_5= '=' ( (lv_basePackage_6_0= ruleJavaIdentifier ) ) ) | (otherlv_7= 'ApplicationPart' ( (lv_name_8_0= RULE_ID ) ) otherlv_9= '{' ) ) ( ( (lv_services_10_0= ruleService ) ) | ( (lv_resources_11_0= ruleResource ) ) | ( (lv_consumers_12_0= ruleConsumer ) ) | ( (lv_domainObjects_13_0= ruleSimpleDomainObject ) ) )* otherlv_14= '}' ) )
            // InternalContextMappingDSL.g:4753:2: ( ( (lv_doc_0_0= RULE_STRING ) )? ( (otherlv_1= 'Application' ( (lv_name_2_0= RULE_ID ) ) otherlv_3= '{' otherlv_4= 'basePackage' otherlv_5= '=' ( (lv_basePackage_6_0= ruleJavaIdentifier ) ) ) | (otherlv_7= 'ApplicationPart' ( (lv_name_8_0= RULE_ID ) ) otherlv_9= '{' ) ) ( ( (lv_services_10_0= ruleService ) ) | ( (lv_resources_11_0= ruleResource ) ) | ( (lv_consumers_12_0= ruleConsumer ) ) | ( (lv_domainObjects_13_0= ruleSimpleDomainObject ) ) )* otherlv_14= '}' )
            {
            // InternalContextMappingDSL.g:4753:2: ( ( (lv_doc_0_0= RULE_STRING ) )? ( (otherlv_1= 'Application' ( (lv_name_2_0= RULE_ID ) ) otherlv_3= '{' otherlv_4= 'basePackage' otherlv_5= '=' ( (lv_basePackage_6_0= ruleJavaIdentifier ) ) ) | (otherlv_7= 'ApplicationPart' ( (lv_name_8_0= RULE_ID ) ) otherlv_9= '{' ) ) ( ( (lv_services_10_0= ruleService ) ) | ( (lv_resources_11_0= ruleResource ) ) | ( (lv_consumers_12_0= ruleConsumer ) ) | ( (lv_domainObjects_13_0= ruleSimpleDomainObject ) ) )* otherlv_14= '}' )
            // InternalContextMappingDSL.g:4754:3: ( (lv_doc_0_0= RULE_STRING ) )? ( (otherlv_1= 'Application' ( (lv_name_2_0= RULE_ID ) ) otherlv_3= '{' otherlv_4= 'basePackage' otherlv_5= '=' ( (lv_basePackage_6_0= ruleJavaIdentifier ) ) ) | (otherlv_7= 'ApplicationPart' ( (lv_name_8_0= RULE_ID ) ) otherlv_9= '{' ) ) ( ( (lv_services_10_0= ruleService ) ) | ( (lv_resources_11_0= ruleResource ) ) | ( (lv_consumers_12_0= ruleConsumer ) ) | ( (lv_domainObjects_13_0= ruleSimpleDomainObject ) ) )* otherlv_14= '}'
            {
            // InternalContextMappingDSL.g:4754:3: ( (lv_doc_0_0= RULE_STRING ) )?
            int alt140=2;
            int LA140_0 = input.LA(1);

            if ( (LA140_0==RULE_STRING) ) {
                alt140=1;
            }
            switch (alt140) {
                case 1 :
                    // InternalContextMappingDSL.g:4755:4: (lv_doc_0_0= RULE_STRING )
                    {
                    // InternalContextMappingDSL.g:4755:4: (lv_doc_0_0= RULE_STRING )
                    // InternalContextMappingDSL.g:4756:5: lv_doc_0_0= RULE_STRING
                    {
                    lv_doc_0_0=(Token)match(input,RULE_STRING,FOLLOW_84); 

                    					newLeafNode(lv_doc_0_0, grammarAccess.getApplicationAccess().getDocSTRINGTerminalRuleCall_0_0());
                    				

                    					if (current==null) {
                    						current = createModelElement(grammarAccess.getApplicationRule());
                    					}
                    					setWithLastConsumed(
                    						current,
                    						"doc",
                    						lv_doc_0_0,
                    						"org.eclipse.xtext.common.Terminals.STRING");
                    				

                    }


                    }
                    break;

            }

            // InternalContextMappingDSL.g:4772:3: ( (otherlv_1= 'Application' ( (lv_name_2_0= RULE_ID ) ) otherlv_3= '{' otherlv_4= 'basePackage' otherlv_5= '=' ( (lv_basePackage_6_0= ruleJavaIdentifier ) ) ) | (otherlv_7= 'ApplicationPart' ( (lv_name_8_0= RULE_ID ) ) otherlv_9= '{' ) )
            int alt141=2;
            int LA141_0 = input.LA(1);

            if ( (LA141_0==68) ) {
                alt141=1;
            }
            else if ( (LA141_0==69) ) {
                alt141=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 141, 0, input);

                throw nvae;
            }
            switch (alt141) {
                case 1 :
                    // InternalContextMappingDSL.g:4773:4: (otherlv_1= 'Application' ( (lv_name_2_0= RULE_ID ) ) otherlv_3= '{' otherlv_4= 'basePackage' otherlv_5= '=' ( (lv_basePackage_6_0= ruleJavaIdentifier ) ) )
                    {
                    // InternalContextMappingDSL.g:4773:4: (otherlv_1= 'Application' ( (lv_name_2_0= RULE_ID ) ) otherlv_3= '{' otherlv_4= 'basePackage' otherlv_5= '=' ( (lv_basePackage_6_0= ruleJavaIdentifier ) ) )
                    // InternalContextMappingDSL.g:4774:5: otherlv_1= 'Application' ( (lv_name_2_0= RULE_ID ) ) otherlv_3= '{' otherlv_4= 'basePackage' otherlv_5= '=' ( (lv_basePackage_6_0= ruleJavaIdentifier ) )
                    {
                    otherlv_1=(Token)match(input,68,FOLLOW_10); 

                    					newLeafNode(otherlv_1, grammarAccess.getApplicationAccess().getApplicationKeyword_1_0_0());
                    				
                    // InternalContextMappingDSL.g:4778:5: ( (lv_name_2_0= RULE_ID ) )
                    // InternalContextMappingDSL.g:4779:6: (lv_name_2_0= RULE_ID )
                    {
                    // InternalContextMappingDSL.g:4779:6: (lv_name_2_0= RULE_ID )
                    // InternalContextMappingDSL.g:4780:7: lv_name_2_0= RULE_ID
                    {
                    lv_name_2_0=(Token)match(input,RULE_ID,FOLLOW_6); 

                    							newLeafNode(lv_name_2_0, grammarAccess.getApplicationAccess().getNameIDTerminalRuleCall_1_0_1_0());
                    						

                    							if (current==null) {
                    								current = createModelElement(grammarAccess.getApplicationRule());
                    							}
                    							setWithLastConsumed(
                    								current,
                    								"name",
                    								lv_name_2_0,
                    								"org.eclipse.xtext.common.Terminals.ID");
                    						

                    }


                    }

                    otherlv_3=(Token)match(input,RULE_OPEN,FOLLOW_85); 

                    					newLeafNode(otherlv_3, grammarAccess.getApplicationAccess().getLeftCurlyBracketKeyword_1_0_2());
                    				
                    otherlv_4=(Token)match(input,66,FOLLOW_81); 

                    					newLeafNode(otherlv_4, grammarAccess.getApplicationAccess().getBasePackageKeyword_1_0_3());
                    				
                    otherlv_5=(Token)match(input,21,FOLLOW_10); 

                    					newLeafNode(otherlv_5, grammarAccess.getApplicationAccess().getEqualsSignKeyword_1_0_4());
                    				
                    // InternalContextMappingDSL.g:4808:5: ( (lv_basePackage_6_0= ruleJavaIdentifier ) )
                    // InternalContextMappingDSL.g:4809:6: (lv_basePackage_6_0= ruleJavaIdentifier )
                    {
                    // InternalContextMappingDSL.g:4809:6: (lv_basePackage_6_0= ruleJavaIdentifier )
                    // InternalContextMappingDSL.g:4810:7: lv_basePackage_6_0= ruleJavaIdentifier
                    {

                    							newCompositeNode(grammarAccess.getApplicationAccess().getBasePackageJavaIdentifierParserRuleCall_1_0_5_0());
                    						
                    pushFollow(FOLLOW_72);
                    lv_basePackage_6_0=ruleJavaIdentifier();

                    state._fsp--;


                    							if (current==null) {
                    								current = createModelElementForParent(grammarAccess.getApplicationRule());
                    							}
                    							set(
                    								current,
                    								"basePackage",
                    								lv_basePackage_6_0,
                    								"org.contextmapper.tactic.dsl.TacticDDDLanguage.JavaIdentifier");
                    							afterParserOrEnumRuleCall();
                    						

                    }


                    }


                    }


                    }
                    break;
                case 2 :
                    // InternalContextMappingDSL.g:4829:4: (otherlv_7= 'ApplicationPart' ( (lv_name_8_0= RULE_ID ) ) otherlv_9= '{' )
                    {
                    // InternalContextMappingDSL.g:4829:4: (otherlv_7= 'ApplicationPart' ( (lv_name_8_0= RULE_ID ) ) otherlv_9= '{' )
                    // InternalContextMappingDSL.g:4830:5: otherlv_7= 'ApplicationPart' ( (lv_name_8_0= RULE_ID ) ) otherlv_9= '{'
                    {
                    otherlv_7=(Token)match(input,69,FOLLOW_10); 

                    					newLeafNode(otherlv_7, grammarAccess.getApplicationAccess().getApplicationPartKeyword_1_1_0());
                    				
                    // InternalContextMappingDSL.g:4834:5: ( (lv_name_8_0= RULE_ID ) )
                    // InternalContextMappingDSL.g:4835:6: (lv_name_8_0= RULE_ID )
                    {
                    // InternalContextMappingDSL.g:4835:6: (lv_name_8_0= RULE_ID )
                    // InternalContextMappingDSL.g:4836:7: lv_name_8_0= RULE_ID
                    {
                    lv_name_8_0=(Token)match(input,RULE_ID,FOLLOW_6); 

                    							newLeafNode(lv_name_8_0, grammarAccess.getApplicationAccess().getNameIDTerminalRuleCall_1_1_1_0());
                    						

                    							if (current==null) {
                    								current = createModelElement(grammarAccess.getApplicationRule());
                    							}
                    							setWithLastConsumed(
                    								current,
                    								"name",
                    								lv_name_8_0,
                    								"org.eclipse.xtext.common.Terminals.ID");
                    						

                    }


                    }

                    otherlv_9=(Token)match(input,RULE_OPEN,FOLLOW_72); 

                    					newLeafNode(otherlv_9, grammarAccess.getApplicationAccess().getLeftCurlyBracketKeyword_1_1_2());
                    				

                    }


                    }
                    break;

            }

            // InternalContextMappingDSL.g:4858:3: ( ( (lv_services_10_0= ruleService ) ) | ( (lv_resources_11_0= ruleResource ) ) | ( (lv_consumers_12_0= ruleConsumer ) ) | ( (lv_domainObjects_13_0= ruleSimpleDomainObject ) ) )*
            loop142:
            do {
                int alt142=5;
                switch ( input.LA(1) ) {
                case RULE_STRING:
                    {
                    switch ( input.LA(2) ) {
                    case 105:
                    case 106:
                    case 121:
                    case 124:
                    case 125:
                    case 126:
                    case 129:
                    case 130:
                    case 168:
                        {
                        alt142=4;
                        }
                        break;
                    case 74:
                        {
                        alt142=2;
                        }
                        break;
                    case 70:
                        {
                        alt142=1;
                        }
                        break;
                    case 77:
                        {
                        alt142=3;
                        }
                        break;

                    }

                    }
                    break;
                case 70:
                    {
                    alt142=1;
                    }
                    break;
                case 74:
                    {
                    alt142=2;
                    }
                    break;
                case 77:
                    {
                    alt142=3;
                    }
                    break;
                case RULE_SL_COMMENT:
                case 105:
                case 106:
                case 121:
                case 124:
                case 125:
                case 126:
                case 129:
                case 130:
                case 168:
                    {
                    alt142=4;
                    }
                    break;

                }

                switch (alt142) {
            	case 1 :
            	    // InternalContextMappingDSL.g:4859:4: ( (lv_services_10_0= ruleService ) )
            	    {
            	    // InternalContextMappingDSL.g:4859:4: ( (lv_services_10_0= ruleService ) )
            	    // InternalContextMappingDSL.g:4860:5: (lv_services_10_0= ruleService )
            	    {
            	    // InternalContextMappingDSL.g:4860:5: (lv_services_10_0= ruleService )
            	    // InternalContextMappingDSL.g:4861:6: lv_services_10_0= ruleService
            	    {

            	    						newCompositeNode(grammarAccess.getApplicationAccess().getServicesServiceParserRuleCall_2_0_0());
            	    					
            	    pushFollow(FOLLOW_72);
            	    lv_services_10_0=ruleService();

            	    state._fsp--;


            	    						if (current==null) {
            	    							current = createModelElementForParent(grammarAccess.getApplicationRule());
            	    						}
            	    						add(
            	    							current,
            	    							"services",
            	    							lv_services_10_0,
            	    							"org.contextmapper.tactic.dsl.TacticDDDLanguage.Service");
            	    						afterParserOrEnumRuleCall();
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 2 :
            	    // InternalContextMappingDSL.g:4879:4: ( (lv_resources_11_0= ruleResource ) )
            	    {
            	    // InternalContextMappingDSL.g:4879:4: ( (lv_resources_11_0= ruleResource ) )
            	    // InternalContextMappingDSL.g:4880:5: (lv_resources_11_0= ruleResource )
            	    {
            	    // InternalContextMappingDSL.g:4880:5: (lv_resources_11_0= ruleResource )
            	    // InternalContextMappingDSL.g:4881:6: lv_resources_11_0= ruleResource
            	    {

            	    						newCompositeNode(grammarAccess.getApplicationAccess().getResourcesResourceParserRuleCall_2_1_0());
            	    					
            	    pushFollow(FOLLOW_72);
            	    lv_resources_11_0=ruleResource();

            	    state._fsp--;


            	    						if (current==null) {
            	    							current = createModelElementForParent(grammarAccess.getApplicationRule());
            	    						}
            	    						add(
            	    							current,
            	    							"resources",
            	    							lv_resources_11_0,
            	    							"org.contextmapper.tactic.dsl.TacticDDDLanguage.Resource");
            	    						afterParserOrEnumRuleCall();
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 3 :
            	    // InternalContextMappingDSL.g:4899:4: ( (lv_consumers_12_0= ruleConsumer ) )
            	    {
            	    // InternalContextMappingDSL.g:4899:4: ( (lv_consumers_12_0= ruleConsumer ) )
            	    // InternalContextMappingDSL.g:4900:5: (lv_consumers_12_0= ruleConsumer )
            	    {
            	    // InternalContextMappingDSL.g:4900:5: (lv_consumers_12_0= ruleConsumer )
            	    // InternalContextMappingDSL.g:4901:6: lv_consumers_12_0= ruleConsumer
            	    {

            	    						newCompositeNode(grammarAccess.getApplicationAccess().getConsumersConsumerParserRuleCall_2_2_0());
            	    					
            	    pushFollow(FOLLOW_72);
            	    lv_consumers_12_0=ruleConsumer();

            	    state._fsp--;


            	    						if (current==null) {
            	    							current = createModelElementForParent(grammarAccess.getApplicationRule());
            	    						}
            	    						add(
            	    							current,
            	    							"consumers",
            	    							lv_consumers_12_0,
            	    							"org.contextmapper.tactic.dsl.TacticDDDLanguage.Consumer");
            	    						afterParserOrEnumRuleCall();
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 4 :
            	    // InternalContextMappingDSL.g:4919:4: ( (lv_domainObjects_13_0= ruleSimpleDomainObject ) )
            	    {
            	    // InternalContextMappingDSL.g:4919:4: ( (lv_domainObjects_13_0= ruleSimpleDomainObject ) )
            	    // InternalContextMappingDSL.g:4920:5: (lv_domainObjects_13_0= ruleSimpleDomainObject )
            	    {
            	    // InternalContextMappingDSL.g:4920:5: (lv_domainObjects_13_0= ruleSimpleDomainObject )
            	    // InternalContextMappingDSL.g:4921:6: lv_domainObjects_13_0= ruleSimpleDomainObject
            	    {

            	    						newCompositeNode(grammarAccess.getApplicationAccess().getDomainObjectsSimpleDomainObjectParserRuleCall_2_3_0());
            	    					
            	    pushFollow(FOLLOW_72);
            	    lv_domainObjects_13_0=ruleSimpleDomainObject();

            	    state._fsp--;


            	    						if (current==null) {
            	    							current = createModelElementForParent(grammarAccess.getApplicationRule());
            	    						}
            	    						add(
            	    							current,
            	    							"domainObjects",
            	    							lv_domainObjects_13_0,
            	    							"org.contextmapper.tactic.dsl.TacticDDDLanguage.SimpleDomainObject");
            	    						afterParserOrEnumRuleCall();
            	    					

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop142;
                }
            } while (true);

            otherlv_14=(Token)match(input,RULE_CLOSE,FOLLOW_2); 

            			newLeafNode(otherlv_14, grammarAccess.getApplicationAccess().getRightCurlyBracketKeyword_3());
            		

            }


            }


            	leaveRule();

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleApplication"


    // $ANTLR start "entryRuleService"
    // InternalContextMappingDSL.g:4947:1: entryRuleService returns [EObject current=null] : iv_ruleService= ruleService EOF ;
    public final EObject entryRuleService() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleService = null;


        try {
            // InternalContextMappingDSL.g:4947:48: (iv_ruleService= ruleService EOF )
            // InternalContextMappingDSL.g:4948:2: iv_ruleService= ruleService EOF
            {
             newCompositeNode(grammarAccess.getServiceRule()); 
            pushFollow(FOLLOW_1);
            iv_ruleService=ruleService();

            state._fsp--;

             current =iv_ruleService; 
            match(input,EOF,FOLLOW_2); 

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleService"


    // $ANTLR start "ruleService"
    // InternalContextMappingDSL.g:4954:1: ruleService returns [EObject current=null] : ( ( (lv_doc_0_0= RULE_STRING ) )? otherlv_1= 'Service' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= '{' ( ( ( ( ({...}? => ( ({...}? => ( ( (lv_gapClass_5_0= 'gap' ) ) | ( (lv_noGapClass_6_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_webService_10_0= 'webservice' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_subscribe_11_0= ruleSubscribe ) ) ) ) ) )* ) ) ) ( (lv_dependencies_12_0= ruleDependency ) )* ( (lv_operations_13_0= ruleServiceOperation ) )* otherlv_14= '}' )? ) ;
    public final EObject ruleService() throws RecognitionException {
        EObject current = null;

        Token lv_doc_0_0=null;
        Token otherlv_1=null;
        Token lv_name_2_0=null;
        Token otherlv_3=null;
        Token lv_gapClass_5_0=null;
        Token lv_noGapClass_6_0=null;
        Token otherlv_7=null;
        Token otherlv_8=null;
        Token lv_hint_9_0=null;
        Token lv_webService_10_0=null;
        Token otherlv_14=null;
        EObject lv_subscribe_11_0 = null;

        EObject lv_dependencies_12_0 = null;

        EObject lv_operations_13_0 = null;



        	enterRule();

        try {
            // InternalContextMappingDSL.g:4960:2: ( ( ( (lv_doc_0_0= RULE_STRING ) )? otherlv_1= 'Service' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= '{' ( ( ( ( ({...}? => ( ({...}? => ( ( (lv_gapClass_5_0= 'gap' ) ) | ( (lv_noGapClass_6_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_webService_10_0= 'webservice' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_subscribe_11_0= ruleSubscribe ) ) ) ) ) )* ) ) ) ( (lv_dependencies_12_0= ruleDependency ) )* ( (lv_operations_13_0= ruleServiceOperation ) )* otherlv_14= '}' )? ) )
            // InternalContextMappingDSL.g:4961:2: ( ( (lv_doc_0_0= RULE_STRING ) )? otherlv_1= 'Service' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= '{' ( ( ( ( ({...}? => ( ({...}? => ( ( (lv_gapClass_5_0= 'gap' ) ) | ( (lv_noGapClass_6_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_webService_10_0= 'webservice' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_subscribe_11_0= ruleSubscribe ) ) ) ) ) )* ) ) ) ( (lv_dependencies_12_0= ruleDependency ) )* ( (lv_operations_13_0= ruleServiceOperation ) )* otherlv_14= '}' )? )
            {
            // InternalContextMappingDSL.g:4961:2: ( ( (lv_doc_0_0= RULE_STRING ) )? otherlv_1= 'Service' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= '{' ( ( ( ( ({...}? => ( ({...}? => ( ( (lv_gapClass_5_0= 'gap' ) ) | ( (lv_noGapClass_6_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_webService_10_0= 'webservice' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_subscribe_11_0= ruleSubscribe ) ) ) ) ) )* ) ) ) ( (lv_dependencies_12_0= ruleDependency ) )* ( (lv_operations_13_0= ruleServiceOperation ) )* otherlv_14= '}' )? )
            // InternalContextMappingDSL.g:4962:3: ( (lv_doc_0_0= RULE_STRING ) )? otherlv_1= 'Service' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= '{' ( ( ( ( ({...}? => ( ({...}? => ( ( (lv_gapClass_5_0= 'gap' ) ) | ( (lv_noGapClass_6_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_webService_10_0= 'webservice' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_subscribe_11_0= ruleSubscribe ) ) ) ) ) )* ) ) ) ( (lv_dependencies_12_0= ruleDependency ) )* ( (lv_operations_13_0= ruleServiceOperation ) )* otherlv_14= '}' )?
            {
            // InternalContextMappingDSL.g:4962:3: ( (lv_doc_0_0= RULE_STRING ) )?
            int alt143=2;
            int LA143_0 = input.LA(1);

            if ( (LA143_0==RULE_STRING) ) {
                alt143=1;
            }
            switch (alt143) {
                case 1 :
                    // InternalContextMappingDSL.g:4963:4: (lv_doc_0_0= RULE_STRING )
                    {
                    // InternalContextMappingDSL.g:4963:4: (lv_doc_0_0= RULE_STRING )
                    // InternalContextMappingDSL.g:4964:5: lv_doc_0_0= RULE_STRING
                    {
                    lv_doc_0_0=(Token)match(input,RULE_STRING,FOLLOW_86); 

                    					newLeafNode(lv_doc_0_0, grammarAccess.getServiceAccess().getDocSTRINGTerminalRuleCall_0_0());
                    				

                    					if (current==null) {
                    						current = createModelElement(grammarAccess.getServiceRule());
                    					}
                    					setWithLastConsumed(
                    						current,
                    						"doc",
                    						lv_doc_0_0,
                    						"org.eclipse.xtext.common.Terminals.STRING");
                    				

                    }


                    }
                    break;

            }

            otherlv_1=(Token)match(input,70,FOLLOW_10); 

            			newLeafNode(otherlv_1, grammarAccess.getServiceAccess().getServiceKeyword_1());
            		
            // InternalContextMappingDSL.g:4984:3: ( (lv_name_2_0= RULE_ID ) )
            // InternalContextMappingDSL.g:4985:4: (lv_name_2_0= RULE_ID )
            {
            // InternalContextMappingDSL.g:4985:4: (lv_name_2_0= RULE_ID )
            // InternalContextMappingDSL.g:4986:5: lv_name_2_0= RULE_ID
            {
            lv_name_2_0=(Token)match(input,RULE_ID,FOLLOW_23); 

            					newLeafNode(lv_name_2_0, grammarAccess.getServiceAccess().getNameIDTerminalRuleCall_2_0());
            				

            					if (current==null) {
            						current = createModelElement(grammarAccess.getServiceRule());
            					}
            					setWithLastConsumed(
            						current,
            						"name",
            						lv_name_2_0,
            						"org.eclipse.xtext.common.Terminals.ID");
            				

            }


            }

            // InternalContextMappingDSL.g:5002:3: (otherlv_3= '{' ( ( ( ( ({...}? => ( ({...}? => ( ( (lv_gapClass_5_0= 'gap' ) ) | ( (lv_noGapClass_6_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_webService_10_0= 'webservice' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_subscribe_11_0= ruleSubscribe ) ) ) ) ) )* ) ) ) ( (lv_dependencies_12_0= ruleDependency ) )* ( (lv_operations_13_0= ruleServiceOperation ) )* otherlv_14= '}' )?
            int alt148=2;
            int LA148_0 = input.LA(1);

            if ( (LA148_0==RULE_OPEN) ) {
                alt148=1;
            }
            switch (alt148) {
                case 1 :
                    // InternalContextMappingDSL.g:5003:4: otherlv_3= '{' ( ( ( ( ({...}? => ( ({...}? => ( ( (lv_gapClass_5_0= 'gap' ) ) | ( (lv_noGapClass_6_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_webService_10_0= 'webservice' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_subscribe_11_0= ruleSubscribe ) ) ) ) ) )* ) ) ) ( (lv_dependencies_12_0= ruleDependency ) )* ( (lv_operations_13_0= ruleServiceOperation ) )* otherlv_14= '}'
                    {
                    otherlv_3=(Token)match(input,RULE_OPEN,FOLLOW_87); 

                    				newLeafNode(otherlv_3, grammarAccess.getServiceAccess().getLeftCurlyBracketKeyword_3_0());
                    			
                    // InternalContextMappingDSL.g:5007:4: ( ( ( ( ({...}? => ( ({...}? => ( ( (lv_gapClass_5_0= 'gap' ) ) | ( (lv_noGapClass_6_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_webService_10_0= 'webservice' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_subscribe_11_0= ruleSubscribe ) ) ) ) ) )* ) ) )
                    // InternalContextMappingDSL.g:5008:5: ( ( ( ({...}? => ( ({...}? => ( ( (lv_gapClass_5_0= 'gap' ) ) | ( (lv_noGapClass_6_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_webService_10_0= 'webservice' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_subscribe_11_0= ruleSubscribe ) ) ) ) ) )* ) )
                    {
                    // InternalContextMappingDSL.g:5008:5: ( ( ( ({...}? => ( ({...}? => ( ( (lv_gapClass_5_0= 'gap' ) ) | ( (lv_noGapClass_6_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_webService_10_0= 'webservice' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_subscribe_11_0= ruleSubscribe ) ) ) ) ) )* ) )
                    // InternalContextMappingDSL.g:5009:6: ( ( ({...}? => ( ({...}? => ( ( (lv_gapClass_5_0= 'gap' ) ) | ( (lv_noGapClass_6_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_webService_10_0= 'webservice' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_subscribe_11_0= ruleSubscribe ) ) ) ) ) )* )
                    {
                     
                    					  getUnorderedGroupHelper().enter(grammarAccess.getServiceAccess().getUnorderedGroup_3_1());
                    					
                    // InternalContextMappingDSL.g:5012:6: ( ( ({...}? => ( ({...}? => ( ( (lv_gapClass_5_0= 'gap' ) ) | ( (lv_noGapClass_6_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_webService_10_0= 'webservice' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_subscribe_11_0= ruleSubscribe ) ) ) ) ) )* )
                    // InternalContextMappingDSL.g:5013:7: ( ({...}? => ( ({...}? => ( ( (lv_gapClass_5_0= 'gap' ) ) | ( (lv_noGapClass_6_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_webService_10_0= 'webservice' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_subscribe_11_0= ruleSubscribe ) ) ) ) ) )*
                    {
                    // InternalContextMappingDSL.g:5013:7: ( ({...}? => ( ({...}? => ( ( (lv_gapClass_5_0= 'gap' ) ) | ( (lv_noGapClass_6_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_webService_10_0= 'webservice' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_subscribe_11_0= ruleSubscribe ) ) ) ) ) )*
                    loop145:
                    do {
                        int alt145=5;
                        int LA145_0 = input.LA(1);

                        if ( LA145_0 >= 71 && LA145_0 <= 72 && getUnorderedGroupHelper().canSelect(grammarAccess.getServiceAccess().getUnorderedGroup_3_1(), 0) ) {
                            alt145=1;
                        }
                        else if ( LA145_0 == 67 && getUnorderedGroupHelper().canSelect(grammarAccess.getServiceAccess().getUnorderedGroup_3_1(), 1) ) {
                            alt145=2;
                        }
                        else if ( LA145_0 == 73 && getUnorderedGroupHelper().canSelect(grammarAccess.getServiceAccess().getUnorderedGroup_3_1(), 2) ) {
                            alt145=3;
                        }
                        else if ( LA145_0 == 82 && getUnorderedGroupHelper().canSelect(grammarAccess.getServiceAccess().getUnorderedGroup_3_1(), 3) ) {
                            alt145=4;
                        }


                        switch (alt145) {
                    	case 1 :
                    	    // InternalContextMappingDSL.g:5014:5: ({...}? => ( ({...}? => ( ( (lv_gapClass_5_0= 'gap' ) ) | ( (lv_noGapClass_6_0= 'nogap' ) ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:5014:5: ({...}? => ( ({...}? => ( ( (lv_gapClass_5_0= 'gap' ) ) | ( (lv_noGapClass_6_0= 'nogap' ) ) ) ) ) )
                    	    // InternalContextMappingDSL.g:5015:6: {...}? => ( ({...}? => ( ( (lv_gapClass_5_0= 'gap' ) ) | ( (lv_noGapClass_6_0= 'nogap' ) ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getServiceAccess().getUnorderedGroup_3_1(), 0) ) {
                    	        throw new FailedPredicateException(input, "ruleService", "getUnorderedGroupHelper().canSelect(grammarAccess.getServiceAccess().getUnorderedGroup_3_1(), 0)");
                    	    }
                    	    // InternalContextMappingDSL.g:5015:107: ( ({...}? => ( ( (lv_gapClass_5_0= 'gap' ) ) | ( (lv_noGapClass_6_0= 'nogap' ) ) ) ) )
                    	    // InternalContextMappingDSL.g:5016:7: ({...}? => ( ( (lv_gapClass_5_0= 'gap' ) ) | ( (lv_noGapClass_6_0= 'nogap' ) ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getServiceAccess().getUnorderedGroup_3_1(), 0);
                    	    						
                    	    // InternalContextMappingDSL.g:5019:10: ({...}? => ( ( (lv_gapClass_5_0= 'gap' ) ) | ( (lv_noGapClass_6_0= 'nogap' ) ) ) )
                    	    // InternalContextMappingDSL.g:5019:11: {...}? => ( ( (lv_gapClass_5_0= 'gap' ) ) | ( (lv_noGapClass_6_0= 'nogap' ) ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleService", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:5019:20: ( ( (lv_gapClass_5_0= 'gap' ) ) | ( (lv_noGapClass_6_0= 'nogap' ) ) )
                    	    int alt144=2;
                    	    int LA144_0 = input.LA(1);

                    	    if ( (LA144_0==71) ) {
                    	        alt144=1;
                    	    }
                    	    else if ( (LA144_0==72) ) {
                    	        alt144=2;
                    	    }
                    	    else {
                    	        NoViableAltException nvae =
                    	            new NoViableAltException("", 144, 0, input);

                    	        throw nvae;
                    	    }
                    	    switch (alt144) {
                    	        case 1 :
                    	            // InternalContextMappingDSL.g:5019:21: ( (lv_gapClass_5_0= 'gap' ) )
                    	            {
                    	            // InternalContextMappingDSL.g:5019:21: ( (lv_gapClass_5_0= 'gap' ) )
                    	            // InternalContextMappingDSL.g:5020:11: (lv_gapClass_5_0= 'gap' )
                    	            {
                    	            // InternalContextMappingDSL.g:5020:11: (lv_gapClass_5_0= 'gap' )
                    	            // InternalContextMappingDSL.g:5021:12: lv_gapClass_5_0= 'gap'
                    	            {
                    	            lv_gapClass_5_0=(Token)match(input,71,FOLLOW_87); 

                    	            												newLeafNode(lv_gapClass_5_0, grammarAccess.getServiceAccess().getGapClassGapKeyword_3_1_0_0_0());
                    	            											

                    	            												if (current==null) {
                    	            													current = createModelElement(grammarAccess.getServiceRule());
                    	            												}
                    	            												setWithLastConsumed(current, "gapClass", true, "gap");
                    	            											

                    	            }


                    	            }


                    	            }
                    	            break;
                    	        case 2 :
                    	            // InternalContextMappingDSL.g:5034:10: ( (lv_noGapClass_6_0= 'nogap' ) )
                    	            {
                    	            // InternalContextMappingDSL.g:5034:10: ( (lv_noGapClass_6_0= 'nogap' ) )
                    	            // InternalContextMappingDSL.g:5035:11: (lv_noGapClass_6_0= 'nogap' )
                    	            {
                    	            // InternalContextMappingDSL.g:5035:11: (lv_noGapClass_6_0= 'nogap' )
                    	            // InternalContextMappingDSL.g:5036:12: lv_noGapClass_6_0= 'nogap'
                    	            {
                    	            lv_noGapClass_6_0=(Token)match(input,72,FOLLOW_87); 

                    	            												newLeafNode(lv_noGapClass_6_0, grammarAccess.getServiceAccess().getNoGapClassNogapKeyword_3_1_0_1_0());
                    	            											

                    	            												if (current==null) {
                    	            													current = createModelElement(grammarAccess.getServiceRule());
                    	            												}
                    	            												setWithLastConsumed(current, "noGapClass", true, "nogap");
                    	            											

                    	            }


                    	            }


                    	            }
                    	            break;

                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getServiceAccess().getUnorderedGroup_3_1());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 2 :
                    	    // InternalContextMappingDSL.g:5054:5: ({...}? => ( ({...}? => (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:5054:5: ({...}? => ( ({...}? => (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) ) ) ) )
                    	    // InternalContextMappingDSL.g:5055:6: {...}? => ( ({...}? => (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getServiceAccess().getUnorderedGroup_3_1(), 1) ) {
                    	        throw new FailedPredicateException(input, "ruleService", "getUnorderedGroupHelper().canSelect(grammarAccess.getServiceAccess().getUnorderedGroup_3_1(), 1)");
                    	    }
                    	    // InternalContextMappingDSL.g:5055:107: ( ({...}? => (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) ) ) )
                    	    // InternalContextMappingDSL.g:5056:7: ({...}? => (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getServiceAccess().getUnorderedGroup_3_1(), 1);
                    	    						
                    	    // InternalContextMappingDSL.g:5059:10: ({...}? => (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) ) )
                    	    // InternalContextMappingDSL.g:5059:11: {...}? => (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleService", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:5059:20: (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) )
                    	    // InternalContextMappingDSL.g:5059:21: otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) )
                    	    {
                    	    otherlv_7=(Token)match(input,67,FOLLOW_81); 

                    	    										newLeafNode(otherlv_7, grammarAccess.getServiceAccess().getHintKeyword_3_1_1_0());
                    	    									
                    	    otherlv_8=(Token)match(input,21,FOLLOW_4); 

                    	    										newLeafNode(otherlv_8, grammarAccess.getServiceAccess().getEqualsSignKeyword_3_1_1_1());
                    	    									
                    	    // InternalContextMappingDSL.g:5067:10: ( (lv_hint_9_0= RULE_STRING ) )
                    	    // InternalContextMappingDSL.g:5068:11: (lv_hint_9_0= RULE_STRING )
                    	    {
                    	    // InternalContextMappingDSL.g:5068:11: (lv_hint_9_0= RULE_STRING )
                    	    // InternalContextMappingDSL.g:5069:12: lv_hint_9_0= RULE_STRING
                    	    {
                    	    lv_hint_9_0=(Token)match(input,RULE_STRING,FOLLOW_87); 

                    	    												newLeafNode(lv_hint_9_0, grammarAccess.getServiceAccess().getHintSTRINGTerminalRuleCall_3_1_1_2_0());
                    	    											

                    	    												if (current==null) {
                    	    													current = createModelElement(grammarAccess.getServiceRule());
                    	    												}
                    	    												setWithLastConsumed(
                    	    													current,
                    	    													"hint",
                    	    													lv_hint_9_0,
                    	    													"org.eclipse.xtext.common.Terminals.STRING");
                    	    											

                    	    }


                    	    }


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getServiceAccess().getUnorderedGroup_3_1());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 3 :
                    	    // InternalContextMappingDSL.g:5091:5: ({...}? => ( ({...}? => ( (lv_webService_10_0= 'webservice' ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:5091:5: ({...}? => ( ({...}? => ( (lv_webService_10_0= 'webservice' ) ) ) ) )
                    	    // InternalContextMappingDSL.g:5092:6: {...}? => ( ({...}? => ( (lv_webService_10_0= 'webservice' ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getServiceAccess().getUnorderedGroup_3_1(), 2) ) {
                    	        throw new FailedPredicateException(input, "ruleService", "getUnorderedGroupHelper().canSelect(grammarAccess.getServiceAccess().getUnorderedGroup_3_1(), 2)");
                    	    }
                    	    // InternalContextMappingDSL.g:5092:107: ( ({...}? => ( (lv_webService_10_0= 'webservice' ) ) ) )
                    	    // InternalContextMappingDSL.g:5093:7: ({...}? => ( (lv_webService_10_0= 'webservice' ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getServiceAccess().getUnorderedGroup_3_1(), 2);
                    	    						
                    	    // InternalContextMappingDSL.g:5096:10: ({...}? => ( (lv_webService_10_0= 'webservice' ) ) )
                    	    // InternalContextMappingDSL.g:5096:11: {...}? => ( (lv_webService_10_0= 'webservice' ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleService", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:5096:20: ( (lv_webService_10_0= 'webservice' ) )
                    	    // InternalContextMappingDSL.g:5096:21: (lv_webService_10_0= 'webservice' )
                    	    {
                    	    // InternalContextMappingDSL.g:5096:21: (lv_webService_10_0= 'webservice' )
                    	    // InternalContextMappingDSL.g:5097:11: lv_webService_10_0= 'webservice'
                    	    {
                    	    lv_webService_10_0=(Token)match(input,73,FOLLOW_87); 

                    	    											newLeafNode(lv_webService_10_0, grammarAccess.getServiceAccess().getWebServiceWebserviceKeyword_3_1_2_0());
                    	    										

                    	    											if (current==null) {
                    	    												current = createModelElement(grammarAccess.getServiceRule());
                    	    											}
                    	    											setWithLastConsumed(current, "webService", true, "webservice");
                    	    										

                    	    }


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getServiceAccess().getUnorderedGroup_3_1());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 4 :
                    	    // InternalContextMappingDSL.g:5114:5: ({...}? => ( ({...}? => ( (lv_subscribe_11_0= ruleSubscribe ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:5114:5: ({...}? => ( ({...}? => ( (lv_subscribe_11_0= ruleSubscribe ) ) ) ) )
                    	    // InternalContextMappingDSL.g:5115:6: {...}? => ( ({...}? => ( (lv_subscribe_11_0= ruleSubscribe ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getServiceAccess().getUnorderedGroup_3_1(), 3) ) {
                    	        throw new FailedPredicateException(input, "ruleService", "getUnorderedGroupHelper().canSelect(grammarAccess.getServiceAccess().getUnorderedGroup_3_1(), 3)");
                    	    }
                    	    // InternalContextMappingDSL.g:5115:107: ( ({...}? => ( (lv_subscribe_11_0= ruleSubscribe ) ) ) )
                    	    // InternalContextMappingDSL.g:5116:7: ({...}? => ( (lv_subscribe_11_0= ruleSubscribe ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getServiceAccess().getUnorderedGroup_3_1(), 3);
                    	    						
                    	    // InternalContextMappingDSL.g:5119:10: ({...}? => ( (lv_subscribe_11_0= ruleSubscribe ) ) )
                    	    // InternalContextMappingDSL.g:5119:11: {...}? => ( (lv_subscribe_11_0= ruleSubscribe ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleService", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:5119:20: ( (lv_subscribe_11_0= ruleSubscribe ) )
                    	    // InternalContextMappingDSL.g:5119:21: (lv_subscribe_11_0= ruleSubscribe )
                    	    {
                    	    // InternalContextMappingDSL.g:5119:21: (lv_subscribe_11_0= ruleSubscribe )
                    	    // InternalContextMappingDSL.g:5120:11: lv_subscribe_11_0= ruleSubscribe
                    	    {

                    	    											newCompositeNode(grammarAccess.getServiceAccess().getSubscribeSubscribeParserRuleCall_3_1_3_0());
                    	    										
                    	    pushFollow(FOLLOW_87);
                    	    lv_subscribe_11_0=ruleSubscribe();

                    	    state._fsp--;


                    	    											if (current==null) {
                    	    												current = createModelElementForParent(grammarAccess.getServiceRule());
                    	    											}
                    	    											set(
                    	    												current,
                    	    												"subscribe",
                    	    												lv_subscribe_11_0,
                    	    												"org.contextmapper.tactic.dsl.TacticDDDLanguage.Subscribe");
                    	    											afterParserOrEnumRuleCall();
                    	    										

                    	    }


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getServiceAccess().getUnorderedGroup_3_1());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop145;
                        }
                    } while (true);


                    }


                    }

                     
                    					  getUnorderedGroupHelper().leave(grammarAccess.getServiceAccess().getUnorderedGroup_3_1());
                    					

                    }

                    // InternalContextMappingDSL.g:5149:4: ( (lv_dependencies_12_0= ruleDependency ) )*
                    loop146:
                    do {
                        int alt146=2;
                        int LA146_0 = input.LA(1);

                        if ( (LA146_0==104||LA146_0==167) ) {
                            alt146=1;
                        }


                        switch (alt146) {
                    	case 1 :
                    	    // InternalContextMappingDSL.g:5150:5: (lv_dependencies_12_0= ruleDependency )
                    	    {
                    	    // InternalContextMappingDSL.g:5150:5: (lv_dependencies_12_0= ruleDependency )
                    	    // InternalContextMappingDSL.g:5151:6: lv_dependencies_12_0= ruleDependency
                    	    {

                    	    						newCompositeNode(grammarAccess.getServiceAccess().getDependenciesDependencyParserRuleCall_3_2_0());
                    	    					
                    	    pushFollow(FOLLOW_88);
                    	    lv_dependencies_12_0=ruleDependency();

                    	    state._fsp--;


                    	    						if (current==null) {
                    	    							current = createModelElementForParent(grammarAccess.getServiceRule());
                    	    						}
                    	    						add(
                    	    							current,
                    	    							"dependencies",
                    	    							lv_dependencies_12_0,
                    	    							"org.contextmapper.tactic.dsl.TacticDDDLanguage.Dependency");
                    	    						afterParserOrEnumRuleCall();
                    	    					

                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop146;
                        }
                    } while (true);

                    // InternalContextMappingDSL.g:5168:4: ( (lv_operations_13_0= ruleServiceOperation ) )*
                    loop147:
                    do {
                        int alt147=2;
                        int LA147_0 = input.LA(1);

                        if ( ((LA147_0>=RULE_STRING && LA147_0<=RULE_ID)||LA147_0==RULE_MAP_COLLECTION_TYPE||LA147_0==79||LA147_0==86||LA147_0==109||(LA147_0>=170 && LA147_0<=191)||LA147_0==218||(LA147_0>=228 && LA147_0<=234)) ) {
                            alt147=1;
                        }


                        switch (alt147) {
                    	case 1 :
                    	    // InternalContextMappingDSL.g:5169:5: (lv_operations_13_0= ruleServiceOperation )
                    	    {
                    	    // InternalContextMappingDSL.g:5169:5: (lv_operations_13_0= ruleServiceOperation )
                    	    // InternalContextMappingDSL.g:5170:6: lv_operations_13_0= ruleServiceOperation
                    	    {

                    	    						newCompositeNode(grammarAccess.getServiceAccess().getOperationsServiceOperationParserRuleCall_3_3_0());
                    	    					
                    	    pushFollow(FOLLOW_89);
                    	    lv_operations_13_0=ruleServiceOperation();

                    	    state._fsp--;


                    	    						if (current==null) {
                    	    							current = createModelElementForParent(grammarAccess.getServiceRule());
                    	    						}
                    	    						add(
                    	    							current,
                    	    							"operations",
                    	    							lv_operations_13_0,
                    	    							"org.contextmapper.tactic.dsl.TacticDDDLanguage.ServiceOperation");
                    	    						afterParserOrEnumRuleCall();
                    	    					

                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop147;
                        }
                    } while (true);

                    otherlv_14=(Token)match(input,RULE_CLOSE,FOLLOW_2); 

                    				newLeafNode(otherlv_14, grammarAccess.getServiceAccess().getRightCurlyBracketKeyword_3_4());
                    			

                    }
                    break;

            }


            }


            }


            	leaveRule();

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleService"


    // $ANTLR start "entryRuleResource"
    // InternalContextMappingDSL.g:5196:1: entryRuleResource returns [EObject current=null] : iv_ruleResource= ruleResource EOF ;
    public final EObject entryRuleResource() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleResource = null;


        try {
            // InternalContextMappingDSL.g:5196:49: (iv_ruleResource= ruleResource EOF )
            // InternalContextMappingDSL.g:5197:2: iv_ruleResource= ruleResource EOF
            {
             newCompositeNode(grammarAccess.getResourceRule()); 
            pushFollow(FOLLOW_1);
            iv_ruleResource=ruleResource();

            state._fsp--;

             current =iv_ruleResource; 
            match(input,EOF,FOLLOW_2); 

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleResource"


    // $ANTLR start "ruleResource"
    // InternalContextMappingDSL.g:5203:1: ruleResource returns [EObject current=null] : ( ( (lv_doc_0_0= RULE_STRING ) )? otherlv_1= 'Resource' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= '{' ( ( ( ( ({...}? => ( ({...}? => ( ( (lv_gapClass_5_0= 'gap' ) ) | ( (lv_noGapClass_6_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_10_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_11= 'path' otherlv_12= '=' ( (lv_path_13_0= RULE_STRING ) ) ) ) ) ) )* ) ) ) ( (lv_dependencies_14_0= ruleServiceDependency ) )* ( (lv_operations_15_0= ruleResourceOperation ) )* otherlv_16= '}' )? ) ;
    public final EObject ruleResource() throws RecognitionException {
        EObject current = null;

        Token lv_doc_0_0=null;
        Token otherlv_1=null;
        Token lv_name_2_0=null;
        Token otherlv_3=null;
        Token lv_gapClass_5_0=null;
        Token lv_noGapClass_6_0=null;
        Token otherlv_7=null;
        Token otherlv_8=null;
        Token lv_hint_9_0=null;
        Token lv_scaffold_10_0=null;
        Token otherlv_11=null;
        Token otherlv_12=null;
        Token lv_path_13_0=null;
        Token otherlv_16=null;
        EObject lv_dependencies_14_0 = null;

        EObject lv_operations_15_0 = null;



        	enterRule();

        try {
            // InternalContextMappingDSL.g:5209:2: ( ( ( (lv_doc_0_0= RULE_STRING ) )? otherlv_1= 'Resource' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= '{' ( ( ( ( ({...}? => ( ({...}? => ( ( (lv_gapClass_5_0= 'gap' ) ) | ( (lv_noGapClass_6_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_10_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_11= 'path' otherlv_12= '=' ( (lv_path_13_0= RULE_STRING ) ) ) ) ) ) )* ) ) ) ( (lv_dependencies_14_0= ruleServiceDependency ) )* ( (lv_operations_15_0= ruleResourceOperation ) )* otherlv_16= '}' )? ) )
            // InternalContextMappingDSL.g:5210:2: ( ( (lv_doc_0_0= RULE_STRING ) )? otherlv_1= 'Resource' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= '{' ( ( ( ( ({...}? => ( ({...}? => ( ( (lv_gapClass_5_0= 'gap' ) ) | ( (lv_noGapClass_6_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_10_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_11= 'path' otherlv_12= '=' ( (lv_path_13_0= RULE_STRING ) ) ) ) ) ) )* ) ) ) ( (lv_dependencies_14_0= ruleServiceDependency ) )* ( (lv_operations_15_0= ruleResourceOperation ) )* otherlv_16= '}' )? )
            {
            // InternalContextMappingDSL.g:5210:2: ( ( (lv_doc_0_0= RULE_STRING ) )? otherlv_1= 'Resource' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= '{' ( ( ( ( ({...}? => ( ({...}? => ( ( (lv_gapClass_5_0= 'gap' ) ) | ( (lv_noGapClass_6_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_10_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_11= 'path' otherlv_12= '=' ( (lv_path_13_0= RULE_STRING ) ) ) ) ) ) )* ) ) ) ( (lv_dependencies_14_0= ruleServiceDependency ) )* ( (lv_operations_15_0= ruleResourceOperation ) )* otherlv_16= '}' )? )
            // InternalContextMappingDSL.g:5211:3: ( (lv_doc_0_0= RULE_STRING ) )? otherlv_1= 'Resource' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= '{' ( ( ( ( ({...}? => ( ({...}? => ( ( (lv_gapClass_5_0= 'gap' ) ) | ( (lv_noGapClass_6_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_10_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_11= 'path' otherlv_12= '=' ( (lv_path_13_0= RULE_STRING ) ) ) ) ) ) )* ) ) ) ( (lv_dependencies_14_0= ruleServiceDependency ) )* ( (lv_operations_15_0= ruleResourceOperation ) )* otherlv_16= '}' )?
            {
            // InternalContextMappingDSL.g:5211:3: ( (lv_doc_0_0= RULE_STRING ) )?
            int alt149=2;
            int LA149_0 = input.LA(1);

            if ( (LA149_0==RULE_STRING) ) {
                alt149=1;
            }
            switch (alt149) {
                case 1 :
                    // InternalContextMappingDSL.g:5212:4: (lv_doc_0_0= RULE_STRING )
                    {
                    // InternalContextMappingDSL.g:5212:4: (lv_doc_0_0= RULE_STRING )
                    // InternalContextMappingDSL.g:5213:5: lv_doc_0_0= RULE_STRING
                    {
                    lv_doc_0_0=(Token)match(input,RULE_STRING,FOLLOW_90); 

                    					newLeafNode(lv_doc_0_0, grammarAccess.getResourceAccess().getDocSTRINGTerminalRuleCall_0_0());
                    				

                    					if (current==null) {
                    						current = createModelElement(grammarAccess.getResourceRule());
                    					}
                    					setWithLastConsumed(
                    						current,
                    						"doc",
                    						lv_doc_0_0,
                    						"org.eclipse.xtext.common.Terminals.STRING");
                    				

                    }


                    }
                    break;

            }

            otherlv_1=(Token)match(input,74,FOLLOW_10); 

            			newLeafNode(otherlv_1, grammarAccess.getResourceAccess().getResourceKeyword_1());
            		
            // InternalContextMappingDSL.g:5233:3: ( (lv_name_2_0= RULE_ID ) )
            // InternalContextMappingDSL.g:5234:4: (lv_name_2_0= RULE_ID )
            {
            // InternalContextMappingDSL.g:5234:4: (lv_name_2_0= RULE_ID )
            // InternalContextMappingDSL.g:5235:5: lv_name_2_0= RULE_ID
            {
            lv_name_2_0=(Token)match(input,RULE_ID,FOLLOW_23); 

            					newLeafNode(lv_name_2_0, grammarAccess.getResourceAccess().getNameIDTerminalRuleCall_2_0());
            				

            					if (current==null) {
            						current = createModelElement(grammarAccess.getResourceRule());
            					}
            					setWithLastConsumed(
            						current,
            						"name",
            						lv_name_2_0,
            						"org.eclipse.xtext.common.Terminals.ID");
            				

            }


            }

            // InternalContextMappingDSL.g:5251:3: (otherlv_3= '{' ( ( ( ( ({...}? => ( ({...}? => ( ( (lv_gapClass_5_0= 'gap' ) ) | ( (lv_noGapClass_6_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_10_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_11= 'path' otherlv_12= '=' ( (lv_path_13_0= RULE_STRING ) ) ) ) ) ) )* ) ) ) ( (lv_dependencies_14_0= ruleServiceDependency ) )* ( (lv_operations_15_0= ruleResourceOperation ) )* otherlv_16= '}' )?
            int alt154=2;
            int LA154_0 = input.LA(1);

            if ( (LA154_0==RULE_OPEN) ) {
                alt154=1;
            }
            switch (alt154) {
                case 1 :
                    // InternalContextMappingDSL.g:5252:4: otherlv_3= '{' ( ( ( ( ({...}? => ( ({...}? => ( ( (lv_gapClass_5_0= 'gap' ) ) | ( (lv_noGapClass_6_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_10_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_11= 'path' otherlv_12= '=' ( (lv_path_13_0= RULE_STRING ) ) ) ) ) ) )* ) ) ) ( (lv_dependencies_14_0= ruleServiceDependency ) )* ( (lv_operations_15_0= ruleResourceOperation ) )* otherlv_16= '}'
                    {
                    otherlv_3=(Token)match(input,RULE_OPEN,FOLLOW_91); 

                    				newLeafNode(otherlv_3, grammarAccess.getResourceAccess().getLeftCurlyBracketKeyword_3_0());
                    			
                    // InternalContextMappingDSL.g:5256:4: ( ( ( ( ({...}? => ( ({...}? => ( ( (lv_gapClass_5_0= 'gap' ) ) | ( (lv_noGapClass_6_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_10_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_11= 'path' otherlv_12= '=' ( (lv_path_13_0= RULE_STRING ) ) ) ) ) ) )* ) ) )
                    // InternalContextMappingDSL.g:5257:5: ( ( ( ({...}? => ( ({...}? => ( ( (lv_gapClass_5_0= 'gap' ) ) | ( (lv_noGapClass_6_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_10_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_11= 'path' otherlv_12= '=' ( (lv_path_13_0= RULE_STRING ) ) ) ) ) ) )* ) )
                    {
                    // InternalContextMappingDSL.g:5257:5: ( ( ( ({...}? => ( ({...}? => ( ( (lv_gapClass_5_0= 'gap' ) ) | ( (lv_noGapClass_6_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_10_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_11= 'path' otherlv_12= '=' ( (lv_path_13_0= RULE_STRING ) ) ) ) ) ) )* ) )
                    // InternalContextMappingDSL.g:5258:6: ( ( ({...}? => ( ({...}? => ( ( (lv_gapClass_5_0= 'gap' ) ) | ( (lv_noGapClass_6_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_10_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_11= 'path' otherlv_12= '=' ( (lv_path_13_0= RULE_STRING ) ) ) ) ) ) )* )
                    {
                     
                    					  getUnorderedGroupHelper().enter(grammarAccess.getResourceAccess().getUnorderedGroup_3_1());
                    					
                    // InternalContextMappingDSL.g:5261:6: ( ( ({...}? => ( ({...}? => ( ( (lv_gapClass_5_0= 'gap' ) ) | ( (lv_noGapClass_6_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_10_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_11= 'path' otherlv_12= '=' ( (lv_path_13_0= RULE_STRING ) ) ) ) ) ) )* )
                    // InternalContextMappingDSL.g:5262:7: ( ({...}? => ( ({...}? => ( ( (lv_gapClass_5_0= 'gap' ) ) | ( (lv_noGapClass_6_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_10_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_11= 'path' otherlv_12= '=' ( (lv_path_13_0= RULE_STRING ) ) ) ) ) ) )*
                    {
                    // InternalContextMappingDSL.g:5262:7: ( ({...}? => ( ({...}? => ( ( (lv_gapClass_5_0= 'gap' ) ) | ( (lv_noGapClass_6_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_10_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_11= 'path' otherlv_12= '=' ( (lv_path_13_0= RULE_STRING ) ) ) ) ) ) )*
                    loop151:
                    do {
                        int alt151=5;
                        int LA151_0 = input.LA(1);

                        if ( LA151_0 >= 71 && LA151_0 <= 72 && getUnorderedGroupHelper().canSelect(grammarAccess.getResourceAccess().getUnorderedGroup_3_1(), 0) ) {
                            alt151=1;
                        }
                        else if ( LA151_0 == 67 && getUnorderedGroupHelper().canSelect(grammarAccess.getResourceAccess().getUnorderedGroup_3_1(), 1) ) {
                            alt151=2;
                        }
                        else if ( LA151_0 == 75 && getUnorderedGroupHelper().canSelect(grammarAccess.getResourceAccess().getUnorderedGroup_3_1(), 2) ) {
                            alt151=3;
                        }
                        else if ( LA151_0 == 76 && getUnorderedGroupHelper().canSelect(grammarAccess.getResourceAccess().getUnorderedGroup_3_1(), 3) ) {
                            alt151=4;
                        }


                        switch (alt151) {
                    	case 1 :
                    	    // InternalContextMappingDSL.g:5263:5: ({...}? => ( ({...}? => ( ( (lv_gapClass_5_0= 'gap' ) ) | ( (lv_noGapClass_6_0= 'nogap' ) ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:5263:5: ({...}? => ( ({...}? => ( ( (lv_gapClass_5_0= 'gap' ) ) | ( (lv_noGapClass_6_0= 'nogap' ) ) ) ) ) )
                    	    // InternalContextMappingDSL.g:5264:6: {...}? => ( ({...}? => ( ( (lv_gapClass_5_0= 'gap' ) ) | ( (lv_noGapClass_6_0= 'nogap' ) ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getResourceAccess().getUnorderedGroup_3_1(), 0) ) {
                    	        throw new FailedPredicateException(input, "ruleResource", "getUnorderedGroupHelper().canSelect(grammarAccess.getResourceAccess().getUnorderedGroup_3_1(), 0)");
                    	    }
                    	    // InternalContextMappingDSL.g:5264:108: ( ({...}? => ( ( (lv_gapClass_5_0= 'gap' ) ) | ( (lv_noGapClass_6_0= 'nogap' ) ) ) ) )
                    	    // InternalContextMappingDSL.g:5265:7: ({...}? => ( ( (lv_gapClass_5_0= 'gap' ) ) | ( (lv_noGapClass_6_0= 'nogap' ) ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getResourceAccess().getUnorderedGroup_3_1(), 0);
                    	    						
                    	    // InternalContextMappingDSL.g:5268:10: ({...}? => ( ( (lv_gapClass_5_0= 'gap' ) ) | ( (lv_noGapClass_6_0= 'nogap' ) ) ) )
                    	    // InternalContextMappingDSL.g:5268:11: {...}? => ( ( (lv_gapClass_5_0= 'gap' ) ) | ( (lv_noGapClass_6_0= 'nogap' ) ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleResource", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:5268:20: ( ( (lv_gapClass_5_0= 'gap' ) ) | ( (lv_noGapClass_6_0= 'nogap' ) ) )
                    	    int alt150=2;
                    	    int LA150_0 = input.LA(1);

                    	    if ( (LA150_0==71) ) {
                    	        alt150=1;
                    	    }
                    	    else if ( (LA150_0==72) ) {
                    	        alt150=2;
                    	    }
                    	    else {
                    	        NoViableAltException nvae =
                    	            new NoViableAltException("", 150, 0, input);

                    	        throw nvae;
                    	    }
                    	    switch (alt150) {
                    	        case 1 :
                    	            // InternalContextMappingDSL.g:5268:21: ( (lv_gapClass_5_0= 'gap' ) )
                    	            {
                    	            // InternalContextMappingDSL.g:5268:21: ( (lv_gapClass_5_0= 'gap' ) )
                    	            // InternalContextMappingDSL.g:5269:11: (lv_gapClass_5_0= 'gap' )
                    	            {
                    	            // InternalContextMappingDSL.g:5269:11: (lv_gapClass_5_0= 'gap' )
                    	            // InternalContextMappingDSL.g:5270:12: lv_gapClass_5_0= 'gap'
                    	            {
                    	            lv_gapClass_5_0=(Token)match(input,71,FOLLOW_91); 

                    	            												newLeafNode(lv_gapClass_5_0, grammarAccess.getResourceAccess().getGapClassGapKeyword_3_1_0_0_0());
                    	            											

                    	            												if (current==null) {
                    	            													current = createModelElement(grammarAccess.getResourceRule());
                    	            												}
                    	            												setWithLastConsumed(current, "gapClass", true, "gap");
                    	            											

                    	            }


                    	            }


                    	            }
                    	            break;
                    	        case 2 :
                    	            // InternalContextMappingDSL.g:5283:10: ( (lv_noGapClass_6_0= 'nogap' ) )
                    	            {
                    	            // InternalContextMappingDSL.g:5283:10: ( (lv_noGapClass_6_0= 'nogap' ) )
                    	            // InternalContextMappingDSL.g:5284:11: (lv_noGapClass_6_0= 'nogap' )
                    	            {
                    	            // InternalContextMappingDSL.g:5284:11: (lv_noGapClass_6_0= 'nogap' )
                    	            // InternalContextMappingDSL.g:5285:12: lv_noGapClass_6_0= 'nogap'
                    	            {
                    	            lv_noGapClass_6_0=(Token)match(input,72,FOLLOW_91); 

                    	            												newLeafNode(lv_noGapClass_6_0, grammarAccess.getResourceAccess().getNoGapClassNogapKeyword_3_1_0_1_0());
                    	            											

                    	            												if (current==null) {
                    	            													current = createModelElement(grammarAccess.getResourceRule());
                    	            												}
                    	            												setWithLastConsumed(current, "noGapClass", true, "nogap");
                    	            											

                    	            }


                    	            }


                    	            }
                    	            break;

                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getResourceAccess().getUnorderedGroup_3_1());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 2 :
                    	    // InternalContextMappingDSL.g:5303:5: ({...}? => ( ({...}? => (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:5303:5: ({...}? => ( ({...}? => (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) ) ) ) )
                    	    // InternalContextMappingDSL.g:5304:6: {...}? => ( ({...}? => (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getResourceAccess().getUnorderedGroup_3_1(), 1) ) {
                    	        throw new FailedPredicateException(input, "ruleResource", "getUnorderedGroupHelper().canSelect(grammarAccess.getResourceAccess().getUnorderedGroup_3_1(), 1)");
                    	    }
                    	    // InternalContextMappingDSL.g:5304:108: ( ({...}? => (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) ) ) )
                    	    // InternalContextMappingDSL.g:5305:7: ({...}? => (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getResourceAccess().getUnorderedGroup_3_1(), 1);
                    	    						
                    	    // InternalContextMappingDSL.g:5308:10: ({...}? => (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) ) )
                    	    // InternalContextMappingDSL.g:5308:11: {...}? => (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleResource", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:5308:20: (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) )
                    	    // InternalContextMappingDSL.g:5308:21: otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) )
                    	    {
                    	    otherlv_7=(Token)match(input,67,FOLLOW_81); 

                    	    										newLeafNode(otherlv_7, grammarAccess.getResourceAccess().getHintKeyword_3_1_1_0());
                    	    									
                    	    otherlv_8=(Token)match(input,21,FOLLOW_4); 

                    	    										newLeafNode(otherlv_8, grammarAccess.getResourceAccess().getEqualsSignKeyword_3_1_1_1());
                    	    									
                    	    // InternalContextMappingDSL.g:5316:10: ( (lv_hint_9_0= RULE_STRING ) )
                    	    // InternalContextMappingDSL.g:5317:11: (lv_hint_9_0= RULE_STRING )
                    	    {
                    	    // InternalContextMappingDSL.g:5317:11: (lv_hint_9_0= RULE_STRING )
                    	    // InternalContextMappingDSL.g:5318:12: lv_hint_9_0= RULE_STRING
                    	    {
                    	    lv_hint_9_0=(Token)match(input,RULE_STRING,FOLLOW_91); 

                    	    												newLeafNode(lv_hint_9_0, grammarAccess.getResourceAccess().getHintSTRINGTerminalRuleCall_3_1_1_2_0());
                    	    											

                    	    												if (current==null) {
                    	    													current = createModelElement(grammarAccess.getResourceRule());
                    	    												}
                    	    												setWithLastConsumed(
                    	    													current,
                    	    													"hint",
                    	    													lv_hint_9_0,
                    	    													"org.eclipse.xtext.common.Terminals.STRING");
                    	    											

                    	    }


                    	    }


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getResourceAccess().getUnorderedGroup_3_1());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 3 :
                    	    // InternalContextMappingDSL.g:5340:5: ({...}? => ( ({...}? => ( (lv_scaffold_10_0= 'scaffold' ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:5340:5: ({...}? => ( ({...}? => ( (lv_scaffold_10_0= 'scaffold' ) ) ) ) )
                    	    // InternalContextMappingDSL.g:5341:6: {...}? => ( ({...}? => ( (lv_scaffold_10_0= 'scaffold' ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getResourceAccess().getUnorderedGroup_3_1(), 2) ) {
                    	        throw new FailedPredicateException(input, "ruleResource", "getUnorderedGroupHelper().canSelect(grammarAccess.getResourceAccess().getUnorderedGroup_3_1(), 2)");
                    	    }
                    	    // InternalContextMappingDSL.g:5341:108: ( ({...}? => ( (lv_scaffold_10_0= 'scaffold' ) ) ) )
                    	    // InternalContextMappingDSL.g:5342:7: ({...}? => ( (lv_scaffold_10_0= 'scaffold' ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getResourceAccess().getUnorderedGroup_3_1(), 2);
                    	    						
                    	    // InternalContextMappingDSL.g:5345:10: ({...}? => ( (lv_scaffold_10_0= 'scaffold' ) ) )
                    	    // InternalContextMappingDSL.g:5345:11: {...}? => ( (lv_scaffold_10_0= 'scaffold' ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleResource", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:5345:20: ( (lv_scaffold_10_0= 'scaffold' ) )
                    	    // InternalContextMappingDSL.g:5345:21: (lv_scaffold_10_0= 'scaffold' )
                    	    {
                    	    // InternalContextMappingDSL.g:5345:21: (lv_scaffold_10_0= 'scaffold' )
                    	    // InternalContextMappingDSL.g:5346:11: lv_scaffold_10_0= 'scaffold'
                    	    {
                    	    lv_scaffold_10_0=(Token)match(input,75,FOLLOW_91); 

                    	    											newLeafNode(lv_scaffold_10_0, grammarAccess.getResourceAccess().getScaffoldScaffoldKeyword_3_1_2_0());
                    	    										

                    	    											if (current==null) {
                    	    												current = createModelElement(grammarAccess.getResourceRule());
                    	    											}
                    	    											setWithLastConsumed(current, "scaffold", true, "scaffold");
                    	    										

                    	    }


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getResourceAccess().getUnorderedGroup_3_1());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 4 :
                    	    // InternalContextMappingDSL.g:5363:5: ({...}? => ( ({...}? => (otherlv_11= 'path' otherlv_12= '=' ( (lv_path_13_0= RULE_STRING ) ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:5363:5: ({...}? => ( ({...}? => (otherlv_11= 'path' otherlv_12= '=' ( (lv_path_13_0= RULE_STRING ) ) ) ) ) )
                    	    // InternalContextMappingDSL.g:5364:6: {...}? => ( ({...}? => (otherlv_11= 'path' otherlv_12= '=' ( (lv_path_13_0= RULE_STRING ) ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getResourceAccess().getUnorderedGroup_3_1(), 3) ) {
                    	        throw new FailedPredicateException(input, "ruleResource", "getUnorderedGroupHelper().canSelect(grammarAccess.getResourceAccess().getUnorderedGroup_3_1(), 3)");
                    	    }
                    	    // InternalContextMappingDSL.g:5364:108: ( ({...}? => (otherlv_11= 'path' otherlv_12= '=' ( (lv_path_13_0= RULE_STRING ) ) ) ) )
                    	    // InternalContextMappingDSL.g:5365:7: ({...}? => (otherlv_11= 'path' otherlv_12= '=' ( (lv_path_13_0= RULE_STRING ) ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getResourceAccess().getUnorderedGroup_3_1(), 3);
                    	    						
                    	    // InternalContextMappingDSL.g:5368:10: ({...}? => (otherlv_11= 'path' otherlv_12= '=' ( (lv_path_13_0= RULE_STRING ) ) ) )
                    	    // InternalContextMappingDSL.g:5368:11: {...}? => (otherlv_11= 'path' otherlv_12= '=' ( (lv_path_13_0= RULE_STRING ) ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleResource", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:5368:20: (otherlv_11= 'path' otherlv_12= '=' ( (lv_path_13_0= RULE_STRING ) ) )
                    	    // InternalContextMappingDSL.g:5368:21: otherlv_11= 'path' otherlv_12= '=' ( (lv_path_13_0= RULE_STRING ) )
                    	    {
                    	    otherlv_11=(Token)match(input,76,FOLLOW_81); 

                    	    										newLeafNode(otherlv_11, grammarAccess.getResourceAccess().getPathKeyword_3_1_3_0());
                    	    									
                    	    otherlv_12=(Token)match(input,21,FOLLOW_4); 

                    	    										newLeafNode(otherlv_12, grammarAccess.getResourceAccess().getEqualsSignKeyword_3_1_3_1());
                    	    									
                    	    // InternalContextMappingDSL.g:5376:10: ( (lv_path_13_0= RULE_STRING ) )
                    	    // InternalContextMappingDSL.g:5377:11: (lv_path_13_0= RULE_STRING )
                    	    {
                    	    // InternalContextMappingDSL.g:5377:11: (lv_path_13_0= RULE_STRING )
                    	    // InternalContextMappingDSL.g:5378:12: lv_path_13_0= RULE_STRING
                    	    {
                    	    lv_path_13_0=(Token)match(input,RULE_STRING,FOLLOW_91); 

                    	    												newLeafNode(lv_path_13_0, grammarAccess.getResourceAccess().getPathSTRINGTerminalRuleCall_3_1_3_2_0());
                    	    											

                    	    												if (current==null) {
                    	    													current = createModelElement(grammarAccess.getResourceRule());
                    	    												}
                    	    												setWithLastConsumed(
                    	    													current,
                    	    													"path",
                    	    													lv_path_13_0,
                    	    													"org.eclipse.xtext.common.Terminals.STRING");
                    	    											

                    	    }


                    	    }


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getResourceAccess().getUnorderedGroup_3_1());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop151;
                        }
                    } while (true);


                    }


                    }

                     
                    					  getUnorderedGroupHelper().leave(grammarAccess.getResourceAccess().getUnorderedGroup_3_1());
                    					

                    }

                    // InternalContextMappingDSL.g:5407:4: ( (lv_dependencies_14_0= ruleServiceDependency ) )*
                    loop152:
                    do {
                        int alt152=2;
                        int LA152_0 = input.LA(1);

                        if ( (LA152_0==104||LA152_0==167) ) {
                            alt152=1;
                        }


                        switch (alt152) {
                    	case 1 :
                    	    // InternalContextMappingDSL.g:5408:5: (lv_dependencies_14_0= ruleServiceDependency )
                    	    {
                    	    // InternalContextMappingDSL.g:5408:5: (lv_dependencies_14_0= ruleServiceDependency )
                    	    // InternalContextMappingDSL.g:5409:6: lv_dependencies_14_0= ruleServiceDependency
                    	    {

                    	    						newCompositeNode(grammarAccess.getResourceAccess().getDependenciesServiceDependencyParserRuleCall_3_2_0());
                    	    					
                    	    pushFollow(FOLLOW_92);
                    	    lv_dependencies_14_0=ruleServiceDependency();

                    	    state._fsp--;


                    	    						if (current==null) {
                    	    							current = createModelElementForParent(grammarAccess.getResourceRule());
                    	    						}
                    	    						add(
                    	    							current,
                    	    							"dependencies",
                    	    							lv_dependencies_14_0,
                    	    							"org.contextmapper.tactic.dsl.TacticDDDLanguage.ServiceDependency");
                    	    						afterParserOrEnumRuleCall();
                    	    					

                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop152;
                        }
                    } while (true);

                    // InternalContextMappingDSL.g:5426:4: ( (lv_operations_15_0= ruleResourceOperation ) )*
                    loop153:
                    do {
                        int alt153=2;
                        int LA153_0 = input.LA(1);

                        if ( ((LA153_0>=RULE_STRING && LA153_0<=RULE_ID)||LA153_0==RULE_MAP_COLLECTION_TYPE||LA153_0==79||LA153_0==109||(LA153_0>=170 && LA153_0<=191)||LA153_0==218||(LA153_0>=228 && LA153_0<=234)) ) {
                            alt153=1;
                        }


                        switch (alt153) {
                    	case 1 :
                    	    // InternalContextMappingDSL.g:5427:5: (lv_operations_15_0= ruleResourceOperation )
                    	    {
                    	    // InternalContextMappingDSL.g:5427:5: (lv_operations_15_0= ruleResourceOperation )
                    	    // InternalContextMappingDSL.g:5428:6: lv_operations_15_0= ruleResourceOperation
                    	    {

                    	    						newCompositeNode(grammarAccess.getResourceAccess().getOperationsResourceOperationParserRuleCall_3_3_0());
                    	    					
                    	    pushFollow(FOLLOW_93);
                    	    lv_operations_15_0=ruleResourceOperation();

                    	    state._fsp--;


                    	    						if (current==null) {
                    	    							current = createModelElementForParent(grammarAccess.getResourceRule());
                    	    						}
                    	    						add(
                    	    							current,
                    	    							"operations",
                    	    							lv_operations_15_0,
                    	    							"org.contextmapper.tactic.dsl.TacticDDDLanguage.ResourceOperation");
                    	    						afterParserOrEnumRuleCall();
                    	    					

                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop153;
                        }
                    } while (true);

                    otherlv_16=(Token)match(input,RULE_CLOSE,FOLLOW_2); 

                    				newLeafNode(otherlv_16, grammarAccess.getResourceAccess().getRightCurlyBracketKeyword_3_4());
                    			

                    }
                    break;

            }


            }


            }


            	leaveRule();

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleResource"


    // $ANTLR start "entryRuleConsumer"
    // InternalContextMappingDSL.g:5454:1: entryRuleConsumer returns [EObject current=null] : iv_ruleConsumer= ruleConsumer EOF ;
    public final EObject entryRuleConsumer() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleConsumer = null;


        try {
            // InternalContextMappingDSL.g:5454:49: (iv_ruleConsumer= ruleConsumer EOF )
            // InternalContextMappingDSL.g:5455:2: iv_ruleConsumer= ruleConsumer EOF
            {
             newCompositeNode(grammarAccess.getConsumerRule()); 
            pushFollow(FOLLOW_1);
            iv_ruleConsumer=ruleConsumer();

            state._fsp--;

             current =iv_ruleConsumer; 
            match(input,EOF,FOLLOW_2); 

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleConsumer"


    // $ANTLR start "ruleConsumer"
    // InternalContextMappingDSL.g:5461:1: ruleConsumer returns [EObject current=null] : ( ( (lv_doc_0_0= RULE_STRING ) )? otherlv_1= 'Consumer' ( (lv_name_2_0= RULE_ID ) ) otherlv_3= '{' (otherlv_4= 'hint' otherlv_5= '=' ( (lv_hint_6_0= RULE_STRING ) ) )? ( (lv_dependencies_7_0= ruleDependency ) )* (otherlv_8= 'unmarshall to' (otherlv_9= '@' )? ( (otherlv_10= RULE_ID ) ) )? ( ( ( ( ({...}? => ( ({...}? => ( (otherlv_12= 'queueName' | otherlv_13= 'topicName' ) otherlv_14= '=' ( (lv_channel_15_0= ruleChannelIdentifier ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_subscribe_16_0= ruleSubscribe ) ) ) ) ) )* ) ) ) otherlv_17= '}' ) ;
    public final EObject ruleConsumer() throws RecognitionException {
        EObject current = null;

        Token lv_doc_0_0=null;
        Token otherlv_1=null;
        Token lv_name_2_0=null;
        Token otherlv_3=null;
        Token otherlv_4=null;
        Token otherlv_5=null;
        Token lv_hint_6_0=null;
        Token otherlv_8=null;
        Token otherlv_9=null;
        Token otherlv_10=null;
        Token otherlv_12=null;
        Token otherlv_13=null;
        Token otherlv_14=null;
        Token otherlv_17=null;
        EObject lv_dependencies_7_0 = null;

        AntlrDatatypeRuleToken lv_channel_15_0 = null;

        EObject lv_subscribe_16_0 = null;



        	enterRule();

        try {
            // InternalContextMappingDSL.g:5467:2: ( ( ( (lv_doc_0_0= RULE_STRING ) )? otherlv_1= 'Consumer' ( (lv_name_2_0= RULE_ID ) ) otherlv_3= '{' (otherlv_4= 'hint' otherlv_5= '=' ( (lv_hint_6_0= RULE_STRING ) ) )? ( (lv_dependencies_7_0= ruleDependency ) )* (otherlv_8= 'unmarshall to' (otherlv_9= '@' )? ( (otherlv_10= RULE_ID ) ) )? ( ( ( ( ({...}? => ( ({...}? => ( (otherlv_12= 'queueName' | otherlv_13= 'topicName' ) otherlv_14= '=' ( (lv_channel_15_0= ruleChannelIdentifier ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_subscribe_16_0= ruleSubscribe ) ) ) ) ) )* ) ) ) otherlv_17= '}' ) )
            // InternalContextMappingDSL.g:5468:2: ( ( (lv_doc_0_0= RULE_STRING ) )? otherlv_1= 'Consumer' ( (lv_name_2_0= RULE_ID ) ) otherlv_3= '{' (otherlv_4= 'hint' otherlv_5= '=' ( (lv_hint_6_0= RULE_STRING ) ) )? ( (lv_dependencies_7_0= ruleDependency ) )* (otherlv_8= 'unmarshall to' (otherlv_9= '@' )? ( (otherlv_10= RULE_ID ) ) )? ( ( ( ( ({...}? => ( ({...}? => ( (otherlv_12= 'queueName' | otherlv_13= 'topicName' ) otherlv_14= '=' ( (lv_channel_15_0= ruleChannelIdentifier ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_subscribe_16_0= ruleSubscribe ) ) ) ) ) )* ) ) ) otherlv_17= '}' )
            {
            // InternalContextMappingDSL.g:5468:2: ( ( (lv_doc_0_0= RULE_STRING ) )? otherlv_1= 'Consumer' ( (lv_name_2_0= RULE_ID ) ) otherlv_3= '{' (otherlv_4= 'hint' otherlv_5= '=' ( (lv_hint_6_0= RULE_STRING ) ) )? ( (lv_dependencies_7_0= ruleDependency ) )* (otherlv_8= 'unmarshall to' (otherlv_9= '@' )? ( (otherlv_10= RULE_ID ) ) )? ( ( ( ( ({...}? => ( ({...}? => ( (otherlv_12= 'queueName' | otherlv_13= 'topicName' ) otherlv_14= '=' ( (lv_channel_15_0= ruleChannelIdentifier ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_subscribe_16_0= ruleSubscribe ) ) ) ) ) )* ) ) ) otherlv_17= '}' )
            // InternalContextMappingDSL.g:5469:3: ( (lv_doc_0_0= RULE_STRING ) )? otherlv_1= 'Consumer' ( (lv_name_2_0= RULE_ID ) ) otherlv_3= '{' (otherlv_4= 'hint' otherlv_5= '=' ( (lv_hint_6_0= RULE_STRING ) ) )? ( (lv_dependencies_7_0= ruleDependency ) )* (otherlv_8= 'unmarshall to' (otherlv_9= '@' )? ( (otherlv_10= RULE_ID ) ) )? ( ( ( ( ({...}? => ( ({...}? => ( (otherlv_12= 'queueName' | otherlv_13= 'topicName' ) otherlv_14= '=' ( (lv_channel_15_0= ruleChannelIdentifier ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_subscribe_16_0= ruleSubscribe ) ) ) ) ) )* ) ) ) otherlv_17= '}'
            {
            // InternalContextMappingDSL.g:5469:3: ( (lv_doc_0_0= RULE_STRING ) )?
            int alt155=2;
            int LA155_0 = input.LA(1);

            if ( (LA155_0==RULE_STRING) ) {
                alt155=1;
            }
            switch (alt155) {
                case 1 :
                    // InternalContextMappingDSL.g:5470:4: (lv_doc_0_0= RULE_STRING )
                    {
                    // InternalContextMappingDSL.g:5470:4: (lv_doc_0_0= RULE_STRING )
                    // InternalContextMappingDSL.g:5471:5: lv_doc_0_0= RULE_STRING
                    {
                    lv_doc_0_0=(Token)match(input,RULE_STRING,FOLLOW_94); 

                    					newLeafNode(lv_doc_0_0, grammarAccess.getConsumerAccess().getDocSTRINGTerminalRuleCall_0_0());
                    				

                    					if (current==null) {
                    						current = createModelElement(grammarAccess.getConsumerRule());
                    					}
                    					setWithLastConsumed(
                    						current,
                    						"doc",
                    						lv_doc_0_0,
                    						"org.eclipse.xtext.common.Terminals.STRING");
                    				

                    }


                    }
                    break;

            }

            otherlv_1=(Token)match(input,77,FOLLOW_10); 

            			newLeafNode(otherlv_1, grammarAccess.getConsumerAccess().getConsumerKeyword_1());
            		
            // InternalContextMappingDSL.g:5491:3: ( (lv_name_2_0= RULE_ID ) )
            // InternalContextMappingDSL.g:5492:4: (lv_name_2_0= RULE_ID )
            {
            // InternalContextMappingDSL.g:5492:4: (lv_name_2_0= RULE_ID )
            // InternalContextMappingDSL.g:5493:5: lv_name_2_0= RULE_ID
            {
            lv_name_2_0=(Token)match(input,RULE_ID,FOLLOW_6); 

            					newLeafNode(lv_name_2_0, grammarAccess.getConsumerAccess().getNameIDTerminalRuleCall_2_0());
            				

            					if (current==null) {
            						current = createModelElement(grammarAccess.getConsumerRule());
            					}
            					setWithLastConsumed(
            						current,
            						"name",
            						lv_name_2_0,
            						"org.eclipse.xtext.common.Terminals.ID");
            				

            }


            }

            otherlv_3=(Token)match(input,RULE_OPEN,FOLLOW_95); 

            			newLeafNode(otherlv_3, grammarAccess.getConsumerAccess().getLeftCurlyBracketKeyword_3());
            		
            // InternalContextMappingDSL.g:5513:3: (otherlv_4= 'hint' otherlv_5= '=' ( (lv_hint_6_0= RULE_STRING ) ) )?
            int alt156=2;
            int LA156_0 = input.LA(1);

            if ( (LA156_0==67) ) {
                alt156=1;
            }
            switch (alt156) {
                case 1 :
                    // InternalContextMappingDSL.g:5514:4: otherlv_4= 'hint' otherlv_5= '=' ( (lv_hint_6_0= RULE_STRING ) )
                    {
                    otherlv_4=(Token)match(input,67,FOLLOW_81); 

                    				newLeafNode(otherlv_4, grammarAccess.getConsumerAccess().getHintKeyword_4_0());
                    			
                    otherlv_5=(Token)match(input,21,FOLLOW_4); 

                    				newLeafNode(otherlv_5, grammarAccess.getConsumerAccess().getEqualsSignKeyword_4_1());
                    			
                    // InternalContextMappingDSL.g:5522:4: ( (lv_hint_6_0= RULE_STRING ) )
                    // InternalContextMappingDSL.g:5523:5: (lv_hint_6_0= RULE_STRING )
                    {
                    // InternalContextMappingDSL.g:5523:5: (lv_hint_6_0= RULE_STRING )
                    // InternalContextMappingDSL.g:5524:6: lv_hint_6_0= RULE_STRING
                    {
                    lv_hint_6_0=(Token)match(input,RULE_STRING,FOLLOW_95); 

                    						newLeafNode(lv_hint_6_0, grammarAccess.getConsumerAccess().getHintSTRINGTerminalRuleCall_4_2_0());
                    					

                    						if (current==null) {
                    							current = createModelElement(grammarAccess.getConsumerRule());
                    						}
                    						setWithLastConsumed(
                    							current,
                    							"hint",
                    							lv_hint_6_0,
                    							"org.eclipse.xtext.common.Terminals.STRING");
                    					

                    }


                    }


                    }
                    break;

            }

            // InternalContextMappingDSL.g:5541:3: ( (lv_dependencies_7_0= ruleDependency ) )*
            loop157:
            do {
                int alt157=2;
                int LA157_0 = input.LA(1);

                if ( (LA157_0==104||LA157_0==167) ) {
                    alt157=1;
                }


                switch (alt157) {
            	case 1 :
            	    // InternalContextMappingDSL.g:5542:4: (lv_dependencies_7_0= ruleDependency )
            	    {
            	    // InternalContextMappingDSL.g:5542:4: (lv_dependencies_7_0= ruleDependency )
            	    // InternalContextMappingDSL.g:5543:5: lv_dependencies_7_0= ruleDependency
            	    {

            	    					newCompositeNode(grammarAccess.getConsumerAccess().getDependenciesDependencyParserRuleCall_5_0());
            	    				
            	    pushFollow(FOLLOW_95);
            	    lv_dependencies_7_0=ruleDependency();

            	    state._fsp--;


            	    					if (current==null) {
            	    						current = createModelElementForParent(grammarAccess.getConsumerRule());
            	    					}
            	    					add(
            	    						current,
            	    						"dependencies",
            	    						lv_dependencies_7_0,
            	    						"org.contextmapper.tactic.dsl.TacticDDDLanguage.Dependency");
            	    					afterParserOrEnumRuleCall();
            	    				

            	    }


            	    }
            	    break;

            	default :
            	    break loop157;
                }
            } while (true);

            // InternalContextMappingDSL.g:5560:3: (otherlv_8= 'unmarshall to' (otherlv_9= '@' )? ( (otherlv_10= RULE_ID ) ) )?
            int alt159=2;
            int LA159_0 = input.LA(1);

            if ( (LA159_0==78) ) {
                alt159=1;
            }
            switch (alt159) {
                case 1 :
                    // InternalContextMappingDSL.g:5561:4: otherlv_8= 'unmarshall to' (otherlv_9= '@' )? ( (otherlv_10= RULE_ID ) )
                    {
                    otherlv_8=(Token)match(input,78,FOLLOW_96); 

                    				newLeafNode(otherlv_8, grammarAccess.getConsumerAccess().getUnmarshallToKeyword_6_0());
                    			
                    // InternalContextMappingDSL.g:5565:4: (otherlv_9= '@' )?
                    int alt158=2;
                    int LA158_0 = input.LA(1);

                    if ( (LA158_0==79) ) {
                        alt158=1;
                    }
                    switch (alt158) {
                        case 1 :
                            // InternalContextMappingDSL.g:5566:5: otherlv_9= '@'
                            {
                            otherlv_9=(Token)match(input,79,FOLLOW_10); 

                            					newLeafNode(otherlv_9, grammarAccess.getConsumerAccess().getCommercialAtKeyword_6_1());
                            				

                            }
                            break;

                    }

                    // InternalContextMappingDSL.g:5571:4: ( (otherlv_10= RULE_ID ) )
                    // InternalContextMappingDSL.g:5572:5: (otherlv_10= RULE_ID )
                    {
                    // InternalContextMappingDSL.g:5572:5: (otherlv_10= RULE_ID )
                    // InternalContextMappingDSL.g:5573:6: otherlv_10= RULE_ID
                    {

                    						if (current==null) {
                    							current = createModelElement(grammarAccess.getConsumerRule());
                    						}
                    					
                    otherlv_10=(Token)match(input,RULE_ID,FOLLOW_97); 

                    						newLeafNode(otherlv_10, grammarAccess.getConsumerAccess().getMessageRootDomainObjectCrossReference_6_2_0());
                    					

                    }


                    }


                    }
                    break;

            }

            // InternalContextMappingDSL.g:5585:3: ( ( ( ( ({...}? => ( ({...}? => ( (otherlv_12= 'queueName' | otherlv_13= 'topicName' ) otherlv_14= '=' ( (lv_channel_15_0= ruleChannelIdentifier ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_subscribe_16_0= ruleSubscribe ) ) ) ) ) )* ) ) )
            // InternalContextMappingDSL.g:5586:4: ( ( ( ({...}? => ( ({...}? => ( (otherlv_12= 'queueName' | otherlv_13= 'topicName' ) otherlv_14= '=' ( (lv_channel_15_0= ruleChannelIdentifier ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_subscribe_16_0= ruleSubscribe ) ) ) ) ) )* ) )
            {
            // InternalContextMappingDSL.g:5586:4: ( ( ( ({...}? => ( ({...}? => ( (otherlv_12= 'queueName' | otherlv_13= 'topicName' ) otherlv_14= '=' ( (lv_channel_15_0= ruleChannelIdentifier ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_subscribe_16_0= ruleSubscribe ) ) ) ) ) )* ) )
            // InternalContextMappingDSL.g:5587:5: ( ( ({...}? => ( ({...}? => ( (otherlv_12= 'queueName' | otherlv_13= 'topicName' ) otherlv_14= '=' ( (lv_channel_15_0= ruleChannelIdentifier ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_subscribe_16_0= ruleSubscribe ) ) ) ) ) )* )
            {
             
            				  getUnorderedGroupHelper().enter(grammarAccess.getConsumerAccess().getUnorderedGroup_7());
            				
            // InternalContextMappingDSL.g:5590:5: ( ( ({...}? => ( ({...}? => ( (otherlv_12= 'queueName' | otherlv_13= 'topicName' ) otherlv_14= '=' ( (lv_channel_15_0= ruleChannelIdentifier ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_subscribe_16_0= ruleSubscribe ) ) ) ) ) )* )
            // InternalContextMappingDSL.g:5591:6: ( ({...}? => ( ({...}? => ( (otherlv_12= 'queueName' | otherlv_13= 'topicName' ) otherlv_14= '=' ( (lv_channel_15_0= ruleChannelIdentifier ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_subscribe_16_0= ruleSubscribe ) ) ) ) ) )*
            {
            // InternalContextMappingDSL.g:5591:6: ( ({...}? => ( ({...}? => ( (otherlv_12= 'queueName' | otherlv_13= 'topicName' ) otherlv_14= '=' ( (lv_channel_15_0= ruleChannelIdentifier ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_subscribe_16_0= ruleSubscribe ) ) ) ) ) )*
            loop161:
            do {
                int alt161=3;
                int LA161_0 = input.LA(1);

                if ( LA161_0 >= 80 && LA161_0 <= 81 && getUnorderedGroupHelper().canSelect(grammarAccess.getConsumerAccess().getUnorderedGroup_7(), 0) ) {
                    alt161=1;
                }
                else if ( LA161_0 == 82 && getUnorderedGroupHelper().canSelect(grammarAccess.getConsumerAccess().getUnorderedGroup_7(), 1) ) {
                    alt161=2;
                }


                switch (alt161) {
            	case 1 :
            	    // InternalContextMappingDSL.g:5592:4: ({...}? => ( ({...}? => ( (otherlv_12= 'queueName' | otherlv_13= 'topicName' ) otherlv_14= '=' ( (lv_channel_15_0= ruleChannelIdentifier ) ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:5592:4: ({...}? => ( ({...}? => ( (otherlv_12= 'queueName' | otherlv_13= 'topicName' ) otherlv_14= '=' ( (lv_channel_15_0= ruleChannelIdentifier ) ) ) ) ) )
            	    // InternalContextMappingDSL.g:5593:5: {...}? => ( ({...}? => ( (otherlv_12= 'queueName' | otherlv_13= 'topicName' ) otherlv_14= '=' ( (lv_channel_15_0= ruleChannelIdentifier ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getConsumerAccess().getUnorderedGroup_7(), 0) ) {
            	        throw new FailedPredicateException(input, "ruleConsumer", "getUnorderedGroupHelper().canSelect(grammarAccess.getConsumerAccess().getUnorderedGroup_7(), 0)");
            	    }
            	    // InternalContextMappingDSL.g:5593:105: ( ({...}? => ( (otherlv_12= 'queueName' | otherlv_13= 'topicName' ) otherlv_14= '=' ( (lv_channel_15_0= ruleChannelIdentifier ) ) ) ) )
            	    // InternalContextMappingDSL.g:5594:6: ({...}? => ( (otherlv_12= 'queueName' | otherlv_13= 'topicName' ) otherlv_14= '=' ( (lv_channel_15_0= ruleChannelIdentifier ) ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getConsumerAccess().getUnorderedGroup_7(), 0);
            	    					
            	    // InternalContextMappingDSL.g:5597:9: ({...}? => ( (otherlv_12= 'queueName' | otherlv_13= 'topicName' ) otherlv_14= '=' ( (lv_channel_15_0= ruleChannelIdentifier ) ) ) )
            	    // InternalContextMappingDSL.g:5597:10: {...}? => ( (otherlv_12= 'queueName' | otherlv_13= 'topicName' ) otherlv_14= '=' ( (lv_channel_15_0= ruleChannelIdentifier ) ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleConsumer", "true");
            	    }
            	    // InternalContextMappingDSL.g:5597:19: ( (otherlv_12= 'queueName' | otherlv_13= 'topicName' ) otherlv_14= '=' ( (lv_channel_15_0= ruleChannelIdentifier ) ) )
            	    // InternalContextMappingDSL.g:5597:20: (otherlv_12= 'queueName' | otherlv_13= 'topicName' ) otherlv_14= '=' ( (lv_channel_15_0= ruleChannelIdentifier ) )
            	    {
            	    // InternalContextMappingDSL.g:5597:20: (otherlv_12= 'queueName' | otherlv_13= 'topicName' )
            	    int alt160=2;
            	    int LA160_0 = input.LA(1);

            	    if ( (LA160_0==80) ) {
            	        alt160=1;
            	    }
            	    else if ( (LA160_0==81) ) {
            	        alt160=2;
            	    }
            	    else {
            	        NoViableAltException nvae =
            	            new NoViableAltException("", 160, 0, input);

            	        throw nvae;
            	    }
            	    switch (alt160) {
            	        case 1 :
            	            // InternalContextMappingDSL.g:5598:10: otherlv_12= 'queueName'
            	            {
            	            otherlv_12=(Token)match(input,80,FOLLOW_81); 

            	            										newLeafNode(otherlv_12, grammarAccess.getConsumerAccess().getQueueNameKeyword_7_0_0_0());
            	            									

            	            }
            	            break;
            	        case 2 :
            	            // InternalContextMappingDSL.g:5603:10: otherlv_13= 'topicName'
            	            {
            	            otherlv_13=(Token)match(input,81,FOLLOW_81); 

            	            										newLeafNode(otherlv_13, grammarAccess.getConsumerAccess().getTopicNameKeyword_7_0_0_1());
            	            									

            	            }
            	            break;

            	    }

            	    otherlv_14=(Token)match(input,21,FOLLOW_10); 

            	    									newLeafNode(otherlv_14, grammarAccess.getConsumerAccess().getEqualsSignKeyword_7_0_1());
            	    								
            	    // InternalContextMappingDSL.g:5612:9: ( (lv_channel_15_0= ruleChannelIdentifier ) )
            	    // InternalContextMappingDSL.g:5613:10: (lv_channel_15_0= ruleChannelIdentifier )
            	    {
            	    // InternalContextMappingDSL.g:5613:10: (lv_channel_15_0= ruleChannelIdentifier )
            	    // InternalContextMappingDSL.g:5614:11: lv_channel_15_0= ruleChannelIdentifier
            	    {

            	    											newCompositeNode(grammarAccess.getConsumerAccess().getChannelChannelIdentifierParserRuleCall_7_0_2_0());
            	    										
            	    pushFollow(FOLLOW_97);
            	    lv_channel_15_0=ruleChannelIdentifier();

            	    state._fsp--;


            	    											if (current==null) {
            	    												current = createModelElementForParent(grammarAccess.getConsumerRule());
            	    											}
            	    											set(
            	    												current,
            	    												"channel",
            	    												lv_channel_15_0,
            	    												"org.contextmapper.tactic.dsl.TacticDDDLanguage.ChannelIdentifier");
            	    											afterParserOrEnumRuleCall();
            	    										

            	    }


            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getConsumerAccess().getUnorderedGroup_7());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 2 :
            	    // InternalContextMappingDSL.g:5637:4: ({...}? => ( ({...}? => ( (lv_subscribe_16_0= ruleSubscribe ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:5637:4: ({...}? => ( ({...}? => ( (lv_subscribe_16_0= ruleSubscribe ) ) ) ) )
            	    // InternalContextMappingDSL.g:5638:5: {...}? => ( ({...}? => ( (lv_subscribe_16_0= ruleSubscribe ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getConsumerAccess().getUnorderedGroup_7(), 1) ) {
            	        throw new FailedPredicateException(input, "ruleConsumer", "getUnorderedGroupHelper().canSelect(grammarAccess.getConsumerAccess().getUnorderedGroup_7(), 1)");
            	    }
            	    // InternalContextMappingDSL.g:5638:105: ( ({...}? => ( (lv_subscribe_16_0= ruleSubscribe ) ) ) )
            	    // InternalContextMappingDSL.g:5639:6: ({...}? => ( (lv_subscribe_16_0= ruleSubscribe ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getConsumerAccess().getUnorderedGroup_7(), 1);
            	    					
            	    // InternalContextMappingDSL.g:5642:9: ({...}? => ( (lv_subscribe_16_0= ruleSubscribe ) ) )
            	    // InternalContextMappingDSL.g:5642:10: {...}? => ( (lv_subscribe_16_0= ruleSubscribe ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleConsumer", "true");
            	    }
            	    // InternalContextMappingDSL.g:5642:19: ( (lv_subscribe_16_0= ruleSubscribe ) )
            	    // InternalContextMappingDSL.g:5642:20: (lv_subscribe_16_0= ruleSubscribe )
            	    {
            	    // InternalContextMappingDSL.g:5642:20: (lv_subscribe_16_0= ruleSubscribe )
            	    // InternalContextMappingDSL.g:5643:10: lv_subscribe_16_0= ruleSubscribe
            	    {

            	    										newCompositeNode(grammarAccess.getConsumerAccess().getSubscribeSubscribeParserRuleCall_7_1_0());
            	    									
            	    pushFollow(FOLLOW_97);
            	    lv_subscribe_16_0=ruleSubscribe();

            	    state._fsp--;


            	    										if (current==null) {
            	    											current = createModelElementForParent(grammarAccess.getConsumerRule());
            	    										}
            	    										set(
            	    											current,
            	    											"subscribe",
            	    											lv_subscribe_16_0,
            	    											"org.contextmapper.tactic.dsl.TacticDDDLanguage.Subscribe");
            	    										afterParserOrEnumRuleCall();
            	    									

            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getConsumerAccess().getUnorderedGroup_7());
            	    					

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop161;
                }
            } while (true);


            }


            }

             
            				  getUnorderedGroupHelper().leave(grammarAccess.getConsumerAccess().getUnorderedGroup_7());
            				

            }

            otherlv_17=(Token)match(input,RULE_CLOSE,FOLLOW_2); 

            			newLeafNode(otherlv_17, grammarAccess.getConsumerAccess().getRightCurlyBracketKeyword_8());
            		

            }


            }


            	leaveRule();

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleConsumer"


    // $ANTLR start "entryRuleSubscribe"
    // InternalContextMappingDSL.g:5680:1: entryRuleSubscribe returns [EObject current=null] : iv_ruleSubscribe= ruleSubscribe EOF ;
    public final EObject entryRuleSubscribe() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleSubscribe = null;


        try {
            // InternalContextMappingDSL.g:5680:50: (iv_ruleSubscribe= ruleSubscribe EOF )
            // InternalContextMappingDSL.g:5681:2: iv_ruleSubscribe= ruleSubscribe EOF
            {
             newCompositeNode(grammarAccess.getSubscribeRule()); 
            pushFollow(FOLLOW_1);
            iv_ruleSubscribe=ruleSubscribe();

            state._fsp--;

             current =iv_ruleSubscribe; 
            match(input,EOF,FOLLOW_2); 

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleSubscribe"


    // $ANTLR start "ruleSubscribe"
    // InternalContextMappingDSL.g:5687:1: ruleSubscribe returns [EObject current=null] : (otherlv_0= 'subscribe' otherlv_1= 'to' ( (lv_topic_2_0= ruleChannelIdentifier ) ) (otherlv_3= 'eventBus' otherlv_4= '=' ( (lv_eventBus_5_0= RULE_ID ) ) )? ) ;
    public final EObject ruleSubscribe() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_1=null;
        Token otherlv_3=null;
        Token otherlv_4=null;
        Token lv_eventBus_5_0=null;
        AntlrDatatypeRuleToken lv_topic_2_0 = null;



        	enterRule();

        try {
            // InternalContextMappingDSL.g:5693:2: ( (otherlv_0= 'subscribe' otherlv_1= 'to' ( (lv_topic_2_0= ruleChannelIdentifier ) ) (otherlv_3= 'eventBus' otherlv_4= '=' ( (lv_eventBus_5_0= RULE_ID ) ) )? ) )
            // InternalContextMappingDSL.g:5694:2: (otherlv_0= 'subscribe' otherlv_1= 'to' ( (lv_topic_2_0= ruleChannelIdentifier ) ) (otherlv_3= 'eventBus' otherlv_4= '=' ( (lv_eventBus_5_0= RULE_ID ) ) )? )
            {
            // InternalContextMappingDSL.g:5694:2: (otherlv_0= 'subscribe' otherlv_1= 'to' ( (lv_topic_2_0= ruleChannelIdentifier ) ) (otherlv_3= 'eventBus' otherlv_4= '=' ( (lv_eventBus_5_0= RULE_ID ) ) )? )
            // InternalContextMappingDSL.g:5695:3: otherlv_0= 'subscribe' otherlv_1= 'to' ( (lv_topic_2_0= ruleChannelIdentifier ) ) (otherlv_3= 'eventBus' otherlv_4= '=' ( (lv_eventBus_5_0= RULE_ID ) ) )?
            {
            otherlv_0=(Token)match(input,82,FOLLOW_98); 

            			newLeafNode(otherlv_0, grammarAccess.getSubscribeAccess().getSubscribeKeyword_0());
            		
            otherlv_1=(Token)match(input,83,FOLLOW_10); 

            			newLeafNode(otherlv_1, grammarAccess.getSubscribeAccess().getToKeyword_1());
            		
            // InternalContextMappingDSL.g:5703:3: ( (lv_topic_2_0= ruleChannelIdentifier ) )
            // InternalContextMappingDSL.g:5704:4: (lv_topic_2_0= ruleChannelIdentifier )
            {
            // InternalContextMappingDSL.g:5704:4: (lv_topic_2_0= ruleChannelIdentifier )
            // InternalContextMappingDSL.g:5705:5: lv_topic_2_0= ruleChannelIdentifier
            {

            					newCompositeNode(grammarAccess.getSubscribeAccess().getTopicChannelIdentifierParserRuleCall_2_0());
            				
            pushFollow(FOLLOW_99);
            lv_topic_2_0=ruleChannelIdentifier();

            state._fsp--;


            					if (current==null) {
            						current = createModelElementForParent(grammarAccess.getSubscribeRule());
            					}
            					set(
            						current,
            						"topic",
            						lv_topic_2_0,
            						"org.contextmapper.tactic.dsl.TacticDDDLanguage.ChannelIdentifier");
            					afterParserOrEnumRuleCall();
            				

            }


            }

            // InternalContextMappingDSL.g:5722:3: (otherlv_3= 'eventBus' otherlv_4= '=' ( (lv_eventBus_5_0= RULE_ID ) ) )?
            int alt162=2;
            int LA162_0 = input.LA(1);

            if ( (LA162_0==84) ) {
                alt162=1;
            }
            switch (alt162) {
                case 1 :
                    // InternalContextMappingDSL.g:5723:4: otherlv_3= 'eventBus' otherlv_4= '=' ( (lv_eventBus_5_0= RULE_ID ) )
                    {
                    otherlv_3=(Token)match(input,84,FOLLOW_81); 

                    				newLeafNode(otherlv_3, grammarAccess.getSubscribeAccess().getEventBusKeyword_3_0());
                    			
                    otherlv_4=(Token)match(input,21,FOLLOW_10); 

                    				newLeafNode(otherlv_4, grammarAccess.getSubscribeAccess().getEqualsSignKeyword_3_1());
                    			
                    // InternalContextMappingDSL.g:5731:4: ( (lv_eventBus_5_0= RULE_ID ) )
                    // InternalContextMappingDSL.g:5732:5: (lv_eventBus_5_0= RULE_ID )
                    {
                    // InternalContextMappingDSL.g:5732:5: (lv_eventBus_5_0= RULE_ID )
                    // InternalContextMappingDSL.g:5733:6: lv_eventBus_5_0= RULE_ID
                    {
                    lv_eventBus_5_0=(Token)match(input,RULE_ID,FOLLOW_2); 

                    						newLeafNode(lv_eventBus_5_0, grammarAccess.getSubscribeAccess().getEventBusIDTerminalRuleCall_3_2_0());
                    					

                    						if (current==null) {
                    							current = createModelElement(grammarAccess.getSubscribeRule());
                    						}
                    						setWithLastConsumed(
                    							current,
                    							"eventBus",
                    							lv_eventBus_5_0,
                    							"org.eclipse.xtext.common.Terminals.ID");
                    					

                    }


                    }


                    }
                    break;

            }


            }


            }


            	leaveRule();

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleSubscribe"


    // $ANTLR start "entryRulePublish"
    // InternalContextMappingDSL.g:5754:1: entryRulePublish returns [EObject current=null] : iv_rulePublish= rulePublish EOF ;
    public final EObject entryRulePublish() throws RecognitionException {
        EObject current = null;

        EObject iv_rulePublish = null;


        try {
            // InternalContextMappingDSL.g:5754:48: (iv_rulePublish= rulePublish EOF )
            // InternalContextMappingDSL.g:5755:2: iv_rulePublish= rulePublish EOF
            {
             newCompositeNode(grammarAccess.getPublishRule()); 
            pushFollow(FOLLOW_1);
            iv_rulePublish=rulePublish();

            state._fsp--;

             current =iv_rulePublish; 
            match(input,EOF,FOLLOW_2); 

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRulePublish"


    // $ANTLR start "rulePublish"
    // InternalContextMappingDSL.g:5761:1: rulePublish returns [EObject current=null] : (otherlv_0= 'publish' ( (otherlv_1= '@' )? ( (otherlv_2= RULE_ID ) ) )? otherlv_3= 'to' ( (lv_topic_4_0= ruleChannelIdentifier ) ) (otherlv_5= 'eventBus' otherlv_6= '=' ( (lv_eventBus_7_0= RULE_ID ) ) )? ) ;
    public final EObject rulePublish() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_1=null;
        Token otherlv_2=null;
        Token otherlv_3=null;
        Token otherlv_5=null;
        Token otherlv_6=null;
        Token lv_eventBus_7_0=null;
        AntlrDatatypeRuleToken lv_topic_4_0 = null;



        	enterRule();

        try {
            // InternalContextMappingDSL.g:5767:2: ( (otherlv_0= 'publish' ( (otherlv_1= '@' )? ( (otherlv_2= RULE_ID ) ) )? otherlv_3= 'to' ( (lv_topic_4_0= ruleChannelIdentifier ) ) (otherlv_5= 'eventBus' otherlv_6= '=' ( (lv_eventBus_7_0= RULE_ID ) ) )? ) )
            // InternalContextMappingDSL.g:5768:2: (otherlv_0= 'publish' ( (otherlv_1= '@' )? ( (otherlv_2= RULE_ID ) ) )? otherlv_3= 'to' ( (lv_topic_4_0= ruleChannelIdentifier ) ) (otherlv_5= 'eventBus' otherlv_6= '=' ( (lv_eventBus_7_0= RULE_ID ) ) )? )
            {
            // InternalContextMappingDSL.g:5768:2: (otherlv_0= 'publish' ( (otherlv_1= '@' )? ( (otherlv_2= RULE_ID ) ) )? otherlv_3= 'to' ( (lv_topic_4_0= ruleChannelIdentifier ) ) (otherlv_5= 'eventBus' otherlv_6= '=' ( (lv_eventBus_7_0= RULE_ID ) ) )? )
            // InternalContextMappingDSL.g:5769:3: otherlv_0= 'publish' ( (otherlv_1= '@' )? ( (otherlv_2= RULE_ID ) ) )? otherlv_3= 'to' ( (lv_topic_4_0= ruleChannelIdentifier ) ) (otherlv_5= 'eventBus' otherlv_6= '=' ( (lv_eventBus_7_0= RULE_ID ) ) )?
            {
            otherlv_0=(Token)match(input,85,FOLLOW_100); 

            			newLeafNode(otherlv_0, grammarAccess.getPublishAccess().getPublishKeyword_0());
            		
            // InternalContextMappingDSL.g:5773:3: ( (otherlv_1= '@' )? ( (otherlv_2= RULE_ID ) ) )?
            int alt164=2;
            int LA164_0 = input.LA(1);

            if ( (LA164_0==RULE_ID||LA164_0==79) ) {
                alt164=1;
            }
            switch (alt164) {
                case 1 :
                    // InternalContextMappingDSL.g:5774:4: (otherlv_1= '@' )? ( (otherlv_2= RULE_ID ) )
                    {
                    // InternalContextMappingDSL.g:5774:4: (otherlv_1= '@' )?
                    int alt163=2;
                    int LA163_0 = input.LA(1);

                    if ( (LA163_0==79) ) {
                        alt163=1;
                    }
                    switch (alt163) {
                        case 1 :
                            // InternalContextMappingDSL.g:5775:5: otherlv_1= '@'
                            {
                            otherlv_1=(Token)match(input,79,FOLLOW_10); 

                            					newLeafNode(otherlv_1, grammarAccess.getPublishAccess().getCommercialAtKeyword_1_0());
                            				

                            }
                            break;

                    }

                    // InternalContextMappingDSL.g:5780:4: ( (otherlv_2= RULE_ID ) )
                    // InternalContextMappingDSL.g:5781:5: (otherlv_2= RULE_ID )
                    {
                    // InternalContextMappingDSL.g:5781:5: (otherlv_2= RULE_ID )
                    // InternalContextMappingDSL.g:5782:6: otherlv_2= RULE_ID
                    {

                    						if (current==null) {
                    							current = createModelElement(grammarAccess.getPublishRule());
                    						}
                    					
                    otherlv_2=(Token)match(input,RULE_ID,FOLLOW_98); 

                    						newLeafNode(otherlv_2, grammarAccess.getPublishAccess().getEventTypeEventCrossReference_1_1_0());
                    					

                    }


                    }


                    }
                    break;

            }

            otherlv_3=(Token)match(input,83,FOLLOW_10); 

            			newLeafNode(otherlv_3, grammarAccess.getPublishAccess().getToKeyword_2());
            		
            // InternalContextMappingDSL.g:5798:3: ( (lv_topic_4_0= ruleChannelIdentifier ) )
            // InternalContextMappingDSL.g:5799:4: (lv_topic_4_0= ruleChannelIdentifier )
            {
            // InternalContextMappingDSL.g:5799:4: (lv_topic_4_0= ruleChannelIdentifier )
            // InternalContextMappingDSL.g:5800:5: lv_topic_4_0= ruleChannelIdentifier
            {

            					newCompositeNode(grammarAccess.getPublishAccess().getTopicChannelIdentifierParserRuleCall_3_0());
            				
            pushFollow(FOLLOW_99);
            lv_topic_4_0=ruleChannelIdentifier();

            state._fsp--;


            					if (current==null) {
            						current = createModelElementForParent(grammarAccess.getPublishRule());
            					}
            					set(
            						current,
            						"topic",
            						lv_topic_4_0,
            						"org.contextmapper.tactic.dsl.TacticDDDLanguage.ChannelIdentifier");
            					afterParserOrEnumRuleCall();
            				

            }


            }

            // InternalContextMappingDSL.g:5817:3: (otherlv_5= 'eventBus' otherlv_6= '=' ( (lv_eventBus_7_0= RULE_ID ) ) )?
            int alt165=2;
            int LA165_0 = input.LA(1);

            if ( (LA165_0==84) ) {
                alt165=1;
            }
            switch (alt165) {
                case 1 :
                    // InternalContextMappingDSL.g:5818:4: otherlv_5= 'eventBus' otherlv_6= '=' ( (lv_eventBus_7_0= RULE_ID ) )
                    {
                    otherlv_5=(Token)match(input,84,FOLLOW_81); 

                    				newLeafNode(otherlv_5, grammarAccess.getPublishAccess().getEventBusKeyword_4_0());
                    			
                    otherlv_6=(Token)match(input,21,FOLLOW_10); 

                    				newLeafNode(otherlv_6, grammarAccess.getPublishAccess().getEqualsSignKeyword_4_1());
                    			
                    // InternalContextMappingDSL.g:5826:4: ( (lv_eventBus_7_0= RULE_ID ) )
                    // InternalContextMappingDSL.g:5827:5: (lv_eventBus_7_0= RULE_ID )
                    {
                    // InternalContextMappingDSL.g:5827:5: (lv_eventBus_7_0= RULE_ID )
                    // InternalContextMappingDSL.g:5828:6: lv_eventBus_7_0= RULE_ID
                    {
                    lv_eventBus_7_0=(Token)match(input,RULE_ID,FOLLOW_2); 

                    						newLeafNode(lv_eventBus_7_0, grammarAccess.getPublishAccess().getEventBusIDTerminalRuleCall_4_2_0());
                    					

                    						if (current==null) {
                    							current = createModelElement(grammarAccess.getPublishRule());
                    						}
                    						setWithLastConsumed(
                    							current,
                    							"eventBus",
                    							lv_eventBus_7_0,
                    							"org.eclipse.xtext.common.Terminals.ID");
                    					

                    }


                    }


                    }
                    break;

            }


            }


            }


            	leaveRule();

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "rulePublish"


    // $ANTLR start "entryRuleEvent"
    // InternalContextMappingDSL.g:5849:1: entryRuleEvent returns [EObject current=null] : iv_ruleEvent= ruleEvent EOF ;
    public final EObject entryRuleEvent() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleEvent = null;


        try {
            // InternalContextMappingDSL.g:5849:46: (iv_ruleEvent= ruleEvent EOF )
            // InternalContextMappingDSL.g:5850:2: iv_ruleEvent= ruleEvent EOF
            {
             newCompositeNode(grammarAccess.getEventRule()); 
            pushFollow(FOLLOW_1);
            iv_ruleEvent=ruleEvent();

            state._fsp--;

             current =iv_ruleEvent; 
            match(input,EOF,FOLLOW_2); 

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleEvent"


    // $ANTLR start "ruleEvent"
    // InternalContextMappingDSL.g:5856:1: ruleEvent returns [EObject current=null] : (this_DomainEvent_0= ruleDomainEvent | this_CommandEvent_1= ruleCommandEvent ) ;
    public final EObject ruleEvent() throws RecognitionException {
        EObject current = null;

        EObject this_DomainEvent_0 = null;

        EObject this_CommandEvent_1 = null;



        	enterRule();

        try {
            // InternalContextMappingDSL.g:5862:2: ( (this_DomainEvent_0= ruleDomainEvent | this_CommandEvent_1= ruleCommandEvent ) )
            // InternalContextMappingDSL.g:5863:2: (this_DomainEvent_0= ruleDomainEvent | this_CommandEvent_1= ruleCommandEvent )
            {
            // InternalContextMappingDSL.g:5863:2: (this_DomainEvent_0= ruleDomainEvent | this_CommandEvent_1= ruleCommandEvent )
            int alt166=2;
            switch ( input.LA(1) ) {
            case RULE_SL_COMMENT:
                {
                switch ( input.LA(2) ) {
                case RULE_STRING:
                    {
                    switch ( input.LA(3) ) {
                    case 105:
                        {
                        int LA166_3 = input.LA(4);

                        if ( (LA166_3==124) ) {
                            alt166=1;
                        }
                        else if ( (LA166_3==125) ) {
                            alt166=2;
                        }
                        else {
                            NoViableAltException nvae =
                                new NoViableAltException("", 166, 3, input);

                            throw nvae;
                        }
                        }
                        break;
                    case 124:
                        {
                        alt166=1;
                        }
                        break;
                    case 125:
                        {
                        alt166=2;
                        }
                        break;
                    default:
                        NoViableAltException nvae =
                            new NoViableAltException("", 166, 2, input);

                        throw nvae;
                    }

                    }
                    break;
                case 105:
                    {
                    int LA166_3 = input.LA(3);

                    if ( (LA166_3==124) ) {
                        alt166=1;
                    }
                    else if ( (LA166_3==125) ) {
                        alt166=2;
                    }
                    else {
                        NoViableAltException nvae =
                            new NoViableAltException("", 166, 3, input);

                        throw nvae;
                    }
                    }
                    break;
                case 124:
                    {
                    alt166=1;
                    }
                    break;
                case 125:
                    {
                    alt166=2;
                    }
                    break;
                default:
                    NoViableAltException nvae =
                        new NoViableAltException("", 166, 1, input);

                    throw nvae;
                }

                }
                break;
            case RULE_STRING:
                {
                switch ( input.LA(2) ) {
                case 105:
                    {
                    int LA166_3 = input.LA(3);

                    if ( (LA166_3==124) ) {
                        alt166=1;
                    }
                    else if ( (LA166_3==125) ) {
                        alt166=2;
                    }
                    else {
                        NoViableAltException nvae =
                            new NoViableAltException("", 166, 3, input);

                        throw nvae;
                    }
                    }
                    break;
                case 124:
                    {
                    alt166=1;
                    }
                    break;
                case 125:
                    {
                    alt166=2;
                    }
                    break;
                default:
                    NoViableAltException nvae =
                        new NoViableAltException("", 166, 2, input);

                    throw nvae;
                }

                }
                break;
            case 105:
                {
                int LA166_3 = input.LA(2);

                if ( (LA166_3==124) ) {
                    alt166=1;
                }
                else if ( (LA166_3==125) ) {
                    alt166=2;
                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("", 166, 3, input);

                    throw nvae;
                }
                }
                break;
            case 124:
                {
                alt166=1;
                }
                break;
            case 125:
                {
                alt166=2;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("", 166, 0, input);

                throw nvae;
            }

            switch (alt166) {
                case 1 :
                    // InternalContextMappingDSL.g:5864:3: this_DomainEvent_0= ruleDomainEvent
                    {

                    			newCompositeNode(grammarAccess.getEventAccess().getDomainEventParserRuleCall_0());
                    		
                    pushFollow(FOLLOW_2);
                    this_DomainEvent_0=ruleDomainEvent();

                    state._fsp--;


                    			current = this_DomainEvent_0;
                    			afterParserOrEnumRuleCall();
                    		

                    }
                    break;
                case 2 :
                    // InternalContextMappingDSL.g:5873:3: this_CommandEvent_1= ruleCommandEvent
                    {

                    			newCompositeNode(grammarAccess.getEventAccess().getCommandEventParserRuleCall_1());
                    		
                    pushFollow(FOLLOW_2);
                    this_CommandEvent_1=ruleCommandEvent();

                    state._fsp--;


                    			current = this_CommandEvent_1;
                    			afterParserOrEnumRuleCall();
                    		

                    }
                    break;

            }


            }


            	leaveRule();

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleEvent"


    // $ANTLR start "entryRuleServiceOperation"
    // InternalContextMappingDSL.g:5885:1: entryRuleServiceOperation returns [EObject current=null] : iv_ruleServiceOperation= ruleServiceOperation EOF ;
    public final EObject entryRuleServiceOperation() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleServiceOperation = null;


        try {
            // InternalContextMappingDSL.g:5885:57: (iv_ruleServiceOperation= ruleServiceOperation EOF )
            // InternalContextMappingDSL.g:5886:2: iv_ruleServiceOperation= ruleServiceOperation EOF
            {
             newCompositeNode(grammarAccess.getServiceOperationRule()); 
            pushFollow(FOLLOW_1);
            iv_ruleServiceOperation=ruleServiceOperation();

            state._fsp--;

             current =iv_ruleServiceOperation; 
            match(input,EOF,FOLLOW_2); 

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleServiceOperation"


    // $ANTLR start "ruleServiceOperation"
    // InternalContextMappingDSL.g:5892:1: ruleServiceOperation returns [EObject current=null] : ( ( (lv_doc_0_0= RULE_STRING ) )? ( (lv_visibility_1_0= ruleVisibility ) )? ( ( (lv_returnType_2_0= ruleComplexType ) ) | otherlv_3= 'void' )? ( (lv_name_4_0= RULE_ID ) ) (otherlv_5= '(' ( (lv_parameters_6_0= ruleParameter ) )? (otherlv_7= ',' ( (lv_parameters_8_0= ruleParameter ) ) )* otherlv_9= ')' )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_11= 'throws' ( (lv_throws_12_0= ruleThrowsIdentifier ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_13= 'hint' otherlv_14= '=' ( (lv_hint_15_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_publish_16_0= rulePublish ) ) ) ) ) )* ) ) ) ( (lv_delegateHolder_17_0= ruleServiceOperationDelegate ) )? otherlv_18= ';' ) ;
    public final EObject ruleServiceOperation() throws RecognitionException {
        EObject current = null;

        Token lv_doc_0_0=null;
        Token otherlv_3=null;
        Token lv_name_4_0=null;
        Token otherlv_5=null;
        Token otherlv_7=null;
        Token otherlv_9=null;
        Token otherlv_11=null;
        Token otherlv_13=null;
        Token otherlv_14=null;
        Token lv_hint_15_0=null;
        Token otherlv_18=null;
        Enumerator lv_visibility_1_0 = null;

        EObject lv_returnType_2_0 = null;

        EObject lv_parameters_6_0 = null;

        EObject lv_parameters_8_0 = null;

        AntlrDatatypeRuleToken lv_throws_12_0 = null;

        EObject lv_publish_16_0 = null;

        EObject lv_delegateHolder_17_0 = null;



        	enterRule();

        try {
            // InternalContextMappingDSL.g:5898:2: ( ( ( (lv_doc_0_0= RULE_STRING ) )? ( (lv_visibility_1_0= ruleVisibility ) )? ( ( (lv_returnType_2_0= ruleComplexType ) ) | otherlv_3= 'void' )? ( (lv_name_4_0= RULE_ID ) ) (otherlv_5= '(' ( (lv_parameters_6_0= ruleParameter ) )? (otherlv_7= ',' ( (lv_parameters_8_0= ruleParameter ) ) )* otherlv_9= ')' )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_11= 'throws' ( (lv_throws_12_0= ruleThrowsIdentifier ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_13= 'hint' otherlv_14= '=' ( (lv_hint_15_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_publish_16_0= rulePublish ) ) ) ) ) )* ) ) ) ( (lv_delegateHolder_17_0= ruleServiceOperationDelegate ) )? otherlv_18= ';' ) )
            // InternalContextMappingDSL.g:5899:2: ( ( (lv_doc_0_0= RULE_STRING ) )? ( (lv_visibility_1_0= ruleVisibility ) )? ( ( (lv_returnType_2_0= ruleComplexType ) ) | otherlv_3= 'void' )? ( (lv_name_4_0= RULE_ID ) ) (otherlv_5= '(' ( (lv_parameters_6_0= ruleParameter ) )? (otherlv_7= ',' ( (lv_parameters_8_0= ruleParameter ) ) )* otherlv_9= ')' )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_11= 'throws' ( (lv_throws_12_0= ruleThrowsIdentifier ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_13= 'hint' otherlv_14= '=' ( (lv_hint_15_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_publish_16_0= rulePublish ) ) ) ) ) )* ) ) ) ( (lv_delegateHolder_17_0= ruleServiceOperationDelegate ) )? otherlv_18= ';' )
            {
            // InternalContextMappingDSL.g:5899:2: ( ( (lv_doc_0_0= RULE_STRING ) )? ( (lv_visibility_1_0= ruleVisibility ) )? ( ( (lv_returnType_2_0= ruleComplexType ) ) | otherlv_3= 'void' )? ( (lv_name_4_0= RULE_ID ) ) (otherlv_5= '(' ( (lv_parameters_6_0= ruleParameter ) )? (otherlv_7= ',' ( (lv_parameters_8_0= ruleParameter ) ) )* otherlv_9= ')' )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_11= 'throws' ( (lv_throws_12_0= ruleThrowsIdentifier ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_13= 'hint' otherlv_14= '=' ( (lv_hint_15_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_publish_16_0= rulePublish ) ) ) ) ) )* ) ) ) ( (lv_delegateHolder_17_0= ruleServiceOperationDelegate ) )? otherlv_18= ';' )
            // InternalContextMappingDSL.g:5900:3: ( (lv_doc_0_0= RULE_STRING ) )? ( (lv_visibility_1_0= ruleVisibility ) )? ( ( (lv_returnType_2_0= ruleComplexType ) ) | otherlv_3= 'void' )? ( (lv_name_4_0= RULE_ID ) ) (otherlv_5= '(' ( (lv_parameters_6_0= ruleParameter ) )? (otherlv_7= ',' ( (lv_parameters_8_0= ruleParameter ) ) )* otherlv_9= ')' )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_11= 'throws' ( (lv_throws_12_0= ruleThrowsIdentifier ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_13= 'hint' otherlv_14= '=' ( (lv_hint_15_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_publish_16_0= rulePublish ) ) ) ) ) )* ) ) ) ( (lv_delegateHolder_17_0= ruleServiceOperationDelegate ) )? otherlv_18= ';'
            {
            // InternalContextMappingDSL.g:5900:3: ( (lv_doc_0_0= RULE_STRING ) )?
            int alt167=2;
            int LA167_0 = input.LA(1);

            if ( (LA167_0==RULE_STRING) ) {
                alt167=1;
            }
            switch (alt167) {
                case 1 :
                    // InternalContextMappingDSL.g:5901:4: (lv_doc_0_0= RULE_STRING )
                    {
                    // InternalContextMappingDSL.g:5901:4: (lv_doc_0_0= RULE_STRING )
                    // InternalContextMappingDSL.g:5902:5: lv_doc_0_0= RULE_STRING
                    {
                    lv_doc_0_0=(Token)match(input,RULE_STRING,FOLLOW_101); 

                    					newLeafNode(lv_doc_0_0, grammarAccess.getServiceOperationAccess().getDocSTRINGTerminalRuleCall_0_0());
                    				

                    					if (current==null) {
                    						current = createModelElement(grammarAccess.getServiceOperationRule());
                    					}
                    					setWithLastConsumed(
                    						current,
                    						"doc",
                    						lv_doc_0_0,
                    						"org.eclipse.xtext.common.Terminals.STRING");
                    				

                    }


                    }
                    break;

            }

            // InternalContextMappingDSL.g:5918:3: ( (lv_visibility_1_0= ruleVisibility ) )?
            int alt168=2;
            int LA168_0 = input.LA(1);

            if ( (LA168_0==109||(LA168_0>=232 && LA168_0<=234)) ) {
                alt168=1;
            }
            switch (alt168) {
                case 1 :
                    // InternalContextMappingDSL.g:5919:4: (lv_visibility_1_0= ruleVisibility )
                    {
                    // InternalContextMappingDSL.g:5919:4: (lv_visibility_1_0= ruleVisibility )
                    // InternalContextMappingDSL.g:5920:5: lv_visibility_1_0= ruleVisibility
                    {

                    					newCompositeNode(grammarAccess.getServiceOperationAccess().getVisibilityVisibilityEnumRuleCall_1_0());
                    				
                    pushFollow(FOLLOW_102);
                    lv_visibility_1_0=ruleVisibility();

                    state._fsp--;


                    					if (current==null) {
                    						current = createModelElementForParent(grammarAccess.getServiceOperationRule());
                    					}
                    					set(
                    						current,
                    						"visibility",
                    						lv_visibility_1_0,
                    						"org.contextmapper.tactic.dsl.TacticDDDLanguage.Visibility");
                    					afterParserOrEnumRuleCall();
                    				

                    }


                    }
                    break;

            }

            // InternalContextMappingDSL.g:5937:3: ( ( (lv_returnType_2_0= ruleComplexType ) ) | otherlv_3= 'void' )?
            int alt169=3;
            switch ( input.LA(1) ) {
                case RULE_MAP_COLLECTION_TYPE:
                case 79:
                case 170:
                case 171:
                case 172:
                case 173:
                case 174:
                case 175:
                case 176:
                case 177:
                case 178:
                case 179:
                case 180:
                case 181:
                case 182:
                case 183:
                case 184:
                case 185:
                case 186:
                case 187:
                case 188:
                case 189:
                case 190:
                case 191:
                case 218:
                case 228:
                case 229:
                case 230:
                case 231:
                    {
                    alt169=1;
                    }
                    break;
                case RULE_ID:
                    {
                    int LA169_2 = input.LA(2);

                    if ( (LA169_2==RULE_ID||LA169_2==91||LA169_2==103) ) {
                        alt169=1;
                    }
                    }
                    break;
                case 86:
                    {
                    alt169=2;
                    }
                    break;
            }

            switch (alt169) {
                case 1 :
                    // InternalContextMappingDSL.g:5938:4: ( (lv_returnType_2_0= ruleComplexType ) )
                    {
                    // InternalContextMappingDSL.g:5938:4: ( (lv_returnType_2_0= ruleComplexType ) )
                    // InternalContextMappingDSL.g:5939:5: (lv_returnType_2_0= ruleComplexType )
                    {
                    // InternalContextMappingDSL.g:5939:5: (lv_returnType_2_0= ruleComplexType )
                    // InternalContextMappingDSL.g:5940:6: lv_returnType_2_0= ruleComplexType
                    {

                    						newCompositeNode(grammarAccess.getServiceOperationAccess().getReturnTypeComplexTypeParserRuleCall_2_0_0());
                    					
                    pushFollow(FOLLOW_10);
                    lv_returnType_2_0=ruleComplexType();

                    state._fsp--;


                    						if (current==null) {
                    							current = createModelElementForParent(grammarAccess.getServiceOperationRule());
                    						}
                    						set(
                    							current,
                    							"returnType",
                    							lv_returnType_2_0,
                    							"org.contextmapper.tactic.dsl.TacticDDDLanguage.ComplexType");
                    						afterParserOrEnumRuleCall();
                    					

                    }


                    }


                    }
                    break;
                case 2 :
                    // InternalContextMappingDSL.g:5958:4: otherlv_3= 'void'
                    {
                    otherlv_3=(Token)match(input,86,FOLLOW_10); 

                    				newLeafNode(otherlv_3, grammarAccess.getServiceOperationAccess().getVoidKeyword_2_1());
                    			

                    }
                    break;

            }

            // InternalContextMappingDSL.g:5963:3: ( (lv_name_4_0= RULE_ID ) )
            // InternalContextMappingDSL.g:5964:4: (lv_name_4_0= RULE_ID )
            {
            // InternalContextMappingDSL.g:5964:4: (lv_name_4_0= RULE_ID )
            // InternalContextMappingDSL.g:5965:5: lv_name_4_0= RULE_ID
            {
            lv_name_4_0=(Token)match(input,RULE_ID,FOLLOW_103); 

            					newLeafNode(lv_name_4_0, grammarAccess.getServiceOperationAccess().getNameIDTerminalRuleCall_3_0());
            				

            					if (current==null) {
            						current = createModelElement(grammarAccess.getServiceOperationRule());
            					}
            					setWithLastConsumed(
            						current,
            						"name",
            						lv_name_4_0,
            						"org.eclipse.xtext.common.Terminals.ID");
            				

            }


            }

            // InternalContextMappingDSL.g:5981:3: (otherlv_5= '(' ( (lv_parameters_6_0= ruleParameter ) )? (otherlv_7= ',' ( (lv_parameters_8_0= ruleParameter ) ) )* otherlv_9= ')' )?
            int alt172=2;
            int LA172_0 = input.LA(1);

            if ( (LA172_0==87) ) {
                alt172=1;
            }
            switch (alt172) {
                case 1 :
                    // InternalContextMappingDSL.g:5982:4: otherlv_5= '(' ( (lv_parameters_6_0= ruleParameter ) )? (otherlv_7= ',' ( (lv_parameters_8_0= ruleParameter ) ) )* otherlv_9= ')'
                    {
                    otherlv_5=(Token)match(input,87,FOLLOW_104); 

                    				newLeafNode(otherlv_5, grammarAccess.getServiceOperationAccess().getLeftParenthesisKeyword_4_0());
                    			
                    // InternalContextMappingDSL.g:5986:4: ( (lv_parameters_6_0= ruleParameter ) )?
                    int alt170=2;
                    int LA170_0 = input.LA(1);

                    if ( ((LA170_0>=RULE_STRING && LA170_0<=RULE_ID)||LA170_0==RULE_MAP_COLLECTION_TYPE||LA170_0==79||(LA170_0>=170 && LA170_0<=191)||LA170_0==218||(LA170_0>=228 && LA170_0<=231)) ) {
                        alt170=1;
                    }
                    switch (alt170) {
                        case 1 :
                            // InternalContextMappingDSL.g:5987:5: (lv_parameters_6_0= ruleParameter )
                            {
                            // InternalContextMappingDSL.g:5987:5: (lv_parameters_6_0= ruleParameter )
                            // InternalContextMappingDSL.g:5988:6: lv_parameters_6_0= ruleParameter
                            {

                            						newCompositeNode(grammarAccess.getServiceOperationAccess().getParametersParameterParserRuleCall_4_1_0());
                            					
                            pushFollow(FOLLOW_105);
                            lv_parameters_6_0=ruleParameter();

                            state._fsp--;


                            						if (current==null) {
                            							current = createModelElementForParent(grammarAccess.getServiceOperationRule());
                            						}
                            						add(
                            							current,
                            							"parameters",
                            							lv_parameters_6_0,
                            							"org.contextmapper.tactic.dsl.TacticDDDLanguage.Parameter");
                            						afterParserOrEnumRuleCall();
                            					

                            }


                            }
                            break;

                    }

                    // InternalContextMappingDSL.g:6005:4: (otherlv_7= ',' ( (lv_parameters_8_0= ruleParameter ) ) )*
                    loop171:
                    do {
                        int alt171=2;
                        int LA171_0 = input.LA(1);

                        if ( (LA171_0==24) ) {
                            alt171=1;
                        }


                        switch (alt171) {
                    	case 1 :
                    	    // InternalContextMappingDSL.g:6006:5: otherlv_7= ',' ( (lv_parameters_8_0= ruleParameter ) )
                    	    {
                    	    otherlv_7=(Token)match(input,24,FOLLOW_106); 

                    	    					newLeafNode(otherlv_7, grammarAccess.getServiceOperationAccess().getCommaKeyword_4_2_0());
                    	    				
                    	    // InternalContextMappingDSL.g:6010:5: ( (lv_parameters_8_0= ruleParameter ) )
                    	    // InternalContextMappingDSL.g:6011:6: (lv_parameters_8_0= ruleParameter )
                    	    {
                    	    // InternalContextMappingDSL.g:6011:6: (lv_parameters_8_0= ruleParameter )
                    	    // InternalContextMappingDSL.g:6012:7: lv_parameters_8_0= ruleParameter
                    	    {

                    	    							newCompositeNode(grammarAccess.getServiceOperationAccess().getParametersParameterParserRuleCall_4_2_1_0());
                    	    						
                    	    pushFollow(FOLLOW_105);
                    	    lv_parameters_8_0=ruleParameter();

                    	    state._fsp--;


                    	    							if (current==null) {
                    	    								current = createModelElementForParent(grammarAccess.getServiceOperationRule());
                    	    							}
                    	    							add(
                    	    								current,
                    	    								"parameters",
                    	    								lv_parameters_8_0,
                    	    								"org.contextmapper.tactic.dsl.TacticDDDLanguage.Parameter");
                    	    							afterParserOrEnumRuleCall();
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop171;
                        }
                    } while (true);

                    otherlv_9=(Token)match(input,88,FOLLOW_107); 

                    				newLeafNode(otherlv_9, grammarAccess.getServiceOperationAccess().getRightParenthesisKeyword_4_3());
                    			

                    }
                    break;

            }

            // InternalContextMappingDSL.g:6035:3: ( ( ( ( ({...}? => ( ({...}? => (otherlv_11= 'throws' ( (lv_throws_12_0= ruleThrowsIdentifier ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_13= 'hint' otherlv_14= '=' ( (lv_hint_15_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_publish_16_0= rulePublish ) ) ) ) ) )* ) ) )
            // InternalContextMappingDSL.g:6036:4: ( ( ( ({...}? => ( ({...}? => (otherlv_11= 'throws' ( (lv_throws_12_0= ruleThrowsIdentifier ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_13= 'hint' otherlv_14= '=' ( (lv_hint_15_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_publish_16_0= rulePublish ) ) ) ) ) )* ) )
            {
            // InternalContextMappingDSL.g:6036:4: ( ( ( ({...}? => ( ({...}? => (otherlv_11= 'throws' ( (lv_throws_12_0= ruleThrowsIdentifier ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_13= 'hint' otherlv_14= '=' ( (lv_hint_15_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_publish_16_0= rulePublish ) ) ) ) ) )* ) )
            // InternalContextMappingDSL.g:6037:5: ( ( ({...}? => ( ({...}? => (otherlv_11= 'throws' ( (lv_throws_12_0= ruleThrowsIdentifier ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_13= 'hint' otherlv_14= '=' ( (lv_hint_15_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_publish_16_0= rulePublish ) ) ) ) ) )* )
            {
             
            				  getUnorderedGroupHelper().enter(grammarAccess.getServiceOperationAccess().getUnorderedGroup_5());
            				
            // InternalContextMappingDSL.g:6040:5: ( ( ({...}? => ( ({...}? => (otherlv_11= 'throws' ( (lv_throws_12_0= ruleThrowsIdentifier ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_13= 'hint' otherlv_14= '=' ( (lv_hint_15_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_publish_16_0= rulePublish ) ) ) ) ) )* )
            // InternalContextMappingDSL.g:6041:6: ( ({...}? => ( ({...}? => (otherlv_11= 'throws' ( (lv_throws_12_0= ruleThrowsIdentifier ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_13= 'hint' otherlv_14= '=' ( (lv_hint_15_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_publish_16_0= rulePublish ) ) ) ) ) )*
            {
            // InternalContextMappingDSL.g:6041:6: ( ({...}? => ( ({...}? => (otherlv_11= 'throws' ( (lv_throws_12_0= ruleThrowsIdentifier ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_13= 'hint' otherlv_14= '=' ( (lv_hint_15_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_publish_16_0= rulePublish ) ) ) ) ) )*
            loop173:
            do {
                int alt173=4;
                int LA173_0 = input.LA(1);

                if ( LA173_0 == 89 && getUnorderedGroupHelper().canSelect(grammarAccess.getServiceOperationAccess().getUnorderedGroup_5(), 0) ) {
                    alt173=1;
                }
                else if ( LA173_0 == 67 && getUnorderedGroupHelper().canSelect(grammarAccess.getServiceOperationAccess().getUnorderedGroup_5(), 1) ) {
                    alt173=2;
                }
                else if ( LA173_0 == 85 && getUnorderedGroupHelper().canSelect(grammarAccess.getServiceOperationAccess().getUnorderedGroup_5(), 2) ) {
                    alt173=3;
                }


                switch (alt173) {
            	case 1 :
            	    // InternalContextMappingDSL.g:6042:4: ({...}? => ( ({...}? => (otherlv_11= 'throws' ( (lv_throws_12_0= ruleThrowsIdentifier ) ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:6042:4: ({...}? => ( ({...}? => (otherlv_11= 'throws' ( (lv_throws_12_0= ruleThrowsIdentifier ) ) ) ) ) )
            	    // InternalContextMappingDSL.g:6043:5: {...}? => ( ({...}? => (otherlv_11= 'throws' ( (lv_throws_12_0= ruleThrowsIdentifier ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getServiceOperationAccess().getUnorderedGroup_5(), 0) ) {
            	        throw new FailedPredicateException(input, "ruleServiceOperation", "getUnorderedGroupHelper().canSelect(grammarAccess.getServiceOperationAccess().getUnorderedGroup_5(), 0)");
            	    }
            	    // InternalContextMappingDSL.g:6043:113: ( ({...}? => (otherlv_11= 'throws' ( (lv_throws_12_0= ruleThrowsIdentifier ) ) ) ) )
            	    // InternalContextMappingDSL.g:6044:6: ({...}? => (otherlv_11= 'throws' ( (lv_throws_12_0= ruleThrowsIdentifier ) ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getServiceOperationAccess().getUnorderedGroup_5(), 0);
            	    					
            	    // InternalContextMappingDSL.g:6047:9: ({...}? => (otherlv_11= 'throws' ( (lv_throws_12_0= ruleThrowsIdentifier ) ) ) )
            	    // InternalContextMappingDSL.g:6047:10: {...}? => (otherlv_11= 'throws' ( (lv_throws_12_0= ruleThrowsIdentifier ) ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleServiceOperation", "true");
            	    }
            	    // InternalContextMappingDSL.g:6047:19: (otherlv_11= 'throws' ( (lv_throws_12_0= ruleThrowsIdentifier ) ) )
            	    // InternalContextMappingDSL.g:6047:20: otherlv_11= 'throws' ( (lv_throws_12_0= ruleThrowsIdentifier ) )
            	    {
            	    otherlv_11=(Token)match(input,89,FOLLOW_10); 

            	    									newLeafNode(otherlv_11, grammarAccess.getServiceOperationAccess().getThrowsKeyword_5_0_0());
            	    								
            	    // InternalContextMappingDSL.g:6051:9: ( (lv_throws_12_0= ruleThrowsIdentifier ) )
            	    // InternalContextMappingDSL.g:6052:10: (lv_throws_12_0= ruleThrowsIdentifier )
            	    {
            	    // InternalContextMappingDSL.g:6052:10: (lv_throws_12_0= ruleThrowsIdentifier )
            	    // InternalContextMappingDSL.g:6053:11: lv_throws_12_0= ruleThrowsIdentifier
            	    {

            	    											newCompositeNode(grammarAccess.getServiceOperationAccess().getThrowsThrowsIdentifierParserRuleCall_5_0_1_0());
            	    										
            	    pushFollow(FOLLOW_107);
            	    lv_throws_12_0=ruleThrowsIdentifier();

            	    state._fsp--;


            	    											if (current==null) {
            	    												current = createModelElementForParent(grammarAccess.getServiceOperationRule());
            	    											}
            	    											set(
            	    												current,
            	    												"throws",
            	    												lv_throws_12_0,
            	    												"org.contextmapper.tactic.dsl.TacticDDDLanguage.ThrowsIdentifier");
            	    											afterParserOrEnumRuleCall();
            	    										

            	    }


            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getServiceOperationAccess().getUnorderedGroup_5());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 2 :
            	    // InternalContextMappingDSL.g:6076:4: ({...}? => ( ({...}? => (otherlv_13= 'hint' otherlv_14= '=' ( (lv_hint_15_0= RULE_STRING ) ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:6076:4: ({...}? => ( ({...}? => (otherlv_13= 'hint' otherlv_14= '=' ( (lv_hint_15_0= RULE_STRING ) ) ) ) ) )
            	    // InternalContextMappingDSL.g:6077:5: {...}? => ( ({...}? => (otherlv_13= 'hint' otherlv_14= '=' ( (lv_hint_15_0= RULE_STRING ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getServiceOperationAccess().getUnorderedGroup_5(), 1) ) {
            	        throw new FailedPredicateException(input, "ruleServiceOperation", "getUnorderedGroupHelper().canSelect(grammarAccess.getServiceOperationAccess().getUnorderedGroup_5(), 1)");
            	    }
            	    // InternalContextMappingDSL.g:6077:113: ( ({...}? => (otherlv_13= 'hint' otherlv_14= '=' ( (lv_hint_15_0= RULE_STRING ) ) ) ) )
            	    // InternalContextMappingDSL.g:6078:6: ({...}? => (otherlv_13= 'hint' otherlv_14= '=' ( (lv_hint_15_0= RULE_STRING ) ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getServiceOperationAccess().getUnorderedGroup_5(), 1);
            	    					
            	    // InternalContextMappingDSL.g:6081:9: ({...}? => (otherlv_13= 'hint' otherlv_14= '=' ( (lv_hint_15_0= RULE_STRING ) ) ) )
            	    // InternalContextMappingDSL.g:6081:10: {...}? => (otherlv_13= 'hint' otherlv_14= '=' ( (lv_hint_15_0= RULE_STRING ) ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleServiceOperation", "true");
            	    }
            	    // InternalContextMappingDSL.g:6081:19: (otherlv_13= 'hint' otherlv_14= '=' ( (lv_hint_15_0= RULE_STRING ) ) )
            	    // InternalContextMappingDSL.g:6081:20: otherlv_13= 'hint' otherlv_14= '=' ( (lv_hint_15_0= RULE_STRING ) )
            	    {
            	    otherlv_13=(Token)match(input,67,FOLLOW_81); 

            	    									newLeafNode(otherlv_13, grammarAccess.getServiceOperationAccess().getHintKeyword_5_1_0());
            	    								
            	    otherlv_14=(Token)match(input,21,FOLLOW_4); 

            	    									newLeafNode(otherlv_14, grammarAccess.getServiceOperationAccess().getEqualsSignKeyword_5_1_1());
            	    								
            	    // InternalContextMappingDSL.g:6089:9: ( (lv_hint_15_0= RULE_STRING ) )
            	    // InternalContextMappingDSL.g:6090:10: (lv_hint_15_0= RULE_STRING )
            	    {
            	    // InternalContextMappingDSL.g:6090:10: (lv_hint_15_0= RULE_STRING )
            	    // InternalContextMappingDSL.g:6091:11: lv_hint_15_0= RULE_STRING
            	    {
            	    lv_hint_15_0=(Token)match(input,RULE_STRING,FOLLOW_107); 

            	    											newLeafNode(lv_hint_15_0, grammarAccess.getServiceOperationAccess().getHintSTRINGTerminalRuleCall_5_1_2_0());
            	    										

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getServiceOperationRule());
            	    											}
            	    											setWithLastConsumed(
            	    												current,
            	    												"hint",
            	    												lv_hint_15_0,
            	    												"org.eclipse.xtext.common.Terminals.STRING");
            	    										

            	    }


            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getServiceOperationAccess().getUnorderedGroup_5());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 3 :
            	    // InternalContextMappingDSL.g:6113:4: ({...}? => ( ({...}? => ( (lv_publish_16_0= rulePublish ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:6113:4: ({...}? => ( ({...}? => ( (lv_publish_16_0= rulePublish ) ) ) ) )
            	    // InternalContextMappingDSL.g:6114:5: {...}? => ( ({...}? => ( (lv_publish_16_0= rulePublish ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getServiceOperationAccess().getUnorderedGroup_5(), 2) ) {
            	        throw new FailedPredicateException(input, "ruleServiceOperation", "getUnorderedGroupHelper().canSelect(grammarAccess.getServiceOperationAccess().getUnorderedGroup_5(), 2)");
            	    }
            	    // InternalContextMappingDSL.g:6114:113: ( ({...}? => ( (lv_publish_16_0= rulePublish ) ) ) )
            	    // InternalContextMappingDSL.g:6115:6: ({...}? => ( (lv_publish_16_0= rulePublish ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getServiceOperationAccess().getUnorderedGroup_5(), 2);
            	    					
            	    // InternalContextMappingDSL.g:6118:9: ({...}? => ( (lv_publish_16_0= rulePublish ) ) )
            	    // InternalContextMappingDSL.g:6118:10: {...}? => ( (lv_publish_16_0= rulePublish ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleServiceOperation", "true");
            	    }
            	    // InternalContextMappingDSL.g:6118:19: ( (lv_publish_16_0= rulePublish ) )
            	    // InternalContextMappingDSL.g:6118:20: (lv_publish_16_0= rulePublish )
            	    {
            	    // InternalContextMappingDSL.g:6118:20: (lv_publish_16_0= rulePublish )
            	    // InternalContextMappingDSL.g:6119:10: lv_publish_16_0= rulePublish
            	    {

            	    										newCompositeNode(grammarAccess.getServiceOperationAccess().getPublishPublishParserRuleCall_5_2_0());
            	    									
            	    pushFollow(FOLLOW_107);
            	    lv_publish_16_0=rulePublish();

            	    state._fsp--;


            	    										if (current==null) {
            	    											current = createModelElementForParent(grammarAccess.getServiceOperationRule());
            	    										}
            	    										set(
            	    											current,
            	    											"publish",
            	    											lv_publish_16_0,
            	    											"org.contextmapper.tactic.dsl.TacticDDDLanguage.Publish");
            	    										afterParserOrEnumRuleCall();
            	    									

            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getServiceOperationAccess().getUnorderedGroup_5());
            	    					

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop173;
                }
            } while (true);


            }


            }

             
            				  getUnorderedGroupHelper().leave(grammarAccess.getServiceOperationAccess().getUnorderedGroup_5());
            				

            }

            // InternalContextMappingDSL.g:6148:3: ( (lv_delegateHolder_17_0= ruleServiceOperationDelegate ) )?
            int alt174=2;
            int LA174_0 = input.LA(1);

            if ( (LA174_0==RULE_DELEGATE) ) {
                alt174=1;
            }
            switch (alt174) {
                case 1 :
                    // InternalContextMappingDSL.g:6149:4: (lv_delegateHolder_17_0= ruleServiceOperationDelegate )
                    {
                    // InternalContextMappingDSL.g:6149:4: (lv_delegateHolder_17_0= ruleServiceOperationDelegate )
                    // InternalContextMappingDSL.g:6150:5: lv_delegateHolder_17_0= ruleServiceOperationDelegate
                    {

                    					newCompositeNode(grammarAccess.getServiceOperationAccess().getDelegateHolderServiceOperationDelegateParserRuleCall_6_0());
                    				
                    pushFollow(FOLLOW_108);
                    lv_delegateHolder_17_0=ruleServiceOperationDelegate();

                    state._fsp--;


                    					if (current==null) {
                    						current = createModelElementForParent(grammarAccess.getServiceOperationRule());
                    					}
                    					set(
                    						current,
                    						"delegateHolder",
                    						lv_delegateHolder_17_0,
                    						"org.contextmapper.tactic.dsl.TacticDDDLanguage.ServiceOperationDelegate");
                    					afterParserOrEnumRuleCall();
                    				

                    }


                    }
                    break;

            }

            otherlv_18=(Token)match(input,90,FOLLOW_2); 

            			newLeafNode(otherlv_18, grammarAccess.getServiceOperationAccess().getSemicolonKeyword_7());
            		

            }


            }


            	leaveRule();

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleServiceOperation"


    // $ANTLR start "entryRuleServiceOperationDelegate"
    // InternalContextMappingDSL.g:6175:1: entryRuleServiceOperationDelegate returns [EObject current=null] : iv_ruleServiceOperationDelegate= ruleServiceOperationDelegate EOF ;
    public final EObject entryRuleServiceOperationDelegate() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleServiceOperationDelegate = null;


        try {
            // InternalContextMappingDSL.g:6175:65: (iv_ruleServiceOperationDelegate= ruleServiceOperationDelegate EOF )
            // InternalContextMappingDSL.g:6176:2: iv_ruleServiceOperationDelegate= ruleServiceOperationDelegate EOF
            {
             newCompositeNode(grammarAccess.getServiceOperationDelegateRule()); 
            pushFollow(FOLLOW_1);
            iv_ruleServiceOperationDelegate=ruleServiceOperationDelegate();

            state._fsp--;

             current =iv_ruleServiceOperationDelegate; 
            match(input,EOF,FOLLOW_2); 

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleServiceOperationDelegate"


    // $ANTLR start "ruleServiceOperationDelegate"
    // InternalContextMappingDSL.g:6182:1: ruleServiceOperationDelegate returns [EObject current=null] : (this_DELEGATE_0= RULE_DELEGATE (otherlv_1= '@' )? ( (otherlv_2= RULE_ID ) ) otherlv_3= '.' ( (otherlv_4= RULE_ID ) ) ) ;
    public final EObject ruleServiceOperationDelegate() throws RecognitionException {
        EObject current = null;

        Token this_DELEGATE_0=null;
        Token otherlv_1=null;
        Token otherlv_2=null;
        Token otherlv_3=null;
        Token otherlv_4=null;


        	enterRule();

        try {
            // InternalContextMappingDSL.g:6188:2: ( (this_DELEGATE_0= RULE_DELEGATE (otherlv_1= '@' )? ( (otherlv_2= RULE_ID ) ) otherlv_3= '.' ( (otherlv_4= RULE_ID ) ) ) )
            // InternalContextMappingDSL.g:6189:2: (this_DELEGATE_0= RULE_DELEGATE (otherlv_1= '@' )? ( (otherlv_2= RULE_ID ) ) otherlv_3= '.' ( (otherlv_4= RULE_ID ) ) )
            {
            // InternalContextMappingDSL.g:6189:2: (this_DELEGATE_0= RULE_DELEGATE (otherlv_1= '@' )? ( (otherlv_2= RULE_ID ) ) otherlv_3= '.' ( (otherlv_4= RULE_ID ) ) )
            // InternalContextMappingDSL.g:6190:3: this_DELEGATE_0= RULE_DELEGATE (otherlv_1= '@' )? ( (otherlv_2= RULE_ID ) ) otherlv_3= '.' ( (otherlv_4= RULE_ID ) )
            {
            this_DELEGATE_0=(Token)match(input,RULE_DELEGATE,FOLLOW_96); 

            			newLeafNode(this_DELEGATE_0, grammarAccess.getServiceOperationDelegateAccess().getDELEGATETerminalRuleCall_0());
            		
            // InternalContextMappingDSL.g:6194:3: (otherlv_1= '@' )?
            int alt175=2;
            int LA175_0 = input.LA(1);

            if ( (LA175_0==79) ) {
                alt175=1;
            }
            switch (alt175) {
                case 1 :
                    // InternalContextMappingDSL.g:6195:4: otherlv_1= '@'
                    {
                    otherlv_1=(Token)match(input,79,FOLLOW_10); 

                    				newLeafNode(otherlv_1, grammarAccess.getServiceOperationDelegateAccess().getCommercialAtKeyword_1());
                    			

                    }
                    break;

            }

            // InternalContextMappingDSL.g:6200:3: ( (otherlv_2= RULE_ID ) )
            // InternalContextMappingDSL.g:6201:4: (otherlv_2= RULE_ID )
            {
            // InternalContextMappingDSL.g:6201:4: (otherlv_2= RULE_ID )
            // InternalContextMappingDSL.g:6202:5: otherlv_2= RULE_ID
            {

            					if (current==null) {
            						current = createModelElement(grammarAccess.getServiceOperationDelegateRule());
            					}
            				
            otherlv_2=(Token)match(input,RULE_ID,FOLLOW_109); 

            					newLeafNode(otherlv_2, grammarAccess.getServiceOperationDelegateAccess().getDelegateServiceRepositoryOptionCrossReference_2_0());
            				

            }


            }

            otherlv_3=(Token)match(input,91,FOLLOW_10); 

            			newLeafNode(otherlv_3, grammarAccess.getServiceOperationDelegateAccess().getFullStopKeyword_3());
            		
            // InternalContextMappingDSL.g:6217:3: ( (otherlv_4= RULE_ID ) )
            // InternalContextMappingDSL.g:6218:4: (otherlv_4= RULE_ID )
            {
            // InternalContextMappingDSL.g:6218:4: (otherlv_4= RULE_ID )
            // InternalContextMappingDSL.g:6219:5: otherlv_4= RULE_ID
            {

            					if (current==null) {
            						current = createModelElement(grammarAccess.getServiceOperationDelegateRule());
            					}
            				
            otherlv_4=(Token)match(input,RULE_ID,FOLLOW_2); 

            					newLeafNode(otherlv_4, grammarAccess.getServiceOperationDelegateAccess().getDelegateOperationServiceRepositoryOperationOptionCrossReference_4_0());
            				

            }


            }


            }


            }


            	leaveRule();

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleServiceOperationDelegate"


    // $ANTLR start "entryRuleResourceOperation"
    // InternalContextMappingDSL.g:6234:1: entryRuleResourceOperation returns [EObject current=null] : iv_ruleResourceOperation= ruleResourceOperation EOF ;
    public final EObject entryRuleResourceOperation() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleResourceOperation = null;


        try {
            // InternalContextMappingDSL.g:6234:58: (iv_ruleResourceOperation= ruleResourceOperation EOF )
            // InternalContextMappingDSL.g:6235:2: iv_ruleResourceOperation= ruleResourceOperation EOF
            {
             newCompositeNode(grammarAccess.getResourceOperationRule()); 
            pushFollow(FOLLOW_1);
            iv_ruleResourceOperation=ruleResourceOperation();

            state._fsp--;

             current =iv_ruleResourceOperation; 
            match(input,EOF,FOLLOW_2); 

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleResourceOperation"


    // $ANTLR start "ruleResourceOperation"
    // InternalContextMappingDSL.g:6241:1: ruleResourceOperation returns [EObject current=null] : ( ( (lv_doc_0_0= RULE_STRING ) )? ( (lv_visibility_1_0= ruleVisibility ) )? ( (lv_returnType_2_0= ruleComplexType ) )? ( (lv_name_3_0= RULE_ID ) ) (otherlv_4= '(' ( (lv_parameters_5_0= ruleParameter ) )? (otherlv_6= ',' ( (lv_parameters_7_0= ruleParameter ) ) )* otherlv_8= ')' )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_10= 'throws' ( (lv_throws_11_0= ruleThrowsIdentifier ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_12= 'hint' otherlv_13= '=' ( (lv_hint_14_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_httpMethod_15_0= ruleHttpMethod ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_16= 'path' otherlv_17= '=' ( (lv_path_18_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'return' otherlv_20= '=' ( (lv_returnString_21_0= RULE_STRING ) ) ) ) ) ) )* ) ) ) ( (lv_delegateHolder_22_0= ruleResourceOperationDelegate ) )? otherlv_23= ';' ) ;
    public final EObject ruleResourceOperation() throws RecognitionException {
        EObject current = null;

        Token lv_doc_0_0=null;
        Token lv_name_3_0=null;
        Token otherlv_4=null;
        Token otherlv_6=null;
        Token otherlv_8=null;
        Token otherlv_10=null;
        Token otherlv_12=null;
        Token otherlv_13=null;
        Token lv_hint_14_0=null;
        Token otherlv_16=null;
        Token otherlv_17=null;
        Token lv_path_18_0=null;
        Token otherlv_19=null;
        Token otherlv_20=null;
        Token lv_returnString_21_0=null;
        Token otherlv_23=null;
        Enumerator lv_visibility_1_0 = null;

        EObject lv_returnType_2_0 = null;

        EObject lv_parameters_5_0 = null;

        EObject lv_parameters_7_0 = null;

        AntlrDatatypeRuleToken lv_throws_11_0 = null;

        Enumerator lv_httpMethod_15_0 = null;

        EObject lv_delegateHolder_22_0 = null;



        	enterRule();

        try {
            // InternalContextMappingDSL.g:6247:2: ( ( ( (lv_doc_0_0= RULE_STRING ) )? ( (lv_visibility_1_0= ruleVisibility ) )? ( (lv_returnType_2_0= ruleComplexType ) )? ( (lv_name_3_0= RULE_ID ) ) (otherlv_4= '(' ( (lv_parameters_5_0= ruleParameter ) )? (otherlv_6= ',' ( (lv_parameters_7_0= ruleParameter ) ) )* otherlv_8= ')' )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_10= 'throws' ( (lv_throws_11_0= ruleThrowsIdentifier ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_12= 'hint' otherlv_13= '=' ( (lv_hint_14_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_httpMethod_15_0= ruleHttpMethod ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_16= 'path' otherlv_17= '=' ( (lv_path_18_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'return' otherlv_20= '=' ( (lv_returnString_21_0= RULE_STRING ) ) ) ) ) ) )* ) ) ) ( (lv_delegateHolder_22_0= ruleResourceOperationDelegate ) )? otherlv_23= ';' ) )
            // InternalContextMappingDSL.g:6248:2: ( ( (lv_doc_0_0= RULE_STRING ) )? ( (lv_visibility_1_0= ruleVisibility ) )? ( (lv_returnType_2_0= ruleComplexType ) )? ( (lv_name_3_0= RULE_ID ) ) (otherlv_4= '(' ( (lv_parameters_5_0= ruleParameter ) )? (otherlv_6= ',' ( (lv_parameters_7_0= ruleParameter ) ) )* otherlv_8= ')' )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_10= 'throws' ( (lv_throws_11_0= ruleThrowsIdentifier ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_12= 'hint' otherlv_13= '=' ( (lv_hint_14_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_httpMethod_15_0= ruleHttpMethod ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_16= 'path' otherlv_17= '=' ( (lv_path_18_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'return' otherlv_20= '=' ( (lv_returnString_21_0= RULE_STRING ) ) ) ) ) ) )* ) ) ) ( (lv_delegateHolder_22_0= ruleResourceOperationDelegate ) )? otherlv_23= ';' )
            {
            // InternalContextMappingDSL.g:6248:2: ( ( (lv_doc_0_0= RULE_STRING ) )? ( (lv_visibility_1_0= ruleVisibility ) )? ( (lv_returnType_2_0= ruleComplexType ) )? ( (lv_name_3_0= RULE_ID ) ) (otherlv_4= '(' ( (lv_parameters_5_0= ruleParameter ) )? (otherlv_6= ',' ( (lv_parameters_7_0= ruleParameter ) ) )* otherlv_8= ')' )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_10= 'throws' ( (lv_throws_11_0= ruleThrowsIdentifier ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_12= 'hint' otherlv_13= '=' ( (lv_hint_14_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_httpMethod_15_0= ruleHttpMethod ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_16= 'path' otherlv_17= '=' ( (lv_path_18_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'return' otherlv_20= '=' ( (lv_returnString_21_0= RULE_STRING ) ) ) ) ) ) )* ) ) ) ( (lv_delegateHolder_22_0= ruleResourceOperationDelegate ) )? otherlv_23= ';' )
            // InternalContextMappingDSL.g:6249:3: ( (lv_doc_0_0= RULE_STRING ) )? ( (lv_visibility_1_0= ruleVisibility ) )? ( (lv_returnType_2_0= ruleComplexType ) )? ( (lv_name_3_0= RULE_ID ) ) (otherlv_4= '(' ( (lv_parameters_5_0= ruleParameter ) )? (otherlv_6= ',' ( (lv_parameters_7_0= ruleParameter ) ) )* otherlv_8= ')' )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_10= 'throws' ( (lv_throws_11_0= ruleThrowsIdentifier ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_12= 'hint' otherlv_13= '=' ( (lv_hint_14_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_httpMethod_15_0= ruleHttpMethod ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_16= 'path' otherlv_17= '=' ( (lv_path_18_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'return' otherlv_20= '=' ( (lv_returnString_21_0= RULE_STRING ) ) ) ) ) ) )* ) ) ) ( (lv_delegateHolder_22_0= ruleResourceOperationDelegate ) )? otherlv_23= ';'
            {
            // InternalContextMappingDSL.g:6249:3: ( (lv_doc_0_0= RULE_STRING ) )?
            int alt176=2;
            int LA176_0 = input.LA(1);

            if ( (LA176_0==RULE_STRING) ) {
                alt176=1;
            }
            switch (alt176) {
                case 1 :
                    // InternalContextMappingDSL.g:6250:4: (lv_doc_0_0= RULE_STRING )
                    {
                    // InternalContextMappingDSL.g:6250:4: (lv_doc_0_0= RULE_STRING )
                    // InternalContextMappingDSL.g:6251:5: lv_doc_0_0= RULE_STRING
                    {
                    lv_doc_0_0=(Token)match(input,RULE_STRING,FOLLOW_110); 

                    					newLeafNode(lv_doc_0_0, grammarAccess.getResourceOperationAccess().getDocSTRINGTerminalRuleCall_0_0());
                    				

                    					if (current==null) {
                    						current = createModelElement(grammarAccess.getResourceOperationRule());
                    					}
                    					setWithLastConsumed(
                    						current,
                    						"doc",
                    						lv_doc_0_0,
                    						"org.eclipse.xtext.common.Terminals.STRING");
                    				

                    }


                    }
                    break;

            }

            // InternalContextMappingDSL.g:6267:3: ( (lv_visibility_1_0= ruleVisibility ) )?
            int alt177=2;
            int LA177_0 = input.LA(1);

            if ( (LA177_0==109||(LA177_0>=232 && LA177_0<=234)) ) {
                alt177=1;
            }
            switch (alt177) {
                case 1 :
                    // InternalContextMappingDSL.g:6268:4: (lv_visibility_1_0= ruleVisibility )
                    {
                    // InternalContextMappingDSL.g:6268:4: (lv_visibility_1_0= ruleVisibility )
                    // InternalContextMappingDSL.g:6269:5: lv_visibility_1_0= ruleVisibility
                    {

                    					newCompositeNode(grammarAccess.getResourceOperationAccess().getVisibilityVisibilityEnumRuleCall_1_0());
                    				
                    pushFollow(FOLLOW_111);
                    lv_visibility_1_0=ruleVisibility();

                    state._fsp--;


                    					if (current==null) {
                    						current = createModelElementForParent(grammarAccess.getResourceOperationRule());
                    					}
                    					set(
                    						current,
                    						"visibility",
                    						lv_visibility_1_0,
                    						"org.contextmapper.tactic.dsl.TacticDDDLanguage.Visibility");
                    					afterParserOrEnumRuleCall();
                    				

                    }


                    }
                    break;

            }

            // InternalContextMappingDSL.g:6286:3: ( (lv_returnType_2_0= ruleComplexType ) )?
            int alt178=2;
            int LA178_0 = input.LA(1);

            if ( (LA178_0==RULE_MAP_COLLECTION_TYPE||LA178_0==79||(LA178_0>=170 && LA178_0<=191)||LA178_0==218||(LA178_0>=228 && LA178_0<=231)) ) {
                alt178=1;
            }
            else if ( (LA178_0==RULE_ID) ) {
                int LA178_2 = input.LA(2);

                if ( (LA178_2==RULE_ID||LA178_2==91||LA178_2==103) ) {
                    alt178=1;
                }
            }
            switch (alt178) {
                case 1 :
                    // InternalContextMappingDSL.g:6287:4: (lv_returnType_2_0= ruleComplexType )
                    {
                    // InternalContextMappingDSL.g:6287:4: (lv_returnType_2_0= ruleComplexType )
                    // InternalContextMappingDSL.g:6288:5: lv_returnType_2_0= ruleComplexType
                    {

                    					newCompositeNode(grammarAccess.getResourceOperationAccess().getReturnTypeComplexTypeParserRuleCall_2_0());
                    				
                    pushFollow(FOLLOW_10);
                    lv_returnType_2_0=ruleComplexType();

                    state._fsp--;


                    					if (current==null) {
                    						current = createModelElementForParent(grammarAccess.getResourceOperationRule());
                    					}
                    					set(
                    						current,
                    						"returnType",
                    						lv_returnType_2_0,
                    						"org.contextmapper.tactic.dsl.TacticDDDLanguage.ComplexType");
                    					afterParserOrEnumRuleCall();
                    				

                    }


                    }
                    break;

            }

            // InternalContextMappingDSL.g:6305:3: ( (lv_name_3_0= RULE_ID ) )
            // InternalContextMappingDSL.g:6306:4: (lv_name_3_0= RULE_ID )
            {
            // InternalContextMappingDSL.g:6306:4: (lv_name_3_0= RULE_ID )
            // InternalContextMappingDSL.g:6307:5: lv_name_3_0= RULE_ID
            {
            lv_name_3_0=(Token)match(input,RULE_ID,FOLLOW_112); 

            					newLeafNode(lv_name_3_0, grammarAccess.getResourceOperationAccess().getNameIDTerminalRuleCall_3_0());
            				

            					if (current==null) {
            						current = createModelElement(grammarAccess.getResourceOperationRule());
            					}
            					setWithLastConsumed(
            						current,
            						"name",
            						lv_name_3_0,
            						"org.eclipse.xtext.common.Terminals.ID");
            				

            }


            }

            // InternalContextMappingDSL.g:6323:3: (otherlv_4= '(' ( (lv_parameters_5_0= ruleParameter ) )? (otherlv_6= ',' ( (lv_parameters_7_0= ruleParameter ) ) )* otherlv_8= ')' )?
            int alt181=2;
            int LA181_0 = input.LA(1);

            if ( (LA181_0==87) ) {
                alt181=1;
            }
            switch (alt181) {
                case 1 :
                    // InternalContextMappingDSL.g:6324:4: otherlv_4= '(' ( (lv_parameters_5_0= ruleParameter ) )? (otherlv_6= ',' ( (lv_parameters_7_0= ruleParameter ) ) )* otherlv_8= ')'
                    {
                    otherlv_4=(Token)match(input,87,FOLLOW_104); 

                    				newLeafNode(otherlv_4, grammarAccess.getResourceOperationAccess().getLeftParenthesisKeyword_4_0());
                    			
                    // InternalContextMappingDSL.g:6328:4: ( (lv_parameters_5_0= ruleParameter ) )?
                    int alt179=2;
                    int LA179_0 = input.LA(1);

                    if ( ((LA179_0>=RULE_STRING && LA179_0<=RULE_ID)||LA179_0==RULE_MAP_COLLECTION_TYPE||LA179_0==79||(LA179_0>=170 && LA179_0<=191)||LA179_0==218||(LA179_0>=228 && LA179_0<=231)) ) {
                        alt179=1;
                    }
                    switch (alt179) {
                        case 1 :
                            // InternalContextMappingDSL.g:6329:5: (lv_parameters_5_0= ruleParameter )
                            {
                            // InternalContextMappingDSL.g:6329:5: (lv_parameters_5_0= ruleParameter )
                            // InternalContextMappingDSL.g:6330:6: lv_parameters_5_0= ruleParameter
                            {

                            						newCompositeNode(grammarAccess.getResourceOperationAccess().getParametersParameterParserRuleCall_4_1_0());
                            					
                            pushFollow(FOLLOW_105);
                            lv_parameters_5_0=ruleParameter();

                            state._fsp--;


                            						if (current==null) {
                            							current = createModelElementForParent(grammarAccess.getResourceOperationRule());
                            						}
                            						add(
                            							current,
                            							"parameters",
                            							lv_parameters_5_0,
                            							"org.contextmapper.tactic.dsl.TacticDDDLanguage.Parameter");
                            						afterParserOrEnumRuleCall();
                            					

                            }


                            }
                            break;

                    }

                    // InternalContextMappingDSL.g:6347:4: (otherlv_6= ',' ( (lv_parameters_7_0= ruleParameter ) ) )*
                    loop180:
                    do {
                        int alt180=2;
                        int LA180_0 = input.LA(1);

                        if ( (LA180_0==24) ) {
                            alt180=1;
                        }


                        switch (alt180) {
                    	case 1 :
                    	    // InternalContextMappingDSL.g:6348:5: otherlv_6= ',' ( (lv_parameters_7_0= ruleParameter ) )
                    	    {
                    	    otherlv_6=(Token)match(input,24,FOLLOW_106); 

                    	    					newLeafNode(otherlv_6, grammarAccess.getResourceOperationAccess().getCommaKeyword_4_2_0());
                    	    				
                    	    // InternalContextMappingDSL.g:6352:5: ( (lv_parameters_7_0= ruleParameter ) )
                    	    // InternalContextMappingDSL.g:6353:6: (lv_parameters_7_0= ruleParameter )
                    	    {
                    	    // InternalContextMappingDSL.g:6353:6: (lv_parameters_7_0= ruleParameter )
                    	    // InternalContextMappingDSL.g:6354:7: lv_parameters_7_0= ruleParameter
                    	    {

                    	    							newCompositeNode(grammarAccess.getResourceOperationAccess().getParametersParameterParserRuleCall_4_2_1_0());
                    	    						
                    	    pushFollow(FOLLOW_105);
                    	    lv_parameters_7_0=ruleParameter();

                    	    state._fsp--;


                    	    							if (current==null) {
                    	    								current = createModelElementForParent(grammarAccess.getResourceOperationRule());
                    	    							}
                    	    							add(
                    	    								current,
                    	    								"parameters",
                    	    								lv_parameters_7_0,
                    	    								"org.contextmapper.tactic.dsl.TacticDDDLanguage.Parameter");
                    	    							afterParserOrEnumRuleCall();
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop180;
                        }
                    } while (true);

                    otherlv_8=(Token)match(input,88,FOLLOW_113); 

                    				newLeafNode(otherlv_8, grammarAccess.getResourceOperationAccess().getRightParenthesisKeyword_4_3());
                    			

                    }
                    break;

            }

            // InternalContextMappingDSL.g:6377:3: ( ( ( ( ({...}? => ( ({...}? => (otherlv_10= 'throws' ( (lv_throws_11_0= ruleThrowsIdentifier ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_12= 'hint' otherlv_13= '=' ( (lv_hint_14_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_httpMethod_15_0= ruleHttpMethod ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_16= 'path' otherlv_17= '=' ( (lv_path_18_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'return' otherlv_20= '=' ( (lv_returnString_21_0= RULE_STRING ) ) ) ) ) ) )* ) ) )
            // InternalContextMappingDSL.g:6378:4: ( ( ( ({...}? => ( ({...}? => (otherlv_10= 'throws' ( (lv_throws_11_0= ruleThrowsIdentifier ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_12= 'hint' otherlv_13= '=' ( (lv_hint_14_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_httpMethod_15_0= ruleHttpMethod ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_16= 'path' otherlv_17= '=' ( (lv_path_18_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'return' otherlv_20= '=' ( (lv_returnString_21_0= RULE_STRING ) ) ) ) ) ) )* ) )
            {
            // InternalContextMappingDSL.g:6378:4: ( ( ( ({...}? => ( ({...}? => (otherlv_10= 'throws' ( (lv_throws_11_0= ruleThrowsIdentifier ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_12= 'hint' otherlv_13= '=' ( (lv_hint_14_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_httpMethod_15_0= ruleHttpMethod ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_16= 'path' otherlv_17= '=' ( (lv_path_18_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'return' otherlv_20= '=' ( (lv_returnString_21_0= RULE_STRING ) ) ) ) ) ) )* ) )
            // InternalContextMappingDSL.g:6379:5: ( ( ({...}? => ( ({...}? => (otherlv_10= 'throws' ( (lv_throws_11_0= ruleThrowsIdentifier ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_12= 'hint' otherlv_13= '=' ( (lv_hint_14_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_httpMethod_15_0= ruleHttpMethod ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_16= 'path' otherlv_17= '=' ( (lv_path_18_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'return' otherlv_20= '=' ( (lv_returnString_21_0= RULE_STRING ) ) ) ) ) ) )* )
            {
             
            				  getUnorderedGroupHelper().enter(grammarAccess.getResourceOperationAccess().getUnorderedGroup_5());
            				
            // InternalContextMappingDSL.g:6382:5: ( ( ({...}? => ( ({...}? => (otherlv_10= 'throws' ( (lv_throws_11_0= ruleThrowsIdentifier ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_12= 'hint' otherlv_13= '=' ( (lv_hint_14_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_httpMethod_15_0= ruleHttpMethod ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_16= 'path' otherlv_17= '=' ( (lv_path_18_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'return' otherlv_20= '=' ( (lv_returnString_21_0= RULE_STRING ) ) ) ) ) ) )* )
            // InternalContextMappingDSL.g:6383:6: ( ({...}? => ( ({...}? => (otherlv_10= 'throws' ( (lv_throws_11_0= ruleThrowsIdentifier ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_12= 'hint' otherlv_13= '=' ( (lv_hint_14_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_httpMethod_15_0= ruleHttpMethod ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_16= 'path' otherlv_17= '=' ( (lv_path_18_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'return' otherlv_20= '=' ( (lv_returnString_21_0= RULE_STRING ) ) ) ) ) ) )*
            {
            // InternalContextMappingDSL.g:6383:6: ( ({...}? => ( ({...}? => (otherlv_10= 'throws' ( (lv_throws_11_0= ruleThrowsIdentifier ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_12= 'hint' otherlv_13= '=' ( (lv_hint_14_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_httpMethod_15_0= ruleHttpMethod ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_16= 'path' otherlv_17= '=' ( (lv_path_18_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'return' otherlv_20= '=' ( (lv_returnString_21_0= RULE_STRING ) ) ) ) ) ) )*
            loop182:
            do {
                int alt182=6;
                int LA182_0 = input.LA(1);

                if ( LA182_0 == 89 && getUnorderedGroupHelper().canSelect(grammarAccess.getResourceOperationAccess().getUnorderedGroup_5(), 0) ) {
                    alt182=1;
                }
                else if ( LA182_0 == 67 && getUnorderedGroupHelper().canSelect(grammarAccess.getResourceOperationAccess().getUnorderedGroup_5(), 1) ) {
                    alt182=2;
                }
                else if ( LA182_0 >= 218 && LA182_0 <= 222 && getUnorderedGroupHelper().canSelect(grammarAccess.getResourceOperationAccess().getUnorderedGroup_5(), 2) ) {
                    alt182=3;
                }
                else if ( LA182_0 == 76 && getUnorderedGroupHelper().canSelect(grammarAccess.getResourceOperationAccess().getUnorderedGroup_5(), 3) ) {
                    alt182=4;
                }
                else if ( LA182_0 == 92 && getUnorderedGroupHelper().canSelect(grammarAccess.getResourceOperationAccess().getUnorderedGroup_5(), 4) ) {
                    alt182=5;
                }


                switch (alt182) {
            	case 1 :
            	    // InternalContextMappingDSL.g:6384:4: ({...}? => ( ({...}? => (otherlv_10= 'throws' ( (lv_throws_11_0= ruleThrowsIdentifier ) ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:6384:4: ({...}? => ( ({...}? => (otherlv_10= 'throws' ( (lv_throws_11_0= ruleThrowsIdentifier ) ) ) ) ) )
            	    // InternalContextMappingDSL.g:6385:5: {...}? => ( ({...}? => (otherlv_10= 'throws' ( (lv_throws_11_0= ruleThrowsIdentifier ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getResourceOperationAccess().getUnorderedGroup_5(), 0) ) {
            	        throw new FailedPredicateException(input, "ruleResourceOperation", "getUnorderedGroupHelper().canSelect(grammarAccess.getResourceOperationAccess().getUnorderedGroup_5(), 0)");
            	    }
            	    // InternalContextMappingDSL.g:6385:114: ( ({...}? => (otherlv_10= 'throws' ( (lv_throws_11_0= ruleThrowsIdentifier ) ) ) ) )
            	    // InternalContextMappingDSL.g:6386:6: ({...}? => (otherlv_10= 'throws' ( (lv_throws_11_0= ruleThrowsIdentifier ) ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getResourceOperationAccess().getUnorderedGroup_5(), 0);
            	    					
            	    // InternalContextMappingDSL.g:6389:9: ({...}? => (otherlv_10= 'throws' ( (lv_throws_11_0= ruleThrowsIdentifier ) ) ) )
            	    // InternalContextMappingDSL.g:6389:10: {...}? => (otherlv_10= 'throws' ( (lv_throws_11_0= ruleThrowsIdentifier ) ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleResourceOperation", "true");
            	    }
            	    // InternalContextMappingDSL.g:6389:19: (otherlv_10= 'throws' ( (lv_throws_11_0= ruleThrowsIdentifier ) ) )
            	    // InternalContextMappingDSL.g:6389:20: otherlv_10= 'throws' ( (lv_throws_11_0= ruleThrowsIdentifier ) )
            	    {
            	    otherlv_10=(Token)match(input,89,FOLLOW_10); 

            	    									newLeafNode(otherlv_10, grammarAccess.getResourceOperationAccess().getThrowsKeyword_5_0_0());
            	    								
            	    // InternalContextMappingDSL.g:6393:9: ( (lv_throws_11_0= ruleThrowsIdentifier ) )
            	    // InternalContextMappingDSL.g:6394:10: (lv_throws_11_0= ruleThrowsIdentifier )
            	    {
            	    // InternalContextMappingDSL.g:6394:10: (lv_throws_11_0= ruleThrowsIdentifier )
            	    // InternalContextMappingDSL.g:6395:11: lv_throws_11_0= ruleThrowsIdentifier
            	    {

            	    											newCompositeNode(grammarAccess.getResourceOperationAccess().getThrowsThrowsIdentifierParserRuleCall_5_0_1_0());
            	    										
            	    pushFollow(FOLLOW_113);
            	    lv_throws_11_0=ruleThrowsIdentifier();

            	    state._fsp--;


            	    											if (current==null) {
            	    												current = createModelElementForParent(grammarAccess.getResourceOperationRule());
            	    											}
            	    											set(
            	    												current,
            	    												"throws",
            	    												lv_throws_11_0,
            	    												"org.contextmapper.tactic.dsl.TacticDDDLanguage.ThrowsIdentifier");
            	    											afterParserOrEnumRuleCall();
            	    										

            	    }


            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getResourceOperationAccess().getUnorderedGroup_5());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 2 :
            	    // InternalContextMappingDSL.g:6418:4: ({...}? => ( ({...}? => (otherlv_12= 'hint' otherlv_13= '=' ( (lv_hint_14_0= RULE_STRING ) ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:6418:4: ({...}? => ( ({...}? => (otherlv_12= 'hint' otherlv_13= '=' ( (lv_hint_14_0= RULE_STRING ) ) ) ) ) )
            	    // InternalContextMappingDSL.g:6419:5: {...}? => ( ({...}? => (otherlv_12= 'hint' otherlv_13= '=' ( (lv_hint_14_0= RULE_STRING ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getResourceOperationAccess().getUnorderedGroup_5(), 1) ) {
            	        throw new FailedPredicateException(input, "ruleResourceOperation", "getUnorderedGroupHelper().canSelect(grammarAccess.getResourceOperationAccess().getUnorderedGroup_5(), 1)");
            	    }
            	    // InternalContextMappingDSL.g:6419:114: ( ({...}? => (otherlv_12= 'hint' otherlv_13= '=' ( (lv_hint_14_0= RULE_STRING ) ) ) ) )
            	    // InternalContextMappingDSL.g:6420:6: ({...}? => (otherlv_12= 'hint' otherlv_13= '=' ( (lv_hint_14_0= RULE_STRING ) ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getResourceOperationAccess().getUnorderedGroup_5(), 1);
            	    					
            	    // InternalContextMappingDSL.g:6423:9: ({...}? => (otherlv_12= 'hint' otherlv_13= '=' ( (lv_hint_14_0= RULE_STRING ) ) ) )
            	    // InternalContextMappingDSL.g:6423:10: {...}? => (otherlv_12= 'hint' otherlv_13= '=' ( (lv_hint_14_0= RULE_STRING ) ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleResourceOperation", "true");
            	    }
            	    // InternalContextMappingDSL.g:6423:19: (otherlv_12= 'hint' otherlv_13= '=' ( (lv_hint_14_0= RULE_STRING ) ) )
            	    // InternalContextMappingDSL.g:6423:20: otherlv_12= 'hint' otherlv_13= '=' ( (lv_hint_14_0= RULE_STRING ) )
            	    {
            	    otherlv_12=(Token)match(input,67,FOLLOW_81); 

            	    									newLeafNode(otherlv_12, grammarAccess.getResourceOperationAccess().getHintKeyword_5_1_0());
            	    								
            	    otherlv_13=(Token)match(input,21,FOLLOW_4); 

            	    									newLeafNode(otherlv_13, grammarAccess.getResourceOperationAccess().getEqualsSignKeyword_5_1_1());
            	    								
            	    // InternalContextMappingDSL.g:6431:9: ( (lv_hint_14_0= RULE_STRING ) )
            	    // InternalContextMappingDSL.g:6432:10: (lv_hint_14_0= RULE_STRING )
            	    {
            	    // InternalContextMappingDSL.g:6432:10: (lv_hint_14_0= RULE_STRING )
            	    // InternalContextMappingDSL.g:6433:11: lv_hint_14_0= RULE_STRING
            	    {
            	    lv_hint_14_0=(Token)match(input,RULE_STRING,FOLLOW_113); 

            	    											newLeafNode(lv_hint_14_0, grammarAccess.getResourceOperationAccess().getHintSTRINGTerminalRuleCall_5_1_2_0());
            	    										

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getResourceOperationRule());
            	    											}
            	    											setWithLastConsumed(
            	    												current,
            	    												"hint",
            	    												lv_hint_14_0,
            	    												"org.eclipse.xtext.common.Terminals.STRING");
            	    										

            	    }


            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getResourceOperationAccess().getUnorderedGroup_5());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 3 :
            	    // InternalContextMappingDSL.g:6455:4: ({...}? => ( ({...}? => ( (lv_httpMethod_15_0= ruleHttpMethod ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:6455:4: ({...}? => ( ({...}? => ( (lv_httpMethod_15_0= ruleHttpMethod ) ) ) ) )
            	    // InternalContextMappingDSL.g:6456:5: {...}? => ( ({...}? => ( (lv_httpMethod_15_0= ruleHttpMethod ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getResourceOperationAccess().getUnorderedGroup_5(), 2) ) {
            	        throw new FailedPredicateException(input, "ruleResourceOperation", "getUnorderedGroupHelper().canSelect(grammarAccess.getResourceOperationAccess().getUnorderedGroup_5(), 2)");
            	    }
            	    // InternalContextMappingDSL.g:6456:114: ( ({...}? => ( (lv_httpMethod_15_0= ruleHttpMethod ) ) ) )
            	    // InternalContextMappingDSL.g:6457:6: ({...}? => ( (lv_httpMethod_15_0= ruleHttpMethod ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getResourceOperationAccess().getUnorderedGroup_5(), 2);
            	    					
            	    // InternalContextMappingDSL.g:6460:9: ({...}? => ( (lv_httpMethod_15_0= ruleHttpMethod ) ) )
            	    // InternalContextMappingDSL.g:6460:10: {...}? => ( (lv_httpMethod_15_0= ruleHttpMethod ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleResourceOperation", "true");
            	    }
            	    // InternalContextMappingDSL.g:6460:19: ( (lv_httpMethod_15_0= ruleHttpMethod ) )
            	    // InternalContextMappingDSL.g:6460:20: (lv_httpMethod_15_0= ruleHttpMethod )
            	    {
            	    // InternalContextMappingDSL.g:6460:20: (lv_httpMethod_15_0= ruleHttpMethod )
            	    // InternalContextMappingDSL.g:6461:10: lv_httpMethod_15_0= ruleHttpMethod
            	    {

            	    										newCompositeNode(grammarAccess.getResourceOperationAccess().getHttpMethodHttpMethodEnumRuleCall_5_2_0());
            	    									
            	    pushFollow(FOLLOW_113);
            	    lv_httpMethod_15_0=ruleHttpMethod();

            	    state._fsp--;


            	    										if (current==null) {
            	    											current = createModelElementForParent(grammarAccess.getResourceOperationRule());
            	    										}
            	    										set(
            	    											current,
            	    											"httpMethod",
            	    											lv_httpMethod_15_0,
            	    											"org.contextmapper.tactic.dsl.TacticDDDLanguage.HttpMethod");
            	    										afterParserOrEnumRuleCall();
            	    									

            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getResourceOperationAccess().getUnorderedGroup_5());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 4 :
            	    // InternalContextMappingDSL.g:6483:4: ({...}? => ( ({...}? => (otherlv_16= 'path' otherlv_17= '=' ( (lv_path_18_0= RULE_STRING ) ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:6483:4: ({...}? => ( ({...}? => (otherlv_16= 'path' otherlv_17= '=' ( (lv_path_18_0= RULE_STRING ) ) ) ) ) )
            	    // InternalContextMappingDSL.g:6484:5: {...}? => ( ({...}? => (otherlv_16= 'path' otherlv_17= '=' ( (lv_path_18_0= RULE_STRING ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getResourceOperationAccess().getUnorderedGroup_5(), 3) ) {
            	        throw new FailedPredicateException(input, "ruleResourceOperation", "getUnorderedGroupHelper().canSelect(grammarAccess.getResourceOperationAccess().getUnorderedGroup_5(), 3)");
            	    }
            	    // InternalContextMappingDSL.g:6484:114: ( ({...}? => (otherlv_16= 'path' otherlv_17= '=' ( (lv_path_18_0= RULE_STRING ) ) ) ) )
            	    // InternalContextMappingDSL.g:6485:6: ({...}? => (otherlv_16= 'path' otherlv_17= '=' ( (lv_path_18_0= RULE_STRING ) ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getResourceOperationAccess().getUnorderedGroup_5(), 3);
            	    					
            	    // InternalContextMappingDSL.g:6488:9: ({...}? => (otherlv_16= 'path' otherlv_17= '=' ( (lv_path_18_0= RULE_STRING ) ) ) )
            	    // InternalContextMappingDSL.g:6488:10: {...}? => (otherlv_16= 'path' otherlv_17= '=' ( (lv_path_18_0= RULE_STRING ) ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleResourceOperation", "true");
            	    }
            	    // InternalContextMappingDSL.g:6488:19: (otherlv_16= 'path' otherlv_17= '=' ( (lv_path_18_0= RULE_STRING ) ) )
            	    // InternalContextMappingDSL.g:6488:20: otherlv_16= 'path' otherlv_17= '=' ( (lv_path_18_0= RULE_STRING ) )
            	    {
            	    otherlv_16=(Token)match(input,76,FOLLOW_81); 

            	    									newLeafNode(otherlv_16, grammarAccess.getResourceOperationAccess().getPathKeyword_5_3_0());
            	    								
            	    otherlv_17=(Token)match(input,21,FOLLOW_4); 

            	    									newLeafNode(otherlv_17, grammarAccess.getResourceOperationAccess().getEqualsSignKeyword_5_3_1());
            	    								
            	    // InternalContextMappingDSL.g:6496:9: ( (lv_path_18_0= RULE_STRING ) )
            	    // InternalContextMappingDSL.g:6497:10: (lv_path_18_0= RULE_STRING )
            	    {
            	    // InternalContextMappingDSL.g:6497:10: (lv_path_18_0= RULE_STRING )
            	    // InternalContextMappingDSL.g:6498:11: lv_path_18_0= RULE_STRING
            	    {
            	    lv_path_18_0=(Token)match(input,RULE_STRING,FOLLOW_113); 

            	    											newLeafNode(lv_path_18_0, grammarAccess.getResourceOperationAccess().getPathSTRINGTerminalRuleCall_5_3_2_0());
            	    										

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getResourceOperationRule());
            	    											}
            	    											setWithLastConsumed(
            	    												current,
            	    												"path",
            	    												lv_path_18_0,
            	    												"org.eclipse.xtext.common.Terminals.STRING");
            	    										

            	    }


            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getResourceOperationAccess().getUnorderedGroup_5());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 5 :
            	    // InternalContextMappingDSL.g:6520:4: ({...}? => ( ({...}? => (otherlv_19= 'return' otherlv_20= '=' ( (lv_returnString_21_0= RULE_STRING ) ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:6520:4: ({...}? => ( ({...}? => (otherlv_19= 'return' otherlv_20= '=' ( (lv_returnString_21_0= RULE_STRING ) ) ) ) ) )
            	    // InternalContextMappingDSL.g:6521:5: {...}? => ( ({...}? => (otherlv_19= 'return' otherlv_20= '=' ( (lv_returnString_21_0= RULE_STRING ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getResourceOperationAccess().getUnorderedGroup_5(), 4) ) {
            	        throw new FailedPredicateException(input, "ruleResourceOperation", "getUnorderedGroupHelper().canSelect(grammarAccess.getResourceOperationAccess().getUnorderedGroup_5(), 4)");
            	    }
            	    // InternalContextMappingDSL.g:6521:114: ( ({...}? => (otherlv_19= 'return' otherlv_20= '=' ( (lv_returnString_21_0= RULE_STRING ) ) ) ) )
            	    // InternalContextMappingDSL.g:6522:6: ({...}? => (otherlv_19= 'return' otherlv_20= '=' ( (lv_returnString_21_0= RULE_STRING ) ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getResourceOperationAccess().getUnorderedGroup_5(), 4);
            	    					
            	    // InternalContextMappingDSL.g:6525:9: ({...}? => (otherlv_19= 'return' otherlv_20= '=' ( (lv_returnString_21_0= RULE_STRING ) ) ) )
            	    // InternalContextMappingDSL.g:6525:10: {...}? => (otherlv_19= 'return' otherlv_20= '=' ( (lv_returnString_21_0= RULE_STRING ) ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleResourceOperation", "true");
            	    }
            	    // InternalContextMappingDSL.g:6525:19: (otherlv_19= 'return' otherlv_20= '=' ( (lv_returnString_21_0= RULE_STRING ) ) )
            	    // InternalContextMappingDSL.g:6525:20: otherlv_19= 'return' otherlv_20= '=' ( (lv_returnString_21_0= RULE_STRING ) )
            	    {
            	    otherlv_19=(Token)match(input,92,FOLLOW_81); 

            	    									newLeafNode(otherlv_19, grammarAccess.getResourceOperationAccess().getReturnKeyword_5_4_0());
            	    								
            	    otherlv_20=(Token)match(input,21,FOLLOW_4); 

            	    									newLeafNode(otherlv_20, grammarAccess.getResourceOperationAccess().getEqualsSignKeyword_5_4_1());
            	    								
            	    // InternalContextMappingDSL.g:6533:9: ( (lv_returnString_21_0= RULE_STRING ) )
            	    // InternalContextMappingDSL.g:6534:10: (lv_returnString_21_0= RULE_STRING )
            	    {
            	    // InternalContextMappingDSL.g:6534:10: (lv_returnString_21_0= RULE_STRING )
            	    // InternalContextMappingDSL.g:6535:11: lv_returnString_21_0= RULE_STRING
            	    {
            	    lv_returnString_21_0=(Token)match(input,RULE_STRING,FOLLOW_113); 

            	    											newLeafNode(lv_returnString_21_0, grammarAccess.getResourceOperationAccess().getReturnStringSTRINGTerminalRuleCall_5_4_2_0());
            	    										

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getResourceOperationRule());
            	    											}
            	    											setWithLastConsumed(
            	    												current,
            	    												"returnString",
            	    												lv_returnString_21_0,
            	    												"org.eclipse.xtext.common.Terminals.STRING");
            	    										

            	    }


            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getResourceOperationAccess().getUnorderedGroup_5());
            	    					

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop182;
                }
            } while (true);


            }


            }

             
            				  getUnorderedGroupHelper().leave(grammarAccess.getResourceOperationAccess().getUnorderedGroup_5());
            				

            }

            // InternalContextMappingDSL.g:6564:3: ( (lv_delegateHolder_22_0= ruleResourceOperationDelegate ) )?
            int alt183=2;
            int LA183_0 = input.LA(1);

            if ( (LA183_0==RULE_DELEGATE) ) {
                alt183=1;
            }
            switch (alt183) {
                case 1 :
                    // InternalContextMappingDSL.g:6565:4: (lv_delegateHolder_22_0= ruleResourceOperationDelegate )
                    {
                    // InternalContextMappingDSL.g:6565:4: (lv_delegateHolder_22_0= ruleResourceOperationDelegate )
                    // InternalContextMappingDSL.g:6566:5: lv_delegateHolder_22_0= ruleResourceOperationDelegate
                    {

                    					newCompositeNode(grammarAccess.getResourceOperationAccess().getDelegateHolderResourceOperationDelegateParserRuleCall_6_0());
                    				
                    pushFollow(FOLLOW_108);
                    lv_delegateHolder_22_0=ruleResourceOperationDelegate();

                    state._fsp--;


                    					if (current==null) {
                    						current = createModelElementForParent(grammarAccess.getResourceOperationRule());
                    					}
                    					set(
                    						current,
                    						"delegateHolder",
                    						lv_delegateHolder_22_0,
                    						"org.contextmapper.tactic.dsl.TacticDDDLanguage.ResourceOperationDelegate");
                    					afterParserOrEnumRuleCall();
                    				

                    }


                    }
                    break;

            }

            otherlv_23=(Token)match(input,90,FOLLOW_2); 

            			newLeafNode(otherlv_23, grammarAccess.getResourceOperationAccess().getSemicolonKeyword_7());
            		

            }


            }


            	leaveRule();

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleResourceOperation"


    // $ANTLR start "entryRuleResourceOperationDelegate"
    // InternalContextMappingDSL.g:6591:1: entryRuleResourceOperationDelegate returns [EObject current=null] : iv_ruleResourceOperationDelegate= ruleResourceOperationDelegate EOF ;
    public final EObject entryRuleResourceOperationDelegate() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleResourceOperationDelegate = null;


        try {
            // InternalContextMappingDSL.g:6591:66: (iv_ruleResourceOperationDelegate= ruleResourceOperationDelegate EOF )
            // InternalContextMappingDSL.g:6592:2: iv_ruleResourceOperationDelegate= ruleResourceOperationDelegate EOF
            {
             newCompositeNode(grammarAccess.getResourceOperationDelegateRule()); 
            pushFollow(FOLLOW_1);
            iv_ruleResourceOperationDelegate=ruleResourceOperationDelegate();

            state._fsp--;

             current =iv_ruleResourceOperationDelegate; 
            match(input,EOF,FOLLOW_2); 

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleResourceOperationDelegate"


    // $ANTLR start "ruleResourceOperationDelegate"
    // InternalContextMappingDSL.g:6598:1: ruleResourceOperationDelegate returns [EObject current=null] : (this_DELEGATE_0= RULE_DELEGATE (otherlv_1= '@' )? ( (otherlv_2= RULE_ID ) ) otherlv_3= '.' ( (otherlv_4= RULE_ID ) ) ) ;
    public final EObject ruleResourceOperationDelegate() throws RecognitionException {
        EObject current = null;

        Token this_DELEGATE_0=null;
        Token otherlv_1=null;
        Token otherlv_2=null;
        Token otherlv_3=null;
        Token otherlv_4=null;


        	enterRule();

        try {
            // InternalContextMappingDSL.g:6604:2: ( (this_DELEGATE_0= RULE_DELEGATE (otherlv_1= '@' )? ( (otherlv_2= RULE_ID ) ) otherlv_3= '.' ( (otherlv_4= RULE_ID ) ) ) )
            // InternalContextMappingDSL.g:6605:2: (this_DELEGATE_0= RULE_DELEGATE (otherlv_1= '@' )? ( (otherlv_2= RULE_ID ) ) otherlv_3= '.' ( (otherlv_4= RULE_ID ) ) )
            {
            // InternalContextMappingDSL.g:6605:2: (this_DELEGATE_0= RULE_DELEGATE (otherlv_1= '@' )? ( (otherlv_2= RULE_ID ) ) otherlv_3= '.' ( (otherlv_4= RULE_ID ) ) )
            // InternalContextMappingDSL.g:6606:3: this_DELEGATE_0= RULE_DELEGATE (otherlv_1= '@' )? ( (otherlv_2= RULE_ID ) ) otherlv_3= '.' ( (otherlv_4= RULE_ID ) )
            {
            this_DELEGATE_0=(Token)match(input,RULE_DELEGATE,FOLLOW_96); 

            			newLeafNode(this_DELEGATE_0, grammarAccess.getResourceOperationDelegateAccess().getDELEGATETerminalRuleCall_0());
            		
            // InternalContextMappingDSL.g:6610:3: (otherlv_1= '@' )?
            int alt184=2;
            int LA184_0 = input.LA(1);

            if ( (LA184_0==79) ) {
                alt184=1;
            }
            switch (alt184) {
                case 1 :
                    // InternalContextMappingDSL.g:6611:4: otherlv_1= '@'
                    {
                    otherlv_1=(Token)match(input,79,FOLLOW_10); 

                    				newLeafNode(otherlv_1, grammarAccess.getResourceOperationDelegateAccess().getCommercialAtKeyword_1());
                    			

                    }
                    break;

            }

            // InternalContextMappingDSL.g:6616:3: ( (otherlv_2= RULE_ID ) )
            // InternalContextMappingDSL.g:6617:4: (otherlv_2= RULE_ID )
            {
            // InternalContextMappingDSL.g:6617:4: (otherlv_2= RULE_ID )
            // InternalContextMappingDSL.g:6618:5: otherlv_2= RULE_ID
            {

            					if (current==null) {
            						current = createModelElement(grammarAccess.getResourceOperationDelegateRule());
            					}
            				
            otherlv_2=(Token)match(input,RULE_ID,FOLLOW_109); 

            					newLeafNode(otherlv_2, grammarAccess.getResourceOperationDelegateAccess().getDelegateServiceCrossReference_2_0());
            				

            }


            }

            otherlv_3=(Token)match(input,91,FOLLOW_10); 

            			newLeafNode(otherlv_3, grammarAccess.getResourceOperationDelegateAccess().getFullStopKeyword_3());
            		
            // InternalContextMappingDSL.g:6633:3: ( (otherlv_4= RULE_ID ) )
            // InternalContextMappingDSL.g:6634:4: (otherlv_4= RULE_ID )
            {
            // InternalContextMappingDSL.g:6634:4: (otherlv_4= RULE_ID )
            // InternalContextMappingDSL.g:6635:5: otherlv_4= RULE_ID
            {

            					if (current==null) {
            						current = createModelElement(grammarAccess.getResourceOperationDelegateRule());
            					}
            				
            otherlv_4=(Token)match(input,RULE_ID,FOLLOW_2); 

            					newLeafNode(otherlv_4, grammarAccess.getResourceOperationDelegateAccess().getDelegateOperationServiceOperationCrossReference_4_0());
            				

            }


            }


            }


            }


            	leaveRule();

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleResourceOperationDelegate"


    // $ANTLR start "entryRuleRepositoryOperation"
    // InternalContextMappingDSL.g:6650:1: entryRuleRepositoryOperation returns [EObject current=null] : iv_ruleRepositoryOperation= ruleRepositoryOperation EOF ;
    public final EObject entryRuleRepositoryOperation() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleRepositoryOperation = null;


        try {
            // InternalContextMappingDSL.g:6650:60: (iv_ruleRepositoryOperation= ruleRepositoryOperation EOF )
            // InternalContextMappingDSL.g:6651:2: iv_ruleRepositoryOperation= ruleRepositoryOperation EOF
            {
             newCompositeNode(grammarAccess.getRepositoryOperationRule()); 
            pushFollow(FOLLOW_1);
            iv_ruleRepositoryOperation=ruleRepositoryOperation();

            state._fsp--;

             current =iv_ruleRepositoryOperation; 
            match(input,EOF,FOLLOW_2); 

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleRepositoryOperation"


    // $ANTLR start "ruleRepositoryOperation"
    // InternalContextMappingDSL.g:6657:1: ruleRepositoryOperation returns [EObject current=null] : ( ( (lv_doc_0_0= RULE_STRING ) )? ( (lv_visibility_1_0= ruleVisibility ) )? ( ( (lv_returnType_2_0= ruleComplexType ) ) | otherlv_3= 'void' )? ( (lv_name_4_0= RULE_ID ) ) (otherlv_5= '(' ( (lv_parameters_6_0= ruleParameter ) )? (otherlv_7= ',' ( (lv_parameters_8_0= ruleParameter ) ) )* otherlv_9= ')' )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_11= 'throws' ( (lv_throws_12_0= ruleThrowsIdentifier ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_13= 'hint' otherlv_14= '=' ( (lv_hint_15_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_cache_16_0= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapOperation_17_0= 'gap' ) ) | ( (lv_noGapOperation_18_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'query' otherlv_20= '=' ( (lv_query_21_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_22= 'condition' otherlv_23= '=' ( (lv_condition_24_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_25= 'select' otherlv_26= '=' ( (lv_select_27_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_28= 'groupBy' otherlv_29= '=' ( (lv_groupBy_30_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_31= 'orderBy' otherlv_32= '=' ( (lv_orderBy_33_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_construct_34_0= 'construct' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_build_35_0= 'build' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_map_36_0= 'map' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_publish_37_0= rulePublish ) ) ) ) ) )* ) ) ) ( ( (lv_delegateToAccessObject_38_0= RULE_DELEGATE ) ) (otherlv_39= 'AccessObject' | ( (lv_accessObjectName_40_0= RULE_ID ) ) ) )? otherlv_41= ';' ) ;
    public final EObject ruleRepositoryOperation() throws RecognitionException {
        EObject current = null;

        Token lv_doc_0_0=null;
        Token otherlv_3=null;
        Token lv_name_4_0=null;
        Token otherlv_5=null;
        Token otherlv_7=null;
        Token otherlv_9=null;
        Token otherlv_11=null;
        Token otherlv_13=null;
        Token otherlv_14=null;
        Token lv_hint_15_0=null;
        Token lv_cache_16_0=null;
        Token lv_gapOperation_17_0=null;
        Token lv_noGapOperation_18_0=null;
        Token otherlv_19=null;
        Token otherlv_20=null;
        Token lv_query_21_0=null;
        Token otherlv_22=null;
        Token otherlv_23=null;
        Token lv_condition_24_0=null;
        Token otherlv_25=null;
        Token otherlv_26=null;
        Token lv_select_27_0=null;
        Token otherlv_28=null;
        Token otherlv_29=null;
        Token lv_groupBy_30_0=null;
        Token otherlv_31=null;
        Token otherlv_32=null;
        Token lv_orderBy_33_0=null;
        Token lv_construct_34_0=null;
        Token lv_build_35_0=null;
        Token lv_map_36_0=null;
        Token lv_delegateToAccessObject_38_0=null;
        Token otherlv_39=null;
        Token lv_accessObjectName_40_0=null;
        Token otherlv_41=null;
        Enumerator lv_visibility_1_0 = null;

        EObject lv_returnType_2_0 = null;

        EObject lv_parameters_6_0 = null;

        EObject lv_parameters_8_0 = null;

        AntlrDatatypeRuleToken lv_throws_12_0 = null;

        EObject lv_publish_37_0 = null;



        	enterRule();

        try {
            // InternalContextMappingDSL.g:6663:2: ( ( ( (lv_doc_0_0= RULE_STRING ) )? ( (lv_visibility_1_0= ruleVisibility ) )? ( ( (lv_returnType_2_0= ruleComplexType ) ) | otherlv_3= 'void' )? ( (lv_name_4_0= RULE_ID ) ) (otherlv_5= '(' ( (lv_parameters_6_0= ruleParameter ) )? (otherlv_7= ',' ( (lv_parameters_8_0= ruleParameter ) ) )* otherlv_9= ')' )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_11= 'throws' ( (lv_throws_12_0= ruleThrowsIdentifier ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_13= 'hint' otherlv_14= '=' ( (lv_hint_15_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_cache_16_0= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapOperation_17_0= 'gap' ) ) | ( (lv_noGapOperation_18_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'query' otherlv_20= '=' ( (lv_query_21_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_22= 'condition' otherlv_23= '=' ( (lv_condition_24_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_25= 'select' otherlv_26= '=' ( (lv_select_27_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_28= 'groupBy' otherlv_29= '=' ( (lv_groupBy_30_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_31= 'orderBy' otherlv_32= '=' ( (lv_orderBy_33_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_construct_34_0= 'construct' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_build_35_0= 'build' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_map_36_0= 'map' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_publish_37_0= rulePublish ) ) ) ) ) )* ) ) ) ( ( (lv_delegateToAccessObject_38_0= RULE_DELEGATE ) ) (otherlv_39= 'AccessObject' | ( (lv_accessObjectName_40_0= RULE_ID ) ) ) )? otherlv_41= ';' ) )
            // InternalContextMappingDSL.g:6664:2: ( ( (lv_doc_0_0= RULE_STRING ) )? ( (lv_visibility_1_0= ruleVisibility ) )? ( ( (lv_returnType_2_0= ruleComplexType ) ) | otherlv_3= 'void' )? ( (lv_name_4_0= RULE_ID ) ) (otherlv_5= '(' ( (lv_parameters_6_0= ruleParameter ) )? (otherlv_7= ',' ( (lv_parameters_8_0= ruleParameter ) ) )* otherlv_9= ')' )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_11= 'throws' ( (lv_throws_12_0= ruleThrowsIdentifier ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_13= 'hint' otherlv_14= '=' ( (lv_hint_15_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_cache_16_0= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapOperation_17_0= 'gap' ) ) | ( (lv_noGapOperation_18_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'query' otherlv_20= '=' ( (lv_query_21_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_22= 'condition' otherlv_23= '=' ( (lv_condition_24_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_25= 'select' otherlv_26= '=' ( (lv_select_27_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_28= 'groupBy' otherlv_29= '=' ( (lv_groupBy_30_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_31= 'orderBy' otherlv_32= '=' ( (lv_orderBy_33_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_construct_34_0= 'construct' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_build_35_0= 'build' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_map_36_0= 'map' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_publish_37_0= rulePublish ) ) ) ) ) )* ) ) ) ( ( (lv_delegateToAccessObject_38_0= RULE_DELEGATE ) ) (otherlv_39= 'AccessObject' | ( (lv_accessObjectName_40_0= RULE_ID ) ) ) )? otherlv_41= ';' )
            {
            // InternalContextMappingDSL.g:6664:2: ( ( (lv_doc_0_0= RULE_STRING ) )? ( (lv_visibility_1_0= ruleVisibility ) )? ( ( (lv_returnType_2_0= ruleComplexType ) ) | otherlv_3= 'void' )? ( (lv_name_4_0= RULE_ID ) ) (otherlv_5= '(' ( (lv_parameters_6_0= ruleParameter ) )? (otherlv_7= ',' ( (lv_parameters_8_0= ruleParameter ) ) )* otherlv_9= ')' )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_11= 'throws' ( (lv_throws_12_0= ruleThrowsIdentifier ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_13= 'hint' otherlv_14= '=' ( (lv_hint_15_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_cache_16_0= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapOperation_17_0= 'gap' ) ) | ( (lv_noGapOperation_18_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'query' otherlv_20= '=' ( (lv_query_21_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_22= 'condition' otherlv_23= '=' ( (lv_condition_24_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_25= 'select' otherlv_26= '=' ( (lv_select_27_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_28= 'groupBy' otherlv_29= '=' ( (lv_groupBy_30_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_31= 'orderBy' otherlv_32= '=' ( (lv_orderBy_33_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_construct_34_0= 'construct' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_build_35_0= 'build' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_map_36_0= 'map' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_publish_37_0= rulePublish ) ) ) ) ) )* ) ) ) ( ( (lv_delegateToAccessObject_38_0= RULE_DELEGATE ) ) (otherlv_39= 'AccessObject' | ( (lv_accessObjectName_40_0= RULE_ID ) ) ) )? otherlv_41= ';' )
            // InternalContextMappingDSL.g:6665:3: ( (lv_doc_0_0= RULE_STRING ) )? ( (lv_visibility_1_0= ruleVisibility ) )? ( ( (lv_returnType_2_0= ruleComplexType ) ) | otherlv_3= 'void' )? ( (lv_name_4_0= RULE_ID ) ) (otherlv_5= '(' ( (lv_parameters_6_0= ruleParameter ) )? (otherlv_7= ',' ( (lv_parameters_8_0= ruleParameter ) ) )* otherlv_9= ')' )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_11= 'throws' ( (lv_throws_12_0= ruleThrowsIdentifier ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_13= 'hint' otherlv_14= '=' ( (lv_hint_15_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_cache_16_0= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapOperation_17_0= 'gap' ) ) | ( (lv_noGapOperation_18_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'query' otherlv_20= '=' ( (lv_query_21_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_22= 'condition' otherlv_23= '=' ( (lv_condition_24_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_25= 'select' otherlv_26= '=' ( (lv_select_27_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_28= 'groupBy' otherlv_29= '=' ( (lv_groupBy_30_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_31= 'orderBy' otherlv_32= '=' ( (lv_orderBy_33_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_construct_34_0= 'construct' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_build_35_0= 'build' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_map_36_0= 'map' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_publish_37_0= rulePublish ) ) ) ) ) )* ) ) ) ( ( (lv_delegateToAccessObject_38_0= RULE_DELEGATE ) ) (otherlv_39= 'AccessObject' | ( (lv_accessObjectName_40_0= RULE_ID ) ) ) )? otherlv_41= ';'
            {
            // InternalContextMappingDSL.g:6665:3: ( (lv_doc_0_0= RULE_STRING ) )?
            int alt185=2;
            int LA185_0 = input.LA(1);

            if ( (LA185_0==RULE_STRING) ) {
                alt185=1;
            }
            switch (alt185) {
                case 1 :
                    // InternalContextMappingDSL.g:6666:4: (lv_doc_0_0= RULE_STRING )
                    {
                    // InternalContextMappingDSL.g:6666:4: (lv_doc_0_0= RULE_STRING )
                    // InternalContextMappingDSL.g:6667:5: lv_doc_0_0= RULE_STRING
                    {
                    lv_doc_0_0=(Token)match(input,RULE_STRING,FOLLOW_101); 

                    					newLeafNode(lv_doc_0_0, grammarAccess.getRepositoryOperationAccess().getDocSTRINGTerminalRuleCall_0_0());
                    				

                    					if (current==null) {
                    						current = createModelElement(grammarAccess.getRepositoryOperationRule());
                    					}
                    					setWithLastConsumed(
                    						current,
                    						"doc",
                    						lv_doc_0_0,
                    						"org.eclipse.xtext.common.Terminals.STRING");
                    				

                    }


                    }
                    break;

            }

            // InternalContextMappingDSL.g:6683:3: ( (lv_visibility_1_0= ruleVisibility ) )?
            int alt186=2;
            int LA186_0 = input.LA(1);

            if ( (LA186_0==109||(LA186_0>=232 && LA186_0<=234)) ) {
                alt186=1;
            }
            switch (alt186) {
                case 1 :
                    // InternalContextMappingDSL.g:6684:4: (lv_visibility_1_0= ruleVisibility )
                    {
                    // InternalContextMappingDSL.g:6684:4: (lv_visibility_1_0= ruleVisibility )
                    // InternalContextMappingDSL.g:6685:5: lv_visibility_1_0= ruleVisibility
                    {

                    					newCompositeNode(grammarAccess.getRepositoryOperationAccess().getVisibilityVisibilityEnumRuleCall_1_0());
                    				
                    pushFollow(FOLLOW_102);
                    lv_visibility_1_0=ruleVisibility();

                    state._fsp--;


                    					if (current==null) {
                    						current = createModelElementForParent(grammarAccess.getRepositoryOperationRule());
                    					}
                    					set(
                    						current,
                    						"visibility",
                    						lv_visibility_1_0,
                    						"org.contextmapper.tactic.dsl.TacticDDDLanguage.Visibility");
                    					afterParserOrEnumRuleCall();
                    				

                    }


                    }
                    break;

            }

            // InternalContextMappingDSL.g:6702:3: ( ( (lv_returnType_2_0= ruleComplexType ) ) | otherlv_3= 'void' )?
            int alt187=3;
            switch ( input.LA(1) ) {
                case RULE_MAP_COLLECTION_TYPE:
                case 79:
                case 170:
                case 171:
                case 172:
                case 173:
                case 174:
                case 175:
                case 176:
                case 177:
                case 178:
                case 179:
                case 180:
                case 181:
                case 182:
                case 183:
                case 184:
                case 185:
                case 186:
                case 187:
                case 188:
                case 189:
                case 190:
                case 191:
                case 218:
                case 228:
                case 229:
                case 230:
                case 231:
                    {
                    alt187=1;
                    }
                    break;
                case RULE_ID:
                    {
                    int LA187_2 = input.LA(2);

                    if ( (LA187_2==RULE_ID||LA187_2==91||LA187_2==103) ) {
                        alt187=1;
                    }
                    }
                    break;
                case 86:
                    {
                    alt187=2;
                    }
                    break;
            }

            switch (alt187) {
                case 1 :
                    // InternalContextMappingDSL.g:6703:4: ( (lv_returnType_2_0= ruleComplexType ) )
                    {
                    // InternalContextMappingDSL.g:6703:4: ( (lv_returnType_2_0= ruleComplexType ) )
                    // InternalContextMappingDSL.g:6704:5: (lv_returnType_2_0= ruleComplexType )
                    {
                    // InternalContextMappingDSL.g:6704:5: (lv_returnType_2_0= ruleComplexType )
                    // InternalContextMappingDSL.g:6705:6: lv_returnType_2_0= ruleComplexType
                    {

                    						newCompositeNode(grammarAccess.getRepositoryOperationAccess().getReturnTypeComplexTypeParserRuleCall_2_0_0());
                    					
                    pushFollow(FOLLOW_10);
                    lv_returnType_2_0=ruleComplexType();

                    state._fsp--;


                    						if (current==null) {
                    							current = createModelElementForParent(grammarAccess.getRepositoryOperationRule());
                    						}
                    						set(
                    							current,
                    							"returnType",
                    							lv_returnType_2_0,
                    							"org.contextmapper.tactic.dsl.TacticDDDLanguage.ComplexType");
                    						afterParserOrEnumRuleCall();
                    					

                    }


                    }


                    }
                    break;
                case 2 :
                    // InternalContextMappingDSL.g:6723:4: otherlv_3= 'void'
                    {
                    otherlv_3=(Token)match(input,86,FOLLOW_10); 

                    				newLeafNode(otherlv_3, grammarAccess.getRepositoryOperationAccess().getVoidKeyword_2_1());
                    			

                    }
                    break;

            }

            // InternalContextMappingDSL.g:6728:3: ( (lv_name_4_0= RULE_ID ) )
            // InternalContextMappingDSL.g:6729:4: (lv_name_4_0= RULE_ID )
            {
            // InternalContextMappingDSL.g:6729:4: (lv_name_4_0= RULE_ID )
            // InternalContextMappingDSL.g:6730:5: lv_name_4_0= RULE_ID
            {
            lv_name_4_0=(Token)match(input,RULE_ID,FOLLOW_114); 

            					newLeafNode(lv_name_4_0, grammarAccess.getRepositoryOperationAccess().getNameIDTerminalRuleCall_3_0());
            				

            					if (current==null) {
            						current = createModelElement(grammarAccess.getRepositoryOperationRule());
            					}
            					setWithLastConsumed(
            						current,
            						"name",
            						lv_name_4_0,
            						"org.eclipse.xtext.common.Terminals.ID");
            				

            }


            }

            // InternalContextMappingDSL.g:6746:3: (otherlv_5= '(' ( (lv_parameters_6_0= ruleParameter ) )? (otherlv_7= ',' ( (lv_parameters_8_0= ruleParameter ) ) )* otherlv_9= ')' )?
            int alt190=2;
            int LA190_0 = input.LA(1);

            if ( (LA190_0==87) ) {
                alt190=1;
            }
            switch (alt190) {
                case 1 :
                    // InternalContextMappingDSL.g:6747:4: otherlv_5= '(' ( (lv_parameters_6_0= ruleParameter ) )? (otherlv_7= ',' ( (lv_parameters_8_0= ruleParameter ) ) )* otherlv_9= ')'
                    {
                    otherlv_5=(Token)match(input,87,FOLLOW_104); 

                    				newLeafNode(otherlv_5, grammarAccess.getRepositoryOperationAccess().getLeftParenthesisKeyword_4_0());
                    			
                    // InternalContextMappingDSL.g:6751:4: ( (lv_parameters_6_0= ruleParameter ) )?
                    int alt188=2;
                    int LA188_0 = input.LA(1);

                    if ( ((LA188_0>=RULE_STRING && LA188_0<=RULE_ID)||LA188_0==RULE_MAP_COLLECTION_TYPE||LA188_0==79||(LA188_0>=170 && LA188_0<=191)||LA188_0==218||(LA188_0>=228 && LA188_0<=231)) ) {
                        alt188=1;
                    }
                    switch (alt188) {
                        case 1 :
                            // InternalContextMappingDSL.g:6752:5: (lv_parameters_6_0= ruleParameter )
                            {
                            // InternalContextMappingDSL.g:6752:5: (lv_parameters_6_0= ruleParameter )
                            // InternalContextMappingDSL.g:6753:6: lv_parameters_6_0= ruleParameter
                            {

                            						newCompositeNode(grammarAccess.getRepositoryOperationAccess().getParametersParameterParserRuleCall_4_1_0());
                            					
                            pushFollow(FOLLOW_105);
                            lv_parameters_6_0=ruleParameter();

                            state._fsp--;


                            						if (current==null) {
                            							current = createModelElementForParent(grammarAccess.getRepositoryOperationRule());
                            						}
                            						add(
                            							current,
                            							"parameters",
                            							lv_parameters_6_0,
                            							"org.contextmapper.tactic.dsl.TacticDDDLanguage.Parameter");
                            						afterParserOrEnumRuleCall();
                            					

                            }


                            }
                            break;

                    }

                    // InternalContextMappingDSL.g:6770:4: (otherlv_7= ',' ( (lv_parameters_8_0= ruleParameter ) ) )*
                    loop189:
                    do {
                        int alt189=2;
                        int LA189_0 = input.LA(1);

                        if ( (LA189_0==24) ) {
                            alt189=1;
                        }


                        switch (alt189) {
                    	case 1 :
                    	    // InternalContextMappingDSL.g:6771:5: otherlv_7= ',' ( (lv_parameters_8_0= ruleParameter ) )
                    	    {
                    	    otherlv_7=(Token)match(input,24,FOLLOW_106); 

                    	    					newLeafNode(otherlv_7, grammarAccess.getRepositoryOperationAccess().getCommaKeyword_4_2_0());
                    	    				
                    	    // InternalContextMappingDSL.g:6775:5: ( (lv_parameters_8_0= ruleParameter ) )
                    	    // InternalContextMappingDSL.g:6776:6: (lv_parameters_8_0= ruleParameter )
                    	    {
                    	    // InternalContextMappingDSL.g:6776:6: (lv_parameters_8_0= ruleParameter )
                    	    // InternalContextMappingDSL.g:6777:7: lv_parameters_8_0= ruleParameter
                    	    {

                    	    							newCompositeNode(grammarAccess.getRepositoryOperationAccess().getParametersParameterParserRuleCall_4_2_1_0());
                    	    						
                    	    pushFollow(FOLLOW_105);
                    	    lv_parameters_8_0=ruleParameter();

                    	    state._fsp--;


                    	    							if (current==null) {
                    	    								current = createModelElementForParent(grammarAccess.getRepositoryOperationRule());
                    	    							}
                    	    							add(
                    	    								current,
                    	    								"parameters",
                    	    								lv_parameters_8_0,
                    	    								"org.contextmapper.tactic.dsl.TacticDDDLanguage.Parameter");
                    	    							afterParserOrEnumRuleCall();
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop189;
                        }
                    } while (true);

                    otherlv_9=(Token)match(input,88,FOLLOW_115); 

                    				newLeafNode(otherlv_9, grammarAccess.getRepositoryOperationAccess().getRightParenthesisKeyword_4_3());
                    			

                    }
                    break;

            }

            // InternalContextMappingDSL.g:6800:3: ( ( ( ( ({...}? => ( ({...}? => (otherlv_11= 'throws' ( (lv_throws_12_0= ruleThrowsIdentifier ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_13= 'hint' otherlv_14= '=' ( (lv_hint_15_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_cache_16_0= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapOperation_17_0= 'gap' ) ) | ( (lv_noGapOperation_18_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'query' otherlv_20= '=' ( (lv_query_21_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_22= 'condition' otherlv_23= '=' ( (lv_condition_24_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_25= 'select' otherlv_26= '=' ( (lv_select_27_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_28= 'groupBy' otherlv_29= '=' ( (lv_groupBy_30_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_31= 'orderBy' otherlv_32= '=' ( (lv_orderBy_33_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_construct_34_0= 'construct' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_build_35_0= 'build' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_map_36_0= 'map' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_publish_37_0= rulePublish ) ) ) ) ) )* ) ) )
            // InternalContextMappingDSL.g:6801:4: ( ( ( ({...}? => ( ({...}? => (otherlv_11= 'throws' ( (lv_throws_12_0= ruleThrowsIdentifier ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_13= 'hint' otherlv_14= '=' ( (lv_hint_15_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_cache_16_0= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapOperation_17_0= 'gap' ) ) | ( (lv_noGapOperation_18_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'query' otherlv_20= '=' ( (lv_query_21_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_22= 'condition' otherlv_23= '=' ( (lv_condition_24_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_25= 'select' otherlv_26= '=' ( (lv_select_27_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_28= 'groupBy' otherlv_29= '=' ( (lv_groupBy_30_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_31= 'orderBy' otherlv_32= '=' ( (lv_orderBy_33_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_construct_34_0= 'construct' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_build_35_0= 'build' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_map_36_0= 'map' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_publish_37_0= rulePublish ) ) ) ) ) )* ) )
            {
            // InternalContextMappingDSL.g:6801:4: ( ( ( ({...}? => ( ({...}? => (otherlv_11= 'throws' ( (lv_throws_12_0= ruleThrowsIdentifier ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_13= 'hint' otherlv_14= '=' ( (lv_hint_15_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_cache_16_0= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapOperation_17_0= 'gap' ) ) | ( (lv_noGapOperation_18_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'query' otherlv_20= '=' ( (lv_query_21_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_22= 'condition' otherlv_23= '=' ( (lv_condition_24_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_25= 'select' otherlv_26= '=' ( (lv_select_27_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_28= 'groupBy' otherlv_29= '=' ( (lv_groupBy_30_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_31= 'orderBy' otherlv_32= '=' ( (lv_orderBy_33_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_construct_34_0= 'construct' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_build_35_0= 'build' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_map_36_0= 'map' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_publish_37_0= rulePublish ) ) ) ) ) )* ) )
            // InternalContextMappingDSL.g:6802:5: ( ( ({...}? => ( ({...}? => (otherlv_11= 'throws' ( (lv_throws_12_0= ruleThrowsIdentifier ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_13= 'hint' otherlv_14= '=' ( (lv_hint_15_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_cache_16_0= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapOperation_17_0= 'gap' ) ) | ( (lv_noGapOperation_18_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'query' otherlv_20= '=' ( (lv_query_21_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_22= 'condition' otherlv_23= '=' ( (lv_condition_24_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_25= 'select' otherlv_26= '=' ( (lv_select_27_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_28= 'groupBy' otherlv_29= '=' ( (lv_groupBy_30_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_31= 'orderBy' otherlv_32= '=' ( (lv_orderBy_33_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_construct_34_0= 'construct' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_build_35_0= 'build' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_map_36_0= 'map' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_publish_37_0= rulePublish ) ) ) ) ) )* )
            {
             
            				  getUnorderedGroupHelper().enter(grammarAccess.getRepositoryOperationAccess().getUnorderedGroup_5());
            				
            // InternalContextMappingDSL.g:6805:5: ( ( ({...}? => ( ({...}? => (otherlv_11= 'throws' ( (lv_throws_12_0= ruleThrowsIdentifier ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_13= 'hint' otherlv_14= '=' ( (lv_hint_15_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_cache_16_0= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapOperation_17_0= 'gap' ) ) | ( (lv_noGapOperation_18_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'query' otherlv_20= '=' ( (lv_query_21_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_22= 'condition' otherlv_23= '=' ( (lv_condition_24_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_25= 'select' otherlv_26= '=' ( (lv_select_27_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_28= 'groupBy' otherlv_29= '=' ( (lv_groupBy_30_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_31= 'orderBy' otherlv_32= '=' ( (lv_orderBy_33_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_construct_34_0= 'construct' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_build_35_0= 'build' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_map_36_0= 'map' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_publish_37_0= rulePublish ) ) ) ) ) )* )
            // InternalContextMappingDSL.g:6806:6: ( ({...}? => ( ({...}? => (otherlv_11= 'throws' ( (lv_throws_12_0= ruleThrowsIdentifier ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_13= 'hint' otherlv_14= '=' ( (lv_hint_15_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_cache_16_0= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapOperation_17_0= 'gap' ) ) | ( (lv_noGapOperation_18_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'query' otherlv_20= '=' ( (lv_query_21_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_22= 'condition' otherlv_23= '=' ( (lv_condition_24_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_25= 'select' otherlv_26= '=' ( (lv_select_27_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_28= 'groupBy' otherlv_29= '=' ( (lv_groupBy_30_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_31= 'orderBy' otherlv_32= '=' ( (lv_orderBy_33_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_construct_34_0= 'construct' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_build_35_0= 'build' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_map_36_0= 'map' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_publish_37_0= rulePublish ) ) ) ) ) )*
            {
            // InternalContextMappingDSL.g:6806:6: ( ({...}? => ( ({...}? => (otherlv_11= 'throws' ( (lv_throws_12_0= ruleThrowsIdentifier ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_13= 'hint' otherlv_14= '=' ( (lv_hint_15_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_cache_16_0= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapOperation_17_0= 'gap' ) ) | ( (lv_noGapOperation_18_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'query' otherlv_20= '=' ( (lv_query_21_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_22= 'condition' otherlv_23= '=' ( (lv_condition_24_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_25= 'select' otherlv_26= '=' ( (lv_select_27_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_28= 'groupBy' otherlv_29= '=' ( (lv_groupBy_30_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_31= 'orderBy' otherlv_32= '=' ( (lv_orderBy_33_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_construct_34_0= 'construct' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_build_35_0= 'build' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_map_36_0= 'map' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_publish_37_0= rulePublish ) ) ) ) ) )*
            loop192:
            do {
                int alt192=14;
                alt192 = dfa192.predict(input);
                switch (alt192) {
            	case 1 :
            	    // InternalContextMappingDSL.g:6807:4: ({...}? => ( ({...}? => (otherlv_11= 'throws' ( (lv_throws_12_0= ruleThrowsIdentifier ) ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:6807:4: ({...}? => ( ({...}? => (otherlv_11= 'throws' ( (lv_throws_12_0= ruleThrowsIdentifier ) ) ) ) ) )
            	    // InternalContextMappingDSL.g:6808:5: {...}? => ( ({...}? => (otherlv_11= 'throws' ( (lv_throws_12_0= ruleThrowsIdentifier ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getRepositoryOperationAccess().getUnorderedGroup_5(), 0) ) {
            	        throw new FailedPredicateException(input, "ruleRepositoryOperation", "getUnorderedGroupHelper().canSelect(grammarAccess.getRepositoryOperationAccess().getUnorderedGroup_5(), 0)");
            	    }
            	    // InternalContextMappingDSL.g:6808:116: ( ({...}? => (otherlv_11= 'throws' ( (lv_throws_12_0= ruleThrowsIdentifier ) ) ) ) )
            	    // InternalContextMappingDSL.g:6809:6: ({...}? => (otherlv_11= 'throws' ( (lv_throws_12_0= ruleThrowsIdentifier ) ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getRepositoryOperationAccess().getUnorderedGroup_5(), 0);
            	    					
            	    // InternalContextMappingDSL.g:6812:9: ({...}? => (otherlv_11= 'throws' ( (lv_throws_12_0= ruleThrowsIdentifier ) ) ) )
            	    // InternalContextMappingDSL.g:6812:10: {...}? => (otherlv_11= 'throws' ( (lv_throws_12_0= ruleThrowsIdentifier ) ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleRepositoryOperation", "true");
            	    }
            	    // InternalContextMappingDSL.g:6812:19: (otherlv_11= 'throws' ( (lv_throws_12_0= ruleThrowsIdentifier ) ) )
            	    // InternalContextMappingDSL.g:6812:20: otherlv_11= 'throws' ( (lv_throws_12_0= ruleThrowsIdentifier ) )
            	    {
            	    otherlv_11=(Token)match(input,89,FOLLOW_10); 

            	    									newLeafNode(otherlv_11, grammarAccess.getRepositoryOperationAccess().getThrowsKeyword_5_0_0());
            	    								
            	    // InternalContextMappingDSL.g:6816:9: ( (lv_throws_12_0= ruleThrowsIdentifier ) )
            	    // InternalContextMappingDSL.g:6817:10: (lv_throws_12_0= ruleThrowsIdentifier )
            	    {
            	    // InternalContextMappingDSL.g:6817:10: (lv_throws_12_0= ruleThrowsIdentifier )
            	    // InternalContextMappingDSL.g:6818:11: lv_throws_12_0= ruleThrowsIdentifier
            	    {

            	    											newCompositeNode(grammarAccess.getRepositoryOperationAccess().getThrowsThrowsIdentifierParserRuleCall_5_0_1_0());
            	    										
            	    pushFollow(FOLLOW_115);
            	    lv_throws_12_0=ruleThrowsIdentifier();

            	    state._fsp--;


            	    											if (current==null) {
            	    												current = createModelElementForParent(grammarAccess.getRepositoryOperationRule());
            	    											}
            	    											set(
            	    												current,
            	    												"throws",
            	    												lv_throws_12_0,
            	    												"org.contextmapper.tactic.dsl.TacticDDDLanguage.ThrowsIdentifier");
            	    											afterParserOrEnumRuleCall();
            	    										

            	    }


            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getRepositoryOperationAccess().getUnorderedGroup_5());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 2 :
            	    // InternalContextMappingDSL.g:6841:4: ({...}? => ( ({...}? => (otherlv_13= 'hint' otherlv_14= '=' ( (lv_hint_15_0= RULE_STRING ) ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:6841:4: ({...}? => ( ({...}? => (otherlv_13= 'hint' otherlv_14= '=' ( (lv_hint_15_0= RULE_STRING ) ) ) ) ) )
            	    // InternalContextMappingDSL.g:6842:5: {...}? => ( ({...}? => (otherlv_13= 'hint' otherlv_14= '=' ( (lv_hint_15_0= RULE_STRING ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getRepositoryOperationAccess().getUnorderedGroup_5(), 1) ) {
            	        throw new FailedPredicateException(input, "ruleRepositoryOperation", "getUnorderedGroupHelper().canSelect(grammarAccess.getRepositoryOperationAccess().getUnorderedGroup_5(), 1)");
            	    }
            	    // InternalContextMappingDSL.g:6842:116: ( ({...}? => (otherlv_13= 'hint' otherlv_14= '=' ( (lv_hint_15_0= RULE_STRING ) ) ) ) )
            	    // InternalContextMappingDSL.g:6843:6: ({...}? => (otherlv_13= 'hint' otherlv_14= '=' ( (lv_hint_15_0= RULE_STRING ) ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getRepositoryOperationAccess().getUnorderedGroup_5(), 1);
            	    					
            	    // InternalContextMappingDSL.g:6846:9: ({...}? => (otherlv_13= 'hint' otherlv_14= '=' ( (lv_hint_15_0= RULE_STRING ) ) ) )
            	    // InternalContextMappingDSL.g:6846:10: {...}? => (otherlv_13= 'hint' otherlv_14= '=' ( (lv_hint_15_0= RULE_STRING ) ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleRepositoryOperation", "true");
            	    }
            	    // InternalContextMappingDSL.g:6846:19: (otherlv_13= 'hint' otherlv_14= '=' ( (lv_hint_15_0= RULE_STRING ) ) )
            	    // InternalContextMappingDSL.g:6846:20: otherlv_13= 'hint' otherlv_14= '=' ( (lv_hint_15_0= RULE_STRING ) )
            	    {
            	    otherlv_13=(Token)match(input,67,FOLLOW_81); 

            	    									newLeafNode(otherlv_13, grammarAccess.getRepositoryOperationAccess().getHintKeyword_5_1_0());
            	    								
            	    otherlv_14=(Token)match(input,21,FOLLOW_4); 

            	    									newLeafNode(otherlv_14, grammarAccess.getRepositoryOperationAccess().getEqualsSignKeyword_5_1_1());
            	    								
            	    // InternalContextMappingDSL.g:6854:9: ( (lv_hint_15_0= RULE_STRING ) )
            	    // InternalContextMappingDSL.g:6855:10: (lv_hint_15_0= RULE_STRING )
            	    {
            	    // InternalContextMappingDSL.g:6855:10: (lv_hint_15_0= RULE_STRING )
            	    // InternalContextMappingDSL.g:6856:11: lv_hint_15_0= RULE_STRING
            	    {
            	    lv_hint_15_0=(Token)match(input,RULE_STRING,FOLLOW_115); 

            	    											newLeafNode(lv_hint_15_0, grammarAccess.getRepositoryOperationAccess().getHintSTRINGTerminalRuleCall_5_1_2_0());
            	    										

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getRepositoryOperationRule());
            	    											}
            	    											setWithLastConsumed(
            	    												current,
            	    												"hint",
            	    												lv_hint_15_0,
            	    												"org.eclipse.xtext.common.Terminals.STRING");
            	    										

            	    }


            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getRepositoryOperationAccess().getUnorderedGroup_5());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 3 :
            	    // InternalContextMappingDSL.g:6878:4: ({...}? => ( ({...}? => ( (lv_cache_16_0= 'cache' ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:6878:4: ({...}? => ( ({...}? => ( (lv_cache_16_0= 'cache' ) ) ) ) )
            	    // InternalContextMappingDSL.g:6879:5: {...}? => ( ({...}? => ( (lv_cache_16_0= 'cache' ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getRepositoryOperationAccess().getUnorderedGroup_5(), 2) ) {
            	        throw new FailedPredicateException(input, "ruleRepositoryOperation", "getUnorderedGroupHelper().canSelect(grammarAccess.getRepositoryOperationAccess().getUnorderedGroup_5(), 2)");
            	    }
            	    // InternalContextMappingDSL.g:6879:116: ( ({...}? => ( (lv_cache_16_0= 'cache' ) ) ) )
            	    // InternalContextMappingDSL.g:6880:6: ({...}? => ( (lv_cache_16_0= 'cache' ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getRepositoryOperationAccess().getUnorderedGroup_5(), 2);
            	    					
            	    // InternalContextMappingDSL.g:6883:9: ({...}? => ( (lv_cache_16_0= 'cache' ) ) )
            	    // InternalContextMappingDSL.g:6883:10: {...}? => ( (lv_cache_16_0= 'cache' ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleRepositoryOperation", "true");
            	    }
            	    // InternalContextMappingDSL.g:6883:19: ( (lv_cache_16_0= 'cache' ) )
            	    // InternalContextMappingDSL.g:6883:20: (lv_cache_16_0= 'cache' )
            	    {
            	    // InternalContextMappingDSL.g:6883:20: (lv_cache_16_0= 'cache' )
            	    // InternalContextMappingDSL.g:6884:10: lv_cache_16_0= 'cache'
            	    {
            	    lv_cache_16_0=(Token)match(input,93,FOLLOW_115); 

            	    										newLeafNode(lv_cache_16_0, grammarAccess.getRepositoryOperationAccess().getCacheCacheKeyword_5_2_0());
            	    									

            	    										if (current==null) {
            	    											current = createModelElement(grammarAccess.getRepositoryOperationRule());
            	    										}
            	    										setWithLastConsumed(current, "cache", true, "cache");
            	    									

            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getRepositoryOperationAccess().getUnorderedGroup_5());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 4 :
            	    // InternalContextMappingDSL.g:6901:4: ({...}? => ( ({...}? => ( ( (lv_gapOperation_17_0= 'gap' ) ) | ( (lv_noGapOperation_18_0= 'nogap' ) ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:6901:4: ({...}? => ( ({...}? => ( ( (lv_gapOperation_17_0= 'gap' ) ) | ( (lv_noGapOperation_18_0= 'nogap' ) ) ) ) ) )
            	    // InternalContextMappingDSL.g:6902:5: {...}? => ( ({...}? => ( ( (lv_gapOperation_17_0= 'gap' ) ) | ( (lv_noGapOperation_18_0= 'nogap' ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getRepositoryOperationAccess().getUnorderedGroup_5(), 3) ) {
            	        throw new FailedPredicateException(input, "ruleRepositoryOperation", "getUnorderedGroupHelper().canSelect(grammarAccess.getRepositoryOperationAccess().getUnorderedGroup_5(), 3)");
            	    }
            	    // InternalContextMappingDSL.g:6902:116: ( ({...}? => ( ( (lv_gapOperation_17_0= 'gap' ) ) | ( (lv_noGapOperation_18_0= 'nogap' ) ) ) ) )
            	    // InternalContextMappingDSL.g:6903:6: ({...}? => ( ( (lv_gapOperation_17_0= 'gap' ) ) | ( (lv_noGapOperation_18_0= 'nogap' ) ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getRepositoryOperationAccess().getUnorderedGroup_5(), 3);
            	    					
            	    // InternalContextMappingDSL.g:6906:9: ({...}? => ( ( (lv_gapOperation_17_0= 'gap' ) ) | ( (lv_noGapOperation_18_0= 'nogap' ) ) ) )
            	    // InternalContextMappingDSL.g:6906:10: {...}? => ( ( (lv_gapOperation_17_0= 'gap' ) ) | ( (lv_noGapOperation_18_0= 'nogap' ) ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleRepositoryOperation", "true");
            	    }
            	    // InternalContextMappingDSL.g:6906:19: ( ( (lv_gapOperation_17_0= 'gap' ) ) | ( (lv_noGapOperation_18_0= 'nogap' ) ) )
            	    int alt191=2;
            	    int LA191_0 = input.LA(1);

            	    if ( (LA191_0==71) ) {
            	        alt191=1;
            	    }
            	    else if ( (LA191_0==72) ) {
            	        alt191=2;
            	    }
            	    else {
            	        NoViableAltException nvae =
            	            new NoViableAltException("", 191, 0, input);

            	        throw nvae;
            	    }
            	    switch (alt191) {
            	        case 1 :
            	            // InternalContextMappingDSL.g:6906:20: ( (lv_gapOperation_17_0= 'gap' ) )
            	            {
            	            // InternalContextMappingDSL.g:6906:20: ( (lv_gapOperation_17_0= 'gap' ) )
            	            // InternalContextMappingDSL.g:6907:10: (lv_gapOperation_17_0= 'gap' )
            	            {
            	            // InternalContextMappingDSL.g:6907:10: (lv_gapOperation_17_0= 'gap' )
            	            // InternalContextMappingDSL.g:6908:11: lv_gapOperation_17_0= 'gap'
            	            {
            	            lv_gapOperation_17_0=(Token)match(input,71,FOLLOW_115); 

            	            											newLeafNode(lv_gapOperation_17_0, grammarAccess.getRepositoryOperationAccess().getGapOperationGapKeyword_5_3_0_0());
            	            										

            	            											if (current==null) {
            	            												current = createModelElement(grammarAccess.getRepositoryOperationRule());
            	            											}
            	            											setWithLastConsumed(current, "gapOperation", true, "gap");
            	            										

            	            }


            	            }


            	            }
            	            break;
            	        case 2 :
            	            // InternalContextMappingDSL.g:6921:9: ( (lv_noGapOperation_18_0= 'nogap' ) )
            	            {
            	            // InternalContextMappingDSL.g:6921:9: ( (lv_noGapOperation_18_0= 'nogap' ) )
            	            // InternalContextMappingDSL.g:6922:10: (lv_noGapOperation_18_0= 'nogap' )
            	            {
            	            // InternalContextMappingDSL.g:6922:10: (lv_noGapOperation_18_0= 'nogap' )
            	            // InternalContextMappingDSL.g:6923:11: lv_noGapOperation_18_0= 'nogap'
            	            {
            	            lv_noGapOperation_18_0=(Token)match(input,72,FOLLOW_115); 

            	            											newLeafNode(lv_noGapOperation_18_0, grammarAccess.getRepositoryOperationAccess().getNoGapOperationNogapKeyword_5_3_1_0());
            	            										

            	            											if (current==null) {
            	            												current = createModelElement(grammarAccess.getRepositoryOperationRule());
            	            											}
            	            											setWithLastConsumed(current, "noGapOperation", true, "nogap");
            	            										

            	            }


            	            }


            	            }
            	            break;

            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getRepositoryOperationAccess().getUnorderedGroup_5());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 5 :
            	    // InternalContextMappingDSL.g:6941:4: ({...}? => ( ({...}? => (otherlv_19= 'query' otherlv_20= '=' ( (lv_query_21_0= RULE_STRING ) ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:6941:4: ({...}? => ( ({...}? => (otherlv_19= 'query' otherlv_20= '=' ( (lv_query_21_0= RULE_STRING ) ) ) ) ) )
            	    // InternalContextMappingDSL.g:6942:5: {...}? => ( ({...}? => (otherlv_19= 'query' otherlv_20= '=' ( (lv_query_21_0= RULE_STRING ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getRepositoryOperationAccess().getUnorderedGroup_5(), 4) ) {
            	        throw new FailedPredicateException(input, "ruleRepositoryOperation", "getUnorderedGroupHelper().canSelect(grammarAccess.getRepositoryOperationAccess().getUnorderedGroup_5(), 4)");
            	    }
            	    // InternalContextMappingDSL.g:6942:116: ( ({...}? => (otherlv_19= 'query' otherlv_20= '=' ( (lv_query_21_0= RULE_STRING ) ) ) ) )
            	    // InternalContextMappingDSL.g:6943:6: ({...}? => (otherlv_19= 'query' otherlv_20= '=' ( (lv_query_21_0= RULE_STRING ) ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getRepositoryOperationAccess().getUnorderedGroup_5(), 4);
            	    					
            	    // InternalContextMappingDSL.g:6946:9: ({...}? => (otherlv_19= 'query' otherlv_20= '=' ( (lv_query_21_0= RULE_STRING ) ) ) )
            	    // InternalContextMappingDSL.g:6946:10: {...}? => (otherlv_19= 'query' otherlv_20= '=' ( (lv_query_21_0= RULE_STRING ) ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleRepositoryOperation", "true");
            	    }
            	    // InternalContextMappingDSL.g:6946:19: (otherlv_19= 'query' otherlv_20= '=' ( (lv_query_21_0= RULE_STRING ) ) )
            	    // InternalContextMappingDSL.g:6946:20: otherlv_19= 'query' otherlv_20= '=' ( (lv_query_21_0= RULE_STRING ) )
            	    {
            	    otherlv_19=(Token)match(input,94,FOLLOW_81); 

            	    									newLeafNode(otherlv_19, grammarAccess.getRepositoryOperationAccess().getQueryKeyword_5_4_0());
            	    								
            	    otherlv_20=(Token)match(input,21,FOLLOW_4); 

            	    									newLeafNode(otherlv_20, grammarAccess.getRepositoryOperationAccess().getEqualsSignKeyword_5_4_1());
            	    								
            	    // InternalContextMappingDSL.g:6954:9: ( (lv_query_21_0= RULE_STRING ) )
            	    // InternalContextMappingDSL.g:6955:10: (lv_query_21_0= RULE_STRING )
            	    {
            	    // InternalContextMappingDSL.g:6955:10: (lv_query_21_0= RULE_STRING )
            	    // InternalContextMappingDSL.g:6956:11: lv_query_21_0= RULE_STRING
            	    {
            	    lv_query_21_0=(Token)match(input,RULE_STRING,FOLLOW_115); 

            	    											newLeafNode(lv_query_21_0, grammarAccess.getRepositoryOperationAccess().getQuerySTRINGTerminalRuleCall_5_4_2_0());
            	    										

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getRepositoryOperationRule());
            	    											}
            	    											setWithLastConsumed(
            	    												current,
            	    												"query",
            	    												lv_query_21_0,
            	    												"org.eclipse.xtext.common.Terminals.STRING");
            	    										

            	    }


            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getRepositoryOperationAccess().getUnorderedGroup_5());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 6 :
            	    // InternalContextMappingDSL.g:6978:4: ({...}? => ( ({...}? => (otherlv_22= 'condition' otherlv_23= '=' ( (lv_condition_24_0= RULE_STRING ) ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:6978:4: ({...}? => ( ({...}? => (otherlv_22= 'condition' otherlv_23= '=' ( (lv_condition_24_0= RULE_STRING ) ) ) ) ) )
            	    // InternalContextMappingDSL.g:6979:5: {...}? => ( ({...}? => (otherlv_22= 'condition' otherlv_23= '=' ( (lv_condition_24_0= RULE_STRING ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getRepositoryOperationAccess().getUnorderedGroup_5(), 5) ) {
            	        throw new FailedPredicateException(input, "ruleRepositoryOperation", "getUnorderedGroupHelper().canSelect(grammarAccess.getRepositoryOperationAccess().getUnorderedGroup_5(), 5)");
            	    }
            	    // InternalContextMappingDSL.g:6979:116: ( ({...}? => (otherlv_22= 'condition' otherlv_23= '=' ( (lv_condition_24_0= RULE_STRING ) ) ) ) )
            	    // InternalContextMappingDSL.g:6980:6: ({...}? => (otherlv_22= 'condition' otherlv_23= '=' ( (lv_condition_24_0= RULE_STRING ) ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getRepositoryOperationAccess().getUnorderedGroup_5(), 5);
            	    					
            	    // InternalContextMappingDSL.g:6983:9: ({...}? => (otherlv_22= 'condition' otherlv_23= '=' ( (lv_condition_24_0= RULE_STRING ) ) ) )
            	    // InternalContextMappingDSL.g:6983:10: {...}? => (otherlv_22= 'condition' otherlv_23= '=' ( (lv_condition_24_0= RULE_STRING ) ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleRepositoryOperation", "true");
            	    }
            	    // InternalContextMappingDSL.g:6983:19: (otherlv_22= 'condition' otherlv_23= '=' ( (lv_condition_24_0= RULE_STRING ) ) )
            	    // InternalContextMappingDSL.g:6983:20: otherlv_22= 'condition' otherlv_23= '=' ( (lv_condition_24_0= RULE_STRING ) )
            	    {
            	    otherlv_22=(Token)match(input,95,FOLLOW_81); 

            	    									newLeafNode(otherlv_22, grammarAccess.getRepositoryOperationAccess().getConditionKeyword_5_5_0());
            	    								
            	    otherlv_23=(Token)match(input,21,FOLLOW_4); 

            	    									newLeafNode(otherlv_23, grammarAccess.getRepositoryOperationAccess().getEqualsSignKeyword_5_5_1());
            	    								
            	    // InternalContextMappingDSL.g:6991:9: ( (lv_condition_24_0= RULE_STRING ) )
            	    // InternalContextMappingDSL.g:6992:10: (lv_condition_24_0= RULE_STRING )
            	    {
            	    // InternalContextMappingDSL.g:6992:10: (lv_condition_24_0= RULE_STRING )
            	    // InternalContextMappingDSL.g:6993:11: lv_condition_24_0= RULE_STRING
            	    {
            	    lv_condition_24_0=(Token)match(input,RULE_STRING,FOLLOW_115); 

            	    											newLeafNode(lv_condition_24_0, grammarAccess.getRepositoryOperationAccess().getConditionSTRINGTerminalRuleCall_5_5_2_0());
            	    										

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getRepositoryOperationRule());
            	    											}
            	    											setWithLastConsumed(
            	    												current,
            	    												"condition",
            	    												lv_condition_24_0,
            	    												"org.eclipse.xtext.common.Terminals.STRING");
            	    										

            	    }


            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getRepositoryOperationAccess().getUnorderedGroup_5());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 7 :
            	    // InternalContextMappingDSL.g:7015:4: ({...}? => ( ({...}? => (otherlv_25= 'select' otherlv_26= '=' ( (lv_select_27_0= RULE_STRING ) ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:7015:4: ({...}? => ( ({...}? => (otherlv_25= 'select' otherlv_26= '=' ( (lv_select_27_0= RULE_STRING ) ) ) ) ) )
            	    // InternalContextMappingDSL.g:7016:5: {...}? => ( ({...}? => (otherlv_25= 'select' otherlv_26= '=' ( (lv_select_27_0= RULE_STRING ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getRepositoryOperationAccess().getUnorderedGroup_5(), 6) ) {
            	        throw new FailedPredicateException(input, "ruleRepositoryOperation", "getUnorderedGroupHelper().canSelect(grammarAccess.getRepositoryOperationAccess().getUnorderedGroup_5(), 6)");
            	    }
            	    // InternalContextMappingDSL.g:7016:116: ( ({...}? => (otherlv_25= 'select' otherlv_26= '=' ( (lv_select_27_0= RULE_STRING ) ) ) ) )
            	    // InternalContextMappingDSL.g:7017:6: ({...}? => (otherlv_25= 'select' otherlv_26= '=' ( (lv_select_27_0= RULE_STRING ) ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getRepositoryOperationAccess().getUnorderedGroup_5(), 6);
            	    					
            	    // InternalContextMappingDSL.g:7020:9: ({...}? => (otherlv_25= 'select' otherlv_26= '=' ( (lv_select_27_0= RULE_STRING ) ) ) )
            	    // InternalContextMappingDSL.g:7020:10: {...}? => (otherlv_25= 'select' otherlv_26= '=' ( (lv_select_27_0= RULE_STRING ) ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleRepositoryOperation", "true");
            	    }
            	    // InternalContextMappingDSL.g:7020:19: (otherlv_25= 'select' otherlv_26= '=' ( (lv_select_27_0= RULE_STRING ) ) )
            	    // InternalContextMappingDSL.g:7020:20: otherlv_25= 'select' otherlv_26= '=' ( (lv_select_27_0= RULE_STRING ) )
            	    {
            	    otherlv_25=(Token)match(input,96,FOLLOW_81); 

            	    									newLeafNode(otherlv_25, grammarAccess.getRepositoryOperationAccess().getSelectKeyword_5_6_0());
            	    								
            	    otherlv_26=(Token)match(input,21,FOLLOW_4); 

            	    									newLeafNode(otherlv_26, grammarAccess.getRepositoryOperationAccess().getEqualsSignKeyword_5_6_1());
            	    								
            	    // InternalContextMappingDSL.g:7028:9: ( (lv_select_27_0= RULE_STRING ) )
            	    // InternalContextMappingDSL.g:7029:10: (lv_select_27_0= RULE_STRING )
            	    {
            	    // InternalContextMappingDSL.g:7029:10: (lv_select_27_0= RULE_STRING )
            	    // InternalContextMappingDSL.g:7030:11: lv_select_27_0= RULE_STRING
            	    {
            	    lv_select_27_0=(Token)match(input,RULE_STRING,FOLLOW_115); 

            	    											newLeafNode(lv_select_27_0, grammarAccess.getRepositoryOperationAccess().getSelectSTRINGTerminalRuleCall_5_6_2_0());
            	    										

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getRepositoryOperationRule());
            	    											}
            	    											setWithLastConsumed(
            	    												current,
            	    												"select",
            	    												lv_select_27_0,
            	    												"org.eclipse.xtext.common.Terminals.STRING");
            	    										

            	    }


            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getRepositoryOperationAccess().getUnorderedGroup_5());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 8 :
            	    // InternalContextMappingDSL.g:7052:4: ({...}? => ( ({...}? => (otherlv_28= 'groupBy' otherlv_29= '=' ( (lv_groupBy_30_0= RULE_STRING ) ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:7052:4: ({...}? => ( ({...}? => (otherlv_28= 'groupBy' otherlv_29= '=' ( (lv_groupBy_30_0= RULE_STRING ) ) ) ) ) )
            	    // InternalContextMappingDSL.g:7053:5: {...}? => ( ({...}? => (otherlv_28= 'groupBy' otherlv_29= '=' ( (lv_groupBy_30_0= RULE_STRING ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getRepositoryOperationAccess().getUnorderedGroup_5(), 7) ) {
            	        throw new FailedPredicateException(input, "ruleRepositoryOperation", "getUnorderedGroupHelper().canSelect(grammarAccess.getRepositoryOperationAccess().getUnorderedGroup_5(), 7)");
            	    }
            	    // InternalContextMappingDSL.g:7053:116: ( ({...}? => (otherlv_28= 'groupBy' otherlv_29= '=' ( (lv_groupBy_30_0= RULE_STRING ) ) ) ) )
            	    // InternalContextMappingDSL.g:7054:6: ({...}? => (otherlv_28= 'groupBy' otherlv_29= '=' ( (lv_groupBy_30_0= RULE_STRING ) ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getRepositoryOperationAccess().getUnorderedGroup_5(), 7);
            	    					
            	    // InternalContextMappingDSL.g:7057:9: ({...}? => (otherlv_28= 'groupBy' otherlv_29= '=' ( (lv_groupBy_30_0= RULE_STRING ) ) ) )
            	    // InternalContextMappingDSL.g:7057:10: {...}? => (otherlv_28= 'groupBy' otherlv_29= '=' ( (lv_groupBy_30_0= RULE_STRING ) ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleRepositoryOperation", "true");
            	    }
            	    // InternalContextMappingDSL.g:7057:19: (otherlv_28= 'groupBy' otherlv_29= '=' ( (lv_groupBy_30_0= RULE_STRING ) ) )
            	    // InternalContextMappingDSL.g:7057:20: otherlv_28= 'groupBy' otherlv_29= '=' ( (lv_groupBy_30_0= RULE_STRING ) )
            	    {
            	    otherlv_28=(Token)match(input,97,FOLLOW_81); 

            	    									newLeafNode(otherlv_28, grammarAccess.getRepositoryOperationAccess().getGroupByKeyword_5_7_0());
            	    								
            	    otherlv_29=(Token)match(input,21,FOLLOW_4); 

            	    									newLeafNode(otherlv_29, grammarAccess.getRepositoryOperationAccess().getEqualsSignKeyword_5_7_1());
            	    								
            	    // InternalContextMappingDSL.g:7065:9: ( (lv_groupBy_30_0= RULE_STRING ) )
            	    // InternalContextMappingDSL.g:7066:10: (lv_groupBy_30_0= RULE_STRING )
            	    {
            	    // InternalContextMappingDSL.g:7066:10: (lv_groupBy_30_0= RULE_STRING )
            	    // InternalContextMappingDSL.g:7067:11: lv_groupBy_30_0= RULE_STRING
            	    {
            	    lv_groupBy_30_0=(Token)match(input,RULE_STRING,FOLLOW_115); 

            	    											newLeafNode(lv_groupBy_30_0, grammarAccess.getRepositoryOperationAccess().getGroupBySTRINGTerminalRuleCall_5_7_2_0());
            	    										

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getRepositoryOperationRule());
            	    											}
            	    											setWithLastConsumed(
            	    												current,
            	    												"groupBy",
            	    												lv_groupBy_30_0,
            	    												"org.eclipse.xtext.common.Terminals.STRING");
            	    										

            	    }


            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getRepositoryOperationAccess().getUnorderedGroup_5());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 9 :
            	    // InternalContextMappingDSL.g:7089:4: ({...}? => ( ({...}? => (otherlv_31= 'orderBy' otherlv_32= '=' ( (lv_orderBy_33_0= RULE_STRING ) ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:7089:4: ({...}? => ( ({...}? => (otherlv_31= 'orderBy' otherlv_32= '=' ( (lv_orderBy_33_0= RULE_STRING ) ) ) ) ) )
            	    // InternalContextMappingDSL.g:7090:5: {...}? => ( ({...}? => (otherlv_31= 'orderBy' otherlv_32= '=' ( (lv_orderBy_33_0= RULE_STRING ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getRepositoryOperationAccess().getUnorderedGroup_5(), 8) ) {
            	        throw new FailedPredicateException(input, "ruleRepositoryOperation", "getUnorderedGroupHelper().canSelect(grammarAccess.getRepositoryOperationAccess().getUnorderedGroup_5(), 8)");
            	    }
            	    // InternalContextMappingDSL.g:7090:116: ( ({...}? => (otherlv_31= 'orderBy' otherlv_32= '=' ( (lv_orderBy_33_0= RULE_STRING ) ) ) ) )
            	    // InternalContextMappingDSL.g:7091:6: ({...}? => (otherlv_31= 'orderBy' otherlv_32= '=' ( (lv_orderBy_33_0= RULE_STRING ) ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getRepositoryOperationAccess().getUnorderedGroup_5(), 8);
            	    					
            	    // InternalContextMappingDSL.g:7094:9: ({...}? => (otherlv_31= 'orderBy' otherlv_32= '=' ( (lv_orderBy_33_0= RULE_STRING ) ) ) )
            	    // InternalContextMappingDSL.g:7094:10: {...}? => (otherlv_31= 'orderBy' otherlv_32= '=' ( (lv_orderBy_33_0= RULE_STRING ) ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleRepositoryOperation", "true");
            	    }
            	    // InternalContextMappingDSL.g:7094:19: (otherlv_31= 'orderBy' otherlv_32= '=' ( (lv_orderBy_33_0= RULE_STRING ) ) )
            	    // InternalContextMappingDSL.g:7094:20: otherlv_31= 'orderBy' otherlv_32= '=' ( (lv_orderBy_33_0= RULE_STRING ) )
            	    {
            	    otherlv_31=(Token)match(input,98,FOLLOW_81); 

            	    									newLeafNode(otherlv_31, grammarAccess.getRepositoryOperationAccess().getOrderByKeyword_5_8_0());
            	    								
            	    otherlv_32=(Token)match(input,21,FOLLOW_4); 

            	    									newLeafNode(otherlv_32, grammarAccess.getRepositoryOperationAccess().getEqualsSignKeyword_5_8_1());
            	    								
            	    // InternalContextMappingDSL.g:7102:9: ( (lv_orderBy_33_0= RULE_STRING ) )
            	    // InternalContextMappingDSL.g:7103:10: (lv_orderBy_33_0= RULE_STRING )
            	    {
            	    // InternalContextMappingDSL.g:7103:10: (lv_orderBy_33_0= RULE_STRING )
            	    // InternalContextMappingDSL.g:7104:11: lv_orderBy_33_0= RULE_STRING
            	    {
            	    lv_orderBy_33_0=(Token)match(input,RULE_STRING,FOLLOW_115); 

            	    											newLeafNode(lv_orderBy_33_0, grammarAccess.getRepositoryOperationAccess().getOrderBySTRINGTerminalRuleCall_5_8_2_0());
            	    										

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getRepositoryOperationRule());
            	    											}
            	    											setWithLastConsumed(
            	    												current,
            	    												"orderBy",
            	    												lv_orderBy_33_0,
            	    												"org.eclipse.xtext.common.Terminals.STRING");
            	    										

            	    }


            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getRepositoryOperationAccess().getUnorderedGroup_5());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 10 :
            	    // InternalContextMappingDSL.g:7126:4: ({...}? => ( ({...}? => ( (lv_construct_34_0= 'construct' ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:7126:4: ({...}? => ( ({...}? => ( (lv_construct_34_0= 'construct' ) ) ) ) )
            	    // InternalContextMappingDSL.g:7127:5: {...}? => ( ({...}? => ( (lv_construct_34_0= 'construct' ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getRepositoryOperationAccess().getUnorderedGroup_5(), 9) ) {
            	        throw new FailedPredicateException(input, "ruleRepositoryOperation", "getUnorderedGroupHelper().canSelect(grammarAccess.getRepositoryOperationAccess().getUnorderedGroup_5(), 9)");
            	    }
            	    // InternalContextMappingDSL.g:7127:116: ( ({...}? => ( (lv_construct_34_0= 'construct' ) ) ) )
            	    // InternalContextMappingDSL.g:7128:6: ({...}? => ( (lv_construct_34_0= 'construct' ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getRepositoryOperationAccess().getUnorderedGroup_5(), 9);
            	    					
            	    // InternalContextMappingDSL.g:7131:9: ({...}? => ( (lv_construct_34_0= 'construct' ) ) )
            	    // InternalContextMappingDSL.g:7131:10: {...}? => ( (lv_construct_34_0= 'construct' ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleRepositoryOperation", "true");
            	    }
            	    // InternalContextMappingDSL.g:7131:19: ( (lv_construct_34_0= 'construct' ) )
            	    // InternalContextMappingDSL.g:7131:20: (lv_construct_34_0= 'construct' )
            	    {
            	    // InternalContextMappingDSL.g:7131:20: (lv_construct_34_0= 'construct' )
            	    // InternalContextMappingDSL.g:7132:10: lv_construct_34_0= 'construct'
            	    {
            	    lv_construct_34_0=(Token)match(input,99,FOLLOW_115); 

            	    										newLeafNode(lv_construct_34_0, grammarAccess.getRepositoryOperationAccess().getConstructConstructKeyword_5_9_0());
            	    									

            	    										if (current==null) {
            	    											current = createModelElement(grammarAccess.getRepositoryOperationRule());
            	    										}
            	    										setWithLastConsumed(current, "construct", true, "construct");
            	    									

            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getRepositoryOperationAccess().getUnorderedGroup_5());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 11 :
            	    // InternalContextMappingDSL.g:7149:4: ({...}? => ( ({...}? => ( (lv_build_35_0= 'build' ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:7149:4: ({...}? => ( ({...}? => ( (lv_build_35_0= 'build' ) ) ) ) )
            	    // InternalContextMappingDSL.g:7150:5: {...}? => ( ({...}? => ( (lv_build_35_0= 'build' ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getRepositoryOperationAccess().getUnorderedGroup_5(), 10) ) {
            	        throw new FailedPredicateException(input, "ruleRepositoryOperation", "getUnorderedGroupHelper().canSelect(grammarAccess.getRepositoryOperationAccess().getUnorderedGroup_5(), 10)");
            	    }
            	    // InternalContextMappingDSL.g:7150:117: ( ({...}? => ( (lv_build_35_0= 'build' ) ) ) )
            	    // InternalContextMappingDSL.g:7151:6: ({...}? => ( (lv_build_35_0= 'build' ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getRepositoryOperationAccess().getUnorderedGroup_5(), 10);
            	    					
            	    // InternalContextMappingDSL.g:7154:9: ({...}? => ( (lv_build_35_0= 'build' ) ) )
            	    // InternalContextMappingDSL.g:7154:10: {...}? => ( (lv_build_35_0= 'build' ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleRepositoryOperation", "true");
            	    }
            	    // InternalContextMappingDSL.g:7154:19: ( (lv_build_35_0= 'build' ) )
            	    // InternalContextMappingDSL.g:7154:20: (lv_build_35_0= 'build' )
            	    {
            	    // InternalContextMappingDSL.g:7154:20: (lv_build_35_0= 'build' )
            	    // InternalContextMappingDSL.g:7155:10: lv_build_35_0= 'build'
            	    {
            	    lv_build_35_0=(Token)match(input,100,FOLLOW_115); 

            	    										newLeafNode(lv_build_35_0, grammarAccess.getRepositoryOperationAccess().getBuildBuildKeyword_5_10_0());
            	    									

            	    										if (current==null) {
            	    											current = createModelElement(grammarAccess.getRepositoryOperationRule());
            	    										}
            	    										setWithLastConsumed(current, "build", true, "build");
            	    									

            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getRepositoryOperationAccess().getUnorderedGroup_5());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 12 :
            	    // InternalContextMappingDSL.g:7172:4: ({...}? => ( ({...}? => ( (lv_map_36_0= 'map' ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:7172:4: ({...}? => ( ({...}? => ( (lv_map_36_0= 'map' ) ) ) ) )
            	    // InternalContextMappingDSL.g:7173:5: {...}? => ( ({...}? => ( (lv_map_36_0= 'map' ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getRepositoryOperationAccess().getUnorderedGroup_5(), 11) ) {
            	        throw new FailedPredicateException(input, "ruleRepositoryOperation", "getUnorderedGroupHelper().canSelect(grammarAccess.getRepositoryOperationAccess().getUnorderedGroup_5(), 11)");
            	    }
            	    // InternalContextMappingDSL.g:7173:117: ( ({...}? => ( (lv_map_36_0= 'map' ) ) ) )
            	    // InternalContextMappingDSL.g:7174:6: ({...}? => ( (lv_map_36_0= 'map' ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getRepositoryOperationAccess().getUnorderedGroup_5(), 11);
            	    					
            	    // InternalContextMappingDSL.g:7177:9: ({...}? => ( (lv_map_36_0= 'map' ) ) )
            	    // InternalContextMappingDSL.g:7177:10: {...}? => ( (lv_map_36_0= 'map' ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleRepositoryOperation", "true");
            	    }
            	    // InternalContextMappingDSL.g:7177:19: ( (lv_map_36_0= 'map' ) )
            	    // InternalContextMappingDSL.g:7177:20: (lv_map_36_0= 'map' )
            	    {
            	    // InternalContextMappingDSL.g:7177:20: (lv_map_36_0= 'map' )
            	    // InternalContextMappingDSL.g:7178:10: lv_map_36_0= 'map'
            	    {
            	    lv_map_36_0=(Token)match(input,101,FOLLOW_115); 

            	    										newLeafNode(lv_map_36_0, grammarAccess.getRepositoryOperationAccess().getMapMapKeyword_5_11_0());
            	    									

            	    										if (current==null) {
            	    											current = createModelElement(grammarAccess.getRepositoryOperationRule());
            	    										}
            	    										setWithLastConsumed(current, "map", true, "map");
            	    									

            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getRepositoryOperationAccess().getUnorderedGroup_5());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 13 :
            	    // InternalContextMappingDSL.g:7195:4: ({...}? => ( ({...}? => ( (lv_publish_37_0= rulePublish ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:7195:4: ({...}? => ( ({...}? => ( (lv_publish_37_0= rulePublish ) ) ) ) )
            	    // InternalContextMappingDSL.g:7196:5: {...}? => ( ({...}? => ( (lv_publish_37_0= rulePublish ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getRepositoryOperationAccess().getUnorderedGroup_5(), 12) ) {
            	        throw new FailedPredicateException(input, "ruleRepositoryOperation", "getUnorderedGroupHelper().canSelect(grammarAccess.getRepositoryOperationAccess().getUnorderedGroup_5(), 12)");
            	    }
            	    // InternalContextMappingDSL.g:7196:117: ( ({...}? => ( (lv_publish_37_0= rulePublish ) ) ) )
            	    // InternalContextMappingDSL.g:7197:6: ({...}? => ( (lv_publish_37_0= rulePublish ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getRepositoryOperationAccess().getUnorderedGroup_5(), 12);
            	    					
            	    // InternalContextMappingDSL.g:7200:9: ({...}? => ( (lv_publish_37_0= rulePublish ) ) )
            	    // InternalContextMappingDSL.g:7200:10: {...}? => ( (lv_publish_37_0= rulePublish ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleRepositoryOperation", "true");
            	    }
            	    // InternalContextMappingDSL.g:7200:19: ( (lv_publish_37_0= rulePublish ) )
            	    // InternalContextMappingDSL.g:7200:20: (lv_publish_37_0= rulePublish )
            	    {
            	    // InternalContextMappingDSL.g:7200:20: (lv_publish_37_0= rulePublish )
            	    // InternalContextMappingDSL.g:7201:10: lv_publish_37_0= rulePublish
            	    {

            	    										newCompositeNode(grammarAccess.getRepositoryOperationAccess().getPublishPublishParserRuleCall_5_12_0());
            	    									
            	    pushFollow(FOLLOW_115);
            	    lv_publish_37_0=rulePublish();

            	    state._fsp--;


            	    										if (current==null) {
            	    											current = createModelElementForParent(grammarAccess.getRepositoryOperationRule());
            	    										}
            	    										set(
            	    											current,
            	    											"publish",
            	    											lv_publish_37_0,
            	    											"org.contextmapper.tactic.dsl.TacticDDDLanguage.Publish");
            	    										afterParserOrEnumRuleCall();
            	    									

            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getRepositoryOperationAccess().getUnorderedGroup_5());
            	    					

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop192;
                }
            } while (true);


            }


            }

             
            				  getUnorderedGroupHelper().leave(grammarAccess.getRepositoryOperationAccess().getUnorderedGroup_5());
            				

            }

            // InternalContextMappingDSL.g:7230:3: ( ( (lv_delegateToAccessObject_38_0= RULE_DELEGATE ) ) (otherlv_39= 'AccessObject' | ( (lv_accessObjectName_40_0= RULE_ID ) ) ) )?
            int alt194=2;
            int LA194_0 = input.LA(1);

            if ( (LA194_0==RULE_DELEGATE) ) {
                alt194=1;
            }
            switch (alt194) {
                case 1 :
                    // InternalContextMappingDSL.g:7231:4: ( (lv_delegateToAccessObject_38_0= RULE_DELEGATE ) ) (otherlv_39= 'AccessObject' | ( (lv_accessObjectName_40_0= RULE_ID ) ) )
                    {
                    // InternalContextMappingDSL.g:7231:4: ( (lv_delegateToAccessObject_38_0= RULE_DELEGATE ) )
                    // InternalContextMappingDSL.g:7232:5: (lv_delegateToAccessObject_38_0= RULE_DELEGATE )
                    {
                    // InternalContextMappingDSL.g:7232:5: (lv_delegateToAccessObject_38_0= RULE_DELEGATE )
                    // InternalContextMappingDSL.g:7233:6: lv_delegateToAccessObject_38_0= RULE_DELEGATE
                    {
                    lv_delegateToAccessObject_38_0=(Token)match(input,RULE_DELEGATE,FOLLOW_116); 

                    						newLeafNode(lv_delegateToAccessObject_38_0, grammarAccess.getRepositoryOperationAccess().getDelegateToAccessObjectDELEGATETerminalRuleCall_6_0_0());
                    					

                    						if (current==null) {
                    							current = createModelElement(grammarAccess.getRepositoryOperationRule());
                    						}
                    						setWithLastConsumed(
                    							current,
                    							"delegateToAccessObject",
                    							true,
                    							"org.contextmapper.tactic.dsl.TacticDDDLanguage.DELEGATE");
                    					

                    }


                    }

                    // InternalContextMappingDSL.g:7249:4: (otherlv_39= 'AccessObject' | ( (lv_accessObjectName_40_0= RULE_ID ) ) )
                    int alt193=2;
                    int LA193_0 = input.LA(1);

                    if ( (LA193_0==102) ) {
                        alt193=1;
                    }
                    else if ( (LA193_0==RULE_ID) ) {
                        alt193=2;
                    }
                    else {
                        NoViableAltException nvae =
                            new NoViableAltException("", 193, 0, input);

                        throw nvae;
                    }
                    switch (alt193) {
                        case 1 :
                            // InternalContextMappingDSL.g:7250:5: otherlv_39= 'AccessObject'
                            {
                            otherlv_39=(Token)match(input,102,FOLLOW_108); 

                            					newLeafNode(otherlv_39, grammarAccess.getRepositoryOperationAccess().getAccessObjectKeyword_6_1_0());
                            				

                            }
                            break;
                        case 2 :
                            // InternalContextMappingDSL.g:7255:5: ( (lv_accessObjectName_40_0= RULE_ID ) )
                            {
                            // InternalContextMappingDSL.g:7255:5: ( (lv_accessObjectName_40_0= RULE_ID ) )
                            // InternalContextMappingDSL.g:7256:6: (lv_accessObjectName_40_0= RULE_ID )
                            {
                            // InternalContextMappingDSL.g:7256:6: (lv_accessObjectName_40_0= RULE_ID )
                            // InternalContextMappingDSL.g:7257:7: lv_accessObjectName_40_0= RULE_ID
                            {
                            lv_accessObjectName_40_0=(Token)match(input,RULE_ID,FOLLOW_108); 

                            							newLeafNode(lv_accessObjectName_40_0, grammarAccess.getRepositoryOperationAccess().getAccessObjectNameIDTerminalRuleCall_6_1_1_0());
                            						

                            							if (current==null) {
                            								current = createModelElement(grammarAccess.getRepositoryOperationRule());
                            							}
                            							setWithLastConsumed(
                            								current,
                            								"accessObjectName",
                            								lv_accessObjectName_40_0,
                            								"org.eclipse.xtext.common.Terminals.ID");
                            						

                            }


                            }


                            }
                            break;

                    }


                    }
                    break;

            }

            otherlv_41=(Token)match(input,90,FOLLOW_2); 

            			newLeafNode(otherlv_41, grammarAccess.getRepositoryOperationAccess().getSemicolonKeyword_7());
            		

            }


            }


            	leaveRule();

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleRepositoryOperation"


    // $ANTLR start "entryRuleParameter"
    // InternalContextMappingDSL.g:7283:1: entryRuleParameter returns [EObject current=null] : iv_ruleParameter= ruleParameter EOF ;
    public final EObject entryRuleParameter() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleParameter = null;


        try {
            // InternalContextMappingDSL.g:7283:50: (iv_ruleParameter= ruleParameter EOF )
            // InternalContextMappingDSL.g:7284:2: iv_ruleParameter= ruleParameter EOF
            {
             newCompositeNode(grammarAccess.getParameterRule()); 
            pushFollow(FOLLOW_1);
            iv_ruleParameter=ruleParameter();

            state._fsp--;

             current =iv_ruleParameter; 
            match(input,EOF,FOLLOW_2); 

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleParameter"


    // $ANTLR start "ruleParameter"
    // InternalContextMappingDSL.g:7290:1: ruleParameter returns [EObject current=null] : ( ( (lv_doc_0_0= RULE_STRING ) )? ( (lv_parameterType_1_0= ruleComplexType ) ) ( (lv_name_2_0= RULE_ID ) ) ) ;
    public final EObject ruleParameter() throws RecognitionException {
        EObject current = null;

        Token lv_doc_0_0=null;
        Token lv_name_2_0=null;
        EObject lv_parameterType_1_0 = null;



        	enterRule();

        try {
            // InternalContextMappingDSL.g:7296:2: ( ( ( (lv_doc_0_0= RULE_STRING ) )? ( (lv_parameterType_1_0= ruleComplexType ) ) ( (lv_name_2_0= RULE_ID ) ) ) )
            // InternalContextMappingDSL.g:7297:2: ( ( (lv_doc_0_0= RULE_STRING ) )? ( (lv_parameterType_1_0= ruleComplexType ) ) ( (lv_name_2_0= RULE_ID ) ) )
            {
            // InternalContextMappingDSL.g:7297:2: ( ( (lv_doc_0_0= RULE_STRING ) )? ( (lv_parameterType_1_0= ruleComplexType ) ) ( (lv_name_2_0= RULE_ID ) ) )
            // InternalContextMappingDSL.g:7298:3: ( (lv_doc_0_0= RULE_STRING ) )? ( (lv_parameterType_1_0= ruleComplexType ) ) ( (lv_name_2_0= RULE_ID ) )
            {
            // InternalContextMappingDSL.g:7298:3: ( (lv_doc_0_0= RULE_STRING ) )?
            int alt195=2;
            int LA195_0 = input.LA(1);

            if ( (LA195_0==RULE_STRING) ) {
                alt195=1;
            }
            switch (alt195) {
                case 1 :
                    // InternalContextMappingDSL.g:7299:4: (lv_doc_0_0= RULE_STRING )
                    {
                    // InternalContextMappingDSL.g:7299:4: (lv_doc_0_0= RULE_STRING )
                    // InternalContextMappingDSL.g:7300:5: lv_doc_0_0= RULE_STRING
                    {
                    lv_doc_0_0=(Token)match(input,RULE_STRING,FOLLOW_111); 

                    					newLeafNode(lv_doc_0_0, grammarAccess.getParameterAccess().getDocSTRINGTerminalRuleCall_0_0());
                    				

                    					if (current==null) {
                    						current = createModelElement(grammarAccess.getParameterRule());
                    					}
                    					setWithLastConsumed(
                    						current,
                    						"doc",
                    						lv_doc_0_0,
                    						"org.eclipse.xtext.common.Terminals.STRING");
                    				

                    }


                    }
                    break;

            }

            // InternalContextMappingDSL.g:7316:3: ( (lv_parameterType_1_0= ruleComplexType ) )
            // InternalContextMappingDSL.g:7317:4: (lv_parameterType_1_0= ruleComplexType )
            {
            // InternalContextMappingDSL.g:7317:4: (lv_parameterType_1_0= ruleComplexType )
            // InternalContextMappingDSL.g:7318:5: lv_parameterType_1_0= ruleComplexType
            {

            					newCompositeNode(grammarAccess.getParameterAccess().getParameterTypeComplexTypeParserRuleCall_1_0());
            				
            pushFollow(FOLLOW_10);
            lv_parameterType_1_0=ruleComplexType();

            state._fsp--;


            					if (current==null) {
            						current = createModelElementForParent(grammarAccess.getParameterRule());
            					}
            					set(
            						current,
            						"parameterType",
            						lv_parameterType_1_0,
            						"org.contextmapper.tactic.dsl.TacticDDDLanguage.ComplexType");
            					afterParserOrEnumRuleCall();
            				

            }


            }

            // InternalContextMappingDSL.g:7335:3: ( (lv_name_2_0= RULE_ID ) )
            // InternalContextMappingDSL.g:7336:4: (lv_name_2_0= RULE_ID )
            {
            // InternalContextMappingDSL.g:7336:4: (lv_name_2_0= RULE_ID )
            // InternalContextMappingDSL.g:7337:5: lv_name_2_0= RULE_ID
            {
            lv_name_2_0=(Token)match(input,RULE_ID,FOLLOW_2); 

            					newLeafNode(lv_name_2_0, grammarAccess.getParameterAccess().getNameIDTerminalRuleCall_2_0());
            				

            					if (current==null) {
            						current = createModelElement(grammarAccess.getParameterRule());
            					}
            					setWithLastConsumed(
            						current,
            						"name",
            						lv_name_2_0,
            						"org.eclipse.xtext.common.Terminals.ID");
            				

            }


            }


            }


            }


            	leaveRule();

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleParameter"


    // $ANTLR start "entryRuleComplexType"
    // InternalContextMappingDSL.g:7357:1: entryRuleComplexType returns [EObject current=null] : iv_ruleComplexType= ruleComplexType EOF ;
    public final EObject entryRuleComplexType() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleComplexType = null;


        try {
            // InternalContextMappingDSL.g:7357:52: (iv_ruleComplexType= ruleComplexType EOF )
            // InternalContextMappingDSL.g:7358:2: iv_ruleComplexType= ruleComplexType EOF
            {
             newCompositeNode(grammarAccess.getComplexTypeRule()); 
            pushFollow(FOLLOW_1);
            iv_ruleComplexType=ruleComplexType();

            state._fsp--;

             current =iv_ruleComplexType; 
            match(input,EOF,FOLLOW_2); 

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleComplexType"


    // $ANTLR start "ruleComplexType"
    // InternalContextMappingDSL.g:7364:1: ruleComplexType returns [EObject current=null] : ( ( (lv_type_0_0= ruleType ) ) | ( ( (lv_type_1_0= ruleType ) ) otherlv_2= '<' otherlv_3= '@' ( (otherlv_4= RULE_ID ) ) otherlv_5= '>' ) | (otherlv_6= '@' ( (otherlv_7= RULE_ID ) ) ) | ( ( (lv_collectionType_8_0= ruleCollectionType ) ) otherlv_9= '<' ( (otherlv_10= '@' ( (otherlv_11= RULE_ID ) ) ) | ( (lv_type_12_0= ruleType ) ) | ( ( (lv_type_13_0= ruleType ) ) otherlv_14= '<' otherlv_15= '@' ( (otherlv_16= RULE_ID ) ) otherlv_17= '>' ) ) otherlv_18= '>' ) | ( ( (lv_mapCollectionType_19_0= RULE_MAP_COLLECTION_TYPE ) ) otherlv_20= '<' ( ( (lv_mapKeyType_21_0= ruleType ) ) | (otherlv_22= '@' ( (otherlv_23= RULE_ID ) ) ) ) otherlv_24= ',' ( (otherlv_25= '@' ( (otherlv_26= RULE_ID ) ) ) | ( (lv_type_27_0= ruleType ) ) | ( ( (lv_type_28_0= ruleType ) ) otherlv_29= '<' otherlv_30= '@' ( (otherlv_31= RULE_ID ) ) otherlv_32= '>' ) ) otherlv_33= '>' ) ) ;
    public final EObject ruleComplexType() throws RecognitionException {
        EObject current = null;

        Token otherlv_2=null;
        Token otherlv_3=null;
        Token otherlv_4=null;
        Token otherlv_5=null;
        Token otherlv_6=null;
        Token otherlv_7=null;
        Token otherlv_9=null;
        Token otherlv_10=null;
        Token otherlv_11=null;
        Token otherlv_14=null;
        Token otherlv_15=null;
        Token otherlv_16=null;
        Token otherlv_17=null;
        Token otherlv_18=null;
        Token lv_mapCollectionType_19_0=null;
        Token otherlv_20=null;
        Token otherlv_22=null;
        Token otherlv_23=null;
        Token otherlv_24=null;
        Token otherlv_25=null;
        Token otherlv_26=null;
        Token otherlv_29=null;
        Token otherlv_30=null;
        Token otherlv_31=null;
        Token otherlv_32=null;
        Token otherlv_33=null;
        AntlrDatatypeRuleToken lv_type_0_0 = null;

        AntlrDatatypeRuleToken lv_type_1_0 = null;

        Enumerator lv_collectionType_8_0 = null;

        AntlrDatatypeRuleToken lv_type_12_0 = null;

        AntlrDatatypeRuleToken lv_type_13_0 = null;

        AntlrDatatypeRuleToken lv_mapKeyType_21_0 = null;

        AntlrDatatypeRuleToken lv_type_27_0 = null;

        AntlrDatatypeRuleToken lv_type_28_0 = null;



        	enterRule();

        try {
            // InternalContextMappingDSL.g:7370:2: ( ( ( (lv_type_0_0= ruleType ) ) | ( ( (lv_type_1_0= ruleType ) ) otherlv_2= '<' otherlv_3= '@' ( (otherlv_4= RULE_ID ) ) otherlv_5= '>' ) | (otherlv_6= '@' ( (otherlv_7= RULE_ID ) ) ) | ( ( (lv_collectionType_8_0= ruleCollectionType ) ) otherlv_9= '<' ( (otherlv_10= '@' ( (otherlv_11= RULE_ID ) ) ) | ( (lv_type_12_0= ruleType ) ) | ( ( (lv_type_13_0= ruleType ) ) otherlv_14= '<' otherlv_15= '@' ( (otherlv_16= RULE_ID ) ) otherlv_17= '>' ) ) otherlv_18= '>' ) | ( ( (lv_mapCollectionType_19_0= RULE_MAP_COLLECTION_TYPE ) ) otherlv_20= '<' ( ( (lv_mapKeyType_21_0= ruleType ) ) | (otherlv_22= '@' ( (otherlv_23= RULE_ID ) ) ) ) otherlv_24= ',' ( (otherlv_25= '@' ( (otherlv_26= RULE_ID ) ) ) | ( (lv_type_27_0= ruleType ) ) | ( ( (lv_type_28_0= ruleType ) ) otherlv_29= '<' otherlv_30= '@' ( (otherlv_31= RULE_ID ) ) otherlv_32= '>' ) ) otherlv_33= '>' ) ) )
            // InternalContextMappingDSL.g:7371:2: ( ( (lv_type_0_0= ruleType ) ) | ( ( (lv_type_1_0= ruleType ) ) otherlv_2= '<' otherlv_3= '@' ( (otherlv_4= RULE_ID ) ) otherlv_5= '>' ) | (otherlv_6= '@' ( (otherlv_7= RULE_ID ) ) ) | ( ( (lv_collectionType_8_0= ruleCollectionType ) ) otherlv_9= '<' ( (otherlv_10= '@' ( (otherlv_11= RULE_ID ) ) ) | ( (lv_type_12_0= ruleType ) ) | ( ( (lv_type_13_0= ruleType ) ) otherlv_14= '<' otherlv_15= '@' ( (otherlv_16= RULE_ID ) ) otherlv_17= '>' ) ) otherlv_18= '>' ) | ( ( (lv_mapCollectionType_19_0= RULE_MAP_COLLECTION_TYPE ) ) otherlv_20= '<' ( ( (lv_mapKeyType_21_0= ruleType ) ) | (otherlv_22= '@' ( (otherlv_23= RULE_ID ) ) ) ) otherlv_24= ',' ( (otherlv_25= '@' ( (otherlv_26= RULE_ID ) ) ) | ( (lv_type_27_0= ruleType ) ) | ( ( (lv_type_28_0= ruleType ) ) otherlv_29= '<' otherlv_30= '@' ( (otherlv_31= RULE_ID ) ) otherlv_32= '>' ) ) otherlv_33= '>' ) )
            {
            // InternalContextMappingDSL.g:7371:2: ( ( (lv_type_0_0= ruleType ) ) | ( ( (lv_type_1_0= ruleType ) ) otherlv_2= '<' otherlv_3= '@' ( (otherlv_4= RULE_ID ) ) otherlv_5= '>' ) | (otherlv_6= '@' ( (otherlv_7= RULE_ID ) ) ) | ( ( (lv_collectionType_8_0= ruleCollectionType ) ) otherlv_9= '<' ( (otherlv_10= '@' ( (otherlv_11= RULE_ID ) ) ) | ( (lv_type_12_0= ruleType ) ) | ( ( (lv_type_13_0= ruleType ) ) otherlv_14= '<' otherlv_15= '@' ( (otherlv_16= RULE_ID ) ) otherlv_17= '>' ) ) otherlv_18= '>' ) | ( ( (lv_mapCollectionType_19_0= RULE_MAP_COLLECTION_TYPE ) ) otherlv_20= '<' ( ( (lv_mapKeyType_21_0= ruleType ) ) | (otherlv_22= '@' ( (otherlv_23= RULE_ID ) ) ) ) otherlv_24= ',' ( (otherlv_25= '@' ( (otherlv_26= RULE_ID ) ) ) | ( (lv_type_27_0= ruleType ) ) | ( ( (lv_type_28_0= ruleType ) ) otherlv_29= '<' otherlv_30= '@' ( (otherlv_31= RULE_ID ) ) otherlv_32= '>' ) ) otherlv_33= '>' ) )
            int alt199=5;
            alt199 = dfa199.predict(input);
            switch (alt199) {
                case 1 :
                    // InternalContextMappingDSL.g:7372:3: ( (lv_type_0_0= ruleType ) )
                    {
                    // InternalContextMappingDSL.g:7372:3: ( (lv_type_0_0= ruleType ) )
                    // InternalContextMappingDSL.g:7373:4: (lv_type_0_0= ruleType )
                    {
                    // InternalContextMappingDSL.g:7373:4: (lv_type_0_0= ruleType )
                    // InternalContextMappingDSL.g:7374:5: lv_type_0_0= ruleType
                    {

                    					newCompositeNode(grammarAccess.getComplexTypeAccess().getTypeTypeParserRuleCall_0_0());
                    				
                    pushFollow(FOLLOW_2);
                    lv_type_0_0=ruleType();

                    state._fsp--;


                    					if (current==null) {
                    						current = createModelElementForParent(grammarAccess.getComplexTypeRule());
                    					}
                    					set(
                    						current,
                    						"type",
                    						lv_type_0_0,
                    						"org.contextmapper.tactic.dsl.TacticDDDLanguage.Type");
                    					afterParserOrEnumRuleCall();
                    				

                    }


                    }


                    }
                    break;
                case 2 :
                    // InternalContextMappingDSL.g:7392:3: ( ( (lv_type_1_0= ruleType ) ) otherlv_2= '<' otherlv_3= '@' ( (otherlv_4= RULE_ID ) ) otherlv_5= '>' )
                    {
                    // InternalContextMappingDSL.g:7392:3: ( ( (lv_type_1_0= ruleType ) ) otherlv_2= '<' otherlv_3= '@' ( (otherlv_4= RULE_ID ) ) otherlv_5= '>' )
                    // InternalContextMappingDSL.g:7393:4: ( (lv_type_1_0= ruleType ) ) otherlv_2= '<' otherlv_3= '@' ( (otherlv_4= RULE_ID ) ) otherlv_5= '>'
                    {
                    // InternalContextMappingDSL.g:7393:4: ( (lv_type_1_0= ruleType ) )
                    // InternalContextMappingDSL.g:7394:5: (lv_type_1_0= ruleType )
                    {
                    // InternalContextMappingDSL.g:7394:5: (lv_type_1_0= ruleType )
                    // InternalContextMappingDSL.g:7395:6: lv_type_1_0= ruleType
                    {

                    						newCompositeNode(grammarAccess.getComplexTypeAccess().getTypeTypeParserRuleCall_1_0_0());
                    					
                    pushFollow(FOLLOW_117);
                    lv_type_1_0=ruleType();

                    state._fsp--;


                    						if (current==null) {
                    							current = createModelElementForParent(grammarAccess.getComplexTypeRule());
                    						}
                    						set(
                    							current,
                    							"type",
                    							lv_type_1_0,
                    							"org.contextmapper.tactic.dsl.TacticDDDLanguage.Type");
                    						afterParserOrEnumRuleCall();
                    					

                    }


                    }

                    otherlv_2=(Token)match(input,103,FOLLOW_118); 

                    				newLeafNode(otherlv_2, grammarAccess.getComplexTypeAccess().getLessThanSignKeyword_1_1());
                    			
                    otherlv_3=(Token)match(input,79,FOLLOW_10); 

                    				newLeafNode(otherlv_3, grammarAccess.getComplexTypeAccess().getCommercialAtKeyword_1_2());
                    			
                    // InternalContextMappingDSL.g:7420:4: ( (otherlv_4= RULE_ID ) )
                    // InternalContextMappingDSL.g:7421:5: (otherlv_4= RULE_ID )
                    {
                    // InternalContextMappingDSL.g:7421:5: (otherlv_4= RULE_ID )
                    // InternalContextMappingDSL.g:7422:6: otherlv_4= RULE_ID
                    {

                    						if (current==null) {
                    							current = createModelElement(grammarAccess.getComplexTypeRule());
                    						}
                    					
                    otherlv_4=(Token)match(input,RULE_ID,FOLLOW_119); 

                    						newLeafNode(otherlv_4, grammarAccess.getComplexTypeAccess().getDomainObjectTypeSimpleDomainObjectCrossReference_1_3_0());
                    					

                    }


                    }

                    otherlv_5=(Token)match(input,104,FOLLOW_2); 

                    				newLeafNode(otherlv_5, grammarAccess.getComplexTypeAccess().getGreaterThanSignKeyword_1_4());
                    			

                    }


                    }
                    break;
                case 3 :
                    // InternalContextMappingDSL.g:7439:3: (otherlv_6= '@' ( (otherlv_7= RULE_ID ) ) )
                    {
                    // InternalContextMappingDSL.g:7439:3: (otherlv_6= '@' ( (otherlv_7= RULE_ID ) ) )
                    // InternalContextMappingDSL.g:7440:4: otherlv_6= '@' ( (otherlv_7= RULE_ID ) )
                    {
                    otherlv_6=(Token)match(input,79,FOLLOW_10); 

                    				newLeafNode(otherlv_6, grammarAccess.getComplexTypeAccess().getCommercialAtKeyword_2_0());
                    			
                    // InternalContextMappingDSL.g:7444:4: ( (otherlv_7= RULE_ID ) )
                    // InternalContextMappingDSL.g:7445:5: (otherlv_7= RULE_ID )
                    {
                    // InternalContextMappingDSL.g:7445:5: (otherlv_7= RULE_ID )
                    // InternalContextMappingDSL.g:7446:6: otherlv_7= RULE_ID
                    {

                    						if (current==null) {
                    							current = createModelElement(grammarAccess.getComplexTypeRule());
                    						}
                    					
                    otherlv_7=(Token)match(input,RULE_ID,FOLLOW_2); 

                    						newLeafNode(otherlv_7, grammarAccess.getComplexTypeAccess().getDomainObjectTypeSimpleDomainObjectCrossReference_2_1_0());
                    					

                    }


                    }


                    }


                    }
                    break;
                case 4 :
                    // InternalContextMappingDSL.g:7459:3: ( ( (lv_collectionType_8_0= ruleCollectionType ) ) otherlv_9= '<' ( (otherlv_10= '@' ( (otherlv_11= RULE_ID ) ) ) | ( (lv_type_12_0= ruleType ) ) | ( ( (lv_type_13_0= ruleType ) ) otherlv_14= '<' otherlv_15= '@' ( (otherlv_16= RULE_ID ) ) otherlv_17= '>' ) ) otherlv_18= '>' )
                    {
                    // InternalContextMappingDSL.g:7459:3: ( ( (lv_collectionType_8_0= ruleCollectionType ) ) otherlv_9= '<' ( (otherlv_10= '@' ( (otherlv_11= RULE_ID ) ) ) | ( (lv_type_12_0= ruleType ) ) | ( ( (lv_type_13_0= ruleType ) ) otherlv_14= '<' otherlv_15= '@' ( (otherlv_16= RULE_ID ) ) otherlv_17= '>' ) ) otherlv_18= '>' )
                    // InternalContextMappingDSL.g:7460:4: ( (lv_collectionType_8_0= ruleCollectionType ) ) otherlv_9= '<' ( (otherlv_10= '@' ( (otherlv_11= RULE_ID ) ) ) | ( (lv_type_12_0= ruleType ) ) | ( ( (lv_type_13_0= ruleType ) ) otherlv_14= '<' otherlv_15= '@' ( (otherlv_16= RULE_ID ) ) otherlv_17= '>' ) ) otherlv_18= '>'
                    {
                    // InternalContextMappingDSL.g:7460:4: ( (lv_collectionType_8_0= ruleCollectionType ) )
                    // InternalContextMappingDSL.g:7461:5: (lv_collectionType_8_0= ruleCollectionType )
                    {
                    // InternalContextMappingDSL.g:7461:5: (lv_collectionType_8_0= ruleCollectionType )
                    // InternalContextMappingDSL.g:7462:6: lv_collectionType_8_0= ruleCollectionType
                    {

                    						newCompositeNode(grammarAccess.getComplexTypeAccess().getCollectionTypeCollectionTypeEnumRuleCall_3_0_0());
                    					
                    pushFollow(FOLLOW_117);
                    lv_collectionType_8_0=ruleCollectionType();

                    state._fsp--;


                    						if (current==null) {
                    							current = createModelElementForParent(grammarAccess.getComplexTypeRule());
                    						}
                    						set(
                    							current,
                    							"collectionType",
                    							lv_collectionType_8_0,
                    							"org.contextmapper.tactic.dsl.TacticDDDLanguage.CollectionType");
                    						afterParserOrEnumRuleCall();
                    					

                    }


                    }

                    otherlv_9=(Token)match(input,103,FOLLOW_120); 

                    				newLeafNode(otherlv_9, grammarAccess.getComplexTypeAccess().getLessThanSignKeyword_3_1());
                    			
                    // InternalContextMappingDSL.g:7483:4: ( (otherlv_10= '@' ( (otherlv_11= RULE_ID ) ) ) | ( (lv_type_12_0= ruleType ) ) | ( ( (lv_type_13_0= ruleType ) ) otherlv_14= '<' otherlv_15= '@' ( (otherlv_16= RULE_ID ) ) otherlv_17= '>' ) )
                    int alt196=3;
                    alt196 = dfa196.predict(input);
                    switch (alt196) {
                        case 1 :
                            // InternalContextMappingDSL.g:7484:5: (otherlv_10= '@' ( (otherlv_11= RULE_ID ) ) )
                            {
                            // InternalContextMappingDSL.g:7484:5: (otherlv_10= '@' ( (otherlv_11= RULE_ID ) ) )
                            // InternalContextMappingDSL.g:7485:6: otherlv_10= '@' ( (otherlv_11= RULE_ID ) )
                            {
                            otherlv_10=(Token)match(input,79,FOLLOW_10); 

                            						newLeafNode(otherlv_10, grammarAccess.getComplexTypeAccess().getCommercialAtKeyword_3_2_0_0());
                            					
                            // InternalContextMappingDSL.g:7489:6: ( (otherlv_11= RULE_ID ) )
                            // InternalContextMappingDSL.g:7490:7: (otherlv_11= RULE_ID )
                            {
                            // InternalContextMappingDSL.g:7490:7: (otherlv_11= RULE_ID )
                            // InternalContextMappingDSL.g:7491:8: otherlv_11= RULE_ID
                            {

                            								if (current==null) {
                            									current = createModelElement(grammarAccess.getComplexTypeRule());
                            								}
                            							
                            otherlv_11=(Token)match(input,RULE_ID,FOLLOW_119); 

                            								newLeafNode(otherlv_11, grammarAccess.getComplexTypeAccess().getDomainObjectTypeSimpleDomainObjectCrossReference_3_2_0_1_0());
                            							

                            }


                            }


                            }


                            }
                            break;
                        case 2 :
                            // InternalContextMappingDSL.g:7504:5: ( (lv_type_12_0= ruleType ) )
                            {
                            // InternalContextMappingDSL.g:7504:5: ( (lv_type_12_0= ruleType ) )
                            // InternalContextMappingDSL.g:7505:6: (lv_type_12_0= ruleType )
                            {
                            // InternalContextMappingDSL.g:7505:6: (lv_type_12_0= ruleType )
                            // InternalContextMappingDSL.g:7506:7: lv_type_12_0= ruleType
                            {

                            							newCompositeNode(grammarAccess.getComplexTypeAccess().getTypeTypeParserRuleCall_3_2_1_0());
                            						
                            pushFollow(FOLLOW_119);
                            lv_type_12_0=ruleType();

                            state._fsp--;


                            							if (current==null) {
                            								current = createModelElementForParent(grammarAccess.getComplexTypeRule());
                            							}
                            							set(
                            								current,
                            								"type",
                            								lv_type_12_0,
                            								"org.contextmapper.tactic.dsl.TacticDDDLanguage.Type");
                            							afterParserOrEnumRuleCall();
                            						

                            }


                            }


                            }
                            break;
                        case 3 :
                            // InternalContextMappingDSL.g:7524:5: ( ( (lv_type_13_0= ruleType ) ) otherlv_14= '<' otherlv_15= '@' ( (otherlv_16= RULE_ID ) ) otherlv_17= '>' )
                            {
                            // InternalContextMappingDSL.g:7524:5: ( ( (lv_type_13_0= ruleType ) ) otherlv_14= '<' otherlv_15= '@' ( (otherlv_16= RULE_ID ) ) otherlv_17= '>' )
                            // InternalContextMappingDSL.g:7525:6: ( (lv_type_13_0= ruleType ) ) otherlv_14= '<' otherlv_15= '@' ( (otherlv_16= RULE_ID ) ) otherlv_17= '>'
                            {
                            // InternalContextMappingDSL.g:7525:6: ( (lv_type_13_0= ruleType ) )
                            // InternalContextMappingDSL.g:7526:7: (lv_type_13_0= ruleType )
                            {
                            // InternalContextMappingDSL.g:7526:7: (lv_type_13_0= ruleType )
                            // InternalContextMappingDSL.g:7527:8: lv_type_13_0= ruleType
                            {

                            								newCompositeNode(grammarAccess.getComplexTypeAccess().getTypeTypeParserRuleCall_3_2_2_0_0());
                            							
                            pushFollow(FOLLOW_117);
                            lv_type_13_0=ruleType();

                            state._fsp--;


                            								if (current==null) {
                            									current = createModelElementForParent(grammarAccess.getComplexTypeRule());
                            								}
                            								set(
                            									current,
                            									"type",
                            									lv_type_13_0,
                            									"org.contextmapper.tactic.dsl.TacticDDDLanguage.Type");
                            								afterParserOrEnumRuleCall();
                            							

                            }


                            }

                            otherlv_14=(Token)match(input,103,FOLLOW_118); 

                            						newLeafNode(otherlv_14, grammarAccess.getComplexTypeAccess().getLessThanSignKeyword_3_2_2_1());
                            					
                            otherlv_15=(Token)match(input,79,FOLLOW_10); 

                            						newLeafNode(otherlv_15, grammarAccess.getComplexTypeAccess().getCommercialAtKeyword_3_2_2_2());
                            					
                            // InternalContextMappingDSL.g:7552:6: ( (otherlv_16= RULE_ID ) )
                            // InternalContextMappingDSL.g:7553:7: (otherlv_16= RULE_ID )
                            {
                            // InternalContextMappingDSL.g:7553:7: (otherlv_16= RULE_ID )
                            // InternalContextMappingDSL.g:7554:8: otherlv_16= RULE_ID
                            {

                            								if (current==null) {
                            									current = createModelElement(grammarAccess.getComplexTypeRule());
                            								}
                            							
                            otherlv_16=(Token)match(input,RULE_ID,FOLLOW_119); 

                            								newLeafNode(otherlv_16, grammarAccess.getComplexTypeAccess().getDomainObjectTypeSimpleDomainObjectCrossReference_3_2_2_3_0());
                            							

                            }


                            }

                            otherlv_17=(Token)match(input,104,FOLLOW_119); 

                            						newLeafNode(otherlv_17, grammarAccess.getComplexTypeAccess().getGreaterThanSignKeyword_3_2_2_4());
                            					

                            }


                            }
                            break;

                    }

                    otherlv_18=(Token)match(input,104,FOLLOW_2); 

                    				newLeafNode(otherlv_18, grammarAccess.getComplexTypeAccess().getGreaterThanSignKeyword_3_3());
                    			

                    }


                    }
                    break;
                case 5 :
                    // InternalContextMappingDSL.g:7577:3: ( ( (lv_mapCollectionType_19_0= RULE_MAP_COLLECTION_TYPE ) ) otherlv_20= '<' ( ( (lv_mapKeyType_21_0= ruleType ) ) | (otherlv_22= '@' ( (otherlv_23= RULE_ID ) ) ) ) otherlv_24= ',' ( (otherlv_25= '@' ( (otherlv_26= RULE_ID ) ) ) | ( (lv_type_27_0= ruleType ) ) | ( ( (lv_type_28_0= ruleType ) ) otherlv_29= '<' otherlv_30= '@' ( (otherlv_31= RULE_ID ) ) otherlv_32= '>' ) ) otherlv_33= '>' )
                    {
                    // InternalContextMappingDSL.g:7577:3: ( ( (lv_mapCollectionType_19_0= RULE_MAP_COLLECTION_TYPE ) ) otherlv_20= '<' ( ( (lv_mapKeyType_21_0= ruleType ) ) | (otherlv_22= '@' ( (otherlv_23= RULE_ID ) ) ) ) otherlv_24= ',' ( (otherlv_25= '@' ( (otherlv_26= RULE_ID ) ) ) | ( (lv_type_27_0= ruleType ) ) | ( ( (lv_type_28_0= ruleType ) ) otherlv_29= '<' otherlv_30= '@' ( (otherlv_31= RULE_ID ) ) otherlv_32= '>' ) ) otherlv_33= '>' )
                    // InternalContextMappingDSL.g:7578:4: ( (lv_mapCollectionType_19_0= RULE_MAP_COLLECTION_TYPE ) ) otherlv_20= '<' ( ( (lv_mapKeyType_21_0= ruleType ) ) | (otherlv_22= '@' ( (otherlv_23= RULE_ID ) ) ) ) otherlv_24= ',' ( (otherlv_25= '@' ( (otherlv_26= RULE_ID ) ) ) | ( (lv_type_27_0= ruleType ) ) | ( ( (lv_type_28_0= ruleType ) ) otherlv_29= '<' otherlv_30= '@' ( (otherlv_31= RULE_ID ) ) otherlv_32= '>' ) ) otherlv_33= '>'
                    {
                    // InternalContextMappingDSL.g:7578:4: ( (lv_mapCollectionType_19_0= RULE_MAP_COLLECTION_TYPE ) )
                    // InternalContextMappingDSL.g:7579:5: (lv_mapCollectionType_19_0= RULE_MAP_COLLECTION_TYPE )
                    {
                    // InternalContextMappingDSL.g:7579:5: (lv_mapCollectionType_19_0= RULE_MAP_COLLECTION_TYPE )
                    // InternalContextMappingDSL.g:7580:6: lv_mapCollectionType_19_0= RULE_MAP_COLLECTION_TYPE
                    {
                    lv_mapCollectionType_19_0=(Token)match(input,RULE_MAP_COLLECTION_TYPE,FOLLOW_117); 

                    						newLeafNode(lv_mapCollectionType_19_0, grammarAccess.getComplexTypeAccess().getMapCollectionTypeMAP_COLLECTION_TYPETerminalRuleCall_4_0_0());
                    					

                    						if (current==null) {
                    							current = createModelElement(grammarAccess.getComplexTypeRule());
                    						}
                    						setWithLastConsumed(
                    							current,
                    							"mapCollectionType",
                    							lv_mapCollectionType_19_0,
                    							"org.contextmapper.tactic.dsl.TacticDDDLanguage.MAP_COLLECTION_TYPE");
                    					

                    }


                    }

                    otherlv_20=(Token)match(input,103,FOLLOW_120); 

                    				newLeafNode(otherlv_20, grammarAccess.getComplexTypeAccess().getLessThanSignKeyword_4_1());
                    			
                    // InternalContextMappingDSL.g:7600:4: ( ( (lv_mapKeyType_21_0= ruleType ) ) | (otherlv_22= '@' ( (otherlv_23= RULE_ID ) ) ) )
                    int alt197=2;
                    int LA197_0 = input.LA(1);

                    if ( (LA197_0==RULE_ID||(LA197_0>=170 && LA197_0<=191)) ) {
                        alt197=1;
                    }
                    else if ( (LA197_0==79) ) {
                        alt197=2;
                    }
                    else {
                        NoViableAltException nvae =
                            new NoViableAltException("", 197, 0, input);

                        throw nvae;
                    }
                    switch (alt197) {
                        case 1 :
                            // InternalContextMappingDSL.g:7601:5: ( (lv_mapKeyType_21_0= ruleType ) )
                            {
                            // InternalContextMappingDSL.g:7601:5: ( (lv_mapKeyType_21_0= ruleType ) )
                            // InternalContextMappingDSL.g:7602:6: (lv_mapKeyType_21_0= ruleType )
                            {
                            // InternalContextMappingDSL.g:7602:6: (lv_mapKeyType_21_0= ruleType )
                            // InternalContextMappingDSL.g:7603:7: lv_mapKeyType_21_0= ruleType
                            {

                            							newCompositeNode(grammarAccess.getComplexTypeAccess().getMapKeyTypeTypeParserRuleCall_4_2_0_0());
                            						
                            pushFollow(FOLLOW_42);
                            lv_mapKeyType_21_0=ruleType();

                            state._fsp--;


                            							if (current==null) {
                            								current = createModelElementForParent(grammarAccess.getComplexTypeRule());
                            							}
                            							set(
                            								current,
                            								"mapKeyType",
                            								lv_mapKeyType_21_0,
                            								"org.contextmapper.tactic.dsl.TacticDDDLanguage.Type");
                            							afterParserOrEnumRuleCall();
                            						

                            }


                            }


                            }
                            break;
                        case 2 :
                            // InternalContextMappingDSL.g:7621:5: (otherlv_22= '@' ( (otherlv_23= RULE_ID ) ) )
                            {
                            // InternalContextMappingDSL.g:7621:5: (otherlv_22= '@' ( (otherlv_23= RULE_ID ) ) )
                            // InternalContextMappingDSL.g:7622:6: otherlv_22= '@' ( (otherlv_23= RULE_ID ) )
                            {
                            otherlv_22=(Token)match(input,79,FOLLOW_10); 

                            						newLeafNode(otherlv_22, grammarAccess.getComplexTypeAccess().getCommercialAtKeyword_4_2_1_0());
                            					
                            // InternalContextMappingDSL.g:7626:6: ( (otherlv_23= RULE_ID ) )
                            // InternalContextMappingDSL.g:7627:7: (otherlv_23= RULE_ID )
                            {
                            // InternalContextMappingDSL.g:7627:7: (otherlv_23= RULE_ID )
                            // InternalContextMappingDSL.g:7628:8: otherlv_23= RULE_ID
                            {

                            								if (current==null) {
                            									current = createModelElement(grammarAccess.getComplexTypeRule());
                            								}
                            							
                            otherlv_23=(Token)match(input,RULE_ID,FOLLOW_42); 

                            								newLeafNode(otherlv_23, grammarAccess.getComplexTypeAccess().getMapKeyDomainObjectTypeSimpleDomainObjectCrossReference_4_2_1_1_0());
                            							

                            }


                            }


                            }


                            }
                            break;

                    }

                    otherlv_24=(Token)match(input,24,FOLLOW_120); 

                    				newLeafNode(otherlv_24, grammarAccess.getComplexTypeAccess().getCommaKeyword_4_3());
                    			
                    // InternalContextMappingDSL.g:7645:4: ( (otherlv_25= '@' ( (otherlv_26= RULE_ID ) ) ) | ( (lv_type_27_0= ruleType ) ) | ( ( (lv_type_28_0= ruleType ) ) otherlv_29= '<' otherlv_30= '@' ( (otherlv_31= RULE_ID ) ) otherlv_32= '>' ) )
                    int alt198=3;
                    alt198 = dfa198.predict(input);
                    switch (alt198) {
                        case 1 :
                            // InternalContextMappingDSL.g:7646:5: (otherlv_25= '@' ( (otherlv_26= RULE_ID ) ) )
                            {
                            // InternalContextMappingDSL.g:7646:5: (otherlv_25= '@' ( (otherlv_26= RULE_ID ) ) )
                            // InternalContextMappingDSL.g:7647:6: otherlv_25= '@' ( (otherlv_26= RULE_ID ) )
                            {
                            otherlv_25=(Token)match(input,79,FOLLOW_10); 

                            						newLeafNode(otherlv_25, grammarAccess.getComplexTypeAccess().getCommercialAtKeyword_4_4_0_0());
                            					
                            // InternalContextMappingDSL.g:7651:6: ( (otherlv_26= RULE_ID ) )
                            // InternalContextMappingDSL.g:7652:7: (otherlv_26= RULE_ID )
                            {
                            // InternalContextMappingDSL.g:7652:7: (otherlv_26= RULE_ID )
                            // InternalContextMappingDSL.g:7653:8: otherlv_26= RULE_ID
                            {

                            								if (current==null) {
                            									current = createModelElement(grammarAccess.getComplexTypeRule());
                            								}
                            							
                            otherlv_26=(Token)match(input,RULE_ID,FOLLOW_119); 

                            								newLeafNode(otherlv_26, grammarAccess.getComplexTypeAccess().getDomainObjectTypeSimpleDomainObjectCrossReference_4_4_0_1_0());
                            							

                            }


                            }


                            }


                            }
                            break;
                        case 2 :
                            // InternalContextMappingDSL.g:7666:5: ( (lv_type_27_0= ruleType ) )
                            {
                            // InternalContextMappingDSL.g:7666:5: ( (lv_type_27_0= ruleType ) )
                            // InternalContextMappingDSL.g:7667:6: (lv_type_27_0= ruleType )
                            {
                            // InternalContextMappingDSL.g:7667:6: (lv_type_27_0= ruleType )
                            // InternalContextMappingDSL.g:7668:7: lv_type_27_0= ruleType
                            {

                            							newCompositeNode(grammarAccess.getComplexTypeAccess().getTypeTypeParserRuleCall_4_4_1_0());
                            						
                            pushFollow(FOLLOW_119);
                            lv_type_27_0=ruleType();

                            state._fsp--;


                            							if (current==null) {
                            								current = createModelElementForParent(grammarAccess.getComplexTypeRule());
                            							}
                            							set(
                            								current,
                            								"type",
                            								lv_type_27_0,
                            								"org.contextmapper.tactic.dsl.TacticDDDLanguage.Type");
                            							afterParserOrEnumRuleCall();
                            						

                            }


                            }


                            }
                            break;
                        case 3 :
                            // InternalContextMappingDSL.g:7686:5: ( ( (lv_type_28_0= ruleType ) ) otherlv_29= '<' otherlv_30= '@' ( (otherlv_31= RULE_ID ) ) otherlv_32= '>' )
                            {
                            // InternalContextMappingDSL.g:7686:5: ( ( (lv_type_28_0= ruleType ) ) otherlv_29= '<' otherlv_30= '@' ( (otherlv_31= RULE_ID ) ) otherlv_32= '>' )
                            // InternalContextMappingDSL.g:7687:6: ( (lv_type_28_0= ruleType ) ) otherlv_29= '<' otherlv_30= '@' ( (otherlv_31= RULE_ID ) ) otherlv_32= '>'
                            {
                            // InternalContextMappingDSL.g:7687:6: ( (lv_type_28_0= ruleType ) )
                            // InternalContextMappingDSL.g:7688:7: (lv_type_28_0= ruleType )
                            {
                            // InternalContextMappingDSL.g:7688:7: (lv_type_28_0= ruleType )
                            // InternalContextMappingDSL.g:7689:8: lv_type_28_0= ruleType
                            {

                            								newCompositeNode(grammarAccess.getComplexTypeAccess().getTypeTypeParserRuleCall_4_4_2_0_0());
                            							
                            pushFollow(FOLLOW_117);
                            lv_type_28_0=ruleType();

                            state._fsp--;


                            								if (current==null) {
                            									current = createModelElementForParent(grammarAccess.getComplexTypeRule());
                            								}
                            								set(
                            									current,
                            									"type",
                            									lv_type_28_0,
                            									"org.contextmapper.tactic.dsl.TacticDDDLanguage.Type");
                            								afterParserOrEnumRuleCall();
                            							

                            }


                            }

                            otherlv_29=(Token)match(input,103,FOLLOW_118); 

                            						newLeafNode(otherlv_29, grammarAccess.getComplexTypeAccess().getLessThanSignKeyword_4_4_2_1());
                            					
                            otherlv_30=(Token)match(input,79,FOLLOW_10); 

                            						newLeafNode(otherlv_30, grammarAccess.getComplexTypeAccess().getCommercialAtKeyword_4_4_2_2());
                            					
                            // InternalContextMappingDSL.g:7714:6: ( (otherlv_31= RULE_ID ) )
                            // InternalContextMappingDSL.g:7715:7: (otherlv_31= RULE_ID )
                            {
                            // InternalContextMappingDSL.g:7715:7: (otherlv_31= RULE_ID )
                            // InternalContextMappingDSL.g:7716:8: otherlv_31= RULE_ID
                            {

                            								if (current==null) {
                            									current = createModelElement(grammarAccess.getComplexTypeRule());
                            								}
                            							
                            otherlv_31=(Token)match(input,RULE_ID,FOLLOW_119); 

                            								newLeafNode(otherlv_31, grammarAccess.getComplexTypeAccess().getDomainObjectTypeSimpleDomainObjectCrossReference_4_4_2_3_0());
                            							

                            }


                            }

                            otherlv_32=(Token)match(input,104,FOLLOW_119); 

                            						newLeafNode(otherlv_32, grammarAccess.getComplexTypeAccess().getGreaterThanSignKeyword_4_4_2_4());
                            					

                            }


                            }
                            break;

                    }

                    otherlv_33=(Token)match(input,104,FOLLOW_2); 

                    				newLeafNode(otherlv_33, grammarAccess.getComplexTypeAccess().getGreaterThanSignKeyword_4_5());
                    			

                    }


                    }
                    break;

            }


            }


            	leaveRule();

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleComplexType"


    // $ANTLR start "entryRuleSimpleDomainObject"
    // InternalContextMappingDSL.g:7742:1: entryRuleSimpleDomainObject returns [EObject current=null] : iv_ruleSimpleDomainObject= ruleSimpleDomainObject EOF ;
    public final EObject entryRuleSimpleDomainObject() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleSimpleDomainObject = null;


        try {
            // InternalContextMappingDSL.g:7742:59: (iv_ruleSimpleDomainObject= ruleSimpleDomainObject EOF )
            // InternalContextMappingDSL.g:7743:2: iv_ruleSimpleDomainObject= ruleSimpleDomainObject EOF
            {
             newCompositeNode(grammarAccess.getSimpleDomainObjectRule()); 
            pushFollow(FOLLOW_1);
            iv_ruleSimpleDomainObject=ruleSimpleDomainObject();

            state._fsp--;

             current =iv_ruleSimpleDomainObject; 
            match(input,EOF,FOLLOW_2); 

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleSimpleDomainObject"


    // $ANTLR start "ruleSimpleDomainObject"
    // InternalContextMappingDSL.g:7749:1: ruleSimpleDomainObject returns [EObject current=null] : (this_BasicType_0= ruleBasicType | this_Enum_1= ruleEnum | this_DomainObject_2= ruleDomainObject | this_DataTransferObject_3= ruleDataTransferObject | this_Trait_4= ruleTrait ) ;
    public final EObject ruleSimpleDomainObject() throws RecognitionException {
        EObject current = null;

        EObject this_BasicType_0 = null;

        EObject this_Enum_1 = null;

        EObject this_DomainObject_2 = null;

        EObject this_DataTransferObject_3 = null;

        EObject this_Trait_4 = null;



        	enterRule();

        try {
            // InternalContextMappingDSL.g:7755:2: ( (this_BasicType_0= ruleBasicType | this_Enum_1= ruleEnum | this_DomainObject_2= ruleDomainObject | this_DataTransferObject_3= ruleDataTransferObject | this_Trait_4= ruleTrait ) )
            // InternalContextMappingDSL.g:7756:2: (this_BasicType_0= ruleBasicType | this_Enum_1= ruleEnum | this_DomainObject_2= ruleDomainObject | this_DataTransferObject_3= ruleDataTransferObject | this_Trait_4= ruleTrait )
            {
            // InternalContextMappingDSL.g:7756:2: (this_BasicType_0= ruleBasicType | this_Enum_1= ruleEnum | this_DomainObject_2= ruleDomainObject | this_DataTransferObject_3= ruleDataTransferObject | this_Trait_4= ruleTrait )
            int alt200=5;
            alt200 = dfa200.predict(input);
            switch (alt200) {
                case 1 :
                    // InternalContextMappingDSL.g:7757:3: this_BasicType_0= ruleBasicType
                    {

                    			newCompositeNode(grammarAccess.getSimpleDomainObjectAccess().getBasicTypeParserRuleCall_0());
                    		
                    pushFollow(FOLLOW_2);
                    this_BasicType_0=ruleBasicType();

                    state._fsp--;


                    			current = this_BasicType_0;
                    			afterParserOrEnumRuleCall();
                    		

                    }
                    break;
                case 2 :
                    // InternalContextMappingDSL.g:7766:3: this_Enum_1= ruleEnum
                    {

                    			newCompositeNode(grammarAccess.getSimpleDomainObjectAccess().getEnumParserRuleCall_1());
                    		
                    pushFollow(FOLLOW_2);
                    this_Enum_1=ruleEnum();

                    state._fsp--;


                    			current = this_Enum_1;
                    			afterParserOrEnumRuleCall();
                    		

                    }
                    break;
                case 3 :
                    // InternalContextMappingDSL.g:7775:3: this_DomainObject_2= ruleDomainObject
                    {

                    			newCompositeNode(grammarAccess.getSimpleDomainObjectAccess().getDomainObjectParserRuleCall_2());
                    		
                    pushFollow(FOLLOW_2);
                    this_DomainObject_2=ruleDomainObject();

                    state._fsp--;


                    			current = this_DomainObject_2;
                    			afterParserOrEnumRuleCall();
                    		

                    }
                    break;
                case 4 :
                    // InternalContextMappingDSL.g:7784:3: this_DataTransferObject_3= ruleDataTransferObject
                    {

                    			newCompositeNode(grammarAccess.getSimpleDomainObjectAccess().getDataTransferObjectParserRuleCall_3());
                    		
                    pushFollow(FOLLOW_2);
                    this_DataTransferObject_3=ruleDataTransferObject();

                    state._fsp--;


                    			current = this_DataTransferObject_3;
                    			afterParserOrEnumRuleCall();
                    		

                    }
                    break;
                case 5 :
                    // InternalContextMappingDSL.g:7793:3: this_Trait_4= ruleTrait
                    {

                    			newCompositeNode(grammarAccess.getSimpleDomainObjectAccess().getTraitParserRuleCall_4());
                    		
                    pushFollow(FOLLOW_2);
                    this_Trait_4=ruleTrait();

                    state._fsp--;


                    			current = this_Trait_4;
                    			afterParserOrEnumRuleCall();
                    		

                    }
                    break;

            }


            }


            	leaveRule();

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleSimpleDomainObject"


    // $ANTLR start "entryRuleDomainObject"
    // InternalContextMappingDSL.g:7805:1: entryRuleDomainObject returns [EObject current=null] : iv_ruleDomainObject= ruleDomainObject EOF ;
    public final EObject entryRuleDomainObject() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleDomainObject = null;


        try {
            // InternalContextMappingDSL.g:7805:53: (iv_ruleDomainObject= ruleDomainObject EOF )
            // InternalContextMappingDSL.g:7806:2: iv_ruleDomainObject= ruleDomainObject EOF
            {
             newCompositeNode(grammarAccess.getDomainObjectRule()); 
            pushFollow(FOLLOW_1);
            iv_ruleDomainObject=ruleDomainObject();

            state._fsp--;

             current =iv_ruleDomainObject; 
            match(input,EOF,FOLLOW_2); 

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleDomainObject"


    // $ANTLR start "ruleDomainObject"
    // InternalContextMappingDSL.g:7812:1: ruleDomainObject returns [EObject current=null] : (this_Entity_0= ruleEntity | this_ValueObject_1= ruleValueObject | this_Event_2= ruleEvent ) ;
    public final EObject ruleDomainObject() throws RecognitionException {
        EObject current = null;

        EObject this_Entity_0 = null;

        EObject this_ValueObject_1 = null;

        EObject this_Event_2 = null;



        	enterRule();

        try {
            // InternalContextMappingDSL.g:7818:2: ( (this_Entity_0= ruleEntity | this_ValueObject_1= ruleValueObject | this_Event_2= ruleEvent ) )
            // InternalContextMappingDSL.g:7819:2: (this_Entity_0= ruleEntity | this_ValueObject_1= ruleValueObject | this_Event_2= ruleEvent )
            {
            // InternalContextMappingDSL.g:7819:2: (this_Entity_0= ruleEntity | this_ValueObject_1= ruleValueObject | this_Event_2= ruleEvent )
            int alt201=3;
            switch ( input.LA(1) ) {
            case RULE_SL_COMMENT:
                {
                switch ( input.LA(2) ) {
                case RULE_STRING:
                    {
                    switch ( input.LA(3) ) {
                    case 105:
                        {
                        switch ( input.LA(4) ) {
                        case 106:
                            {
                            alt201=1;
                            }
                            break;
                        case 124:
                        case 125:
                            {
                            alt201=3;
                            }
                            break;
                        case 121:
                            {
                            alt201=2;
                            }
                            break;
                        default:
                            NoViableAltException nvae =
                                new NoViableAltException("", 201, 3, input);

                            throw nvae;
                        }

                        }
                        break;
                    case 106:
                        {
                        alt201=1;
                        }
                        break;
                    case 124:
                    case 125:
                        {
                        alt201=3;
                        }
                        break;
                    case 121:
                        {
                        alt201=2;
                        }
                        break;
                    default:
                        NoViableAltException nvae =
                            new NoViableAltException("", 201, 2, input);

                        throw nvae;
                    }

                    }
                    break;
                case 105:
                    {
                    switch ( input.LA(3) ) {
                    case 106:
                        {
                        alt201=1;
                        }
                        break;
                    case 124:
                    case 125:
                        {
                        alt201=3;
                        }
                        break;
                    case 121:
                        {
                        alt201=2;
                        }
                        break;
                    default:
                        NoViableAltException nvae =
                            new NoViableAltException("", 201, 3, input);

                        throw nvae;
                    }

                    }
                    break;
                case 124:
                case 125:
                    {
                    alt201=3;
                    }
                    break;
                case 121:
                    {
                    alt201=2;
                    }
                    break;
                case 106:
                    {
                    alt201=1;
                    }
                    break;
                default:
                    NoViableAltException nvae =
                        new NoViableAltException("", 201, 1, input);

                    throw nvae;
                }

                }
                break;
            case RULE_STRING:
                {
                switch ( input.LA(2) ) {
                case 105:
                    {
                    switch ( input.LA(3) ) {
                    case 106:
                        {
                        alt201=1;
                        }
                        break;
                    case 124:
                    case 125:
                        {
                        alt201=3;
                        }
                        break;
                    case 121:
                        {
                        alt201=2;
                        }
                        break;
                    default:
                        NoViableAltException nvae =
                            new NoViableAltException("", 201, 3, input);

                        throw nvae;
                    }

                    }
                    break;
                case 106:
                    {
                    alt201=1;
                    }
                    break;
                case 124:
                case 125:
                    {
                    alt201=3;
                    }
                    break;
                case 121:
                    {
                    alt201=2;
                    }
                    break;
                default:
                    NoViableAltException nvae =
                        new NoViableAltException("", 201, 2, input);

                    throw nvae;
                }

                }
                break;
            case 105:
                {
                switch ( input.LA(2) ) {
                case 106:
                    {
                    alt201=1;
                    }
                    break;
                case 124:
                case 125:
                    {
                    alt201=3;
                    }
                    break;
                case 121:
                    {
                    alt201=2;
                    }
                    break;
                default:
                    NoViableAltException nvae =
                        new NoViableAltException("", 201, 3, input);

                    throw nvae;
                }

                }
                break;
            case 106:
                {
                alt201=1;
                }
                break;
            case 121:
                {
                alt201=2;
                }
                break;
            case 124:
            case 125:
                {
                alt201=3;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("", 201, 0, input);

                throw nvae;
            }

            switch (alt201) {
                case 1 :
                    // InternalContextMappingDSL.g:7820:3: this_Entity_0= ruleEntity
                    {

                    			newCompositeNode(grammarAccess.getDomainObjectAccess().getEntityParserRuleCall_0());
                    		
                    pushFollow(FOLLOW_2);
                    this_Entity_0=ruleEntity();

                    state._fsp--;


                    			current = this_Entity_0;
                    			afterParserOrEnumRuleCall();
                    		

                    }
                    break;
                case 2 :
                    // InternalContextMappingDSL.g:7829:3: this_ValueObject_1= ruleValueObject
                    {

                    			newCompositeNode(grammarAccess.getDomainObjectAccess().getValueObjectParserRuleCall_1());
                    		
                    pushFollow(FOLLOW_2);
                    this_ValueObject_1=ruleValueObject();

                    state._fsp--;


                    			current = this_ValueObject_1;
                    			afterParserOrEnumRuleCall();
                    		

                    }
                    break;
                case 3 :
                    // InternalContextMappingDSL.g:7838:3: this_Event_2= ruleEvent
                    {

                    			newCompositeNode(grammarAccess.getDomainObjectAccess().getEventParserRuleCall_2());
                    		
                    pushFollow(FOLLOW_2);
                    this_Event_2=ruleEvent();

                    state._fsp--;


                    			current = this_Event_2;
                    			afterParserOrEnumRuleCall();
                    		

                    }
                    break;

            }


            }


            	leaveRule();

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleDomainObject"


    // $ANTLR start "entryRuleEntity"
    // InternalContextMappingDSL.g:7850:1: entryRuleEntity returns [EObject current=null] : iv_ruleEntity= ruleEntity EOF ;
    public final EObject entryRuleEntity() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleEntity = null;


        try {
            // InternalContextMappingDSL.g:7850:47: (iv_ruleEntity= ruleEntity EOF )
            // InternalContextMappingDSL.g:7851:2: iv_ruleEntity= ruleEntity EOF
            {
             newCompositeNode(grammarAccess.getEntityRule()); 
            pushFollow(FOLLOW_1);
            iv_ruleEntity=ruleEntity();

            state._fsp--;

             current =iv_ruleEntity; 
            match(input,EOF,FOLLOW_2); 

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleEntity"


    // $ANTLR start "ruleEntity"
    // InternalContextMappingDSL.g:7857:1: ruleEntity returns [EObject current=null] : ( ( (lv_comment_0_0= RULE_SL_COMMENT ) )? ( (lv_doc_1_0= RULE_STRING ) )? ( (lv_abstract_2_0= 'abstract' ) )? otherlv_3= 'Entity' ( (lv_name_4_0= RULE_ID ) ) (otherlv_5= 'extends' ( (otherlv_6= '@' ( (otherlv_7= RULE_ID ) ) ) | ( (lv_extendsName_8_0= ruleJavaIdentifier ) ) ) )? (otherlv_9= 'with' (otherlv_10= '@' )? ( (otherlv_11= RULE_ID ) ) )* (otherlv_12= '{' (otherlv_13= 'package' otherlv_14= '=' ( (lv_package_15_0= ruleJavaIdentifier ) ) )? ( ( ( ( ({...}? => ( ({...}? => ( ( ( (lv_notOptimisticLocking_17_0= RULE_NOT ) ) otherlv_18= 'optimisticLocking' ) | otherlv_19= 'optimisticLocking' ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notAuditable_20_0= RULE_NOT ) ) otherlv_21= 'auditable' ) | otherlv_22= 'auditable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_cache_23_0= 'cache' ) ) | (this_NOT_24= RULE_NOT otherlv_25= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_26_0= 'gap' ) ) | ( (lv_noGapClass_27_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_28_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'hint' otherlv_30= '=' ( (lv_hint_31_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'databaseTable' otherlv_33= '=' ( (lv_databaseTable_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'discriminatorValue' otherlv_36= '=' ( (lv_discriminatorValue_37_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'discriminatorColumn' otherlv_39= '=' ( (lv_discriminatorColumn_40_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'discriminatorType' otherlv_42= '=' ( (lv_discriminatorType_43_0= ruleDiscriminatorType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_44= 'discriminatorLength' otherlv_45= '=' ( (lv_discriminatorLength_46_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_47= 'inheritanceType' otherlv_48= '=' ( (lv_inheritanceType_49_0= ruleInheritanceType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_50= 'validate' otherlv_51= '=' ( (lv_validate_52_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_aggregateRoot_53_0= 'aggregateRoot' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_54= 'belongsTo' ( (otherlv_55= '@' )? ( (otherlv_56= RULE_ID ) ) ) ) ) ) ) )* ) ) ) ( ( (lv_attributes_57_0= ruleAttribute ) ) | ( (lv_references_58_0= ruleReference ) ) | ( (lv_operations_59_0= ruleDomainObjectOperation ) ) )* ( (lv_repository_60_0= ruleRepository ) )? otherlv_61= '}' )? ) ;
    public final EObject ruleEntity() throws RecognitionException {
        EObject current = null;

        Token lv_comment_0_0=null;
        Token lv_doc_1_0=null;
        Token lv_abstract_2_0=null;
        Token otherlv_3=null;
        Token lv_name_4_0=null;
        Token otherlv_5=null;
        Token otherlv_6=null;
        Token otherlv_7=null;
        Token otherlv_9=null;
        Token otherlv_10=null;
        Token otherlv_11=null;
        Token otherlv_12=null;
        Token otherlv_13=null;
        Token otherlv_14=null;
        Token lv_notOptimisticLocking_17_0=null;
        Token otherlv_18=null;
        Token otherlv_19=null;
        Token lv_notAuditable_20_0=null;
        Token otherlv_21=null;
        Token otherlv_22=null;
        Token lv_cache_23_0=null;
        Token this_NOT_24=null;
        Token otherlv_25=null;
        Token lv_gapClass_26_0=null;
        Token lv_noGapClass_27_0=null;
        Token lv_scaffold_28_0=null;
        Token otherlv_29=null;
        Token otherlv_30=null;
        Token lv_hint_31_0=null;
        Token otherlv_32=null;
        Token otherlv_33=null;
        Token lv_databaseTable_34_0=null;
        Token otherlv_35=null;
        Token otherlv_36=null;
        Token lv_discriminatorValue_37_0=null;
        Token otherlv_38=null;
        Token otherlv_39=null;
        Token lv_discriminatorColumn_40_0=null;
        Token otherlv_41=null;
        Token otherlv_42=null;
        Token otherlv_44=null;
        Token otherlv_45=null;
        Token lv_discriminatorLength_46_0=null;
        Token otherlv_47=null;
        Token otherlv_48=null;
        Token otherlv_50=null;
        Token otherlv_51=null;
        Token lv_validate_52_0=null;
        Token lv_aggregateRoot_53_0=null;
        Token otherlv_54=null;
        Token otherlv_55=null;
        Token otherlv_56=null;
        Token otherlv_61=null;
        AntlrDatatypeRuleToken lv_extendsName_8_0 = null;

        AntlrDatatypeRuleToken lv_package_15_0 = null;

        Enumerator lv_discriminatorType_43_0 = null;

        Enumerator lv_inheritanceType_49_0 = null;

        EObject lv_attributes_57_0 = null;

        EObject lv_references_58_0 = null;

        EObject lv_operations_59_0 = null;

        EObject lv_repository_60_0 = null;



        	enterRule();

        try {
            // InternalContextMappingDSL.g:7863:2: ( ( ( (lv_comment_0_0= RULE_SL_COMMENT ) )? ( (lv_doc_1_0= RULE_STRING ) )? ( (lv_abstract_2_0= 'abstract' ) )? otherlv_3= 'Entity' ( (lv_name_4_0= RULE_ID ) ) (otherlv_5= 'extends' ( (otherlv_6= '@' ( (otherlv_7= RULE_ID ) ) ) | ( (lv_extendsName_8_0= ruleJavaIdentifier ) ) ) )? (otherlv_9= 'with' (otherlv_10= '@' )? ( (otherlv_11= RULE_ID ) ) )* (otherlv_12= '{' (otherlv_13= 'package' otherlv_14= '=' ( (lv_package_15_0= ruleJavaIdentifier ) ) )? ( ( ( ( ({...}? => ( ({...}? => ( ( ( (lv_notOptimisticLocking_17_0= RULE_NOT ) ) otherlv_18= 'optimisticLocking' ) | otherlv_19= 'optimisticLocking' ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notAuditable_20_0= RULE_NOT ) ) otherlv_21= 'auditable' ) | otherlv_22= 'auditable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_cache_23_0= 'cache' ) ) | (this_NOT_24= RULE_NOT otherlv_25= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_26_0= 'gap' ) ) | ( (lv_noGapClass_27_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_28_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'hint' otherlv_30= '=' ( (lv_hint_31_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'databaseTable' otherlv_33= '=' ( (lv_databaseTable_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'discriminatorValue' otherlv_36= '=' ( (lv_discriminatorValue_37_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'discriminatorColumn' otherlv_39= '=' ( (lv_discriminatorColumn_40_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'discriminatorType' otherlv_42= '=' ( (lv_discriminatorType_43_0= ruleDiscriminatorType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_44= 'discriminatorLength' otherlv_45= '=' ( (lv_discriminatorLength_46_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_47= 'inheritanceType' otherlv_48= '=' ( (lv_inheritanceType_49_0= ruleInheritanceType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_50= 'validate' otherlv_51= '=' ( (lv_validate_52_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_aggregateRoot_53_0= 'aggregateRoot' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_54= 'belongsTo' ( (otherlv_55= '@' )? ( (otherlv_56= RULE_ID ) ) ) ) ) ) ) )* ) ) ) ( ( (lv_attributes_57_0= ruleAttribute ) ) | ( (lv_references_58_0= ruleReference ) ) | ( (lv_operations_59_0= ruleDomainObjectOperation ) ) )* ( (lv_repository_60_0= ruleRepository ) )? otherlv_61= '}' )? ) )
            // InternalContextMappingDSL.g:7864:2: ( ( (lv_comment_0_0= RULE_SL_COMMENT ) )? ( (lv_doc_1_0= RULE_STRING ) )? ( (lv_abstract_2_0= 'abstract' ) )? otherlv_3= 'Entity' ( (lv_name_4_0= RULE_ID ) ) (otherlv_5= 'extends' ( (otherlv_6= '@' ( (otherlv_7= RULE_ID ) ) ) | ( (lv_extendsName_8_0= ruleJavaIdentifier ) ) ) )? (otherlv_9= 'with' (otherlv_10= '@' )? ( (otherlv_11= RULE_ID ) ) )* (otherlv_12= '{' (otherlv_13= 'package' otherlv_14= '=' ( (lv_package_15_0= ruleJavaIdentifier ) ) )? ( ( ( ( ({...}? => ( ({...}? => ( ( ( (lv_notOptimisticLocking_17_0= RULE_NOT ) ) otherlv_18= 'optimisticLocking' ) | otherlv_19= 'optimisticLocking' ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notAuditable_20_0= RULE_NOT ) ) otherlv_21= 'auditable' ) | otherlv_22= 'auditable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_cache_23_0= 'cache' ) ) | (this_NOT_24= RULE_NOT otherlv_25= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_26_0= 'gap' ) ) | ( (lv_noGapClass_27_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_28_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'hint' otherlv_30= '=' ( (lv_hint_31_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'databaseTable' otherlv_33= '=' ( (lv_databaseTable_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'discriminatorValue' otherlv_36= '=' ( (lv_discriminatorValue_37_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'discriminatorColumn' otherlv_39= '=' ( (lv_discriminatorColumn_40_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'discriminatorType' otherlv_42= '=' ( (lv_discriminatorType_43_0= ruleDiscriminatorType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_44= 'discriminatorLength' otherlv_45= '=' ( (lv_discriminatorLength_46_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_47= 'inheritanceType' otherlv_48= '=' ( (lv_inheritanceType_49_0= ruleInheritanceType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_50= 'validate' otherlv_51= '=' ( (lv_validate_52_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_aggregateRoot_53_0= 'aggregateRoot' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_54= 'belongsTo' ( (otherlv_55= '@' )? ( (otherlv_56= RULE_ID ) ) ) ) ) ) ) )* ) ) ) ( ( (lv_attributes_57_0= ruleAttribute ) ) | ( (lv_references_58_0= ruleReference ) ) | ( (lv_operations_59_0= ruleDomainObjectOperation ) ) )* ( (lv_repository_60_0= ruleRepository ) )? otherlv_61= '}' )? )
            {
            // InternalContextMappingDSL.g:7864:2: ( ( (lv_comment_0_0= RULE_SL_COMMENT ) )? ( (lv_doc_1_0= RULE_STRING ) )? ( (lv_abstract_2_0= 'abstract' ) )? otherlv_3= 'Entity' ( (lv_name_4_0= RULE_ID ) ) (otherlv_5= 'extends' ( (otherlv_6= '@' ( (otherlv_7= RULE_ID ) ) ) | ( (lv_extendsName_8_0= ruleJavaIdentifier ) ) ) )? (otherlv_9= 'with' (otherlv_10= '@' )? ( (otherlv_11= RULE_ID ) ) )* (otherlv_12= '{' (otherlv_13= 'package' otherlv_14= '=' ( (lv_package_15_0= ruleJavaIdentifier ) ) )? ( ( ( ( ({...}? => ( ({...}? => ( ( ( (lv_notOptimisticLocking_17_0= RULE_NOT ) ) otherlv_18= 'optimisticLocking' ) | otherlv_19= 'optimisticLocking' ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notAuditable_20_0= RULE_NOT ) ) otherlv_21= 'auditable' ) | otherlv_22= 'auditable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_cache_23_0= 'cache' ) ) | (this_NOT_24= RULE_NOT otherlv_25= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_26_0= 'gap' ) ) | ( (lv_noGapClass_27_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_28_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'hint' otherlv_30= '=' ( (lv_hint_31_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'databaseTable' otherlv_33= '=' ( (lv_databaseTable_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'discriminatorValue' otherlv_36= '=' ( (lv_discriminatorValue_37_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'discriminatorColumn' otherlv_39= '=' ( (lv_discriminatorColumn_40_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'discriminatorType' otherlv_42= '=' ( (lv_discriminatorType_43_0= ruleDiscriminatorType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_44= 'discriminatorLength' otherlv_45= '=' ( (lv_discriminatorLength_46_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_47= 'inheritanceType' otherlv_48= '=' ( (lv_inheritanceType_49_0= ruleInheritanceType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_50= 'validate' otherlv_51= '=' ( (lv_validate_52_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_aggregateRoot_53_0= 'aggregateRoot' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_54= 'belongsTo' ( (otherlv_55= '@' )? ( (otherlv_56= RULE_ID ) ) ) ) ) ) ) )* ) ) ) ( ( (lv_attributes_57_0= ruleAttribute ) ) | ( (lv_references_58_0= ruleReference ) ) | ( (lv_operations_59_0= ruleDomainObjectOperation ) ) )* ( (lv_repository_60_0= ruleRepository ) )? otherlv_61= '}' )? )
            // InternalContextMappingDSL.g:7865:3: ( (lv_comment_0_0= RULE_SL_COMMENT ) )? ( (lv_doc_1_0= RULE_STRING ) )? ( (lv_abstract_2_0= 'abstract' ) )? otherlv_3= 'Entity' ( (lv_name_4_0= RULE_ID ) ) (otherlv_5= 'extends' ( (otherlv_6= '@' ( (otherlv_7= RULE_ID ) ) ) | ( (lv_extendsName_8_0= ruleJavaIdentifier ) ) ) )? (otherlv_9= 'with' (otherlv_10= '@' )? ( (otherlv_11= RULE_ID ) ) )* (otherlv_12= '{' (otherlv_13= 'package' otherlv_14= '=' ( (lv_package_15_0= ruleJavaIdentifier ) ) )? ( ( ( ( ({...}? => ( ({...}? => ( ( ( (lv_notOptimisticLocking_17_0= RULE_NOT ) ) otherlv_18= 'optimisticLocking' ) | otherlv_19= 'optimisticLocking' ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notAuditable_20_0= RULE_NOT ) ) otherlv_21= 'auditable' ) | otherlv_22= 'auditable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_cache_23_0= 'cache' ) ) | (this_NOT_24= RULE_NOT otherlv_25= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_26_0= 'gap' ) ) | ( (lv_noGapClass_27_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_28_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'hint' otherlv_30= '=' ( (lv_hint_31_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'databaseTable' otherlv_33= '=' ( (lv_databaseTable_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'discriminatorValue' otherlv_36= '=' ( (lv_discriminatorValue_37_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'discriminatorColumn' otherlv_39= '=' ( (lv_discriminatorColumn_40_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'discriminatorType' otherlv_42= '=' ( (lv_discriminatorType_43_0= ruleDiscriminatorType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_44= 'discriminatorLength' otherlv_45= '=' ( (lv_discriminatorLength_46_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_47= 'inheritanceType' otherlv_48= '=' ( (lv_inheritanceType_49_0= ruleInheritanceType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_50= 'validate' otherlv_51= '=' ( (lv_validate_52_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_aggregateRoot_53_0= 'aggregateRoot' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_54= 'belongsTo' ( (otherlv_55= '@' )? ( (otherlv_56= RULE_ID ) ) ) ) ) ) ) )* ) ) ) ( ( (lv_attributes_57_0= ruleAttribute ) ) | ( (lv_references_58_0= ruleReference ) ) | ( (lv_operations_59_0= ruleDomainObjectOperation ) ) )* ( (lv_repository_60_0= ruleRepository ) )? otherlv_61= '}' )?
            {
            // InternalContextMappingDSL.g:7865:3: ( (lv_comment_0_0= RULE_SL_COMMENT ) )?
            int alt202=2;
            int LA202_0 = input.LA(1);

            if ( (LA202_0==RULE_SL_COMMENT) ) {
                alt202=1;
            }
            switch (alt202) {
                case 1 :
                    // InternalContextMappingDSL.g:7866:4: (lv_comment_0_0= RULE_SL_COMMENT )
                    {
                    // InternalContextMappingDSL.g:7866:4: (lv_comment_0_0= RULE_SL_COMMENT )
                    // InternalContextMappingDSL.g:7867:5: lv_comment_0_0= RULE_SL_COMMENT
                    {
                    lv_comment_0_0=(Token)match(input,RULE_SL_COMMENT,FOLLOW_121); 

                    					newLeafNode(lv_comment_0_0, grammarAccess.getEntityAccess().getCommentSL_COMMENTTerminalRuleCall_0_0());
                    				

                    					if (current==null) {
                    						current = createModelElement(grammarAccess.getEntityRule());
                    					}
                    					setWithLastConsumed(
                    						current,
                    						"comment",
                    						lv_comment_0_0,
                    						"org.eclipse.xtext.common.Terminals.SL_COMMENT");
                    				

                    }


                    }
                    break;

            }

            // InternalContextMappingDSL.g:7883:3: ( (lv_doc_1_0= RULE_STRING ) )?
            int alt203=2;
            int LA203_0 = input.LA(1);

            if ( (LA203_0==RULE_STRING) ) {
                alt203=1;
            }
            switch (alt203) {
                case 1 :
                    // InternalContextMappingDSL.g:7884:4: (lv_doc_1_0= RULE_STRING )
                    {
                    // InternalContextMappingDSL.g:7884:4: (lv_doc_1_0= RULE_STRING )
                    // InternalContextMappingDSL.g:7885:5: lv_doc_1_0= RULE_STRING
                    {
                    lv_doc_1_0=(Token)match(input,RULE_STRING,FOLLOW_122); 

                    					newLeafNode(lv_doc_1_0, grammarAccess.getEntityAccess().getDocSTRINGTerminalRuleCall_1_0());
                    				

                    					if (current==null) {
                    						current = createModelElement(grammarAccess.getEntityRule());
                    					}
                    					setWithLastConsumed(
                    						current,
                    						"doc",
                    						lv_doc_1_0,
                    						"org.eclipse.xtext.common.Terminals.STRING");
                    				

                    }


                    }
                    break;

            }

            // InternalContextMappingDSL.g:7901:3: ( (lv_abstract_2_0= 'abstract' ) )?
            int alt204=2;
            int LA204_0 = input.LA(1);

            if ( (LA204_0==105) ) {
                alt204=1;
            }
            switch (alt204) {
                case 1 :
                    // InternalContextMappingDSL.g:7902:4: (lv_abstract_2_0= 'abstract' )
                    {
                    // InternalContextMappingDSL.g:7902:4: (lv_abstract_2_0= 'abstract' )
                    // InternalContextMappingDSL.g:7903:5: lv_abstract_2_0= 'abstract'
                    {
                    lv_abstract_2_0=(Token)match(input,105,FOLLOW_123); 

                    					newLeafNode(lv_abstract_2_0, grammarAccess.getEntityAccess().getAbstractAbstractKeyword_2_0());
                    				

                    					if (current==null) {
                    						current = createModelElement(grammarAccess.getEntityRule());
                    					}
                    					setWithLastConsumed(current, "abstract", true, "abstract");
                    				

                    }


                    }
                    break;

            }

            otherlv_3=(Token)match(input,106,FOLLOW_10); 

            			newLeafNode(otherlv_3, grammarAccess.getEntityAccess().getEntityKeyword_3());
            		
            // InternalContextMappingDSL.g:7919:3: ( (lv_name_4_0= RULE_ID ) )
            // InternalContextMappingDSL.g:7920:4: (lv_name_4_0= RULE_ID )
            {
            // InternalContextMappingDSL.g:7920:4: (lv_name_4_0= RULE_ID )
            // InternalContextMappingDSL.g:7921:5: lv_name_4_0= RULE_ID
            {
            lv_name_4_0=(Token)match(input,RULE_ID,FOLLOW_124); 

            					newLeafNode(lv_name_4_0, grammarAccess.getEntityAccess().getNameIDTerminalRuleCall_4_0());
            				

            					if (current==null) {
            						current = createModelElement(grammarAccess.getEntityRule());
            					}
            					setWithLastConsumed(
            						current,
            						"name",
            						lv_name_4_0,
            						"org.eclipse.xtext.common.Terminals.ID");
            				

            }


            }

            // InternalContextMappingDSL.g:7937:3: (otherlv_5= 'extends' ( (otherlv_6= '@' ( (otherlv_7= RULE_ID ) ) ) | ( (lv_extendsName_8_0= ruleJavaIdentifier ) ) ) )?
            int alt206=2;
            int LA206_0 = input.LA(1);

            if ( (LA206_0==107) ) {
                alt206=1;
            }
            switch (alt206) {
                case 1 :
                    // InternalContextMappingDSL.g:7938:4: otherlv_5= 'extends' ( (otherlv_6= '@' ( (otherlv_7= RULE_ID ) ) ) | ( (lv_extendsName_8_0= ruleJavaIdentifier ) ) )
                    {
                    otherlv_5=(Token)match(input,107,FOLLOW_96); 

                    				newLeafNode(otherlv_5, grammarAccess.getEntityAccess().getExtendsKeyword_5_0());
                    			
                    // InternalContextMappingDSL.g:7942:4: ( (otherlv_6= '@' ( (otherlv_7= RULE_ID ) ) ) | ( (lv_extendsName_8_0= ruleJavaIdentifier ) ) )
                    int alt205=2;
                    int LA205_0 = input.LA(1);

                    if ( (LA205_0==79) ) {
                        alt205=1;
                    }
                    else if ( (LA205_0==RULE_ID) ) {
                        alt205=2;
                    }
                    else {
                        NoViableAltException nvae =
                            new NoViableAltException("", 205, 0, input);

                        throw nvae;
                    }
                    switch (alt205) {
                        case 1 :
                            // InternalContextMappingDSL.g:7943:5: (otherlv_6= '@' ( (otherlv_7= RULE_ID ) ) )
                            {
                            // InternalContextMappingDSL.g:7943:5: (otherlv_6= '@' ( (otherlv_7= RULE_ID ) ) )
                            // InternalContextMappingDSL.g:7944:6: otherlv_6= '@' ( (otherlv_7= RULE_ID ) )
                            {
                            otherlv_6=(Token)match(input,79,FOLLOW_10); 

                            						newLeafNode(otherlv_6, grammarAccess.getEntityAccess().getCommercialAtKeyword_5_1_0_0());
                            					
                            // InternalContextMappingDSL.g:7948:6: ( (otherlv_7= RULE_ID ) )
                            // InternalContextMappingDSL.g:7949:7: (otherlv_7= RULE_ID )
                            {
                            // InternalContextMappingDSL.g:7949:7: (otherlv_7= RULE_ID )
                            // InternalContextMappingDSL.g:7950:8: otherlv_7= RULE_ID
                            {

                            								if (current==null) {
                            									current = createModelElement(grammarAccess.getEntityRule());
                            								}
                            							
                            otherlv_7=(Token)match(input,RULE_ID,FOLLOW_125); 

                            								newLeafNode(otherlv_7, grammarAccess.getEntityAccess().getExtendsEntityCrossReference_5_1_0_1_0());
                            							

                            }


                            }


                            }


                            }
                            break;
                        case 2 :
                            // InternalContextMappingDSL.g:7963:5: ( (lv_extendsName_8_0= ruleJavaIdentifier ) )
                            {
                            // InternalContextMappingDSL.g:7963:5: ( (lv_extendsName_8_0= ruleJavaIdentifier ) )
                            // InternalContextMappingDSL.g:7964:6: (lv_extendsName_8_0= ruleJavaIdentifier )
                            {
                            // InternalContextMappingDSL.g:7964:6: (lv_extendsName_8_0= ruleJavaIdentifier )
                            // InternalContextMappingDSL.g:7965:7: lv_extendsName_8_0= ruleJavaIdentifier
                            {

                            							newCompositeNode(grammarAccess.getEntityAccess().getExtendsNameJavaIdentifierParserRuleCall_5_1_1_0());
                            						
                            pushFollow(FOLLOW_125);
                            lv_extendsName_8_0=ruleJavaIdentifier();

                            state._fsp--;


                            							if (current==null) {
                            								current = createModelElementForParent(grammarAccess.getEntityRule());
                            							}
                            							set(
                            								current,
                            								"extendsName",
                            								lv_extendsName_8_0,
                            								"org.contextmapper.tactic.dsl.TacticDDDLanguage.JavaIdentifier");
                            							afterParserOrEnumRuleCall();
                            						

                            }


                            }


                            }
                            break;

                    }


                    }
                    break;

            }

            // InternalContextMappingDSL.g:7984:3: (otherlv_9= 'with' (otherlv_10= '@' )? ( (otherlv_11= RULE_ID ) ) )*
            loop208:
            do {
                int alt208=2;
                int LA208_0 = input.LA(1);

                if ( (LA208_0==108) ) {
                    alt208=1;
                }


                switch (alt208) {
            	case 1 :
            	    // InternalContextMappingDSL.g:7985:4: otherlv_9= 'with' (otherlv_10= '@' )? ( (otherlv_11= RULE_ID ) )
            	    {
            	    otherlv_9=(Token)match(input,108,FOLLOW_96); 

            	    				newLeafNode(otherlv_9, grammarAccess.getEntityAccess().getWithKeyword_6_0());
            	    			
            	    // InternalContextMappingDSL.g:7989:4: (otherlv_10= '@' )?
            	    int alt207=2;
            	    int LA207_0 = input.LA(1);

            	    if ( (LA207_0==79) ) {
            	        alt207=1;
            	    }
            	    switch (alt207) {
            	        case 1 :
            	            // InternalContextMappingDSL.g:7990:5: otherlv_10= '@'
            	            {
            	            otherlv_10=(Token)match(input,79,FOLLOW_10); 

            	            					newLeafNode(otherlv_10, grammarAccess.getEntityAccess().getCommercialAtKeyword_6_1());
            	            				

            	            }
            	            break;

            	    }

            	    // InternalContextMappingDSL.g:7995:4: ( (otherlv_11= RULE_ID ) )
            	    // InternalContextMappingDSL.g:7996:5: (otherlv_11= RULE_ID )
            	    {
            	    // InternalContextMappingDSL.g:7996:5: (otherlv_11= RULE_ID )
            	    // InternalContextMappingDSL.g:7997:6: otherlv_11= RULE_ID
            	    {

            	    						if (current==null) {
            	    							current = createModelElement(grammarAccess.getEntityRule());
            	    						}
            	    					
            	    otherlv_11=(Token)match(input,RULE_ID,FOLLOW_125); 

            	    						newLeafNode(otherlv_11, grammarAccess.getEntityAccess().getTraitsTraitCrossReference_6_2_0());
            	    					

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop208;
                }
            } while (true);

            // InternalContextMappingDSL.g:8009:3: (otherlv_12= '{' (otherlv_13= 'package' otherlv_14= '=' ( (lv_package_15_0= ruleJavaIdentifier ) ) )? ( ( ( ( ({...}? => ( ({...}? => ( ( ( (lv_notOptimisticLocking_17_0= RULE_NOT ) ) otherlv_18= 'optimisticLocking' ) | otherlv_19= 'optimisticLocking' ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notAuditable_20_0= RULE_NOT ) ) otherlv_21= 'auditable' ) | otherlv_22= 'auditable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_cache_23_0= 'cache' ) ) | (this_NOT_24= RULE_NOT otherlv_25= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_26_0= 'gap' ) ) | ( (lv_noGapClass_27_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_28_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'hint' otherlv_30= '=' ( (lv_hint_31_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'databaseTable' otherlv_33= '=' ( (lv_databaseTable_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'discriminatorValue' otherlv_36= '=' ( (lv_discriminatorValue_37_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'discriminatorColumn' otherlv_39= '=' ( (lv_discriminatorColumn_40_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'discriminatorType' otherlv_42= '=' ( (lv_discriminatorType_43_0= ruleDiscriminatorType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_44= 'discriminatorLength' otherlv_45= '=' ( (lv_discriminatorLength_46_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_47= 'inheritanceType' otherlv_48= '=' ( (lv_inheritanceType_49_0= ruleInheritanceType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_50= 'validate' otherlv_51= '=' ( (lv_validate_52_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_aggregateRoot_53_0= 'aggregateRoot' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_54= 'belongsTo' ( (otherlv_55= '@' )? ( (otherlv_56= RULE_ID ) ) ) ) ) ) ) )* ) ) ) ( ( (lv_attributes_57_0= ruleAttribute ) ) | ( (lv_references_58_0= ruleReference ) ) | ( (lv_operations_59_0= ruleDomainObjectOperation ) ) )* ( (lv_repository_60_0= ruleRepository ) )? otherlv_61= '}' )?
            int alt218=2;
            int LA218_0 = input.LA(1);

            if ( (LA218_0==RULE_OPEN) ) {
                alt218=1;
            }
            switch (alt218) {
                case 1 :
                    // InternalContextMappingDSL.g:8010:4: otherlv_12= '{' (otherlv_13= 'package' otherlv_14= '=' ( (lv_package_15_0= ruleJavaIdentifier ) ) )? ( ( ( ( ({...}? => ( ({...}? => ( ( ( (lv_notOptimisticLocking_17_0= RULE_NOT ) ) otherlv_18= 'optimisticLocking' ) | otherlv_19= 'optimisticLocking' ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notAuditable_20_0= RULE_NOT ) ) otherlv_21= 'auditable' ) | otherlv_22= 'auditable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_cache_23_0= 'cache' ) ) | (this_NOT_24= RULE_NOT otherlv_25= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_26_0= 'gap' ) ) | ( (lv_noGapClass_27_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_28_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'hint' otherlv_30= '=' ( (lv_hint_31_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'databaseTable' otherlv_33= '=' ( (lv_databaseTable_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'discriminatorValue' otherlv_36= '=' ( (lv_discriminatorValue_37_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'discriminatorColumn' otherlv_39= '=' ( (lv_discriminatorColumn_40_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'discriminatorType' otherlv_42= '=' ( (lv_discriminatorType_43_0= ruleDiscriminatorType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_44= 'discriminatorLength' otherlv_45= '=' ( (lv_discriminatorLength_46_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_47= 'inheritanceType' otherlv_48= '=' ( (lv_inheritanceType_49_0= ruleInheritanceType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_50= 'validate' otherlv_51= '=' ( (lv_validate_52_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_aggregateRoot_53_0= 'aggregateRoot' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_54= 'belongsTo' ( (otherlv_55= '@' )? ( (otherlv_56= RULE_ID ) ) ) ) ) ) ) )* ) ) ) ( ( (lv_attributes_57_0= ruleAttribute ) ) | ( (lv_references_58_0= ruleReference ) ) | ( (lv_operations_59_0= ruleDomainObjectOperation ) ) )* ( (lv_repository_60_0= ruleRepository ) )? otherlv_61= '}'
                    {
                    otherlv_12=(Token)match(input,RULE_OPEN,FOLLOW_126); 

                    				newLeafNode(otherlv_12, grammarAccess.getEntityAccess().getLeftCurlyBracketKeyword_7_0());
                    			
                    // InternalContextMappingDSL.g:8014:4: (otherlv_13= 'package' otherlv_14= '=' ( (lv_package_15_0= ruleJavaIdentifier ) ) )?
                    int alt209=2;
                    int LA209_0 = input.LA(1);

                    if ( (LA209_0==109) ) {
                        int LA209_1 = input.LA(2);

                        if ( (LA209_1==21) ) {
                            alt209=1;
                        }
                    }
                    switch (alt209) {
                        case 1 :
                            // InternalContextMappingDSL.g:8015:5: otherlv_13= 'package' otherlv_14= '=' ( (lv_package_15_0= ruleJavaIdentifier ) )
                            {
                            otherlv_13=(Token)match(input,109,FOLLOW_81); 

                            					newLeafNode(otherlv_13, grammarAccess.getEntityAccess().getPackageKeyword_7_1_0());
                            				
                            otherlv_14=(Token)match(input,21,FOLLOW_10); 

                            					newLeafNode(otherlv_14, grammarAccess.getEntityAccess().getEqualsSignKeyword_7_1_1());
                            				
                            // InternalContextMappingDSL.g:8023:5: ( (lv_package_15_0= ruleJavaIdentifier ) )
                            // InternalContextMappingDSL.g:8024:6: (lv_package_15_0= ruleJavaIdentifier )
                            {
                            // InternalContextMappingDSL.g:8024:6: (lv_package_15_0= ruleJavaIdentifier )
                            // InternalContextMappingDSL.g:8025:7: lv_package_15_0= ruleJavaIdentifier
                            {

                            							newCompositeNode(grammarAccess.getEntityAccess().getPackageJavaIdentifierParserRuleCall_7_1_2_0());
                            						
                            pushFollow(FOLLOW_126);
                            lv_package_15_0=ruleJavaIdentifier();

                            state._fsp--;


                            							if (current==null) {
                            								current = createModelElementForParent(grammarAccess.getEntityRule());
                            							}
                            							set(
                            								current,
                            								"package",
                            								lv_package_15_0,
                            								"org.contextmapper.tactic.dsl.TacticDDDLanguage.JavaIdentifier");
                            							afterParserOrEnumRuleCall();
                            						

                            }


                            }


                            }
                            break;

                    }

                    // InternalContextMappingDSL.g:8043:4: ( ( ( ( ({...}? => ( ({...}? => ( ( ( (lv_notOptimisticLocking_17_0= RULE_NOT ) ) otherlv_18= 'optimisticLocking' ) | otherlv_19= 'optimisticLocking' ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notAuditable_20_0= RULE_NOT ) ) otherlv_21= 'auditable' ) | otherlv_22= 'auditable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_cache_23_0= 'cache' ) ) | (this_NOT_24= RULE_NOT otherlv_25= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_26_0= 'gap' ) ) | ( (lv_noGapClass_27_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_28_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'hint' otherlv_30= '=' ( (lv_hint_31_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'databaseTable' otherlv_33= '=' ( (lv_databaseTable_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'discriminatorValue' otherlv_36= '=' ( (lv_discriminatorValue_37_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'discriminatorColumn' otherlv_39= '=' ( (lv_discriminatorColumn_40_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'discriminatorType' otherlv_42= '=' ( (lv_discriminatorType_43_0= ruleDiscriminatorType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_44= 'discriminatorLength' otherlv_45= '=' ( (lv_discriminatorLength_46_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_47= 'inheritanceType' otherlv_48= '=' ( (lv_inheritanceType_49_0= ruleInheritanceType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_50= 'validate' otherlv_51= '=' ( (lv_validate_52_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_aggregateRoot_53_0= 'aggregateRoot' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_54= 'belongsTo' ( (otherlv_55= '@' )? ( (otherlv_56= RULE_ID ) ) ) ) ) ) ) )* ) ) )
                    // InternalContextMappingDSL.g:8044:5: ( ( ( ({...}? => ( ({...}? => ( ( ( (lv_notOptimisticLocking_17_0= RULE_NOT ) ) otherlv_18= 'optimisticLocking' ) | otherlv_19= 'optimisticLocking' ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notAuditable_20_0= RULE_NOT ) ) otherlv_21= 'auditable' ) | otherlv_22= 'auditable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_cache_23_0= 'cache' ) ) | (this_NOT_24= RULE_NOT otherlv_25= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_26_0= 'gap' ) ) | ( (lv_noGapClass_27_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_28_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'hint' otherlv_30= '=' ( (lv_hint_31_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'databaseTable' otherlv_33= '=' ( (lv_databaseTable_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'discriminatorValue' otherlv_36= '=' ( (lv_discriminatorValue_37_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'discriminatorColumn' otherlv_39= '=' ( (lv_discriminatorColumn_40_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'discriminatorType' otherlv_42= '=' ( (lv_discriminatorType_43_0= ruleDiscriminatorType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_44= 'discriminatorLength' otherlv_45= '=' ( (lv_discriminatorLength_46_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_47= 'inheritanceType' otherlv_48= '=' ( (lv_inheritanceType_49_0= ruleInheritanceType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_50= 'validate' otherlv_51= '=' ( (lv_validate_52_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_aggregateRoot_53_0= 'aggregateRoot' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_54= 'belongsTo' ( (otherlv_55= '@' )? ( (otherlv_56= RULE_ID ) ) ) ) ) ) ) )* ) )
                    {
                    // InternalContextMappingDSL.g:8044:5: ( ( ( ({...}? => ( ({...}? => ( ( ( (lv_notOptimisticLocking_17_0= RULE_NOT ) ) otherlv_18= 'optimisticLocking' ) | otherlv_19= 'optimisticLocking' ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notAuditable_20_0= RULE_NOT ) ) otherlv_21= 'auditable' ) | otherlv_22= 'auditable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_cache_23_0= 'cache' ) ) | (this_NOT_24= RULE_NOT otherlv_25= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_26_0= 'gap' ) ) | ( (lv_noGapClass_27_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_28_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'hint' otherlv_30= '=' ( (lv_hint_31_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'databaseTable' otherlv_33= '=' ( (lv_databaseTable_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'discriminatorValue' otherlv_36= '=' ( (lv_discriminatorValue_37_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'discriminatorColumn' otherlv_39= '=' ( (lv_discriminatorColumn_40_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'discriminatorType' otherlv_42= '=' ( (lv_discriminatorType_43_0= ruleDiscriminatorType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_44= 'discriminatorLength' otherlv_45= '=' ( (lv_discriminatorLength_46_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_47= 'inheritanceType' otherlv_48= '=' ( (lv_inheritanceType_49_0= ruleInheritanceType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_50= 'validate' otherlv_51= '=' ( (lv_validate_52_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_aggregateRoot_53_0= 'aggregateRoot' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_54= 'belongsTo' ( (otherlv_55= '@' )? ( (otherlv_56= RULE_ID ) ) ) ) ) ) ) )* ) )
                    // InternalContextMappingDSL.g:8045:6: ( ( ({...}? => ( ({...}? => ( ( ( (lv_notOptimisticLocking_17_0= RULE_NOT ) ) otherlv_18= 'optimisticLocking' ) | otherlv_19= 'optimisticLocking' ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notAuditable_20_0= RULE_NOT ) ) otherlv_21= 'auditable' ) | otherlv_22= 'auditable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_cache_23_0= 'cache' ) ) | (this_NOT_24= RULE_NOT otherlv_25= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_26_0= 'gap' ) ) | ( (lv_noGapClass_27_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_28_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'hint' otherlv_30= '=' ( (lv_hint_31_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'databaseTable' otherlv_33= '=' ( (lv_databaseTable_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'discriminatorValue' otherlv_36= '=' ( (lv_discriminatorValue_37_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'discriminatorColumn' otherlv_39= '=' ( (lv_discriminatorColumn_40_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'discriminatorType' otherlv_42= '=' ( (lv_discriminatorType_43_0= ruleDiscriminatorType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_44= 'discriminatorLength' otherlv_45= '=' ( (lv_discriminatorLength_46_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_47= 'inheritanceType' otherlv_48= '=' ( (lv_inheritanceType_49_0= ruleInheritanceType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_50= 'validate' otherlv_51= '=' ( (lv_validate_52_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_aggregateRoot_53_0= 'aggregateRoot' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_54= 'belongsTo' ( (otherlv_55= '@' )? ( (otherlv_56= RULE_ID ) ) ) ) ) ) ) )* )
                    {
                     
                    					  getUnorderedGroupHelper().enter(grammarAccess.getEntityAccess().getUnorderedGroup_7_2());
                    					
                    // InternalContextMappingDSL.g:8048:6: ( ( ({...}? => ( ({...}? => ( ( ( (lv_notOptimisticLocking_17_0= RULE_NOT ) ) otherlv_18= 'optimisticLocking' ) | otherlv_19= 'optimisticLocking' ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notAuditable_20_0= RULE_NOT ) ) otherlv_21= 'auditable' ) | otherlv_22= 'auditable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_cache_23_0= 'cache' ) ) | (this_NOT_24= RULE_NOT otherlv_25= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_26_0= 'gap' ) ) | ( (lv_noGapClass_27_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_28_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'hint' otherlv_30= '=' ( (lv_hint_31_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'databaseTable' otherlv_33= '=' ( (lv_databaseTable_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'discriminatorValue' otherlv_36= '=' ( (lv_discriminatorValue_37_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'discriminatorColumn' otherlv_39= '=' ( (lv_discriminatorColumn_40_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'discriminatorType' otherlv_42= '=' ( (lv_discriminatorType_43_0= ruleDiscriminatorType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_44= 'discriminatorLength' otherlv_45= '=' ( (lv_discriminatorLength_46_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_47= 'inheritanceType' otherlv_48= '=' ( (lv_inheritanceType_49_0= ruleInheritanceType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_50= 'validate' otherlv_51= '=' ( (lv_validate_52_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_aggregateRoot_53_0= 'aggregateRoot' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_54= 'belongsTo' ( (otherlv_55= '@' )? ( (otherlv_56= RULE_ID ) ) ) ) ) ) ) )* )
                    // InternalContextMappingDSL.g:8049:7: ( ({...}? => ( ({...}? => ( ( ( (lv_notOptimisticLocking_17_0= RULE_NOT ) ) otherlv_18= 'optimisticLocking' ) | otherlv_19= 'optimisticLocking' ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notAuditable_20_0= RULE_NOT ) ) otherlv_21= 'auditable' ) | otherlv_22= 'auditable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_cache_23_0= 'cache' ) ) | (this_NOT_24= RULE_NOT otherlv_25= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_26_0= 'gap' ) ) | ( (lv_noGapClass_27_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_28_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'hint' otherlv_30= '=' ( (lv_hint_31_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'databaseTable' otherlv_33= '=' ( (lv_databaseTable_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'discriminatorValue' otherlv_36= '=' ( (lv_discriminatorValue_37_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'discriminatorColumn' otherlv_39= '=' ( (lv_discriminatorColumn_40_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'discriminatorType' otherlv_42= '=' ( (lv_discriminatorType_43_0= ruleDiscriminatorType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_44= 'discriminatorLength' otherlv_45= '=' ( (lv_discriminatorLength_46_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_47= 'inheritanceType' otherlv_48= '=' ( (lv_inheritanceType_49_0= ruleInheritanceType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_50= 'validate' otherlv_51= '=' ( (lv_validate_52_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_aggregateRoot_53_0= 'aggregateRoot' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_54= 'belongsTo' ( (otherlv_55= '@' )? ( (otherlv_56= RULE_ID ) ) ) ) ) ) ) )*
                    {
                    // InternalContextMappingDSL.g:8049:7: ( ({...}? => ( ({...}? => ( ( ( (lv_notOptimisticLocking_17_0= RULE_NOT ) ) otherlv_18= 'optimisticLocking' ) | otherlv_19= 'optimisticLocking' ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notAuditable_20_0= RULE_NOT ) ) otherlv_21= 'auditable' ) | otherlv_22= 'auditable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_cache_23_0= 'cache' ) ) | (this_NOT_24= RULE_NOT otherlv_25= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_26_0= 'gap' ) ) | ( (lv_noGapClass_27_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_28_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'hint' otherlv_30= '=' ( (lv_hint_31_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'databaseTable' otherlv_33= '=' ( (lv_databaseTable_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'discriminatorValue' otherlv_36= '=' ( (lv_discriminatorValue_37_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'discriminatorColumn' otherlv_39= '=' ( (lv_discriminatorColumn_40_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'discriminatorType' otherlv_42= '=' ( (lv_discriminatorType_43_0= ruleDiscriminatorType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_44= 'discriminatorLength' otherlv_45= '=' ( (lv_discriminatorLength_46_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_47= 'inheritanceType' otherlv_48= '=' ( (lv_inheritanceType_49_0= ruleInheritanceType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_50= 'validate' otherlv_51= '=' ( (lv_validate_52_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_aggregateRoot_53_0= 'aggregateRoot' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_54= 'belongsTo' ( (otherlv_55= '@' )? ( (otherlv_56= RULE_ID ) ) ) ) ) ) ) )*
                    loop215:
                    do {
                        int alt215=16;
                        alt215 = dfa215.predict(input);
                        switch (alt215) {
                    	case 1 :
                    	    // InternalContextMappingDSL.g:8050:5: ({...}? => ( ({...}? => ( ( ( (lv_notOptimisticLocking_17_0= RULE_NOT ) ) otherlv_18= 'optimisticLocking' ) | otherlv_19= 'optimisticLocking' ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:8050:5: ({...}? => ( ({...}? => ( ( ( (lv_notOptimisticLocking_17_0= RULE_NOT ) ) otherlv_18= 'optimisticLocking' ) | otherlv_19= 'optimisticLocking' ) ) ) )
                    	    // InternalContextMappingDSL.g:8051:6: {...}? => ( ({...}? => ( ( ( (lv_notOptimisticLocking_17_0= RULE_NOT ) ) otherlv_18= 'optimisticLocking' ) | otherlv_19= 'optimisticLocking' ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getEntityAccess().getUnorderedGroup_7_2(), 0) ) {
                    	        throw new FailedPredicateException(input, "ruleEntity", "getUnorderedGroupHelper().canSelect(grammarAccess.getEntityAccess().getUnorderedGroup_7_2(), 0)");
                    	    }
                    	    // InternalContextMappingDSL.g:8051:106: ( ({...}? => ( ( ( (lv_notOptimisticLocking_17_0= RULE_NOT ) ) otherlv_18= 'optimisticLocking' ) | otherlv_19= 'optimisticLocking' ) ) )
                    	    // InternalContextMappingDSL.g:8052:7: ({...}? => ( ( ( (lv_notOptimisticLocking_17_0= RULE_NOT ) ) otherlv_18= 'optimisticLocking' ) | otherlv_19= 'optimisticLocking' ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getEntityAccess().getUnorderedGroup_7_2(), 0);
                    	    						
                    	    // InternalContextMappingDSL.g:8055:10: ({...}? => ( ( ( (lv_notOptimisticLocking_17_0= RULE_NOT ) ) otherlv_18= 'optimisticLocking' ) | otherlv_19= 'optimisticLocking' ) )
                    	    // InternalContextMappingDSL.g:8055:11: {...}? => ( ( ( (lv_notOptimisticLocking_17_0= RULE_NOT ) ) otherlv_18= 'optimisticLocking' ) | otherlv_19= 'optimisticLocking' )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleEntity", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:8055:20: ( ( ( (lv_notOptimisticLocking_17_0= RULE_NOT ) ) otherlv_18= 'optimisticLocking' ) | otherlv_19= 'optimisticLocking' )
                    	    int alt210=2;
                    	    int LA210_0 = input.LA(1);

                    	    if ( (LA210_0==RULE_NOT) ) {
                    	        alt210=1;
                    	    }
                    	    else if ( (LA210_0==110) ) {
                    	        alt210=2;
                    	    }
                    	    else {
                    	        NoViableAltException nvae =
                    	            new NoViableAltException("", 210, 0, input);

                    	        throw nvae;
                    	    }
                    	    switch (alt210) {
                    	        case 1 :
                    	            // InternalContextMappingDSL.g:8055:21: ( ( (lv_notOptimisticLocking_17_0= RULE_NOT ) ) otherlv_18= 'optimisticLocking' )
                    	            {
                    	            // InternalContextMappingDSL.g:8055:21: ( ( (lv_notOptimisticLocking_17_0= RULE_NOT ) ) otherlv_18= 'optimisticLocking' )
                    	            // InternalContextMappingDSL.g:8056:11: ( (lv_notOptimisticLocking_17_0= RULE_NOT ) ) otherlv_18= 'optimisticLocking'
                    	            {
                    	            // InternalContextMappingDSL.g:8056:11: ( (lv_notOptimisticLocking_17_0= RULE_NOT ) )
                    	            // InternalContextMappingDSL.g:8057:12: (lv_notOptimisticLocking_17_0= RULE_NOT )
                    	            {
                    	            // InternalContextMappingDSL.g:8057:12: (lv_notOptimisticLocking_17_0= RULE_NOT )
                    	            // InternalContextMappingDSL.g:8058:13: lv_notOptimisticLocking_17_0= RULE_NOT
                    	            {
                    	            lv_notOptimisticLocking_17_0=(Token)match(input,RULE_NOT,FOLLOW_127); 

                    	            													newLeafNode(lv_notOptimisticLocking_17_0, grammarAccess.getEntityAccess().getNotOptimisticLockingNOTTerminalRuleCall_7_2_0_0_0_0());
                    	            												

                    	            													if (current==null) {
                    	            														current = createModelElement(grammarAccess.getEntityRule());
                    	            													}
                    	            													setWithLastConsumed(
                    	            														current,
                    	            														"notOptimisticLocking",
                    	            														true,
                    	            														"org.contextmapper.tactic.dsl.TacticDDDLanguage.NOT");
                    	            												

                    	            }


                    	            }

                    	            otherlv_18=(Token)match(input,110,FOLLOW_126); 

                    	            											newLeafNode(otherlv_18, grammarAccess.getEntityAccess().getOptimisticLockingKeyword_7_2_0_0_1());
                    	            										

                    	            }


                    	            }
                    	            break;
                    	        case 2 :
                    	            // InternalContextMappingDSL.g:8080:10: otherlv_19= 'optimisticLocking'
                    	            {
                    	            otherlv_19=(Token)match(input,110,FOLLOW_126); 

                    	            										newLeafNode(otherlv_19, grammarAccess.getEntityAccess().getOptimisticLockingKeyword_7_2_0_1());
                    	            									

                    	            }
                    	            break;

                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getEntityAccess().getUnorderedGroup_7_2());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 2 :
                    	    // InternalContextMappingDSL.g:8090:5: ({...}? => ( ({...}? => ( ( ( (lv_notAuditable_20_0= RULE_NOT ) ) otherlv_21= 'auditable' ) | otherlv_22= 'auditable' ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:8090:5: ({...}? => ( ({...}? => ( ( ( (lv_notAuditable_20_0= RULE_NOT ) ) otherlv_21= 'auditable' ) | otherlv_22= 'auditable' ) ) ) )
                    	    // InternalContextMappingDSL.g:8091:6: {...}? => ( ({...}? => ( ( ( (lv_notAuditable_20_0= RULE_NOT ) ) otherlv_21= 'auditable' ) | otherlv_22= 'auditable' ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getEntityAccess().getUnorderedGroup_7_2(), 1) ) {
                    	        throw new FailedPredicateException(input, "ruleEntity", "getUnorderedGroupHelper().canSelect(grammarAccess.getEntityAccess().getUnorderedGroup_7_2(), 1)");
                    	    }
                    	    // InternalContextMappingDSL.g:8091:106: ( ({...}? => ( ( ( (lv_notAuditable_20_0= RULE_NOT ) ) otherlv_21= 'auditable' ) | otherlv_22= 'auditable' ) ) )
                    	    // InternalContextMappingDSL.g:8092:7: ({...}? => ( ( ( (lv_notAuditable_20_0= RULE_NOT ) ) otherlv_21= 'auditable' ) | otherlv_22= 'auditable' ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getEntityAccess().getUnorderedGroup_7_2(), 1);
                    	    						
                    	    // InternalContextMappingDSL.g:8095:10: ({...}? => ( ( ( (lv_notAuditable_20_0= RULE_NOT ) ) otherlv_21= 'auditable' ) | otherlv_22= 'auditable' ) )
                    	    // InternalContextMappingDSL.g:8095:11: {...}? => ( ( ( (lv_notAuditable_20_0= RULE_NOT ) ) otherlv_21= 'auditable' ) | otherlv_22= 'auditable' )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleEntity", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:8095:20: ( ( ( (lv_notAuditable_20_0= RULE_NOT ) ) otherlv_21= 'auditable' ) | otherlv_22= 'auditable' )
                    	    int alt211=2;
                    	    int LA211_0 = input.LA(1);

                    	    if ( (LA211_0==RULE_NOT) ) {
                    	        alt211=1;
                    	    }
                    	    else if ( (LA211_0==111) ) {
                    	        alt211=2;
                    	    }
                    	    else {
                    	        NoViableAltException nvae =
                    	            new NoViableAltException("", 211, 0, input);

                    	        throw nvae;
                    	    }
                    	    switch (alt211) {
                    	        case 1 :
                    	            // InternalContextMappingDSL.g:8095:21: ( ( (lv_notAuditable_20_0= RULE_NOT ) ) otherlv_21= 'auditable' )
                    	            {
                    	            // InternalContextMappingDSL.g:8095:21: ( ( (lv_notAuditable_20_0= RULE_NOT ) ) otherlv_21= 'auditable' )
                    	            // InternalContextMappingDSL.g:8096:11: ( (lv_notAuditable_20_0= RULE_NOT ) ) otherlv_21= 'auditable'
                    	            {
                    	            // InternalContextMappingDSL.g:8096:11: ( (lv_notAuditable_20_0= RULE_NOT ) )
                    	            // InternalContextMappingDSL.g:8097:12: (lv_notAuditable_20_0= RULE_NOT )
                    	            {
                    	            // InternalContextMappingDSL.g:8097:12: (lv_notAuditable_20_0= RULE_NOT )
                    	            // InternalContextMappingDSL.g:8098:13: lv_notAuditable_20_0= RULE_NOT
                    	            {
                    	            lv_notAuditable_20_0=(Token)match(input,RULE_NOT,FOLLOW_128); 

                    	            													newLeafNode(lv_notAuditable_20_0, grammarAccess.getEntityAccess().getNotAuditableNOTTerminalRuleCall_7_2_1_0_0_0());
                    	            												

                    	            													if (current==null) {
                    	            														current = createModelElement(grammarAccess.getEntityRule());
                    	            													}
                    	            													setWithLastConsumed(
                    	            														current,
                    	            														"notAuditable",
                    	            														true,
                    	            														"org.contextmapper.tactic.dsl.TacticDDDLanguage.NOT");
                    	            												

                    	            }


                    	            }

                    	            otherlv_21=(Token)match(input,111,FOLLOW_126); 

                    	            											newLeafNode(otherlv_21, grammarAccess.getEntityAccess().getAuditableKeyword_7_2_1_0_1());
                    	            										

                    	            }


                    	            }
                    	            break;
                    	        case 2 :
                    	            // InternalContextMappingDSL.g:8120:10: otherlv_22= 'auditable'
                    	            {
                    	            otherlv_22=(Token)match(input,111,FOLLOW_126); 

                    	            										newLeafNode(otherlv_22, grammarAccess.getEntityAccess().getAuditableKeyword_7_2_1_1());
                    	            									

                    	            }
                    	            break;

                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getEntityAccess().getUnorderedGroup_7_2());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 3 :
                    	    // InternalContextMappingDSL.g:8130:5: ({...}? => ( ({...}? => ( ( (lv_cache_23_0= 'cache' ) ) | (this_NOT_24= RULE_NOT otherlv_25= 'cache' ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:8130:5: ({...}? => ( ({...}? => ( ( (lv_cache_23_0= 'cache' ) ) | (this_NOT_24= RULE_NOT otherlv_25= 'cache' ) ) ) ) )
                    	    // InternalContextMappingDSL.g:8131:6: {...}? => ( ({...}? => ( ( (lv_cache_23_0= 'cache' ) ) | (this_NOT_24= RULE_NOT otherlv_25= 'cache' ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getEntityAccess().getUnorderedGroup_7_2(), 2) ) {
                    	        throw new FailedPredicateException(input, "ruleEntity", "getUnorderedGroupHelper().canSelect(grammarAccess.getEntityAccess().getUnorderedGroup_7_2(), 2)");
                    	    }
                    	    // InternalContextMappingDSL.g:8131:106: ( ({...}? => ( ( (lv_cache_23_0= 'cache' ) ) | (this_NOT_24= RULE_NOT otherlv_25= 'cache' ) ) ) )
                    	    // InternalContextMappingDSL.g:8132:7: ({...}? => ( ( (lv_cache_23_0= 'cache' ) ) | (this_NOT_24= RULE_NOT otherlv_25= 'cache' ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getEntityAccess().getUnorderedGroup_7_2(), 2);
                    	    						
                    	    // InternalContextMappingDSL.g:8135:10: ({...}? => ( ( (lv_cache_23_0= 'cache' ) ) | (this_NOT_24= RULE_NOT otherlv_25= 'cache' ) ) )
                    	    // InternalContextMappingDSL.g:8135:11: {...}? => ( ( (lv_cache_23_0= 'cache' ) ) | (this_NOT_24= RULE_NOT otherlv_25= 'cache' ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleEntity", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:8135:20: ( ( (lv_cache_23_0= 'cache' ) ) | (this_NOT_24= RULE_NOT otherlv_25= 'cache' ) )
                    	    int alt212=2;
                    	    int LA212_0 = input.LA(1);

                    	    if ( (LA212_0==93) ) {
                    	        alt212=1;
                    	    }
                    	    else if ( (LA212_0==RULE_NOT) ) {
                    	        alt212=2;
                    	    }
                    	    else {
                    	        NoViableAltException nvae =
                    	            new NoViableAltException("", 212, 0, input);

                    	        throw nvae;
                    	    }
                    	    switch (alt212) {
                    	        case 1 :
                    	            // InternalContextMappingDSL.g:8135:21: ( (lv_cache_23_0= 'cache' ) )
                    	            {
                    	            // InternalContextMappingDSL.g:8135:21: ( (lv_cache_23_0= 'cache' ) )
                    	            // InternalContextMappingDSL.g:8136:11: (lv_cache_23_0= 'cache' )
                    	            {
                    	            // InternalContextMappingDSL.g:8136:11: (lv_cache_23_0= 'cache' )
                    	            // InternalContextMappingDSL.g:8137:12: lv_cache_23_0= 'cache'
                    	            {
                    	            lv_cache_23_0=(Token)match(input,93,FOLLOW_126); 

                    	            												newLeafNode(lv_cache_23_0, grammarAccess.getEntityAccess().getCacheCacheKeyword_7_2_2_0_0());
                    	            											

                    	            												if (current==null) {
                    	            													current = createModelElement(grammarAccess.getEntityRule());
                    	            												}
                    	            												setWithLastConsumed(current, "cache", true, "cache");
                    	            											

                    	            }


                    	            }


                    	            }
                    	            break;
                    	        case 2 :
                    	            // InternalContextMappingDSL.g:8150:10: (this_NOT_24= RULE_NOT otherlv_25= 'cache' )
                    	            {
                    	            // InternalContextMappingDSL.g:8150:10: (this_NOT_24= RULE_NOT otherlv_25= 'cache' )
                    	            // InternalContextMappingDSL.g:8151:11: this_NOT_24= RULE_NOT otherlv_25= 'cache'
                    	            {
                    	            this_NOT_24=(Token)match(input,RULE_NOT,FOLLOW_129); 

                    	            											newLeafNode(this_NOT_24, grammarAccess.getEntityAccess().getNOTTerminalRuleCall_7_2_2_1_0());
                    	            										
                    	            otherlv_25=(Token)match(input,93,FOLLOW_126); 

                    	            											newLeafNode(otherlv_25, grammarAccess.getEntityAccess().getCacheKeyword_7_2_2_1_1());
                    	            										

                    	            }


                    	            }
                    	            break;

                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getEntityAccess().getUnorderedGroup_7_2());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 4 :
                    	    // InternalContextMappingDSL.g:8166:5: ({...}? => ( ({...}? => ( ( (lv_gapClass_26_0= 'gap' ) ) | ( (lv_noGapClass_27_0= 'nogap' ) ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:8166:5: ({...}? => ( ({...}? => ( ( (lv_gapClass_26_0= 'gap' ) ) | ( (lv_noGapClass_27_0= 'nogap' ) ) ) ) ) )
                    	    // InternalContextMappingDSL.g:8167:6: {...}? => ( ({...}? => ( ( (lv_gapClass_26_0= 'gap' ) ) | ( (lv_noGapClass_27_0= 'nogap' ) ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getEntityAccess().getUnorderedGroup_7_2(), 3) ) {
                    	        throw new FailedPredicateException(input, "ruleEntity", "getUnorderedGroupHelper().canSelect(grammarAccess.getEntityAccess().getUnorderedGroup_7_2(), 3)");
                    	    }
                    	    // InternalContextMappingDSL.g:8167:106: ( ({...}? => ( ( (lv_gapClass_26_0= 'gap' ) ) | ( (lv_noGapClass_27_0= 'nogap' ) ) ) ) )
                    	    // InternalContextMappingDSL.g:8168:7: ({...}? => ( ( (lv_gapClass_26_0= 'gap' ) ) | ( (lv_noGapClass_27_0= 'nogap' ) ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getEntityAccess().getUnorderedGroup_7_2(), 3);
                    	    						
                    	    // InternalContextMappingDSL.g:8171:10: ({...}? => ( ( (lv_gapClass_26_0= 'gap' ) ) | ( (lv_noGapClass_27_0= 'nogap' ) ) ) )
                    	    // InternalContextMappingDSL.g:8171:11: {...}? => ( ( (lv_gapClass_26_0= 'gap' ) ) | ( (lv_noGapClass_27_0= 'nogap' ) ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleEntity", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:8171:20: ( ( (lv_gapClass_26_0= 'gap' ) ) | ( (lv_noGapClass_27_0= 'nogap' ) ) )
                    	    int alt213=2;
                    	    int LA213_0 = input.LA(1);

                    	    if ( (LA213_0==71) ) {
                    	        alt213=1;
                    	    }
                    	    else if ( (LA213_0==72) ) {
                    	        alt213=2;
                    	    }
                    	    else {
                    	        NoViableAltException nvae =
                    	            new NoViableAltException("", 213, 0, input);

                    	        throw nvae;
                    	    }
                    	    switch (alt213) {
                    	        case 1 :
                    	            // InternalContextMappingDSL.g:8171:21: ( (lv_gapClass_26_0= 'gap' ) )
                    	            {
                    	            // InternalContextMappingDSL.g:8171:21: ( (lv_gapClass_26_0= 'gap' ) )
                    	            // InternalContextMappingDSL.g:8172:11: (lv_gapClass_26_0= 'gap' )
                    	            {
                    	            // InternalContextMappingDSL.g:8172:11: (lv_gapClass_26_0= 'gap' )
                    	            // InternalContextMappingDSL.g:8173:12: lv_gapClass_26_0= 'gap'
                    	            {
                    	            lv_gapClass_26_0=(Token)match(input,71,FOLLOW_126); 

                    	            												newLeafNode(lv_gapClass_26_0, grammarAccess.getEntityAccess().getGapClassGapKeyword_7_2_3_0_0());
                    	            											

                    	            												if (current==null) {
                    	            													current = createModelElement(grammarAccess.getEntityRule());
                    	            												}
                    	            												setWithLastConsumed(current, "gapClass", true, "gap");
                    	            											

                    	            }


                    	            }


                    	            }
                    	            break;
                    	        case 2 :
                    	            // InternalContextMappingDSL.g:8186:10: ( (lv_noGapClass_27_0= 'nogap' ) )
                    	            {
                    	            // InternalContextMappingDSL.g:8186:10: ( (lv_noGapClass_27_0= 'nogap' ) )
                    	            // InternalContextMappingDSL.g:8187:11: (lv_noGapClass_27_0= 'nogap' )
                    	            {
                    	            // InternalContextMappingDSL.g:8187:11: (lv_noGapClass_27_0= 'nogap' )
                    	            // InternalContextMappingDSL.g:8188:12: lv_noGapClass_27_0= 'nogap'
                    	            {
                    	            lv_noGapClass_27_0=(Token)match(input,72,FOLLOW_126); 

                    	            												newLeafNode(lv_noGapClass_27_0, grammarAccess.getEntityAccess().getNoGapClassNogapKeyword_7_2_3_1_0());
                    	            											

                    	            												if (current==null) {
                    	            													current = createModelElement(grammarAccess.getEntityRule());
                    	            												}
                    	            												setWithLastConsumed(current, "noGapClass", true, "nogap");
                    	            											

                    	            }


                    	            }


                    	            }
                    	            break;

                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getEntityAccess().getUnorderedGroup_7_2());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 5 :
                    	    // InternalContextMappingDSL.g:8206:5: ({...}? => ( ({...}? => ( (lv_scaffold_28_0= 'scaffold' ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:8206:5: ({...}? => ( ({...}? => ( (lv_scaffold_28_0= 'scaffold' ) ) ) ) )
                    	    // InternalContextMappingDSL.g:8207:6: {...}? => ( ({...}? => ( (lv_scaffold_28_0= 'scaffold' ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getEntityAccess().getUnorderedGroup_7_2(), 4) ) {
                    	        throw new FailedPredicateException(input, "ruleEntity", "getUnorderedGroupHelper().canSelect(grammarAccess.getEntityAccess().getUnorderedGroup_7_2(), 4)");
                    	    }
                    	    // InternalContextMappingDSL.g:8207:106: ( ({...}? => ( (lv_scaffold_28_0= 'scaffold' ) ) ) )
                    	    // InternalContextMappingDSL.g:8208:7: ({...}? => ( (lv_scaffold_28_0= 'scaffold' ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getEntityAccess().getUnorderedGroup_7_2(), 4);
                    	    						
                    	    // InternalContextMappingDSL.g:8211:10: ({...}? => ( (lv_scaffold_28_0= 'scaffold' ) ) )
                    	    // InternalContextMappingDSL.g:8211:11: {...}? => ( (lv_scaffold_28_0= 'scaffold' ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleEntity", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:8211:20: ( (lv_scaffold_28_0= 'scaffold' ) )
                    	    // InternalContextMappingDSL.g:8211:21: (lv_scaffold_28_0= 'scaffold' )
                    	    {
                    	    // InternalContextMappingDSL.g:8211:21: (lv_scaffold_28_0= 'scaffold' )
                    	    // InternalContextMappingDSL.g:8212:11: lv_scaffold_28_0= 'scaffold'
                    	    {
                    	    lv_scaffold_28_0=(Token)match(input,75,FOLLOW_126); 

                    	    											newLeafNode(lv_scaffold_28_0, grammarAccess.getEntityAccess().getScaffoldScaffoldKeyword_7_2_4_0());
                    	    										

                    	    											if (current==null) {
                    	    												current = createModelElement(grammarAccess.getEntityRule());
                    	    											}
                    	    											setWithLastConsumed(current, "scaffold", true, "scaffold");
                    	    										

                    	    }


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getEntityAccess().getUnorderedGroup_7_2());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 6 :
                    	    // InternalContextMappingDSL.g:8229:5: ({...}? => ( ({...}? => (otherlv_29= 'hint' otherlv_30= '=' ( (lv_hint_31_0= RULE_STRING ) ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:8229:5: ({...}? => ( ({...}? => (otherlv_29= 'hint' otherlv_30= '=' ( (lv_hint_31_0= RULE_STRING ) ) ) ) ) )
                    	    // InternalContextMappingDSL.g:8230:6: {...}? => ( ({...}? => (otherlv_29= 'hint' otherlv_30= '=' ( (lv_hint_31_0= RULE_STRING ) ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getEntityAccess().getUnorderedGroup_7_2(), 5) ) {
                    	        throw new FailedPredicateException(input, "ruleEntity", "getUnorderedGroupHelper().canSelect(grammarAccess.getEntityAccess().getUnorderedGroup_7_2(), 5)");
                    	    }
                    	    // InternalContextMappingDSL.g:8230:106: ( ({...}? => (otherlv_29= 'hint' otherlv_30= '=' ( (lv_hint_31_0= RULE_STRING ) ) ) ) )
                    	    // InternalContextMappingDSL.g:8231:7: ({...}? => (otherlv_29= 'hint' otherlv_30= '=' ( (lv_hint_31_0= RULE_STRING ) ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getEntityAccess().getUnorderedGroup_7_2(), 5);
                    	    						
                    	    // InternalContextMappingDSL.g:8234:10: ({...}? => (otherlv_29= 'hint' otherlv_30= '=' ( (lv_hint_31_0= RULE_STRING ) ) ) )
                    	    // InternalContextMappingDSL.g:8234:11: {...}? => (otherlv_29= 'hint' otherlv_30= '=' ( (lv_hint_31_0= RULE_STRING ) ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleEntity", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:8234:20: (otherlv_29= 'hint' otherlv_30= '=' ( (lv_hint_31_0= RULE_STRING ) ) )
                    	    // InternalContextMappingDSL.g:8234:21: otherlv_29= 'hint' otherlv_30= '=' ( (lv_hint_31_0= RULE_STRING ) )
                    	    {
                    	    otherlv_29=(Token)match(input,67,FOLLOW_81); 

                    	    										newLeafNode(otherlv_29, grammarAccess.getEntityAccess().getHintKeyword_7_2_5_0());
                    	    									
                    	    otherlv_30=(Token)match(input,21,FOLLOW_4); 

                    	    										newLeafNode(otherlv_30, grammarAccess.getEntityAccess().getEqualsSignKeyword_7_2_5_1());
                    	    									
                    	    // InternalContextMappingDSL.g:8242:10: ( (lv_hint_31_0= RULE_STRING ) )
                    	    // InternalContextMappingDSL.g:8243:11: (lv_hint_31_0= RULE_STRING )
                    	    {
                    	    // InternalContextMappingDSL.g:8243:11: (lv_hint_31_0= RULE_STRING )
                    	    // InternalContextMappingDSL.g:8244:12: lv_hint_31_0= RULE_STRING
                    	    {
                    	    lv_hint_31_0=(Token)match(input,RULE_STRING,FOLLOW_126); 

                    	    												newLeafNode(lv_hint_31_0, grammarAccess.getEntityAccess().getHintSTRINGTerminalRuleCall_7_2_5_2_0());
                    	    											

                    	    												if (current==null) {
                    	    													current = createModelElement(grammarAccess.getEntityRule());
                    	    												}
                    	    												setWithLastConsumed(
                    	    													current,
                    	    													"hint",
                    	    													lv_hint_31_0,
                    	    													"org.eclipse.xtext.common.Terminals.STRING");
                    	    											

                    	    }


                    	    }


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getEntityAccess().getUnorderedGroup_7_2());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 7 :
                    	    // InternalContextMappingDSL.g:8266:5: ({...}? => ( ({...}? => (otherlv_32= 'databaseTable' otherlv_33= '=' ( (lv_databaseTable_34_0= RULE_STRING ) ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:8266:5: ({...}? => ( ({...}? => (otherlv_32= 'databaseTable' otherlv_33= '=' ( (lv_databaseTable_34_0= RULE_STRING ) ) ) ) ) )
                    	    // InternalContextMappingDSL.g:8267:6: {...}? => ( ({...}? => (otherlv_32= 'databaseTable' otherlv_33= '=' ( (lv_databaseTable_34_0= RULE_STRING ) ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getEntityAccess().getUnorderedGroup_7_2(), 6) ) {
                    	        throw new FailedPredicateException(input, "ruleEntity", "getUnorderedGroupHelper().canSelect(grammarAccess.getEntityAccess().getUnorderedGroup_7_2(), 6)");
                    	    }
                    	    // InternalContextMappingDSL.g:8267:106: ( ({...}? => (otherlv_32= 'databaseTable' otherlv_33= '=' ( (lv_databaseTable_34_0= RULE_STRING ) ) ) ) )
                    	    // InternalContextMappingDSL.g:8268:7: ({...}? => (otherlv_32= 'databaseTable' otherlv_33= '=' ( (lv_databaseTable_34_0= RULE_STRING ) ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getEntityAccess().getUnorderedGroup_7_2(), 6);
                    	    						
                    	    // InternalContextMappingDSL.g:8271:10: ({...}? => (otherlv_32= 'databaseTable' otherlv_33= '=' ( (lv_databaseTable_34_0= RULE_STRING ) ) ) )
                    	    // InternalContextMappingDSL.g:8271:11: {...}? => (otherlv_32= 'databaseTable' otherlv_33= '=' ( (lv_databaseTable_34_0= RULE_STRING ) ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleEntity", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:8271:20: (otherlv_32= 'databaseTable' otherlv_33= '=' ( (lv_databaseTable_34_0= RULE_STRING ) ) )
                    	    // InternalContextMappingDSL.g:8271:21: otherlv_32= 'databaseTable' otherlv_33= '=' ( (lv_databaseTable_34_0= RULE_STRING ) )
                    	    {
                    	    otherlv_32=(Token)match(input,112,FOLLOW_81); 

                    	    										newLeafNode(otherlv_32, grammarAccess.getEntityAccess().getDatabaseTableKeyword_7_2_6_0());
                    	    									
                    	    otherlv_33=(Token)match(input,21,FOLLOW_4); 

                    	    										newLeafNode(otherlv_33, grammarAccess.getEntityAccess().getEqualsSignKeyword_7_2_6_1());
                    	    									
                    	    // InternalContextMappingDSL.g:8279:10: ( (lv_databaseTable_34_0= RULE_STRING ) )
                    	    // InternalContextMappingDSL.g:8280:11: (lv_databaseTable_34_0= RULE_STRING )
                    	    {
                    	    // InternalContextMappingDSL.g:8280:11: (lv_databaseTable_34_0= RULE_STRING )
                    	    // InternalContextMappingDSL.g:8281:12: lv_databaseTable_34_0= RULE_STRING
                    	    {
                    	    lv_databaseTable_34_0=(Token)match(input,RULE_STRING,FOLLOW_126); 

                    	    												newLeafNode(lv_databaseTable_34_0, grammarAccess.getEntityAccess().getDatabaseTableSTRINGTerminalRuleCall_7_2_6_2_0());
                    	    											

                    	    												if (current==null) {
                    	    													current = createModelElement(grammarAccess.getEntityRule());
                    	    												}
                    	    												setWithLastConsumed(
                    	    													current,
                    	    													"databaseTable",
                    	    													lv_databaseTable_34_0,
                    	    													"org.eclipse.xtext.common.Terminals.STRING");
                    	    											

                    	    }


                    	    }


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getEntityAccess().getUnorderedGroup_7_2());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 8 :
                    	    // InternalContextMappingDSL.g:8303:5: ({...}? => ( ({...}? => (otherlv_35= 'discriminatorValue' otherlv_36= '=' ( (lv_discriminatorValue_37_0= RULE_STRING ) ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:8303:5: ({...}? => ( ({...}? => (otherlv_35= 'discriminatorValue' otherlv_36= '=' ( (lv_discriminatorValue_37_0= RULE_STRING ) ) ) ) ) )
                    	    // InternalContextMappingDSL.g:8304:6: {...}? => ( ({...}? => (otherlv_35= 'discriminatorValue' otherlv_36= '=' ( (lv_discriminatorValue_37_0= RULE_STRING ) ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getEntityAccess().getUnorderedGroup_7_2(), 7) ) {
                    	        throw new FailedPredicateException(input, "ruleEntity", "getUnorderedGroupHelper().canSelect(grammarAccess.getEntityAccess().getUnorderedGroup_7_2(), 7)");
                    	    }
                    	    // InternalContextMappingDSL.g:8304:106: ( ({...}? => (otherlv_35= 'discriminatorValue' otherlv_36= '=' ( (lv_discriminatorValue_37_0= RULE_STRING ) ) ) ) )
                    	    // InternalContextMappingDSL.g:8305:7: ({...}? => (otherlv_35= 'discriminatorValue' otherlv_36= '=' ( (lv_discriminatorValue_37_0= RULE_STRING ) ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getEntityAccess().getUnorderedGroup_7_2(), 7);
                    	    						
                    	    // InternalContextMappingDSL.g:8308:10: ({...}? => (otherlv_35= 'discriminatorValue' otherlv_36= '=' ( (lv_discriminatorValue_37_0= RULE_STRING ) ) ) )
                    	    // InternalContextMappingDSL.g:8308:11: {...}? => (otherlv_35= 'discriminatorValue' otherlv_36= '=' ( (lv_discriminatorValue_37_0= RULE_STRING ) ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleEntity", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:8308:20: (otherlv_35= 'discriminatorValue' otherlv_36= '=' ( (lv_discriminatorValue_37_0= RULE_STRING ) ) )
                    	    // InternalContextMappingDSL.g:8308:21: otherlv_35= 'discriminatorValue' otherlv_36= '=' ( (lv_discriminatorValue_37_0= RULE_STRING ) )
                    	    {
                    	    otherlv_35=(Token)match(input,113,FOLLOW_81); 

                    	    										newLeafNode(otherlv_35, grammarAccess.getEntityAccess().getDiscriminatorValueKeyword_7_2_7_0());
                    	    									
                    	    otherlv_36=(Token)match(input,21,FOLLOW_4); 

                    	    										newLeafNode(otherlv_36, grammarAccess.getEntityAccess().getEqualsSignKeyword_7_2_7_1());
                    	    									
                    	    // InternalContextMappingDSL.g:8316:10: ( (lv_discriminatorValue_37_0= RULE_STRING ) )
                    	    // InternalContextMappingDSL.g:8317:11: (lv_discriminatorValue_37_0= RULE_STRING )
                    	    {
                    	    // InternalContextMappingDSL.g:8317:11: (lv_discriminatorValue_37_0= RULE_STRING )
                    	    // InternalContextMappingDSL.g:8318:12: lv_discriminatorValue_37_0= RULE_STRING
                    	    {
                    	    lv_discriminatorValue_37_0=(Token)match(input,RULE_STRING,FOLLOW_126); 

                    	    												newLeafNode(lv_discriminatorValue_37_0, grammarAccess.getEntityAccess().getDiscriminatorValueSTRINGTerminalRuleCall_7_2_7_2_0());
                    	    											

                    	    												if (current==null) {
                    	    													current = createModelElement(grammarAccess.getEntityRule());
                    	    												}
                    	    												setWithLastConsumed(
                    	    													current,
                    	    													"discriminatorValue",
                    	    													lv_discriminatorValue_37_0,
                    	    													"org.eclipse.xtext.common.Terminals.STRING");
                    	    											

                    	    }


                    	    }


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getEntityAccess().getUnorderedGroup_7_2());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 9 :
                    	    // InternalContextMappingDSL.g:8340:5: ({...}? => ( ({...}? => (otherlv_38= 'discriminatorColumn' otherlv_39= '=' ( (lv_discriminatorColumn_40_0= RULE_STRING ) ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:8340:5: ({...}? => ( ({...}? => (otherlv_38= 'discriminatorColumn' otherlv_39= '=' ( (lv_discriminatorColumn_40_0= RULE_STRING ) ) ) ) ) )
                    	    // InternalContextMappingDSL.g:8341:6: {...}? => ( ({...}? => (otherlv_38= 'discriminatorColumn' otherlv_39= '=' ( (lv_discriminatorColumn_40_0= RULE_STRING ) ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getEntityAccess().getUnorderedGroup_7_2(), 8) ) {
                    	        throw new FailedPredicateException(input, "ruleEntity", "getUnorderedGroupHelper().canSelect(grammarAccess.getEntityAccess().getUnorderedGroup_7_2(), 8)");
                    	    }
                    	    // InternalContextMappingDSL.g:8341:106: ( ({...}? => (otherlv_38= 'discriminatorColumn' otherlv_39= '=' ( (lv_discriminatorColumn_40_0= RULE_STRING ) ) ) ) )
                    	    // InternalContextMappingDSL.g:8342:7: ({...}? => (otherlv_38= 'discriminatorColumn' otherlv_39= '=' ( (lv_discriminatorColumn_40_0= RULE_STRING ) ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getEntityAccess().getUnorderedGroup_7_2(), 8);
                    	    						
                    	    // InternalContextMappingDSL.g:8345:10: ({...}? => (otherlv_38= 'discriminatorColumn' otherlv_39= '=' ( (lv_discriminatorColumn_40_0= RULE_STRING ) ) ) )
                    	    // InternalContextMappingDSL.g:8345:11: {...}? => (otherlv_38= 'discriminatorColumn' otherlv_39= '=' ( (lv_discriminatorColumn_40_0= RULE_STRING ) ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleEntity", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:8345:20: (otherlv_38= 'discriminatorColumn' otherlv_39= '=' ( (lv_discriminatorColumn_40_0= RULE_STRING ) ) )
                    	    // InternalContextMappingDSL.g:8345:21: otherlv_38= 'discriminatorColumn' otherlv_39= '=' ( (lv_discriminatorColumn_40_0= RULE_STRING ) )
                    	    {
                    	    otherlv_38=(Token)match(input,114,FOLLOW_81); 

                    	    										newLeafNode(otherlv_38, grammarAccess.getEntityAccess().getDiscriminatorColumnKeyword_7_2_8_0());
                    	    									
                    	    otherlv_39=(Token)match(input,21,FOLLOW_4); 

                    	    										newLeafNode(otherlv_39, grammarAccess.getEntityAccess().getEqualsSignKeyword_7_2_8_1());
                    	    									
                    	    // InternalContextMappingDSL.g:8353:10: ( (lv_discriminatorColumn_40_0= RULE_STRING ) )
                    	    // InternalContextMappingDSL.g:8354:11: (lv_discriminatorColumn_40_0= RULE_STRING )
                    	    {
                    	    // InternalContextMappingDSL.g:8354:11: (lv_discriminatorColumn_40_0= RULE_STRING )
                    	    // InternalContextMappingDSL.g:8355:12: lv_discriminatorColumn_40_0= RULE_STRING
                    	    {
                    	    lv_discriminatorColumn_40_0=(Token)match(input,RULE_STRING,FOLLOW_126); 

                    	    												newLeafNode(lv_discriminatorColumn_40_0, grammarAccess.getEntityAccess().getDiscriminatorColumnSTRINGTerminalRuleCall_7_2_8_2_0());
                    	    											

                    	    												if (current==null) {
                    	    													current = createModelElement(grammarAccess.getEntityRule());
                    	    												}
                    	    												setWithLastConsumed(
                    	    													current,
                    	    													"discriminatorColumn",
                    	    													lv_discriminatorColumn_40_0,
                    	    													"org.eclipse.xtext.common.Terminals.STRING");
                    	    											

                    	    }


                    	    }


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getEntityAccess().getUnorderedGroup_7_2());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 10 :
                    	    // InternalContextMappingDSL.g:8377:5: ({...}? => ( ({...}? => (otherlv_41= 'discriminatorType' otherlv_42= '=' ( (lv_discriminatorType_43_0= ruleDiscriminatorType ) ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:8377:5: ({...}? => ( ({...}? => (otherlv_41= 'discriminatorType' otherlv_42= '=' ( (lv_discriminatorType_43_0= ruleDiscriminatorType ) ) ) ) ) )
                    	    // InternalContextMappingDSL.g:8378:6: {...}? => ( ({...}? => (otherlv_41= 'discriminatorType' otherlv_42= '=' ( (lv_discriminatorType_43_0= ruleDiscriminatorType ) ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getEntityAccess().getUnorderedGroup_7_2(), 9) ) {
                    	        throw new FailedPredicateException(input, "ruleEntity", "getUnorderedGroupHelper().canSelect(grammarAccess.getEntityAccess().getUnorderedGroup_7_2(), 9)");
                    	    }
                    	    // InternalContextMappingDSL.g:8378:106: ( ({...}? => (otherlv_41= 'discriminatorType' otherlv_42= '=' ( (lv_discriminatorType_43_0= ruleDiscriminatorType ) ) ) ) )
                    	    // InternalContextMappingDSL.g:8379:7: ({...}? => (otherlv_41= 'discriminatorType' otherlv_42= '=' ( (lv_discriminatorType_43_0= ruleDiscriminatorType ) ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getEntityAccess().getUnorderedGroup_7_2(), 9);
                    	    						
                    	    // InternalContextMappingDSL.g:8382:10: ({...}? => (otherlv_41= 'discriminatorType' otherlv_42= '=' ( (lv_discriminatorType_43_0= ruleDiscriminatorType ) ) ) )
                    	    // InternalContextMappingDSL.g:8382:11: {...}? => (otherlv_41= 'discriminatorType' otherlv_42= '=' ( (lv_discriminatorType_43_0= ruleDiscriminatorType ) ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleEntity", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:8382:20: (otherlv_41= 'discriminatorType' otherlv_42= '=' ( (lv_discriminatorType_43_0= ruleDiscriminatorType ) ) )
                    	    // InternalContextMappingDSL.g:8382:21: otherlv_41= 'discriminatorType' otherlv_42= '=' ( (lv_discriminatorType_43_0= ruleDiscriminatorType ) )
                    	    {
                    	    otherlv_41=(Token)match(input,115,FOLLOW_81); 

                    	    										newLeafNode(otherlv_41, grammarAccess.getEntityAccess().getDiscriminatorTypeKeyword_7_2_9_0());
                    	    									
                    	    otherlv_42=(Token)match(input,21,FOLLOW_130); 

                    	    										newLeafNode(otherlv_42, grammarAccess.getEntityAccess().getEqualsSignKeyword_7_2_9_1());
                    	    									
                    	    // InternalContextMappingDSL.g:8390:10: ( (lv_discriminatorType_43_0= ruleDiscriminatorType ) )
                    	    // InternalContextMappingDSL.g:8391:11: (lv_discriminatorType_43_0= ruleDiscriminatorType )
                    	    {
                    	    // InternalContextMappingDSL.g:8391:11: (lv_discriminatorType_43_0= ruleDiscriminatorType )
                    	    // InternalContextMappingDSL.g:8392:12: lv_discriminatorType_43_0= ruleDiscriminatorType
                    	    {

                    	    												newCompositeNode(grammarAccess.getEntityAccess().getDiscriminatorTypeDiscriminatorTypeEnumRuleCall_7_2_9_2_0());
                    	    											
                    	    pushFollow(FOLLOW_126);
                    	    lv_discriminatorType_43_0=ruleDiscriminatorType();

                    	    state._fsp--;


                    	    												if (current==null) {
                    	    													current = createModelElementForParent(grammarAccess.getEntityRule());
                    	    												}
                    	    												set(
                    	    													current,
                    	    													"discriminatorType",
                    	    													lv_discriminatorType_43_0,
                    	    													"org.contextmapper.tactic.dsl.TacticDDDLanguage.DiscriminatorType");
                    	    												afterParserOrEnumRuleCall();
                    	    											

                    	    }


                    	    }


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getEntityAccess().getUnorderedGroup_7_2());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 11 :
                    	    // InternalContextMappingDSL.g:8415:5: ({...}? => ( ({...}? => (otherlv_44= 'discriminatorLength' otherlv_45= '=' ( (lv_discriminatorLength_46_0= RULE_STRING ) ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:8415:5: ({...}? => ( ({...}? => (otherlv_44= 'discriminatorLength' otherlv_45= '=' ( (lv_discriminatorLength_46_0= RULE_STRING ) ) ) ) ) )
                    	    // InternalContextMappingDSL.g:8416:6: {...}? => ( ({...}? => (otherlv_44= 'discriminatorLength' otherlv_45= '=' ( (lv_discriminatorLength_46_0= RULE_STRING ) ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getEntityAccess().getUnorderedGroup_7_2(), 10) ) {
                    	        throw new FailedPredicateException(input, "ruleEntity", "getUnorderedGroupHelper().canSelect(grammarAccess.getEntityAccess().getUnorderedGroup_7_2(), 10)");
                    	    }
                    	    // InternalContextMappingDSL.g:8416:107: ( ({...}? => (otherlv_44= 'discriminatorLength' otherlv_45= '=' ( (lv_discriminatorLength_46_0= RULE_STRING ) ) ) ) )
                    	    // InternalContextMappingDSL.g:8417:7: ({...}? => (otherlv_44= 'discriminatorLength' otherlv_45= '=' ( (lv_discriminatorLength_46_0= RULE_STRING ) ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getEntityAccess().getUnorderedGroup_7_2(), 10);
                    	    						
                    	    // InternalContextMappingDSL.g:8420:10: ({...}? => (otherlv_44= 'discriminatorLength' otherlv_45= '=' ( (lv_discriminatorLength_46_0= RULE_STRING ) ) ) )
                    	    // InternalContextMappingDSL.g:8420:11: {...}? => (otherlv_44= 'discriminatorLength' otherlv_45= '=' ( (lv_discriminatorLength_46_0= RULE_STRING ) ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleEntity", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:8420:20: (otherlv_44= 'discriminatorLength' otherlv_45= '=' ( (lv_discriminatorLength_46_0= RULE_STRING ) ) )
                    	    // InternalContextMappingDSL.g:8420:21: otherlv_44= 'discriminatorLength' otherlv_45= '=' ( (lv_discriminatorLength_46_0= RULE_STRING ) )
                    	    {
                    	    otherlv_44=(Token)match(input,116,FOLLOW_81); 

                    	    										newLeafNode(otherlv_44, grammarAccess.getEntityAccess().getDiscriminatorLengthKeyword_7_2_10_0());
                    	    									
                    	    otherlv_45=(Token)match(input,21,FOLLOW_4); 

                    	    										newLeafNode(otherlv_45, grammarAccess.getEntityAccess().getEqualsSignKeyword_7_2_10_1());
                    	    									
                    	    // InternalContextMappingDSL.g:8428:10: ( (lv_discriminatorLength_46_0= RULE_STRING ) )
                    	    // InternalContextMappingDSL.g:8429:11: (lv_discriminatorLength_46_0= RULE_STRING )
                    	    {
                    	    // InternalContextMappingDSL.g:8429:11: (lv_discriminatorLength_46_0= RULE_STRING )
                    	    // InternalContextMappingDSL.g:8430:12: lv_discriminatorLength_46_0= RULE_STRING
                    	    {
                    	    lv_discriminatorLength_46_0=(Token)match(input,RULE_STRING,FOLLOW_126); 

                    	    												newLeafNode(lv_discriminatorLength_46_0, grammarAccess.getEntityAccess().getDiscriminatorLengthSTRINGTerminalRuleCall_7_2_10_2_0());
                    	    											

                    	    												if (current==null) {
                    	    													current = createModelElement(grammarAccess.getEntityRule());
                    	    												}
                    	    												setWithLastConsumed(
                    	    													current,
                    	    													"discriminatorLength",
                    	    													lv_discriminatorLength_46_0,
                    	    													"org.eclipse.xtext.common.Terminals.STRING");
                    	    											

                    	    }


                    	    }


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getEntityAccess().getUnorderedGroup_7_2());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 12 :
                    	    // InternalContextMappingDSL.g:8452:5: ({...}? => ( ({...}? => (otherlv_47= 'inheritanceType' otherlv_48= '=' ( (lv_inheritanceType_49_0= ruleInheritanceType ) ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:8452:5: ({...}? => ( ({...}? => (otherlv_47= 'inheritanceType' otherlv_48= '=' ( (lv_inheritanceType_49_0= ruleInheritanceType ) ) ) ) ) )
                    	    // InternalContextMappingDSL.g:8453:6: {...}? => ( ({...}? => (otherlv_47= 'inheritanceType' otherlv_48= '=' ( (lv_inheritanceType_49_0= ruleInheritanceType ) ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getEntityAccess().getUnorderedGroup_7_2(), 11) ) {
                    	        throw new FailedPredicateException(input, "ruleEntity", "getUnorderedGroupHelper().canSelect(grammarAccess.getEntityAccess().getUnorderedGroup_7_2(), 11)");
                    	    }
                    	    // InternalContextMappingDSL.g:8453:107: ( ({...}? => (otherlv_47= 'inheritanceType' otherlv_48= '=' ( (lv_inheritanceType_49_0= ruleInheritanceType ) ) ) ) )
                    	    // InternalContextMappingDSL.g:8454:7: ({...}? => (otherlv_47= 'inheritanceType' otherlv_48= '=' ( (lv_inheritanceType_49_0= ruleInheritanceType ) ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getEntityAccess().getUnorderedGroup_7_2(), 11);
                    	    						
                    	    // InternalContextMappingDSL.g:8457:10: ({...}? => (otherlv_47= 'inheritanceType' otherlv_48= '=' ( (lv_inheritanceType_49_0= ruleInheritanceType ) ) ) )
                    	    // InternalContextMappingDSL.g:8457:11: {...}? => (otherlv_47= 'inheritanceType' otherlv_48= '=' ( (lv_inheritanceType_49_0= ruleInheritanceType ) ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleEntity", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:8457:20: (otherlv_47= 'inheritanceType' otherlv_48= '=' ( (lv_inheritanceType_49_0= ruleInheritanceType ) ) )
                    	    // InternalContextMappingDSL.g:8457:21: otherlv_47= 'inheritanceType' otherlv_48= '=' ( (lv_inheritanceType_49_0= ruleInheritanceType ) )
                    	    {
                    	    otherlv_47=(Token)match(input,117,FOLLOW_81); 

                    	    										newLeafNode(otherlv_47, grammarAccess.getEntityAccess().getInheritanceTypeKeyword_7_2_11_0());
                    	    									
                    	    otherlv_48=(Token)match(input,21,FOLLOW_131); 

                    	    										newLeafNode(otherlv_48, grammarAccess.getEntityAccess().getEqualsSignKeyword_7_2_11_1());
                    	    									
                    	    // InternalContextMappingDSL.g:8465:10: ( (lv_inheritanceType_49_0= ruleInheritanceType ) )
                    	    // InternalContextMappingDSL.g:8466:11: (lv_inheritanceType_49_0= ruleInheritanceType )
                    	    {
                    	    // InternalContextMappingDSL.g:8466:11: (lv_inheritanceType_49_0= ruleInheritanceType )
                    	    // InternalContextMappingDSL.g:8467:12: lv_inheritanceType_49_0= ruleInheritanceType
                    	    {

                    	    												newCompositeNode(grammarAccess.getEntityAccess().getInheritanceTypeInheritanceTypeEnumRuleCall_7_2_11_2_0());
                    	    											
                    	    pushFollow(FOLLOW_126);
                    	    lv_inheritanceType_49_0=ruleInheritanceType();

                    	    state._fsp--;


                    	    												if (current==null) {
                    	    													current = createModelElementForParent(grammarAccess.getEntityRule());
                    	    												}
                    	    												set(
                    	    													current,
                    	    													"inheritanceType",
                    	    													lv_inheritanceType_49_0,
                    	    													"org.contextmapper.tactic.dsl.TacticDDDLanguage.InheritanceType");
                    	    												afterParserOrEnumRuleCall();
                    	    											

                    	    }


                    	    }


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getEntityAccess().getUnorderedGroup_7_2());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 13 :
                    	    // InternalContextMappingDSL.g:8490:5: ({...}? => ( ({...}? => (otherlv_50= 'validate' otherlv_51= '=' ( (lv_validate_52_0= RULE_STRING ) ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:8490:5: ({...}? => ( ({...}? => (otherlv_50= 'validate' otherlv_51= '=' ( (lv_validate_52_0= RULE_STRING ) ) ) ) ) )
                    	    // InternalContextMappingDSL.g:8491:6: {...}? => ( ({...}? => (otherlv_50= 'validate' otherlv_51= '=' ( (lv_validate_52_0= RULE_STRING ) ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getEntityAccess().getUnorderedGroup_7_2(), 12) ) {
                    	        throw new FailedPredicateException(input, "ruleEntity", "getUnorderedGroupHelper().canSelect(grammarAccess.getEntityAccess().getUnorderedGroup_7_2(), 12)");
                    	    }
                    	    // InternalContextMappingDSL.g:8491:107: ( ({...}? => (otherlv_50= 'validate' otherlv_51= '=' ( (lv_validate_52_0= RULE_STRING ) ) ) ) )
                    	    // InternalContextMappingDSL.g:8492:7: ({...}? => (otherlv_50= 'validate' otherlv_51= '=' ( (lv_validate_52_0= RULE_STRING ) ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getEntityAccess().getUnorderedGroup_7_2(), 12);
                    	    						
                    	    // InternalContextMappingDSL.g:8495:10: ({...}? => (otherlv_50= 'validate' otherlv_51= '=' ( (lv_validate_52_0= RULE_STRING ) ) ) )
                    	    // InternalContextMappingDSL.g:8495:11: {...}? => (otherlv_50= 'validate' otherlv_51= '=' ( (lv_validate_52_0= RULE_STRING ) ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleEntity", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:8495:20: (otherlv_50= 'validate' otherlv_51= '=' ( (lv_validate_52_0= RULE_STRING ) ) )
                    	    // InternalContextMappingDSL.g:8495:21: otherlv_50= 'validate' otherlv_51= '=' ( (lv_validate_52_0= RULE_STRING ) )
                    	    {
                    	    otherlv_50=(Token)match(input,118,FOLLOW_81); 

                    	    										newLeafNode(otherlv_50, grammarAccess.getEntityAccess().getValidateKeyword_7_2_12_0());
                    	    									
                    	    otherlv_51=(Token)match(input,21,FOLLOW_4); 

                    	    										newLeafNode(otherlv_51, grammarAccess.getEntityAccess().getEqualsSignKeyword_7_2_12_1());
                    	    									
                    	    // InternalContextMappingDSL.g:8503:10: ( (lv_validate_52_0= RULE_STRING ) )
                    	    // InternalContextMappingDSL.g:8504:11: (lv_validate_52_0= RULE_STRING )
                    	    {
                    	    // InternalContextMappingDSL.g:8504:11: (lv_validate_52_0= RULE_STRING )
                    	    // InternalContextMappingDSL.g:8505:12: lv_validate_52_0= RULE_STRING
                    	    {
                    	    lv_validate_52_0=(Token)match(input,RULE_STRING,FOLLOW_126); 

                    	    												newLeafNode(lv_validate_52_0, grammarAccess.getEntityAccess().getValidateSTRINGTerminalRuleCall_7_2_12_2_0());
                    	    											

                    	    												if (current==null) {
                    	    													current = createModelElement(grammarAccess.getEntityRule());
                    	    												}
                    	    												setWithLastConsumed(
                    	    													current,
                    	    													"validate",
                    	    													lv_validate_52_0,
                    	    													"org.eclipse.xtext.common.Terminals.STRING");
                    	    											

                    	    }


                    	    }


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getEntityAccess().getUnorderedGroup_7_2());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 14 :
                    	    // InternalContextMappingDSL.g:8527:5: ({...}? => ( ({...}? => ( (lv_aggregateRoot_53_0= 'aggregateRoot' ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:8527:5: ({...}? => ( ({...}? => ( (lv_aggregateRoot_53_0= 'aggregateRoot' ) ) ) ) )
                    	    // InternalContextMappingDSL.g:8528:6: {...}? => ( ({...}? => ( (lv_aggregateRoot_53_0= 'aggregateRoot' ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getEntityAccess().getUnorderedGroup_7_2(), 13) ) {
                    	        throw new FailedPredicateException(input, "ruleEntity", "getUnorderedGroupHelper().canSelect(grammarAccess.getEntityAccess().getUnorderedGroup_7_2(), 13)");
                    	    }
                    	    // InternalContextMappingDSL.g:8528:107: ( ({...}? => ( (lv_aggregateRoot_53_0= 'aggregateRoot' ) ) ) )
                    	    // InternalContextMappingDSL.g:8529:7: ({...}? => ( (lv_aggregateRoot_53_0= 'aggregateRoot' ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getEntityAccess().getUnorderedGroup_7_2(), 13);
                    	    						
                    	    // InternalContextMappingDSL.g:8532:10: ({...}? => ( (lv_aggregateRoot_53_0= 'aggregateRoot' ) ) )
                    	    // InternalContextMappingDSL.g:8532:11: {...}? => ( (lv_aggregateRoot_53_0= 'aggregateRoot' ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleEntity", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:8532:20: ( (lv_aggregateRoot_53_0= 'aggregateRoot' ) )
                    	    // InternalContextMappingDSL.g:8532:21: (lv_aggregateRoot_53_0= 'aggregateRoot' )
                    	    {
                    	    // InternalContextMappingDSL.g:8532:21: (lv_aggregateRoot_53_0= 'aggregateRoot' )
                    	    // InternalContextMappingDSL.g:8533:11: lv_aggregateRoot_53_0= 'aggregateRoot'
                    	    {
                    	    lv_aggregateRoot_53_0=(Token)match(input,119,FOLLOW_126); 

                    	    											newLeafNode(lv_aggregateRoot_53_0, grammarAccess.getEntityAccess().getAggregateRootAggregateRootKeyword_7_2_13_0());
                    	    										

                    	    											if (current==null) {
                    	    												current = createModelElement(grammarAccess.getEntityRule());
                    	    											}
                    	    											setWithLastConsumed(current, "aggregateRoot", true, "aggregateRoot");
                    	    										

                    	    }


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getEntityAccess().getUnorderedGroup_7_2());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 15 :
                    	    // InternalContextMappingDSL.g:8550:5: ({...}? => ( ({...}? => (otherlv_54= 'belongsTo' ( (otherlv_55= '@' )? ( (otherlv_56= RULE_ID ) ) ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:8550:5: ({...}? => ( ({...}? => (otherlv_54= 'belongsTo' ( (otherlv_55= '@' )? ( (otherlv_56= RULE_ID ) ) ) ) ) ) )
                    	    // InternalContextMappingDSL.g:8551:6: {...}? => ( ({...}? => (otherlv_54= 'belongsTo' ( (otherlv_55= '@' )? ( (otherlv_56= RULE_ID ) ) ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getEntityAccess().getUnorderedGroup_7_2(), 14) ) {
                    	        throw new FailedPredicateException(input, "ruleEntity", "getUnorderedGroupHelper().canSelect(grammarAccess.getEntityAccess().getUnorderedGroup_7_2(), 14)");
                    	    }
                    	    // InternalContextMappingDSL.g:8551:107: ( ({...}? => (otherlv_54= 'belongsTo' ( (otherlv_55= '@' )? ( (otherlv_56= RULE_ID ) ) ) ) ) )
                    	    // InternalContextMappingDSL.g:8552:7: ({...}? => (otherlv_54= 'belongsTo' ( (otherlv_55= '@' )? ( (otherlv_56= RULE_ID ) ) ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getEntityAccess().getUnorderedGroup_7_2(), 14);
                    	    						
                    	    // InternalContextMappingDSL.g:8555:10: ({...}? => (otherlv_54= 'belongsTo' ( (otherlv_55= '@' )? ( (otherlv_56= RULE_ID ) ) ) ) )
                    	    // InternalContextMappingDSL.g:8555:11: {...}? => (otherlv_54= 'belongsTo' ( (otherlv_55= '@' )? ( (otherlv_56= RULE_ID ) ) ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleEntity", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:8555:20: (otherlv_54= 'belongsTo' ( (otherlv_55= '@' )? ( (otherlv_56= RULE_ID ) ) ) )
                    	    // InternalContextMappingDSL.g:8555:21: otherlv_54= 'belongsTo' ( (otherlv_55= '@' )? ( (otherlv_56= RULE_ID ) ) )
                    	    {
                    	    otherlv_54=(Token)match(input,120,FOLLOW_96); 

                    	    										newLeafNode(otherlv_54, grammarAccess.getEntityAccess().getBelongsToKeyword_7_2_14_0());
                    	    									
                    	    // InternalContextMappingDSL.g:8559:10: ( (otherlv_55= '@' )? ( (otherlv_56= RULE_ID ) ) )
                    	    // InternalContextMappingDSL.g:8560:11: (otherlv_55= '@' )? ( (otherlv_56= RULE_ID ) )
                    	    {
                    	    // InternalContextMappingDSL.g:8560:11: (otherlv_55= '@' )?
                    	    int alt214=2;
                    	    int LA214_0 = input.LA(1);

                    	    if ( (LA214_0==79) ) {
                    	        alt214=1;
                    	    }
                    	    switch (alt214) {
                    	        case 1 :
                    	            // InternalContextMappingDSL.g:8561:12: otherlv_55= '@'
                    	            {
                    	            otherlv_55=(Token)match(input,79,FOLLOW_10); 

                    	            												newLeafNode(otherlv_55, grammarAccess.getEntityAccess().getCommercialAtKeyword_7_2_14_1_0());
                    	            											

                    	            }
                    	            break;

                    	    }

                    	    // InternalContextMappingDSL.g:8566:11: ( (otherlv_56= RULE_ID ) )
                    	    // InternalContextMappingDSL.g:8567:12: (otherlv_56= RULE_ID )
                    	    {
                    	    // InternalContextMappingDSL.g:8567:12: (otherlv_56= RULE_ID )
                    	    // InternalContextMappingDSL.g:8568:13: otherlv_56= RULE_ID
                    	    {

                    	    													if (current==null) {
                    	    														current = createModelElement(grammarAccess.getEntityRule());
                    	    													}
                    	    												
                    	    otherlv_56=(Token)match(input,RULE_ID,FOLLOW_126); 

                    	    													newLeafNode(otherlv_56, grammarAccess.getEntityAccess().getBelongsToDomainObjectCrossReference_7_2_14_1_1_0());
                    	    												

                    	    }


                    	    }


                    	    }


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getEntityAccess().getUnorderedGroup_7_2());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop215;
                        }
                    } while (true);


                    }


                    }

                     
                    					  getUnorderedGroupHelper().leave(grammarAccess.getEntityAccess().getUnorderedGroup_7_2());
                    					

                    }

                    // InternalContextMappingDSL.g:8593:4: ( ( (lv_attributes_57_0= ruleAttribute ) ) | ( (lv_references_58_0= ruleReference ) ) | ( (lv_operations_59_0= ruleDomainObjectOperation ) ) )*
                    loop216:
                    do {
                        int alt216=4;
                        switch ( input.LA(1) ) {
                        case RULE_STRING:
                            {
                            switch ( input.LA(2) ) {
                            case RULE_ID:
                            case 109:
                            case 170:
                            case 171:
                            case 172:
                            case 173:
                            case 174:
                            case 175:
                            case 176:
                            case 177:
                            case 178:
                            case 179:
                            case 180:
                            case 181:
                            case 182:
                            case 183:
                            case 184:
                            case 185:
                            case 186:
                            case 187:
                            case 188:
                            case 189:
                            case 190:
                            case 191:
                            case 218:
                            case 228:
                            case 229:
                            case 230:
                            case 231:
                            case 232:
                            case 233:
                            case 234:
                                {
                                alt216=1;
                                }
                                break;
                            case 127:
                            case 128:
                                {
                                alt216=3;
                                }
                                break;
                            case RULE_REF:
                                {
                                alt216=2;
                                }
                                break;

                            }

                            }
                            break;
                        case RULE_ID:
                        case 109:
                        case 170:
                        case 171:
                        case 172:
                        case 173:
                        case 174:
                        case 175:
                        case 176:
                        case 177:
                        case 178:
                        case 179:
                        case 180:
                        case 181:
                        case 182:
                        case 183:
                        case 184:
                        case 185:
                        case 186:
                        case 187:
                        case 188:
                        case 189:
                        case 190:
                        case 191:
                        case 218:
                        case 228:
                        case 229:
                        case 230:
                        case 231:
                        case 232:
                        case 233:
                        case 234:
                            {
                            alt216=1;
                            }
                            break;
                        case RULE_REF:
                            {
                            alt216=2;
                            }
                            break;
                        case 127:
                        case 128:
                            {
                            alt216=3;
                            }
                            break;

                        }

                        switch (alt216) {
                    	case 1 :
                    	    // InternalContextMappingDSL.g:8594:5: ( (lv_attributes_57_0= ruleAttribute ) )
                    	    {
                    	    // InternalContextMappingDSL.g:8594:5: ( (lv_attributes_57_0= ruleAttribute ) )
                    	    // InternalContextMappingDSL.g:8595:6: (lv_attributes_57_0= ruleAttribute )
                    	    {
                    	    // InternalContextMappingDSL.g:8595:6: (lv_attributes_57_0= ruleAttribute )
                    	    // InternalContextMappingDSL.g:8596:7: lv_attributes_57_0= ruleAttribute
                    	    {

                    	    							newCompositeNode(grammarAccess.getEntityAccess().getAttributesAttributeParserRuleCall_7_3_0_0());
                    	    						
                    	    pushFollow(FOLLOW_132);
                    	    lv_attributes_57_0=ruleAttribute();

                    	    state._fsp--;


                    	    							if (current==null) {
                    	    								current = createModelElementForParent(grammarAccess.getEntityRule());
                    	    							}
                    	    							add(
                    	    								current,
                    	    								"attributes",
                    	    								lv_attributes_57_0,
                    	    								"org.contextmapper.tactic.dsl.TacticDDDLanguage.Attribute");
                    	    							afterParserOrEnumRuleCall();
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 2 :
                    	    // InternalContextMappingDSL.g:8614:5: ( (lv_references_58_0= ruleReference ) )
                    	    {
                    	    // InternalContextMappingDSL.g:8614:5: ( (lv_references_58_0= ruleReference ) )
                    	    // InternalContextMappingDSL.g:8615:6: (lv_references_58_0= ruleReference )
                    	    {
                    	    // InternalContextMappingDSL.g:8615:6: (lv_references_58_0= ruleReference )
                    	    // InternalContextMappingDSL.g:8616:7: lv_references_58_0= ruleReference
                    	    {

                    	    							newCompositeNode(grammarAccess.getEntityAccess().getReferencesReferenceParserRuleCall_7_3_1_0());
                    	    						
                    	    pushFollow(FOLLOW_132);
                    	    lv_references_58_0=ruleReference();

                    	    state._fsp--;


                    	    							if (current==null) {
                    	    								current = createModelElementForParent(grammarAccess.getEntityRule());
                    	    							}
                    	    							add(
                    	    								current,
                    	    								"references",
                    	    								lv_references_58_0,
                    	    								"org.contextmapper.tactic.dsl.TacticDDDLanguage.Reference");
                    	    							afterParserOrEnumRuleCall();
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 3 :
                    	    // InternalContextMappingDSL.g:8634:5: ( (lv_operations_59_0= ruleDomainObjectOperation ) )
                    	    {
                    	    // InternalContextMappingDSL.g:8634:5: ( (lv_operations_59_0= ruleDomainObjectOperation ) )
                    	    // InternalContextMappingDSL.g:8635:6: (lv_operations_59_0= ruleDomainObjectOperation )
                    	    {
                    	    // InternalContextMappingDSL.g:8635:6: (lv_operations_59_0= ruleDomainObjectOperation )
                    	    // InternalContextMappingDSL.g:8636:7: lv_operations_59_0= ruleDomainObjectOperation
                    	    {

                    	    							newCompositeNode(grammarAccess.getEntityAccess().getOperationsDomainObjectOperationParserRuleCall_7_3_2_0());
                    	    						
                    	    pushFollow(FOLLOW_132);
                    	    lv_operations_59_0=ruleDomainObjectOperation();

                    	    state._fsp--;


                    	    							if (current==null) {
                    	    								current = createModelElementForParent(grammarAccess.getEntityRule());
                    	    							}
                    	    							add(
                    	    								current,
                    	    								"operations",
                    	    								lv_operations_59_0,
                    	    								"org.contextmapper.tactic.dsl.TacticDDDLanguage.DomainObjectOperation");
                    	    							afterParserOrEnumRuleCall();
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop216;
                        }
                    } while (true);

                    // InternalContextMappingDSL.g:8654:4: ( (lv_repository_60_0= ruleRepository ) )?
                    int alt217=2;
                    int LA217_0 = input.LA(1);

                    if ( (LA217_0==RULE_STRING||LA217_0==166) ) {
                        alt217=1;
                    }
                    switch (alt217) {
                        case 1 :
                            // InternalContextMappingDSL.g:8655:5: (lv_repository_60_0= ruleRepository )
                            {
                            // InternalContextMappingDSL.g:8655:5: (lv_repository_60_0= ruleRepository )
                            // InternalContextMappingDSL.g:8656:6: lv_repository_60_0= ruleRepository
                            {

                            						newCompositeNode(grammarAccess.getEntityAccess().getRepositoryRepositoryParserRuleCall_7_4_0());
                            					
                            pushFollow(FOLLOW_35);
                            lv_repository_60_0=ruleRepository();

                            state._fsp--;


                            						if (current==null) {
                            							current = createModelElementForParent(grammarAccess.getEntityRule());
                            						}
                            						set(
                            							current,
                            							"repository",
                            							lv_repository_60_0,
                            							"org.contextmapper.tactic.dsl.TacticDDDLanguage.Repository");
                            						afterParserOrEnumRuleCall();
                            					

                            }


                            }
                            break;

                    }

                    otherlv_61=(Token)match(input,RULE_CLOSE,FOLLOW_2); 

                    				newLeafNode(otherlv_61, grammarAccess.getEntityAccess().getRightCurlyBracketKeyword_7_5());
                    			

                    }
                    break;

            }


            }


            }


            	leaveRule();

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleEntity"


    // $ANTLR start "entryRuleValueObject"
    // InternalContextMappingDSL.g:8682:1: entryRuleValueObject returns [EObject current=null] : iv_ruleValueObject= ruleValueObject EOF ;
    public final EObject entryRuleValueObject() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleValueObject = null;


        try {
            // InternalContextMappingDSL.g:8682:52: (iv_ruleValueObject= ruleValueObject EOF )
            // InternalContextMappingDSL.g:8683:2: iv_ruleValueObject= ruleValueObject EOF
            {
             newCompositeNode(grammarAccess.getValueObjectRule()); 
            pushFollow(FOLLOW_1);
            iv_ruleValueObject=ruleValueObject();

            state._fsp--;

             current =iv_ruleValueObject; 
            match(input,EOF,FOLLOW_2); 

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleValueObject"


    // $ANTLR start "ruleValueObject"
    // InternalContextMappingDSL.g:8689:1: ruleValueObject returns [EObject current=null] : ( ( (lv_comment_0_0= RULE_SL_COMMENT ) )? ( (lv_doc_1_0= RULE_STRING ) )? ( (lv_abstract_2_0= 'abstract' ) )? otherlv_3= 'ValueObject' ( (lv_name_4_0= RULE_ID ) ) (otherlv_5= 'extends' ( (otherlv_6= '@' ( (otherlv_7= RULE_ID ) ) ) | ( (lv_extendsName_8_0= ruleJavaIdentifier ) ) ) )? (otherlv_9= 'with' (otherlv_10= '@' )? ( (otherlv_11= RULE_ID ) ) )* (otherlv_12= '{' (otherlv_13= 'package' otherlv_14= '=' ( (lv_package_15_0= ruleJavaIdentifier ) ) )? ( ( ( ( ({...}? => ( ({...}? => ( ( ( (lv_notOptimisticLocking_17_0= RULE_NOT ) ) otherlv_18= 'optimisticLocking' ) | otherlv_19= 'optimisticLocking' ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notImmutable_20_0= RULE_NOT ) ) otherlv_21= 'immutable' ) | otherlv_22= 'immutable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_cache_23_0= 'cache' ) ) | (this_NOT_24= RULE_NOT otherlv_25= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_26_0= 'gap' ) ) | ( (lv_noGapClass_27_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_28_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'hint' otherlv_30= '=' ( (lv_hint_31_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'databaseTable' otherlv_33= '=' ( (lv_databaseTable_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'discriminatorValue' otherlv_36= '=' ( (lv_discriminatorValue_37_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'discriminatorColumn' otherlv_39= '=' ( (lv_discriminatorColumn_40_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'discriminatorType' otherlv_42= '=' ( (lv_discriminatorType_43_0= ruleDiscriminatorType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_44= 'discriminatorLength' otherlv_45= '=' ( (lv_discriminatorLength_46_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_47= 'inheritanceType' otherlv_48= '=' ( (lv_inheritanceType_49_0= ruleInheritanceType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_50= 'validate' otherlv_51= '=' ( (lv_validate_52_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_persistent_53_0= 'persistent' ) ) | ( ( (lv_notPersistent_54_0= RULE_NOT ) ) otherlv_55= 'persistent' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_aggregateRoot_56_0= 'aggregateRoot' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_57= 'belongsTo' ( (otherlv_58= '@' )? ( (otherlv_59= RULE_ID ) ) ) ) ) ) ) )* ) ) ) ( ( (lv_attributes_60_0= ruleAttribute ) ) | ( (lv_references_61_0= ruleReference ) ) | ( (lv_operations_62_0= ruleDomainObjectOperation ) ) )* ( (lv_repository_63_0= ruleRepository ) )? otherlv_64= '}' )? ) ;
    public final EObject ruleValueObject() throws RecognitionException {
        EObject current = null;

        Token lv_comment_0_0=null;
        Token lv_doc_1_0=null;
        Token lv_abstract_2_0=null;
        Token otherlv_3=null;
        Token lv_name_4_0=null;
        Token otherlv_5=null;
        Token otherlv_6=null;
        Token otherlv_7=null;
        Token otherlv_9=null;
        Token otherlv_10=null;
        Token otherlv_11=null;
        Token otherlv_12=null;
        Token otherlv_13=null;
        Token otherlv_14=null;
        Token lv_notOptimisticLocking_17_0=null;
        Token otherlv_18=null;
        Token otherlv_19=null;
        Token lv_notImmutable_20_0=null;
        Token otherlv_21=null;
        Token otherlv_22=null;
        Token lv_cache_23_0=null;
        Token this_NOT_24=null;
        Token otherlv_25=null;
        Token lv_gapClass_26_0=null;
        Token lv_noGapClass_27_0=null;
        Token lv_scaffold_28_0=null;
        Token otherlv_29=null;
        Token otherlv_30=null;
        Token lv_hint_31_0=null;
        Token otherlv_32=null;
        Token otherlv_33=null;
        Token lv_databaseTable_34_0=null;
        Token otherlv_35=null;
        Token otherlv_36=null;
        Token lv_discriminatorValue_37_0=null;
        Token otherlv_38=null;
        Token otherlv_39=null;
        Token lv_discriminatorColumn_40_0=null;
        Token otherlv_41=null;
        Token otherlv_42=null;
        Token otherlv_44=null;
        Token otherlv_45=null;
        Token lv_discriminatorLength_46_0=null;
        Token otherlv_47=null;
        Token otherlv_48=null;
        Token otherlv_50=null;
        Token otherlv_51=null;
        Token lv_validate_52_0=null;
        Token lv_persistent_53_0=null;
        Token lv_notPersistent_54_0=null;
        Token otherlv_55=null;
        Token lv_aggregateRoot_56_0=null;
        Token otherlv_57=null;
        Token otherlv_58=null;
        Token otherlv_59=null;
        Token otherlv_64=null;
        AntlrDatatypeRuleToken lv_extendsName_8_0 = null;

        AntlrDatatypeRuleToken lv_package_15_0 = null;

        Enumerator lv_discriminatorType_43_0 = null;

        Enumerator lv_inheritanceType_49_0 = null;

        EObject lv_attributes_60_0 = null;

        EObject lv_references_61_0 = null;

        EObject lv_operations_62_0 = null;

        EObject lv_repository_63_0 = null;



        	enterRule();

        try {
            // InternalContextMappingDSL.g:8695:2: ( ( ( (lv_comment_0_0= RULE_SL_COMMENT ) )? ( (lv_doc_1_0= RULE_STRING ) )? ( (lv_abstract_2_0= 'abstract' ) )? otherlv_3= 'ValueObject' ( (lv_name_4_0= RULE_ID ) ) (otherlv_5= 'extends' ( (otherlv_6= '@' ( (otherlv_7= RULE_ID ) ) ) | ( (lv_extendsName_8_0= ruleJavaIdentifier ) ) ) )? (otherlv_9= 'with' (otherlv_10= '@' )? ( (otherlv_11= RULE_ID ) ) )* (otherlv_12= '{' (otherlv_13= 'package' otherlv_14= '=' ( (lv_package_15_0= ruleJavaIdentifier ) ) )? ( ( ( ( ({...}? => ( ({...}? => ( ( ( (lv_notOptimisticLocking_17_0= RULE_NOT ) ) otherlv_18= 'optimisticLocking' ) | otherlv_19= 'optimisticLocking' ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notImmutable_20_0= RULE_NOT ) ) otherlv_21= 'immutable' ) | otherlv_22= 'immutable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_cache_23_0= 'cache' ) ) | (this_NOT_24= RULE_NOT otherlv_25= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_26_0= 'gap' ) ) | ( (lv_noGapClass_27_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_28_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'hint' otherlv_30= '=' ( (lv_hint_31_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'databaseTable' otherlv_33= '=' ( (lv_databaseTable_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'discriminatorValue' otherlv_36= '=' ( (lv_discriminatorValue_37_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'discriminatorColumn' otherlv_39= '=' ( (lv_discriminatorColumn_40_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'discriminatorType' otherlv_42= '=' ( (lv_discriminatorType_43_0= ruleDiscriminatorType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_44= 'discriminatorLength' otherlv_45= '=' ( (lv_discriminatorLength_46_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_47= 'inheritanceType' otherlv_48= '=' ( (lv_inheritanceType_49_0= ruleInheritanceType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_50= 'validate' otherlv_51= '=' ( (lv_validate_52_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_persistent_53_0= 'persistent' ) ) | ( ( (lv_notPersistent_54_0= RULE_NOT ) ) otherlv_55= 'persistent' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_aggregateRoot_56_0= 'aggregateRoot' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_57= 'belongsTo' ( (otherlv_58= '@' )? ( (otherlv_59= RULE_ID ) ) ) ) ) ) ) )* ) ) ) ( ( (lv_attributes_60_0= ruleAttribute ) ) | ( (lv_references_61_0= ruleReference ) ) | ( (lv_operations_62_0= ruleDomainObjectOperation ) ) )* ( (lv_repository_63_0= ruleRepository ) )? otherlv_64= '}' )? ) )
            // InternalContextMappingDSL.g:8696:2: ( ( (lv_comment_0_0= RULE_SL_COMMENT ) )? ( (lv_doc_1_0= RULE_STRING ) )? ( (lv_abstract_2_0= 'abstract' ) )? otherlv_3= 'ValueObject' ( (lv_name_4_0= RULE_ID ) ) (otherlv_5= 'extends' ( (otherlv_6= '@' ( (otherlv_7= RULE_ID ) ) ) | ( (lv_extendsName_8_0= ruleJavaIdentifier ) ) ) )? (otherlv_9= 'with' (otherlv_10= '@' )? ( (otherlv_11= RULE_ID ) ) )* (otherlv_12= '{' (otherlv_13= 'package' otherlv_14= '=' ( (lv_package_15_0= ruleJavaIdentifier ) ) )? ( ( ( ( ({...}? => ( ({...}? => ( ( ( (lv_notOptimisticLocking_17_0= RULE_NOT ) ) otherlv_18= 'optimisticLocking' ) | otherlv_19= 'optimisticLocking' ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notImmutable_20_0= RULE_NOT ) ) otherlv_21= 'immutable' ) | otherlv_22= 'immutable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_cache_23_0= 'cache' ) ) | (this_NOT_24= RULE_NOT otherlv_25= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_26_0= 'gap' ) ) | ( (lv_noGapClass_27_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_28_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'hint' otherlv_30= '=' ( (lv_hint_31_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'databaseTable' otherlv_33= '=' ( (lv_databaseTable_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'discriminatorValue' otherlv_36= '=' ( (lv_discriminatorValue_37_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'discriminatorColumn' otherlv_39= '=' ( (lv_discriminatorColumn_40_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'discriminatorType' otherlv_42= '=' ( (lv_discriminatorType_43_0= ruleDiscriminatorType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_44= 'discriminatorLength' otherlv_45= '=' ( (lv_discriminatorLength_46_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_47= 'inheritanceType' otherlv_48= '=' ( (lv_inheritanceType_49_0= ruleInheritanceType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_50= 'validate' otherlv_51= '=' ( (lv_validate_52_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_persistent_53_0= 'persistent' ) ) | ( ( (lv_notPersistent_54_0= RULE_NOT ) ) otherlv_55= 'persistent' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_aggregateRoot_56_0= 'aggregateRoot' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_57= 'belongsTo' ( (otherlv_58= '@' )? ( (otherlv_59= RULE_ID ) ) ) ) ) ) ) )* ) ) ) ( ( (lv_attributes_60_0= ruleAttribute ) ) | ( (lv_references_61_0= ruleReference ) ) | ( (lv_operations_62_0= ruleDomainObjectOperation ) ) )* ( (lv_repository_63_0= ruleRepository ) )? otherlv_64= '}' )? )
            {
            // InternalContextMappingDSL.g:8696:2: ( ( (lv_comment_0_0= RULE_SL_COMMENT ) )? ( (lv_doc_1_0= RULE_STRING ) )? ( (lv_abstract_2_0= 'abstract' ) )? otherlv_3= 'ValueObject' ( (lv_name_4_0= RULE_ID ) ) (otherlv_5= 'extends' ( (otherlv_6= '@' ( (otherlv_7= RULE_ID ) ) ) | ( (lv_extendsName_8_0= ruleJavaIdentifier ) ) ) )? (otherlv_9= 'with' (otherlv_10= '@' )? ( (otherlv_11= RULE_ID ) ) )* (otherlv_12= '{' (otherlv_13= 'package' otherlv_14= '=' ( (lv_package_15_0= ruleJavaIdentifier ) ) )? ( ( ( ( ({...}? => ( ({...}? => ( ( ( (lv_notOptimisticLocking_17_0= RULE_NOT ) ) otherlv_18= 'optimisticLocking' ) | otherlv_19= 'optimisticLocking' ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notImmutable_20_0= RULE_NOT ) ) otherlv_21= 'immutable' ) | otherlv_22= 'immutable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_cache_23_0= 'cache' ) ) | (this_NOT_24= RULE_NOT otherlv_25= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_26_0= 'gap' ) ) | ( (lv_noGapClass_27_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_28_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'hint' otherlv_30= '=' ( (lv_hint_31_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'databaseTable' otherlv_33= '=' ( (lv_databaseTable_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'discriminatorValue' otherlv_36= '=' ( (lv_discriminatorValue_37_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'discriminatorColumn' otherlv_39= '=' ( (lv_discriminatorColumn_40_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'discriminatorType' otherlv_42= '=' ( (lv_discriminatorType_43_0= ruleDiscriminatorType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_44= 'discriminatorLength' otherlv_45= '=' ( (lv_discriminatorLength_46_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_47= 'inheritanceType' otherlv_48= '=' ( (lv_inheritanceType_49_0= ruleInheritanceType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_50= 'validate' otherlv_51= '=' ( (lv_validate_52_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_persistent_53_0= 'persistent' ) ) | ( ( (lv_notPersistent_54_0= RULE_NOT ) ) otherlv_55= 'persistent' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_aggregateRoot_56_0= 'aggregateRoot' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_57= 'belongsTo' ( (otherlv_58= '@' )? ( (otherlv_59= RULE_ID ) ) ) ) ) ) ) )* ) ) ) ( ( (lv_attributes_60_0= ruleAttribute ) ) | ( (lv_references_61_0= ruleReference ) ) | ( (lv_operations_62_0= ruleDomainObjectOperation ) ) )* ( (lv_repository_63_0= ruleRepository ) )? otherlv_64= '}' )? )
            // InternalContextMappingDSL.g:8697:3: ( (lv_comment_0_0= RULE_SL_COMMENT ) )? ( (lv_doc_1_0= RULE_STRING ) )? ( (lv_abstract_2_0= 'abstract' ) )? otherlv_3= 'ValueObject' ( (lv_name_4_0= RULE_ID ) ) (otherlv_5= 'extends' ( (otherlv_6= '@' ( (otherlv_7= RULE_ID ) ) ) | ( (lv_extendsName_8_0= ruleJavaIdentifier ) ) ) )? (otherlv_9= 'with' (otherlv_10= '@' )? ( (otherlv_11= RULE_ID ) ) )* (otherlv_12= '{' (otherlv_13= 'package' otherlv_14= '=' ( (lv_package_15_0= ruleJavaIdentifier ) ) )? ( ( ( ( ({...}? => ( ({...}? => ( ( ( (lv_notOptimisticLocking_17_0= RULE_NOT ) ) otherlv_18= 'optimisticLocking' ) | otherlv_19= 'optimisticLocking' ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notImmutable_20_0= RULE_NOT ) ) otherlv_21= 'immutable' ) | otherlv_22= 'immutable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_cache_23_0= 'cache' ) ) | (this_NOT_24= RULE_NOT otherlv_25= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_26_0= 'gap' ) ) | ( (lv_noGapClass_27_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_28_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'hint' otherlv_30= '=' ( (lv_hint_31_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'databaseTable' otherlv_33= '=' ( (lv_databaseTable_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'discriminatorValue' otherlv_36= '=' ( (lv_discriminatorValue_37_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'discriminatorColumn' otherlv_39= '=' ( (lv_discriminatorColumn_40_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'discriminatorType' otherlv_42= '=' ( (lv_discriminatorType_43_0= ruleDiscriminatorType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_44= 'discriminatorLength' otherlv_45= '=' ( (lv_discriminatorLength_46_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_47= 'inheritanceType' otherlv_48= '=' ( (lv_inheritanceType_49_0= ruleInheritanceType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_50= 'validate' otherlv_51= '=' ( (lv_validate_52_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_persistent_53_0= 'persistent' ) ) | ( ( (lv_notPersistent_54_0= RULE_NOT ) ) otherlv_55= 'persistent' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_aggregateRoot_56_0= 'aggregateRoot' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_57= 'belongsTo' ( (otherlv_58= '@' )? ( (otherlv_59= RULE_ID ) ) ) ) ) ) ) )* ) ) ) ( ( (lv_attributes_60_0= ruleAttribute ) ) | ( (lv_references_61_0= ruleReference ) ) | ( (lv_operations_62_0= ruleDomainObjectOperation ) ) )* ( (lv_repository_63_0= ruleRepository ) )? otherlv_64= '}' )?
            {
            // InternalContextMappingDSL.g:8697:3: ( (lv_comment_0_0= RULE_SL_COMMENT ) )?
            int alt219=2;
            int LA219_0 = input.LA(1);

            if ( (LA219_0==RULE_SL_COMMENT) ) {
                alt219=1;
            }
            switch (alt219) {
                case 1 :
                    // InternalContextMappingDSL.g:8698:4: (lv_comment_0_0= RULE_SL_COMMENT )
                    {
                    // InternalContextMappingDSL.g:8698:4: (lv_comment_0_0= RULE_SL_COMMENT )
                    // InternalContextMappingDSL.g:8699:5: lv_comment_0_0= RULE_SL_COMMENT
                    {
                    lv_comment_0_0=(Token)match(input,RULE_SL_COMMENT,FOLLOW_133); 

                    					newLeafNode(lv_comment_0_0, grammarAccess.getValueObjectAccess().getCommentSL_COMMENTTerminalRuleCall_0_0());
                    				

                    					if (current==null) {
                    						current = createModelElement(grammarAccess.getValueObjectRule());
                    					}
                    					setWithLastConsumed(
                    						current,
                    						"comment",
                    						lv_comment_0_0,
                    						"org.eclipse.xtext.common.Terminals.SL_COMMENT");
                    				

                    }


                    }
                    break;

            }

            // InternalContextMappingDSL.g:8715:3: ( (lv_doc_1_0= RULE_STRING ) )?
            int alt220=2;
            int LA220_0 = input.LA(1);

            if ( (LA220_0==RULE_STRING) ) {
                alt220=1;
            }
            switch (alt220) {
                case 1 :
                    // InternalContextMappingDSL.g:8716:4: (lv_doc_1_0= RULE_STRING )
                    {
                    // InternalContextMappingDSL.g:8716:4: (lv_doc_1_0= RULE_STRING )
                    // InternalContextMappingDSL.g:8717:5: lv_doc_1_0= RULE_STRING
                    {
                    lv_doc_1_0=(Token)match(input,RULE_STRING,FOLLOW_134); 

                    					newLeafNode(lv_doc_1_0, grammarAccess.getValueObjectAccess().getDocSTRINGTerminalRuleCall_1_0());
                    				

                    					if (current==null) {
                    						current = createModelElement(grammarAccess.getValueObjectRule());
                    					}
                    					setWithLastConsumed(
                    						current,
                    						"doc",
                    						lv_doc_1_0,
                    						"org.eclipse.xtext.common.Terminals.STRING");
                    				

                    }


                    }
                    break;

            }

            // InternalContextMappingDSL.g:8733:3: ( (lv_abstract_2_0= 'abstract' ) )?
            int alt221=2;
            int LA221_0 = input.LA(1);

            if ( (LA221_0==105) ) {
                alt221=1;
            }
            switch (alt221) {
                case 1 :
                    // InternalContextMappingDSL.g:8734:4: (lv_abstract_2_0= 'abstract' )
                    {
                    // InternalContextMappingDSL.g:8734:4: (lv_abstract_2_0= 'abstract' )
                    // InternalContextMappingDSL.g:8735:5: lv_abstract_2_0= 'abstract'
                    {
                    lv_abstract_2_0=(Token)match(input,105,FOLLOW_135); 

                    					newLeafNode(lv_abstract_2_0, grammarAccess.getValueObjectAccess().getAbstractAbstractKeyword_2_0());
                    				

                    					if (current==null) {
                    						current = createModelElement(grammarAccess.getValueObjectRule());
                    					}
                    					setWithLastConsumed(current, "abstract", true, "abstract");
                    				

                    }


                    }
                    break;

            }

            otherlv_3=(Token)match(input,121,FOLLOW_10); 

            			newLeafNode(otherlv_3, grammarAccess.getValueObjectAccess().getValueObjectKeyword_3());
            		
            // InternalContextMappingDSL.g:8751:3: ( (lv_name_4_0= RULE_ID ) )
            // InternalContextMappingDSL.g:8752:4: (lv_name_4_0= RULE_ID )
            {
            // InternalContextMappingDSL.g:8752:4: (lv_name_4_0= RULE_ID )
            // InternalContextMappingDSL.g:8753:5: lv_name_4_0= RULE_ID
            {
            lv_name_4_0=(Token)match(input,RULE_ID,FOLLOW_124); 

            					newLeafNode(lv_name_4_0, grammarAccess.getValueObjectAccess().getNameIDTerminalRuleCall_4_0());
            				

            					if (current==null) {
            						current = createModelElement(grammarAccess.getValueObjectRule());
            					}
            					setWithLastConsumed(
            						current,
            						"name",
            						lv_name_4_0,
            						"org.eclipse.xtext.common.Terminals.ID");
            				

            }


            }

            // InternalContextMappingDSL.g:8769:3: (otherlv_5= 'extends' ( (otherlv_6= '@' ( (otherlv_7= RULE_ID ) ) ) | ( (lv_extendsName_8_0= ruleJavaIdentifier ) ) ) )?
            int alt223=2;
            int LA223_0 = input.LA(1);

            if ( (LA223_0==107) ) {
                alt223=1;
            }
            switch (alt223) {
                case 1 :
                    // InternalContextMappingDSL.g:8770:4: otherlv_5= 'extends' ( (otherlv_6= '@' ( (otherlv_7= RULE_ID ) ) ) | ( (lv_extendsName_8_0= ruleJavaIdentifier ) ) )
                    {
                    otherlv_5=(Token)match(input,107,FOLLOW_96); 

                    				newLeafNode(otherlv_5, grammarAccess.getValueObjectAccess().getExtendsKeyword_5_0());
                    			
                    // InternalContextMappingDSL.g:8774:4: ( (otherlv_6= '@' ( (otherlv_7= RULE_ID ) ) ) | ( (lv_extendsName_8_0= ruleJavaIdentifier ) ) )
                    int alt222=2;
                    int LA222_0 = input.LA(1);

                    if ( (LA222_0==79) ) {
                        alt222=1;
                    }
                    else if ( (LA222_0==RULE_ID) ) {
                        alt222=2;
                    }
                    else {
                        NoViableAltException nvae =
                            new NoViableAltException("", 222, 0, input);

                        throw nvae;
                    }
                    switch (alt222) {
                        case 1 :
                            // InternalContextMappingDSL.g:8775:5: (otherlv_6= '@' ( (otherlv_7= RULE_ID ) ) )
                            {
                            // InternalContextMappingDSL.g:8775:5: (otherlv_6= '@' ( (otherlv_7= RULE_ID ) ) )
                            // InternalContextMappingDSL.g:8776:6: otherlv_6= '@' ( (otherlv_7= RULE_ID ) )
                            {
                            otherlv_6=(Token)match(input,79,FOLLOW_10); 

                            						newLeafNode(otherlv_6, grammarAccess.getValueObjectAccess().getCommercialAtKeyword_5_1_0_0());
                            					
                            // InternalContextMappingDSL.g:8780:6: ( (otherlv_7= RULE_ID ) )
                            // InternalContextMappingDSL.g:8781:7: (otherlv_7= RULE_ID )
                            {
                            // InternalContextMappingDSL.g:8781:7: (otherlv_7= RULE_ID )
                            // InternalContextMappingDSL.g:8782:8: otherlv_7= RULE_ID
                            {

                            								if (current==null) {
                            									current = createModelElement(grammarAccess.getValueObjectRule());
                            								}
                            							
                            otherlv_7=(Token)match(input,RULE_ID,FOLLOW_125); 

                            								newLeafNode(otherlv_7, grammarAccess.getValueObjectAccess().getExtendsValueObjectCrossReference_5_1_0_1_0());
                            							

                            }


                            }


                            }


                            }
                            break;
                        case 2 :
                            // InternalContextMappingDSL.g:8795:5: ( (lv_extendsName_8_0= ruleJavaIdentifier ) )
                            {
                            // InternalContextMappingDSL.g:8795:5: ( (lv_extendsName_8_0= ruleJavaIdentifier ) )
                            // InternalContextMappingDSL.g:8796:6: (lv_extendsName_8_0= ruleJavaIdentifier )
                            {
                            // InternalContextMappingDSL.g:8796:6: (lv_extendsName_8_0= ruleJavaIdentifier )
                            // InternalContextMappingDSL.g:8797:7: lv_extendsName_8_0= ruleJavaIdentifier
                            {

                            							newCompositeNode(grammarAccess.getValueObjectAccess().getExtendsNameJavaIdentifierParserRuleCall_5_1_1_0());
                            						
                            pushFollow(FOLLOW_125);
                            lv_extendsName_8_0=ruleJavaIdentifier();

                            state._fsp--;


                            							if (current==null) {
                            								current = createModelElementForParent(grammarAccess.getValueObjectRule());
                            							}
                            							set(
                            								current,
                            								"extendsName",
                            								lv_extendsName_8_0,
                            								"org.contextmapper.tactic.dsl.TacticDDDLanguage.JavaIdentifier");
                            							afterParserOrEnumRuleCall();
                            						

                            }


                            }


                            }
                            break;

                    }


                    }
                    break;

            }

            // InternalContextMappingDSL.g:8816:3: (otherlv_9= 'with' (otherlv_10= '@' )? ( (otherlv_11= RULE_ID ) ) )*
            loop225:
            do {
                int alt225=2;
                int LA225_0 = input.LA(1);

                if ( (LA225_0==108) ) {
                    alt225=1;
                }


                switch (alt225) {
            	case 1 :
            	    // InternalContextMappingDSL.g:8817:4: otherlv_9= 'with' (otherlv_10= '@' )? ( (otherlv_11= RULE_ID ) )
            	    {
            	    otherlv_9=(Token)match(input,108,FOLLOW_96); 

            	    				newLeafNode(otherlv_9, grammarAccess.getValueObjectAccess().getWithKeyword_6_0());
            	    			
            	    // InternalContextMappingDSL.g:8821:4: (otherlv_10= '@' )?
            	    int alt224=2;
            	    int LA224_0 = input.LA(1);

            	    if ( (LA224_0==79) ) {
            	        alt224=1;
            	    }
            	    switch (alt224) {
            	        case 1 :
            	            // InternalContextMappingDSL.g:8822:5: otherlv_10= '@'
            	            {
            	            otherlv_10=(Token)match(input,79,FOLLOW_10); 

            	            					newLeafNode(otherlv_10, grammarAccess.getValueObjectAccess().getCommercialAtKeyword_6_1());
            	            				

            	            }
            	            break;

            	    }

            	    // InternalContextMappingDSL.g:8827:4: ( (otherlv_11= RULE_ID ) )
            	    // InternalContextMappingDSL.g:8828:5: (otherlv_11= RULE_ID )
            	    {
            	    // InternalContextMappingDSL.g:8828:5: (otherlv_11= RULE_ID )
            	    // InternalContextMappingDSL.g:8829:6: otherlv_11= RULE_ID
            	    {

            	    						if (current==null) {
            	    							current = createModelElement(grammarAccess.getValueObjectRule());
            	    						}
            	    					
            	    otherlv_11=(Token)match(input,RULE_ID,FOLLOW_125); 

            	    						newLeafNode(otherlv_11, grammarAccess.getValueObjectAccess().getTraitsTraitCrossReference_6_2_0());
            	    					

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop225;
                }
            } while (true);

            // InternalContextMappingDSL.g:8841:3: (otherlv_12= '{' (otherlv_13= 'package' otherlv_14= '=' ( (lv_package_15_0= ruleJavaIdentifier ) ) )? ( ( ( ( ({...}? => ( ({...}? => ( ( ( (lv_notOptimisticLocking_17_0= RULE_NOT ) ) otherlv_18= 'optimisticLocking' ) | otherlv_19= 'optimisticLocking' ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notImmutable_20_0= RULE_NOT ) ) otherlv_21= 'immutable' ) | otherlv_22= 'immutable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_cache_23_0= 'cache' ) ) | (this_NOT_24= RULE_NOT otherlv_25= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_26_0= 'gap' ) ) | ( (lv_noGapClass_27_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_28_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'hint' otherlv_30= '=' ( (lv_hint_31_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'databaseTable' otherlv_33= '=' ( (lv_databaseTable_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'discriminatorValue' otherlv_36= '=' ( (lv_discriminatorValue_37_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'discriminatorColumn' otherlv_39= '=' ( (lv_discriminatorColumn_40_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'discriminatorType' otherlv_42= '=' ( (lv_discriminatorType_43_0= ruleDiscriminatorType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_44= 'discriminatorLength' otherlv_45= '=' ( (lv_discriminatorLength_46_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_47= 'inheritanceType' otherlv_48= '=' ( (lv_inheritanceType_49_0= ruleInheritanceType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_50= 'validate' otherlv_51= '=' ( (lv_validate_52_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_persistent_53_0= 'persistent' ) ) | ( ( (lv_notPersistent_54_0= RULE_NOT ) ) otherlv_55= 'persistent' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_aggregateRoot_56_0= 'aggregateRoot' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_57= 'belongsTo' ( (otherlv_58= '@' )? ( (otherlv_59= RULE_ID ) ) ) ) ) ) ) )* ) ) ) ( ( (lv_attributes_60_0= ruleAttribute ) ) | ( (lv_references_61_0= ruleReference ) ) | ( (lv_operations_62_0= ruleDomainObjectOperation ) ) )* ( (lv_repository_63_0= ruleRepository ) )? otherlv_64= '}' )?
            int alt236=2;
            int LA236_0 = input.LA(1);

            if ( (LA236_0==RULE_OPEN) ) {
                alt236=1;
            }
            switch (alt236) {
                case 1 :
                    // InternalContextMappingDSL.g:8842:4: otherlv_12= '{' (otherlv_13= 'package' otherlv_14= '=' ( (lv_package_15_0= ruleJavaIdentifier ) ) )? ( ( ( ( ({...}? => ( ({...}? => ( ( ( (lv_notOptimisticLocking_17_0= RULE_NOT ) ) otherlv_18= 'optimisticLocking' ) | otherlv_19= 'optimisticLocking' ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notImmutable_20_0= RULE_NOT ) ) otherlv_21= 'immutable' ) | otherlv_22= 'immutable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_cache_23_0= 'cache' ) ) | (this_NOT_24= RULE_NOT otherlv_25= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_26_0= 'gap' ) ) | ( (lv_noGapClass_27_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_28_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'hint' otherlv_30= '=' ( (lv_hint_31_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'databaseTable' otherlv_33= '=' ( (lv_databaseTable_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'discriminatorValue' otherlv_36= '=' ( (lv_discriminatorValue_37_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'discriminatorColumn' otherlv_39= '=' ( (lv_discriminatorColumn_40_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'discriminatorType' otherlv_42= '=' ( (lv_discriminatorType_43_0= ruleDiscriminatorType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_44= 'discriminatorLength' otherlv_45= '=' ( (lv_discriminatorLength_46_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_47= 'inheritanceType' otherlv_48= '=' ( (lv_inheritanceType_49_0= ruleInheritanceType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_50= 'validate' otherlv_51= '=' ( (lv_validate_52_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_persistent_53_0= 'persistent' ) ) | ( ( (lv_notPersistent_54_0= RULE_NOT ) ) otherlv_55= 'persistent' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_aggregateRoot_56_0= 'aggregateRoot' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_57= 'belongsTo' ( (otherlv_58= '@' )? ( (otherlv_59= RULE_ID ) ) ) ) ) ) ) )* ) ) ) ( ( (lv_attributes_60_0= ruleAttribute ) ) | ( (lv_references_61_0= ruleReference ) ) | ( (lv_operations_62_0= ruleDomainObjectOperation ) ) )* ( (lv_repository_63_0= ruleRepository ) )? otherlv_64= '}'
                    {
                    otherlv_12=(Token)match(input,RULE_OPEN,FOLLOW_136); 

                    				newLeafNode(otherlv_12, grammarAccess.getValueObjectAccess().getLeftCurlyBracketKeyword_7_0());
                    			
                    // InternalContextMappingDSL.g:8846:4: (otherlv_13= 'package' otherlv_14= '=' ( (lv_package_15_0= ruleJavaIdentifier ) ) )?
                    int alt226=2;
                    int LA226_0 = input.LA(1);

                    if ( (LA226_0==109) ) {
                        int LA226_1 = input.LA(2);

                        if ( (LA226_1==21) ) {
                            alt226=1;
                        }
                    }
                    switch (alt226) {
                        case 1 :
                            // InternalContextMappingDSL.g:8847:5: otherlv_13= 'package' otherlv_14= '=' ( (lv_package_15_0= ruleJavaIdentifier ) )
                            {
                            otherlv_13=(Token)match(input,109,FOLLOW_81); 

                            					newLeafNode(otherlv_13, grammarAccess.getValueObjectAccess().getPackageKeyword_7_1_0());
                            				
                            otherlv_14=(Token)match(input,21,FOLLOW_10); 

                            					newLeafNode(otherlv_14, grammarAccess.getValueObjectAccess().getEqualsSignKeyword_7_1_1());
                            				
                            // InternalContextMappingDSL.g:8855:5: ( (lv_package_15_0= ruleJavaIdentifier ) )
                            // InternalContextMappingDSL.g:8856:6: (lv_package_15_0= ruleJavaIdentifier )
                            {
                            // InternalContextMappingDSL.g:8856:6: (lv_package_15_0= ruleJavaIdentifier )
                            // InternalContextMappingDSL.g:8857:7: lv_package_15_0= ruleJavaIdentifier
                            {

                            							newCompositeNode(grammarAccess.getValueObjectAccess().getPackageJavaIdentifierParserRuleCall_7_1_2_0());
                            						
                            pushFollow(FOLLOW_136);
                            lv_package_15_0=ruleJavaIdentifier();

                            state._fsp--;


                            							if (current==null) {
                            								current = createModelElementForParent(grammarAccess.getValueObjectRule());
                            							}
                            							set(
                            								current,
                            								"package",
                            								lv_package_15_0,
                            								"org.contextmapper.tactic.dsl.TacticDDDLanguage.JavaIdentifier");
                            							afterParserOrEnumRuleCall();
                            						

                            }


                            }


                            }
                            break;

                    }

                    // InternalContextMappingDSL.g:8875:4: ( ( ( ( ({...}? => ( ({...}? => ( ( ( (lv_notOptimisticLocking_17_0= RULE_NOT ) ) otherlv_18= 'optimisticLocking' ) | otherlv_19= 'optimisticLocking' ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notImmutable_20_0= RULE_NOT ) ) otherlv_21= 'immutable' ) | otherlv_22= 'immutable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_cache_23_0= 'cache' ) ) | (this_NOT_24= RULE_NOT otherlv_25= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_26_0= 'gap' ) ) | ( (lv_noGapClass_27_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_28_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'hint' otherlv_30= '=' ( (lv_hint_31_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'databaseTable' otherlv_33= '=' ( (lv_databaseTable_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'discriminatorValue' otherlv_36= '=' ( (lv_discriminatorValue_37_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'discriminatorColumn' otherlv_39= '=' ( (lv_discriminatorColumn_40_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'discriminatorType' otherlv_42= '=' ( (lv_discriminatorType_43_0= ruleDiscriminatorType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_44= 'discriminatorLength' otherlv_45= '=' ( (lv_discriminatorLength_46_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_47= 'inheritanceType' otherlv_48= '=' ( (lv_inheritanceType_49_0= ruleInheritanceType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_50= 'validate' otherlv_51= '=' ( (lv_validate_52_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_persistent_53_0= 'persistent' ) ) | ( ( (lv_notPersistent_54_0= RULE_NOT ) ) otherlv_55= 'persistent' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_aggregateRoot_56_0= 'aggregateRoot' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_57= 'belongsTo' ( (otherlv_58= '@' )? ( (otherlv_59= RULE_ID ) ) ) ) ) ) ) )* ) ) )
                    // InternalContextMappingDSL.g:8876:5: ( ( ( ({...}? => ( ({...}? => ( ( ( (lv_notOptimisticLocking_17_0= RULE_NOT ) ) otherlv_18= 'optimisticLocking' ) | otherlv_19= 'optimisticLocking' ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notImmutable_20_0= RULE_NOT ) ) otherlv_21= 'immutable' ) | otherlv_22= 'immutable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_cache_23_0= 'cache' ) ) | (this_NOT_24= RULE_NOT otherlv_25= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_26_0= 'gap' ) ) | ( (lv_noGapClass_27_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_28_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'hint' otherlv_30= '=' ( (lv_hint_31_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'databaseTable' otherlv_33= '=' ( (lv_databaseTable_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'discriminatorValue' otherlv_36= '=' ( (lv_discriminatorValue_37_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'discriminatorColumn' otherlv_39= '=' ( (lv_discriminatorColumn_40_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'discriminatorType' otherlv_42= '=' ( (lv_discriminatorType_43_0= ruleDiscriminatorType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_44= 'discriminatorLength' otherlv_45= '=' ( (lv_discriminatorLength_46_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_47= 'inheritanceType' otherlv_48= '=' ( (lv_inheritanceType_49_0= ruleInheritanceType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_50= 'validate' otherlv_51= '=' ( (lv_validate_52_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_persistent_53_0= 'persistent' ) ) | ( ( (lv_notPersistent_54_0= RULE_NOT ) ) otherlv_55= 'persistent' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_aggregateRoot_56_0= 'aggregateRoot' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_57= 'belongsTo' ( (otherlv_58= '@' )? ( (otherlv_59= RULE_ID ) ) ) ) ) ) ) )* ) )
                    {
                    // InternalContextMappingDSL.g:8876:5: ( ( ( ({...}? => ( ({...}? => ( ( ( (lv_notOptimisticLocking_17_0= RULE_NOT ) ) otherlv_18= 'optimisticLocking' ) | otherlv_19= 'optimisticLocking' ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notImmutable_20_0= RULE_NOT ) ) otherlv_21= 'immutable' ) | otherlv_22= 'immutable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_cache_23_0= 'cache' ) ) | (this_NOT_24= RULE_NOT otherlv_25= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_26_0= 'gap' ) ) | ( (lv_noGapClass_27_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_28_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'hint' otherlv_30= '=' ( (lv_hint_31_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'databaseTable' otherlv_33= '=' ( (lv_databaseTable_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'discriminatorValue' otherlv_36= '=' ( (lv_discriminatorValue_37_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'discriminatorColumn' otherlv_39= '=' ( (lv_discriminatorColumn_40_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'discriminatorType' otherlv_42= '=' ( (lv_discriminatorType_43_0= ruleDiscriminatorType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_44= 'discriminatorLength' otherlv_45= '=' ( (lv_discriminatorLength_46_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_47= 'inheritanceType' otherlv_48= '=' ( (lv_inheritanceType_49_0= ruleInheritanceType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_50= 'validate' otherlv_51= '=' ( (lv_validate_52_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_persistent_53_0= 'persistent' ) ) | ( ( (lv_notPersistent_54_0= RULE_NOT ) ) otherlv_55= 'persistent' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_aggregateRoot_56_0= 'aggregateRoot' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_57= 'belongsTo' ( (otherlv_58= '@' )? ( (otherlv_59= RULE_ID ) ) ) ) ) ) ) )* ) )
                    // InternalContextMappingDSL.g:8877:6: ( ( ({...}? => ( ({...}? => ( ( ( (lv_notOptimisticLocking_17_0= RULE_NOT ) ) otherlv_18= 'optimisticLocking' ) | otherlv_19= 'optimisticLocking' ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notImmutable_20_0= RULE_NOT ) ) otherlv_21= 'immutable' ) | otherlv_22= 'immutable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_cache_23_0= 'cache' ) ) | (this_NOT_24= RULE_NOT otherlv_25= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_26_0= 'gap' ) ) | ( (lv_noGapClass_27_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_28_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'hint' otherlv_30= '=' ( (lv_hint_31_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'databaseTable' otherlv_33= '=' ( (lv_databaseTable_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'discriminatorValue' otherlv_36= '=' ( (lv_discriminatorValue_37_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'discriminatorColumn' otherlv_39= '=' ( (lv_discriminatorColumn_40_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'discriminatorType' otherlv_42= '=' ( (lv_discriminatorType_43_0= ruleDiscriminatorType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_44= 'discriminatorLength' otherlv_45= '=' ( (lv_discriminatorLength_46_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_47= 'inheritanceType' otherlv_48= '=' ( (lv_inheritanceType_49_0= ruleInheritanceType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_50= 'validate' otherlv_51= '=' ( (lv_validate_52_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_persistent_53_0= 'persistent' ) ) | ( ( (lv_notPersistent_54_0= RULE_NOT ) ) otherlv_55= 'persistent' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_aggregateRoot_56_0= 'aggregateRoot' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_57= 'belongsTo' ( (otherlv_58= '@' )? ( (otherlv_59= RULE_ID ) ) ) ) ) ) ) )* )
                    {
                     
                    					  getUnorderedGroupHelper().enter(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2());
                    					
                    // InternalContextMappingDSL.g:8880:6: ( ( ({...}? => ( ({...}? => ( ( ( (lv_notOptimisticLocking_17_0= RULE_NOT ) ) otherlv_18= 'optimisticLocking' ) | otherlv_19= 'optimisticLocking' ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notImmutable_20_0= RULE_NOT ) ) otherlv_21= 'immutable' ) | otherlv_22= 'immutable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_cache_23_0= 'cache' ) ) | (this_NOT_24= RULE_NOT otherlv_25= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_26_0= 'gap' ) ) | ( (lv_noGapClass_27_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_28_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'hint' otherlv_30= '=' ( (lv_hint_31_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'databaseTable' otherlv_33= '=' ( (lv_databaseTable_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'discriminatorValue' otherlv_36= '=' ( (lv_discriminatorValue_37_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'discriminatorColumn' otherlv_39= '=' ( (lv_discriminatorColumn_40_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'discriminatorType' otherlv_42= '=' ( (lv_discriminatorType_43_0= ruleDiscriminatorType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_44= 'discriminatorLength' otherlv_45= '=' ( (lv_discriminatorLength_46_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_47= 'inheritanceType' otherlv_48= '=' ( (lv_inheritanceType_49_0= ruleInheritanceType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_50= 'validate' otherlv_51= '=' ( (lv_validate_52_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_persistent_53_0= 'persistent' ) ) | ( ( (lv_notPersistent_54_0= RULE_NOT ) ) otherlv_55= 'persistent' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_aggregateRoot_56_0= 'aggregateRoot' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_57= 'belongsTo' ( (otherlv_58= '@' )? ( (otherlv_59= RULE_ID ) ) ) ) ) ) ) )* )
                    // InternalContextMappingDSL.g:8881:7: ( ({...}? => ( ({...}? => ( ( ( (lv_notOptimisticLocking_17_0= RULE_NOT ) ) otherlv_18= 'optimisticLocking' ) | otherlv_19= 'optimisticLocking' ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notImmutable_20_0= RULE_NOT ) ) otherlv_21= 'immutable' ) | otherlv_22= 'immutable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_cache_23_0= 'cache' ) ) | (this_NOT_24= RULE_NOT otherlv_25= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_26_0= 'gap' ) ) | ( (lv_noGapClass_27_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_28_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'hint' otherlv_30= '=' ( (lv_hint_31_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'databaseTable' otherlv_33= '=' ( (lv_databaseTable_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'discriminatorValue' otherlv_36= '=' ( (lv_discriminatorValue_37_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'discriminatorColumn' otherlv_39= '=' ( (lv_discriminatorColumn_40_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'discriminatorType' otherlv_42= '=' ( (lv_discriminatorType_43_0= ruleDiscriminatorType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_44= 'discriminatorLength' otherlv_45= '=' ( (lv_discriminatorLength_46_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_47= 'inheritanceType' otherlv_48= '=' ( (lv_inheritanceType_49_0= ruleInheritanceType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_50= 'validate' otherlv_51= '=' ( (lv_validate_52_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_persistent_53_0= 'persistent' ) ) | ( ( (lv_notPersistent_54_0= RULE_NOT ) ) otherlv_55= 'persistent' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_aggregateRoot_56_0= 'aggregateRoot' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_57= 'belongsTo' ( (otherlv_58= '@' )? ( (otherlv_59= RULE_ID ) ) ) ) ) ) ) )*
                    {
                    // InternalContextMappingDSL.g:8881:7: ( ({...}? => ( ({...}? => ( ( ( (lv_notOptimisticLocking_17_0= RULE_NOT ) ) otherlv_18= 'optimisticLocking' ) | otherlv_19= 'optimisticLocking' ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notImmutable_20_0= RULE_NOT ) ) otherlv_21= 'immutable' ) | otherlv_22= 'immutable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_cache_23_0= 'cache' ) ) | (this_NOT_24= RULE_NOT otherlv_25= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_26_0= 'gap' ) ) | ( (lv_noGapClass_27_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_28_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'hint' otherlv_30= '=' ( (lv_hint_31_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'databaseTable' otherlv_33= '=' ( (lv_databaseTable_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'discriminatorValue' otherlv_36= '=' ( (lv_discriminatorValue_37_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'discriminatorColumn' otherlv_39= '=' ( (lv_discriminatorColumn_40_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'discriminatorType' otherlv_42= '=' ( (lv_discriminatorType_43_0= ruleDiscriminatorType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_44= 'discriminatorLength' otherlv_45= '=' ( (lv_discriminatorLength_46_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_47= 'inheritanceType' otherlv_48= '=' ( (lv_inheritanceType_49_0= ruleInheritanceType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_50= 'validate' otherlv_51= '=' ( (lv_validate_52_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_persistent_53_0= 'persistent' ) ) | ( ( (lv_notPersistent_54_0= RULE_NOT ) ) otherlv_55= 'persistent' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_aggregateRoot_56_0= 'aggregateRoot' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_57= 'belongsTo' ( (otherlv_58= '@' )? ( (otherlv_59= RULE_ID ) ) ) ) ) ) ) )*
                    loop233:
                    do {
                        int alt233=17;
                        alt233 = dfa233.predict(input);
                        switch (alt233) {
                    	case 1 :
                    	    // InternalContextMappingDSL.g:8882:5: ({...}? => ( ({...}? => ( ( ( (lv_notOptimisticLocking_17_0= RULE_NOT ) ) otherlv_18= 'optimisticLocking' ) | otherlv_19= 'optimisticLocking' ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:8882:5: ({...}? => ( ({...}? => ( ( ( (lv_notOptimisticLocking_17_0= RULE_NOT ) ) otherlv_18= 'optimisticLocking' ) | otherlv_19= 'optimisticLocking' ) ) ) )
                    	    // InternalContextMappingDSL.g:8883:6: {...}? => ( ({...}? => ( ( ( (lv_notOptimisticLocking_17_0= RULE_NOT ) ) otherlv_18= 'optimisticLocking' ) | otherlv_19= 'optimisticLocking' ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2(), 0) ) {
                    	        throw new FailedPredicateException(input, "ruleValueObject", "getUnorderedGroupHelper().canSelect(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2(), 0)");
                    	    }
                    	    // InternalContextMappingDSL.g:8883:111: ( ({...}? => ( ( ( (lv_notOptimisticLocking_17_0= RULE_NOT ) ) otherlv_18= 'optimisticLocking' ) | otherlv_19= 'optimisticLocking' ) ) )
                    	    // InternalContextMappingDSL.g:8884:7: ({...}? => ( ( ( (lv_notOptimisticLocking_17_0= RULE_NOT ) ) otherlv_18= 'optimisticLocking' ) | otherlv_19= 'optimisticLocking' ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2(), 0);
                    	    						
                    	    // InternalContextMappingDSL.g:8887:10: ({...}? => ( ( ( (lv_notOptimisticLocking_17_0= RULE_NOT ) ) otherlv_18= 'optimisticLocking' ) | otherlv_19= 'optimisticLocking' ) )
                    	    // InternalContextMappingDSL.g:8887:11: {...}? => ( ( ( (lv_notOptimisticLocking_17_0= RULE_NOT ) ) otherlv_18= 'optimisticLocking' ) | otherlv_19= 'optimisticLocking' )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleValueObject", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:8887:20: ( ( ( (lv_notOptimisticLocking_17_0= RULE_NOT ) ) otherlv_18= 'optimisticLocking' ) | otherlv_19= 'optimisticLocking' )
                    	    int alt227=2;
                    	    int LA227_0 = input.LA(1);

                    	    if ( (LA227_0==RULE_NOT) ) {
                    	        alt227=1;
                    	    }
                    	    else if ( (LA227_0==110) ) {
                    	        alt227=2;
                    	    }
                    	    else {
                    	        NoViableAltException nvae =
                    	            new NoViableAltException("", 227, 0, input);

                    	        throw nvae;
                    	    }
                    	    switch (alt227) {
                    	        case 1 :
                    	            // InternalContextMappingDSL.g:8887:21: ( ( (lv_notOptimisticLocking_17_0= RULE_NOT ) ) otherlv_18= 'optimisticLocking' )
                    	            {
                    	            // InternalContextMappingDSL.g:8887:21: ( ( (lv_notOptimisticLocking_17_0= RULE_NOT ) ) otherlv_18= 'optimisticLocking' )
                    	            // InternalContextMappingDSL.g:8888:11: ( (lv_notOptimisticLocking_17_0= RULE_NOT ) ) otherlv_18= 'optimisticLocking'
                    	            {
                    	            // InternalContextMappingDSL.g:8888:11: ( (lv_notOptimisticLocking_17_0= RULE_NOT ) )
                    	            // InternalContextMappingDSL.g:8889:12: (lv_notOptimisticLocking_17_0= RULE_NOT )
                    	            {
                    	            // InternalContextMappingDSL.g:8889:12: (lv_notOptimisticLocking_17_0= RULE_NOT )
                    	            // InternalContextMappingDSL.g:8890:13: lv_notOptimisticLocking_17_0= RULE_NOT
                    	            {
                    	            lv_notOptimisticLocking_17_0=(Token)match(input,RULE_NOT,FOLLOW_127); 

                    	            													newLeafNode(lv_notOptimisticLocking_17_0, grammarAccess.getValueObjectAccess().getNotOptimisticLockingNOTTerminalRuleCall_7_2_0_0_0_0());
                    	            												

                    	            													if (current==null) {
                    	            														current = createModelElement(grammarAccess.getValueObjectRule());
                    	            													}
                    	            													setWithLastConsumed(
                    	            														current,
                    	            														"notOptimisticLocking",
                    	            														true,
                    	            														"org.contextmapper.tactic.dsl.TacticDDDLanguage.NOT");
                    	            												

                    	            }


                    	            }

                    	            otherlv_18=(Token)match(input,110,FOLLOW_136); 

                    	            											newLeafNode(otherlv_18, grammarAccess.getValueObjectAccess().getOptimisticLockingKeyword_7_2_0_0_1());
                    	            										

                    	            }


                    	            }
                    	            break;
                    	        case 2 :
                    	            // InternalContextMappingDSL.g:8912:10: otherlv_19= 'optimisticLocking'
                    	            {
                    	            otherlv_19=(Token)match(input,110,FOLLOW_136); 

                    	            										newLeafNode(otherlv_19, grammarAccess.getValueObjectAccess().getOptimisticLockingKeyword_7_2_0_1());
                    	            									

                    	            }
                    	            break;

                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 2 :
                    	    // InternalContextMappingDSL.g:8922:5: ({...}? => ( ({...}? => ( ( ( (lv_notImmutable_20_0= RULE_NOT ) ) otherlv_21= 'immutable' ) | otherlv_22= 'immutable' ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:8922:5: ({...}? => ( ({...}? => ( ( ( (lv_notImmutable_20_0= RULE_NOT ) ) otherlv_21= 'immutable' ) | otherlv_22= 'immutable' ) ) ) )
                    	    // InternalContextMappingDSL.g:8923:6: {...}? => ( ({...}? => ( ( ( (lv_notImmutable_20_0= RULE_NOT ) ) otherlv_21= 'immutable' ) | otherlv_22= 'immutable' ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2(), 1) ) {
                    	        throw new FailedPredicateException(input, "ruleValueObject", "getUnorderedGroupHelper().canSelect(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2(), 1)");
                    	    }
                    	    // InternalContextMappingDSL.g:8923:111: ( ({...}? => ( ( ( (lv_notImmutable_20_0= RULE_NOT ) ) otherlv_21= 'immutable' ) | otherlv_22= 'immutable' ) ) )
                    	    // InternalContextMappingDSL.g:8924:7: ({...}? => ( ( ( (lv_notImmutable_20_0= RULE_NOT ) ) otherlv_21= 'immutable' ) | otherlv_22= 'immutable' ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2(), 1);
                    	    						
                    	    // InternalContextMappingDSL.g:8927:10: ({...}? => ( ( ( (lv_notImmutable_20_0= RULE_NOT ) ) otherlv_21= 'immutable' ) | otherlv_22= 'immutable' ) )
                    	    // InternalContextMappingDSL.g:8927:11: {...}? => ( ( ( (lv_notImmutable_20_0= RULE_NOT ) ) otherlv_21= 'immutable' ) | otherlv_22= 'immutable' )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleValueObject", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:8927:20: ( ( ( (lv_notImmutable_20_0= RULE_NOT ) ) otherlv_21= 'immutable' ) | otherlv_22= 'immutable' )
                    	    int alt228=2;
                    	    int LA228_0 = input.LA(1);

                    	    if ( (LA228_0==RULE_NOT) ) {
                    	        alt228=1;
                    	    }
                    	    else if ( (LA228_0==122) ) {
                    	        alt228=2;
                    	    }
                    	    else {
                    	        NoViableAltException nvae =
                    	            new NoViableAltException("", 228, 0, input);

                    	        throw nvae;
                    	    }
                    	    switch (alt228) {
                    	        case 1 :
                    	            // InternalContextMappingDSL.g:8927:21: ( ( (lv_notImmutable_20_0= RULE_NOT ) ) otherlv_21= 'immutable' )
                    	            {
                    	            // InternalContextMappingDSL.g:8927:21: ( ( (lv_notImmutable_20_0= RULE_NOT ) ) otherlv_21= 'immutable' )
                    	            // InternalContextMappingDSL.g:8928:11: ( (lv_notImmutable_20_0= RULE_NOT ) ) otherlv_21= 'immutable'
                    	            {
                    	            // InternalContextMappingDSL.g:8928:11: ( (lv_notImmutable_20_0= RULE_NOT ) )
                    	            // InternalContextMappingDSL.g:8929:12: (lv_notImmutable_20_0= RULE_NOT )
                    	            {
                    	            // InternalContextMappingDSL.g:8929:12: (lv_notImmutable_20_0= RULE_NOT )
                    	            // InternalContextMappingDSL.g:8930:13: lv_notImmutable_20_0= RULE_NOT
                    	            {
                    	            lv_notImmutable_20_0=(Token)match(input,RULE_NOT,FOLLOW_137); 

                    	            													newLeafNode(lv_notImmutable_20_0, grammarAccess.getValueObjectAccess().getNotImmutableNOTTerminalRuleCall_7_2_1_0_0_0());
                    	            												

                    	            													if (current==null) {
                    	            														current = createModelElement(grammarAccess.getValueObjectRule());
                    	            													}
                    	            													setWithLastConsumed(
                    	            														current,
                    	            														"notImmutable",
                    	            														true,
                    	            														"org.contextmapper.tactic.dsl.TacticDDDLanguage.NOT");
                    	            												

                    	            }


                    	            }

                    	            otherlv_21=(Token)match(input,122,FOLLOW_136); 

                    	            											newLeafNode(otherlv_21, grammarAccess.getValueObjectAccess().getImmutableKeyword_7_2_1_0_1());
                    	            										

                    	            }


                    	            }
                    	            break;
                    	        case 2 :
                    	            // InternalContextMappingDSL.g:8952:10: otherlv_22= 'immutable'
                    	            {
                    	            otherlv_22=(Token)match(input,122,FOLLOW_136); 

                    	            										newLeafNode(otherlv_22, grammarAccess.getValueObjectAccess().getImmutableKeyword_7_2_1_1());
                    	            									

                    	            }
                    	            break;

                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 3 :
                    	    // InternalContextMappingDSL.g:8962:5: ({...}? => ( ({...}? => ( ( (lv_cache_23_0= 'cache' ) ) | (this_NOT_24= RULE_NOT otherlv_25= 'cache' ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:8962:5: ({...}? => ( ({...}? => ( ( (lv_cache_23_0= 'cache' ) ) | (this_NOT_24= RULE_NOT otherlv_25= 'cache' ) ) ) ) )
                    	    // InternalContextMappingDSL.g:8963:6: {...}? => ( ({...}? => ( ( (lv_cache_23_0= 'cache' ) ) | (this_NOT_24= RULE_NOT otherlv_25= 'cache' ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2(), 2) ) {
                    	        throw new FailedPredicateException(input, "ruleValueObject", "getUnorderedGroupHelper().canSelect(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2(), 2)");
                    	    }
                    	    // InternalContextMappingDSL.g:8963:111: ( ({...}? => ( ( (lv_cache_23_0= 'cache' ) ) | (this_NOT_24= RULE_NOT otherlv_25= 'cache' ) ) ) )
                    	    // InternalContextMappingDSL.g:8964:7: ({...}? => ( ( (lv_cache_23_0= 'cache' ) ) | (this_NOT_24= RULE_NOT otherlv_25= 'cache' ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2(), 2);
                    	    						
                    	    // InternalContextMappingDSL.g:8967:10: ({...}? => ( ( (lv_cache_23_0= 'cache' ) ) | (this_NOT_24= RULE_NOT otherlv_25= 'cache' ) ) )
                    	    // InternalContextMappingDSL.g:8967:11: {...}? => ( ( (lv_cache_23_0= 'cache' ) ) | (this_NOT_24= RULE_NOT otherlv_25= 'cache' ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleValueObject", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:8967:20: ( ( (lv_cache_23_0= 'cache' ) ) | (this_NOT_24= RULE_NOT otherlv_25= 'cache' ) )
                    	    int alt229=2;
                    	    int LA229_0 = input.LA(1);

                    	    if ( (LA229_0==93) ) {
                    	        alt229=1;
                    	    }
                    	    else if ( (LA229_0==RULE_NOT) ) {
                    	        alt229=2;
                    	    }
                    	    else {
                    	        NoViableAltException nvae =
                    	            new NoViableAltException("", 229, 0, input);

                    	        throw nvae;
                    	    }
                    	    switch (alt229) {
                    	        case 1 :
                    	            // InternalContextMappingDSL.g:8967:21: ( (lv_cache_23_0= 'cache' ) )
                    	            {
                    	            // InternalContextMappingDSL.g:8967:21: ( (lv_cache_23_0= 'cache' ) )
                    	            // InternalContextMappingDSL.g:8968:11: (lv_cache_23_0= 'cache' )
                    	            {
                    	            // InternalContextMappingDSL.g:8968:11: (lv_cache_23_0= 'cache' )
                    	            // InternalContextMappingDSL.g:8969:12: lv_cache_23_0= 'cache'
                    	            {
                    	            lv_cache_23_0=(Token)match(input,93,FOLLOW_136); 

                    	            												newLeafNode(lv_cache_23_0, grammarAccess.getValueObjectAccess().getCacheCacheKeyword_7_2_2_0_0());
                    	            											

                    	            												if (current==null) {
                    	            													current = createModelElement(grammarAccess.getValueObjectRule());
                    	            												}
                    	            												setWithLastConsumed(current, "cache", true, "cache");
                    	            											

                    	            }


                    	            }


                    	            }
                    	            break;
                    	        case 2 :
                    	            // InternalContextMappingDSL.g:8982:10: (this_NOT_24= RULE_NOT otherlv_25= 'cache' )
                    	            {
                    	            // InternalContextMappingDSL.g:8982:10: (this_NOT_24= RULE_NOT otherlv_25= 'cache' )
                    	            // InternalContextMappingDSL.g:8983:11: this_NOT_24= RULE_NOT otherlv_25= 'cache'
                    	            {
                    	            this_NOT_24=(Token)match(input,RULE_NOT,FOLLOW_129); 

                    	            											newLeafNode(this_NOT_24, grammarAccess.getValueObjectAccess().getNOTTerminalRuleCall_7_2_2_1_0());
                    	            										
                    	            otherlv_25=(Token)match(input,93,FOLLOW_136); 

                    	            											newLeafNode(otherlv_25, grammarAccess.getValueObjectAccess().getCacheKeyword_7_2_2_1_1());
                    	            										

                    	            }


                    	            }
                    	            break;

                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 4 :
                    	    // InternalContextMappingDSL.g:8998:5: ({...}? => ( ({...}? => ( ( (lv_gapClass_26_0= 'gap' ) ) | ( (lv_noGapClass_27_0= 'nogap' ) ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:8998:5: ({...}? => ( ({...}? => ( ( (lv_gapClass_26_0= 'gap' ) ) | ( (lv_noGapClass_27_0= 'nogap' ) ) ) ) ) )
                    	    // InternalContextMappingDSL.g:8999:6: {...}? => ( ({...}? => ( ( (lv_gapClass_26_0= 'gap' ) ) | ( (lv_noGapClass_27_0= 'nogap' ) ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2(), 3) ) {
                    	        throw new FailedPredicateException(input, "ruleValueObject", "getUnorderedGroupHelper().canSelect(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2(), 3)");
                    	    }
                    	    // InternalContextMappingDSL.g:8999:111: ( ({...}? => ( ( (lv_gapClass_26_0= 'gap' ) ) | ( (lv_noGapClass_27_0= 'nogap' ) ) ) ) )
                    	    // InternalContextMappingDSL.g:9000:7: ({...}? => ( ( (lv_gapClass_26_0= 'gap' ) ) | ( (lv_noGapClass_27_0= 'nogap' ) ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2(), 3);
                    	    						
                    	    // InternalContextMappingDSL.g:9003:10: ({...}? => ( ( (lv_gapClass_26_0= 'gap' ) ) | ( (lv_noGapClass_27_0= 'nogap' ) ) ) )
                    	    // InternalContextMappingDSL.g:9003:11: {...}? => ( ( (lv_gapClass_26_0= 'gap' ) ) | ( (lv_noGapClass_27_0= 'nogap' ) ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleValueObject", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:9003:20: ( ( (lv_gapClass_26_0= 'gap' ) ) | ( (lv_noGapClass_27_0= 'nogap' ) ) )
                    	    int alt230=2;
                    	    int LA230_0 = input.LA(1);

                    	    if ( (LA230_0==71) ) {
                    	        alt230=1;
                    	    }
                    	    else if ( (LA230_0==72) ) {
                    	        alt230=2;
                    	    }
                    	    else {
                    	        NoViableAltException nvae =
                    	            new NoViableAltException("", 230, 0, input);

                    	        throw nvae;
                    	    }
                    	    switch (alt230) {
                    	        case 1 :
                    	            // InternalContextMappingDSL.g:9003:21: ( (lv_gapClass_26_0= 'gap' ) )
                    	            {
                    	            // InternalContextMappingDSL.g:9003:21: ( (lv_gapClass_26_0= 'gap' ) )
                    	            // InternalContextMappingDSL.g:9004:11: (lv_gapClass_26_0= 'gap' )
                    	            {
                    	            // InternalContextMappingDSL.g:9004:11: (lv_gapClass_26_0= 'gap' )
                    	            // InternalContextMappingDSL.g:9005:12: lv_gapClass_26_0= 'gap'
                    	            {
                    	            lv_gapClass_26_0=(Token)match(input,71,FOLLOW_136); 

                    	            												newLeafNode(lv_gapClass_26_0, grammarAccess.getValueObjectAccess().getGapClassGapKeyword_7_2_3_0_0());
                    	            											

                    	            												if (current==null) {
                    	            													current = createModelElement(grammarAccess.getValueObjectRule());
                    	            												}
                    	            												setWithLastConsumed(current, "gapClass", true, "gap");
                    	            											

                    	            }


                    	            }


                    	            }
                    	            break;
                    	        case 2 :
                    	            // InternalContextMappingDSL.g:9018:10: ( (lv_noGapClass_27_0= 'nogap' ) )
                    	            {
                    	            // InternalContextMappingDSL.g:9018:10: ( (lv_noGapClass_27_0= 'nogap' ) )
                    	            // InternalContextMappingDSL.g:9019:11: (lv_noGapClass_27_0= 'nogap' )
                    	            {
                    	            // InternalContextMappingDSL.g:9019:11: (lv_noGapClass_27_0= 'nogap' )
                    	            // InternalContextMappingDSL.g:9020:12: lv_noGapClass_27_0= 'nogap'
                    	            {
                    	            lv_noGapClass_27_0=(Token)match(input,72,FOLLOW_136); 

                    	            												newLeafNode(lv_noGapClass_27_0, grammarAccess.getValueObjectAccess().getNoGapClassNogapKeyword_7_2_3_1_0());
                    	            											

                    	            												if (current==null) {
                    	            													current = createModelElement(grammarAccess.getValueObjectRule());
                    	            												}
                    	            												setWithLastConsumed(current, "noGapClass", true, "nogap");
                    	            											

                    	            }


                    	            }


                    	            }
                    	            break;

                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 5 :
                    	    // InternalContextMappingDSL.g:9038:5: ({...}? => ( ({...}? => ( (lv_scaffold_28_0= 'scaffold' ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:9038:5: ({...}? => ( ({...}? => ( (lv_scaffold_28_0= 'scaffold' ) ) ) ) )
                    	    // InternalContextMappingDSL.g:9039:6: {...}? => ( ({...}? => ( (lv_scaffold_28_0= 'scaffold' ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2(), 4) ) {
                    	        throw new FailedPredicateException(input, "ruleValueObject", "getUnorderedGroupHelper().canSelect(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2(), 4)");
                    	    }
                    	    // InternalContextMappingDSL.g:9039:111: ( ({...}? => ( (lv_scaffold_28_0= 'scaffold' ) ) ) )
                    	    // InternalContextMappingDSL.g:9040:7: ({...}? => ( (lv_scaffold_28_0= 'scaffold' ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2(), 4);
                    	    						
                    	    // InternalContextMappingDSL.g:9043:10: ({...}? => ( (lv_scaffold_28_0= 'scaffold' ) ) )
                    	    // InternalContextMappingDSL.g:9043:11: {...}? => ( (lv_scaffold_28_0= 'scaffold' ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleValueObject", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:9043:20: ( (lv_scaffold_28_0= 'scaffold' ) )
                    	    // InternalContextMappingDSL.g:9043:21: (lv_scaffold_28_0= 'scaffold' )
                    	    {
                    	    // InternalContextMappingDSL.g:9043:21: (lv_scaffold_28_0= 'scaffold' )
                    	    // InternalContextMappingDSL.g:9044:11: lv_scaffold_28_0= 'scaffold'
                    	    {
                    	    lv_scaffold_28_0=(Token)match(input,75,FOLLOW_136); 

                    	    											newLeafNode(lv_scaffold_28_0, grammarAccess.getValueObjectAccess().getScaffoldScaffoldKeyword_7_2_4_0());
                    	    										

                    	    											if (current==null) {
                    	    												current = createModelElement(grammarAccess.getValueObjectRule());
                    	    											}
                    	    											setWithLastConsumed(current, "scaffold", true, "scaffold");
                    	    										

                    	    }


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 6 :
                    	    // InternalContextMappingDSL.g:9061:5: ({...}? => ( ({...}? => (otherlv_29= 'hint' otherlv_30= '=' ( (lv_hint_31_0= RULE_STRING ) ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:9061:5: ({...}? => ( ({...}? => (otherlv_29= 'hint' otherlv_30= '=' ( (lv_hint_31_0= RULE_STRING ) ) ) ) ) )
                    	    // InternalContextMappingDSL.g:9062:6: {...}? => ( ({...}? => (otherlv_29= 'hint' otherlv_30= '=' ( (lv_hint_31_0= RULE_STRING ) ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2(), 5) ) {
                    	        throw new FailedPredicateException(input, "ruleValueObject", "getUnorderedGroupHelper().canSelect(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2(), 5)");
                    	    }
                    	    // InternalContextMappingDSL.g:9062:111: ( ({...}? => (otherlv_29= 'hint' otherlv_30= '=' ( (lv_hint_31_0= RULE_STRING ) ) ) ) )
                    	    // InternalContextMappingDSL.g:9063:7: ({...}? => (otherlv_29= 'hint' otherlv_30= '=' ( (lv_hint_31_0= RULE_STRING ) ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2(), 5);
                    	    						
                    	    // InternalContextMappingDSL.g:9066:10: ({...}? => (otherlv_29= 'hint' otherlv_30= '=' ( (lv_hint_31_0= RULE_STRING ) ) ) )
                    	    // InternalContextMappingDSL.g:9066:11: {...}? => (otherlv_29= 'hint' otherlv_30= '=' ( (lv_hint_31_0= RULE_STRING ) ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleValueObject", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:9066:20: (otherlv_29= 'hint' otherlv_30= '=' ( (lv_hint_31_0= RULE_STRING ) ) )
                    	    // InternalContextMappingDSL.g:9066:21: otherlv_29= 'hint' otherlv_30= '=' ( (lv_hint_31_0= RULE_STRING ) )
                    	    {
                    	    otherlv_29=(Token)match(input,67,FOLLOW_81); 

                    	    										newLeafNode(otherlv_29, grammarAccess.getValueObjectAccess().getHintKeyword_7_2_5_0());
                    	    									
                    	    otherlv_30=(Token)match(input,21,FOLLOW_4); 

                    	    										newLeafNode(otherlv_30, grammarAccess.getValueObjectAccess().getEqualsSignKeyword_7_2_5_1());
                    	    									
                    	    // InternalContextMappingDSL.g:9074:10: ( (lv_hint_31_0= RULE_STRING ) )
                    	    // InternalContextMappingDSL.g:9075:11: (lv_hint_31_0= RULE_STRING )
                    	    {
                    	    // InternalContextMappingDSL.g:9075:11: (lv_hint_31_0= RULE_STRING )
                    	    // InternalContextMappingDSL.g:9076:12: lv_hint_31_0= RULE_STRING
                    	    {
                    	    lv_hint_31_0=(Token)match(input,RULE_STRING,FOLLOW_136); 

                    	    												newLeafNode(lv_hint_31_0, grammarAccess.getValueObjectAccess().getHintSTRINGTerminalRuleCall_7_2_5_2_0());
                    	    											

                    	    												if (current==null) {
                    	    													current = createModelElement(grammarAccess.getValueObjectRule());
                    	    												}
                    	    												setWithLastConsumed(
                    	    													current,
                    	    													"hint",
                    	    													lv_hint_31_0,
                    	    													"org.eclipse.xtext.common.Terminals.STRING");
                    	    											

                    	    }


                    	    }


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 7 :
                    	    // InternalContextMappingDSL.g:9098:5: ({...}? => ( ({...}? => (otherlv_32= 'databaseTable' otherlv_33= '=' ( (lv_databaseTable_34_0= RULE_STRING ) ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:9098:5: ({...}? => ( ({...}? => (otherlv_32= 'databaseTable' otherlv_33= '=' ( (lv_databaseTable_34_0= RULE_STRING ) ) ) ) ) )
                    	    // InternalContextMappingDSL.g:9099:6: {...}? => ( ({...}? => (otherlv_32= 'databaseTable' otherlv_33= '=' ( (lv_databaseTable_34_0= RULE_STRING ) ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2(), 6) ) {
                    	        throw new FailedPredicateException(input, "ruleValueObject", "getUnorderedGroupHelper().canSelect(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2(), 6)");
                    	    }
                    	    // InternalContextMappingDSL.g:9099:111: ( ({...}? => (otherlv_32= 'databaseTable' otherlv_33= '=' ( (lv_databaseTable_34_0= RULE_STRING ) ) ) ) )
                    	    // InternalContextMappingDSL.g:9100:7: ({...}? => (otherlv_32= 'databaseTable' otherlv_33= '=' ( (lv_databaseTable_34_0= RULE_STRING ) ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2(), 6);
                    	    						
                    	    // InternalContextMappingDSL.g:9103:10: ({...}? => (otherlv_32= 'databaseTable' otherlv_33= '=' ( (lv_databaseTable_34_0= RULE_STRING ) ) ) )
                    	    // InternalContextMappingDSL.g:9103:11: {...}? => (otherlv_32= 'databaseTable' otherlv_33= '=' ( (lv_databaseTable_34_0= RULE_STRING ) ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleValueObject", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:9103:20: (otherlv_32= 'databaseTable' otherlv_33= '=' ( (lv_databaseTable_34_0= RULE_STRING ) ) )
                    	    // InternalContextMappingDSL.g:9103:21: otherlv_32= 'databaseTable' otherlv_33= '=' ( (lv_databaseTable_34_0= RULE_STRING ) )
                    	    {
                    	    otherlv_32=(Token)match(input,112,FOLLOW_81); 

                    	    										newLeafNode(otherlv_32, grammarAccess.getValueObjectAccess().getDatabaseTableKeyword_7_2_6_0());
                    	    									
                    	    otherlv_33=(Token)match(input,21,FOLLOW_4); 

                    	    										newLeafNode(otherlv_33, grammarAccess.getValueObjectAccess().getEqualsSignKeyword_7_2_6_1());
                    	    									
                    	    // InternalContextMappingDSL.g:9111:10: ( (lv_databaseTable_34_0= RULE_STRING ) )
                    	    // InternalContextMappingDSL.g:9112:11: (lv_databaseTable_34_0= RULE_STRING )
                    	    {
                    	    // InternalContextMappingDSL.g:9112:11: (lv_databaseTable_34_0= RULE_STRING )
                    	    // InternalContextMappingDSL.g:9113:12: lv_databaseTable_34_0= RULE_STRING
                    	    {
                    	    lv_databaseTable_34_0=(Token)match(input,RULE_STRING,FOLLOW_136); 

                    	    												newLeafNode(lv_databaseTable_34_0, grammarAccess.getValueObjectAccess().getDatabaseTableSTRINGTerminalRuleCall_7_2_6_2_0());
                    	    											

                    	    												if (current==null) {
                    	    													current = createModelElement(grammarAccess.getValueObjectRule());
                    	    												}
                    	    												setWithLastConsumed(
                    	    													current,
                    	    													"databaseTable",
                    	    													lv_databaseTable_34_0,
                    	    													"org.eclipse.xtext.common.Terminals.STRING");
                    	    											

                    	    }


                    	    }


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 8 :
                    	    // InternalContextMappingDSL.g:9135:5: ({...}? => ( ({...}? => (otherlv_35= 'discriminatorValue' otherlv_36= '=' ( (lv_discriminatorValue_37_0= RULE_STRING ) ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:9135:5: ({...}? => ( ({...}? => (otherlv_35= 'discriminatorValue' otherlv_36= '=' ( (lv_discriminatorValue_37_0= RULE_STRING ) ) ) ) ) )
                    	    // InternalContextMappingDSL.g:9136:6: {...}? => ( ({...}? => (otherlv_35= 'discriminatorValue' otherlv_36= '=' ( (lv_discriminatorValue_37_0= RULE_STRING ) ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2(), 7) ) {
                    	        throw new FailedPredicateException(input, "ruleValueObject", "getUnorderedGroupHelper().canSelect(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2(), 7)");
                    	    }
                    	    // InternalContextMappingDSL.g:9136:111: ( ({...}? => (otherlv_35= 'discriminatorValue' otherlv_36= '=' ( (lv_discriminatorValue_37_0= RULE_STRING ) ) ) ) )
                    	    // InternalContextMappingDSL.g:9137:7: ({...}? => (otherlv_35= 'discriminatorValue' otherlv_36= '=' ( (lv_discriminatorValue_37_0= RULE_STRING ) ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2(), 7);
                    	    						
                    	    // InternalContextMappingDSL.g:9140:10: ({...}? => (otherlv_35= 'discriminatorValue' otherlv_36= '=' ( (lv_discriminatorValue_37_0= RULE_STRING ) ) ) )
                    	    // InternalContextMappingDSL.g:9140:11: {...}? => (otherlv_35= 'discriminatorValue' otherlv_36= '=' ( (lv_discriminatorValue_37_0= RULE_STRING ) ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleValueObject", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:9140:20: (otherlv_35= 'discriminatorValue' otherlv_36= '=' ( (lv_discriminatorValue_37_0= RULE_STRING ) ) )
                    	    // InternalContextMappingDSL.g:9140:21: otherlv_35= 'discriminatorValue' otherlv_36= '=' ( (lv_discriminatorValue_37_0= RULE_STRING ) )
                    	    {
                    	    otherlv_35=(Token)match(input,113,FOLLOW_81); 

                    	    										newLeafNode(otherlv_35, grammarAccess.getValueObjectAccess().getDiscriminatorValueKeyword_7_2_7_0());
                    	    									
                    	    otherlv_36=(Token)match(input,21,FOLLOW_4); 

                    	    										newLeafNode(otherlv_36, grammarAccess.getValueObjectAccess().getEqualsSignKeyword_7_2_7_1());
                    	    									
                    	    // InternalContextMappingDSL.g:9148:10: ( (lv_discriminatorValue_37_0= RULE_STRING ) )
                    	    // InternalContextMappingDSL.g:9149:11: (lv_discriminatorValue_37_0= RULE_STRING )
                    	    {
                    	    // InternalContextMappingDSL.g:9149:11: (lv_discriminatorValue_37_0= RULE_STRING )
                    	    // InternalContextMappingDSL.g:9150:12: lv_discriminatorValue_37_0= RULE_STRING
                    	    {
                    	    lv_discriminatorValue_37_0=(Token)match(input,RULE_STRING,FOLLOW_136); 

                    	    												newLeafNode(lv_discriminatorValue_37_0, grammarAccess.getValueObjectAccess().getDiscriminatorValueSTRINGTerminalRuleCall_7_2_7_2_0());
                    	    											

                    	    												if (current==null) {
                    	    													current = createModelElement(grammarAccess.getValueObjectRule());
                    	    												}
                    	    												setWithLastConsumed(
                    	    													current,
                    	    													"discriminatorValue",
                    	    													lv_discriminatorValue_37_0,
                    	    													"org.eclipse.xtext.common.Terminals.STRING");
                    	    											

                    	    }


                    	    }


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 9 :
                    	    // InternalContextMappingDSL.g:9172:5: ({...}? => ( ({...}? => (otherlv_38= 'discriminatorColumn' otherlv_39= '=' ( (lv_discriminatorColumn_40_0= RULE_STRING ) ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:9172:5: ({...}? => ( ({...}? => (otherlv_38= 'discriminatorColumn' otherlv_39= '=' ( (lv_discriminatorColumn_40_0= RULE_STRING ) ) ) ) ) )
                    	    // InternalContextMappingDSL.g:9173:6: {...}? => ( ({...}? => (otherlv_38= 'discriminatorColumn' otherlv_39= '=' ( (lv_discriminatorColumn_40_0= RULE_STRING ) ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2(), 8) ) {
                    	        throw new FailedPredicateException(input, "ruleValueObject", "getUnorderedGroupHelper().canSelect(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2(), 8)");
                    	    }
                    	    // InternalContextMappingDSL.g:9173:111: ( ({...}? => (otherlv_38= 'discriminatorColumn' otherlv_39= '=' ( (lv_discriminatorColumn_40_0= RULE_STRING ) ) ) ) )
                    	    // InternalContextMappingDSL.g:9174:7: ({...}? => (otherlv_38= 'discriminatorColumn' otherlv_39= '=' ( (lv_discriminatorColumn_40_0= RULE_STRING ) ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2(), 8);
                    	    						
                    	    // InternalContextMappingDSL.g:9177:10: ({...}? => (otherlv_38= 'discriminatorColumn' otherlv_39= '=' ( (lv_discriminatorColumn_40_0= RULE_STRING ) ) ) )
                    	    // InternalContextMappingDSL.g:9177:11: {...}? => (otherlv_38= 'discriminatorColumn' otherlv_39= '=' ( (lv_discriminatorColumn_40_0= RULE_STRING ) ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleValueObject", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:9177:20: (otherlv_38= 'discriminatorColumn' otherlv_39= '=' ( (lv_discriminatorColumn_40_0= RULE_STRING ) ) )
                    	    // InternalContextMappingDSL.g:9177:21: otherlv_38= 'discriminatorColumn' otherlv_39= '=' ( (lv_discriminatorColumn_40_0= RULE_STRING ) )
                    	    {
                    	    otherlv_38=(Token)match(input,114,FOLLOW_81); 

                    	    										newLeafNode(otherlv_38, grammarAccess.getValueObjectAccess().getDiscriminatorColumnKeyword_7_2_8_0());
                    	    									
                    	    otherlv_39=(Token)match(input,21,FOLLOW_4); 

                    	    										newLeafNode(otherlv_39, grammarAccess.getValueObjectAccess().getEqualsSignKeyword_7_2_8_1());
                    	    									
                    	    // InternalContextMappingDSL.g:9185:10: ( (lv_discriminatorColumn_40_0= RULE_STRING ) )
                    	    // InternalContextMappingDSL.g:9186:11: (lv_discriminatorColumn_40_0= RULE_STRING )
                    	    {
                    	    // InternalContextMappingDSL.g:9186:11: (lv_discriminatorColumn_40_0= RULE_STRING )
                    	    // InternalContextMappingDSL.g:9187:12: lv_discriminatorColumn_40_0= RULE_STRING
                    	    {
                    	    lv_discriminatorColumn_40_0=(Token)match(input,RULE_STRING,FOLLOW_136); 

                    	    												newLeafNode(lv_discriminatorColumn_40_0, grammarAccess.getValueObjectAccess().getDiscriminatorColumnSTRINGTerminalRuleCall_7_2_8_2_0());
                    	    											

                    	    												if (current==null) {
                    	    													current = createModelElement(grammarAccess.getValueObjectRule());
                    	    												}
                    	    												setWithLastConsumed(
                    	    													current,
                    	    													"discriminatorColumn",
                    	    													lv_discriminatorColumn_40_0,
                    	    													"org.eclipse.xtext.common.Terminals.STRING");
                    	    											

                    	    }


                    	    }


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 10 :
                    	    // InternalContextMappingDSL.g:9209:5: ({...}? => ( ({...}? => (otherlv_41= 'discriminatorType' otherlv_42= '=' ( (lv_discriminatorType_43_0= ruleDiscriminatorType ) ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:9209:5: ({...}? => ( ({...}? => (otherlv_41= 'discriminatorType' otherlv_42= '=' ( (lv_discriminatorType_43_0= ruleDiscriminatorType ) ) ) ) ) )
                    	    // InternalContextMappingDSL.g:9210:6: {...}? => ( ({...}? => (otherlv_41= 'discriminatorType' otherlv_42= '=' ( (lv_discriminatorType_43_0= ruleDiscriminatorType ) ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2(), 9) ) {
                    	        throw new FailedPredicateException(input, "ruleValueObject", "getUnorderedGroupHelper().canSelect(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2(), 9)");
                    	    }
                    	    // InternalContextMappingDSL.g:9210:111: ( ({...}? => (otherlv_41= 'discriminatorType' otherlv_42= '=' ( (lv_discriminatorType_43_0= ruleDiscriminatorType ) ) ) ) )
                    	    // InternalContextMappingDSL.g:9211:7: ({...}? => (otherlv_41= 'discriminatorType' otherlv_42= '=' ( (lv_discriminatorType_43_0= ruleDiscriminatorType ) ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2(), 9);
                    	    						
                    	    // InternalContextMappingDSL.g:9214:10: ({...}? => (otherlv_41= 'discriminatorType' otherlv_42= '=' ( (lv_discriminatorType_43_0= ruleDiscriminatorType ) ) ) )
                    	    // InternalContextMappingDSL.g:9214:11: {...}? => (otherlv_41= 'discriminatorType' otherlv_42= '=' ( (lv_discriminatorType_43_0= ruleDiscriminatorType ) ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleValueObject", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:9214:20: (otherlv_41= 'discriminatorType' otherlv_42= '=' ( (lv_discriminatorType_43_0= ruleDiscriminatorType ) ) )
                    	    // InternalContextMappingDSL.g:9214:21: otherlv_41= 'discriminatorType' otherlv_42= '=' ( (lv_discriminatorType_43_0= ruleDiscriminatorType ) )
                    	    {
                    	    otherlv_41=(Token)match(input,115,FOLLOW_81); 

                    	    										newLeafNode(otherlv_41, grammarAccess.getValueObjectAccess().getDiscriminatorTypeKeyword_7_2_9_0());
                    	    									
                    	    otherlv_42=(Token)match(input,21,FOLLOW_130); 

                    	    										newLeafNode(otherlv_42, grammarAccess.getValueObjectAccess().getEqualsSignKeyword_7_2_9_1());
                    	    									
                    	    // InternalContextMappingDSL.g:9222:10: ( (lv_discriminatorType_43_0= ruleDiscriminatorType ) )
                    	    // InternalContextMappingDSL.g:9223:11: (lv_discriminatorType_43_0= ruleDiscriminatorType )
                    	    {
                    	    // InternalContextMappingDSL.g:9223:11: (lv_discriminatorType_43_0= ruleDiscriminatorType )
                    	    // InternalContextMappingDSL.g:9224:12: lv_discriminatorType_43_0= ruleDiscriminatorType
                    	    {

                    	    												newCompositeNode(grammarAccess.getValueObjectAccess().getDiscriminatorTypeDiscriminatorTypeEnumRuleCall_7_2_9_2_0());
                    	    											
                    	    pushFollow(FOLLOW_136);
                    	    lv_discriminatorType_43_0=ruleDiscriminatorType();

                    	    state._fsp--;


                    	    												if (current==null) {
                    	    													current = createModelElementForParent(grammarAccess.getValueObjectRule());
                    	    												}
                    	    												set(
                    	    													current,
                    	    													"discriminatorType",
                    	    													lv_discriminatorType_43_0,
                    	    													"org.contextmapper.tactic.dsl.TacticDDDLanguage.DiscriminatorType");
                    	    												afterParserOrEnumRuleCall();
                    	    											

                    	    }


                    	    }


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 11 :
                    	    // InternalContextMappingDSL.g:9247:5: ({...}? => ( ({...}? => (otherlv_44= 'discriminatorLength' otherlv_45= '=' ( (lv_discriminatorLength_46_0= RULE_STRING ) ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:9247:5: ({...}? => ( ({...}? => (otherlv_44= 'discriminatorLength' otherlv_45= '=' ( (lv_discriminatorLength_46_0= RULE_STRING ) ) ) ) ) )
                    	    // InternalContextMappingDSL.g:9248:6: {...}? => ( ({...}? => (otherlv_44= 'discriminatorLength' otherlv_45= '=' ( (lv_discriminatorLength_46_0= RULE_STRING ) ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2(), 10) ) {
                    	        throw new FailedPredicateException(input, "ruleValueObject", "getUnorderedGroupHelper().canSelect(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2(), 10)");
                    	    }
                    	    // InternalContextMappingDSL.g:9248:112: ( ({...}? => (otherlv_44= 'discriminatorLength' otherlv_45= '=' ( (lv_discriminatorLength_46_0= RULE_STRING ) ) ) ) )
                    	    // InternalContextMappingDSL.g:9249:7: ({...}? => (otherlv_44= 'discriminatorLength' otherlv_45= '=' ( (lv_discriminatorLength_46_0= RULE_STRING ) ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2(), 10);
                    	    						
                    	    // InternalContextMappingDSL.g:9252:10: ({...}? => (otherlv_44= 'discriminatorLength' otherlv_45= '=' ( (lv_discriminatorLength_46_0= RULE_STRING ) ) ) )
                    	    // InternalContextMappingDSL.g:9252:11: {...}? => (otherlv_44= 'discriminatorLength' otherlv_45= '=' ( (lv_discriminatorLength_46_0= RULE_STRING ) ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleValueObject", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:9252:20: (otherlv_44= 'discriminatorLength' otherlv_45= '=' ( (lv_discriminatorLength_46_0= RULE_STRING ) ) )
                    	    // InternalContextMappingDSL.g:9252:21: otherlv_44= 'discriminatorLength' otherlv_45= '=' ( (lv_discriminatorLength_46_0= RULE_STRING ) )
                    	    {
                    	    otherlv_44=(Token)match(input,116,FOLLOW_81); 

                    	    										newLeafNode(otherlv_44, grammarAccess.getValueObjectAccess().getDiscriminatorLengthKeyword_7_2_10_0());
                    	    									
                    	    otherlv_45=(Token)match(input,21,FOLLOW_4); 

                    	    										newLeafNode(otherlv_45, grammarAccess.getValueObjectAccess().getEqualsSignKeyword_7_2_10_1());
                    	    									
                    	    // InternalContextMappingDSL.g:9260:10: ( (lv_discriminatorLength_46_0= RULE_STRING ) )
                    	    // InternalContextMappingDSL.g:9261:11: (lv_discriminatorLength_46_0= RULE_STRING )
                    	    {
                    	    // InternalContextMappingDSL.g:9261:11: (lv_discriminatorLength_46_0= RULE_STRING )
                    	    // InternalContextMappingDSL.g:9262:12: lv_discriminatorLength_46_0= RULE_STRING
                    	    {
                    	    lv_discriminatorLength_46_0=(Token)match(input,RULE_STRING,FOLLOW_136); 

                    	    												newLeafNode(lv_discriminatorLength_46_0, grammarAccess.getValueObjectAccess().getDiscriminatorLengthSTRINGTerminalRuleCall_7_2_10_2_0());
                    	    											

                    	    												if (current==null) {
                    	    													current = createModelElement(grammarAccess.getValueObjectRule());
                    	    												}
                    	    												setWithLastConsumed(
                    	    													current,
                    	    													"discriminatorLength",
                    	    													lv_discriminatorLength_46_0,
                    	    													"org.eclipse.xtext.common.Terminals.STRING");
                    	    											

                    	    }


                    	    }


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 12 :
                    	    // InternalContextMappingDSL.g:9284:5: ({...}? => ( ({...}? => (otherlv_47= 'inheritanceType' otherlv_48= '=' ( (lv_inheritanceType_49_0= ruleInheritanceType ) ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:9284:5: ({...}? => ( ({...}? => (otherlv_47= 'inheritanceType' otherlv_48= '=' ( (lv_inheritanceType_49_0= ruleInheritanceType ) ) ) ) ) )
                    	    // InternalContextMappingDSL.g:9285:6: {...}? => ( ({...}? => (otherlv_47= 'inheritanceType' otherlv_48= '=' ( (lv_inheritanceType_49_0= ruleInheritanceType ) ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2(), 11) ) {
                    	        throw new FailedPredicateException(input, "ruleValueObject", "getUnorderedGroupHelper().canSelect(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2(), 11)");
                    	    }
                    	    // InternalContextMappingDSL.g:9285:112: ( ({...}? => (otherlv_47= 'inheritanceType' otherlv_48= '=' ( (lv_inheritanceType_49_0= ruleInheritanceType ) ) ) ) )
                    	    // InternalContextMappingDSL.g:9286:7: ({...}? => (otherlv_47= 'inheritanceType' otherlv_48= '=' ( (lv_inheritanceType_49_0= ruleInheritanceType ) ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2(), 11);
                    	    						
                    	    // InternalContextMappingDSL.g:9289:10: ({...}? => (otherlv_47= 'inheritanceType' otherlv_48= '=' ( (lv_inheritanceType_49_0= ruleInheritanceType ) ) ) )
                    	    // InternalContextMappingDSL.g:9289:11: {...}? => (otherlv_47= 'inheritanceType' otherlv_48= '=' ( (lv_inheritanceType_49_0= ruleInheritanceType ) ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleValueObject", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:9289:20: (otherlv_47= 'inheritanceType' otherlv_48= '=' ( (lv_inheritanceType_49_0= ruleInheritanceType ) ) )
                    	    // InternalContextMappingDSL.g:9289:21: otherlv_47= 'inheritanceType' otherlv_48= '=' ( (lv_inheritanceType_49_0= ruleInheritanceType ) )
                    	    {
                    	    otherlv_47=(Token)match(input,117,FOLLOW_81); 

                    	    										newLeafNode(otherlv_47, grammarAccess.getValueObjectAccess().getInheritanceTypeKeyword_7_2_11_0());
                    	    									
                    	    otherlv_48=(Token)match(input,21,FOLLOW_131); 

                    	    										newLeafNode(otherlv_48, grammarAccess.getValueObjectAccess().getEqualsSignKeyword_7_2_11_1());
                    	    									
                    	    // InternalContextMappingDSL.g:9297:10: ( (lv_inheritanceType_49_0= ruleInheritanceType ) )
                    	    // InternalContextMappingDSL.g:9298:11: (lv_inheritanceType_49_0= ruleInheritanceType )
                    	    {
                    	    // InternalContextMappingDSL.g:9298:11: (lv_inheritanceType_49_0= ruleInheritanceType )
                    	    // InternalContextMappingDSL.g:9299:12: lv_inheritanceType_49_0= ruleInheritanceType
                    	    {

                    	    												newCompositeNode(grammarAccess.getValueObjectAccess().getInheritanceTypeInheritanceTypeEnumRuleCall_7_2_11_2_0());
                    	    											
                    	    pushFollow(FOLLOW_136);
                    	    lv_inheritanceType_49_0=ruleInheritanceType();

                    	    state._fsp--;


                    	    												if (current==null) {
                    	    													current = createModelElementForParent(grammarAccess.getValueObjectRule());
                    	    												}
                    	    												set(
                    	    													current,
                    	    													"inheritanceType",
                    	    													lv_inheritanceType_49_0,
                    	    													"org.contextmapper.tactic.dsl.TacticDDDLanguage.InheritanceType");
                    	    												afterParserOrEnumRuleCall();
                    	    											

                    	    }


                    	    }


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 13 :
                    	    // InternalContextMappingDSL.g:9322:5: ({...}? => ( ({...}? => (otherlv_50= 'validate' otherlv_51= '=' ( (lv_validate_52_0= RULE_STRING ) ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:9322:5: ({...}? => ( ({...}? => (otherlv_50= 'validate' otherlv_51= '=' ( (lv_validate_52_0= RULE_STRING ) ) ) ) ) )
                    	    // InternalContextMappingDSL.g:9323:6: {...}? => ( ({...}? => (otherlv_50= 'validate' otherlv_51= '=' ( (lv_validate_52_0= RULE_STRING ) ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2(), 12) ) {
                    	        throw new FailedPredicateException(input, "ruleValueObject", "getUnorderedGroupHelper().canSelect(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2(), 12)");
                    	    }
                    	    // InternalContextMappingDSL.g:9323:112: ( ({...}? => (otherlv_50= 'validate' otherlv_51= '=' ( (lv_validate_52_0= RULE_STRING ) ) ) ) )
                    	    // InternalContextMappingDSL.g:9324:7: ({...}? => (otherlv_50= 'validate' otherlv_51= '=' ( (lv_validate_52_0= RULE_STRING ) ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2(), 12);
                    	    						
                    	    // InternalContextMappingDSL.g:9327:10: ({...}? => (otherlv_50= 'validate' otherlv_51= '=' ( (lv_validate_52_0= RULE_STRING ) ) ) )
                    	    // InternalContextMappingDSL.g:9327:11: {...}? => (otherlv_50= 'validate' otherlv_51= '=' ( (lv_validate_52_0= RULE_STRING ) ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleValueObject", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:9327:20: (otherlv_50= 'validate' otherlv_51= '=' ( (lv_validate_52_0= RULE_STRING ) ) )
                    	    // InternalContextMappingDSL.g:9327:21: otherlv_50= 'validate' otherlv_51= '=' ( (lv_validate_52_0= RULE_STRING ) )
                    	    {
                    	    otherlv_50=(Token)match(input,118,FOLLOW_81); 

                    	    										newLeafNode(otherlv_50, grammarAccess.getValueObjectAccess().getValidateKeyword_7_2_12_0());
                    	    									
                    	    otherlv_51=(Token)match(input,21,FOLLOW_4); 

                    	    										newLeafNode(otherlv_51, grammarAccess.getValueObjectAccess().getEqualsSignKeyword_7_2_12_1());
                    	    									
                    	    // InternalContextMappingDSL.g:9335:10: ( (lv_validate_52_0= RULE_STRING ) )
                    	    // InternalContextMappingDSL.g:9336:11: (lv_validate_52_0= RULE_STRING )
                    	    {
                    	    // InternalContextMappingDSL.g:9336:11: (lv_validate_52_0= RULE_STRING )
                    	    // InternalContextMappingDSL.g:9337:12: lv_validate_52_0= RULE_STRING
                    	    {
                    	    lv_validate_52_0=(Token)match(input,RULE_STRING,FOLLOW_136); 

                    	    												newLeafNode(lv_validate_52_0, grammarAccess.getValueObjectAccess().getValidateSTRINGTerminalRuleCall_7_2_12_2_0());
                    	    											

                    	    												if (current==null) {
                    	    													current = createModelElement(grammarAccess.getValueObjectRule());
                    	    												}
                    	    												setWithLastConsumed(
                    	    													current,
                    	    													"validate",
                    	    													lv_validate_52_0,
                    	    													"org.eclipse.xtext.common.Terminals.STRING");
                    	    											

                    	    }


                    	    }


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 14 :
                    	    // InternalContextMappingDSL.g:9359:5: ({...}? => ( ({...}? => ( ( (lv_persistent_53_0= 'persistent' ) ) | ( ( (lv_notPersistent_54_0= RULE_NOT ) ) otherlv_55= 'persistent' ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:9359:5: ({...}? => ( ({...}? => ( ( (lv_persistent_53_0= 'persistent' ) ) | ( ( (lv_notPersistent_54_0= RULE_NOT ) ) otherlv_55= 'persistent' ) ) ) ) )
                    	    // InternalContextMappingDSL.g:9360:6: {...}? => ( ({...}? => ( ( (lv_persistent_53_0= 'persistent' ) ) | ( ( (lv_notPersistent_54_0= RULE_NOT ) ) otherlv_55= 'persistent' ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2(), 13) ) {
                    	        throw new FailedPredicateException(input, "ruleValueObject", "getUnorderedGroupHelper().canSelect(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2(), 13)");
                    	    }
                    	    // InternalContextMappingDSL.g:9360:112: ( ({...}? => ( ( (lv_persistent_53_0= 'persistent' ) ) | ( ( (lv_notPersistent_54_0= RULE_NOT ) ) otherlv_55= 'persistent' ) ) ) )
                    	    // InternalContextMappingDSL.g:9361:7: ({...}? => ( ( (lv_persistent_53_0= 'persistent' ) ) | ( ( (lv_notPersistent_54_0= RULE_NOT ) ) otherlv_55= 'persistent' ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2(), 13);
                    	    						
                    	    // InternalContextMappingDSL.g:9364:10: ({...}? => ( ( (lv_persistent_53_0= 'persistent' ) ) | ( ( (lv_notPersistent_54_0= RULE_NOT ) ) otherlv_55= 'persistent' ) ) )
                    	    // InternalContextMappingDSL.g:9364:11: {...}? => ( ( (lv_persistent_53_0= 'persistent' ) ) | ( ( (lv_notPersistent_54_0= RULE_NOT ) ) otherlv_55= 'persistent' ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleValueObject", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:9364:20: ( ( (lv_persistent_53_0= 'persistent' ) ) | ( ( (lv_notPersistent_54_0= RULE_NOT ) ) otherlv_55= 'persistent' ) )
                    	    int alt231=2;
                    	    int LA231_0 = input.LA(1);

                    	    if ( (LA231_0==123) ) {
                    	        alt231=1;
                    	    }
                    	    else if ( (LA231_0==RULE_NOT) ) {
                    	        alt231=2;
                    	    }
                    	    else {
                    	        NoViableAltException nvae =
                    	            new NoViableAltException("", 231, 0, input);

                    	        throw nvae;
                    	    }
                    	    switch (alt231) {
                    	        case 1 :
                    	            // InternalContextMappingDSL.g:9364:21: ( (lv_persistent_53_0= 'persistent' ) )
                    	            {
                    	            // InternalContextMappingDSL.g:9364:21: ( (lv_persistent_53_0= 'persistent' ) )
                    	            // InternalContextMappingDSL.g:9365:11: (lv_persistent_53_0= 'persistent' )
                    	            {
                    	            // InternalContextMappingDSL.g:9365:11: (lv_persistent_53_0= 'persistent' )
                    	            // InternalContextMappingDSL.g:9366:12: lv_persistent_53_0= 'persistent'
                    	            {
                    	            lv_persistent_53_0=(Token)match(input,123,FOLLOW_136); 

                    	            												newLeafNode(lv_persistent_53_0, grammarAccess.getValueObjectAccess().getPersistentPersistentKeyword_7_2_13_0_0());
                    	            											

                    	            												if (current==null) {
                    	            													current = createModelElement(grammarAccess.getValueObjectRule());
                    	            												}
                    	            												setWithLastConsumed(current, "persistent", true, "persistent");
                    	            											

                    	            }


                    	            }


                    	            }
                    	            break;
                    	        case 2 :
                    	            // InternalContextMappingDSL.g:9379:10: ( ( (lv_notPersistent_54_0= RULE_NOT ) ) otherlv_55= 'persistent' )
                    	            {
                    	            // InternalContextMappingDSL.g:9379:10: ( ( (lv_notPersistent_54_0= RULE_NOT ) ) otherlv_55= 'persistent' )
                    	            // InternalContextMappingDSL.g:9380:11: ( (lv_notPersistent_54_0= RULE_NOT ) ) otherlv_55= 'persistent'
                    	            {
                    	            // InternalContextMappingDSL.g:9380:11: ( (lv_notPersistent_54_0= RULE_NOT ) )
                    	            // InternalContextMappingDSL.g:9381:12: (lv_notPersistent_54_0= RULE_NOT )
                    	            {
                    	            // InternalContextMappingDSL.g:9381:12: (lv_notPersistent_54_0= RULE_NOT )
                    	            // InternalContextMappingDSL.g:9382:13: lv_notPersistent_54_0= RULE_NOT
                    	            {
                    	            lv_notPersistent_54_0=(Token)match(input,RULE_NOT,FOLLOW_138); 

                    	            													newLeafNode(lv_notPersistent_54_0, grammarAccess.getValueObjectAccess().getNotPersistentNOTTerminalRuleCall_7_2_13_1_0_0());
                    	            												

                    	            													if (current==null) {
                    	            														current = createModelElement(grammarAccess.getValueObjectRule());
                    	            													}
                    	            													setWithLastConsumed(
                    	            														current,
                    	            														"notPersistent",
                    	            														true,
                    	            														"org.contextmapper.tactic.dsl.TacticDDDLanguage.NOT");
                    	            												

                    	            }


                    	            }

                    	            otherlv_55=(Token)match(input,123,FOLLOW_136); 

                    	            											newLeafNode(otherlv_55, grammarAccess.getValueObjectAccess().getPersistentKeyword_7_2_13_1_1());
                    	            										

                    	            }


                    	            }
                    	            break;

                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 15 :
                    	    // InternalContextMappingDSL.g:9409:5: ({...}? => ( ({...}? => ( (lv_aggregateRoot_56_0= 'aggregateRoot' ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:9409:5: ({...}? => ( ({...}? => ( (lv_aggregateRoot_56_0= 'aggregateRoot' ) ) ) ) )
                    	    // InternalContextMappingDSL.g:9410:6: {...}? => ( ({...}? => ( (lv_aggregateRoot_56_0= 'aggregateRoot' ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2(), 14) ) {
                    	        throw new FailedPredicateException(input, "ruleValueObject", "getUnorderedGroupHelper().canSelect(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2(), 14)");
                    	    }
                    	    // InternalContextMappingDSL.g:9410:112: ( ({...}? => ( (lv_aggregateRoot_56_0= 'aggregateRoot' ) ) ) )
                    	    // InternalContextMappingDSL.g:9411:7: ({...}? => ( (lv_aggregateRoot_56_0= 'aggregateRoot' ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2(), 14);
                    	    						
                    	    // InternalContextMappingDSL.g:9414:10: ({...}? => ( (lv_aggregateRoot_56_0= 'aggregateRoot' ) ) )
                    	    // InternalContextMappingDSL.g:9414:11: {...}? => ( (lv_aggregateRoot_56_0= 'aggregateRoot' ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleValueObject", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:9414:20: ( (lv_aggregateRoot_56_0= 'aggregateRoot' ) )
                    	    // InternalContextMappingDSL.g:9414:21: (lv_aggregateRoot_56_0= 'aggregateRoot' )
                    	    {
                    	    // InternalContextMappingDSL.g:9414:21: (lv_aggregateRoot_56_0= 'aggregateRoot' )
                    	    // InternalContextMappingDSL.g:9415:11: lv_aggregateRoot_56_0= 'aggregateRoot'
                    	    {
                    	    lv_aggregateRoot_56_0=(Token)match(input,119,FOLLOW_136); 

                    	    											newLeafNode(lv_aggregateRoot_56_0, grammarAccess.getValueObjectAccess().getAggregateRootAggregateRootKeyword_7_2_14_0());
                    	    										

                    	    											if (current==null) {
                    	    												current = createModelElement(grammarAccess.getValueObjectRule());
                    	    											}
                    	    											setWithLastConsumed(current, "aggregateRoot", true, "aggregateRoot");
                    	    										

                    	    }


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 16 :
                    	    // InternalContextMappingDSL.g:9432:5: ({...}? => ( ({...}? => (otherlv_57= 'belongsTo' ( (otherlv_58= '@' )? ( (otherlv_59= RULE_ID ) ) ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:9432:5: ({...}? => ( ({...}? => (otherlv_57= 'belongsTo' ( (otherlv_58= '@' )? ( (otherlv_59= RULE_ID ) ) ) ) ) ) )
                    	    // InternalContextMappingDSL.g:9433:6: {...}? => ( ({...}? => (otherlv_57= 'belongsTo' ( (otherlv_58= '@' )? ( (otherlv_59= RULE_ID ) ) ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2(), 15) ) {
                    	        throw new FailedPredicateException(input, "ruleValueObject", "getUnorderedGroupHelper().canSelect(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2(), 15)");
                    	    }
                    	    // InternalContextMappingDSL.g:9433:112: ( ({...}? => (otherlv_57= 'belongsTo' ( (otherlv_58= '@' )? ( (otherlv_59= RULE_ID ) ) ) ) ) )
                    	    // InternalContextMappingDSL.g:9434:7: ({...}? => (otherlv_57= 'belongsTo' ( (otherlv_58= '@' )? ( (otherlv_59= RULE_ID ) ) ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2(), 15);
                    	    						
                    	    // InternalContextMappingDSL.g:9437:10: ({...}? => (otherlv_57= 'belongsTo' ( (otherlv_58= '@' )? ( (otherlv_59= RULE_ID ) ) ) ) )
                    	    // InternalContextMappingDSL.g:9437:11: {...}? => (otherlv_57= 'belongsTo' ( (otherlv_58= '@' )? ( (otherlv_59= RULE_ID ) ) ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleValueObject", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:9437:20: (otherlv_57= 'belongsTo' ( (otherlv_58= '@' )? ( (otherlv_59= RULE_ID ) ) ) )
                    	    // InternalContextMappingDSL.g:9437:21: otherlv_57= 'belongsTo' ( (otherlv_58= '@' )? ( (otherlv_59= RULE_ID ) ) )
                    	    {
                    	    otherlv_57=(Token)match(input,120,FOLLOW_96); 

                    	    										newLeafNode(otherlv_57, grammarAccess.getValueObjectAccess().getBelongsToKeyword_7_2_15_0());
                    	    									
                    	    // InternalContextMappingDSL.g:9441:10: ( (otherlv_58= '@' )? ( (otherlv_59= RULE_ID ) ) )
                    	    // InternalContextMappingDSL.g:9442:11: (otherlv_58= '@' )? ( (otherlv_59= RULE_ID ) )
                    	    {
                    	    // InternalContextMappingDSL.g:9442:11: (otherlv_58= '@' )?
                    	    int alt232=2;
                    	    int LA232_0 = input.LA(1);

                    	    if ( (LA232_0==79) ) {
                    	        alt232=1;
                    	    }
                    	    switch (alt232) {
                    	        case 1 :
                    	            // InternalContextMappingDSL.g:9443:12: otherlv_58= '@'
                    	            {
                    	            otherlv_58=(Token)match(input,79,FOLLOW_10); 

                    	            												newLeafNode(otherlv_58, grammarAccess.getValueObjectAccess().getCommercialAtKeyword_7_2_15_1_0());
                    	            											

                    	            }
                    	            break;

                    	    }

                    	    // InternalContextMappingDSL.g:9448:11: ( (otherlv_59= RULE_ID ) )
                    	    // InternalContextMappingDSL.g:9449:12: (otherlv_59= RULE_ID )
                    	    {
                    	    // InternalContextMappingDSL.g:9449:12: (otherlv_59= RULE_ID )
                    	    // InternalContextMappingDSL.g:9450:13: otherlv_59= RULE_ID
                    	    {

                    	    													if (current==null) {
                    	    														current = createModelElement(grammarAccess.getValueObjectRule());
                    	    													}
                    	    												
                    	    otherlv_59=(Token)match(input,RULE_ID,FOLLOW_136); 

                    	    													newLeafNode(otherlv_59, grammarAccess.getValueObjectAccess().getBelongsToDomainObjectCrossReference_7_2_15_1_1_0());
                    	    												

                    	    }


                    	    }


                    	    }


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop233;
                        }
                    } while (true);


                    }


                    }

                     
                    					  getUnorderedGroupHelper().leave(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2());
                    					

                    }

                    // InternalContextMappingDSL.g:9475:4: ( ( (lv_attributes_60_0= ruleAttribute ) ) | ( (lv_references_61_0= ruleReference ) ) | ( (lv_operations_62_0= ruleDomainObjectOperation ) ) )*
                    loop234:
                    do {
                        int alt234=4;
                        switch ( input.LA(1) ) {
                        case RULE_STRING:
                            {
                            switch ( input.LA(2) ) {
                            case 127:
                            case 128:
                                {
                                alt234=3;
                                }
                                break;
                            case RULE_REF:
                                {
                                alt234=2;
                                }
                                break;
                            case RULE_ID:
                            case 109:
                            case 170:
                            case 171:
                            case 172:
                            case 173:
                            case 174:
                            case 175:
                            case 176:
                            case 177:
                            case 178:
                            case 179:
                            case 180:
                            case 181:
                            case 182:
                            case 183:
                            case 184:
                            case 185:
                            case 186:
                            case 187:
                            case 188:
                            case 189:
                            case 190:
                            case 191:
                            case 218:
                            case 228:
                            case 229:
                            case 230:
                            case 231:
                            case 232:
                            case 233:
                            case 234:
                                {
                                alt234=1;
                                }
                                break;

                            }

                            }
                            break;
                        case RULE_ID:
                        case 109:
                        case 170:
                        case 171:
                        case 172:
                        case 173:
                        case 174:
                        case 175:
                        case 176:
                        case 177:
                        case 178:
                        case 179:
                        case 180:
                        case 181:
                        case 182:
                        case 183:
                        case 184:
                        case 185:
                        case 186:
                        case 187:
                        case 188:
                        case 189:
                        case 190:
                        case 191:
                        case 218:
                        case 228:
                        case 229:
                        case 230:
                        case 231:
                        case 232:
                        case 233:
                        case 234:
                            {
                            alt234=1;
                            }
                            break;
                        case RULE_REF:
                            {
                            alt234=2;
                            }
                            break;
                        case 127:
                        case 128:
                            {
                            alt234=3;
                            }
                            break;

                        }

                        switch (alt234) {
                    	case 1 :
                    	    // InternalContextMappingDSL.g:9476:5: ( (lv_attributes_60_0= ruleAttribute ) )
                    	    {
                    	    // InternalContextMappingDSL.g:9476:5: ( (lv_attributes_60_0= ruleAttribute ) )
                    	    // InternalContextMappingDSL.g:9477:6: (lv_attributes_60_0= ruleAttribute )
                    	    {
                    	    // InternalContextMappingDSL.g:9477:6: (lv_attributes_60_0= ruleAttribute )
                    	    // InternalContextMappingDSL.g:9478:7: lv_attributes_60_0= ruleAttribute
                    	    {

                    	    							newCompositeNode(grammarAccess.getValueObjectAccess().getAttributesAttributeParserRuleCall_7_3_0_0());
                    	    						
                    	    pushFollow(FOLLOW_132);
                    	    lv_attributes_60_0=ruleAttribute();

                    	    state._fsp--;


                    	    							if (current==null) {
                    	    								current = createModelElementForParent(grammarAccess.getValueObjectRule());
                    	    							}
                    	    							add(
                    	    								current,
                    	    								"attributes",
                    	    								lv_attributes_60_0,
                    	    								"org.contextmapper.tactic.dsl.TacticDDDLanguage.Attribute");
                    	    							afterParserOrEnumRuleCall();
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 2 :
                    	    // InternalContextMappingDSL.g:9496:5: ( (lv_references_61_0= ruleReference ) )
                    	    {
                    	    // InternalContextMappingDSL.g:9496:5: ( (lv_references_61_0= ruleReference ) )
                    	    // InternalContextMappingDSL.g:9497:6: (lv_references_61_0= ruleReference )
                    	    {
                    	    // InternalContextMappingDSL.g:9497:6: (lv_references_61_0= ruleReference )
                    	    // InternalContextMappingDSL.g:9498:7: lv_references_61_0= ruleReference
                    	    {

                    	    							newCompositeNode(grammarAccess.getValueObjectAccess().getReferencesReferenceParserRuleCall_7_3_1_0());
                    	    						
                    	    pushFollow(FOLLOW_132);
                    	    lv_references_61_0=ruleReference();

                    	    state._fsp--;


                    	    							if (current==null) {
                    	    								current = createModelElementForParent(grammarAccess.getValueObjectRule());
                    	    							}
                    	    							add(
                    	    								current,
                    	    								"references",
                    	    								lv_references_61_0,
                    	    								"org.contextmapper.tactic.dsl.TacticDDDLanguage.Reference");
                    	    							afterParserOrEnumRuleCall();
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 3 :
                    	    // InternalContextMappingDSL.g:9516:5: ( (lv_operations_62_0= ruleDomainObjectOperation ) )
                    	    {
                    	    // InternalContextMappingDSL.g:9516:5: ( (lv_operations_62_0= ruleDomainObjectOperation ) )
                    	    // InternalContextMappingDSL.g:9517:6: (lv_operations_62_0= ruleDomainObjectOperation )
                    	    {
                    	    // InternalContextMappingDSL.g:9517:6: (lv_operations_62_0= ruleDomainObjectOperation )
                    	    // InternalContextMappingDSL.g:9518:7: lv_operations_62_0= ruleDomainObjectOperation
                    	    {

                    	    							newCompositeNode(grammarAccess.getValueObjectAccess().getOperationsDomainObjectOperationParserRuleCall_7_3_2_0());
                    	    						
                    	    pushFollow(FOLLOW_132);
                    	    lv_operations_62_0=ruleDomainObjectOperation();

                    	    state._fsp--;


                    	    							if (current==null) {
                    	    								current = createModelElementForParent(grammarAccess.getValueObjectRule());
                    	    							}
                    	    							add(
                    	    								current,
                    	    								"operations",
                    	    								lv_operations_62_0,
                    	    								"org.contextmapper.tactic.dsl.TacticDDDLanguage.DomainObjectOperation");
                    	    							afterParserOrEnumRuleCall();
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop234;
                        }
                    } while (true);

                    // InternalContextMappingDSL.g:9536:4: ( (lv_repository_63_0= ruleRepository ) )?
                    int alt235=2;
                    int LA235_0 = input.LA(1);

                    if ( (LA235_0==RULE_STRING||LA235_0==166) ) {
                        alt235=1;
                    }
                    switch (alt235) {
                        case 1 :
                            // InternalContextMappingDSL.g:9537:5: (lv_repository_63_0= ruleRepository )
                            {
                            // InternalContextMappingDSL.g:9537:5: (lv_repository_63_0= ruleRepository )
                            // InternalContextMappingDSL.g:9538:6: lv_repository_63_0= ruleRepository
                            {

                            						newCompositeNode(grammarAccess.getValueObjectAccess().getRepositoryRepositoryParserRuleCall_7_4_0());
                            					
                            pushFollow(FOLLOW_35);
                            lv_repository_63_0=ruleRepository();

                            state._fsp--;


                            						if (current==null) {
                            							current = createModelElementForParent(grammarAccess.getValueObjectRule());
                            						}
                            						set(
                            							current,
                            							"repository",
                            							lv_repository_63_0,
                            							"org.contextmapper.tactic.dsl.TacticDDDLanguage.Repository");
                            						afterParserOrEnumRuleCall();
                            					

                            }


                            }
                            break;

                    }

                    otherlv_64=(Token)match(input,RULE_CLOSE,FOLLOW_2); 

                    				newLeafNode(otherlv_64, grammarAccess.getValueObjectAccess().getRightCurlyBracketKeyword_7_5());
                    			

                    }
                    break;

            }


            }


            }


            	leaveRule();

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleValueObject"


    // $ANTLR start "entryRuleDomainEvent"
    // InternalContextMappingDSL.g:9564:1: entryRuleDomainEvent returns [EObject current=null] : iv_ruleDomainEvent= ruleDomainEvent EOF ;
    public final EObject entryRuleDomainEvent() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleDomainEvent = null;


        try {
            // InternalContextMappingDSL.g:9564:52: (iv_ruleDomainEvent= ruleDomainEvent EOF )
            // InternalContextMappingDSL.g:9565:2: iv_ruleDomainEvent= ruleDomainEvent EOF
            {
             newCompositeNode(grammarAccess.getDomainEventRule()); 
            pushFollow(FOLLOW_1);
            iv_ruleDomainEvent=ruleDomainEvent();

            state._fsp--;

             current =iv_ruleDomainEvent; 
            match(input,EOF,FOLLOW_2); 

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleDomainEvent"


    // $ANTLR start "ruleDomainEvent"
    // InternalContextMappingDSL.g:9571:1: ruleDomainEvent returns [EObject current=null] : ( ( (lv_comment_0_0= RULE_SL_COMMENT ) )? ( (lv_doc_1_0= RULE_STRING ) )? ( (lv_abstract_2_0= 'abstract' ) )? otherlv_3= 'DomainEvent' ( (lv_name_4_0= RULE_ID ) ) (otherlv_5= 'extends' ( (otherlv_6= '@' ( (otherlv_7= RULE_ID ) ) ) | ( (lv_extendsName_8_0= ruleJavaIdentifier ) ) ) )? (otherlv_9= 'with' (otherlv_10= '@' )? ( (otherlv_11= RULE_ID ) ) )* (otherlv_12= '{' (otherlv_13= 'package' otherlv_14= '=' ( (lv_package_15_0= ruleJavaIdentifier ) ) )? ( ( ( ( ({...}? => ( ({...}? => ( ( (lv_cache_17_0= 'cache' ) ) | (this_NOT_18= RULE_NOT otherlv_19= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_20_0= 'gap' ) ) | ( (lv_noGapClass_21_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_22_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_23= 'hint' otherlv_24= '=' ( (lv_hint_25_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_26= 'databaseTable' otherlv_27= '=' ( (lv_databaseTable_28_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'discriminatorValue' otherlv_30= '=' ( (lv_discriminatorValue_31_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'discriminatorColumn' otherlv_33= '=' ( (lv_discriminatorColumn_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'discriminatorType' otherlv_36= '=' ( (lv_discriminatorType_37_0= ruleDiscriminatorType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'discriminatorLength' otherlv_39= '=' ( (lv_discriminatorLength_40_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'inheritanceType' otherlv_42= '=' ( (lv_inheritanceType_43_0= ruleInheritanceType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_44= 'validate' otherlv_45= '=' ( (lv_validate_46_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_persistent_47_0= 'persistent' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_aggregateRoot_48_0= 'aggregateRoot' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_49= 'belongsTo' ( (otherlv_50= '@' )? ( (otherlv_51= RULE_ID ) ) ) ) ) ) ) )* ) ) ) ( ( (lv_attributes_52_0= ruleAttribute ) ) | ( (lv_references_53_0= ruleReference ) ) | ( (lv_operations_54_0= ruleDomainObjectOperation ) ) )* ( (lv_repository_55_0= ruleRepository ) )? otherlv_56= '}' )? ) ;
    public final EObject ruleDomainEvent() throws RecognitionException {
        EObject current = null;

        Token lv_comment_0_0=null;
        Token lv_doc_1_0=null;
        Token lv_abstract_2_0=null;
        Token otherlv_3=null;
        Token lv_name_4_0=null;
        Token otherlv_5=null;
        Token otherlv_6=null;
        Token otherlv_7=null;
        Token otherlv_9=null;
        Token otherlv_10=null;
        Token otherlv_11=null;
        Token otherlv_12=null;
        Token otherlv_13=null;
        Token otherlv_14=null;
        Token lv_cache_17_0=null;
        Token this_NOT_18=null;
        Token otherlv_19=null;
        Token lv_gapClass_20_0=null;
        Token lv_noGapClass_21_0=null;
        Token lv_scaffold_22_0=null;
        Token otherlv_23=null;
        Token otherlv_24=null;
        Token lv_hint_25_0=null;
        Token otherlv_26=null;
        Token otherlv_27=null;
        Token lv_databaseTable_28_0=null;
        Token otherlv_29=null;
        Token otherlv_30=null;
        Token lv_discriminatorValue_31_0=null;
        Token otherlv_32=null;
        Token otherlv_33=null;
        Token lv_discriminatorColumn_34_0=null;
        Token otherlv_35=null;
        Token otherlv_36=null;
        Token otherlv_38=null;
        Token otherlv_39=null;
        Token lv_discriminatorLength_40_0=null;
        Token otherlv_41=null;
        Token otherlv_42=null;
        Token otherlv_44=null;
        Token otherlv_45=null;
        Token lv_validate_46_0=null;
        Token lv_persistent_47_0=null;
        Token lv_aggregateRoot_48_0=null;
        Token otherlv_49=null;
        Token otherlv_50=null;
        Token otherlv_51=null;
        Token otherlv_56=null;
        AntlrDatatypeRuleToken lv_extendsName_8_0 = null;

        AntlrDatatypeRuleToken lv_package_15_0 = null;

        Enumerator lv_discriminatorType_37_0 = null;

        Enumerator lv_inheritanceType_43_0 = null;

        EObject lv_attributes_52_0 = null;

        EObject lv_references_53_0 = null;

        EObject lv_operations_54_0 = null;

        EObject lv_repository_55_0 = null;



        	enterRule();

        try {
            // InternalContextMappingDSL.g:9577:2: ( ( ( (lv_comment_0_0= RULE_SL_COMMENT ) )? ( (lv_doc_1_0= RULE_STRING ) )? ( (lv_abstract_2_0= 'abstract' ) )? otherlv_3= 'DomainEvent' ( (lv_name_4_0= RULE_ID ) ) (otherlv_5= 'extends' ( (otherlv_6= '@' ( (otherlv_7= RULE_ID ) ) ) | ( (lv_extendsName_8_0= ruleJavaIdentifier ) ) ) )? (otherlv_9= 'with' (otherlv_10= '@' )? ( (otherlv_11= RULE_ID ) ) )* (otherlv_12= '{' (otherlv_13= 'package' otherlv_14= '=' ( (lv_package_15_0= ruleJavaIdentifier ) ) )? ( ( ( ( ({...}? => ( ({...}? => ( ( (lv_cache_17_0= 'cache' ) ) | (this_NOT_18= RULE_NOT otherlv_19= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_20_0= 'gap' ) ) | ( (lv_noGapClass_21_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_22_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_23= 'hint' otherlv_24= '=' ( (lv_hint_25_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_26= 'databaseTable' otherlv_27= '=' ( (lv_databaseTable_28_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'discriminatorValue' otherlv_30= '=' ( (lv_discriminatorValue_31_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'discriminatorColumn' otherlv_33= '=' ( (lv_discriminatorColumn_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'discriminatorType' otherlv_36= '=' ( (lv_discriminatorType_37_0= ruleDiscriminatorType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'discriminatorLength' otherlv_39= '=' ( (lv_discriminatorLength_40_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'inheritanceType' otherlv_42= '=' ( (lv_inheritanceType_43_0= ruleInheritanceType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_44= 'validate' otherlv_45= '=' ( (lv_validate_46_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_persistent_47_0= 'persistent' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_aggregateRoot_48_0= 'aggregateRoot' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_49= 'belongsTo' ( (otherlv_50= '@' )? ( (otherlv_51= RULE_ID ) ) ) ) ) ) ) )* ) ) ) ( ( (lv_attributes_52_0= ruleAttribute ) ) | ( (lv_references_53_0= ruleReference ) ) | ( (lv_operations_54_0= ruleDomainObjectOperation ) ) )* ( (lv_repository_55_0= ruleRepository ) )? otherlv_56= '}' )? ) )
            // InternalContextMappingDSL.g:9578:2: ( ( (lv_comment_0_0= RULE_SL_COMMENT ) )? ( (lv_doc_1_0= RULE_STRING ) )? ( (lv_abstract_2_0= 'abstract' ) )? otherlv_3= 'DomainEvent' ( (lv_name_4_0= RULE_ID ) ) (otherlv_5= 'extends' ( (otherlv_6= '@' ( (otherlv_7= RULE_ID ) ) ) | ( (lv_extendsName_8_0= ruleJavaIdentifier ) ) ) )? (otherlv_9= 'with' (otherlv_10= '@' )? ( (otherlv_11= RULE_ID ) ) )* (otherlv_12= '{' (otherlv_13= 'package' otherlv_14= '=' ( (lv_package_15_0= ruleJavaIdentifier ) ) )? ( ( ( ( ({...}? => ( ({...}? => ( ( (lv_cache_17_0= 'cache' ) ) | (this_NOT_18= RULE_NOT otherlv_19= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_20_0= 'gap' ) ) | ( (lv_noGapClass_21_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_22_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_23= 'hint' otherlv_24= '=' ( (lv_hint_25_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_26= 'databaseTable' otherlv_27= '=' ( (lv_databaseTable_28_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'discriminatorValue' otherlv_30= '=' ( (lv_discriminatorValue_31_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'discriminatorColumn' otherlv_33= '=' ( (lv_discriminatorColumn_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'discriminatorType' otherlv_36= '=' ( (lv_discriminatorType_37_0= ruleDiscriminatorType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'discriminatorLength' otherlv_39= '=' ( (lv_discriminatorLength_40_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'inheritanceType' otherlv_42= '=' ( (lv_inheritanceType_43_0= ruleInheritanceType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_44= 'validate' otherlv_45= '=' ( (lv_validate_46_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_persistent_47_0= 'persistent' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_aggregateRoot_48_0= 'aggregateRoot' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_49= 'belongsTo' ( (otherlv_50= '@' )? ( (otherlv_51= RULE_ID ) ) ) ) ) ) ) )* ) ) ) ( ( (lv_attributes_52_0= ruleAttribute ) ) | ( (lv_references_53_0= ruleReference ) ) | ( (lv_operations_54_0= ruleDomainObjectOperation ) ) )* ( (lv_repository_55_0= ruleRepository ) )? otherlv_56= '}' )? )
            {
            // InternalContextMappingDSL.g:9578:2: ( ( (lv_comment_0_0= RULE_SL_COMMENT ) )? ( (lv_doc_1_0= RULE_STRING ) )? ( (lv_abstract_2_0= 'abstract' ) )? otherlv_3= 'DomainEvent' ( (lv_name_4_0= RULE_ID ) ) (otherlv_5= 'extends' ( (otherlv_6= '@' ( (otherlv_7= RULE_ID ) ) ) | ( (lv_extendsName_8_0= ruleJavaIdentifier ) ) ) )? (otherlv_9= 'with' (otherlv_10= '@' )? ( (otherlv_11= RULE_ID ) ) )* (otherlv_12= '{' (otherlv_13= 'package' otherlv_14= '=' ( (lv_package_15_0= ruleJavaIdentifier ) ) )? ( ( ( ( ({...}? => ( ({...}? => ( ( (lv_cache_17_0= 'cache' ) ) | (this_NOT_18= RULE_NOT otherlv_19= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_20_0= 'gap' ) ) | ( (lv_noGapClass_21_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_22_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_23= 'hint' otherlv_24= '=' ( (lv_hint_25_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_26= 'databaseTable' otherlv_27= '=' ( (lv_databaseTable_28_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'discriminatorValue' otherlv_30= '=' ( (lv_discriminatorValue_31_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'discriminatorColumn' otherlv_33= '=' ( (lv_discriminatorColumn_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'discriminatorType' otherlv_36= '=' ( (lv_discriminatorType_37_0= ruleDiscriminatorType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'discriminatorLength' otherlv_39= '=' ( (lv_discriminatorLength_40_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'inheritanceType' otherlv_42= '=' ( (lv_inheritanceType_43_0= ruleInheritanceType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_44= 'validate' otherlv_45= '=' ( (lv_validate_46_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_persistent_47_0= 'persistent' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_aggregateRoot_48_0= 'aggregateRoot' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_49= 'belongsTo' ( (otherlv_50= '@' )? ( (otherlv_51= RULE_ID ) ) ) ) ) ) ) )* ) ) ) ( ( (lv_attributes_52_0= ruleAttribute ) ) | ( (lv_references_53_0= ruleReference ) ) | ( (lv_operations_54_0= ruleDomainObjectOperation ) ) )* ( (lv_repository_55_0= ruleRepository ) )? otherlv_56= '}' )? )
            // InternalContextMappingDSL.g:9579:3: ( (lv_comment_0_0= RULE_SL_COMMENT ) )? ( (lv_doc_1_0= RULE_STRING ) )? ( (lv_abstract_2_0= 'abstract' ) )? otherlv_3= 'DomainEvent' ( (lv_name_4_0= RULE_ID ) ) (otherlv_5= 'extends' ( (otherlv_6= '@' ( (otherlv_7= RULE_ID ) ) ) | ( (lv_extendsName_8_0= ruleJavaIdentifier ) ) ) )? (otherlv_9= 'with' (otherlv_10= '@' )? ( (otherlv_11= RULE_ID ) ) )* (otherlv_12= '{' (otherlv_13= 'package' otherlv_14= '=' ( (lv_package_15_0= ruleJavaIdentifier ) ) )? ( ( ( ( ({...}? => ( ({...}? => ( ( (lv_cache_17_0= 'cache' ) ) | (this_NOT_18= RULE_NOT otherlv_19= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_20_0= 'gap' ) ) | ( (lv_noGapClass_21_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_22_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_23= 'hint' otherlv_24= '=' ( (lv_hint_25_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_26= 'databaseTable' otherlv_27= '=' ( (lv_databaseTable_28_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'discriminatorValue' otherlv_30= '=' ( (lv_discriminatorValue_31_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'discriminatorColumn' otherlv_33= '=' ( (lv_discriminatorColumn_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'discriminatorType' otherlv_36= '=' ( (lv_discriminatorType_37_0= ruleDiscriminatorType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'discriminatorLength' otherlv_39= '=' ( (lv_discriminatorLength_40_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'inheritanceType' otherlv_42= '=' ( (lv_inheritanceType_43_0= ruleInheritanceType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_44= 'validate' otherlv_45= '=' ( (lv_validate_46_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_persistent_47_0= 'persistent' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_aggregateRoot_48_0= 'aggregateRoot' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_49= 'belongsTo' ( (otherlv_50= '@' )? ( (otherlv_51= RULE_ID ) ) ) ) ) ) ) )* ) ) ) ( ( (lv_attributes_52_0= ruleAttribute ) ) | ( (lv_references_53_0= ruleReference ) ) | ( (lv_operations_54_0= ruleDomainObjectOperation ) ) )* ( (lv_repository_55_0= ruleRepository ) )? otherlv_56= '}' )?
            {
            // InternalContextMappingDSL.g:9579:3: ( (lv_comment_0_0= RULE_SL_COMMENT ) )?
            int alt237=2;
            int LA237_0 = input.LA(1);

            if ( (LA237_0==RULE_SL_COMMENT) ) {
                alt237=1;
            }
            switch (alt237) {
                case 1 :
                    // InternalContextMappingDSL.g:9580:4: (lv_comment_0_0= RULE_SL_COMMENT )
                    {
                    // InternalContextMappingDSL.g:9580:4: (lv_comment_0_0= RULE_SL_COMMENT )
                    // InternalContextMappingDSL.g:9581:5: lv_comment_0_0= RULE_SL_COMMENT
                    {
                    lv_comment_0_0=(Token)match(input,RULE_SL_COMMENT,FOLLOW_139); 

                    					newLeafNode(lv_comment_0_0, grammarAccess.getDomainEventAccess().getCommentSL_COMMENTTerminalRuleCall_0_0());
                    				

                    					if (current==null) {
                    						current = createModelElement(grammarAccess.getDomainEventRule());
                    					}
                    					setWithLastConsumed(
                    						current,
                    						"comment",
                    						lv_comment_0_0,
                    						"org.eclipse.xtext.common.Terminals.SL_COMMENT");
                    				

                    }


                    }
                    break;

            }

            // InternalContextMappingDSL.g:9597:3: ( (lv_doc_1_0= RULE_STRING ) )?
            int alt238=2;
            int LA238_0 = input.LA(1);

            if ( (LA238_0==RULE_STRING) ) {
                alt238=1;
            }
            switch (alt238) {
                case 1 :
                    // InternalContextMappingDSL.g:9598:4: (lv_doc_1_0= RULE_STRING )
                    {
                    // InternalContextMappingDSL.g:9598:4: (lv_doc_1_0= RULE_STRING )
                    // InternalContextMappingDSL.g:9599:5: lv_doc_1_0= RULE_STRING
                    {
                    lv_doc_1_0=(Token)match(input,RULE_STRING,FOLLOW_140); 

                    					newLeafNode(lv_doc_1_0, grammarAccess.getDomainEventAccess().getDocSTRINGTerminalRuleCall_1_0());
                    				

                    					if (current==null) {
                    						current = createModelElement(grammarAccess.getDomainEventRule());
                    					}
                    					setWithLastConsumed(
                    						current,
                    						"doc",
                    						lv_doc_1_0,
                    						"org.eclipse.xtext.common.Terminals.STRING");
                    				

                    }


                    }
                    break;

            }

            // InternalContextMappingDSL.g:9615:3: ( (lv_abstract_2_0= 'abstract' ) )?
            int alt239=2;
            int LA239_0 = input.LA(1);

            if ( (LA239_0==105) ) {
                alt239=1;
            }
            switch (alt239) {
                case 1 :
                    // InternalContextMappingDSL.g:9616:4: (lv_abstract_2_0= 'abstract' )
                    {
                    // InternalContextMappingDSL.g:9616:4: (lv_abstract_2_0= 'abstract' )
                    // InternalContextMappingDSL.g:9617:5: lv_abstract_2_0= 'abstract'
                    {
                    lv_abstract_2_0=(Token)match(input,105,FOLLOW_141); 

                    					newLeafNode(lv_abstract_2_0, grammarAccess.getDomainEventAccess().getAbstractAbstractKeyword_2_0());
                    				

                    					if (current==null) {
                    						current = createModelElement(grammarAccess.getDomainEventRule());
                    					}
                    					setWithLastConsumed(current, "abstract", true, "abstract");
                    				

                    }


                    }
                    break;

            }

            otherlv_3=(Token)match(input,124,FOLLOW_10); 

            			newLeafNode(otherlv_3, grammarAccess.getDomainEventAccess().getDomainEventKeyword_3());
            		
            // InternalContextMappingDSL.g:9633:3: ( (lv_name_4_0= RULE_ID ) )
            // InternalContextMappingDSL.g:9634:4: (lv_name_4_0= RULE_ID )
            {
            // InternalContextMappingDSL.g:9634:4: (lv_name_4_0= RULE_ID )
            // InternalContextMappingDSL.g:9635:5: lv_name_4_0= RULE_ID
            {
            lv_name_4_0=(Token)match(input,RULE_ID,FOLLOW_124); 

            					newLeafNode(lv_name_4_0, grammarAccess.getDomainEventAccess().getNameIDTerminalRuleCall_4_0());
            				

            					if (current==null) {
            						current = createModelElement(grammarAccess.getDomainEventRule());
            					}
            					setWithLastConsumed(
            						current,
            						"name",
            						lv_name_4_0,
            						"org.eclipse.xtext.common.Terminals.ID");
            				

            }


            }

            // InternalContextMappingDSL.g:9651:3: (otherlv_5= 'extends' ( (otherlv_6= '@' ( (otherlv_7= RULE_ID ) ) ) | ( (lv_extendsName_8_0= ruleJavaIdentifier ) ) ) )?
            int alt241=2;
            int LA241_0 = input.LA(1);

            if ( (LA241_0==107) ) {
                alt241=1;
            }
            switch (alt241) {
                case 1 :
                    // InternalContextMappingDSL.g:9652:4: otherlv_5= 'extends' ( (otherlv_6= '@' ( (otherlv_7= RULE_ID ) ) ) | ( (lv_extendsName_8_0= ruleJavaIdentifier ) ) )
                    {
                    otherlv_5=(Token)match(input,107,FOLLOW_96); 

                    				newLeafNode(otherlv_5, grammarAccess.getDomainEventAccess().getExtendsKeyword_5_0());
                    			
                    // InternalContextMappingDSL.g:9656:4: ( (otherlv_6= '@' ( (otherlv_7= RULE_ID ) ) ) | ( (lv_extendsName_8_0= ruleJavaIdentifier ) ) )
                    int alt240=2;
                    int LA240_0 = input.LA(1);

                    if ( (LA240_0==79) ) {
                        alt240=1;
                    }
                    else if ( (LA240_0==RULE_ID) ) {
                        alt240=2;
                    }
                    else {
                        NoViableAltException nvae =
                            new NoViableAltException("", 240, 0, input);

                        throw nvae;
                    }
                    switch (alt240) {
                        case 1 :
                            // InternalContextMappingDSL.g:9657:5: (otherlv_6= '@' ( (otherlv_7= RULE_ID ) ) )
                            {
                            // InternalContextMappingDSL.g:9657:5: (otherlv_6= '@' ( (otherlv_7= RULE_ID ) ) )
                            // InternalContextMappingDSL.g:9658:6: otherlv_6= '@' ( (otherlv_7= RULE_ID ) )
                            {
                            otherlv_6=(Token)match(input,79,FOLLOW_10); 

                            						newLeafNode(otherlv_6, grammarAccess.getDomainEventAccess().getCommercialAtKeyword_5_1_0_0());
                            					
                            // InternalContextMappingDSL.g:9662:6: ( (otherlv_7= RULE_ID ) )
                            // InternalContextMappingDSL.g:9663:7: (otherlv_7= RULE_ID )
                            {
                            // InternalContextMappingDSL.g:9663:7: (otherlv_7= RULE_ID )
                            // InternalContextMappingDSL.g:9664:8: otherlv_7= RULE_ID
                            {

                            								if (current==null) {
                            									current = createModelElement(grammarAccess.getDomainEventRule());
                            								}
                            							
                            otherlv_7=(Token)match(input,RULE_ID,FOLLOW_125); 

                            								newLeafNode(otherlv_7, grammarAccess.getDomainEventAccess().getExtendsDomainEventCrossReference_5_1_0_1_0());
                            							

                            }


                            }


                            }


                            }
                            break;
                        case 2 :
                            // InternalContextMappingDSL.g:9677:5: ( (lv_extendsName_8_0= ruleJavaIdentifier ) )
                            {
                            // InternalContextMappingDSL.g:9677:5: ( (lv_extendsName_8_0= ruleJavaIdentifier ) )
                            // InternalContextMappingDSL.g:9678:6: (lv_extendsName_8_0= ruleJavaIdentifier )
                            {
                            // InternalContextMappingDSL.g:9678:6: (lv_extendsName_8_0= ruleJavaIdentifier )
                            // InternalContextMappingDSL.g:9679:7: lv_extendsName_8_0= ruleJavaIdentifier
                            {

                            							newCompositeNode(grammarAccess.getDomainEventAccess().getExtendsNameJavaIdentifierParserRuleCall_5_1_1_0());
                            						
                            pushFollow(FOLLOW_125);
                            lv_extendsName_8_0=ruleJavaIdentifier();

                            state._fsp--;


                            							if (current==null) {
                            								current = createModelElementForParent(grammarAccess.getDomainEventRule());
                            							}
                            							set(
                            								current,
                            								"extendsName",
                            								lv_extendsName_8_0,
                            								"org.contextmapper.tactic.dsl.TacticDDDLanguage.JavaIdentifier");
                            							afterParserOrEnumRuleCall();
                            						

                            }


                            }


                            }
                            break;

                    }


                    }
                    break;

            }

            // InternalContextMappingDSL.g:9698:3: (otherlv_9= 'with' (otherlv_10= '@' )? ( (otherlv_11= RULE_ID ) ) )*
            loop243:
            do {
                int alt243=2;
                int LA243_0 = input.LA(1);

                if ( (LA243_0==108) ) {
                    alt243=1;
                }


                switch (alt243) {
            	case 1 :
            	    // InternalContextMappingDSL.g:9699:4: otherlv_9= 'with' (otherlv_10= '@' )? ( (otherlv_11= RULE_ID ) )
            	    {
            	    otherlv_9=(Token)match(input,108,FOLLOW_96); 

            	    				newLeafNode(otherlv_9, grammarAccess.getDomainEventAccess().getWithKeyword_6_0());
            	    			
            	    // InternalContextMappingDSL.g:9703:4: (otherlv_10= '@' )?
            	    int alt242=2;
            	    int LA242_0 = input.LA(1);

            	    if ( (LA242_0==79) ) {
            	        alt242=1;
            	    }
            	    switch (alt242) {
            	        case 1 :
            	            // InternalContextMappingDSL.g:9704:5: otherlv_10= '@'
            	            {
            	            otherlv_10=(Token)match(input,79,FOLLOW_10); 

            	            					newLeafNode(otherlv_10, grammarAccess.getDomainEventAccess().getCommercialAtKeyword_6_1());
            	            				

            	            }
            	            break;

            	    }

            	    // InternalContextMappingDSL.g:9709:4: ( (otherlv_11= RULE_ID ) )
            	    // InternalContextMappingDSL.g:9710:5: (otherlv_11= RULE_ID )
            	    {
            	    // InternalContextMappingDSL.g:9710:5: (otherlv_11= RULE_ID )
            	    // InternalContextMappingDSL.g:9711:6: otherlv_11= RULE_ID
            	    {

            	    						if (current==null) {
            	    							current = createModelElement(grammarAccess.getDomainEventRule());
            	    						}
            	    					
            	    otherlv_11=(Token)match(input,RULE_ID,FOLLOW_125); 

            	    						newLeafNode(otherlv_11, grammarAccess.getDomainEventAccess().getTraitsTraitCrossReference_6_2_0());
            	    					

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop243;
                }
            } while (true);

            // InternalContextMappingDSL.g:9723:3: (otherlv_12= '{' (otherlv_13= 'package' otherlv_14= '=' ( (lv_package_15_0= ruleJavaIdentifier ) ) )? ( ( ( ( ({...}? => ( ({...}? => ( ( (lv_cache_17_0= 'cache' ) ) | (this_NOT_18= RULE_NOT otherlv_19= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_20_0= 'gap' ) ) | ( (lv_noGapClass_21_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_22_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_23= 'hint' otherlv_24= '=' ( (lv_hint_25_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_26= 'databaseTable' otherlv_27= '=' ( (lv_databaseTable_28_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'discriminatorValue' otherlv_30= '=' ( (lv_discriminatorValue_31_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'discriminatorColumn' otherlv_33= '=' ( (lv_discriminatorColumn_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'discriminatorType' otherlv_36= '=' ( (lv_discriminatorType_37_0= ruleDiscriminatorType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'discriminatorLength' otherlv_39= '=' ( (lv_discriminatorLength_40_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'inheritanceType' otherlv_42= '=' ( (lv_inheritanceType_43_0= ruleInheritanceType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_44= 'validate' otherlv_45= '=' ( (lv_validate_46_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_persistent_47_0= 'persistent' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_aggregateRoot_48_0= 'aggregateRoot' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_49= 'belongsTo' ( (otherlv_50= '@' )? ( (otherlv_51= RULE_ID ) ) ) ) ) ) ) )* ) ) ) ( ( (lv_attributes_52_0= ruleAttribute ) ) | ( (lv_references_53_0= ruleReference ) ) | ( (lv_operations_54_0= ruleDomainObjectOperation ) ) )* ( (lv_repository_55_0= ruleRepository ) )? otherlv_56= '}' )?
            int alt251=2;
            int LA251_0 = input.LA(1);

            if ( (LA251_0==RULE_OPEN) ) {
                alt251=1;
            }
            switch (alt251) {
                case 1 :
                    // InternalContextMappingDSL.g:9724:4: otherlv_12= '{' (otherlv_13= 'package' otherlv_14= '=' ( (lv_package_15_0= ruleJavaIdentifier ) ) )? ( ( ( ( ({...}? => ( ({...}? => ( ( (lv_cache_17_0= 'cache' ) ) | (this_NOT_18= RULE_NOT otherlv_19= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_20_0= 'gap' ) ) | ( (lv_noGapClass_21_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_22_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_23= 'hint' otherlv_24= '=' ( (lv_hint_25_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_26= 'databaseTable' otherlv_27= '=' ( (lv_databaseTable_28_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'discriminatorValue' otherlv_30= '=' ( (lv_discriminatorValue_31_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'discriminatorColumn' otherlv_33= '=' ( (lv_discriminatorColumn_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'discriminatorType' otherlv_36= '=' ( (lv_discriminatorType_37_0= ruleDiscriminatorType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'discriminatorLength' otherlv_39= '=' ( (lv_discriminatorLength_40_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'inheritanceType' otherlv_42= '=' ( (lv_inheritanceType_43_0= ruleInheritanceType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_44= 'validate' otherlv_45= '=' ( (lv_validate_46_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_persistent_47_0= 'persistent' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_aggregateRoot_48_0= 'aggregateRoot' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_49= 'belongsTo' ( (otherlv_50= '@' )? ( (otherlv_51= RULE_ID ) ) ) ) ) ) ) )* ) ) ) ( ( (lv_attributes_52_0= ruleAttribute ) ) | ( (lv_references_53_0= ruleReference ) ) | ( (lv_operations_54_0= ruleDomainObjectOperation ) ) )* ( (lv_repository_55_0= ruleRepository ) )? otherlv_56= '}'
                    {
                    otherlv_12=(Token)match(input,RULE_OPEN,FOLLOW_142); 

                    				newLeafNode(otherlv_12, grammarAccess.getDomainEventAccess().getLeftCurlyBracketKeyword_7_0());
                    			
                    // InternalContextMappingDSL.g:9728:4: (otherlv_13= 'package' otherlv_14= '=' ( (lv_package_15_0= ruleJavaIdentifier ) ) )?
                    int alt244=2;
                    int LA244_0 = input.LA(1);

                    if ( (LA244_0==109) ) {
                        int LA244_1 = input.LA(2);

                        if ( (LA244_1==21) ) {
                            alt244=1;
                        }
                    }
                    switch (alt244) {
                        case 1 :
                            // InternalContextMappingDSL.g:9729:5: otherlv_13= 'package' otherlv_14= '=' ( (lv_package_15_0= ruleJavaIdentifier ) )
                            {
                            otherlv_13=(Token)match(input,109,FOLLOW_81); 

                            					newLeafNode(otherlv_13, grammarAccess.getDomainEventAccess().getPackageKeyword_7_1_0());
                            				
                            otherlv_14=(Token)match(input,21,FOLLOW_10); 

                            					newLeafNode(otherlv_14, grammarAccess.getDomainEventAccess().getEqualsSignKeyword_7_1_1());
                            				
                            // InternalContextMappingDSL.g:9737:5: ( (lv_package_15_0= ruleJavaIdentifier ) )
                            // InternalContextMappingDSL.g:9738:6: (lv_package_15_0= ruleJavaIdentifier )
                            {
                            // InternalContextMappingDSL.g:9738:6: (lv_package_15_0= ruleJavaIdentifier )
                            // InternalContextMappingDSL.g:9739:7: lv_package_15_0= ruleJavaIdentifier
                            {

                            							newCompositeNode(grammarAccess.getDomainEventAccess().getPackageJavaIdentifierParserRuleCall_7_1_2_0());
                            						
                            pushFollow(FOLLOW_142);
                            lv_package_15_0=ruleJavaIdentifier();

                            state._fsp--;


                            							if (current==null) {
                            								current = createModelElementForParent(grammarAccess.getDomainEventRule());
                            							}
                            							set(
                            								current,
                            								"package",
                            								lv_package_15_0,
                            								"org.contextmapper.tactic.dsl.TacticDDDLanguage.JavaIdentifier");
                            							afterParserOrEnumRuleCall();
                            						

                            }


                            }


                            }
                            break;

                    }

                    // InternalContextMappingDSL.g:9757:4: ( ( ( ( ({...}? => ( ({...}? => ( ( (lv_cache_17_0= 'cache' ) ) | (this_NOT_18= RULE_NOT otherlv_19= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_20_0= 'gap' ) ) | ( (lv_noGapClass_21_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_22_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_23= 'hint' otherlv_24= '=' ( (lv_hint_25_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_26= 'databaseTable' otherlv_27= '=' ( (lv_databaseTable_28_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'discriminatorValue' otherlv_30= '=' ( (lv_discriminatorValue_31_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'discriminatorColumn' otherlv_33= '=' ( (lv_discriminatorColumn_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'discriminatorType' otherlv_36= '=' ( (lv_discriminatorType_37_0= ruleDiscriminatorType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'discriminatorLength' otherlv_39= '=' ( (lv_discriminatorLength_40_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'inheritanceType' otherlv_42= '=' ( (lv_inheritanceType_43_0= ruleInheritanceType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_44= 'validate' otherlv_45= '=' ( (lv_validate_46_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_persistent_47_0= 'persistent' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_aggregateRoot_48_0= 'aggregateRoot' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_49= 'belongsTo' ( (otherlv_50= '@' )? ( (otherlv_51= RULE_ID ) ) ) ) ) ) ) )* ) ) )
                    // InternalContextMappingDSL.g:9758:5: ( ( ( ({...}? => ( ({...}? => ( ( (lv_cache_17_0= 'cache' ) ) | (this_NOT_18= RULE_NOT otherlv_19= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_20_0= 'gap' ) ) | ( (lv_noGapClass_21_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_22_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_23= 'hint' otherlv_24= '=' ( (lv_hint_25_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_26= 'databaseTable' otherlv_27= '=' ( (lv_databaseTable_28_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'discriminatorValue' otherlv_30= '=' ( (lv_discriminatorValue_31_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'discriminatorColumn' otherlv_33= '=' ( (lv_discriminatorColumn_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'discriminatorType' otherlv_36= '=' ( (lv_discriminatorType_37_0= ruleDiscriminatorType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'discriminatorLength' otherlv_39= '=' ( (lv_discriminatorLength_40_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'inheritanceType' otherlv_42= '=' ( (lv_inheritanceType_43_0= ruleInheritanceType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_44= 'validate' otherlv_45= '=' ( (lv_validate_46_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_persistent_47_0= 'persistent' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_aggregateRoot_48_0= 'aggregateRoot' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_49= 'belongsTo' ( (otherlv_50= '@' )? ( (otherlv_51= RULE_ID ) ) ) ) ) ) ) )* ) )
                    {
                    // InternalContextMappingDSL.g:9758:5: ( ( ( ({...}? => ( ({...}? => ( ( (lv_cache_17_0= 'cache' ) ) | (this_NOT_18= RULE_NOT otherlv_19= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_20_0= 'gap' ) ) | ( (lv_noGapClass_21_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_22_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_23= 'hint' otherlv_24= '=' ( (lv_hint_25_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_26= 'databaseTable' otherlv_27= '=' ( (lv_databaseTable_28_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'discriminatorValue' otherlv_30= '=' ( (lv_discriminatorValue_31_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'discriminatorColumn' otherlv_33= '=' ( (lv_discriminatorColumn_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'discriminatorType' otherlv_36= '=' ( (lv_discriminatorType_37_0= ruleDiscriminatorType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'discriminatorLength' otherlv_39= '=' ( (lv_discriminatorLength_40_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'inheritanceType' otherlv_42= '=' ( (lv_inheritanceType_43_0= ruleInheritanceType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_44= 'validate' otherlv_45= '=' ( (lv_validate_46_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_persistent_47_0= 'persistent' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_aggregateRoot_48_0= 'aggregateRoot' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_49= 'belongsTo' ( (otherlv_50= '@' )? ( (otherlv_51= RULE_ID ) ) ) ) ) ) ) )* ) )
                    // InternalContextMappingDSL.g:9759:6: ( ( ({...}? => ( ({...}? => ( ( (lv_cache_17_0= 'cache' ) ) | (this_NOT_18= RULE_NOT otherlv_19= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_20_0= 'gap' ) ) | ( (lv_noGapClass_21_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_22_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_23= 'hint' otherlv_24= '=' ( (lv_hint_25_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_26= 'databaseTable' otherlv_27= '=' ( (lv_databaseTable_28_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'discriminatorValue' otherlv_30= '=' ( (lv_discriminatorValue_31_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'discriminatorColumn' otherlv_33= '=' ( (lv_discriminatorColumn_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'discriminatorType' otherlv_36= '=' ( (lv_discriminatorType_37_0= ruleDiscriminatorType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'discriminatorLength' otherlv_39= '=' ( (lv_discriminatorLength_40_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'inheritanceType' otherlv_42= '=' ( (lv_inheritanceType_43_0= ruleInheritanceType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_44= 'validate' otherlv_45= '=' ( (lv_validate_46_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_persistent_47_0= 'persistent' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_aggregateRoot_48_0= 'aggregateRoot' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_49= 'belongsTo' ( (otherlv_50= '@' )? ( (otherlv_51= RULE_ID ) ) ) ) ) ) ) )* )
                    {
                     
                    					  getUnorderedGroupHelper().enter(grammarAccess.getDomainEventAccess().getUnorderedGroup_7_2());
                    					
                    // InternalContextMappingDSL.g:9762:6: ( ( ({...}? => ( ({...}? => ( ( (lv_cache_17_0= 'cache' ) ) | (this_NOT_18= RULE_NOT otherlv_19= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_20_0= 'gap' ) ) | ( (lv_noGapClass_21_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_22_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_23= 'hint' otherlv_24= '=' ( (lv_hint_25_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_26= 'databaseTable' otherlv_27= '=' ( (lv_databaseTable_28_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'discriminatorValue' otherlv_30= '=' ( (lv_discriminatorValue_31_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'discriminatorColumn' otherlv_33= '=' ( (lv_discriminatorColumn_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'discriminatorType' otherlv_36= '=' ( (lv_discriminatorType_37_0= ruleDiscriminatorType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'discriminatorLength' otherlv_39= '=' ( (lv_discriminatorLength_40_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'inheritanceType' otherlv_42= '=' ( (lv_inheritanceType_43_0= ruleInheritanceType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_44= 'validate' otherlv_45= '=' ( (lv_validate_46_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_persistent_47_0= 'persistent' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_aggregateRoot_48_0= 'aggregateRoot' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_49= 'belongsTo' ( (otherlv_50= '@' )? ( (otherlv_51= RULE_ID ) ) ) ) ) ) ) )* )
                    // InternalContextMappingDSL.g:9763:7: ( ({...}? => ( ({...}? => ( ( (lv_cache_17_0= 'cache' ) ) | (this_NOT_18= RULE_NOT otherlv_19= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_20_0= 'gap' ) ) | ( (lv_noGapClass_21_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_22_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_23= 'hint' otherlv_24= '=' ( (lv_hint_25_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_26= 'databaseTable' otherlv_27= '=' ( (lv_databaseTable_28_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'discriminatorValue' otherlv_30= '=' ( (lv_discriminatorValue_31_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'discriminatorColumn' otherlv_33= '=' ( (lv_discriminatorColumn_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'discriminatorType' otherlv_36= '=' ( (lv_discriminatorType_37_0= ruleDiscriminatorType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'discriminatorLength' otherlv_39= '=' ( (lv_discriminatorLength_40_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'inheritanceType' otherlv_42= '=' ( (lv_inheritanceType_43_0= ruleInheritanceType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_44= 'validate' otherlv_45= '=' ( (lv_validate_46_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_persistent_47_0= 'persistent' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_aggregateRoot_48_0= 'aggregateRoot' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_49= 'belongsTo' ( (otherlv_50= '@' )? ( (otherlv_51= RULE_ID ) ) ) ) ) ) ) )*
                    {
                    // InternalContextMappingDSL.g:9763:7: ( ({...}? => ( ({...}? => ( ( (lv_cache_17_0= 'cache' ) ) | (this_NOT_18= RULE_NOT otherlv_19= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_20_0= 'gap' ) ) | ( (lv_noGapClass_21_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_22_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_23= 'hint' otherlv_24= '=' ( (lv_hint_25_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_26= 'databaseTable' otherlv_27= '=' ( (lv_databaseTable_28_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'discriminatorValue' otherlv_30= '=' ( (lv_discriminatorValue_31_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'discriminatorColumn' otherlv_33= '=' ( (lv_discriminatorColumn_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'discriminatorType' otherlv_36= '=' ( (lv_discriminatorType_37_0= ruleDiscriminatorType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'discriminatorLength' otherlv_39= '=' ( (lv_discriminatorLength_40_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'inheritanceType' otherlv_42= '=' ( (lv_inheritanceType_43_0= ruleInheritanceType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_44= 'validate' otherlv_45= '=' ( (lv_validate_46_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_persistent_47_0= 'persistent' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_aggregateRoot_48_0= 'aggregateRoot' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_49= 'belongsTo' ( (otherlv_50= '@' )? ( (otherlv_51= RULE_ID ) ) ) ) ) ) ) )*
                    loop248:
                    do {
                        int alt248=15;
                        alt248 = dfa248.predict(input);
                        switch (alt248) {
                    	case 1 :
                    	    // InternalContextMappingDSL.g:9764:5: ({...}? => ( ({...}? => ( ( (lv_cache_17_0= 'cache' ) ) | (this_NOT_18= RULE_NOT otherlv_19= 'cache' ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:9764:5: ({...}? => ( ({...}? => ( ( (lv_cache_17_0= 'cache' ) ) | (this_NOT_18= RULE_NOT otherlv_19= 'cache' ) ) ) ) )
                    	    // InternalContextMappingDSL.g:9765:6: {...}? => ( ({...}? => ( ( (lv_cache_17_0= 'cache' ) ) | (this_NOT_18= RULE_NOT otherlv_19= 'cache' ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDomainEventAccess().getUnorderedGroup_7_2(), 0) ) {
                    	        throw new FailedPredicateException(input, "ruleDomainEvent", "getUnorderedGroupHelper().canSelect(grammarAccess.getDomainEventAccess().getUnorderedGroup_7_2(), 0)");
                    	    }
                    	    // InternalContextMappingDSL.g:9765:111: ( ({...}? => ( ( (lv_cache_17_0= 'cache' ) ) | (this_NOT_18= RULE_NOT otherlv_19= 'cache' ) ) ) )
                    	    // InternalContextMappingDSL.g:9766:7: ({...}? => ( ( (lv_cache_17_0= 'cache' ) ) | (this_NOT_18= RULE_NOT otherlv_19= 'cache' ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getDomainEventAccess().getUnorderedGroup_7_2(), 0);
                    	    						
                    	    // InternalContextMappingDSL.g:9769:10: ({...}? => ( ( (lv_cache_17_0= 'cache' ) ) | (this_NOT_18= RULE_NOT otherlv_19= 'cache' ) ) )
                    	    // InternalContextMappingDSL.g:9769:11: {...}? => ( ( (lv_cache_17_0= 'cache' ) ) | (this_NOT_18= RULE_NOT otherlv_19= 'cache' ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleDomainEvent", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:9769:20: ( ( (lv_cache_17_0= 'cache' ) ) | (this_NOT_18= RULE_NOT otherlv_19= 'cache' ) )
                    	    int alt245=2;
                    	    int LA245_0 = input.LA(1);

                    	    if ( (LA245_0==93) ) {
                    	        alt245=1;
                    	    }
                    	    else if ( (LA245_0==RULE_NOT) ) {
                    	        alt245=2;
                    	    }
                    	    else {
                    	        NoViableAltException nvae =
                    	            new NoViableAltException("", 245, 0, input);

                    	        throw nvae;
                    	    }
                    	    switch (alt245) {
                    	        case 1 :
                    	            // InternalContextMappingDSL.g:9769:21: ( (lv_cache_17_0= 'cache' ) )
                    	            {
                    	            // InternalContextMappingDSL.g:9769:21: ( (lv_cache_17_0= 'cache' ) )
                    	            // InternalContextMappingDSL.g:9770:11: (lv_cache_17_0= 'cache' )
                    	            {
                    	            // InternalContextMappingDSL.g:9770:11: (lv_cache_17_0= 'cache' )
                    	            // InternalContextMappingDSL.g:9771:12: lv_cache_17_0= 'cache'
                    	            {
                    	            lv_cache_17_0=(Token)match(input,93,FOLLOW_142); 

                    	            												newLeafNode(lv_cache_17_0, grammarAccess.getDomainEventAccess().getCacheCacheKeyword_7_2_0_0_0());
                    	            											

                    	            												if (current==null) {
                    	            													current = createModelElement(grammarAccess.getDomainEventRule());
                    	            												}
                    	            												setWithLastConsumed(current, "cache", true, "cache");
                    	            											

                    	            }


                    	            }


                    	            }
                    	            break;
                    	        case 2 :
                    	            // InternalContextMappingDSL.g:9784:10: (this_NOT_18= RULE_NOT otherlv_19= 'cache' )
                    	            {
                    	            // InternalContextMappingDSL.g:9784:10: (this_NOT_18= RULE_NOT otherlv_19= 'cache' )
                    	            // InternalContextMappingDSL.g:9785:11: this_NOT_18= RULE_NOT otherlv_19= 'cache'
                    	            {
                    	            this_NOT_18=(Token)match(input,RULE_NOT,FOLLOW_129); 

                    	            											newLeafNode(this_NOT_18, grammarAccess.getDomainEventAccess().getNOTTerminalRuleCall_7_2_0_1_0());
                    	            										
                    	            otherlv_19=(Token)match(input,93,FOLLOW_142); 

                    	            											newLeafNode(otherlv_19, grammarAccess.getDomainEventAccess().getCacheKeyword_7_2_0_1_1());
                    	            										

                    	            }


                    	            }
                    	            break;

                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDomainEventAccess().getUnorderedGroup_7_2());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 2 :
                    	    // InternalContextMappingDSL.g:9800:5: ({...}? => ( ({...}? => ( ( (lv_gapClass_20_0= 'gap' ) ) | ( (lv_noGapClass_21_0= 'nogap' ) ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:9800:5: ({...}? => ( ({...}? => ( ( (lv_gapClass_20_0= 'gap' ) ) | ( (lv_noGapClass_21_0= 'nogap' ) ) ) ) ) )
                    	    // InternalContextMappingDSL.g:9801:6: {...}? => ( ({...}? => ( ( (lv_gapClass_20_0= 'gap' ) ) | ( (lv_noGapClass_21_0= 'nogap' ) ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDomainEventAccess().getUnorderedGroup_7_2(), 1) ) {
                    	        throw new FailedPredicateException(input, "ruleDomainEvent", "getUnorderedGroupHelper().canSelect(grammarAccess.getDomainEventAccess().getUnorderedGroup_7_2(), 1)");
                    	    }
                    	    // InternalContextMappingDSL.g:9801:111: ( ({...}? => ( ( (lv_gapClass_20_0= 'gap' ) ) | ( (lv_noGapClass_21_0= 'nogap' ) ) ) ) )
                    	    // InternalContextMappingDSL.g:9802:7: ({...}? => ( ( (lv_gapClass_20_0= 'gap' ) ) | ( (lv_noGapClass_21_0= 'nogap' ) ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getDomainEventAccess().getUnorderedGroup_7_2(), 1);
                    	    						
                    	    // InternalContextMappingDSL.g:9805:10: ({...}? => ( ( (lv_gapClass_20_0= 'gap' ) ) | ( (lv_noGapClass_21_0= 'nogap' ) ) ) )
                    	    // InternalContextMappingDSL.g:9805:11: {...}? => ( ( (lv_gapClass_20_0= 'gap' ) ) | ( (lv_noGapClass_21_0= 'nogap' ) ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleDomainEvent", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:9805:20: ( ( (lv_gapClass_20_0= 'gap' ) ) | ( (lv_noGapClass_21_0= 'nogap' ) ) )
                    	    int alt246=2;
                    	    int LA246_0 = input.LA(1);

                    	    if ( (LA246_0==71) ) {
                    	        alt246=1;
                    	    }
                    	    else if ( (LA246_0==72) ) {
                    	        alt246=2;
                    	    }
                    	    else {
                    	        NoViableAltException nvae =
                    	            new NoViableAltException("", 246, 0, input);

                    	        throw nvae;
                    	    }
                    	    switch (alt246) {
                    	        case 1 :
                    	            // InternalContextMappingDSL.g:9805:21: ( (lv_gapClass_20_0= 'gap' ) )
                    	            {
                    	            // InternalContextMappingDSL.g:9805:21: ( (lv_gapClass_20_0= 'gap' ) )
                    	            // InternalContextMappingDSL.g:9806:11: (lv_gapClass_20_0= 'gap' )
                    	            {
                    	            // InternalContextMappingDSL.g:9806:11: (lv_gapClass_20_0= 'gap' )
                    	            // InternalContextMappingDSL.g:9807:12: lv_gapClass_20_0= 'gap'
                    	            {
                    	            lv_gapClass_20_0=(Token)match(input,71,FOLLOW_142); 

                    	            												newLeafNode(lv_gapClass_20_0, grammarAccess.getDomainEventAccess().getGapClassGapKeyword_7_2_1_0_0());
                    	            											

                    	            												if (current==null) {
                    	            													current = createModelElement(grammarAccess.getDomainEventRule());
                    	            												}
                    	            												setWithLastConsumed(current, "gapClass", true, "gap");
                    	            											

                    	            }


                    	            }


                    	            }
                    	            break;
                    	        case 2 :
                    	            // InternalContextMappingDSL.g:9820:10: ( (lv_noGapClass_21_0= 'nogap' ) )
                    	            {
                    	            // InternalContextMappingDSL.g:9820:10: ( (lv_noGapClass_21_0= 'nogap' ) )
                    	            // InternalContextMappingDSL.g:9821:11: (lv_noGapClass_21_0= 'nogap' )
                    	            {
                    	            // InternalContextMappingDSL.g:9821:11: (lv_noGapClass_21_0= 'nogap' )
                    	            // InternalContextMappingDSL.g:9822:12: lv_noGapClass_21_0= 'nogap'
                    	            {
                    	            lv_noGapClass_21_0=(Token)match(input,72,FOLLOW_142); 

                    	            												newLeafNode(lv_noGapClass_21_0, grammarAccess.getDomainEventAccess().getNoGapClassNogapKeyword_7_2_1_1_0());
                    	            											

                    	            												if (current==null) {
                    	            													current = createModelElement(grammarAccess.getDomainEventRule());
                    	            												}
                    	            												setWithLastConsumed(current, "noGapClass", true, "nogap");
                    	            											

                    	            }


                    	            }


                    	            }
                    	            break;

                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDomainEventAccess().getUnorderedGroup_7_2());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 3 :
                    	    // InternalContextMappingDSL.g:9840:5: ({...}? => ( ({...}? => ( (lv_scaffold_22_0= 'scaffold' ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:9840:5: ({...}? => ( ({...}? => ( (lv_scaffold_22_0= 'scaffold' ) ) ) ) )
                    	    // InternalContextMappingDSL.g:9841:6: {...}? => ( ({...}? => ( (lv_scaffold_22_0= 'scaffold' ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDomainEventAccess().getUnorderedGroup_7_2(), 2) ) {
                    	        throw new FailedPredicateException(input, "ruleDomainEvent", "getUnorderedGroupHelper().canSelect(grammarAccess.getDomainEventAccess().getUnorderedGroup_7_2(), 2)");
                    	    }
                    	    // InternalContextMappingDSL.g:9841:111: ( ({...}? => ( (lv_scaffold_22_0= 'scaffold' ) ) ) )
                    	    // InternalContextMappingDSL.g:9842:7: ({...}? => ( (lv_scaffold_22_0= 'scaffold' ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getDomainEventAccess().getUnorderedGroup_7_2(), 2);
                    	    						
                    	    // InternalContextMappingDSL.g:9845:10: ({...}? => ( (lv_scaffold_22_0= 'scaffold' ) ) )
                    	    // InternalContextMappingDSL.g:9845:11: {...}? => ( (lv_scaffold_22_0= 'scaffold' ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleDomainEvent", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:9845:20: ( (lv_scaffold_22_0= 'scaffold' ) )
                    	    // InternalContextMappingDSL.g:9845:21: (lv_scaffold_22_0= 'scaffold' )
                    	    {
                    	    // InternalContextMappingDSL.g:9845:21: (lv_scaffold_22_0= 'scaffold' )
                    	    // InternalContextMappingDSL.g:9846:11: lv_scaffold_22_0= 'scaffold'
                    	    {
                    	    lv_scaffold_22_0=(Token)match(input,75,FOLLOW_142); 

                    	    											newLeafNode(lv_scaffold_22_0, grammarAccess.getDomainEventAccess().getScaffoldScaffoldKeyword_7_2_2_0());
                    	    										

                    	    											if (current==null) {
                    	    												current = createModelElement(grammarAccess.getDomainEventRule());
                    	    											}
                    	    											setWithLastConsumed(current, "scaffold", true, "scaffold");
                    	    										

                    	    }


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDomainEventAccess().getUnorderedGroup_7_2());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 4 :
                    	    // InternalContextMappingDSL.g:9863:5: ({...}? => ( ({...}? => (otherlv_23= 'hint' otherlv_24= '=' ( (lv_hint_25_0= RULE_STRING ) ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:9863:5: ({...}? => ( ({...}? => (otherlv_23= 'hint' otherlv_24= '=' ( (lv_hint_25_0= RULE_STRING ) ) ) ) ) )
                    	    // InternalContextMappingDSL.g:9864:6: {...}? => ( ({...}? => (otherlv_23= 'hint' otherlv_24= '=' ( (lv_hint_25_0= RULE_STRING ) ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDomainEventAccess().getUnorderedGroup_7_2(), 3) ) {
                    	        throw new FailedPredicateException(input, "ruleDomainEvent", "getUnorderedGroupHelper().canSelect(grammarAccess.getDomainEventAccess().getUnorderedGroup_7_2(), 3)");
                    	    }
                    	    // InternalContextMappingDSL.g:9864:111: ( ({...}? => (otherlv_23= 'hint' otherlv_24= '=' ( (lv_hint_25_0= RULE_STRING ) ) ) ) )
                    	    // InternalContextMappingDSL.g:9865:7: ({...}? => (otherlv_23= 'hint' otherlv_24= '=' ( (lv_hint_25_0= RULE_STRING ) ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getDomainEventAccess().getUnorderedGroup_7_2(), 3);
                    	    						
                    	    // InternalContextMappingDSL.g:9868:10: ({...}? => (otherlv_23= 'hint' otherlv_24= '=' ( (lv_hint_25_0= RULE_STRING ) ) ) )
                    	    // InternalContextMappingDSL.g:9868:11: {...}? => (otherlv_23= 'hint' otherlv_24= '=' ( (lv_hint_25_0= RULE_STRING ) ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleDomainEvent", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:9868:20: (otherlv_23= 'hint' otherlv_24= '=' ( (lv_hint_25_0= RULE_STRING ) ) )
                    	    // InternalContextMappingDSL.g:9868:21: otherlv_23= 'hint' otherlv_24= '=' ( (lv_hint_25_0= RULE_STRING ) )
                    	    {
                    	    otherlv_23=(Token)match(input,67,FOLLOW_81); 

                    	    										newLeafNode(otherlv_23, grammarAccess.getDomainEventAccess().getHintKeyword_7_2_3_0());
                    	    									
                    	    otherlv_24=(Token)match(input,21,FOLLOW_4); 

                    	    										newLeafNode(otherlv_24, grammarAccess.getDomainEventAccess().getEqualsSignKeyword_7_2_3_1());
                    	    									
                    	    // InternalContextMappingDSL.g:9876:10: ( (lv_hint_25_0= RULE_STRING ) )
                    	    // InternalContextMappingDSL.g:9877:11: (lv_hint_25_0= RULE_STRING )
                    	    {
                    	    // InternalContextMappingDSL.g:9877:11: (lv_hint_25_0= RULE_STRING )
                    	    // InternalContextMappingDSL.g:9878:12: lv_hint_25_0= RULE_STRING
                    	    {
                    	    lv_hint_25_0=(Token)match(input,RULE_STRING,FOLLOW_142); 

                    	    												newLeafNode(lv_hint_25_0, grammarAccess.getDomainEventAccess().getHintSTRINGTerminalRuleCall_7_2_3_2_0());
                    	    											

                    	    												if (current==null) {
                    	    													current = createModelElement(grammarAccess.getDomainEventRule());
                    	    												}
                    	    												setWithLastConsumed(
                    	    													current,
                    	    													"hint",
                    	    													lv_hint_25_0,
                    	    													"org.eclipse.xtext.common.Terminals.STRING");
                    	    											

                    	    }


                    	    }


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDomainEventAccess().getUnorderedGroup_7_2());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 5 :
                    	    // InternalContextMappingDSL.g:9900:5: ({...}? => ( ({...}? => (otherlv_26= 'databaseTable' otherlv_27= '=' ( (lv_databaseTable_28_0= RULE_STRING ) ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:9900:5: ({...}? => ( ({...}? => (otherlv_26= 'databaseTable' otherlv_27= '=' ( (lv_databaseTable_28_0= RULE_STRING ) ) ) ) ) )
                    	    // InternalContextMappingDSL.g:9901:6: {...}? => ( ({...}? => (otherlv_26= 'databaseTable' otherlv_27= '=' ( (lv_databaseTable_28_0= RULE_STRING ) ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDomainEventAccess().getUnorderedGroup_7_2(), 4) ) {
                    	        throw new FailedPredicateException(input, "ruleDomainEvent", "getUnorderedGroupHelper().canSelect(grammarAccess.getDomainEventAccess().getUnorderedGroup_7_2(), 4)");
                    	    }
                    	    // InternalContextMappingDSL.g:9901:111: ( ({...}? => (otherlv_26= 'databaseTable' otherlv_27= '=' ( (lv_databaseTable_28_0= RULE_STRING ) ) ) ) )
                    	    // InternalContextMappingDSL.g:9902:7: ({...}? => (otherlv_26= 'databaseTable' otherlv_27= '=' ( (lv_databaseTable_28_0= RULE_STRING ) ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getDomainEventAccess().getUnorderedGroup_7_2(), 4);
                    	    						
                    	    // InternalContextMappingDSL.g:9905:10: ({...}? => (otherlv_26= 'databaseTable' otherlv_27= '=' ( (lv_databaseTable_28_0= RULE_STRING ) ) ) )
                    	    // InternalContextMappingDSL.g:9905:11: {...}? => (otherlv_26= 'databaseTable' otherlv_27= '=' ( (lv_databaseTable_28_0= RULE_STRING ) ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleDomainEvent", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:9905:20: (otherlv_26= 'databaseTable' otherlv_27= '=' ( (lv_databaseTable_28_0= RULE_STRING ) ) )
                    	    // InternalContextMappingDSL.g:9905:21: otherlv_26= 'databaseTable' otherlv_27= '=' ( (lv_databaseTable_28_0= RULE_STRING ) )
                    	    {
                    	    otherlv_26=(Token)match(input,112,FOLLOW_81); 

                    	    										newLeafNode(otherlv_26, grammarAccess.getDomainEventAccess().getDatabaseTableKeyword_7_2_4_0());
                    	    									
                    	    otherlv_27=(Token)match(input,21,FOLLOW_4); 

                    	    										newLeafNode(otherlv_27, grammarAccess.getDomainEventAccess().getEqualsSignKeyword_7_2_4_1());
                    	    									
                    	    // InternalContextMappingDSL.g:9913:10: ( (lv_databaseTable_28_0= RULE_STRING ) )
                    	    // InternalContextMappingDSL.g:9914:11: (lv_databaseTable_28_0= RULE_STRING )
                    	    {
                    	    // InternalContextMappingDSL.g:9914:11: (lv_databaseTable_28_0= RULE_STRING )
                    	    // InternalContextMappingDSL.g:9915:12: lv_databaseTable_28_0= RULE_STRING
                    	    {
                    	    lv_databaseTable_28_0=(Token)match(input,RULE_STRING,FOLLOW_142); 

                    	    												newLeafNode(lv_databaseTable_28_0, grammarAccess.getDomainEventAccess().getDatabaseTableSTRINGTerminalRuleCall_7_2_4_2_0());
                    	    											

                    	    												if (current==null) {
                    	    													current = createModelElement(grammarAccess.getDomainEventRule());
                    	    												}
                    	    												setWithLastConsumed(
                    	    													current,
                    	    													"databaseTable",
                    	    													lv_databaseTable_28_0,
                    	    													"org.eclipse.xtext.common.Terminals.STRING");
                    	    											

                    	    }


                    	    }


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDomainEventAccess().getUnorderedGroup_7_2());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 6 :
                    	    // InternalContextMappingDSL.g:9937:5: ({...}? => ( ({...}? => (otherlv_29= 'discriminatorValue' otherlv_30= '=' ( (lv_discriminatorValue_31_0= RULE_STRING ) ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:9937:5: ({...}? => ( ({...}? => (otherlv_29= 'discriminatorValue' otherlv_30= '=' ( (lv_discriminatorValue_31_0= RULE_STRING ) ) ) ) ) )
                    	    // InternalContextMappingDSL.g:9938:6: {...}? => ( ({...}? => (otherlv_29= 'discriminatorValue' otherlv_30= '=' ( (lv_discriminatorValue_31_0= RULE_STRING ) ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDomainEventAccess().getUnorderedGroup_7_2(), 5) ) {
                    	        throw new FailedPredicateException(input, "ruleDomainEvent", "getUnorderedGroupHelper().canSelect(grammarAccess.getDomainEventAccess().getUnorderedGroup_7_2(), 5)");
                    	    }
                    	    // InternalContextMappingDSL.g:9938:111: ( ({...}? => (otherlv_29= 'discriminatorValue' otherlv_30= '=' ( (lv_discriminatorValue_31_0= RULE_STRING ) ) ) ) )
                    	    // InternalContextMappingDSL.g:9939:7: ({...}? => (otherlv_29= 'discriminatorValue' otherlv_30= '=' ( (lv_discriminatorValue_31_0= RULE_STRING ) ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getDomainEventAccess().getUnorderedGroup_7_2(), 5);
                    	    						
                    	    // InternalContextMappingDSL.g:9942:10: ({...}? => (otherlv_29= 'discriminatorValue' otherlv_30= '=' ( (lv_discriminatorValue_31_0= RULE_STRING ) ) ) )
                    	    // InternalContextMappingDSL.g:9942:11: {...}? => (otherlv_29= 'discriminatorValue' otherlv_30= '=' ( (lv_discriminatorValue_31_0= RULE_STRING ) ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleDomainEvent", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:9942:20: (otherlv_29= 'discriminatorValue' otherlv_30= '=' ( (lv_discriminatorValue_31_0= RULE_STRING ) ) )
                    	    // InternalContextMappingDSL.g:9942:21: otherlv_29= 'discriminatorValue' otherlv_30= '=' ( (lv_discriminatorValue_31_0= RULE_STRING ) )
                    	    {
                    	    otherlv_29=(Token)match(input,113,FOLLOW_81); 

                    	    										newLeafNode(otherlv_29, grammarAccess.getDomainEventAccess().getDiscriminatorValueKeyword_7_2_5_0());
                    	    									
                    	    otherlv_30=(Token)match(input,21,FOLLOW_4); 

                    	    										newLeafNode(otherlv_30, grammarAccess.getDomainEventAccess().getEqualsSignKeyword_7_2_5_1());
                    	    									
                    	    // InternalContextMappingDSL.g:9950:10: ( (lv_discriminatorValue_31_0= RULE_STRING ) )
                    	    // InternalContextMappingDSL.g:9951:11: (lv_discriminatorValue_31_0= RULE_STRING )
                    	    {
                    	    // InternalContextMappingDSL.g:9951:11: (lv_discriminatorValue_31_0= RULE_STRING )
                    	    // InternalContextMappingDSL.g:9952:12: lv_discriminatorValue_31_0= RULE_STRING
                    	    {
                    	    lv_discriminatorValue_31_0=(Token)match(input,RULE_STRING,FOLLOW_142); 

                    	    												newLeafNode(lv_discriminatorValue_31_0, grammarAccess.getDomainEventAccess().getDiscriminatorValueSTRINGTerminalRuleCall_7_2_5_2_0());
                    	    											

                    	    												if (current==null) {
                    	    													current = createModelElement(grammarAccess.getDomainEventRule());
                    	    												}
                    	    												setWithLastConsumed(
                    	    													current,
                    	    													"discriminatorValue",
                    	    													lv_discriminatorValue_31_0,
                    	    													"org.eclipse.xtext.common.Terminals.STRING");
                    	    											

                    	    }


                    	    }


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDomainEventAccess().getUnorderedGroup_7_2());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 7 :
                    	    // InternalContextMappingDSL.g:9974:5: ({...}? => ( ({...}? => (otherlv_32= 'discriminatorColumn' otherlv_33= '=' ( (lv_discriminatorColumn_34_0= RULE_STRING ) ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:9974:5: ({...}? => ( ({...}? => (otherlv_32= 'discriminatorColumn' otherlv_33= '=' ( (lv_discriminatorColumn_34_0= RULE_STRING ) ) ) ) ) )
                    	    // InternalContextMappingDSL.g:9975:6: {...}? => ( ({...}? => (otherlv_32= 'discriminatorColumn' otherlv_33= '=' ( (lv_discriminatorColumn_34_0= RULE_STRING ) ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDomainEventAccess().getUnorderedGroup_7_2(), 6) ) {
                    	        throw new FailedPredicateException(input, "ruleDomainEvent", "getUnorderedGroupHelper().canSelect(grammarAccess.getDomainEventAccess().getUnorderedGroup_7_2(), 6)");
                    	    }
                    	    // InternalContextMappingDSL.g:9975:111: ( ({...}? => (otherlv_32= 'discriminatorColumn' otherlv_33= '=' ( (lv_discriminatorColumn_34_0= RULE_STRING ) ) ) ) )
                    	    // InternalContextMappingDSL.g:9976:7: ({...}? => (otherlv_32= 'discriminatorColumn' otherlv_33= '=' ( (lv_discriminatorColumn_34_0= RULE_STRING ) ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getDomainEventAccess().getUnorderedGroup_7_2(), 6);
                    	    						
                    	    // InternalContextMappingDSL.g:9979:10: ({...}? => (otherlv_32= 'discriminatorColumn' otherlv_33= '=' ( (lv_discriminatorColumn_34_0= RULE_STRING ) ) ) )
                    	    // InternalContextMappingDSL.g:9979:11: {...}? => (otherlv_32= 'discriminatorColumn' otherlv_33= '=' ( (lv_discriminatorColumn_34_0= RULE_STRING ) ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleDomainEvent", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:9979:20: (otherlv_32= 'discriminatorColumn' otherlv_33= '=' ( (lv_discriminatorColumn_34_0= RULE_STRING ) ) )
                    	    // InternalContextMappingDSL.g:9979:21: otherlv_32= 'discriminatorColumn' otherlv_33= '=' ( (lv_discriminatorColumn_34_0= RULE_STRING ) )
                    	    {
                    	    otherlv_32=(Token)match(input,114,FOLLOW_81); 

                    	    										newLeafNode(otherlv_32, grammarAccess.getDomainEventAccess().getDiscriminatorColumnKeyword_7_2_6_0());
                    	    									
                    	    otherlv_33=(Token)match(input,21,FOLLOW_4); 

                    	    										newLeafNode(otherlv_33, grammarAccess.getDomainEventAccess().getEqualsSignKeyword_7_2_6_1());
                    	    									
                    	    // InternalContextMappingDSL.g:9987:10: ( (lv_discriminatorColumn_34_0= RULE_STRING ) )
                    	    // InternalContextMappingDSL.g:9988:11: (lv_discriminatorColumn_34_0= RULE_STRING )
                    	    {
                    	    // InternalContextMappingDSL.g:9988:11: (lv_discriminatorColumn_34_0= RULE_STRING )
                    	    // InternalContextMappingDSL.g:9989:12: lv_discriminatorColumn_34_0= RULE_STRING
                    	    {
                    	    lv_discriminatorColumn_34_0=(Token)match(input,RULE_STRING,FOLLOW_142); 

                    	    												newLeafNode(lv_discriminatorColumn_34_0, grammarAccess.getDomainEventAccess().getDiscriminatorColumnSTRINGTerminalRuleCall_7_2_6_2_0());
                    	    											

                    	    												if (current==null) {
                    	    													current = createModelElement(grammarAccess.getDomainEventRule());
                    	    												}
                    	    												setWithLastConsumed(
                    	    													current,
                    	    													"discriminatorColumn",
                    	    													lv_discriminatorColumn_34_0,
                    	    													"org.eclipse.xtext.common.Terminals.STRING");
                    	    											

                    	    }


                    	    }


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDomainEventAccess().getUnorderedGroup_7_2());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 8 :
                    	    // InternalContextMappingDSL.g:10011:5: ({...}? => ( ({...}? => (otherlv_35= 'discriminatorType' otherlv_36= '=' ( (lv_discriminatorType_37_0= ruleDiscriminatorType ) ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:10011:5: ({...}? => ( ({...}? => (otherlv_35= 'discriminatorType' otherlv_36= '=' ( (lv_discriminatorType_37_0= ruleDiscriminatorType ) ) ) ) ) )
                    	    // InternalContextMappingDSL.g:10012:6: {...}? => ( ({...}? => (otherlv_35= 'discriminatorType' otherlv_36= '=' ( (lv_discriminatorType_37_0= ruleDiscriminatorType ) ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDomainEventAccess().getUnorderedGroup_7_2(), 7) ) {
                    	        throw new FailedPredicateException(input, "ruleDomainEvent", "getUnorderedGroupHelper().canSelect(grammarAccess.getDomainEventAccess().getUnorderedGroup_7_2(), 7)");
                    	    }
                    	    // InternalContextMappingDSL.g:10012:111: ( ({...}? => (otherlv_35= 'discriminatorType' otherlv_36= '=' ( (lv_discriminatorType_37_0= ruleDiscriminatorType ) ) ) ) )
                    	    // InternalContextMappingDSL.g:10013:7: ({...}? => (otherlv_35= 'discriminatorType' otherlv_36= '=' ( (lv_discriminatorType_37_0= ruleDiscriminatorType ) ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getDomainEventAccess().getUnorderedGroup_7_2(), 7);
                    	    						
                    	    // InternalContextMappingDSL.g:10016:10: ({...}? => (otherlv_35= 'discriminatorType' otherlv_36= '=' ( (lv_discriminatorType_37_0= ruleDiscriminatorType ) ) ) )
                    	    // InternalContextMappingDSL.g:10016:11: {...}? => (otherlv_35= 'discriminatorType' otherlv_36= '=' ( (lv_discriminatorType_37_0= ruleDiscriminatorType ) ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleDomainEvent", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:10016:20: (otherlv_35= 'discriminatorType' otherlv_36= '=' ( (lv_discriminatorType_37_0= ruleDiscriminatorType ) ) )
                    	    // InternalContextMappingDSL.g:10016:21: otherlv_35= 'discriminatorType' otherlv_36= '=' ( (lv_discriminatorType_37_0= ruleDiscriminatorType ) )
                    	    {
                    	    otherlv_35=(Token)match(input,115,FOLLOW_81); 

                    	    										newLeafNode(otherlv_35, grammarAccess.getDomainEventAccess().getDiscriminatorTypeKeyword_7_2_7_0());
                    	    									
                    	    otherlv_36=(Token)match(input,21,FOLLOW_130); 

                    	    										newLeafNode(otherlv_36, grammarAccess.getDomainEventAccess().getEqualsSignKeyword_7_2_7_1());
                    	    									
                    	    // InternalContextMappingDSL.g:10024:10: ( (lv_discriminatorType_37_0= ruleDiscriminatorType ) )
                    	    // InternalContextMappingDSL.g:10025:11: (lv_discriminatorType_37_0= ruleDiscriminatorType )
                    	    {
                    	    // InternalContextMappingDSL.g:10025:11: (lv_discriminatorType_37_0= ruleDiscriminatorType )
                    	    // InternalContextMappingDSL.g:10026:12: lv_discriminatorType_37_0= ruleDiscriminatorType
                    	    {

                    	    												newCompositeNode(grammarAccess.getDomainEventAccess().getDiscriminatorTypeDiscriminatorTypeEnumRuleCall_7_2_7_2_0());
                    	    											
                    	    pushFollow(FOLLOW_142);
                    	    lv_discriminatorType_37_0=ruleDiscriminatorType();

                    	    state._fsp--;


                    	    												if (current==null) {
                    	    													current = createModelElementForParent(grammarAccess.getDomainEventRule());
                    	    												}
                    	    												set(
                    	    													current,
                    	    													"discriminatorType",
                    	    													lv_discriminatorType_37_0,
                    	    													"org.contextmapper.tactic.dsl.TacticDDDLanguage.DiscriminatorType");
                    	    												afterParserOrEnumRuleCall();
                    	    											

                    	    }


                    	    }


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDomainEventAccess().getUnorderedGroup_7_2());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 9 :
                    	    // InternalContextMappingDSL.g:10049:5: ({...}? => ( ({...}? => (otherlv_38= 'discriminatorLength' otherlv_39= '=' ( (lv_discriminatorLength_40_0= RULE_STRING ) ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:10049:5: ({...}? => ( ({...}? => (otherlv_38= 'discriminatorLength' otherlv_39= '=' ( (lv_discriminatorLength_40_0= RULE_STRING ) ) ) ) ) )
                    	    // InternalContextMappingDSL.g:10050:6: {...}? => ( ({...}? => (otherlv_38= 'discriminatorLength' otherlv_39= '=' ( (lv_discriminatorLength_40_0= RULE_STRING ) ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDomainEventAccess().getUnorderedGroup_7_2(), 8) ) {
                    	        throw new FailedPredicateException(input, "ruleDomainEvent", "getUnorderedGroupHelper().canSelect(grammarAccess.getDomainEventAccess().getUnorderedGroup_7_2(), 8)");
                    	    }
                    	    // InternalContextMappingDSL.g:10050:111: ( ({...}? => (otherlv_38= 'discriminatorLength' otherlv_39= '=' ( (lv_discriminatorLength_40_0= RULE_STRING ) ) ) ) )
                    	    // InternalContextMappingDSL.g:10051:7: ({...}? => (otherlv_38= 'discriminatorLength' otherlv_39= '=' ( (lv_discriminatorLength_40_0= RULE_STRING ) ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getDomainEventAccess().getUnorderedGroup_7_2(), 8);
                    	    						
                    	    // InternalContextMappingDSL.g:10054:10: ({...}? => (otherlv_38= 'discriminatorLength' otherlv_39= '=' ( (lv_discriminatorLength_40_0= RULE_STRING ) ) ) )
                    	    // InternalContextMappingDSL.g:10054:11: {...}? => (otherlv_38= 'discriminatorLength' otherlv_39= '=' ( (lv_discriminatorLength_40_0= RULE_STRING ) ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleDomainEvent", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:10054:20: (otherlv_38= 'discriminatorLength' otherlv_39= '=' ( (lv_discriminatorLength_40_0= RULE_STRING ) ) )
                    	    // InternalContextMappingDSL.g:10054:21: otherlv_38= 'discriminatorLength' otherlv_39= '=' ( (lv_discriminatorLength_40_0= RULE_STRING ) )
                    	    {
                    	    otherlv_38=(Token)match(input,116,FOLLOW_81); 

                    	    										newLeafNode(otherlv_38, grammarAccess.getDomainEventAccess().getDiscriminatorLengthKeyword_7_2_8_0());
                    	    									
                    	    otherlv_39=(Token)match(input,21,FOLLOW_4); 

                    	    										newLeafNode(otherlv_39, grammarAccess.getDomainEventAccess().getEqualsSignKeyword_7_2_8_1());
                    	    									
                    	    // InternalContextMappingDSL.g:10062:10: ( (lv_discriminatorLength_40_0= RULE_STRING ) )
                    	    // InternalContextMappingDSL.g:10063:11: (lv_discriminatorLength_40_0= RULE_STRING )
                    	    {
                    	    // InternalContextMappingDSL.g:10063:11: (lv_discriminatorLength_40_0= RULE_STRING )
                    	    // InternalContextMappingDSL.g:10064:12: lv_discriminatorLength_40_0= RULE_STRING
                    	    {
                    	    lv_discriminatorLength_40_0=(Token)match(input,RULE_STRING,FOLLOW_142); 

                    	    												newLeafNode(lv_discriminatorLength_40_0, grammarAccess.getDomainEventAccess().getDiscriminatorLengthSTRINGTerminalRuleCall_7_2_8_2_0());
                    	    											

                    	    												if (current==null) {
                    	    													current = createModelElement(grammarAccess.getDomainEventRule());
                    	    												}
                    	    												setWithLastConsumed(
                    	    													current,
                    	    													"discriminatorLength",
                    	    													lv_discriminatorLength_40_0,
                    	    													"org.eclipse.xtext.common.Terminals.STRING");
                    	    											

                    	    }


                    	    }


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDomainEventAccess().getUnorderedGroup_7_2());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 10 :
                    	    // InternalContextMappingDSL.g:10086:5: ({...}? => ( ({...}? => (otherlv_41= 'inheritanceType' otherlv_42= '=' ( (lv_inheritanceType_43_0= ruleInheritanceType ) ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:10086:5: ({...}? => ( ({...}? => (otherlv_41= 'inheritanceType' otherlv_42= '=' ( (lv_inheritanceType_43_0= ruleInheritanceType ) ) ) ) ) )
                    	    // InternalContextMappingDSL.g:10087:6: {...}? => ( ({...}? => (otherlv_41= 'inheritanceType' otherlv_42= '=' ( (lv_inheritanceType_43_0= ruleInheritanceType ) ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDomainEventAccess().getUnorderedGroup_7_2(), 9) ) {
                    	        throw new FailedPredicateException(input, "ruleDomainEvent", "getUnorderedGroupHelper().canSelect(grammarAccess.getDomainEventAccess().getUnorderedGroup_7_2(), 9)");
                    	    }
                    	    // InternalContextMappingDSL.g:10087:111: ( ({...}? => (otherlv_41= 'inheritanceType' otherlv_42= '=' ( (lv_inheritanceType_43_0= ruleInheritanceType ) ) ) ) )
                    	    // InternalContextMappingDSL.g:10088:7: ({...}? => (otherlv_41= 'inheritanceType' otherlv_42= '=' ( (lv_inheritanceType_43_0= ruleInheritanceType ) ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getDomainEventAccess().getUnorderedGroup_7_2(), 9);
                    	    						
                    	    // InternalContextMappingDSL.g:10091:10: ({...}? => (otherlv_41= 'inheritanceType' otherlv_42= '=' ( (lv_inheritanceType_43_0= ruleInheritanceType ) ) ) )
                    	    // InternalContextMappingDSL.g:10091:11: {...}? => (otherlv_41= 'inheritanceType' otherlv_42= '=' ( (lv_inheritanceType_43_0= ruleInheritanceType ) ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleDomainEvent", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:10091:20: (otherlv_41= 'inheritanceType' otherlv_42= '=' ( (lv_inheritanceType_43_0= ruleInheritanceType ) ) )
                    	    // InternalContextMappingDSL.g:10091:21: otherlv_41= 'inheritanceType' otherlv_42= '=' ( (lv_inheritanceType_43_0= ruleInheritanceType ) )
                    	    {
                    	    otherlv_41=(Token)match(input,117,FOLLOW_81); 

                    	    										newLeafNode(otherlv_41, grammarAccess.getDomainEventAccess().getInheritanceTypeKeyword_7_2_9_0());
                    	    									
                    	    otherlv_42=(Token)match(input,21,FOLLOW_131); 

                    	    										newLeafNode(otherlv_42, grammarAccess.getDomainEventAccess().getEqualsSignKeyword_7_2_9_1());
                    	    									
                    	    // InternalContextMappingDSL.g:10099:10: ( (lv_inheritanceType_43_0= ruleInheritanceType ) )
                    	    // InternalContextMappingDSL.g:10100:11: (lv_inheritanceType_43_0= ruleInheritanceType )
                    	    {
                    	    // InternalContextMappingDSL.g:10100:11: (lv_inheritanceType_43_0= ruleInheritanceType )
                    	    // InternalContextMappingDSL.g:10101:12: lv_inheritanceType_43_0= ruleInheritanceType
                    	    {

                    	    												newCompositeNode(grammarAccess.getDomainEventAccess().getInheritanceTypeInheritanceTypeEnumRuleCall_7_2_9_2_0());
                    	    											
                    	    pushFollow(FOLLOW_142);
                    	    lv_inheritanceType_43_0=ruleInheritanceType();

                    	    state._fsp--;


                    	    												if (current==null) {
                    	    													current = createModelElementForParent(grammarAccess.getDomainEventRule());
                    	    												}
                    	    												set(
                    	    													current,
                    	    													"inheritanceType",
                    	    													lv_inheritanceType_43_0,
                    	    													"org.contextmapper.tactic.dsl.TacticDDDLanguage.InheritanceType");
                    	    												afterParserOrEnumRuleCall();
                    	    											

                    	    }


                    	    }


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDomainEventAccess().getUnorderedGroup_7_2());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 11 :
                    	    // InternalContextMappingDSL.g:10124:5: ({...}? => ( ({...}? => (otherlv_44= 'validate' otherlv_45= '=' ( (lv_validate_46_0= RULE_STRING ) ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:10124:5: ({...}? => ( ({...}? => (otherlv_44= 'validate' otherlv_45= '=' ( (lv_validate_46_0= RULE_STRING ) ) ) ) ) )
                    	    // InternalContextMappingDSL.g:10125:6: {...}? => ( ({...}? => (otherlv_44= 'validate' otherlv_45= '=' ( (lv_validate_46_0= RULE_STRING ) ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDomainEventAccess().getUnorderedGroup_7_2(), 10) ) {
                    	        throw new FailedPredicateException(input, "ruleDomainEvent", "getUnorderedGroupHelper().canSelect(grammarAccess.getDomainEventAccess().getUnorderedGroup_7_2(), 10)");
                    	    }
                    	    // InternalContextMappingDSL.g:10125:112: ( ({...}? => (otherlv_44= 'validate' otherlv_45= '=' ( (lv_validate_46_0= RULE_STRING ) ) ) ) )
                    	    // InternalContextMappingDSL.g:10126:7: ({...}? => (otherlv_44= 'validate' otherlv_45= '=' ( (lv_validate_46_0= RULE_STRING ) ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getDomainEventAccess().getUnorderedGroup_7_2(), 10);
                    	    						
                    	    // InternalContextMappingDSL.g:10129:10: ({...}? => (otherlv_44= 'validate' otherlv_45= '=' ( (lv_validate_46_0= RULE_STRING ) ) ) )
                    	    // InternalContextMappingDSL.g:10129:11: {...}? => (otherlv_44= 'validate' otherlv_45= '=' ( (lv_validate_46_0= RULE_STRING ) ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleDomainEvent", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:10129:20: (otherlv_44= 'validate' otherlv_45= '=' ( (lv_validate_46_0= RULE_STRING ) ) )
                    	    // InternalContextMappingDSL.g:10129:21: otherlv_44= 'validate' otherlv_45= '=' ( (lv_validate_46_0= RULE_STRING ) )
                    	    {
                    	    otherlv_44=(Token)match(input,118,FOLLOW_81); 

                    	    										newLeafNode(otherlv_44, grammarAccess.getDomainEventAccess().getValidateKeyword_7_2_10_0());
                    	    									
                    	    otherlv_45=(Token)match(input,21,FOLLOW_4); 

                    	    										newLeafNode(otherlv_45, grammarAccess.getDomainEventAccess().getEqualsSignKeyword_7_2_10_1());
                    	    									
                    	    // InternalContextMappingDSL.g:10137:10: ( (lv_validate_46_0= RULE_STRING ) )
                    	    // InternalContextMappingDSL.g:10138:11: (lv_validate_46_0= RULE_STRING )
                    	    {
                    	    // InternalContextMappingDSL.g:10138:11: (lv_validate_46_0= RULE_STRING )
                    	    // InternalContextMappingDSL.g:10139:12: lv_validate_46_0= RULE_STRING
                    	    {
                    	    lv_validate_46_0=(Token)match(input,RULE_STRING,FOLLOW_142); 

                    	    												newLeafNode(lv_validate_46_0, grammarAccess.getDomainEventAccess().getValidateSTRINGTerminalRuleCall_7_2_10_2_0());
                    	    											

                    	    												if (current==null) {
                    	    													current = createModelElement(grammarAccess.getDomainEventRule());
                    	    												}
                    	    												setWithLastConsumed(
                    	    													current,
                    	    													"validate",
                    	    													lv_validate_46_0,
                    	    													"org.eclipse.xtext.common.Terminals.STRING");
                    	    											

                    	    }


                    	    }


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDomainEventAccess().getUnorderedGroup_7_2());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 12 :
                    	    // InternalContextMappingDSL.g:10161:5: ({...}? => ( ({...}? => ( (lv_persistent_47_0= 'persistent' ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:10161:5: ({...}? => ( ({...}? => ( (lv_persistent_47_0= 'persistent' ) ) ) ) )
                    	    // InternalContextMappingDSL.g:10162:6: {...}? => ( ({...}? => ( (lv_persistent_47_0= 'persistent' ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDomainEventAccess().getUnorderedGroup_7_2(), 11) ) {
                    	        throw new FailedPredicateException(input, "ruleDomainEvent", "getUnorderedGroupHelper().canSelect(grammarAccess.getDomainEventAccess().getUnorderedGroup_7_2(), 11)");
                    	    }
                    	    // InternalContextMappingDSL.g:10162:112: ( ({...}? => ( (lv_persistent_47_0= 'persistent' ) ) ) )
                    	    // InternalContextMappingDSL.g:10163:7: ({...}? => ( (lv_persistent_47_0= 'persistent' ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getDomainEventAccess().getUnorderedGroup_7_2(), 11);
                    	    						
                    	    // InternalContextMappingDSL.g:10166:10: ({...}? => ( (lv_persistent_47_0= 'persistent' ) ) )
                    	    // InternalContextMappingDSL.g:10166:11: {...}? => ( (lv_persistent_47_0= 'persistent' ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleDomainEvent", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:10166:20: ( (lv_persistent_47_0= 'persistent' ) )
                    	    // InternalContextMappingDSL.g:10166:21: (lv_persistent_47_0= 'persistent' )
                    	    {
                    	    // InternalContextMappingDSL.g:10166:21: (lv_persistent_47_0= 'persistent' )
                    	    // InternalContextMappingDSL.g:10167:11: lv_persistent_47_0= 'persistent'
                    	    {
                    	    lv_persistent_47_0=(Token)match(input,123,FOLLOW_142); 

                    	    											newLeafNode(lv_persistent_47_0, grammarAccess.getDomainEventAccess().getPersistentPersistentKeyword_7_2_11_0());
                    	    										

                    	    											if (current==null) {
                    	    												current = createModelElement(grammarAccess.getDomainEventRule());
                    	    											}
                    	    											setWithLastConsumed(current, "persistent", true, "persistent");
                    	    										

                    	    }


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDomainEventAccess().getUnorderedGroup_7_2());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 13 :
                    	    // InternalContextMappingDSL.g:10184:5: ({...}? => ( ({...}? => ( (lv_aggregateRoot_48_0= 'aggregateRoot' ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:10184:5: ({...}? => ( ({...}? => ( (lv_aggregateRoot_48_0= 'aggregateRoot' ) ) ) ) )
                    	    // InternalContextMappingDSL.g:10185:6: {...}? => ( ({...}? => ( (lv_aggregateRoot_48_0= 'aggregateRoot' ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDomainEventAccess().getUnorderedGroup_7_2(), 12) ) {
                    	        throw new FailedPredicateException(input, "ruleDomainEvent", "getUnorderedGroupHelper().canSelect(grammarAccess.getDomainEventAccess().getUnorderedGroup_7_2(), 12)");
                    	    }
                    	    // InternalContextMappingDSL.g:10185:112: ( ({...}? => ( (lv_aggregateRoot_48_0= 'aggregateRoot' ) ) ) )
                    	    // InternalContextMappingDSL.g:10186:7: ({...}? => ( (lv_aggregateRoot_48_0= 'aggregateRoot' ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getDomainEventAccess().getUnorderedGroup_7_2(), 12);
                    	    						
                    	    // InternalContextMappingDSL.g:10189:10: ({...}? => ( (lv_aggregateRoot_48_0= 'aggregateRoot' ) ) )
                    	    // InternalContextMappingDSL.g:10189:11: {...}? => ( (lv_aggregateRoot_48_0= 'aggregateRoot' ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleDomainEvent", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:10189:20: ( (lv_aggregateRoot_48_0= 'aggregateRoot' ) )
                    	    // InternalContextMappingDSL.g:10189:21: (lv_aggregateRoot_48_0= 'aggregateRoot' )
                    	    {
                    	    // InternalContextMappingDSL.g:10189:21: (lv_aggregateRoot_48_0= 'aggregateRoot' )
                    	    // InternalContextMappingDSL.g:10190:11: lv_aggregateRoot_48_0= 'aggregateRoot'
                    	    {
                    	    lv_aggregateRoot_48_0=(Token)match(input,119,FOLLOW_142); 

                    	    											newLeafNode(lv_aggregateRoot_48_0, grammarAccess.getDomainEventAccess().getAggregateRootAggregateRootKeyword_7_2_12_0());
                    	    										

                    	    											if (current==null) {
                    	    												current = createModelElement(grammarAccess.getDomainEventRule());
                    	    											}
                    	    											setWithLastConsumed(current, "aggregateRoot", true, "aggregateRoot");
                    	    										

                    	    }


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDomainEventAccess().getUnorderedGroup_7_2());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 14 :
                    	    // InternalContextMappingDSL.g:10207:5: ({...}? => ( ({...}? => (otherlv_49= 'belongsTo' ( (otherlv_50= '@' )? ( (otherlv_51= RULE_ID ) ) ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:10207:5: ({...}? => ( ({...}? => (otherlv_49= 'belongsTo' ( (otherlv_50= '@' )? ( (otherlv_51= RULE_ID ) ) ) ) ) ) )
                    	    // InternalContextMappingDSL.g:10208:6: {...}? => ( ({...}? => (otherlv_49= 'belongsTo' ( (otherlv_50= '@' )? ( (otherlv_51= RULE_ID ) ) ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDomainEventAccess().getUnorderedGroup_7_2(), 13) ) {
                    	        throw new FailedPredicateException(input, "ruleDomainEvent", "getUnorderedGroupHelper().canSelect(grammarAccess.getDomainEventAccess().getUnorderedGroup_7_2(), 13)");
                    	    }
                    	    // InternalContextMappingDSL.g:10208:112: ( ({...}? => (otherlv_49= 'belongsTo' ( (otherlv_50= '@' )? ( (otherlv_51= RULE_ID ) ) ) ) ) )
                    	    // InternalContextMappingDSL.g:10209:7: ({...}? => (otherlv_49= 'belongsTo' ( (otherlv_50= '@' )? ( (otherlv_51= RULE_ID ) ) ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getDomainEventAccess().getUnorderedGroup_7_2(), 13);
                    	    						
                    	    // InternalContextMappingDSL.g:10212:10: ({...}? => (otherlv_49= 'belongsTo' ( (otherlv_50= '@' )? ( (otherlv_51= RULE_ID ) ) ) ) )
                    	    // InternalContextMappingDSL.g:10212:11: {...}? => (otherlv_49= 'belongsTo' ( (otherlv_50= '@' )? ( (otherlv_51= RULE_ID ) ) ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleDomainEvent", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:10212:20: (otherlv_49= 'belongsTo' ( (otherlv_50= '@' )? ( (otherlv_51= RULE_ID ) ) ) )
                    	    // InternalContextMappingDSL.g:10212:21: otherlv_49= 'belongsTo' ( (otherlv_50= '@' )? ( (otherlv_51= RULE_ID ) ) )
                    	    {
                    	    otherlv_49=(Token)match(input,120,FOLLOW_96); 

                    	    										newLeafNode(otherlv_49, grammarAccess.getDomainEventAccess().getBelongsToKeyword_7_2_13_0());
                    	    									
                    	    // InternalContextMappingDSL.g:10216:10: ( (otherlv_50= '@' )? ( (otherlv_51= RULE_ID ) ) )
                    	    // InternalContextMappingDSL.g:10217:11: (otherlv_50= '@' )? ( (otherlv_51= RULE_ID ) )
                    	    {
                    	    // InternalContextMappingDSL.g:10217:11: (otherlv_50= '@' )?
                    	    int alt247=2;
                    	    int LA247_0 = input.LA(1);

                    	    if ( (LA247_0==79) ) {
                    	        alt247=1;
                    	    }
                    	    switch (alt247) {
                    	        case 1 :
                    	            // InternalContextMappingDSL.g:10218:12: otherlv_50= '@'
                    	            {
                    	            otherlv_50=(Token)match(input,79,FOLLOW_10); 

                    	            												newLeafNode(otherlv_50, grammarAccess.getDomainEventAccess().getCommercialAtKeyword_7_2_13_1_0());
                    	            											

                    	            }
                    	            break;

                    	    }

                    	    // InternalContextMappingDSL.g:10223:11: ( (otherlv_51= RULE_ID ) )
                    	    // InternalContextMappingDSL.g:10224:12: (otherlv_51= RULE_ID )
                    	    {
                    	    // InternalContextMappingDSL.g:10224:12: (otherlv_51= RULE_ID )
                    	    // InternalContextMappingDSL.g:10225:13: otherlv_51= RULE_ID
                    	    {

                    	    													if (current==null) {
                    	    														current = createModelElement(grammarAccess.getDomainEventRule());
                    	    													}
                    	    												
                    	    otherlv_51=(Token)match(input,RULE_ID,FOLLOW_142); 

                    	    													newLeafNode(otherlv_51, grammarAccess.getDomainEventAccess().getBelongsToDomainObjectCrossReference_7_2_13_1_1_0());
                    	    												

                    	    }


                    	    }


                    	    }


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDomainEventAccess().getUnorderedGroup_7_2());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop248;
                        }
                    } while (true);


                    }


                    }

                     
                    					  getUnorderedGroupHelper().leave(grammarAccess.getDomainEventAccess().getUnorderedGroup_7_2());
                    					

                    }

                    // InternalContextMappingDSL.g:10250:4: ( ( (lv_attributes_52_0= ruleAttribute ) ) | ( (lv_references_53_0= ruleReference ) ) | ( (lv_operations_54_0= ruleDomainObjectOperation ) ) )*
                    loop249:
                    do {
                        int alt249=4;
                        switch ( input.LA(1) ) {
                        case RULE_STRING:
                            {
                            switch ( input.LA(2) ) {
                            case RULE_ID:
                            case 109:
                            case 170:
                            case 171:
                            case 172:
                            case 173:
                            case 174:
                            case 175:
                            case 176:
                            case 177:
                            case 178:
                            case 179:
                            case 180:
                            case 181:
                            case 182:
                            case 183:
                            case 184:
                            case 185:
                            case 186:
                            case 187:
                            case 188:
                            case 189:
                            case 190:
                            case 191:
                            case 218:
                            case 228:
                            case 229:
                            case 230:
                            case 231:
                            case 232:
                            case 233:
                            case 234:
                                {
                                alt249=1;
                                }
                                break;
                            case 127:
                            case 128:
                                {
                                alt249=3;
                                }
                                break;
                            case RULE_REF:
                                {
                                alt249=2;
                                }
                                break;

                            }

                            }
                            break;
                        case RULE_ID:
                        case 109:
                        case 170:
                        case 171:
                        case 172:
                        case 173:
                        case 174:
                        case 175:
                        case 176:
                        case 177:
                        case 178:
                        case 179:
                        case 180:
                        case 181:
                        case 182:
                        case 183:
                        case 184:
                        case 185:
                        case 186:
                        case 187:
                        case 188:
                        case 189:
                        case 190:
                        case 191:
                        case 218:
                        case 228:
                        case 229:
                        case 230:
                        case 231:
                        case 232:
                        case 233:
                        case 234:
                            {
                            alt249=1;
                            }
                            break;
                        case RULE_REF:
                            {
                            alt249=2;
                            }
                            break;
                        case 127:
                        case 128:
                            {
                            alt249=3;
                            }
                            break;

                        }

                        switch (alt249) {
                    	case 1 :
                    	    // InternalContextMappingDSL.g:10251:5: ( (lv_attributes_52_0= ruleAttribute ) )
                    	    {
                    	    // InternalContextMappingDSL.g:10251:5: ( (lv_attributes_52_0= ruleAttribute ) )
                    	    // InternalContextMappingDSL.g:10252:6: (lv_attributes_52_0= ruleAttribute )
                    	    {
                    	    // InternalContextMappingDSL.g:10252:6: (lv_attributes_52_0= ruleAttribute )
                    	    // InternalContextMappingDSL.g:10253:7: lv_attributes_52_0= ruleAttribute
                    	    {

                    	    							newCompositeNode(grammarAccess.getDomainEventAccess().getAttributesAttributeParserRuleCall_7_3_0_0());
                    	    						
                    	    pushFollow(FOLLOW_132);
                    	    lv_attributes_52_0=ruleAttribute();

                    	    state._fsp--;


                    	    							if (current==null) {
                    	    								current = createModelElementForParent(grammarAccess.getDomainEventRule());
                    	    							}
                    	    							add(
                    	    								current,
                    	    								"attributes",
                    	    								lv_attributes_52_0,
                    	    								"org.contextmapper.tactic.dsl.TacticDDDLanguage.Attribute");
                    	    							afterParserOrEnumRuleCall();
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 2 :
                    	    // InternalContextMappingDSL.g:10271:5: ( (lv_references_53_0= ruleReference ) )
                    	    {
                    	    // InternalContextMappingDSL.g:10271:5: ( (lv_references_53_0= ruleReference ) )
                    	    // InternalContextMappingDSL.g:10272:6: (lv_references_53_0= ruleReference )
                    	    {
                    	    // InternalContextMappingDSL.g:10272:6: (lv_references_53_0= ruleReference )
                    	    // InternalContextMappingDSL.g:10273:7: lv_references_53_0= ruleReference
                    	    {

                    	    							newCompositeNode(grammarAccess.getDomainEventAccess().getReferencesReferenceParserRuleCall_7_3_1_0());
                    	    						
                    	    pushFollow(FOLLOW_132);
                    	    lv_references_53_0=ruleReference();

                    	    state._fsp--;


                    	    							if (current==null) {
                    	    								current = createModelElementForParent(grammarAccess.getDomainEventRule());
                    	    							}
                    	    							add(
                    	    								current,
                    	    								"references",
                    	    								lv_references_53_0,
                    	    								"org.contextmapper.tactic.dsl.TacticDDDLanguage.Reference");
                    	    							afterParserOrEnumRuleCall();
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 3 :
                    	    // InternalContextMappingDSL.g:10291:5: ( (lv_operations_54_0= ruleDomainObjectOperation ) )
                    	    {
                    	    // InternalContextMappingDSL.g:10291:5: ( (lv_operations_54_0= ruleDomainObjectOperation ) )
                    	    // InternalContextMappingDSL.g:10292:6: (lv_operations_54_0= ruleDomainObjectOperation )
                    	    {
                    	    // InternalContextMappingDSL.g:10292:6: (lv_operations_54_0= ruleDomainObjectOperation )
                    	    // InternalContextMappingDSL.g:10293:7: lv_operations_54_0= ruleDomainObjectOperation
                    	    {

                    	    							newCompositeNode(grammarAccess.getDomainEventAccess().getOperationsDomainObjectOperationParserRuleCall_7_3_2_0());
                    	    						
                    	    pushFollow(FOLLOW_132);
                    	    lv_operations_54_0=ruleDomainObjectOperation();

                    	    state._fsp--;


                    	    							if (current==null) {
                    	    								current = createModelElementForParent(grammarAccess.getDomainEventRule());
                    	    							}
                    	    							add(
                    	    								current,
                    	    								"operations",
                    	    								lv_operations_54_0,
                    	    								"org.contextmapper.tactic.dsl.TacticDDDLanguage.DomainObjectOperation");
                    	    							afterParserOrEnumRuleCall();
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop249;
                        }
                    } while (true);

                    // InternalContextMappingDSL.g:10311:4: ( (lv_repository_55_0= ruleRepository ) )?
                    int alt250=2;
                    int LA250_0 = input.LA(1);

                    if ( (LA250_0==RULE_STRING||LA250_0==166) ) {
                        alt250=1;
                    }
                    switch (alt250) {
                        case 1 :
                            // InternalContextMappingDSL.g:10312:5: (lv_repository_55_0= ruleRepository )
                            {
                            // InternalContextMappingDSL.g:10312:5: (lv_repository_55_0= ruleRepository )
                            // InternalContextMappingDSL.g:10313:6: lv_repository_55_0= ruleRepository
                            {

                            						newCompositeNode(grammarAccess.getDomainEventAccess().getRepositoryRepositoryParserRuleCall_7_4_0());
                            					
                            pushFollow(FOLLOW_35);
                            lv_repository_55_0=ruleRepository();

                            state._fsp--;


                            						if (current==null) {
                            							current = createModelElementForParent(grammarAccess.getDomainEventRule());
                            						}
                            						set(
                            							current,
                            							"repository",
                            							lv_repository_55_0,
                            							"org.contextmapper.tactic.dsl.TacticDDDLanguage.Repository");
                            						afterParserOrEnumRuleCall();
                            					

                            }


                            }
                            break;

                    }

                    otherlv_56=(Token)match(input,RULE_CLOSE,FOLLOW_2); 

                    				newLeafNode(otherlv_56, grammarAccess.getDomainEventAccess().getRightCurlyBracketKeyword_7_5());
                    			

                    }
                    break;

            }


            }


            }


            	leaveRule();

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleDomainEvent"


    // $ANTLR start "entryRuleCommandEvent"
    // InternalContextMappingDSL.g:10339:1: entryRuleCommandEvent returns [EObject current=null] : iv_ruleCommandEvent= ruleCommandEvent EOF ;
    public final EObject entryRuleCommandEvent() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleCommandEvent = null;


        try {
            // InternalContextMappingDSL.g:10339:53: (iv_ruleCommandEvent= ruleCommandEvent EOF )
            // InternalContextMappingDSL.g:10340:2: iv_ruleCommandEvent= ruleCommandEvent EOF
            {
             newCompositeNode(grammarAccess.getCommandEventRule()); 
            pushFollow(FOLLOW_1);
            iv_ruleCommandEvent=ruleCommandEvent();

            state._fsp--;

             current =iv_ruleCommandEvent; 
            match(input,EOF,FOLLOW_2); 

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleCommandEvent"


    // $ANTLR start "ruleCommandEvent"
    // InternalContextMappingDSL.g:10346:1: ruleCommandEvent returns [EObject current=null] : ( ( (lv_comment_0_0= RULE_SL_COMMENT ) )? ( (lv_doc_1_0= RULE_STRING ) )? ( (lv_abstract_2_0= 'abstract' ) )? otherlv_3= 'CommandEvent' ( (lv_name_4_0= RULE_ID ) ) (otherlv_5= 'extends' ( (otherlv_6= '@' ( (otherlv_7= RULE_ID ) ) ) | ( (lv_extendsName_8_0= ruleJavaIdentifier ) ) ) )? (otherlv_9= 'with' (otherlv_10= '@' )? ( (otherlv_11= RULE_ID ) ) )* (otherlv_12= '{' (otherlv_13= 'package' otherlv_14= '=' ( (lv_package_15_0= ruleJavaIdentifier ) ) )? ( ( ( ( ({...}? => ( ({...}? => ( ( (lv_cache_17_0= 'cache' ) ) | (this_NOT_18= RULE_NOT otherlv_19= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_20_0= 'gap' ) ) | ( (lv_noGapClass_21_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_22_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_23= 'hint' otherlv_24= '=' ( (lv_hint_25_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_26= 'databaseTable' otherlv_27= '=' ( (lv_databaseTable_28_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'discriminatorValue' otherlv_30= '=' ( (lv_discriminatorValue_31_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'discriminatorColumn' otherlv_33= '=' ( (lv_discriminatorColumn_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'discriminatorType' otherlv_36= '=' ( (lv_discriminatorType_37_0= ruleDiscriminatorType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'discriminatorLength' otherlv_39= '=' ( (lv_discriminatorLength_40_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'inheritanceType' otherlv_42= '=' ( (lv_inheritanceType_43_0= ruleInheritanceType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_44= 'validate' otherlv_45= '=' ( (lv_validate_46_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_persistent_47_0= 'persistent' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_aggregateRoot_48_0= 'aggregateRoot' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_49= 'belongsTo' ( (otherlv_50= '@' )? ( (otherlv_51= RULE_ID ) ) ) ) ) ) ) )* ) ) ) ( ( (lv_attributes_52_0= ruleAttribute ) ) | ( (lv_references_53_0= ruleReference ) ) | ( (lv_operations_54_0= ruleDomainObjectOperation ) ) )* ( (lv_repository_55_0= ruleRepository ) )? otherlv_56= '}' )? ) ;
    public final EObject ruleCommandEvent() throws RecognitionException {
        EObject current = null;

        Token lv_comment_0_0=null;
        Token lv_doc_1_0=null;
        Token lv_abstract_2_0=null;
        Token otherlv_3=null;
        Token lv_name_4_0=null;
        Token otherlv_5=null;
        Token otherlv_6=null;
        Token otherlv_7=null;
        Token otherlv_9=null;
        Token otherlv_10=null;
        Token otherlv_11=null;
        Token otherlv_12=null;
        Token otherlv_13=null;
        Token otherlv_14=null;
        Token lv_cache_17_0=null;
        Token this_NOT_18=null;
        Token otherlv_19=null;
        Token lv_gapClass_20_0=null;
        Token lv_noGapClass_21_0=null;
        Token lv_scaffold_22_0=null;
        Token otherlv_23=null;
        Token otherlv_24=null;
        Token lv_hint_25_0=null;
        Token otherlv_26=null;
        Token otherlv_27=null;
        Token lv_databaseTable_28_0=null;
        Token otherlv_29=null;
        Token otherlv_30=null;
        Token lv_discriminatorValue_31_0=null;
        Token otherlv_32=null;
        Token otherlv_33=null;
        Token lv_discriminatorColumn_34_0=null;
        Token otherlv_35=null;
        Token otherlv_36=null;
        Token otherlv_38=null;
        Token otherlv_39=null;
        Token lv_discriminatorLength_40_0=null;
        Token otherlv_41=null;
        Token otherlv_42=null;
        Token otherlv_44=null;
        Token otherlv_45=null;
        Token lv_validate_46_0=null;
        Token lv_persistent_47_0=null;
        Token lv_aggregateRoot_48_0=null;
        Token otherlv_49=null;
        Token otherlv_50=null;
        Token otherlv_51=null;
        Token otherlv_56=null;
        AntlrDatatypeRuleToken lv_extendsName_8_0 = null;

        AntlrDatatypeRuleToken lv_package_15_0 = null;

        Enumerator lv_discriminatorType_37_0 = null;

        Enumerator lv_inheritanceType_43_0 = null;

        EObject lv_attributes_52_0 = null;

        EObject lv_references_53_0 = null;

        EObject lv_operations_54_0 = null;

        EObject lv_repository_55_0 = null;



        	enterRule();

        try {
            // InternalContextMappingDSL.g:10352:2: ( ( ( (lv_comment_0_0= RULE_SL_COMMENT ) )? ( (lv_doc_1_0= RULE_STRING ) )? ( (lv_abstract_2_0= 'abstract' ) )? otherlv_3= 'CommandEvent' ( (lv_name_4_0= RULE_ID ) ) (otherlv_5= 'extends' ( (otherlv_6= '@' ( (otherlv_7= RULE_ID ) ) ) | ( (lv_extendsName_8_0= ruleJavaIdentifier ) ) ) )? (otherlv_9= 'with' (otherlv_10= '@' )? ( (otherlv_11= RULE_ID ) ) )* (otherlv_12= '{' (otherlv_13= 'package' otherlv_14= '=' ( (lv_package_15_0= ruleJavaIdentifier ) ) )? ( ( ( ( ({...}? => ( ({...}? => ( ( (lv_cache_17_0= 'cache' ) ) | (this_NOT_18= RULE_NOT otherlv_19= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_20_0= 'gap' ) ) | ( (lv_noGapClass_21_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_22_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_23= 'hint' otherlv_24= '=' ( (lv_hint_25_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_26= 'databaseTable' otherlv_27= '=' ( (lv_databaseTable_28_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'discriminatorValue' otherlv_30= '=' ( (lv_discriminatorValue_31_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'discriminatorColumn' otherlv_33= '=' ( (lv_discriminatorColumn_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'discriminatorType' otherlv_36= '=' ( (lv_discriminatorType_37_0= ruleDiscriminatorType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'discriminatorLength' otherlv_39= '=' ( (lv_discriminatorLength_40_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'inheritanceType' otherlv_42= '=' ( (lv_inheritanceType_43_0= ruleInheritanceType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_44= 'validate' otherlv_45= '=' ( (lv_validate_46_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_persistent_47_0= 'persistent' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_aggregateRoot_48_0= 'aggregateRoot' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_49= 'belongsTo' ( (otherlv_50= '@' )? ( (otherlv_51= RULE_ID ) ) ) ) ) ) ) )* ) ) ) ( ( (lv_attributes_52_0= ruleAttribute ) ) | ( (lv_references_53_0= ruleReference ) ) | ( (lv_operations_54_0= ruleDomainObjectOperation ) ) )* ( (lv_repository_55_0= ruleRepository ) )? otherlv_56= '}' )? ) )
            // InternalContextMappingDSL.g:10353:2: ( ( (lv_comment_0_0= RULE_SL_COMMENT ) )? ( (lv_doc_1_0= RULE_STRING ) )? ( (lv_abstract_2_0= 'abstract' ) )? otherlv_3= 'CommandEvent' ( (lv_name_4_0= RULE_ID ) ) (otherlv_5= 'extends' ( (otherlv_6= '@' ( (otherlv_7= RULE_ID ) ) ) | ( (lv_extendsName_8_0= ruleJavaIdentifier ) ) ) )? (otherlv_9= 'with' (otherlv_10= '@' )? ( (otherlv_11= RULE_ID ) ) )* (otherlv_12= '{' (otherlv_13= 'package' otherlv_14= '=' ( (lv_package_15_0= ruleJavaIdentifier ) ) )? ( ( ( ( ({...}? => ( ({...}? => ( ( (lv_cache_17_0= 'cache' ) ) | (this_NOT_18= RULE_NOT otherlv_19= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_20_0= 'gap' ) ) | ( (lv_noGapClass_21_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_22_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_23= 'hint' otherlv_24= '=' ( (lv_hint_25_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_26= 'databaseTable' otherlv_27= '=' ( (lv_databaseTable_28_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'discriminatorValue' otherlv_30= '=' ( (lv_discriminatorValue_31_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'discriminatorColumn' otherlv_33= '=' ( (lv_discriminatorColumn_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'discriminatorType' otherlv_36= '=' ( (lv_discriminatorType_37_0= ruleDiscriminatorType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'discriminatorLength' otherlv_39= '=' ( (lv_discriminatorLength_40_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'inheritanceType' otherlv_42= '=' ( (lv_inheritanceType_43_0= ruleInheritanceType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_44= 'validate' otherlv_45= '=' ( (lv_validate_46_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_persistent_47_0= 'persistent' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_aggregateRoot_48_0= 'aggregateRoot' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_49= 'belongsTo' ( (otherlv_50= '@' )? ( (otherlv_51= RULE_ID ) ) ) ) ) ) ) )* ) ) ) ( ( (lv_attributes_52_0= ruleAttribute ) ) | ( (lv_references_53_0= ruleReference ) ) | ( (lv_operations_54_0= ruleDomainObjectOperation ) ) )* ( (lv_repository_55_0= ruleRepository ) )? otherlv_56= '}' )? )
            {
            // InternalContextMappingDSL.g:10353:2: ( ( (lv_comment_0_0= RULE_SL_COMMENT ) )? ( (lv_doc_1_0= RULE_STRING ) )? ( (lv_abstract_2_0= 'abstract' ) )? otherlv_3= 'CommandEvent' ( (lv_name_4_0= RULE_ID ) ) (otherlv_5= 'extends' ( (otherlv_6= '@' ( (otherlv_7= RULE_ID ) ) ) | ( (lv_extendsName_8_0= ruleJavaIdentifier ) ) ) )? (otherlv_9= 'with' (otherlv_10= '@' )? ( (otherlv_11= RULE_ID ) ) )* (otherlv_12= '{' (otherlv_13= 'package' otherlv_14= '=' ( (lv_package_15_0= ruleJavaIdentifier ) ) )? ( ( ( ( ({...}? => ( ({...}? => ( ( (lv_cache_17_0= 'cache' ) ) | (this_NOT_18= RULE_NOT otherlv_19= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_20_0= 'gap' ) ) | ( (lv_noGapClass_21_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_22_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_23= 'hint' otherlv_24= '=' ( (lv_hint_25_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_26= 'databaseTable' otherlv_27= '=' ( (lv_databaseTable_28_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'discriminatorValue' otherlv_30= '=' ( (lv_discriminatorValue_31_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'discriminatorColumn' otherlv_33= '=' ( (lv_discriminatorColumn_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'discriminatorType' otherlv_36= '=' ( (lv_discriminatorType_37_0= ruleDiscriminatorType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'discriminatorLength' otherlv_39= '=' ( (lv_discriminatorLength_40_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'inheritanceType' otherlv_42= '=' ( (lv_inheritanceType_43_0= ruleInheritanceType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_44= 'validate' otherlv_45= '=' ( (lv_validate_46_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_persistent_47_0= 'persistent' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_aggregateRoot_48_0= 'aggregateRoot' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_49= 'belongsTo' ( (otherlv_50= '@' )? ( (otherlv_51= RULE_ID ) ) ) ) ) ) ) )* ) ) ) ( ( (lv_attributes_52_0= ruleAttribute ) ) | ( (lv_references_53_0= ruleReference ) ) | ( (lv_operations_54_0= ruleDomainObjectOperation ) ) )* ( (lv_repository_55_0= ruleRepository ) )? otherlv_56= '}' )? )
            // InternalContextMappingDSL.g:10354:3: ( (lv_comment_0_0= RULE_SL_COMMENT ) )? ( (lv_doc_1_0= RULE_STRING ) )? ( (lv_abstract_2_0= 'abstract' ) )? otherlv_3= 'CommandEvent' ( (lv_name_4_0= RULE_ID ) ) (otherlv_5= 'extends' ( (otherlv_6= '@' ( (otherlv_7= RULE_ID ) ) ) | ( (lv_extendsName_8_0= ruleJavaIdentifier ) ) ) )? (otherlv_9= 'with' (otherlv_10= '@' )? ( (otherlv_11= RULE_ID ) ) )* (otherlv_12= '{' (otherlv_13= 'package' otherlv_14= '=' ( (lv_package_15_0= ruleJavaIdentifier ) ) )? ( ( ( ( ({...}? => ( ({...}? => ( ( (lv_cache_17_0= 'cache' ) ) | (this_NOT_18= RULE_NOT otherlv_19= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_20_0= 'gap' ) ) | ( (lv_noGapClass_21_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_22_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_23= 'hint' otherlv_24= '=' ( (lv_hint_25_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_26= 'databaseTable' otherlv_27= '=' ( (lv_databaseTable_28_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'discriminatorValue' otherlv_30= '=' ( (lv_discriminatorValue_31_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'discriminatorColumn' otherlv_33= '=' ( (lv_discriminatorColumn_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'discriminatorType' otherlv_36= '=' ( (lv_discriminatorType_37_0= ruleDiscriminatorType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'discriminatorLength' otherlv_39= '=' ( (lv_discriminatorLength_40_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'inheritanceType' otherlv_42= '=' ( (lv_inheritanceType_43_0= ruleInheritanceType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_44= 'validate' otherlv_45= '=' ( (lv_validate_46_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_persistent_47_0= 'persistent' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_aggregateRoot_48_0= 'aggregateRoot' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_49= 'belongsTo' ( (otherlv_50= '@' )? ( (otherlv_51= RULE_ID ) ) ) ) ) ) ) )* ) ) ) ( ( (lv_attributes_52_0= ruleAttribute ) ) | ( (lv_references_53_0= ruleReference ) ) | ( (lv_operations_54_0= ruleDomainObjectOperation ) ) )* ( (lv_repository_55_0= ruleRepository ) )? otherlv_56= '}' )?
            {
            // InternalContextMappingDSL.g:10354:3: ( (lv_comment_0_0= RULE_SL_COMMENT ) )?
            int alt252=2;
            int LA252_0 = input.LA(1);

            if ( (LA252_0==RULE_SL_COMMENT) ) {
                alt252=1;
            }
            switch (alt252) {
                case 1 :
                    // InternalContextMappingDSL.g:10355:4: (lv_comment_0_0= RULE_SL_COMMENT )
                    {
                    // InternalContextMappingDSL.g:10355:4: (lv_comment_0_0= RULE_SL_COMMENT )
                    // InternalContextMappingDSL.g:10356:5: lv_comment_0_0= RULE_SL_COMMENT
                    {
                    lv_comment_0_0=(Token)match(input,RULE_SL_COMMENT,FOLLOW_143); 

                    					newLeafNode(lv_comment_0_0, grammarAccess.getCommandEventAccess().getCommentSL_COMMENTTerminalRuleCall_0_0());
                    				

                    					if (current==null) {
                    						current = createModelElement(grammarAccess.getCommandEventRule());
                    					}
                    					setWithLastConsumed(
                    						current,
                    						"comment",
                    						lv_comment_0_0,
                    						"org.eclipse.xtext.common.Terminals.SL_COMMENT");
                    				

                    }


                    }
                    break;

            }

            // InternalContextMappingDSL.g:10372:3: ( (lv_doc_1_0= RULE_STRING ) )?
            int alt253=2;
            int LA253_0 = input.LA(1);

            if ( (LA253_0==RULE_STRING) ) {
                alt253=1;
            }
            switch (alt253) {
                case 1 :
                    // InternalContextMappingDSL.g:10373:4: (lv_doc_1_0= RULE_STRING )
                    {
                    // InternalContextMappingDSL.g:10373:4: (lv_doc_1_0= RULE_STRING )
                    // InternalContextMappingDSL.g:10374:5: lv_doc_1_0= RULE_STRING
                    {
                    lv_doc_1_0=(Token)match(input,RULE_STRING,FOLLOW_144); 

                    					newLeafNode(lv_doc_1_0, grammarAccess.getCommandEventAccess().getDocSTRINGTerminalRuleCall_1_0());
                    				

                    					if (current==null) {
                    						current = createModelElement(grammarAccess.getCommandEventRule());
                    					}
                    					setWithLastConsumed(
                    						current,
                    						"doc",
                    						lv_doc_1_0,
                    						"org.eclipse.xtext.common.Terminals.STRING");
                    				

                    }


                    }
                    break;

            }

            // InternalContextMappingDSL.g:10390:3: ( (lv_abstract_2_0= 'abstract' ) )?
            int alt254=2;
            int LA254_0 = input.LA(1);

            if ( (LA254_0==105) ) {
                alt254=1;
            }
            switch (alt254) {
                case 1 :
                    // InternalContextMappingDSL.g:10391:4: (lv_abstract_2_0= 'abstract' )
                    {
                    // InternalContextMappingDSL.g:10391:4: (lv_abstract_2_0= 'abstract' )
                    // InternalContextMappingDSL.g:10392:5: lv_abstract_2_0= 'abstract'
                    {
                    lv_abstract_2_0=(Token)match(input,105,FOLLOW_145); 

                    					newLeafNode(lv_abstract_2_0, grammarAccess.getCommandEventAccess().getAbstractAbstractKeyword_2_0());
                    				

                    					if (current==null) {
                    						current = createModelElement(grammarAccess.getCommandEventRule());
                    					}
                    					setWithLastConsumed(current, "abstract", true, "abstract");
                    				

                    }


                    }
                    break;

            }

            otherlv_3=(Token)match(input,125,FOLLOW_10); 

            			newLeafNode(otherlv_3, grammarAccess.getCommandEventAccess().getCommandEventKeyword_3());
            		
            // InternalContextMappingDSL.g:10408:3: ( (lv_name_4_0= RULE_ID ) )
            // InternalContextMappingDSL.g:10409:4: (lv_name_4_0= RULE_ID )
            {
            // InternalContextMappingDSL.g:10409:4: (lv_name_4_0= RULE_ID )
            // InternalContextMappingDSL.g:10410:5: lv_name_4_0= RULE_ID
            {
            lv_name_4_0=(Token)match(input,RULE_ID,FOLLOW_124); 

            					newLeafNode(lv_name_4_0, grammarAccess.getCommandEventAccess().getNameIDTerminalRuleCall_4_0());
            				

            					if (current==null) {
            						current = createModelElement(grammarAccess.getCommandEventRule());
            					}
            					setWithLastConsumed(
            						current,
            						"name",
            						lv_name_4_0,
            						"org.eclipse.xtext.common.Terminals.ID");
            				

            }


            }

            // InternalContextMappingDSL.g:10426:3: (otherlv_5= 'extends' ( (otherlv_6= '@' ( (otherlv_7= RULE_ID ) ) ) | ( (lv_extendsName_8_0= ruleJavaIdentifier ) ) ) )?
            int alt256=2;
            int LA256_0 = input.LA(1);

            if ( (LA256_0==107) ) {
                alt256=1;
            }
            switch (alt256) {
                case 1 :
                    // InternalContextMappingDSL.g:10427:4: otherlv_5= 'extends' ( (otherlv_6= '@' ( (otherlv_7= RULE_ID ) ) ) | ( (lv_extendsName_8_0= ruleJavaIdentifier ) ) )
                    {
                    otherlv_5=(Token)match(input,107,FOLLOW_96); 

                    				newLeafNode(otherlv_5, grammarAccess.getCommandEventAccess().getExtendsKeyword_5_0());
                    			
                    // InternalContextMappingDSL.g:10431:4: ( (otherlv_6= '@' ( (otherlv_7= RULE_ID ) ) ) | ( (lv_extendsName_8_0= ruleJavaIdentifier ) ) )
                    int alt255=2;
                    int LA255_0 = input.LA(1);

                    if ( (LA255_0==79) ) {
                        alt255=1;
                    }
                    else if ( (LA255_0==RULE_ID) ) {
                        alt255=2;
                    }
                    else {
                        NoViableAltException nvae =
                            new NoViableAltException("", 255, 0, input);

                        throw nvae;
                    }
                    switch (alt255) {
                        case 1 :
                            // InternalContextMappingDSL.g:10432:5: (otherlv_6= '@' ( (otherlv_7= RULE_ID ) ) )
                            {
                            // InternalContextMappingDSL.g:10432:5: (otherlv_6= '@' ( (otherlv_7= RULE_ID ) ) )
                            // InternalContextMappingDSL.g:10433:6: otherlv_6= '@' ( (otherlv_7= RULE_ID ) )
                            {
                            otherlv_6=(Token)match(input,79,FOLLOW_10); 

                            						newLeafNode(otherlv_6, grammarAccess.getCommandEventAccess().getCommercialAtKeyword_5_1_0_0());
                            					
                            // InternalContextMappingDSL.g:10437:6: ( (otherlv_7= RULE_ID ) )
                            // InternalContextMappingDSL.g:10438:7: (otherlv_7= RULE_ID )
                            {
                            // InternalContextMappingDSL.g:10438:7: (otherlv_7= RULE_ID )
                            // InternalContextMappingDSL.g:10439:8: otherlv_7= RULE_ID
                            {

                            								if (current==null) {
                            									current = createModelElement(grammarAccess.getCommandEventRule());
                            								}
                            							
                            otherlv_7=(Token)match(input,RULE_ID,FOLLOW_125); 

                            								newLeafNode(otherlv_7, grammarAccess.getCommandEventAccess().getExtendsCommandEventCrossReference_5_1_0_1_0());
                            							

                            }


                            }


                            }


                            }
                            break;
                        case 2 :
                            // InternalContextMappingDSL.g:10452:5: ( (lv_extendsName_8_0= ruleJavaIdentifier ) )
                            {
                            // InternalContextMappingDSL.g:10452:5: ( (lv_extendsName_8_0= ruleJavaIdentifier ) )
                            // InternalContextMappingDSL.g:10453:6: (lv_extendsName_8_0= ruleJavaIdentifier )
                            {
                            // InternalContextMappingDSL.g:10453:6: (lv_extendsName_8_0= ruleJavaIdentifier )
                            // InternalContextMappingDSL.g:10454:7: lv_extendsName_8_0= ruleJavaIdentifier
                            {

                            							newCompositeNode(grammarAccess.getCommandEventAccess().getExtendsNameJavaIdentifierParserRuleCall_5_1_1_0());
                            						
                            pushFollow(FOLLOW_125);
                            lv_extendsName_8_0=ruleJavaIdentifier();

                            state._fsp--;


                            							if (current==null) {
                            								current = createModelElementForParent(grammarAccess.getCommandEventRule());
                            							}
                            							set(
                            								current,
                            								"extendsName",
                            								lv_extendsName_8_0,
                            								"org.contextmapper.tactic.dsl.TacticDDDLanguage.JavaIdentifier");
                            							afterParserOrEnumRuleCall();
                            						

                            }


                            }


                            }
                            break;

                    }


                    }
                    break;

            }

            // InternalContextMappingDSL.g:10473:3: (otherlv_9= 'with' (otherlv_10= '@' )? ( (otherlv_11= RULE_ID ) ) )*
            loop258:
            do {
                int alt258=2;
                int LA258_0 = input.LA(1);

                if ( (LA258_0==108) ) {
                    alt258=1;
                }


                switch (alt258) {
            	case 1 :
            	    // InternalContextMappingDSL.g:10474:4: otherlv_9= 'with' (otherlv_10= '@' )? ( (otherlv_11= RULE_ID ) )
            	    {
            	    otherlv_9=(Token)match(input,108,FOLLOW_96); 

            	    				newLeafNode(otherlv_9, grammarAccess.getCommandEventAccess().getWithKeyword_6_0());
            	    			
            	    // InternalContextMappingDSL.g:10478:4: (otherlv_10= '@' )?
            	    int alt257=2;
            	    int LA257_0 = input.LA(1);

            	    if ( (LA257_0==79) ) {
            	        alt257=1;
            	    }
            	    switch (alt257) {
            	        case 1 :
            	            // InternalContextMappingDSL.g:10479:5: otherlv_10= '@'
            	            {
            	            otherlv_10=(Token)match(input,79,FOLLOW_10); 

            	            					newLeafNode(otherlv_10, grammarAccess.getCommandEventAccess().getCommercialAtKeyword_6_1());
            	            				

            	            }
            	            break;

            	    }

            	    // InternalContextMappingDSL.g:10484:4: ( (otherlv_11= RULE_ID ) )
            	    // InternalContextMappingDSL.g:10485:5: (otherlv_11= RULE_ID )
            	    {
            	    // InternalContextMappingDSL.g:10485:5: (otherlv_11= RULE_ID )
            	    // InternalContextMappingDSL.g:10486:6: otherlv_11= RULE_ID
            	    {

            	    						if (current==null) {
            	    							current = createModelElement(grammarAccess.getCommandEventRule());
            	    						}
            	    					
            	    otherlv_11=(Token)match(input,RULE_ID,FOLLOW_125); 

            	    						newLeafNode(otherlv_11, grammarAccess.getCommandEventAccess().getTraitsTraitCrossReference_6_2_0());
            	    					

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop258;
                }
            } while (true);

            // InternalContextMappingDSL.g:10498:3: (otherlv_12= '{' (otherlv_13= 'package' otherlv_14= '=' ( (lv_package_15_0= ruleJavaIdentifier ) ) )? ( ( ( ( ({...}? => ( ({...}? => ( ( (lv_cache_17_0= 'cache' ) ) | (this_NOT_18= RULE_NOT otherlv_19= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_20_0= 'gap' ) ) | ( (lv_noGapClass_21_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_22_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_23= 'hint' otherlv_24= '=' ( (lv_hint_25_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_26= 'databaseTable' otherlv_27= '=' ( (lv_databaseTable_28_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'discriminatorValue' otherlv_30= '=' ( (lv_discriminatorValue_31_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'discriminatorColumn' otherlv_33= '=' ( (lv_discriminatorColumn_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'discriminatorType' otherlv_36= '=' ( (lv_discriminatorType_37_0= ruleDiscriminatorType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'discriminatorLength' otherlv_39= '=' ( (lv_discriminatorLength_40_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'inheritanceType' otherlv_42= '=' ( (lv_inheritanceType_43_0= ruleInheritanceType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_44= 'validate' otherlv_45= '=' ( (lv_validate_46_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_persistent_47_0= 'persistent' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_aggregateRoot_48_0= 'aggregateRoot' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_49= 'belongsTo' ( (otherlv_50= '@' )? ( (otherlv_51= RULE_ID ) ) ) ) ) ) ) )* ) ) ) ( ( (lv_attributes_52_0= ruleAttribute ) ) | ( (lv_references_53_0= ruleReference ) ) | ( (lv_operations_54_0= ruleDomainObjectOperation ) ) )* ( (lv_repository_55_0= ruleRepository ) )? otherlv_56= '}' )?
            int alt266=2;
            int LA266_0 = input.LA(1);

            if ( (LA266_0==RULE_OPEN) ) {
                alt266=1;
            }
            switch (alt266) {
                case 1 :
                    // InternalContextMappingDSL.g:10499:4: otherlv_12= '{' (otherlv_13= 'package' otherlv_14= '=' ( (lv_package_15_0= ruleJavaIdentifier ) ) )? ( ( ( ( ({...}? => ( ({...}? => ( ( (lv_cache_17_0= 'cache' ) ) | (this_NOT_18= RULE_NOT otherlv_19= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_20_0= 'gap' ) ) | ( (lv_noGapClass_21_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_22_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_23= 'hint' otherlv_24= '=' ( (lv_hint_25_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_26= 'databaseTable' otherlv_27= '=' ( (lv_databaseTable_28_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'discriminatorValue' otherlv_30= '=' ( (lv_discriminatorValue_31_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'discriminatorColumn' otherlv_33= '=' ( (lv_discriminatorColumn_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'discriminatorType' otherlv_36= '=' ( (lv_discriminatorType_37_0= ruleDiscriminatorType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'discriminatorLength' otherlv_39= '=' ( (lv_discriminatorLength_40_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'inheritanceType' otherlv_42= '=' ( (lv_inheritanceType_43_0= ruleInheritanceType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_44= 'validate' otherlv_45= '=' ( (lv_validate_46_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_persistent_47_0= 'persistent' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_aggregateRoot_48_0= 'aggregateRoot' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_49= 'belongsTo' ( (otherlv_50= '@' )? ( (otherlv_51= RULE_ID ) ) ) ) ) ) ) )* ) ) ) ( ( (lv_attributes_52_0= ruleAttribute ) ) | ( (lv_references_53_0= ruleReference ) ) | ( (lv_operations_54_0= ruleDomainObjectOperation ) ) )* ( (lv_repository_55_0= ruleRepository ) )? otherlv_56= '}'
                    {
                    otherlv_12=(Token)match(input,RULE_OPEN,FOLLOW_142); 

                    				newLeafNode(otherlv_12, grammarAccess.getCommandEventAccess().getLeftCurlyBracketKeyword_7_0());
                    			
                    // InternalContextMappingDSL.g:10503:4: (otherlv_13= 'package' otherlv_14= '=' ( (lv_package_15_0= ruleJavaIdentifier ) ) )?
                    int alt259=2;
                    int LA259_0 = input.LA(1);

                    if ( (LA259_0==109) ) {
                        int LA259_1 = input.LA(2);

                        if ( (LA259_1==21) ) {
                            alt259=1;
                        }
                    }
                    switch (alt259) {
                        case 1 :
                            // InternalContextMappingDSL.g:10504:5: otherlv_13= 'package' otherlv_14= '=' ( (lv_package_15_0= ruleJavaIdentifier ) )
                            {
                            otherlv_13=(Token)match(input,109,FOLLOW_81); 

                            					newLeafNode(otherlv_13, grammarAccess.getCommandEventAccess().getPackageKeyword_7_1_0());
                            				
                            otherlv_14=(Token)match(input,21,FOLLOW_10); 

                            					newLeafNode(otherlv_14, grammarAccess.getCommandEventAccess().getEqualsSignKeyword_7_1_1());
                            				
                            // InternalContextMappingDSL.g:10512:5: ( (lv_package_15_0= ruleJavaIdentifier ) )
                            // InternalContextMappingDSL.g:10513:6: (lv_package_15_0= ruleJavaIdentifier )
                            {
                            // InternalContextMappingDSL.g:10513:6: (lv_package_15_0= ruleJavaIdentifier )
                            // InternalContextMappingDSL.g:10514:7: lv_package_15_0= ruleJavaIdentifier
                            {

                            							newCompositeNode(grammarAccess.getCommandEventAccess().getPackageJavaIdentifierParserRuleCall_7_1_2_0());
                            						
                            pushFollow(FOLLOW_142);
                            lv_package_15_0=ruleJavaIdentifier();

                            state._fsp--;


                            							if (current==null) {
                            								current = createModelElementForParent(grammarAccess.getCommandEventRule());
                            							}
                            							set(
                            								current,
                            								"package",
                            								lv_package_15_0,
                            								"org.contextmapper.tactic.dsl.TacticDDDLanguage.JavaIdentifier");
                            							afterParserOrEnumRuleCall();
                            						

                            }


                            }


                            }
                            break;

                    }

                    // InternalContextMappingDSL.g:10532:4: ( ( ( ( ({...}? => ( ({...}? => ( ( (lv_cache_17_0= 'cache' ) ) | (this_NOT_18= RULE_NOT otherlv_19= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_20_0= 'gap' ) ) | ( (lv_noGapClass_21_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_22_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_23= 'hint' otherlv_24= '=' ( (lv_hint_25_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_26= 'databaseTable' otherlv_27= '=' ( (lv_databaseTable_28_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'discriminatorValue' otherlv_30= '=' ( (lv_discriminatorValue_31_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'discriminatorColumn' otherlv_33= '=' ( (lv_discriminatorColumn_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'discriminatorType' otherlv_36= '=' ( (lv_discriminatorType_37_0= ruleDiscriminatorType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'discriminatorLength' otherlv_39= '=' ( (lv_discriminatorLength_40_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'inheritanceType' otherlv_42= '=' ( (lv_inheritanceType_43_0= ruleInheritanceType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_44= 'validate' otherlv_45= '=' ( (lv_validate_46_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_persistent_47_0= 'persistent' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_aggregateRoot_48_0= 'aggregateRoot' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_49= 'belongsTo' ( (otherlv_50= '@' )? ( (otherlv_51= RULE_ID ) ) ) ) ) ) ) )* ) ) )
                    // InternalContextMappingDSL.g:10533:5: ( ( ( ({...}? => ( ({...}? => ( ( (lv_cache_17_0= 'cache' ) ) | (this_NOT_18= RULE_NOT otherlv_19= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_20_0= 'gap' ) ) | ( (lv_noGapClass_21_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_22_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_23= 'hint' otherlv_24= '=' ( (lv_hint_25_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_26= 'databaseTable' otherlv_27= '=' ( (lv_databaseTable_28_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'discriminatorValue' otherlv_30= '=' ( (lv_discriminatorValue_31_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'discriminatorColumn' otherlv_33= '=' ( (lv_discriminatorColumn_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'discriminatorType' otherlv_36= '=' ( (lv_discriminatorType_37_0= ruleDiscriminatorType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'discriminatorLength' otherlv_39= '=' ( (lv_discriminatorLength_40_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'inheritanceType' otherlv_42= '=' ( (lv_inheritanceType_43_0= ruleInheritanceType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_44= 'validate' otherlv_45= '=' ( (lv_validate_46_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_persistent_47_0= 'persistent' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_aggregateRoot_48_0= 'aggregateRoot' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_49= 'belongsTo' ( (otherlv_50= '@' )? ( (otherlv_51= RULE_ID ) ) ) ) ) ) ) )* ) )
                    {
                    // InternalContextMappingDSL.g:10533:5: ( ( ( ({...}? => ( ({...}? => ( ( (lv_cache_17_0= 'cache' ) ) | (this_NOT_18= RULE_NOT otherlv_19= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_20_0= 'gap' ) ) | ( (lv_noGapClass_21_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_22_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_23= 'hint' otherlv_24= '=' ( (lv_hint_25_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_26= 'databaseTable' otherlv_27= '=' ( (lv_databaseTable_28_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'discriminatorValue' otherlv_30= '=' ( (lv_discriminatorValue_31_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'discriminatorColumn' otherlv_33= '=' ( (lv_discriminatorColumn_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'discriminatorType' otherlv_36= '=' ( (lv_discriminatorType_37_0= ruleDiscriminatorType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'discriminatorLength' otherlv_39= '=' ( (lv_discriminatorLength_40_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'inheritanceType' otherlv_42= '=' ( (lv_inheritanceType_43_0= ruleInheritanceType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_44= 'validate' otherlv_45= '=' ( (lv_validate_46_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_persistent_47_0= 'persistent' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_aggregateRoot_48_0= 'aggregateRoot' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_49= 'belongsTo' ( (otherlv_50= '@' )? ( (otherlv_51= RULE_ID ) ) ) ) ) ) ) )* ) )
                    // InternalContextMappingDSL.g:10534:6: ( ( ({...}? => ( ({...}? => ( ( (lv_cache_17_0= 'cache' ) ) | (this_NOT_18= RULE_NOT otherlv_19= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_20_0= 'gap' ) ) | ( (lv_noGapClass_21_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_22_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_23= 'hint' otherlv_24= '=' ( (lv_hint_25_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_26= 'databaseTable' otherlv_27= '=' ( (lv_databaseTable_28_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'discriminatorValue' otherlv_30= '=' ( (lv_discriminatorValue_31_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'discriminatorColumn' otherlv_33= '=' ( (lv_discriminatorColumn_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'discriminatorType' otherlv_36= '=' ( (lv_discriminatorType_37_0= ruleDiscriminatorType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'discriminatorLength' otherlv_39= '=' ( (lv_discriminatorLength_40_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'inheritanceType' otherlv_42= '=' ( (lv_inheritanceType_43_0= ruleInheritanceType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_44= 'validate' otherlv_45= '=' ( (lv_validate_46_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_persistent_47_0= 'persistent' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_aggregateRoot_48_0= 'aggregateRoot' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_49= 'belongsTo' ( (otherlv_50= '@' )? ( (otherlv_51= RULE_ID ) ) ) ) ) ) ) )* )
                    {
                     
                    					  getUnorderedGroupHelper().enter(grammarAccess.getCommandEventAccess().getUnorderedGroup_7_2());
                    					
                    // InternalContextMappingDSL.g:10537:6: ( ( ({...}? => ( ({...}? => ( ( (lv_cache_17_0= 'cache' ) ) | (this_NOT_18= RULE_NOT otherlv_19= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_20_0= 'gap' ) ) | ( (lv_noGapClass_21_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_22_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_23= 'hint' otherlv_24= '=' ( (lv_hint_25_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_26= 'databaseTable' otherlv_27= '=' ( (lv_databaseTable_28_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'discriminatorValue' otherlv_30= '=' ( (lv_discriminatorValue_31_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'discriminatorColumn' otherlv_33= '=' ( (lv_discriminatorColumn_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'discriminatorType' otherlv_36= '=' ( (lv_discriminatorType_37_0= ruleDiscriminatorType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'discriminatorLength' otherlv_39= '=' ( (lv_discriminatorLength_40_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'inheritanceType' otherlv_42= '=' ( (lv_inheritanceType_43_0= ruleInheritanceType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_44= 'validate' otherlv_45= '=' ( (lv_validate_46_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_persistent_47_0= 'persistent' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_aggregateRoot_48_0= 'aggregateRoot' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_49= 'belongsTo' ( (otherlv_50= '@' )? ( (otherlv_51= RULE_ID ) ) ) ) ) ) ) )* )
                    // InternalContextMappingDSL.g:10538:7: ( ({...}? => ( ({...}? => ( ( (lv_cache_17_0= 'cache' ) ) | (this_NOT_18= RULE_NOT otherlv_19= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_20_0= 'gap' ) ) | ( (lv_noGapClass_21_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_22_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_23= 'hint' otherlv_24= '=' ( (lv_hint_25_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_26= 'databaseTable' otherlv_27= '=' ( (lv_databaseTable_28_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'discriminatorValue' otherlv_30= '=' ( (lv_discriminatorValue_31_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'discriminatorColumn' otherlv_33= '=' ( (lv_discriminatorColumn_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'discriminatorType' otherlv_36= '=' ( (lv_discriminatorType_37_0= ruleDiscriminatorType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'discriminatorLength' otherlv_39= '=' ( (lv_discriminatorLength_40_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'inheritanceType' otherlv_42= '=' ( (lv_inheritanceType_43_0= ruleInheritanceType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_44= 'validate' otherlv_45= '=' ( (lv_validate_46_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_persistent_47_0= 'persistent' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_aggregateRoot_48_0= 'aggregateRoot' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_49= 'belongsTo' ( (otherlv_50= '@' )? ( (otherlv_51= RULE_ID ) ) ) ) ) ) ) )*
                    {
                    // InternalContextMappingDSL.g:10538:7: ( ({...}? => ( ({...}? => ( ( (lv_cache_17_0= 'cache' ) ) | (this_NOT_18= RULE_NOT otherlv_19= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_20_0= 'gap' ) ) | ( (lv_noGapClass_21_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_22_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_23= 'hint' otherlv_24= '=' ( (lv_hint_25_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_26= 'databaseTable' otherlv_27= '=' ( (lv_databaseTable_28_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'discriminatorValue' otherlv_30= '=' ( (lv_discriminatorValue_31_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'discriminatorColumn' otherlv_33= '=' ( (lv_discriminatorColumn_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'discriminatorType' otherlv_36= '=' ( (lv_discriminatorType_37_0= ruleDiscriminatorType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'discriminatorLength' otherlv_39= '=' ( (lv_discriminatorLength_40_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'inheritanceType' otherlv_42= '=' ( (lv_inheritanceType_43_0= ruleInheritanceType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_44= 'validate' otherlv_45= '=' ( (lv_validate_46_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_persistent_47_0= 'persistent' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_aggregateRoot_48_0= 'aggregateRoot' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_49= 'belongsTo' ( (otherlv_50= '@' )? ( (otherlv_51= RULE_ID ) ) ) ) ) ) ) )*
                    loop263:
                    do {
                        int alt263=15;
                        alt263 = dfa263.predict(input);
                        switch (alt263) {
                    	case 1 :
                    	    // InternalContextMappingDSL.g:10539:5: ({...}? => ( ({...}? => ( ( (lv_cache_17_0= 'cache' ) ) | (this_NOT_18= RULE_NOT otherlv_19= 'cache' ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:10539:5: ({...}? => ( ({...}? => ( ( (lv_cache_17_0= 'cache' ) ) | (this_NOT_18= RULE_NOT otherlv_19= 'cache' ) ) ) ) )
                    	    // InternalContextMappingDSL.g:10540:6: {...}? => ( ({...}? => ( ( (lv_cache_17_0= 'cache' ) ) | (this_NOT_18= RULE_NOT otherlv_19= 'cache' ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getCommandEventAccess().getUnorderedGroup_7_2(), 0) ) {
                    	        throw new FailedPredicateException(input, "ruleCommandEvent", "getUnorderedGroupHelper().canSelect(grammarAccess.getCommandEventAccess().getUnorderedGroup_7_2(), 0)");
                    	    }
                    	    // InternalContextMappingDSL.g:10540:112: ( ({...}? => ( ( (lv_cache_17_0= 'cache' ) ) | (this_NOT_18= RULE_NOT otherlv_19= 'cache' ) ) ) )
                    	    // InternalContextMappingDSL.g:10541:7: ({...}? => ( ( (lv_cache_17_0= 'cache' ) ) | (this_NOT_18= RULE_NOT otherlv_19= 'cache' ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getCommandEventAccess().getUnorderedGroup_7_2(), 0);
                    	    						
                    	    // InternalContextMappingDSL.g:10544:10: ({...}? => ( ( (lv_cache_17_0= 'cache' ) ) | (this_NOT_18= RULE_NOT otherlv_19= 'cache' ) ) )
                    	    // InternalContextMappingDSL.g:10544:11: {...}? => ( ( (lv_cache_17_0= 'cache' ) ) | (this_NOT_18= RULE_NOT otherlv_19= 'cache' ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleCommandEvent", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:10544:20: ( ( (lv_cache_17_0= 'cache' ) ) | (this_NOT_18= RULE_NOT otherlv_19= 'cache' ) )
                    	    int alt260=2;
                    	    int LA260_0 = input.LA(1);

                    	    if ( (LA260_0==93) ) {
                    	        alt260=1;
                    	    }
                    	    else if ( (LA260_0==RULE_NOT) ) {
                    	        alt260=2;
                    	    }
                    	    else {
                    	        NoViableAltException nvae =
                    	            new NoViableAltException("", 260, 0, input);

                    	        throw nvae;
                    	    }
                    	    switch (alt260) {
                    	        case 1 :
                    	            // InternalContextMappingDSL.g:10544:21: ( (lv_cache_17_0= 'cache' ) )
                    	            {
                    	            // InternalContextMappingDSL.g:10544:21: ( (lv_cache_17_0= 'cache' ) )
                    	            // InternalContextMappingDSL.g:10545:11: (lv_cache_17_0= 'cache' )
                    	            {
                    	            // InternalContextMappingDSL.g:10545:11: (lv_cache_17_0= 'cache' )
                    	            // InternalContextMappingDSL.g:10546:12: lv_cache_17_0= 'cache'
                    	            {
                    	            lv_cache_17_0=(Token)match(input,93,FOLLOW_142); 

                    	            												newLeafNode(lv_cache_17_0, grammarAccess.getCommandEventAccess().getCacheCacheKeyword_7_2_0_0_0());
                    	            											

                    	            												if (current==null) {
                    	            													current = createModelElement(grammarAccess.getCommandEventRule());
                    	            												}
                    	            												setWithLastConsumed(current, "cache", true, "cache");
                    	            											

                    	            }


                    	            }


                    	            }
                    	            break;
                    	        case 2 :
                    	            // InternalContextMappingDSL.g:10559:10: (this_NOT_18= RULE_NOT otherlv_19= 'cache' )
                    	            {
                    	            // InternalContextMappingDSL.g:10559:10: (this_NOT_18= RULE_NOT otherlv_19= 'cache' )
                    	            // InternalContextMappingDSL.g:10560:11: this_NOT_18= RULE_NOT otherlv_19= 'cache'
                    	            {
                    	            this_NOT_18=(Token)match(input,RULE_NOT,FOLLOW_129); 

                    	            											newLeafNode(this_NOT_18, grammarAccess.getCommandEventAccess().getNOTTerminalRuleCall_7_2_0_1_0());
                    	            										
                    	            otherlv_19=(Token)match(input,93,FOLLOW_142); 

                    	            											newLeafNode(otherlv_19, grammarAccess.getCommandEventAccess().getCacheKeyword_7_2_0_1_1());
                    	            										

                    	            }


                    	            }
                    	            break;

                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getCommandEventAccess().getUnorderedGroup_7_2());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 2 :
                    	    // InternalContextMappingDSL.g:10575:5: ({...}? => ( ({...}? => ( ( (lv_gapClass_20_0= 'gap' ) ) | ( (lv_noGapClass_21_0= 'nogap' ) ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:10575:5: ({...}? => ( ({...}? => ( ( (lv_gapClass_20_0= 'gap' ) ) | ( (lv_noGapClass_21_0= 'nogap' ) ) ) ) ) )
                    	    // InternalContextMappingDSL.g:10576:6: {...}? => ( ({...}? => ( ( (lv_gapClass_20_0= 'gap' ) ) | ( (lv_noGapClass_21_0= 'nogap' ) ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getCommandEventAccess().getUnorderedGroup_7_2(), 1) ) {
                    	        throw new FailedPredicateException(input, "ruleCommandEvent", "getUnorderedGroupHelper().canSelect(grammarAccess.getCommandEventAccess().getUnorderedGroup_7_2(), 1)");
                    	    }
                    	    // InternalContextMappingDSL.g:10576:112: ( ({...}? => ( ( (lv_gapClass_20_0= 'gap' ) ) | ( (lv_noGapClass_21_0= 'nogap' ) ) ) ) )
                    	    // InternalContextMappingDSL.g:10577:7: ({...}? => ( ( (lv_gapClass_20_0= 'gap' ) ) | ( (lv_noGapClass_21_0= 'nogap' ) ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getCommandEventAccess().getUnorderedGroup_7_2(), 1);
                    	    						
                    	    // InternalContextMappingDSL.g:10580:10: ({...}? => ( ( (lv_gapClass_20_0= 'gap' ) ) | ( (lv_noGapClass_21_0= 'nogap' ) ) ) )
                    	    // InternalContextMappingDSL.g:10580:11: {...}? => ( ( (lv_gapClass_20_0= 'gap' ) ) | ( (lv_noGapClass_21_0= 'nogap' ) ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleCommandEvent", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:10580:20: ( ( (lv_gapClass_20_0= 'gap' ) ) | ( (lv_noGapClass_21_0= 'nogap' ) ) )
                    	    int alt261=2;
                    	    int LA261_0 = input.LA(1);

                    	    if ( (LA261_0==71) ) {
                    	        alt261=1;
                    	    }
                    	    else if ( (LA261_0==72) ) {
                    	        alt261=2;
                    	    }
                    	    else {
                    	        NoViableAltException nvae =
                    	            new NoViableAltException("", 261, 0, input);

                    	        throw nvae;
                    	    }
                    	    switch (alt261) {
                    	        case 1 :
                    	            // InternalContextMappingDSL.g:10580:21: ( (lv_gapClass_20_0= 'gap' ) )
                    	            {
                    	            // InternalContextMappingDSL.g:10580:21: ( (lv_gapClass_20_0= 'gap' ) )
                    	            // InternalContextMappingDSL.g:10581:11: (lv_gapClass_20_0= 'gap' )
                    	            {
                    	            // InternalContextMappingDSL.g:10581:11: (lv_gapClass_20_0= 'gap' )
                    	            // InternalContextMappingDSL.g:10582:12: lv_gapClass_20_0= 'gap'
                    	            {
                    	            lv_gapClass_20_0=(Token)match(input,71,FOLLOW_142); 

                    	            												newLeafNode(lv_gapClass_20_0, grammarAccess.getCommandEventAccess().getGapClassGapKeyword_7_2_1_0_0());
                    	            											

                    	            												if (current==null) {
                    	            													current = createModelElement(grammarAccess.getCommandEventRule());
                    	            												}
                    	            												setWithLastConsumed(current, "gapClass", true, "gap");
                    	            											

                    	            }


                    	            }


                    	            }
                    	            break;
                    	        case 2 :
                    	            // InternalContextMappingDSL.g:10595:10: ( (lv_noGapClass_21_0= 'nogap' ) )
                    	            {
                    	            // InternalContextMappingDSL.g:10595:10: ( (lv_noGapClass_21_0= 'nogap' ) )
                    	            // InternalContextMappingDSL.g:10596:11: (lv_noGapClass_21_0= 'nogap' )
                    	            {
                    	            // InternalContextMappingDSL.g:10596:11: (lv_noGapClass_21_0= 'nogap' )
                    	            // InternalContextMappingDSL.g:10597:12: lv_noGapClass_21_0= 'nogap'
                    	            {
                    	            lv_noGapClass_21_0=(Token)match(input,72,FOLLOW_142); 

                    	            												newLeafNode(lv_noGapClass_21_0, grammarAccess.getCommandEventAccess().getNoGapClassNogapKeyword_7_2_1_1_0());
                    	            											

                    	            												if (current==null) {
                    	            													current = createModelElement(grammarAccess.getCommandEventRule());
                    	            												}
                    	            												setWithLastConsumed(current, "noGapClass", true, "nogap");
                    	            											

                    	            }


                    	            }


                    	            }
                    	            break;

                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getCommandEventAccess().getUnorderedGroup_7_2());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 3 :
                    	    // InternalContextMappingDSL.g:10615:5: ({...}? => ( ({...}? => ( (lv_scaffold_22_0= 'scaffold' ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:10615:5: ({...}? => ( ({...}? => ( (lv_scaffold_22_0= 'scaffold' ) ) ) ) )
                    	    // InternalContextMappingDSL.g:10616:6: {...}? => ( ({...}? => ( (lv_scaffold_22_0= 'scaffold' ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getCommandEventAccess().getUnorderedGroup_7_2(), 2) ) {
                    	        throw new FailedPredicateException(input, "ruleCommandEvent", "getUnorderedGroupHelper().canSelect(grammarAccess.getCommandEventAccess().getUnorderedGroup_7_2(), 2)");
                    	    }
                    	    // InternalContextMappingDSL.g:10616:112: ( ({...}? => ( (lv_scaffold_22_0= 'scaffold' ) ) ) )
                    	    // InternalContextMappingDSL.g:10617:7: ({...}? => ( (lv_scaffold_22_0= 'scaffold' ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getCommandEventAccess().getUnorderedGroup_7_2(), 2);
                    	    						
                    	    // InternalContextMappingDSL.g:10620:10: ({...}? => ( (lv_scaffold_22_0= 'scaffold' ) ) )
                    	    // InternalContextMappingDSL.g:10620:11: {...}? => ( (lv_scaffold_22_0= 'scaffold' ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleCommandEvent", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:10620:20: ( (lv_scaffold_22_0= 'scaffold' ) )
                    	    // InternalContextMappingDSL.g:10620:21: (lv_scaffold_22_0= 'scaffold' )
                    	    {
                    	    // InternalContextMappingDSL.g:10620:21: (lv_scaffold_22_0= 'scaffold' )
                    	    // InternalContextMappingDSL.g:10621:11: lv_scaffold_22_0= 'scaffold'
                    	    {
                    	    lv_scaffold_22_0=(Token)match(input,75,FOLLOW_142); 

                    	    											newLeafNode(lv_scaffold_22_0, grammarAccess.getCommandEventAccess().getScaffoldScaffoldKeyword_7_2_2_0());
                    	    										

                    	    											if (current==null) {
                    	    												current = createModelElement(grammarAccess.getCommandEventRule());
                    	    											}
                    	    											setWithLastConsumed(current, "scaffold", true, "scaffold");
                    	    										

                    	    }


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getCommandEventAccess().getUnorderedGroup_7_2());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 4 :
                    	    // InternalContextMappingDSL.g:10638:5: ({...}? => ( ({...}? => (otherlv_23= 'hint' otherlv_24= '=' ( (lv_hint_25_0= RULE_STRING ) ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:10638:5: ({...}? => ( ({...}? => (otherlv_23= 'hint' otherlv_24= '=' ( (lv_hint_25_0= RULE_STRING ) ) ) ) ) )
                    	    // InternalContextMappingDSL.g:10639:6: {...}? => ( ({...}? => (otherlv_23= 'hint' otherlv_24= '=' ( (lv_hint_25_0= RULE_STRING ) ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getCommandEventAccess().getUnorderedGroup_7_2(), 3) ) {
                    	        throw new FailedPredicateException(input, "ruleCommandEvent", "getUnorderedGroupHelper().canSelect(grammarAccess.getCommandEventAccess().getUnorderedGroup_7_2(), 3)");
                    	    }
                    	    // InternalContextMappingDSL.g:10639:112: ( ({...}? => (otherlv_23= 'hint' otherlv_24= '=' ( (lv_hint_25_0= RULE_STRING ) ) ) ) )
                    	    // InternalContextMappingDSL.g:10640:7: ({...}? => (otherlv_23= 'hint' otherlv_24= '=' ( (lv_hint_25_0= RULE_STRING ) ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getCommandEventAccess().getUnorderedGroup_7_2(), 3);
                    	    						
                    	    // InternalContextMappingDSL.g:10643:10: ({...}? => (otherlv_23= 'hint' otherlv_24= '=' ( (lv_hint_25_0= RULE_STRING ) ) ) )
                    	    // InternalContextMappingDSL.g:10643:11: {...}? => (otherlv_23= 'hint' otherlv_24= '=' ( (lv_hint_25_0= RULE_STRING ) ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleCommandEvent", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:10643:20: (otherlv_23= 'hint' otherlv_24= '=' ( (lv_hint_25_0= RULE_STRING ) ) )
                    	    // InternalContextMappingDSL.g:10643:21: otherlv_23= 'hint' otherlv_24= '=' ( (lv_hint_25_0= RULE_STRING ) )
                    	    {
                    	    otherlv_23=(Token)match(input,67,FOLLOW_81); 

                    	    										newLeafNode(otherlv_23, grammarAccess.getCommandEventAccess().getHintKeyword_7_2_3_0());
                    	    									
                    	    otherlv_24=(Token)match(input,21,FOLLOW_4); 

                    	    										newLeafNode(otherlv_24, grammarAccess.getCommandEventAccess().getEqualsSignKeyword_7_2_3_1());
                    	    									
                    	    // InternalContextMappingDSL.g:10651:10: ( (lv_hint_25_0= RULE_STRING ) )
                    	    // InternalContextMappingDSL.g:10652:11: (lv_hint_25_0= RULE_STRING )
                    	    {
                    	    // InternalContextMappingDSL.g:10652:11: (lv_hint_25_0= RULE_STRING )
                    	    // InternalContextMappingDSL.g:10653:12: lv_hint_25_0= RULE_STRING
                    	    {
                    	    lv_hint_25_0=(Token)match(input,RULE_STRING,FOLLOW_142); 

                    	    												newLeafNode(lv_hint_25_0, grammarAccess.getCommandEventAccess().getHintSTRINGTerminalRuleCall_7_2_3_2_0());
                    	    											

                    	    												if (current==null) {
                    	    													current = createModelElement(grammarAccess.getCommandEventRule());
                    	    												}
                    	    												setWithLastConsumed(
                    	    													current,
                    	    													"hint",
                    	    													lv_hint_25_0,
                    	    													"org.eclipse.xtext.common.Terminals.STRING");
                    	    											

                    	    }


                    	    }


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getCommandEventAccess().getUnorderedGroup_7_2());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 5 :
                    	    // InternalContextMappingDSL.g:10675:5: ({...}? => ( ({...}? => (otherlv_26= 'databaseTable' otherlv_27= '=' ( (lv_databaseTable_28_0= RULE_STRING ) ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:10675:5: ({...}? => ( ({...}? => (otherlv_26= 'databaseTable' otherlv_27= '=' ( (lv_databaseTable_28_0= RULE_STRING ) ) ) ) ) )
                    	    // InternalContextMappingDSL.g:10676:6: {...}? => ( ({...}? => (otherlv_26= 'databaseTable' otherlv_27= '=' ( (lv_databaseTable_28_0= RULE_STRING ) ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getCommandEventAccess().getUnorderedGroup_7_2(), 4) ) {
                    	        throw new FailedPredicateException(input, "ruleCommandEvent", "getUnorderedGroupHelper().canSelect(grammarAccess.getCommandEventAccess().getUnorderedGroup_7_2(), 4)");
                    	    }
                    	    // InternalContextMappingDSL.g:10676:112: ( ({...}? => (otherlv_26= 'databaseTable' otherlv_27= '=' ( (lv_databaseTable_28_0= RULE_STRING ) ) ) ) )
                    	    // InternalContextMappingDSL.g:10677:7: ({...}? => (otherlv_26= 'databaseTable' otherlv_27= '=' ( (lv_databaseTable_28_0= RULE_STRING ) ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getCommandEventAccess().getUnorderedGroup_7_2(), 4);
                    	    						
                    	    // InternalContextMappingDSL.g:10680:10: ({...}? => (otherlv_26= 'databaseTable' otherlv_27= '=' ( (lv_databaseTable_28_0= RULE_STRING ) ) ) )
                    	    // InternalContextMappingDSL.g:10680:11: {...}? => (otherlv_26= 'databaseTable' otherlv_27= '=' ( (lv_databaseTable_28_0= RULE_STRING ) ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleCommandEvent", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:10680:20: (otherlv_26= 'databaseTable' otherlv_27= '=' ( (lv_databaseTable_28_0= RULE_STRING ) ) )
                    	    // InternalContextMappingDSL.g:10680:21: otherlv_26= 'databaseTable' otherlv_27= '=' ( (lv_databaseTable_28_0= RULE_STRING ) )
                    	    {
                    	    otherlv_26=(Token)match(input,112,FOLLOW_81); 

                    	    										newLeafNode(otherlv_26, grammarAccess.getCommandEventAccess().getDatabaseTableKeyword_7_2_4_0());
                    	    									
                    	    otherlv_27=(Token)match(input,21,FOLLOW_4); 

                    	    										newLeafNode(otherlv_27, grammarAccess.getCommandEventAccess().getEqualsSignKeyword_7_2_4_1());
                    	    									
                    	    // InternalContextMappingDSL.g:10688:10: ( (lv_databaseTable_28_0= RULE_STRING ) )
                    	    // InternalContextMappingDSL.g:10689:11: (lv_databaseTable_28_0= RULE_STRING )
                    	    {
                    	    // InternalContextMappingDSL.g:10689:11: (lv_databaseTable_28_0= RULE_STRING )
                    	    // InternalContextMappingDSL.g:10690:12: lv_databaseTable_28_0= RULE_STRING
                    	    {
                    	    lv_databaseTable_28_0=(Token)match(input,RULE_STRING,FOLLOW_142); 

                    	    												newLeafNode(lv_databaseTable_28_0, grammarAccess.getCommandEventAccess().getDatabaseTableSTRINGTerminalRuleCall_7_2_4_2_0());
                    	    											

                    	    												if (current==null) {
                    	    													current = createModelElement(grammarAccess.getCommandEventRule());
                    	    												}
                    	    												setWithLastConsumed(
                    	    													current,
                    	    													"databaseTable",
                    	    													lv_databaseTable_28_0,
                    	    													"org.eclipse.xtext.common.Terminals.STRING");
                    	    											

                    	    }


                    	    }


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getCommandEventAccess().getUnorderedGroup_7_2());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 6 :
                    	    // InternalContextMappingDSL.g:10712:5: ({...}? => ( ({...}? => (otherlv_29= 'discriminatorValue' otherlv_30= '=' ( (lv_discriminatorValue_31_0= RULE_STRING ) ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:10712:5: ({...}? => ( ({...}? => (otherlv_29= 'discriminatorValue' otherlv_30= '=' ( (lv_discriminatorValue_31_0= RULE_STRING ) ) ) ) ) )
                    	    // InternalContextMappingDSL.g:10713:6: {...}? => ( ({...}? => (otherlv_29= 'discriminatorValue' otherlv_30= '=' ( (lv_discriminatorValue_31_0= RULE_STRING ) ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getCommandEventAccess().getUnorderedGroup_7_2(), 5) ) {
                    	        throw new FailedPredicateException(input, "ruleCommandEvent", "getUnorderedGroupHelper().canSelect(grammarAccess.getCommandEventAccess().getUnorderedGroup_7_2(), 5)");
                    	    }
                    	    // InternalContextMappingDSL.g:10713:112: ( ({...}? => (otherlv_29= 'discriminatorValue' otherlv_30= '=' ( (lv_discriminatorValue_31_0= RULE_STRING ) ) ) ) )
                    	    // InternalContextMappingDSL.g:10714:7: ({...}? => (otherlv_29= 'discriminatorValue' otherlv_30= '=' ( (lv_discriminatorValue_31_0= RULE_STRING ) ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getCommandEventAccess().getUnorderedGroup_7_2(), 5);
                    	    						
                    	    // InternalContextMappingDSL.g:10717:10: ({...}? => (otherlv_29= 'discriminatorValue' otherlv_30= '=' ( (lv_discriminatorValue_31_0= RULE_STRING ) ) ) )
                    	    // InternalContextMappingDSL.g:10717:11: {...}? => (otherlv_29= 'discriminatorValue' otherlv_30= '=' ( (lv_discriminatorValue_31_0= RULE_STRING ) ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleCommandEvent", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:10717:20: (otherlv_29= 'discriminatorValue' otherlv_30= '=' ( (lv_discriminatorValue_31_0= RULE_STRING ) ) )
                    	    // InternalContextMappingDSL.g:10717:21: otherlv_29= 'discriminatorValue' otherlv_30= '=' ( (lv_discriminatorValue_31_0= RULE_STRING ) )
                    	    {
                    	    otherlv_29=(Token)match(input,113,FOLLOW_81); 

                    	    										newLeafNode(otherlv_29, grammarAccess.getCommandEventAccess().getDiscriminatorValueKeyword_7_2_5_0());
                    	    									
                    	    otherlv_30=(Token)match(input,21,FOLLOW_4); 

                    	    										newLeafNode(otherlv_30, grammarAccess.getCommandEventAccess().getEqualsSignKeyword_7_2_5_1());
                    	    									
                    	    // InternalContextMappingDSL.g:10725:10: ( (lv_discriminatorValue_31_0= RULE_STRING ) )
                    	    // InternalContextMappingDSL.g:10726:11: (lv_discriminatorValue_31_0= RULE_STRING )
                    	    {
                    	    // InternalContextMappingDSL.g:10726:11: (lv_discriminatorValue_31_0= RULE_STRING )
                    	    // InternalContextMappingDSL.g:10727:12: lv_discriminatorValue_31_0= RULE_STRING
                    	    {
                    	    lv_discriminatorValue_31_0=(Token)match(input,RULE_STRING,FOLLOW_142); 

                    	    												newLeafNode(lv_discriminatorValue_31_0, grammarAccess.getCommandEventAccess().getDiscriminatorValueSTRINGTerminalRuleCall_7_2_5_2_0());
                    	    											

                    	    												if (current==null) {
                    	    													current = createModelElement(grammarAccess.getCommandEventRule());
                    	    												}
                    	    												setWithLastConsumed(
                    	    													current,
                    	    													"discriminatorValue",
                    	    													lv_discriminatorValue_31_0,
                    	    													"org.eclipse.xtext.common.Terminals.STRING");
                    	    											

                    	    }


                    	    }


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getCommandEventAccess().getUnorderedGroup_7_2());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 7 :
                    	    // InternalContextMappingDSL.g:10749:5: ({...}? => ( ({...}? => (otherlv_32= 'discriminatorColumn' otherlv_33= '=' ( (lv_discriminatorColumn_34_0= RULE_STRING ) ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:10749:5: ({...}? => ( ({...}? => (otherlv_32= 'discriminatorColumn' otherlv_33= '=' ( (lv_discriminatorColumn_34_0= RULE_STRING ) ) ) ) ) )
                    	    // InternalContextMappingDSL.g:10750:6: {...}? => ( ({...}? => (otherlv_32= 'discriminatorColumn' otherlv_33= '=' ( (lv_discriminatorColumn_34_0= RULE_STRING ) ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getCommandEventAccess().getUnorderedGroup_7_2(), 6) ) {
                    	        throw new FailedPredicateException(input, "ruleCommandEvent", "getUnorderedGroupHelper().canSelect(grammarAccess.getCommandEventAccess().getUnorderedGroup_7_2(), 6)");
                    	    }
                    	    // InternalContextMappingDSL.g:10750:112: ( ({...}? => (otherlv_32= 'discriminatorColumn' otherlv_33= '=' ( (lv_discriminatorColumn_34_0= RULE_STRING ) ) ) ) )
                    	    // InternalContextMappingDSL.g:10751:7: ({...}? => (otherlv_32= 'discriminatorColumn' otherlv_33= '=' ( (lv_discriminatorColumn_34_0= RULE_STRING ) ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getCommandEventAccess().getUnorderedGroup_7_2(), 6);
                    	    						
                    	    // InternalContextMappingDSL.g:10754:10: ({...}? => (otherlv_32= 'discriminatorColumn' otherlv_33= '=' ( (lv_discriminatorColumn_34_0= RULE_STRING ) ) ) )
                    	    // InternalContextMappingDSL.g:10754:11: {...}? => (otherlv_32= 'discriminatorColumn' otherlv_33= '=' ( (lv_discriminatorColumn_34_0= RULE_STRING ) ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleCommandEvent", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:10754:20: (otherlv_32= 'discriminatorColumn' otherlv_33= '=' ( (lv_discriminatorColumn_34_0= RULE_STRING ) ) )
                    	    // InternalContextMappingDSL.g:10754:21: otherlv_32= 'discriminatorColumn' otherlv_33= '=' ( (lv_discriminatorColumn_34_0= RULE_STRING ) )
                    	    {
                    	    otherlv_32=(Token)match(input,114,FOLLOW_81); 

                    	    										newLeafNode(otherlv_32, grammarAccess.getCommandEventAccess().getDiscriminatorColumnKeyword_7_2_6_0());
                    	    									
                    	    otherlv_33=(Token)match(input,21,FOLLOW_4); 

                    	    										newLeafNode(otherlv_33, grammarAccess.getCommandEventAccess().getEqualsSignKeyword_7_2_6_1());
                    	    									
                    	    // InternalContextMappingDSL.g:10762:10: ( (lv_discriminatorColumn_34_0= RULE_STRING ) )
                    	    // InternalContextMappingDSL.g:10763:11: (lv_discriminatorColumn_34_0= RULE_STRING )
                    	    {
                    	    // InternalContextMappingDSL.g:10763:11: (lv_discriminatorColumn_34_0= RULE_STRING )
                    	    // InternalContextMappingDSL.g:10764:12: lv_discriminatorColumn_34_0= RULE_STRING
                    	    {
                    	    lv_discriminatorColumn_34_0=(Token)match(input,RULE_STRING,FOLLOW_142); 

                    	    												newLeafNode(lv_discriminatorColumn_34_0, grammarAccess.getCommandEventAccess().getDiscriminatorColumnSTRINGTerminalRuleCall_7_2_6_2_0());
                    	    											

                    	    												if (current==null) {
                    	    													current = createModelElement(grammarAccess.getCommandEventRule());
                    	    												}
                    	    												setWithLastConsumed(
                    	    													current,
                    	    													"discriminatorColumn",
                    	    													lv_discriminatorColumn_34_0,
                    	    													"org.eclipse.xtext.common.Terminals.STRING");
                    	    											

                    	    }


                    	    }


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getCommandEventAccess().getUnorderedGroup_7_2());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 8 :
                    	    // InternalContextMappingDSL.g:10786:5: ({...}? => ( ({...}? => (otherlv_35= 'discriminatorType' otherlv_36= '=' ( (lv_discriminatorType_37_0= ruleDiscriminatorType ) ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:10786:5: ({...}? => ( ({...}? => (otherlv_35= 'discriminatorType' otherlv_36= '=' ( (lv_discriminatorType_37_0= ruleDiscriminatorType ) ) ) ) ) )
                    	    // InternalContextMappingDSL.g:10787:6: {...}? => ( ({...}? => (otherlv_35= 'discriminatorType' otherlv_36= '=' ( (lv_discriminatorType_37_0= ruleDiscriminatorType ) ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getCommandEventAccess().getUnorderedGroup_7_2(), 7) ) {
                    	        throw new FailedPredicateException(input, "ruleCommandEvent", "getUnorderedGroupHelper().canSelect(grammarAccess.getCommandEventAccess().getUnorderedGroup_7_2(), 7)");
                    	    }
                    	    // InternalContextMappingDSL.g:10787:112: ( ({...}? => (otherlv_35= 'discriminatorType' otherlv_36= '=' ( (lv_discriminatorType_37_0= ruleDiscriminatorType ) ) ) ) )
                    	    // InternalContextMappingDSL.g:10788:7: ({...}? => (otherlv_35= 'discriminatorType' otherlv_36= '=' ( (lv_discriminatorType_37_0= ruleDiscriminatorType ) ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getCommandEventAccess().getUnorderedGroup_7_2(), 7);
                    	    						
                    	    // InternalContextMappingDSL.g:10791:10: ({...}? => (otherlv_35= 'discriminatorType' otherlv_36= '=' ( (lv_discriminatorType_37_0= ruleDiscriminatorType ) ) ) )
                    	    // InternalContextMappingDSL.g:10791:11: {...}? => (otherlv_35= 'discriminatorType' otherlv_36= '=' ( (lv_discriminatorType_37_0= ruleDiscriminatorType ) ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleCommandEvent", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:10791:20: (otherlv_35= 'discriminatorType' otherlv_36= '=' ( (lv_discriminatorType_37_0= ruleDiscriminatorType ) ) )
                    	    // InternalContextMappingDSL.g:10791:21: otherlv_35= 'discriminatorType' otherlv_36= '=' ( (lv_discriminatorType_37_0= ruleDiscriminatorType ) )
                    	    {
                    	    otherlv_35=(Token)match(input,115,FOLLOW_81); 

                    	    										newLeafNode(otherlv_35, grammarAccess.getCommandEventAccess().getDiscriminatorTypeKeyword_7_2_7_0());
                    	    									
                    	    otherlv_36=(Token)match(input,21,FOLLOW_130); 

                    	    										newLeafNode(otherlv_36, grammarAccess.getCommandEventAccess().getEqualsSignKeyword_7_2_7_1());
                    	    									
                    	    // InternalContextMappingDSL.g:10799:10: ( (lv_discriminatorType_37_0= ruleDiscriminatorType ) )
                    	    // InternalContextMappingDSL.g:10800:11: (lv_discriminatorType_37_0= ruleDiscriminatorType )
                    	    {
                    	    // InternalContextMappingDSL.g:10800:11: (lv_discriminatorType_37_0= ruleDiscriminatorType )
                    	    // InternalContextMappingDSL.g:10801:12: lv_discriminatorType_37_0= ruleDiscriminatorType
                    	    {

                    	    												newCompositeNode(grammarAccess.getCommandEventAccess().getDiscriminatorTypeDiscriminatorTypeEnumRuleCall_7_2_7_2_0());
                    	    											
                    	    pushFollow(FOLLOW_142);
                    	    lv_discriminatorType_37_0=ruleDiscriminatorType();

                    	    state._fsp--;


                    	    												if (current==null) {
                    	    													current = createModelElementForParent(grammarAccess.getCommandEventRule());
                    	    												}
                    	    												set(
                    	    													current,
                    	    													"discriminatorType",
                    	    													lv_discriminatorType_37_0,
                    	    													"org.contextmapper.tactic.dsl.TacticDDDLanguage.DiscriminatorType");
                    	    												afterParserOrEnumRuleCall();
                    	    											

                    	    }


                    	    }


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getCommandEventAccess().getUnorderedGroup_7_2());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 9 :
                    	    // InternalContextMappingDSL.g:10824:5: ({...}? => ( ({...}? => (otherlv_38= 'discriminatorLength' otherlv_39= '=' ( (lv_discriminatorLength_40_0= RULE_STRING ) ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:10824:5: ({...}? => ( ({...}? => (otherlv_38= 'discriminatorLength' otherlv_39= '=' ( (lv_discriminatorLength_40_0= RULE_STRING ) ) ) ) ) )
                    	    // InternalContextMappingDSL.g:10825:6: {...}? => ( ({...}? => (otherlv_38= 'discriminatorLength' otherlv_39= '=' ( (lv_discriminatorLength_40_0= RULE_STRING ) ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getCommandEventAccess().getUnorderedGroup_7_2(), 8) ) {
                    	        throw new FailedPredicateException(input, "ruleCommandEvent", "getUnorderedGroupHelper().canSelect(grammarAccess.getCommandEventAccess().getUnorderedGroup_7_2(), 8)");
                    	    }
                    	    // InternalContextMappingDSL.g:10825:112: ( ({...}? => (otherlv_38= 'discriminatorLength' otherlv_39= '=' ( (lv_discriminatorLength_40_0= RULE_STRING ) ) ) ) )
                    	    // InternalContextMappingDSL.g:10826:7: ({...}? => (otherlv_38= 'discriminatorLength' otherlv_39= '=' ( (lv_discriminatorLength_40_0= RULE_STRING ) ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getCommandEventAccess().getUnorderedGroup_7_2(), 8);
                    	    						
                    	    // InternalContextMappingDSL.g:10829:10: ({...}? => (otherlv_38= 'discriminatorLength' otherlv_39= '=' ( (lv_discriminatorLength_40_0= RULE_STRING ) ) ) )
                    	    // InternalContextMappingDSL.g:10829:11: {...}? => (otherlv_38= 'discriminatorLength' otherlv_39= '=' ( (lv_discriminatorLength_40_0= RULE_STRING ) ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleCommandEvent", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:10829:20: (otherlv_38= 'discriminatorLength' otherlv_39= '=' ( (lv_discriminatorLength_40_0= RULE_STRING ) ) )
                    	    // InternalContextMappingDSL.g:10829:21: otherlv_38= 'discriminatorLength' otherlv_39= '=' ( (lv_discriminatorLength_40_0= RULE_STRING ) )
                    	    {
                    	    otherlv_38=(Token)match(input,116,FOLLOW_81); 

                    	    										newLeafNode(otherlv_38, grammarAccess.getCommandEventAccess().getDiscriminatorLengthKeyword_7_2_8_0());
                    	    									
                    	    otherlv_39=(Token)match(input,21,FOLLOW_4); 

                    	    										newLeafNode(otherlv_39, grammarAccess.getCommandEventAccess().getEqualsSignKeyword_7_2_8_1());
                    	    									
                    	    // InternalContextMappingDSL.g:10837:10: ( (lv_discriminatorLength_40_0= RULE_STRING ) )
                    	    // InternalContextMappingDSL.g:10838:11: (lv_discriminatorLength_40_0= RULE_STRING )
                    	    {
                    	    // InternalContextMappingDSL.g:10838:11: (lv_discriminatorLength_40_0= RULE_STRING )
                    	    // InternalContextMappingDSL.g:10839:12: lv_discriminatorLength_40_0= RULE_STRING
                    	    {
                    	    lv_discriminatorLength_40_0=(Token)match(input,RULE_STRING,FOLLOW_142); 

                    	    												newLeafNode(lv_discriminatorLength_40_0, grammarAccess.getCommandEventAccess().getDiscriminatorLengthSTRINGTerminalRuleCall_7_2_8_2_0());
                    	    											

                    	    												if (current==null) {
                    	    													current = createModelElement(grammarAccess.getCommandEventRule());
                    	    												}
                    	    												setWithLastConsumed(
                    	    													current,
                    	    													"discriminatorLength",
                    	    													lv_discriminatorLength_40_0,
                    	    													"org.eclipse.xtext.common.Terminals.STRING");
                    	    											

                    	    }


                    	    }


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getCommandEventAccess().getUnorderedGroup_7_2());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 10 :
                    	    // InternalContextMappingDSL.g:10861:5: ({...}? => ( ({...}? => (otherlv_41= 'inheritanceType' otherlv_42= '=' ( (lv_inheritanceType_43_0= ruleInheritanceType ) ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:10861:5: ({...}? => ( ({...}? => (otherlv_41= 'inheritanceType' otherlv_42= '=' ( (lv_inheritanceType_43_0= ruleInheritanceType ) ) ) ) ) )
                    	    // InternalContextMappingDSL.g:10862:6: {...}? => ( ({...}? => (otherlv_41= 'inheritanceType' otherlv_42= '=' ( (lv_inheritanceType_43_0= ruleInheritanceType ) ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getCommandEventAccess().getUnorderedGroup_7_2(), 9) ) {
                    	        throw new FailedPredicateException(input, "ruleCommandEvent", "getUnorderedGroupHelper().canSelect(grammarAccess.getCommandEventAccess().getUnorderedGroup_7_2(), 9)");
                    	    }
                    	    // InternalContextMappingDSL.g:10862:112: ( ({...}? => (otherlv_41= 'inheritanceType' otherlv_42= '=' ( (lv_inheritanceType_43_0= ruleInheritanceType ) ) ) ) )
                    	    // InternalContextMappingDSL.g:10863:7: ({...}? => (otherlv_41= 'inheritanceType' otherlv_42= '=' ( (lv_inheritanceType_43_0= ruleInheritanceType ) ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getCommandEventAccess().getUnorderedGroup_7_2(), 9);
                    	    						
                    	    // InternalContextMappingDSL.g:10866:10: ({...}? => (otherlv_41= 'inheritanceType' otherlv_42= '=' ( (lv_inheritanceType_43_0= ruleInheritanceType ) ) ) )
                    	    // InternalContextMappingDSL.g:10866:11: {...}? => (otherlv_41= 'inheritanceType' otherlv_42= '=' ( (lv_inheritanceType_43_0= ruleInheritanceType ) ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleCommandEvent", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:10866:20: (otherlv_41= 'inheritanceType' otherlv_42= '=' ( (lv_inheritanceType_43_0= ruleInheritanceType ) ) )
                    	    // InternalContextMappingDSL.g:10866:21: otherlv_41= 'inheritanceType' otherlv_42= '=' ( (lv_inheritanceType_43_0= ruleInheritanceType ) )
                    	    {
                    	    otherlv_41=(Token)match(input,117,FOLLOW_81); 

                    	    										newLeafNode(otherlv_41, grammarAccess.getCommandEventAccess().getInheritanceTypeKeyword_7_2_9_0());
                    	    									
                    	    otherlv_42=(Token)match(input,21,FOLLOW_131); 

                    	    										newLeafNode(otherlv_42, grammarAccess.getCommandEventAccess().getEqualsSignKeyword_7_2_9_1());
                    	    									
                    	    // InternalContextMappingDSL.g:10874:10: ( (lv_inheritanceType_43_0= ruleInheritanceType ) )
                    	    // InternalContextMappingDSL.g:10875:11: (lv_inheritanceType_43_0= ruleInheritanceType )
                    	    {
                    	    // InternalContextMappingDSL.g:10875:11: (lv_inheritanceType_43_0= ruleInheritanceType )
                    	    // InternalContextMappingDSL.g:10876:12: lv_inheritanceType_43_0= ruleInheritanceType
                    	    {

                    	    												newCompositeNode(grammarAccess.getCommandEventAccess().getInheritanceTypeInheritanceTypeEnumRuleCall_7_2_9_2_0());
                    	    											
                    	    pushFollow(FOLLOW_142);
                    	    lv_inheritanceType_43_0=ruleInheritanceType();

                    	    state._fsp--;


                    	    												if (current==null) {
                    	    													current = createModelElementForParent(grammarAccess.getCommandEventRule());
                    	    												}
                    	    												set(
                    	    													current,
                    	    													"inheritanceType",
                    	    													lv_inheritanceType_43_0,
                    	    													"org.contextmapper.tactic.dsl.TacticDDDLanguage.InheritanceType");
                    	    												afterParserOrEnumRuleCall();
                    	    											

                    	    }


                    	    }


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getCommandEventAccess().getUnorderedGroup_7_2());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 11 :
                    	    // InternalContextMappingDSL.g:10899:5: ({...}? => ( ({...}? => (otherlv_44= 'validate' otherlv_45= '=' ( (lv_validate_46_0= RULE_STRING ) ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:10899:5: ({...}? => ( ({...}? => (otherlv_44= 'validate' otherlv_45= '=' ( (lv_validate_46_0= RULE_STRING ) ) ) ) ) )
                    	    // InternalContextMappingDSL.g:10900:6: {...}? => ( ({...}? => (otherlv_44= 'validate' otherlv_45= '=' ( (lv_validate_46_0= RULE_STRING ) ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getCommandEventAccess().getUnorderedGroup_7_2(), 10) ) {
                    	        throw new FailedPredicateException(input, "ruleCommandEvent", "getUnorderedGroupHelper().canSelect(grammarAccess.getCommandEventAccess().getUnorderedGroup_7_2(), 10)");
                    	    }
                    	    // InternalContextMappingDSL.g:10900:113: ( ({...}? => (otherlv_44= 'validate' otherlv_45= '=' ( (lv_validate_46_0= RULE_STRING ) ) ) ) )
                    	    // InternalContextMappingDSL.g:10901:7: ({...}? => (otherlv_44= 'validate' otherlv_45= '=' ( (lv_validate_46_0= RULE_STRING ) ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getCommandEventAccess().getUnorderedGroup_7_2(), 10);
                    	    						
                    	    // InternalContextMappingDSL.g:10904:10: ({...}? => (otherlv_44= 'validate' otherlv_45= '=' ( (lv_validate_46_0= RULE_STRING ) ) ) )
                    	    // InternalContextMappingDSL.g:10904:11: {...}? => (otherlv_44= 'validate' otherlv_45= '=' ( (lv_validate_46_0= RULE_STRING ) ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleCommandEvent", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:10904:20: (otherlv_44= 'validate' otherlv_45= '=' ( (lv_validate_46_0= RULE_STRING ) ) )
                    	    // InternalContextMappingDSL.g:10904:21: otherlv_44= 'validate' otherlv_45= '=' ( (lv_validate_46_0= RULE_STRING ) )
                    	    {
                    	    otherlv_44=(Token)match(input,118,FOLLOW_81); 

                    	    										newLeafNode(otherlv_44, grammarAccess.getCommandEventAccess().getValidateKeyword_7_2_10_0());
                    	    									
                    	    otherlv_45=(Token)match(input,21,FOLLOW_4); 

                    	    										newLeafNode(otherlv_45, grammarAccess.getCommandEventAccess().getEqualsSignKeyword_7_2_10_1());
                    	    									
                    	    // InternalContextMappingDSL.g:10912:10: ( (lv_validate_46_0= RULE_STRING ) )
                    	    // InternalContextMappingDSL.g:10913:11: (lv_validate_46_0= RULE_STRING )
                    	    {
                    	    // InternalContextMappingDSL.g:10913:11: (lv_validate_46_0= RULE_STRING )
                    	    // InternalContextMappingDSL.g:10914:12: lv_validate_46_0= RULE_STRING
                    	    {
                    	    lv_validate_46_0=(Token)match(input,RULE_STRING,FOLLOW_142); 

                    	    												newLeafNode(lv_validate_46_0, grammarAccess.getCommandEventAccess().getValidateSTRINGTerminalRuleCall_7_2_10_2_0());
                    	    											

                    	    												if (current==null) {
                    	    													current = createModelElement(grammarAccess.getCommandEventRule());
                    	    												}
                    	    												setWithLastConsumed(
                    	    													current,
                    	    													"validate",
                    	    													lv_validate_46_0,
                    	    													"org.eclipse.xtext.common.Terminals.STRING");
                    	    											

                    	    }


                    	    }


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getCommandEventAccess().getUnorderedGroup_7_2());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 12 :
                    	    // InternalContextMappingDSL.g:10936:5: ({...}? => ( ({...}? => ( (lv_persistent_47_0= 'persistent' ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:10936:5: ({...}? => ( ({...}? => ( (lv_persistent_47_0= 'persistent' ) ) ) ) )
                    	    // InternalContextMappingDSL.g:10937:6: {...}? => ( ({...}? => ( (lv_persistent_47_0= 'persistent' ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getCommandEventAccess().getUnorderedGroup_7_2(), 11) ) {
                    	        throw new FailedPredicateException(input, "ruleCommandEvent", "getUnorderedGroupHelper().canSelect(grammarAccess.getCommandEventAccess().getUnorderedGroup_7_2(), 11)");
                    	    }
                    	    // InternalContextMappingDSL.g:10937:113: ( ({...}? => ( (lv_persistent_47_0= 'persistent' ) ) ) )
                    	    // InternalContextMappingDSL.g:10938:7: ({...}? => ( (lv_persistent_47_0= 'persistent' ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getCommandEventAccess().getUnorderedGroup_7_2(), 11);
                    	    						
                    	    // InternalContextMappingDSL.g:10941:10: ({...}? => ( (lv_persistent_47_0= 'persistent' ) ) )
                    	    // InternalContextMappingDSL.g:10941:11: {...}? => ( (lv_persistent_47_0= 'persistent' ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleCommandEvent", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:10941:20: ( (lv_persistent_47_0= 'persistent' ) )
                    	    // InternalContextMappingDSL.g:10941:21: (lv_persistent_47_0= 'persistent' )
                    	    {
                    	    // InternalContextMappingDSL.g:10941:21: (lv_persistent_47_0= 'persistent' )
                    	    // InternalContextMappingDSL.g:10942:11: lv_persistent_47_0= 'persistent'
                    	    {
                    	    lv_persistent_47_0=(Token)match(input,123,FOLLOW_142); 

                    	    											newLeafNode(lv_persistent_47_0, grammarAccess.getCommandEventAccess().getPersistentPersistentKeyword_7_2_11_0());
                    	    										

                    	    											if (current==null) {
                    	    												current = createModelElement(grammarAccess.getCommandEventRule());
                    	    											}
                    	    											setWithLastConsumed(current, "persistent", true, "persistent");
                    	    										

                    	    }


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getCommandEventAccess().getUnorderedGroup_7_2());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 13 :
                    	    // InternalContextMappingDSL.g:10959:5: ({...}? => ( ({...}? => ( (lv_aggregateRoot_48_0= 'aggregateRoot' ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:10959:5: ({...}? => ( ({...}? => ( (lv_aggregateRoot_48_0= 'aggregateRoot' ) ) ) ) )
                    	    // InternalContextMappingDSL.g:10960:6: {...}? => ( ({...}? => ( (lv_aggregateRoot_48_0= 'aggregateRoot' ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getCommandEventAccess().getUnorderedGroup_7_2(), 12) ) {
                    	        throw new FailedPredicateException(input, "ruleCommandEvent", "getUnorderedGroupHelper().canSelect(grammarAccess.getCommandEventAccess().getUnorderedGroup_7_2(), 12)");
                    	    }
                    	    // InternalContextMappingDSL.g:10960:113: ( ({...}? => ( (lv_aggregateRoot_48_0= 'aggregateRoot' ) ) ) )
                    	    // InternalContextMappingDSL.g:10961:7: ({...}? => ( (lv_aggregateRoot_48_0= 'aggregateRoot' ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getCommandEventAccess().getUnorderedGroup_7_2(), 12);
                    	    						
                    	    // InternalContextMappingDSL.g:10964:10: ({...}? => ( (lv_aggregateRoot_48_0= 'aggregateRoot' ) ) )
                    	    // InternalContextMappingDSL.g:10964:11: {...}? => ( (lv_aggregateRoot_48_0= 'aggregateRoot' ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleCommandEvent", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:10964:20: ( (lv_aggregateRoot_48_0= 'aggregateRoot' ) )
                    	    // InternalContextMappingDSL.g:10964:21: (lv_aggregateRoot_48_0= 'aggregateRoot' )
                    	    {
                    	    // InternalContextMappingDSL.g:10964:21: (lv_aggregateRoot_48_0= 'aggregateRoot' )
                    	    // InternalContextMappingDSL.g:10965:11: lv_aggregateRoot_48_0= 'aggregateRoot'
                    	    {
                    	    lv_aggregateRoot_48_0=(Token)match(input,119,FOLLOW_142); 

                    	    											newLeafNode(lv_aggregateRoot_48_0, grammarAccess.getCommandEventAccess().getAggregateRootAggregateRootKeyword_7_2_12_0());
                    	    										

                    	    											if (current==null) {
                    	    												current = createModelElement(grammarAccess.getCommandEventRule());
                    	    											}
                    	    											setWithLastConsumed(current, "aggregateRoot", true, "aggregateRoot");
                    	    										

                    	    }


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getCommandEventAccess().getUnorderedGroup_7_2());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 14 :
                    	    // InternalContextMappingDSL.g:10982:5: ({...}? => ( ({...}? => (otherlv_49= 'belongsTo' ( (otherlv_50= '@' )? ( (otherlv_51= RULE_ID ) ) ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:10982:5: ({...}? => ( ({...}? => (otherlv_49= 'belongsTo' ( (otherlv_50= '@' )? ( (otherlv_51= RULE_ID ) ) ) ) ) ) )
                    	    // InternalContextMappingDSL.g:10983:6: {...}? => ( ({...}? => (otherlv_49= 'belongsTo' ( (otherlv_50= '@' )? ( (otherlv_51= RULE_ID ) ) ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getCommandEventAccess().getUnorderedGroup_7_2(), 13) ) {
                    	        throw new FailedPredicateException(input, "ruleCommandEvent", "getUnorderedGroupHelper().canSelect(grammarAccess.getCommandEventAccess().getUnorderedGroup_7_2(), 13)");
                    	    }
                    	    // InternalContextMappingDSL.g:10983:113: ( ({...}? => (otherlv_49= 'belongsTo' ( (otherlv_50= '@' )? ( (otherlv_51= RULE_ID ) ) ) ) ) )
                    	    // InternalContextMappingDSL.g:10984:7: ({...}? => (otherlv_49= 'belongsTo' ( (otherlv_50= '@' )? ( (otherlv_51= RULE_ID ) ) ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getCommandEventAccess().getUnorderedGroup_7_2(), 13);
                    	    						
                    	    // InternalContextMappingDSL.g:10987:10: ({...}? => (otherlv_49= 'belongsTo' ( (otherlv_50= '@' )? ( (otherlv_51= RULE_ID ) ) ) ) )
                    	    // InternalContextMappingDSL.g:10987:11: {...}? => (otherlv_49= 'belongsTo' ( (otherlv_50= '@' )? ( (otherlv_51= RULE_ID ) ) ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleCommandEvent", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:10987:20: (otherlv_49= 'belongsTo' ( (otherlv_50= '@' )? ( (otherlv_51= RULE_ID ) ) ) )
                    	    // InternalContextMappingDSL.g:10987:21: otherlv_49= 'belongsTo' ( (otherlv_50= '@' )? ( (otherlv_51= RULE_ID ) ) )
                    	    {
                    	    otherlv_49=(Token)match(input,120,FOLLOW_96); 

                    	    										newLeafNode(otherlv_49, grammarAccess.getCommandEventAccess().getBelongsToKeyword_7_2_13_0());
                    	    									
                    	    // InternalContextMappingDSL.g:10991:10: ( (otherlv_50= '@' )? ( (otherlv_51= RULE_ID ) ) )
                    	    // InternalContextMappingDSL.g:10992:11: (otherlv_50= '@' )? ( (otherlv_51= RULE_ID ) )
                    	    {
                    	    // InternalContextMappingDSL.g:10992:11: (otherlv_50= '@' )?
                    	    int alt262=2;
                    	    int LA262_0 = input.LA(1);

                    	    if ( (LA262_0==79) ) {
                    	        alt262=1;
                    	    }
                    	    switch (alt262) {
                    	        case 1 :
                    	            // InternalContextMappingDSL.g:10993:12: otherlv_50= '@'
                    	            {
                    	            otherlv_50=(Token)match(input,79,FOLLOW_10); 

                    	            												newLeafNode(otherlv_50, grammarAccess.getCommandEventAccess().getCommercialAtKeyword_7_2_13_1_0());
                    	            											

                    	            }
                    	            break;

                    	    }

                    	    // InternalContextMappingDSL.g:10998:11: ( (otherlv_51= RULE_ID ) )
                    	    // InternalContextMappingDSL.g:10999:12: (otherlv_51= RULE_ID )
                    	    {
                    	    // InternalContextMappingDSL.g:10999:12: (otherlv_51= RULE_ID )
                    	    // InternalContextMappingDSL.g:11000:13: otherlv_51= RULE_ID
                    	    {

                    	    													if (current==null) {
                    	    														current = createModelElement(grammarAccess.getCommandEventRule());
                    	    													}
                    	    												
                    	    otherlv_51=(Token)match(input,RULE_ID,FOLLOW_142); 

                    	    													newLeafNode(otherlv_51, grammarAccess.getCommandEventAccess().getBelongsToDomainObjectCrossReference_7_2_13_1_1_0());
                    	    												

                    	    }


                    	    }


                    	    }


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getCommandEventAccess().getUnorderedGroup_7_2());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop263;
                        }
                    } while (true);


                    }


                    }

                     
                    					  getUnorderedGroupHelper().leave(grammarAccess.getCommandEventAccess().getUnorderedGroup_7_2());
                    					

                    }

                    // InternalContextMappingDSL.g:11025:4: ( ( (lv_attributes_52_0= ruleAttribute ) ) | ( (lv_references_53_0= ruleReference ) ) | ( (lv_operations_54_0= ruleDomainObjectOperation ) ) )*
                    loop264:
                    do {
                        int alt264=4;
                        switch ( input.LA(1) ) {
                        case RULE_STRING:
                            {
                            switch ( input.LA(2) ) {
                            case 127:
                            case 128:
                                {
                                alt264=3;
                                }
                                break;
                            case RULE_REF:
                                {
                                alt264=2;
                                }
                                break;
                            case RULE_ID:
                            case 109:
                            case 170:
                            case 171:
                            case 172:
                            case 173:
                            case 174:
                            case 175:
                            case 176:
                            case 177:
                            case 178:
                            case 179:
                            case 180:
                            case 181:
                            case 182:
                            case 183:
                            case 184:
                            case 185:
                            case 186:
                            case 187:
                            case 188:
                            case 189:
                            case 190:
                            case 191:
                            case 218:
                            case 228:
                            case 229:
                            case 230:
                            case 231:
                            case 232:
                            case 233:
                            case 234:
                                {
                                alt264=1;
                                }
                                break;

                            }

                            }
                            break;
                        case RULE_ID:
                        case 109:
                        case 170:
                        case 171:
                        case 172:
                        case 173:
                        case 174:
                        case 175:
                        case 176:
                        case 177:
                        case 178:
                        case 179:
                        case 180:
                        case 181:
                        case 182:
                        case 183:
                        case 184:
                        case 185:
                        case 186:
                        case 187:
                        case 188:
                        case 189:
                        case 190:
                        case 191:
                        case 218:
                        case 228:
                        case 229:
                        case 230:
                        case 231:
                        case 232:
                        case 233:
                        case 234:
                            {
                            alt264=1;
                            }
                            break;
                        case RULE_REF:
                            {
                            alt264=2;
                            }
                            break;
                        case 127:
                        case 128:
                            {
                            alt264=3;
                            }
                            break;

                        }

                        switch (alt264) {
                    	case 1 :
                    	    // InternalContextMappingDSL.g:11026:5: ( (lv_attributes_52_0= ruleAttribute ) )
                    	    {
                    	    // InternalContextMappingDSL.g:11026:5: ( (lv_attributes_52_0= ruleAttribute ) )
                    	    // InternalContextMappingDSL.g:11027:6: (lv_attributes_52_0= ruleAttribute )
                    	    {
                    	    // InternalContextMappingDSL.g:11027:6: (lv_attributes_52_0= ruleAttribute )
                    	    // InternalContextMappingDSL.g:11028:7: lv_attributes_52_0= ruleAttribute
                    	    {

                    	    							newCompositeNode(grammarAccess.getCommandEventAccess().getAttributesAttributeParserRuleCall_7_3_0_0());
                    	    						
                    	    pushFollow(FOLLOW_132);
                    	    lv_attributes_52_0=ruleAttribute();

                    	    state._fsp--;


                    	    							if (current==null) {
                    	    								current = createModelElementForParent(grammarAccess.getCommandEventRule());
                    	    							}
                    	    							add(
                    	    								current,
                    	    								"attributes",
                    	    								lv_attributes_52_0,
                    	    								"org.contextmapper.tactic.dsl.TacticDDDLanguage.Attribute");
                    	    							afterParserOrEnumRuleCall();
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 2 :
                    	    // InternalContextMappingDSL.g:11046:5: ( (lv_references_53_0= ruleReference ) )
                    	    {
                    	    // InternalContextMappingDSL.g:11046:5: ( (lv_references_53_0= ruleReference ) )
                    	    // InternalContextMappingDSL.g:11047:6: (lv_references_53_0= ruleReference )
                    	    {
                    	    // InternalContextMappingDSL.g:11047:6: (lv_references_53_0= ruleReference )
                    	    // InternalContextMappingDSL.g:11048:7: lv_references_53_0= ruleReference
                    	    {

                    	    							newCompositeNode(grammarAccess.getCommandEventAccess().getReferencesReferenceParserRuleCall_7_3_1_0());
                    	    						
                    	    pushFollow(FOLLOW_132);
                    	    lv_references_53_0=ruleReference();

                    	    state._fsp--;


                    	    							if (current==null) {
                    	    								current = createModelElementForParent(grammarAccess.getCommandEventRule());
                    	    							}
                    	    							add(
                    	    								current,
                    	    								"references",
                    	    								lv_references_53_0,
                    	    								"org.contextmapper.tactic.dsl.TacticDDDLanguage.Reference");
                    	    							afterParserOrEnumRuleCall();
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 3 :
                    	    // InternalContextMappingDSL.g:11066:5: ( (lv_operations_54_0= ruleDomainObjectOperation ) )
                    	    {
                    	    // InternalContextMappingDSL.g:11066:5: ( (lv_operations_54_0= ruleDomainObjectOperation ) )
                    	    // InternalContextMappingDSL.g:11067:6: (lv_operations_54_0= ruleDomainObjectOperation )
                    	    {
                    	    // InternalContextMappingDSL.g:11067:6: (lv_operations_54_0= ruleDomainObjectOperation )
                    	    // InternalContextMappingDSL.g:11068:7: lv_operations_54_0= ruleDomainObjectOperation
                    	    {

                    	    							newCompositeNode(grammarAccess.getCommandEventAccess().getOperationsDomainObjectOperationParserRuleCall_7_3_2_0());
                    	    						
                    	    pushFollow(FOLLOW_132);
                    	    lv_operations_54_0=ruleDomainObjectOperation();

                    	    state._fsp--;


                    	    							if (current==null) {
                    	    								current = createModelElementForParent(grammarAccess.getCommandEventRule());
                    	    							}
                    	    							add(
                    	    								current,
                    	    								"operations",
                    	    								lv_operations_54_0,
                    	    								"org.contextmapper.tactic.dsl.TacticDDDLanguage.DomainObjectOperation");
                    	    							afterParserOrEnumRuleCall();
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop264;
                        }
                    } while (true);

                    // InternalContextMappingDSL.g:11086:4: ( (lv_repository_55_0= ruleRepository ) )?
                    int alt265=2;
                    int LA265_0 = input.LA(1);

                    if ( (LA265_0==RULE_STRING||LA265_0==166) ) {
                        alt265=1;
                    }
                    switch (alt265) {
                        case 1 :
                            // InternalContextMappingDSL.g:11087:5: (lv_repository_55_0= ruleRepository )
                            {
                            // InternalContextMappingDSL.g:11087:5: (lv_repository_55_0= ruleRepository )
                            // InternalContextMappingDSL.g:11088:6: lv_repository_55_0= ruleRepository
                            {

                            						newCompositeNode(grammarAccess.getCommandEventAccess().getRepositoryRepositoryParserRuleCall_7_4_0());
                            					
                            pushFollow(FOLLOW_35);
                            lv_repository_55_0=ruleRepository();

                            state._fsp--;


                            						if (current==null) {
                            							current = createModelElementForParent(grammarAccess.getCommandEventRule());
                            						}
                            						set(
                            							current,
                            							"repository",
                            							lv_repository_55_0,
                            							"org.contextmapper.tactic.dsl.TacticDDDLanguage.Repository");
                            						afterParserOrEnumRuleCall();
                            					

                            }


                            }
                            break;

                    }

                    otherlv_56=(Token)match(input,RULE_CLOSE,FOLLOW_2); 

                    				newLeafNode(otherlv_56, grammarAccess.getCommandEventAccess().getRightCurlyBracketKeyword_7_5());
                    			

                    }
                    break;

            }


            }


            }


            	leaveRule();

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleCommandEvent"


    // $ANTLR start "entryRuleTrait"
    // InternalContextMappingDSL.g:11114:1: entryRuleTrait returns [EObject current=null] : iv_ruleTrait= ruleTrait EOF ;
    public final EObject entryRuleTrait() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleTrait = null;


        try {
            // InternalContextMappingDSL.g:11114:46: (iv_ruleTrait= ruleTrait EOF )
            // InternalContextMappingDSL.g:11115:2: iv_ruleTrait= ruleTrait EOF
            {
             newCompositeNode(grammarAccess.getTraitRule()); 
            pushFollow(FOLLOW_1);
            iv_ruleTrait=ruleTrait();

            state._fsp--;

             current =iv_ruleTrait; 
            match(input,EOF,FOLLOW_2); 

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleTrait"


    // $ANTLR start "ruleTrait"
    // InternalContextMappingDSL.g:11121:1: ruleTrait returns [EObject current=null] : ( ( (lv_doc_0_0= RULE_STRING ) )? otherlv_1= 'Trait' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= '{' (otherlv_4= 'package' otherlv_5= '=' ( (lv_package_6_0= ruleJavaIdentifier ) ) )? (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) )? ( ( (lv_attributes_10_0= ruleAttribute ) ) | ( (lv_references_11_0= ruleReference ) ) | ( (lv_operations_12_0= ruleDomainObjectOperation ) ) )* otherlv_13= '}' )? ) ;
    public final EObject ruleTrait() throws RecognitionException {
        EObject current = null;

        Token lv_doc_0_0=null;
        Token otherlv_1=null;
        Token lv_name_2_0=null;
        Token otherlv_3=null;
        Token otherlv_4=null;
        Token otherlv_5=null;
        Token otherlv_7=null;
        Token otherlv_8=null;
        Token lv_hint_9_0=null;
        Token otherlv_13=null;
        AntlrDatatypeRuleToken lv_package_6_0 = null;

        EObject lv_attributes_10_0 = null;

        EObject lv_references_11_0 = null;

        EObject lv_operations_12_0 = null;



        	enterRule();

        try {
            // InternalContextMappingDSL.g:11127:2: ( ( ( (lv_doc_0_0= RULE_STRING ) )? otherlv_1= 'Trait' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= '{' (otherlv_4= 'package' otherlv_5= '=' ( (lv_package_6_0= ruleJavaIdentifier ) ) )? (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) )? ( ( (lv_attributes_10_0= ruleAttribute ) ) | ( (lv_references_11_0= ruleReference ) ) | ( (lv_operations_12_0= ruleDomainObjectOperation ) ) )* otherlv_13= '}' )? ) )
            // InternalContextMappingDSL.g:11128:2: ( ( (lv_doc_0_0= RULE_STRING ) )? otherlv_1= 'Trait' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= '{' (otherlv_4= 'package' otherlv_5= '=' ( (lv_package_6_0= ruleJavaIdentifier ) ) )? (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) )? ( ( (lv_attributes_10_0= ruleAttribute ) ) | ( (lv_references_11_0= ruleReference ) ) | ( (lv_operations_12_0= ruleDomainObjectOperation ) ) )* otherlv_13= '}' )? )
            {
            // InternalContextMappingDSL.g:11128:2: ( ( (lv_doc_0_0= RULE_STRING ) )? otherlv_1= 'Trait' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= '{' (otherlv_4= 'package' otherlv_5= '=' ( (lv_package_6_0= ruleJavaIdentifier ) ) )? (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) )? ( ( (lv_attributes_10_0= ruleAttribute ) ) | ( (lv_references_11_0= ruleReference ) ) | ( (lv_operations_12_0= ruleDomainObjectOperation ) ) )* otherlv_13= '}' )? )
            // InternalContextMappingDSL.g:11129:3: ( (lv_doc_0_0= RULE_STRING ) )? otherlv_1= 'Trait' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= '{' (otherlv_4= 'package' otherlv_5= '=' ( (lv_package_6_0= ruleJavaIdentifier ) ) )? (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) )? ( ( (lv_attributes_10_0= ruleAttribute ) ) | ( (lv_references_11_0= ruleReference ) ) | ( (lv_operations_12_0= ruleDomainObjectOperation ) ) )* otherlv_13= '}' )?
            {
            // InternalContextMappingDSL.g:11129:3: ( (lv_doc_0_0= RULE_STRING ) )?
            int alt267=2;
            int LA267_0 = input.LA(1);

            if ( (LA267_0==RULE_STRING) ) {
                alt267=1;
            }
            switch (alt267) {
                case 1 :
                    // InternalContextMappingDSL.g:11130:4: (lv_doc_0_0= RULE_STRING )
                    {
                    // InternalContextMappingDSL.g:11130:4: (lv_doc_0_0= RULE_STRING )
                    // InternalContextMappingDSL.g:11131:5: lv_doc_0_0= RULE_STRING
                    {
                    lv_doc_0_0=(Token)match(input,RULE_STRING,FOLLOW_146); 

                    					newLeafNode(lv_doc_0_0, grammarAccess.getTraitAccess().getDocSTRINGTerminalRuleCall_0_0());
                    				

                    					if (current==null) {
                    						current = createModelElement(grammarAccess.getTraitRule());
                    					}
                    					setWithLastConsumed(
                    						current,
                    						"doc",
                    						lv_doc_0_0,
                    						"org.eclipse.xtext.common.Terminals.STRING");
                    				

                    }


                    }
                    break;

            }

            otherlv_1=(Token)match(input,126,FOLLOW_10); 

            			newLeafNode(otherlv_1, grammarAccess.getTraitAccess().getTraitKeyword_1());
            		
            // InternalContextMappingDSL.g:11151:3: ( (lv_name_2_0= RULE_ID ) )
            // InternalContextMappingDSL.g:11152:4: (lv_name_2_0= RULE_ID )
            {
            // InternalContextMappingDSL.g:11152:4: (lv_name_2_0= RULE_ID )
            // InternalContextMappingDSL.g:11153:5: lv_name_2_0= RULE_ID
            {
            lv_name_2_0=(Token)match(input,RULE_ID,FOLLOW_23); 

            					newLeafNode(lv_name_2_0, grammarAccess.getTraitAccess().getNameIDTerminalRuleCall_2_0());
            				

            					if (current==null) {
            						current = createModelElement(grammarAccess.getTraitRule());
            					}
            					setWithLastConsumed(
            						current,
            						"name",
            						lv_name_2_0,
            						"org.eclipse.xtext.common.Terminals.ID");
            				

            }


            }

            // InternalContextMappingDSL.g:11169:3: (otherlv_3= '{' (otherlv_4= 'package' otherlv_5= '=' ( (lv_package_6_0= ruleJavaIdentifier ) ) )? (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) )? ( ( (lv_attributes_10_0= ruleAttribute ) ) | ( (lv_references_11_0= ruleReference ) ) | ( (lv_operations_12_0= ruleDomainObjectOperation ) ) )* otherlv_13= '}' )?
            int alt271=2;
            int LA271_0 = input.LA(1);

            if ( (LA271_0==RULE_OPEN) ) {
                alt271=1;
            }
            switch (alt271) {
                case 1 :
                    // InternalContextMappingDSL.g:11170:4: otherlv_3= '{' (otherlv_4= 'package' otherlv_5= '=' ( (lv_package_6_0= ruleJavaIdentifier ) ) )? (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) )? ( ( (lv_attributes_10_0= ruleAttribute ) ) | ( (lv_references_11_0= ruleReference ) ) | ( (lv_operations_12_0= ruleDomainObjectOperation ) ) )* otherlv_13= '}'
                    {
                    otherlv_3=(Token)match(input,RULE_OPEN,FOLLOW_147); 

                    				newLeafNode(otherlv_3, grammarAccess.getTraitAccess().getLeftCurlyBracketKeyword_3_0());
                    			
                    // InternalContextMappingDSL.g:11174:4: (otherlv_4= 'package' otherlv_5= '=' ( (lv_package_6_0= ruleJavaIdentifier ) ) )?
                    int alt268=2;
                    int LA268_0 = input.LA(1);

                    if ( (LA268_0==109) ) {
                        int LA268_1 = input.LA(2);

                        if ( (LA268_1==21) ) {
                            alt268=1;
                        }
                    }
                    switch (alt268) {
                        case 1 :
                            // InternalContextMappingDSL.g:11175:5: otherlv_4= 'package' otherlv_5= '=' ( (lv_package_6_0= ruleJavaIdentifier ) )
                            {
                            otherlv_4=(Token)match(input,109,FOLLOW_81); 

                            					newLeafNode(otherlv_4, grammarAccess.getTraitAccess().getPackageKeyword_3_1_0());
                            				
                            otherlv_5=(Token)match(input,21,FOLLOW_10); 

                            					newLeafNode(otherlv_5, grammarAccess.getTraitAccess().getEqualsSignKeyword_3_1_1());
                            				
                            // InternalContextMappingDSL.g:11183:5: ( (lv_package_6_0= ruleJavaIdentifier ) )
                            // InternalContextMappingDSL.g:11184:6: (lv_package_6_0= ruleJavaIdentifier )
                            {
                            // InternalContextMappingDSL.g:11184:6: (lv_package_6_0= ruleJavaIdentifier )
                            // InternalContextMappingDSL.g:11185:7: lv_package_6_0= ruleJavaIdentifier
                            {

                            							newCompositeNode(grammarAccess.getTraitAccess().getPackageJavaIdentifierParserRuleCall_3_1_2_0());
                            						
                            pushFollow(FOLLOW_147);
                            lv_package_6_0=ruleJavaIdentifier();

                            state._fsp--;


                            							if (current==null) {
                            								current = createModelElementForParent(grammarAccess.getTraitRule());
                            							}
                            							set(
                            								current,
                            								"package",
                            								lv_package_6_0,
                            								"org.contextmapper.tactic.dsl.TacticDDDLanguage.JavaIdentifier");
                            							afterParserOrEnumRuleCall();
                            						

                            }


                            }


                            }
                            break;

                    }

                    // InternalContextMappingDSL.g:11203:4: (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) )?
                    int alt269=2;
                    int LA269_0 = input.LA(1);

                    if ( (LA269_0==67) ) {
                        alt269=1;
                    }
                    switch (alt269) {
                        case 1 :
                            // InternalContextMappingDSL.g:11204:5: otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) )
                            {
                            otherlv_7=(Token)match(input,67,FOLLOW_81); 

                            					newLeafNode(otherlv_7, grammarAccess.getTraitAccess().getHintKeyword_3_2_0());
                            				
                            otherlv_8=(Token)match(input,21,FOLLOW_4); 

                            					newLeafNode(otherlv_8, grammarAccess.getTraitAccess().getEqualsSignKeyword_3_2_1());
                            				
                            // InternalContextMappingDSL.g:11212:5: ( (lv_hint_9_0= RULE_STRING ) )
                            // InternalContextMappingDSL.g:11213:6: (lv_hint_9_0= RULE_STRING )
                            {
                            // InternalContextMappingDSL.g:11213:6: (lv_hint_9_0= RULE_STRING )
                            // InternalContextMappingDSL.g:11214:7: lv_hint_9_0= RULE_STRING
                            {
                            lv_hint_9_0=(Token)match(input,RULE_STRING,FOLLOW_148); 

                            							newLeafNode(lv_hint_9_0, grammarAccess.getTraitAccess().getHintSTRINGTerminalRuleCall_3_2_2_0());
                            						

                            							if (current==null) {
                            								current = createModelElement(grammarAccess.getTraitRule());
                            							}
                            							setWithLastConsumed(
                            								current,
                            								"hint",
                            								lv_hint_9_0,
                            								"org.eclipse.xtext.common.Terminals.STRING");
                            						

                            }


                            }


                            }
                            break;

                    }

                    // InternalContextMappingDSL.g:11231:4: ( ( (lv_attributes_10_0= ruleAttribute ) ) | ( (lv_references_11_0= ruleReference ) ) | ( (lv_operations_12_0= ruleDomainObjectOperation ) ) )*
                    loop270:
                    do {
                        int alt270=4;
                        switch ( input.LA(1) ) {
                        case RULE_STRING:
                            {
                            switch ( input.LA(2) ) {
                            case 127:
                            case 128:
                                {
                                alt270=3;
                                }
                                break;
                            case RULE_REF:
                                {
                                alt270=2;
                                }
                                break;
                            case RULE_ID:
                            case 109:
                            case 170:
                            case 171:
                            case 172:
                            case 173:
                            case 174:
                            case 175:
                            case 176:
                            case 177:
                            case 178:
                            case 179:
                            case 180:
                            case 181:
                            case 182:
                            case 183:
                            case 184:
                            case 185:
                            case 186:
                            case 187:
                            case 188:
                            case 189:
                            case 190:
                            case 191:
                            case 218:
                            case 228:
                            case 229:
                            case 230:
                            case 231:
                            case 232:
                            case 233:
                            case 234:
                                {
                                alt270=1;
                                }
                                break;

                            }

                            }
                            break;
                        case RULE_ID:
                        case 109:
                        case 170:
                        case 171:
                        case 172:
                        case 173:
                        case 174:
                        case 175:
                        case 176:
                        case 177:
                        case 178:
                        case 179:
                        case 180:
                        case 181:
                        case 182:
                        case 183:
                        case 184:
                        case 185:
                        case 186:
                        case 187:
                        case 188:
                        case 189:
                        case 190:
                        case 191:
                        case 218:
                        case 228:
                        case 229:
                        case 230:
                        case 231:
                        case 232:
                        case 233:
                        case 234:
                            {
                            alt270=1;
                            }
                            break;
                        case RULE_REF:
                            {
                            alt270=2;
                            }
                            break;
                        case 127:
                        case 128:
                            {
                            alt270=3;
                            }
                            break;

                        }

                        switch (alt270) {
                    	case 1 :
                    	    // InternalContextMappingDSL.g:11232:5: ( (lv_attributes_10_0= ruleAttribute ) )
                    	    {
                    	    // InternalContextMappingDSL.g:11232:5: ( (lv_attributes_10_0= ruleAttribute ) )
                    	    // InternalContextMappingDSL.g:11233:6: (lv_attributes_10_0= ruleAttribute )
                    	    {
                    	    // InternalContextMappingDSL.g:11233:6: (lv_attributes_10_0= ruleAttribute )
                    	    // InternalContextMappingDSL.g:11234:7: lv_attributes_10_0= ruleAttribute
                    	    {

                    	    							newCompositeNode(grammarAccess.getTraitAccess().getAttributesAttributeParserRuleCall_3_3_0_0());
                    	    						
                    	    pushFollow(FOLLOW_148);
                    	    lv_attributes_10_0=ruleAttribute();

                    	    state._fsp--;


                    	    							if (current==null) {
                    	    								current = createModelElementForParent(grammarAccess.getTraitRule());
                    	    							}
                    	    							add(
                    	    								current,
                    	    								"attributes",
                    	    								lv_attributes_10_0,
                    	    								"org.contextmapper.tactic.dsl.TacticDDDLanguage.Attribute");
                    	    							afterParserOrEnumRuleCall();
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 2 :
                    	    // InternalContextMappingDSL.g:11252:5: ( (lv_references_11_0= ruleReference ) )
                    	    {
                    	    // InternalContextMappingDSL.g:11252:5: ( (lv_references_11_0= ruleReference ) )
                    	    // InternalContextMappingDSL.g:11253:6: (lv_references_11_0= ruleReference )
                    	    {
                    	    // InternalContextMappingDSL.g:11253:6: (lv_references_11_0= ruleReference )
                    	    // InternalContextMappingDSL.g:11254:7: lv_references_11_0= ruleReference
                    	    {

                    	    							newCompositeNode(grammarAccess.getTraitAccess().getReferencesReferenceParserRuleCall_3_3_1_0());
                    	    						
                    	    pushFollow(FOLLOW_148);
                    	    lv_references_11_0=ruleReference();

                    	    state._fsp--;


                    	    							if (current==null) {
                    	    								current = createModelElementForParent(grammarAccess.getTraitRule());
                    	    							}
                    	    							add(
                    	    								current,
                    	    								"references",
                    	    								lv_references_11_0,
                    	    								"org.contextmapper.tactic.dsl.TacticDDDLanguage.Reference");
                    	    							afterParserOrEnumRuleCall();
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 3 :
                    	    // InternalContextMappingDSL.g:11272:5: ( (lv_operations_12_0= ruleDomainObjectOperation ) )
                    	    {
                    	    // InternalContextMappingDSL.g:11272:5: ( (lv_operations_12_0= ruleDomainObjectOperation ) )
                    	    // InternalContextMappingDSL.g:11273:6: (lv_operations_12_0= ruleDomainObjectOperation )
                    	    {
                    	    // InternalContextMappingDSL.g:11273:6: (lv_operations_12_0= ruleDomainObjectOperation )
                    	    // InternalContextMappingDSL.g:11274:7: lv_operations_12_0= ruleDomainObjectOperation
                    	    {

                    	    							newCompositeNode(grammarAccess.getTraitAccess().getOperationsDomainObjectOperationParserRuleCall_3_3_2_0());
                    	    						
                    	    pushFollow(FOLLOW_148);
                    	    lv_operations_12_0=ruleDomainObjectOperation();

                    	    state._fsp--;


                    	    							if (current==null) {
                    	    								current = createModelElementForParent(grammarAccess.getTraitRule());
                    	    							}
                    	    							add(
                    	    								current,
                    	    								"operations",
                    	    								lv_operations_12_0,
                    	    								"org.contextmapper.tactic.dsl.TacticDDDLanguage.DomainObjectOperation");
                    	    							afterParserOrEnumRuleCall();
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop270;
                        }
                    } while (true);

                    otherlv_13=(Token)match(input,RULE_CLOSE,FOLLOW_2); 

                    				newLeafNode(otherlv_13, grammarAccess.getTraitAccess().getRightCurlyBracketKeyword_3_4());
                    			

                    }
                    break;

            }


            }


            }


            	leaveRule();

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleTrait"


    // $ANTLR start "entryRuleDomainObjectOperation"
    // InternalContextMappingDSL.g:11301:1: entryRuleDomainObjectOperation returns [EObject current=null] : iv_ruleDomainObjectOperation= ruleDomainObjectOperation EOF ;
    public final EObject entryRuleDomainObjectOperation() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleDomainObjectOperation = null;


        try {
            // InternalContextMappingDSL.g:11301:62: (iv_ruleDomainObjectOperation= ruleDomainObjectOperation EOF )
            // InternalContextMappingDSL.g:11302:2: iv_ruleDomainObjectOperation= ruleDomainObjectOperation EOF
            {
             newCompositeNode(grammarAccess.getDomainObjectOperationRule()); 
            pushFollow(FOLLOW_1);
            iv_ruleDomainObjectOperation=ruleDomainObjectOperation();

            state._fsp--;

             current =iv_ruleDomainObjectOperation; 
            match(input,EOF,FOLLOW_2); 

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleDomainObjectOperation"


    // $ANTLR start "ruleDomainObjectOperation"
    // InternalContextMappingDSL.g:11308:1: ruleDomainObjectOperation returns [EObject current=null] : ( ( (lv_doc_0_0= RULE_STRING ) )? (otherlv_1= 'def' | otherlv_2= '*' ) ( (lv_abstract_3_0= 'abstract' ) )? ( (lv_visibility_4_0= ruleVisibility ) )? ( ( (lv_returnType_5_0= ruleComplexType ) ) | otherlv_6= 'void' )? ( (lv_name_7_0= RULE_ID ) ) (otherlv_8= '(' ( (lv_parameters_9_0= ruleParameter ) )? (otherlv_10= ',' ( (lv_parameters_11_0= ruleParameter ) ) )* otherlv_12= ')' )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_14= 'throws' ( (lv_throws_15_0= ruleThrowsIdentifier ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_16= 'hint' otherlv_17= '=' ( (lv_hint_18_0= RULE_STRING ) ) ) ) ) ) )* ) ) ) otherlv_19= ';' ) ;
    public final EObject ruleDomainObjectOperation() throws RecognitionException {
        EObject current = null;

        Token lv_doc_0_0=null;
        Token otherlv_1=null;
        Token otherlv_2=null;
        Token lv_abstract_3_0=null;
        Token otherlv_6=null;
        Token lv_name_7_0=null;
        Token otherlv_8=null;
        Token otherlv_10=null;
        Token otherlv_12=null;
        Token otherlv_14=null;
        Token otherlv_16=null;
        Token otherlv_17=null;
        Token lv_hint_18_0=null;
        Token otherlv_19=null;
        Enumerator lv_visibility_4_0 = null;

        EObject lv_returnType_5_0 = null;

        EObject lv_parameters_9_0 = null;

        EObject lv_parameters_11_0 = null;

        AntlrDatatypeRuleToken lv_throws_15_0 = null;



        	enterRule();

        try {
            // InternalContextMappingDSL.g:11314:2: ( ( ( (lv_doc_0_0= RULE_STRING ) )? (otherlv_1= 'def' | otherlv_2= '*' ) ( (lv_abstract_3_0= 'abstract' ) )? ( (lv_visibility_4_0= ruleVisibility ) )? ( ( (lv_returnType_5_0= ruleComplexType ) ) | otherlv_6= 'void' )? ( (lv_name_7_0= RULE_ID ) ) (otherlv_8= '(' ( (lv_parameters_9_0= ruleParameter ) )? (otherlv_10= ',' ( (lv_parameters_11_0= ruleParameter ) ) )* otherlv_12= ')' )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_14= 'throws' ( (lv_throws_15_0= ruleThrowsIdentifier ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_16= 'hint' otherlv_17= '=' ( (lv_hint_18_0= RULE_STRING ) ) ) ) ) ) )* ) ) ) otherlv_19= ';' ) )
            // InternalContextMappingDSL.g:11315:2: ( ( (lv_doc_0_0= RULE_STRING ) )? (otherlv_1= 'def' | otherlv_2= '*' ) ( (lv_abstract_3_0= 'abstract' ) )? ( (lv_visibility_4_0= ruleVisibility ) )? ( ( (lv_returnType_5_0= ruleComplexType ) ) | otherlv_6= 'void' )? ( (lv_name_7_0= RULE_ID ) ) (otherlv_8= '(' ( (lv_parameters_9_0= ruleParameter ) )? (otherlv_10= ',' ( (lv_parameters_11_0= ruleParameter ) ) )* otherlv_12= ')' )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_14= 'throws' ( (lv_throws_15_0= ruleThrowsIdentifier ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_16= 'hint' otherlv_17= '=' ( (lv_hint_18_0= RULE_STRING ) ) ) ) ) ) )* ) ) ) otherlv_19= ';' )
            {
            // InternalContextMappingDSL.g:11315:2: ( ( (lv_doc_0_0= RULE_STRING ) )? (otherlv_1= 'def' | otherlv_2= '*' ) ( (lv_abstract_3_0= 'abstract' ) )? ( (lv_visibility_4_0= ruleVisibility ) )? ( ( (lv_returnType_5_0= ruleComplexType ) ) | otherlv_6= 'void' )? ( (lv_name_7_0= RULE_ID ) ) (otherlv_8= '(' ( (lv_parameters_9_0= ruleParameter ) )? (otherlv_10= ',' ( (lv_parameters_11_0= ruleParameter ) ) )* otherlv_12= ')' )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_14= 'throws' ( (lv_throws_15_0= ruleThrowsIdentifier ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_16= 'hint' otherlv_17= '=' ( (lv_hint_18_0= RULE_STRING ) ) ) ) ) ) )* ) ) ) otherlv_19= ';' )
            // InternalContextMappingDSL.g:11316:3: ( (lv_doc_0_0= RULE_STRING ) )? (otherlv_1= 'def' | otherlv_2= '*' ) ( (lv_abstract_3_0= 'abstract' ) )? ( (lv_visibility_4_0= ruleVisibility ) )? ( ( (lv_returnType_5_0= ruleComplexType ) ) | otherlv_6= 'void' )? ( (lv_name_7_0= RULE_ID ) ) (otherlv_8= '(' ( (lv_parameters_9_0= ruleParameter ) )? (otherlv_10= ',' ( (lv_parameters_11_0= ruleParameter ) ) )* otherlv_12= ')' )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_14= 'throws' ( (lv_throws_15_0= ruleThrowsIdentifier ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_16= 'hint' otherlv_17= '=' ( (lv_hint_18_0= RULE_STRING ) ) ) ) ) ) )* ) ) ) otherlv_19= ';'
            {
            // InternalContextMappingDSL.g:11316:3: ( (lv_doc_0_0= RULE_STRING ) )?
            int alt272=2;
            int LA272_0 = input.LA(1);

            if ( (LA272_0==RULE_STRING) ) {
                alt272=1;
            }
            switch (alt272) {
                case 1 :
                    // InternalContextMappingDSL.g:11317:4: (lv_doc_0_0= RULE_STRING )
                    {
                    // InternalContextMappingDSL.g:11317:4: (lv_doc_0_0= RULE_STRING )
                    // InternalContextMappingDSL.g:11318:5: lv_doc_0_0= RULE_STRING
                    {
                    lv_doc_0_0=(Token)match(input,RULE_STRING,FOLLOW_149); 

                    					newLeafNode(lv_doc_0_0, grammarAccess.getDomainObjectOperationAccess().getDocSTRINGTerminalRuleCall_0_0());
                    				

                    					if (current==null) {
                    						current = createModelElement(grammarAccess.getDomainObjectOperationRule());
                    					}
                    					setWithLastConsumed(
                    						current,
                    						"doc",
                    						lv_doc_0_0,
                    						"org.eclipse.xtext.common.Terminals.STRING");
                    				

                    }


                    }
                    break;

            }

            // InternalContextMappingDSL.g:11334:3: (otherlv_1= 'def' | otherlv_2= '*' )
            int alt273=2;
            int LA273_0 = input.LA(1);

            if ( (LA273_0==127) ) {
                alt273=1;
            }
            else if ( (LA273_0==128) ) {
                alt273=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 273, 0, input);

                throw nvae;
            }
            switch (alt273) {
                case 1 :
                    // InternalContextMappingDSL.g:11335:4: otherlv_1= 'def'
                    {
                    otherlv_1=(Token)match(input,127,FOLLOW_150); 

                    				newLeafNode(otherlv_1, grammarAccess.getDomainObjectOperationAccess().getDefKeyword_1_0());
                    			

                    }
                    break;
                case 2 :
                    // InternalContextMappingDSL.g:11340:4: otherlv_2= '*'
                    {
                    otherlv_2=(Token)match(input,128,FOLLOW_150); 

                    				newLeafNode(otherlv_2, grammarAccess.getDomainObjectOperationAccess().getAsteriskKeyword_1_1());
                    			

                    }
                    break;

            }

            // InternalContextMappingDSL.g:11345:3: ( (lv_abstract_3_0= 'abstract' ) )?
            int alt274=2;
            int LA274_0 = input.LA(1);

            if ( (LA274_0==105) ) {
                alt274=1;
            }
            switch (alt274) {
                case 1 :
                    // InternalContextMappingDSL.g:11346:4: (lv_abstract_3_0= 'abstract' )
                    {
                    // InternalContextMappingDSL.g:11346:4: (lv_abstract_3_0= 'abstract' )
                    // InternalContextMappingDSL.g:11347:5: lv_abstract_3_0= 'abstract'
                    {
                    lv_abstract_3_0=(Token)match(input,105,FOLLOW_101); 

                    					newLeafNode(lv_abstract_3_0, grammarAccess.getDomainObjectOperationAccess().getAbstractAbstractKeyword_2_0());
                    				

                    					if (current==null) {
                    						current = createModelElement(grammarAccess.getDomainObjectOperationRule());
                    					}
                    					setWithLastConsumed(current, "abstract", true, "abstract");
                    				

                    }


                    }
                    break;

            }

            // InternalContextMappingDSL.g:11359:3: ( (lv_visibility_4_0= ruleVisibility ) )?
            int alt275=2;
            int LA275_0 = input.LA(1);

            if ( (LA275_0==109||(LA275_0>=232 && LA275_0<=234)) ) {
                alt275=1;
            }
            switch (alt275) {
                case 1 :
                    // InternalContextMappingDSL.g:11360:4: (lv_visibility_4_0= ruleVisibility )
                    {
                    // InternalContextMappingDSL.g:11360:4: (lv_visibility_4_0= ruleVisibility )
                    // InternalContextMappingDSL.g:11361:5: lv_visibility_4_0= ruleVisibility
                    {

                    					newCompositeNode(grammarAccess.getDomainObjectOperationAccess().getVisibilityVisibilityEnumRuleCall_3_0());
                    				
                    pushFollow(FOLLOW_102);
                    lv_visibility_4_0=ruleVisibility();

                    state._fsp--;


                    					if (current==null) {
                    						current = createModelElementForParent(grammarAccess.getDomainObjectOperationRule());
                    					}
                    					set(
                    						current,
                    						"visibility",
                    						lv_visibility_4_0,
                    						"org.contextmapper.tactic.dsl.TacticDDDLanguage.Visibility");
                    					afterParserOrEnumRuleCall();
                    				

                    }


                    }
                    break;

            }

            // InternalContextMappingDSL.g:11378:3: ( ( (lv_returnType_5_0= ruleComplexType ) ) | otherlv_6= 'void' )?
            int alt276=3;
            switch ( input.LA(1) ) {
                case RULE_MAP_COLLECTION_TYPE:
                case 79:
                case 170:
                case 171:
                case 172:
                case 173:
                case 174:
                case 175:
                case 176:
                case 177:
                case 178:
                case 179:
                case 180:
                case 181:
                case 182:
                case 183:
                case 184:
                case 185:
                case 186:
                case 187:
                case 188:
                case 189:
                case 190:
                case 191:
                case 218:
                case 228:
                case 229:
                case 230:
                case 231:
                    {
                    alt276=1;
                    }
                    break;
                case RULE_ID:
                    {
                    int LA276_2 = input.LA(2);

                    if ( (LA276_2==RULE_ID||LA276_2==91||LA276_2==103) ) {
                        alt276=1;
                    }
                    }
                    break;
                case 86:
                    {
                    alt276=2;
                    }
                    break;
            }

            switch (alt276) {
                case 1 :
                    // InternalContextMappingDSL.g:11379:4: ( (lv_returnType_5_0= ruleComplexType ) )
                    {
                    // InternalContextMappingDSL.g:11379:4: ( (lv_returnType_5_0= ruleComplexType ) )
                    // InternalContextMappingDSL.g:11380:5: (lv_returnType_5_0= ruleComplexType )
                    {
                    // InternalContextMappingDSL.g:11380:5: (lv_returnType_5_0= ruleComplexType )
                    // InternalContextMappingDSL.g:11381:6: lv_returnType_5_0= ruleComplexType
                    {

                    						newCompositeNode(grammarAccess.getDomainObjectOperationAccess().getReturnTypeComplexTypeParserRuleCall_4_0_0());
                    					
                    pushFollow(FOLLOW_10);
                    lv_returnType_5_0=ruleComplexType();

                    state._fsp--;


                    						if (current==null) {
                    							current = createModelElementForParent(grammarAccess.getDomainObjectOperationRule());
                    						}
                    						set(
                    							current,
                    							"returnType",
                    							lv_returnType_5_0,
                    							"org.contextmapper.tactic.dsl.TacticDDDLanguage.ComplexType");
                    						afterParserOrEnumRuleCall();
                    					

                    }


                    }


                    }
                    break;
                case 2 :
                    // InternalContextMappingDSL.g:11399:4: otherlv_6= 'void'
                    {
                    otherlv_6=(Token)match(input,86,FOLLOW_10); 

                    				newLeafNode(otherlv_6, grammarAccess.getDomainObjectOperationAccess().getVoidKeyword_4_1());
                    			

                    }
                    break;

            }

            // InternalContextMappingDSL.g:11404:3: ( (lv_name_7_0= RULE_ID ) )
            // InternalContextMappingDSL.g:11405:4: (lv_name_7_0= RULE_ID )
            {
            // InternalContextMappingDSL.g:11405:4: (lv_name_7_0= RULE_ID )
            // InternalContextMappingDSL.g:11406:5: lv_name_7_0= RULE_ID
            {
            lv_name_7_0=(Token)match(input,RULE_ID,FOLLOW_151); 

            					newLeafNode(lv_name_7_0, grammarAccess.getDomainObjectOperationAccess().getNameIDTerminalRuleCall_5_0());
            				

            					if (current==null) {
            						current = createModelElement(grammarAccess.getDomainObjectOperationRule());
            					}
            					setWithLastConsumed(
            						current,
            						"name",
            						lv_name_7_0,
            						"org.eclipse.xtext.common.Terminals.ID");
            				

            }


            }

            // InternalContextMappingDSL.g:11422:3: (otherlv_8= '(' ( (lv_parameters_9_0= ruleParameter ) )? (otherlv_10= ',' ( (lv_parameters_11_0= ruleParameter ) ) )* otherlv_12= ')' )?
            int alt279=2;
            int LA279_0 = input.LA(1);

            if ( (LA279_0==87) ) {
                alt279=1;
            }
            switch (alt279) {
                case 1 :
                    // InternalContextMappingDSL.g:11423:4: otherlv_8= '(' ( (lv_parameters_9_0= ruleParameter ) )? (otherlv_10= ',' ( (lv_parameters_11_0= ruleParameter ) ) )* otherlv_12= ')'
                    {
                    otherlv_8=(Token)match(input,87,FOLLOW_104); 

                    				newLeafNode(otherlv_8, grammarAccess.getDomainObjectOperationAccess().getLeftParenthesisKeyword_6_0());
                    			
                    // InternalContextMappingDSL.g:11427:4: ( (lv_parameters_9_0= ruleParameter ) )?
                    int alt277=2;
                    int LA277_0 = input.LA(1);

                    if ( ((LA277_0>=RULE_STRING && LA277_0<=RULE_ID)||LA277_0==RULE_MAP_COLLECTION_TYPE||LA277_0==79||(LA277_0>=170 && LA277_0<=191)||LA277_0==218||(LA277_0>=228 && LA277_0<=231)) ) {
                        alt277=1;
                    }
                    switch (alt277) {
                        case 1 :
                            // InternalContextMappingDSL.g:11428:5: (lv_parameters_9_0= ruleParameter )
                            {
                            // InternalContextMappingDSL.g:11428:5: (lv_parameters_9_0= ruleParameter )
                            // InternalContextMappingDSL.g:11429:6: lv_parameters_9_0= ruleParameter
                            {

                            						newCompositeNode(grammarAccess.getDomainObjectOperationAccess().getParametersParameterParserRuleCall_6_1_0());
                            					
                            pushFollow(FOLLOW_105);
                            lv_parameters_9_0=ruleParameter();

                            state._fsp--;


                            						if (current==null) {
                            							current = createModelElementForParent(grammarAccess.getDomainObjectOperationRule());
                            						}
                            						add(
                            							current,
                            							"parameters",
                            							lv_parameters_9_0,
                            							"org.contextmapper.tactic.dsl.TacticDDDLanguage.Parameter");
                            						afterParserOrEnumRuleCall();
                            					

                            }


                            }
                            break;

                    }

                    // InternalContextMappingDSL.g:11446:4: (otherlv_10= ',' ( (lv_parameters_11_0= ruleParameter ) ) )*
                    loop278:
                    do {
                        int alt278=2;
                        int LA278_0 = input.LA(1);

                        if ( (LA278_0==24) ) {
                            alt278=1;
                        }


                        switch (alt278) {
                    	case 1 :
                    	    // InternalContextMappingDSL.g:11447:5: otherlv_10= ',' ( (lv_parameters_11_0= ruleParameter ) )
                    	    {
                    	    otherlv_10=(Token)match(input,24,FOLLOW_106); 

                    	    					newLeafNode(otherlv_10, grammarAccess.getDomainObjectOperationAccess().getCommaKeyword_6_2_0());
                    	    				
                    	    // InternalContextMappingDSL.g:11451:5: ( (lv_parameters_11_0= ruleParameter ) )
                    	    // InternalContextMappingDSL.g:11452:6: (lv_parameters_11_0= ruleParameter )
                    	    {
                    	    // InternalContextMappingDSL.g:11452:6: (lv_parameters_11_0= ruleParameter )
                    	    // InternalContextMappingDSL.g:11453:7: lv_parameters_11_0= ruleParameter
                    	    {

                    	    							newCompositeNode(grammarAccess.getDomainObjectOperationAccess().getParametersParameterParserRuleCall_6_2_1_0());
                    	    						
                    	    pushFollow(FOLLOW_105);
                    	    lv_parameters_11_0=ruleParameter();

                    	    state._fsp--;


                    	    							if (current==null) {
                    	    								current = createModelElementForParent(grammarAccess.getDomainObjectOperationRule());
                    	    							}
                    	    							add(
                    	    								current,
                    	    								"parameters",
                    	    								lv_parameters_11_0,
                    	    								"org.contextmapper.tactic.dsl.TacticDDDLanguage.Parameter");
                    	    							afterParserOrEnumRuleCall();
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop278;
                        }
                    } while (true);

                    otherlv_12=(Token)match(input,88,FOLLOW_152); 

                    				newLeafNode(otherlv_12, grammarAccess.getDomainObjectOperationAccess().getRightParenthesisKeyword_6_3());
                    			

                    }
                    break;

            }

            // InternalContextMappingDSL.g:11476:3: ( ( ( ( ({...}? => ( ({...}? => (otherlv_14= 'throws' ( (lv_throws_15_0= ruleThrowsIdentifier ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_16= 'hint' otherlv_17= '=' ( (lv_hint_18_0= RULE_STRING ) ) ) ) ) ) )* ) ) )
            // InternalContextMappingDSL.g:11477:4: ( ( ( ({...}? => ( ({...}? => (otherlv_14= 'throws' ( (lv_throws_15_0= ruleThrowsIdentifier ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_16= 'hint' otherlv_17= '=' ( (lv_hint_18_0= RULE_STRING ) ) ) ) ) ) )* ) )
            {
            // InternalContextMappingDSL.g:11477:4: ( ( ( ({...}? => ( ({...}? => (otherlv_14= 'throws' ( (lv_throws_15_0= ruleThrowsIdentifier ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_16= 'hint' otherlv_17= '=' ( (lv_hint_18_0= RULE_STRING ) ) ) ) ) ) )* ) )
            // InternalContextMappingDSL.g:11478:5: ( ( ({...}? => ( ({...}? => (otherlv_14= 'throws' ( (lv_throws_15_0= ruleThrowsIdentifier ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_16= 'hint' otherlv_17= '=' ( (lv_hint_18_0= RULE_STRING ) ) ) ) ) ) )* )
            {
             
            				  getUnorderedGroupHelper().enter(grammarAccess.getDomainObjectOperationAccess().getUnorderedGroup_7());
            				
            // InternalContextMappingDSL.g:11481:5: ( ( ({...}? => ( ({...}? => (otherlv_14= 'throws' ( (lv_throws_15_0= ruleThrowsIdentifier ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_16= 'hint' otherlv_17= '=' ( (lv_hint_18_0= RULE_STRING ) ) ) ) ) ) )* )
            // InternalContextMappingDSL.g:11482:6: ( ({...}? => ( ({...}? => (otherlv_14= 'throws' ( (lv_throws_15_0= ruleThrowsIdentifier ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_16= 'hint' otherlv_17= '=' ( (lv_hint_18_0= RULE_STRING ) ) ) ) ) ) )*
            {
            // InternalContextMappingDSL.g:11482:6: ( ({...}? => ( ({...}? => (otherlv_14= 'throws' ( (lv_throws_15_0= ruleThrowsIdentifier ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_16= 'hint' otherlv_17= '=' ( (lv_hint_18_0= RULE_STRING ) ) ) ) ) ) )*
            loop280:
            do {
                int alt280=3;
                int LA280_0 = input.LA(1);

                if ( LA280_0 == 89 && getUnorderedGroupHelper().canSelect(grammarAccess.getDomainObjectOperationAccess().getUnorderedGroup_7(), 0) ) {
                    alt280=1;
                }
                else if ( LA280_0 == 67 && getUnorderedGroupHelper().canSelect(grammarAccess.getDomainObjectOperationAccess().getUnorderedGroup_7(), 1) ) {
                    alt280=2;
                }


                switch (alt280) {
            	case 1 :
            	    // InternalContextMappingDSL.g:11483:4: ({...}? => ( ({...}? => (otherlv_14= 'throws' ( (lv_throws_15_0= ruleThrowsIdentifier ) ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:11483:4: ({...}? => ( ({...}? => (otherlv_14= 'throws' ( (lv_throws_15_0= ruleThrowsIdentifier ) ) ) ) ) )
            	    // InternalContextMappingDSL.g:11484:5: {...}? => ( ({...}? => (otherlv_14= 'throws' ( (lv_throws_15_0= ruleThrowsIdentifier ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDomainObjectOperationAccess().getUnorderedGroup_7(), 0) ) {
            	        throw new FailedPredicateException(input, "ruleDomainObjectOperation", "getUnorderedGroupHelper().canSelect(grammarAccess.getDomainObjectOperationAccess().getUnorderedGroup_7(), 0)");
            	    }
            	    // InternalContextMappingDSL.g:11484:118: ( ({...}? => (otherlv_14= 'throws' ( (lv_throws_15_0= ruleThrowsIdentifier ) ) ) ) )
            	    // InternalContextMappingDSL.g:11485:6: ({...}? => (otherlv_14= 'throws' ( (lv_throws_15_0= ruleThrowsIdentifier ) ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getDomainObjectOperationAccess().getUnorderedGroup_7(), 0);
            	    					
            	    // InternalContextMappingDSL.g:11488:9: ({...}? => (otherlv_14= 'throws' ( (lv_throws_15_0= ruleThrowsIdentifier ) ) ) )
            	    // InternalContextMappingDSL.g:11488:10: {...}? => (otherlv_14= 'throws' ( (lv_throws_15_0= ruleThrowsIdentifier ) ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleDomainObjectOperation", "true");
            	    }
            	    // InternalContextMappingDSL.g:11488:19: (otherlv_14= 'throws' ( (lv_throws_15_0= ruleThrowsIdentifier ) ) )
            	    // InternalContextMappingDSL.g:11488:20: otherlv_14= 'throws' ( (lv_throws_15_0= ruleThrowsIdentifier ) )
            	    {
            	    otherlv_14=(Token)match(input,89,FOLLOW_10); 

            	    									newLeafNode(otherlv_14, grammarAccess.getDomainObjectOperationAccess().getThrowsKeyword_7_0_0());
            	    								
            	    // InternalContextMappingDSL.g:11492:9: ( (lv_throws_15_0= ruleThrowsIdentifier ) )
            	    // InternalContextMappingDSL.g:11493:10: (lv_throws_15_0= ruleThrowsIdentifier )
            	    {
            	    // InternalContextMappingDSL.g:11493:10: (lv_throws_15_0= ruleThrowsIdentifier )
            	    // InternalContextMappingDSL.g:11494:11: lv_throws_15_0= ruleThrowsIdentifier
            	    {

            	    											newCompositeNode(grammarAccess.getDomainObjectOperationAccess().getThrowsThrowsIdentifierParserRuleCall_7_0_1_0());
            	    										
            	    pushFollow(FOLLOW_152);
            	    lv_throws_15_0=ruleThrowsIdentifier();

            	    state._fsp--;


            	    											if (current==null) {
            	    												current = createModelElementForParent(grammarAccess.getDomainObjectOperationRule());
            	    											}
            	    											set(
            	    												current,
            	    												"throws",
            	    												lv_throws_15_0,
            	    												"org.contextmapper.tactic.dsl.TacticDDDLanguage.ThrowsIdentifier");
            	    											afterParserOrEnumRuleCall();
            	    										

            	    }


            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDomainObjectOperationAccess().getUnorderedGroup_7());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 2 :
            	    // InternalContextMappingDSL.g:11517:4: ({...}? => ( ({...}? => (otherlv_16= 'hint' otherlv_17= '=' ( (lv_hint_18_0= RULE_STRING ) ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:11517:4: ({...}? => ( ({...}? => (otherlv_16= 'hint' otherlv_17= '=' ( (lv_hint_18_0= RULE_STRING ) ) ) ) ) )
            	    // InternalContextMappingDSL.g:11518:5: {...}? => ( ({...}? => (otherlv_16= 'hint' otherlv_17= '=' ( (lv_hint_18_0= RULE_STRING ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDomainObjectOperationAccess().getUnorderedGroup_7(), 1) ) {
            	        throw new FailedPredicateException(input, "ruleDomainObjectOperation", "getUnorderedGroupHelper().canSelect(grammarAccess.getDomainObjectOperationAccess().getUnorderedGroup_7(), 1)");
            	    }
            	    // InternalContextMappingDSL.g:11518:118: ( ({...}? => (otherlv_16= 'hint' otherlv_17= '=' ( (lv_hint_18_0= RULE_STRING ) ) ) ) )
            	    // InternalContextMappingDSL.g:11519:6: ({...}? => (otherlv_16= 'hint' otherlv_17= '=' ( (lv_hint_18_0= RULE_STRING ) ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getDomainObjectOperationAccess().getUnorderedGroup_7(), 1);
            	    					
            	    // InternalContextMappingDSL.g:11522:9: ({...}? => (otherlv_16= 'hint' otherlv_17= '=' ( (lv_hint_18_0= RULE_STRING ) ) ) )
            	    // InternalContextMappingDSL.g:11522:10: {...}? => (otherlv_16= 'hint' otherlv_17= '=' ( (lv_hint_18_0= RULE_STRING ) ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleDomainObjectOperation", "true");
            	    }
            	    // InternalContextMappingDSL.g:11522:19: (otherlv_16= 'hint' otherlv_17= '=' ( (lv_hint_18_0= RULE_STRING ) ) )
            	    // InternalContextMappingDSL.g:11522:20: otherlv_16= 'hint' otherlv_17= '=' ( (lv_hint_18_0= RULE_STRING ) )
            	    {
            	    otherlv_16=(Token)match(input,67,FOLLOW_81); 

            	    									newLeafNode(otherlv_16, grammarAccess.getDomainObjectOperationAccess().getHintKeyword_7_1_0());
            	    								
            	    otherlv_17=(Token)match(input,21,FOLLOW_4); 

            	    									newLeafNode(otherlv_17, grammarAccess.getDomainObjectOperationAccess().getEqualsSignKeyword_7_1_1());
            	    								
            	    // InternalContextMappingDSL.g:11530:9: ( (lv_hint_18_0= RULE_STRING ) )
            	    // InternalContextMappingDSL.g:11531:10: (lv_hint_18_0= RULE_STRING )
            	    {
            	    // InternalContextMappingDSL.g:11531:10: (lv_hint_18_0= RULE_STRING )
            	    // InternalContextMappingDSL.g:11532:11: lv_hint_18_0= RULE_STRING
            	    {
            	    lv_hint_18_0=(Token)match(input,RULE_STRING,FOLLOW_152); 

            	    											newLeafNode(lv_hint_18_0, grammarAccess.getDomainObjectOperationAccess().getHintSTRINGTerminalRuleCall_7_1_2_0());
            	    										

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getDomainObjectOperationRule());
            	    											}
            	    											setWithLastConsumed(
            	    												current,
            	    												"hint",
            	    												lv_hint_18_0,
            	    												"org.eclipse.xtext.common.Terminals.STRING");
            	    										

            	    }


            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDomainObjectOperationAccess().getUnorderedGroup_7());
            	    					

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop280;
                }
            } while (true);


            }


            }

             
            				  getUnorderedGroupHelper().leave(grammarAccess.getDomainObjectOperationAccess().getUnorderedGroup_7());
            				

            }

            otherlv_19=(Token)match(input,90,FOLLOW_2); 

            			newLeafNode(otherlv_19, grammarAccess.getDomainObjectOperationAccess().getSemicolonKeyword_8());
            		

            }


            }


            	leaveRule();

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleDomainObjectOperation"


    // $ANTLR start "entryRuleDataTransferObject"
    // InternalContextMappingDSL.g:11569:1: entryRuleDataTransferObject returns [EObject current=null] : iv_ruleDataTransferObject= ruleDataTransferObject EOF ;
    public final EObject entryRuleDataTransferObject() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleDataTransferObject = null;


        try {
            // InternalContextMappingDSL.g:11569:59: (iv_ruleDataTransferObject= ruleDataTransferObject EOF )
            // InternalContextMappingDSL.g:11570:2: iv_ruleDataTransferObject= ruleDataTransferObject EOF
            {
             newCompositeNode(grammarAccess.getDataTransferObjectRule()); 
            pushFollow(FOLLOW_1);
            iv_ruleDataTransferObject=ruleDataTransferObject();

            state._fsp--;

             current =iv_ruleDataTransferObject; 
            match(input,EOF,FOLLOW_2); 

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleDataTransferObject"


    // $ANTLR start "ruleDataTransferObject"
    // InternalContextMappingDSL.g:11576:1: ruleDataTransferObject returns [EObject current=null] : ( ( (lv_comment_0_0= RULE_SL_COMMENT ) )? ( (lv_doc_1_0= RULE_STRING ) )? ( (lv_abstract_2_0= 'abstract' ) )? otherlv_3= 'DataTransferObject' ( (lv_name_4_0= RULE_ID ) ) (otherlv_5= 'extends' ( (otherlv_6= '@' ( (otherlv_7= RULE_ID ) ) ) | ( (lv_extendsName_8_0= ruleJavaIdentifier ) ) ) )? (otherlv_9= '{' (otherlv_10= 'package' otherlv_11= '=' ( (lv_package_12_0= ruleJavaIdentifier ) ) )? ( ( ( ( ({...}? => ( ({...}? => ( ( (lv_gapClass_14_0= 'gap' ) ) | ( (lv_noGapClass_15_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_16= 'hint' otherlv_17= '=' ( (lv_hint_18_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'validate' otherlv_20= '=' ( (lv_validate_21_0= RULE_STRING ) ) ) ) ) ) )* ) ) ) ( ( (lv_attributes_22_0= ruleDtoAttribute ) ) | ( (lv_references_23_0= ruleDtoReference ) ) )* otherlv_24= '}' )? ) ;
    public final EObject ruleDataTransferObject() throws RecognitionException {
        EObject current = null;

        Token lv_comment_0_0=null;
        Token lv_doc_1_0=null;
        Token lv_abstract_2_0=null;
        Token otherlv_3=null;
        Token lv_name_4_0=null;
        Token otherlv_5=null;
        Token otherlv_6=null;
        Token otherlv_7=null;
        Token otherlv_9=null;
        Token otherlv_10=null;
        Token otherlv_11=null;
        Token lv_gapClass_14_0=null;
        Token lv_noGapClass_15_0=null;
        Token otherlv_16=null;
        Token otherlv_17=null;
        Token lv_hint_18_0=null;
        Token otherlv_19=null;
        Token otherlv_20=null;
        Token lv_validate_21_0=null;
        Token otherlv_24=null;
        AntlrDatatypeRuleToken lv_extendsName_8_0 = null;

        AntlrDatatypeRuleToken lv_package_12_0 = null;

        EObject lv_attributes_22_0 = null;

        EObject lv_references_23_0 = null;



        	enterRule();

        try {
            // InternalContextMappingDSL.g:11582:2: ( ( ( (lv_comment_0_0= RULE_SL_COMMENT ) )? ( (lv_doc_1_0= RULE_STRING ) )? ( (lv_abstract_2_0= 'abstract' ) )? otherlv_3= 'DataTransferObject' ( (lv_name_4_0= RULE_ID ) ) (otherlv_5= 'extends' ( (otherlv_6= '@' ( (otherlv_7= RULE_ID ) ) ) | ( (lv_extendsName_8_0= ruleJavaIdentifier ) ) ) )? (otherlv_9= '{' (otherlv_10= 'package' otherlv_11= '=' ( (lv_package_12_0= ruleJavaIdentifier ) ) )? ( ( ( ( ({...}? => ( ({...}? => ( ( (lv_gapClass_14_0= 'gap' ) ) | ( (lv_noGapClass_15_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_16= 'hint' otherlv_17= '=' ( (lv_hint_18_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'validate' otherlv_20= '=' ( (lv_validate_21_0= RULE_STRING ) ) ) ) ) ) )* ) ) ) ( ( (lv_attributes_22_0= ruleDtoAttribute ) ) | ( (lv_references_23_0= ruleDtoReference ) ) )* otherlv_24= '}' )? ) )
            // InternalContextMappingDSL.g:11583:2: ( ( (lv_comment_0_0= RULE_SL_COMMENT ) )? ( (lv_doc_1_0= RULE_STRING ) )? ( (lv_abstract_2_0= 'abstract' ) )? otherlv_3= 'DataTransferObject' ( (lv_name_4_0= RULE_ID ) ) (otherlv_5= 'extends' ( (otherlv_6= '@' ( (otherlv_7= RULE_ID ) ) ) | ( (lv_extendsName_8_0= ruleJavaIdentifier ) ) ) )? (otherlv_9= '{' (otherlv_10= 'package' otherlv_11= '=' ( (lv_package_12_0= ruleJavaIdentifier ) ) )? ( ( ( ( ({...}? => ( ({...}? => ( ( (lv_gapClass_14_0= 'gap' ) ) | ( (lv_noGapClass_15_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_16= 'hint' otherlv_17= '=' ( (lv_hint_18_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'validate' otherlv_20= '=' ( (lv_validate_21_0= RULE_STRING ) ) ) ) ) ) )* ) ) ) ( ( (lv_attributes_22_0= ruleDtoAttribute ) ) | ( (lv_references_23_0= ruleDtoReference ) ) )* otherlv_24= '}' )? )
            {
            // InternalContextMappingDSL.g:11583:2: ( ( (lv_comment_0_0= RULE_SL_COMMENT ) )? ( (lv_doc_1_0= RULE_STRING ) )? ( (lv_abstract_2_0= 'abstract' ) )? otherlv_3= 'DataTransferObject' ( (lv_name_4_0= RULE_ID ) ) (otherlv_5= 'extends' ( (otherlv_6= '@' ( (otherlv_7= RULE_ID ) ) ) | ( (lv_extendsName_8_0= ruleJavaIdentifier ) ) ) )? (otherlv_9= '{' (otherlv_10= 'package' otherlv_11= '=' ( (lv_package_12_0= ruleJavaIdentifier ) ) )? ( ( ( ( ({...}? => ( ({...}? => ( ( (lv_gapClass_14_0= 'gap' ) ) | ( (lv_noGapClass_15_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_16= 'hint' otherlv_17= '=' ( (lv_hint_18_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'validate' otherlv_20= '=' ( (lv_validate_21_0= RULE_STRING ) ) ) ) ) ) )* ) ) ) ( ( (lv_attributes_22_0= ruleDtoAttribute ) ) | ( (lv_references_23_0= ruleDtoReference ) ) )* otherlv_24= '}' )? )
            // InternalContextMappingDSL.g:11584:3: ( (lv_comment_0_0= RULE_SL_COMMENT ) )? ( (lv_doc_1_0= RULE_STRING ) )? ( (lv_abstract_2_0= 'abstract' ) )? otherlv_3= 'DataTransferObject' ( (lv_name_4_0= RULE_ID ) ) (otherlv_5= 'extends' ( (otherlv_6= '@' ( (otherlv_7= RULE_ID ) ) ) | ( (lv_extendsName_8_0= ruleJavaIdentifier ) ) ) )? (otherlv_9= '{' (otherlv_10= 'package' otherlv_11= '=' ( (lv_package_12_0= ruleJavaIdentifier ) ) )? ( ( ( ( ({...}? => ( ({...}? => ( ( (lv_gapClass_14_0= 'gap' ) ) | ( (lv_noGapClass_15_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_16= 'hint' otherlv_17= '=' ( (lv_hint_18_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'validate' otherlv_20= '=' ( (lv_validate_21_0= RULE_STRING ) ) ) ) ) ) )* ) ) ) ( ( (lv_attributes_22_0= ruleDtoAttribute ) ) | ( (lv_references_23_0= ruleDtoReference ) ) )* otherlv_24= '}' )?
            {
            // InternalContextMappingDSL.g:11584:3: ( (lv_comment_0_0= RULE_SL_COMMENT ) )?
            int alt281=2;
            int LA281_0 = input.LA(1);

            if ( (LA281_0==RULE_SL_COMMENT) ) {
                alt281=1;
            }
            switch (alt281) {
                case 1 :
                    // InternalContextMappingDSL.g:11585:4: (lv_comment_0_0= RULE_SL_COMMENT )
                    {
                    // InternalContextMappingDSL.g:11585:4: (lv_comment_0_0= RULE_SL_COMMENT )
                    // InternalContextMappingDSL.g:11586:5: lv_comment_0_0= RULE_SL_COMMENT
                    {
                    lv_comment_0_0=(Token)match(input,RULE_SL_COMMENT,FOLLOW_153); 

                    					newLeafNode(lv_comment_0_0, grammarAccess.getDataTransferObjectAccess().getCommentSL_COMMENTTerminalRuleCall_0_0());
                    				

                    					if (current==null) {
                    						current = createModelElement(grammarAccess.getDataTransferObjectRule());
                    					}
                    					setWithLastConsumed(
                    						current,
                    						"comment",
                    						lv_comment_0_0,
                    						"org.eclipse.xtext.common.Terminals.SL_COMMENT");
                    				

                    }


                    }
                    break;

            }

            // InternalContextMappingDSL.g:11602:3: ( (lv_doc_1_0= RULE_STRING ) )?
            int alt282=2;
            int LA282_0 = input.LA(1);

            if ( (LA282_0==RULE_STRING) ) {
                alt282=1;
            }
            switch (alt282) {
                case 1 :
                    // InternalContextMappingDSL.g:11603:4: (lv_doc_1_0= RULE_STRING )
                    {
                    // InternalContextMappingDSL.g:11603:4: (lv_doc_1_0= RULE_STRING )
                    // InternalContextMappingDSL.g:11604:5: lv_doc_1_0= RULE_STRING
                    {
                    lv_doc_1_0=(Token)match(input,RULE_STRING,FOLLOW_154); 

                    					newLeafNode(lv_doc_1_0, grammarAccess.getDataTransferObjectAccess().getDocSTRINGTerminalRuleCall_1_0());
                    				

                    					if (current==null) {
                    						current = createModelElement(grammarAccess.getDataTransferObjectRule());
                    					}
                    					setWithLastConsumed(
                    						current,
                    						"doc",
                    						lv_doc_1_0,
                    						"org.eclipse.xtext.common.Terminals.STRING");
                    				

                    }


                    }
                    break;

            }

            // InternalContextMappingDSL.g:11620:3: ( (lv_abstract_2_0= 'abstract' ) )?
            int alt283=2;
            int LA283_0 = input.LA(1);

            if ( (LA283_0==105) ) {
                alt283=1;
            }
            switch (alt283) {
                case 1 :
                    // InternalContextMappingDSL.g:11621:4: (lv_abstract_2_0= 'abstract' )
                    {
                    // InternalContextMappingDSL.g:11621:4: (lv_abstract_2_0= 'abstract' )
                    // InternalContextMappingDSL.g:11622:5: lv_abstract_2_0= 'abstract'
                    {
                    lv_abstract_2_0=(Token)match(input,105,FOLLOW_155); 

                    					newLeafNode(lv_abstract_2_0, grammarAccess.getDataTransferObjectAccess().getAbstractAbstractKeyword_2_0());
                    				

                    					if (current==null) {
                    						current = createModelElement(grammarAccess.getDataTransferObjectRule());
                    					}
                    					setWithLastConsumed(current, "abstract", true, "abstract");
                    				

                    }


                    }
                    break;

            }

            otherlv_3=(Token)match(input,129,FOLLOW_10); 

            			newLeafNode(otherlv_3, grammarAccess.getDataTransferObjectAccess().getDataTransferObjectKeyword_3());
            		
            // InternalContextMappingDSL.g:11638:3: ( (lv_name_4_0= RULE_ID ) )
            // InternalContextMappingDSL.g:11639:4: (lv_name_4_0= RULE_ID )
            {
            // InternalContextMappingDSL.g:11639:4: (lv_name_4_0= RULE_ID )
            // InternalContextMappingDSL.g:11640:5: lv_name_4_0= RULE_ID
            {
            lv_name_4_0=(Token)match(input,RULE_ID,FOLLOW_156); 

            					newLeafNode(lv_name_4_0, grammarAccess.getDataTransferObjectAccess().getNameIDTerminalRuleCall_4_0());
            				

            					if (current==null) {
            						current = createModelElement(grammarAccess.getDataTransferObjectRule());
            					}
            					setWithLastConsumed(
            						current,
            						"name",
            						lv_name_4_0,
            						"org.eclipse.xtext.common.Terminals.ID");
            				

            }


            }

            // InternalContextMappingDSL.g:11656:3: (otherlv_5= 'extends' ( (otherlv_6= '@' ( (otherlv_7= RULE_ID ) ) ) | ( (lv_extendsName_8_0= ruleJavaIdentifier ) ) ) )?
            int alt285=2;
            int LA285_0 = input.LA(1);

            if ( (LA285_0==107) ) {
                alt285=1;
            }
            switch (alt285) {
                case 1 :
                    // InternalContextMappingDSL.g:11657:4: otherlv_5= 'extends' ( (otherlv_6= '@' ( (otherlv_7= RULE_ID ) ) ) | ( (lv_extendsName_8_0= ruleJavaIdentifier ) ) )
                    {
                    otherlv_5=(Token)match(input,107,FOLLOW_96); 

                    				newLeafNode(otherlv_5, grammarAccess.getDataTransferObjectAccess().getExtendsKeyword_5_0());
                    			
                    // InternalContextMappingDSL.g:11661:4: ( (otherlv_6= '@' ( (otherlv_7= RULE_ID ) ) ) | ( (lv_extendsName_8_0= ruleJavaIdentifier ) ) )
                    int alt284=2;
                    int LA284_0 = input.LA(1);

                    if ( (LA284_0==79) ) {
                        alt284=1;
                    }
                    else if ( (LA284_0==RULE_ID) ) {
                        alt284=2;
                    }
                    else {
                        NoViableAltException nvae =
                            new NoViableAltException("", 284, 0, input);

                        throw nvae;
                    }
                    switch (alt284) {
                        case 1 :
                            // InternalContextMappingDSL.g:11662:5: (otherlv_6= '@' ( (otherlv_7= RULE_ID ) ) )
                            {
                            // InternalContextMappingDSL.g:11662:5: (otherlv_6= '@' ( (otherlv_7= RULE_ID ) ) )
                            // InternalContextMappingDSL.g:11663:6: otherlv_6= '@' ( (otherlv_7= RULE_ID ) )
                            {
                            otherlv_6=(Token)match(input,79,FOLLOW_10); 

                            						newLeafNode(otherlv_6, grammarAccess.getDataTransferObjectAccess().getCommercialAtKeyword_5_1_0_0());
                            					
                            // InternalContextMappingDSL.g:11667:6: ( (otherlv_7= RULE_ID ) )
                            // InternalContextMappingDSL.g:11668:7: (otherlv_7= RULE_ID )
                            {
                            // InternalContextMappingDSL.g:11668:7: (otherlv_7= RULE_ID )
                            // InternalContextMappingDSL.g:11669:8: otherlv_7= RULE_ID
                            {

                            								if (current==null) {
                            									current = createModelElement(grammarAccess.getDataTransferObjectRule());
                            								}
                            							
                            otherlv_7=(Token)match(input,RULE_ID,FOLLOW_23); 

                            								newLeafNode(otherlv_7, grammarAccess.getDataTransferObjectAccess().getExtendsDataTransferObjectCrossReference_5_1_0_1_0());
                            							

                            }


                            }


                            }


                            }
                            break;
                        case 2 :
                            // InternalContextMappingDSL.g:11682:5: ( (lv_extendsName_8_0= ruleJavaIdentifier ) )
                            {
                            // InternalContextMappingDSL.g:11682:5: ( (lv_extendsName_8_0= ruleJavaIdentifier ) )
                            // InternalContextMappingDSL.g:11683:6: (lv_extendsName_8_0= ruleJavaIdentifier )
                            {
                            // InternalContextMappingDSL.g:11683:6: (lv_extendsName_8_0= ruleJavaIdentifier )
                            // InternalContextMappingDSL.g:11684:7: lv_extendsName_8_0= ruleJavaIdentifier
                            {

                            							newCompositeNode(grammarAccess.getDataTransferObjectAccess().getExtendsNameJavaIdentifierParserRuleCall_5_1_1_0());
                            						
                            pushFollow(FOLLOW_23);
                            lv_extendsName_8_0=ruleJavaIdentifier();

                            state._fsp--;


                            							if (current==null) {
                            								current = createModelElementForParent(grammarAccess.getDataTransferObjectRule());
                            							}
                            							set(
                            								current,
                            								"extendsName",
                            								lv_extendsName_8_0,
                            								"org.contextmapper.tactic.dsl.TacticDDDLanguage.JavaIdentifier");
                            							afterParserOrEnumRuleCall();
                            						

                            }


                            }


                            }
                            break;

                    }


                    }
                    break;

            }

            // InternalContextMappingDSL.g:11703:3: (otherlv_9= '{' (otherlv_10= 'package' otherlv_11= '=' ( (lv_package_12_0= ruleJavaIdentifier ) ) )? ( ( ( ( ({...}? => ( ({...}? => ( ( (lv_gapClass_14_0= 'gap' ) ) | ( (lv_noGapClass_15_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_16= 'hint' otherlv_17= '=' ( (lv_hint_18_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'validate' otherlv_20= '=' ( (lv_validate_21_0= RULE_STRING ) ) ) ) ) ) )* ) ) ) ( ( (lv_attributes_22_0= ruleDtoAttribute ) ) | ( (lv_references_23_0= ruleDtoReference ) ) )* otherlv_24= '}' )?
            int alt290=2;
            int LA290_0 = input.LA(1);

            if ( (LA290_0==RULE_OPEN) ) {
                alt290=1;
            }
            switch (alt290) {
                case 1 :
                    // InternalContextMappingDSL.g:11704:4: otherlv_9= '{' (otherlv_10= 'package' otherlv_11= '=' ( (lv_package_12_0= ruleJavaIdentifier ) ) )? ( ( ( ( ({...}? => ( ({...}? => ( ( (lv_gapClass_14_0= 'gap' ) ) | ( (lv_noGapClass_15_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_16= 'hint' otherlv_17= '=' ( (lv_hint_18_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'validate' otherlv_20= '=' ( (lv_validate_21_0= RULE_STRING ) ) ) ) ) ) )* ) ) ) ( ( (lv_attributes_22_0= ruleDtoAttribute ) ) | ( (lv_references_23_0= ruleDtoReference ) ) )* otherlv_24= '}'
                    {
                    otherlv_9=(Token)match(input,RULE_OPEN,FOLLOW_157); 

                    				newLeafNode(otherlv_9, grammarAccess.getDataTransferObjectAccess().getLeftCurlyBracketKeyword_6_0());
                    			
                    // InternalContextMappingDSL.g:11708:4: (otherlv_10= 'package' otherlv_11= '=' ( (lv_package_12_0= ruleJavaIdentifier ) ) )?
                    int alt286=2;
                    int LA286_0 = input.LA(1);

                    if ( (LA286_0==109) ) {
                        int LA286_1 = input.LA(2);

                        if ( (LA286_1==21) ) {
                            alt286=1;
                        }
                    }
                    switch (alt286) {
                        case 1 :
                            // InternalContextMappingDSL.g:11709:5: otherlv_10= 'package' otherlv_11= '=' ( (lv_package_12_0= ruleJavaIdentifier ) )
                            {
                            otherlv_10=(Token)match(input,109,FOLLOW_81); 

                            					newLeafNode(otherlv_10, grammarAccess.getDataTransferObjectAccess().getPackageKeyword_6_1_0());
                            				
                            otherlv_11=(Token)match(input,21,FOLLOW_10); 

                            					newLeafNode(otherlv_11, grammarAccess.getDataTransferObjectAccess().getEqualsSignKeyword_6_1_1());
                            				
                            // InternalContextMappingDSL.g:11717:5: ( (lv_package_12_0= ruleJavaIdentifier ) )
                            // InternalContextMappingDSL.g:11718:6: (lv_package_12_0= ruleJavaIdentifier )
                            {
                            // InternalContextMappingDSL.g:11718:6: (lv_package_12_0= ruleJavaIdentifier )
                            // InternalContextMappingDSL.g:11719:7: lv_package_12_0= ruleJavaIdentifier
                            {

                            							newCompositeNode(grammarAccess.getDataTransferObjectAccess().getPackageJavaIdentifierParserRuleCall_6_1_2_0());
                            						
                            pushFollow(FOLLOW_157);
                            lv_package_12_0=ruleJavaIdentifier();

                            state._fsp--;


                            							if (current==null) {
                            								current = createModelElementForParent(grammarAccess.getDataTransferObjectRule());
                            							}
                            							set(
                            								current,
                            								"package",
                            								lv_package_12_0,
                            								"org.contextmapper.tactic.dsl.TacticDDDLanguage.JavaIdentifier");
                            							afterParserOrEnumRuleCall();
                            						

                            }


                            }


                            }
                            break;

                    }

                    // InternalContextMappingDSL.g:11737:4: ( ( ( ( ({...}? => ( ({...}? => ( ( (lv_gapClass_14_0= 'gap' ) ) | ( (lv_noGapClass_15_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_16= 'hint' otherlv_17= '=' ( (lv_hint_18_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'validate' otherlv_20= '=' ( (lv_validate_21_0= RULE_STRING ) ) ) ) ) ) )* ) ) )
                    // InternalContextMappingDSL.g:11738:5: ( ( ( ({...}? => ( ({...}? => ( ( (lv_gapClass_14_0= 'gap' ) ) | ( (lv_noGapClass_15_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_16= 'hint' otherlv_17= '=' ( (lv_hint_18_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'validate' otherlv_20= '=' ( (lv_validate_21_0= RULE_STRING ) ) ) ) ) ) )* ) )
                    {
                    // InternalContextMappingDSL.g:11738:5: ( ( ( ({...}? => ( ({...}? => ( ( (lv_gapClass_14_0= 'gap' ) ) | ( (lv_noGapClass_15_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_16= 'hint' otherlv_17= '=' ( (lv_hint_18_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'validate' otherlv_20= '=' ( (lv_validate_21_0= RULE_STRING ) ) ) ) ) ) )* ) )
                    // InternalContextMappingDSL.g:11739:6: ( ( ({...}? => ( ({...}? => ( ( (lv_gapClass_14_0= 'gap' ) ) | ( (lv_noGapClass_15_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_16= 'hint' otherlv_17= '=' ( (lv_hint_18_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'validate' otherlv_20= '=' ( (lv_validate_21_0= RULE_STRING ) ) ) ) ) ) )* )
                    {
                     
                    					  getUnorderedGroupHelper().enter(grammarAccess.getDataTransferObjectAccess().getUnorderedGroup_6_2());
                    					
                    // InternalContextMappingDSL.g:11742:6: ( ( ({...}? => ( ({...}? => ( ( (lv_gapClass_14_0= 'gap' ) ) | ( (lv_noGapClass_15_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_16= 'hint' otherlv_17= '=' ( (lv_hint_18_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'validate' otherlv_20= '=' ( (lv_validate_21_0= RULE_STRING ) ) ) ) ) ) )* )
                    // InternalContextMappingDSL.g:11743:7: ( ({...}? => ( ({...}? => ( ( (lv_gapClass_14_0= 'gap' ) ) | ( (lv_noGapClass_15_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_16= 'hint' otherlv_17= '=' ( (lv_hint_18_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'validate' otherlv_20= '=' ( (lv_validate_21_0= RULE_STRING ) ) ) ) ) ) )*
                    {
                    // InternalContextMappingDSL.g:11743:7: ( ({...}? => ( ({...}? => ( ( (lv_gapClass_14_0= 'gap' ) ) | ( (lv_noGapClass_15_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_16= 'hint' otherlv_17= '=' ( (lv_hint_18_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'validate' otherlv_20= '=' ( (lv_validate_21_0= RULE_STRING ) ) ) ) ) ) )*
                    loop288:
                    do {
                        int alt288=4;
                        int LA288_0 = input.LA(1);

                        if ( LA288_0 >= 71 && LA288_0 <= 72 && getUnorderedGroupHelper().canSelect(grammarAccess.getDataTransferObjectAccess().getUnorderedGroup_6_2(), 0) ) {
                            alt288=1;
                        }
                        else if ( LA288_0 == 67 && getUnorderedGroupHelper().canSelect(grammarAccess.getDataTransferObjectAccess().getUnorderedGroup_6_2(), 1) ) {
                            alt288=2;
                        }
                        else if ( LA288_0 == 118 && getUnorderedGroupHelper().canSelect(grammarAccess.getDataTransferObjectAccess().getUnorderedGroup_6_2(), 2) ) {
                            alt288=3;
                        }


                        switch (alt288) {
                    	case 1 :
                    	    // InternalContextMappingDSL.g:11744:5: ({...}? => ( ({...}? => ( ( (lv_gapClass_14_0= 'gap' ) ) | ( (lv_noGapClass_15_0= 'nogap' ) ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:11744:5: ({...}? => ( ({...}? => ( ( (lv_gapClass_14_0= 'gap' ) ) | ( (lv_noGapClass_15_0= 'nogap' ) ) ) ) ) )
                    	    // InternalContextMappingDSL.g:11745:6: {...}? => ( ({...}? => ( ( (lv_gapClass_14_0= 'gap' ) ) | ( (lv_noGapClass_15_0= 'nogap' ) ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDataTransferObjectAccess().getUnorderedGroup_6_2(), 0) ) {
                    	        throw new FailedPredicateException(input, "ruleDataTransferObject", "getUnorderedGroupHelper().canSelect(grammarAccess.getDataTransferObjectAccess().getUnorderedGroup_6_2(), 0)");
                    	    }
                    	    // InternalContextMappingDSL.g:11745:118: ( ({...}? => ( ( (lv_gapClass_14_0= 'gap' ) ) | ( (lv_noGapClass_15_0= 'nogap' ) ) ) ) )
                    	    // InternalContextMappingDSL.g:11746:7: ({...}? => ( ( (lv_gapClass_14_0= 'gap' ) ) | ( (lv_noGapClass_15_0= 'nogap' ) ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getDataTransferObjectAccess().getUnorderedGroup_6_2(), 0);
                    	    						
                    	    // InternalContextMappingDSL.g:11749:10: ({...}? => ( ( (lv_gapClass_14_0= 'gap' ) ) | ( (lv_noGapClass_15_0= 'nogap' ) ) ) )
                    	    // InternalContextMappingDSL.g:11749:11: {...}? => ( ( (lv_gapClass_14_0= 'gap' ) ) | ( (lv_noGapClass_15_0= 'nogap' ) ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleDataTransferObject", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:11749:20: ( ( (lv_gapClass_14_0= 'gap' ) ) | ( (lv_noGapClass_15_0= 'nogap' ) ) )
                    	    int alt287=2;
                    	    int LA287_0 = input.LA(1);

                    	    if ( (LA287_0==71) ) {
                    	        alt287=1;
                    	    }
                    	    else if ( (LA287_0==72) ) {
                    	        alt287=2;
                    	    }
                    	    else {
                    	        NoViableAltException nvae =
                    	            new NoViableAltException("", 287, 0, input);

                    	        throw nvae;
                    	    }
                    	    switch (alt287) {
                    	        case 1 :
                    	            // InternalContextMappingDSL.g:11749:21: ( (lv_gapClass_14_0= 'gap' ) )
                    	            {
                    	            // InternalContextMappingDSL.g:11749:21: ( (lv_gapClass_14_0= 'gap' ) )
                    	            // InternalContextMappingDSL.g:11750:11: (lv_gapClass_14_0= 'gap' )
                    	            {
                    	            // InternalContextMappingDSL.g:11750:11: (lv_gapClass_14_0= 'gap' )
                    	            // InternalContextMappingDSL.g:11751:12: lv_gapClass_14_0= 'gap'
                    	            {
                    	            lv_gapClass_14_0=(Token)match(input,71,FOLLOW_157); 

                    	            												newLeafNode(lv_gapClass_14_0, grammarAccess.getDataTransferObjectAccess().getGapClassGapKeyword_6_2_0_0_0());
                    	            											

                    	            												if (current==null) {
                    	            													current = createModelElement(grammarAccess.getDataTransferObjectRule());
                    	            												}
                    	            												setWithLastConsumed(current, "gapClass", true, "gap");
                    	            											

                    	            }


                    	            }


                    	            }
                    	            break;
                    	        case 2 :
                    	            // InternalContextMappingDSL.g:11764:10: ( (lv_noGapClass_15_0= 'nogap' ) )
                    	            {
                    	            // InternalContextMappingDSL.g:11764:10: ( (lv_noGapClass_15_0= 'nogap' ) )
                    	            // InternalContextMappingDSL.g:11765:11: (lv_noGapClass_15_0= 'nogap' )
                    	            {
                    	            // InternalContextMappingDSL.g:11765:11: (lv_noGapClass_15_0= 'nogap' )
                    	            // InternalContextMappingDSL.g:11766:12: lv_noGapClass_15_0= 'nogap'
                    	            {
                    	            lv_noGapClass_15_0=(Token)match(input,72,FOLLOW_157); 

                    	            												newLeafNode(lv_noGapClass_15_0, grammarAccess.getDataTransferObjectAccess().getNoGapClassNogapKeyword_6_2_0_1_0());
                    	            											

                    	            												if (current==null) {
                    	            													current = createModelElement(grammarAccess.getDataTransferObjectRule());
                    	            												}
                    	            												setWithLastConsumed(current, "noGapClass", true, "nogap");
                    	            											

                    	            }


                    	            }


                    	            }
                    	            break;

                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDataTransferObjectAccess().getUnorderedGroup_6_2());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 2 :
                    	    // InternalContextMappingDSL.g:11784:5: ({...}? => ( ({...}? => (otherlv_16= 'hint' otherlv_17= '=' ( (lv_hint_18_0= RULE_STRING ) ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:11784:5: ({...}? => ( ({...}? => (otherlv_16= 'hint' otherlv_17= '=' ( (lv_hint_18_0= RULE_STRING ) ) ) ) ) )
                    	    // InternalContextMappingDSL.g:11785:6: {...}? => ( ({...}? => (otherlv_16= 'hint' otherlv_17= '=' ( (lv_hint_18_0= RULE_STRING ) ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDataTransferObjectAccess().getUnorderedGroup_6_2(), 1) ) {
                    	        throw new FailedPredicateException(input, "ruleDataTransferObject", "getUnorderedGroupHelper().canSelect(grammarAccess.getDataTransferObjectAccess().getUnorderedGroup_6_2(), 1)");
                    	    }
                    	    // InternalContextMappingDSL.g:11785:118: ( ({...}? => (otherlv_16= 'hint' otherlv_17= '=' ( (lv_hint_18_0= RULE_STRING ) ) ) ) )
                    	    // InternalContextMappingDSL.g:11786:7: ({...}? => (otherlv_16= 'hint' otherlv_17= '=' ( (lv_hint_18_0= RULE_STRING ) ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getDataTransferObjectAccess().getUnorderedGroup_6_2(), 1);
                    	    						
                    	    // InternalContextMappingDSL.g:11789:10: ({...}? => (otherlv_16= 'hint' otherlv_17= '=' ( (lv_hint_18_0= RULE_STRING ) ) ) )
                    	    // InternalContextMappingDSL.g:11789:11: {...}? => (otherlv_16= 'hint' otherlv_17= '=' ( (lv_hint_18_0= RULE_STRING ) ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleDataTransferObject", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:11789:20: (otherlv_16= 'hint' otherlv_17= '=' ( (lv_hint_18_0= RULE_STRING ) ) )
                    	    // InternalContextMappingDSL.g:11789:21: otherlv_16= 'hint' otherlv_17= '=' ( (lv_hint_18_0= RULE_STRING ) )
                    	    {
                    	    otherlv_16=(Token)match(input,67,FOLLOW_81); 

                    	    										newLeafNode(otherlv_16, grammarAccess.getDataTransferObjectAccess().getHintKeyword_6_2_1_0());
                    	    									
                    	    otherlv_17=(Token)match(input,21,FOLLOW_4); 

                    	    										newLeafNode(otherlv_17, grammarAccess.getDataTransferObjectAccess().getEqualsSignKeyword_6_2_1_1());
                    	    									
                    	    // InternalContextMappingDSL.g:11797:10: ( (lv_hint_18_0= RULE_STRING ) )
                    	    // InternalContextMappingDSL.g:11798:11: (lv_hint_18_0= RULE_STRING )
                    	    {
                    	    // InternalContextMappingDSL.g:11798:11: (lv_hint_18_0= RULE_STRING )
                    	    // InternalContextMappingDSL.g:11799:12: lv_hint_18_0= RULE_STRING
                    	    {
                    	    lv_hint_18_0=(Token)match(input,RULE_STRING,FOLLOW_157); 

                    	    												newLeafNode(lv_hint_18_0, grammarAccess.getDataTransferObjectAccess().getHintSTRINGTerminalRuleCall_6_2_1_2_0());
                    	    											

                    	    												if (current==null) {
                    	    													current = createModelElement(grammarAccess.getDataTransferObjectRule());
                    	    												}
                    	    												setWithLastConsumed(
                    	    													current,
                    	    													"hint",
                    	    													lv_hint_18_0,
                    	    													"org.eclipse.xtext.common.Terminals.STRING");
                    	    											

                    	    }


                    	    }


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDataTransferObjectAccess().getUnorderedGroup_6_2());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 3 :
                    	    // InternalContextMappingDSL.g:11821:5: ({...}? => ( ({...}? => (otherlv_19= 'validate' otherlv_20= '=' ( (lv_validate_21_0= RULE_STRING ) ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:11821:5: ({...}? => ( ({...}? => (otherlv_19= 'validate' otherlv_20= '=' ( (lv_validate_21_0= RULE_STRING ) ) ) ) ) )
                    	    // InternalContextMappingDSL.g:11822:6: {...}? => ( ({...}? => (otherlv_19= 'validate' otherlv_20= '=' ( (lv_validate_21_0= RULE_STRING ) ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDataTransferObjectAccess().getUnorderedGroup_6_2(), 2) ) {
                    	        throw new FailedPredicateException(input, "ruleDataTransferObject", "getUnorderedGroupHelper().canSelect(grammarAccess.getDataTransferObjectAccess().getUnorderedGroup_6_2(), 2)");
                    	    }
                    	    // InternalContextMappingDSL.g:11822:118: ( ({...}? => (otherlv_19= 'validate' otherlv_20= '=' ( (lv_validate_21_0= RULE_STRING ) ) ) ) )
                    	    // InternalContextMappingDSL.g:11823:7: ({...}? => (otherlv_19= 'validate' otherlv_20= '=' ( (lv_validate_21_0= RULE_STRING ) ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getDataTransferObjectAccess().getUnorderedGroup_6_2(), 2);
                    	    						
                    	    // InternalContextMappingDSL.g:11826:10: ({...}? => (otherlv_19= 'validate' otherlv_20= '=' ( (lv_validate_21_0= RULE_STRING ) ) ) )
                    	    // InternalContextMappingDSL.g:11826:11: {...}? => (otherlv_19= 'validate' otherlv_20= '=' ( (lv_validate_21_0= RULE_STRING ) ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleDataTransferObject", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:11826:20: (otherlv_19= 'validate' otherlv_20= '=' ( (lv_validate_21_0= RULE_STRING ) ) )
                    	    // InternalContextMappingDSL.g:11826:21: otherlv_19= 'validate' otherlv_20= '=' ( (lv_validate_21_0= RULE_STRING ) )
                    	    {
                    	    otherlv_19=(Token)match(input,118,FOLLOW_81); 

                    	    										newLeafNode(otherlv_19, grammarAccess.getDataTransferObjectAccess().getValidateKeyword_6_2_2_0());
                    	    									
                    	    otherlv_20=(Token)match(input,21,FOLLOW_4); 

                    	    										newLeafNode(otherlv_20, grammarAccess.getDataTransferObjectAccess().getEqualsSignKeyword_6_2_2_1());
                    	    									
                    	    // InternalContextMappingDSL.g:11834:10: ( (lv_validate_21_0= RULE_STRING ) )
                    	    // InternalContextMappingDSL.g:11835:11: (lv_validate_21_0= RULE_STRING )
                    	    {
                    	    // InternalContextMappingDSL.g:11835:11: (lv_validate_21_0= RULE_STRING )
                    	    // InternalContextMappingDSL.g:11836:12: lv_validate_21_0= RULE_STRING
                    	    {
                    	    lv_validate_21_0=(Token)match(input,RULE_STRING,FOLLOW_157); 

                    	    												newLeafNode(lv_validate_21_0, grammarAccess.getDataTransferObjectAccess().getValidateSTRINGTerminalRuleCall_6_2_2_2_0());
                    	    											

                    	    												if (current==null) {
                    	    													current = createModelElement(grammarAccess.getDataTransferObjectRule());
                    	    												}
                    	    												setWithLastConsumed(
                    	    													current,
                    	    													"validate",
                    	    													lv_validate_21_0,
                    	    													"org.eclipse.xtext.common.Terminals.STRING");
                    	    											

                    	    }


                    	    }


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDataTransferObjectAccess().getUnorderedGroup_6_2());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop288;
                        }
                    } while (true);


                    }


                    }

                     
                    					  getUnorderedGroupHelper().leave(grammarAccess.getDataTransferObjectAccess().getUnorderedGroup_6_2());
                    					

                    }

                    // InternalContextMappingDSL.g:11865:4: ( ( (lv_attributes_22_0= ruleDtoAttribute ) ) | ( (lv_references_23_0= ruleDtoReference ) ) )*
                    loop289:
                    do {
                        int alt289=3;
                        switch ( input.LA(1) ) {
                        case RULE_STRING:
                            {
                            int LA289_2 = input.LA(2);

                            if ( (LA289_2==RULE_ID||LA289_2==109||(LA289_2>=170 && LA289_2<=191)||LA289_2==218||(LA289_2>=228 && LA289_2<=234)) ) {
                                alt289=1;
                            }
                            else if ( (LA289_2==RULE_REF) ) {
                                alt289=2;
                            }


                            }
                            break;
                        case RULE_ID:
                        case 109:
                        case 170:
                        case 171:
                        case 172:
                        case 173:
                        case 174:
                        case 175:
                        case 176:
                        case 177:
                        case 178:
                        case 179:
                        case 180:
                        case 181:
                        case 182:
                        case 183:
                        case 184:
                        case 185:
                        case 186:
                        case 187:
                        case 188:
                        case 189:
                        case 190:
                        case 191:
                        case 218:
                        case 228:
                        case 229:
                        case 230:
                        case 231:
                        case 232:
                        case 233:
                        case 234:
                            {
                            alt289=1;
                            }
                            break;
                        case RULE_REF:
                            {
                            alt289=2;
                            }
                            break;

                        }

                        switch (alt289) {
                    	case 1 :
                    	    // InternalContextMappingDSL.g:11866:5: ( (lv_attributes_22_0= ruleDtoAttribute ) )
                    	    {
                    	    // InternalContextMappingDSL.g:11866:5: ( (lv_attributes_22_0= ruleDtoAttribute ) )
                    	    // InternalContextMappingDSL.g:11867:6: (lv_attributes_22_0= ruleDtoAttribute )
                    	    {
                    	    // InternalContextMappingDSL.g:11867:6: (lv_attributes_22_0= ruleDtoAttribute )
                    	    // InternalContextMappingDSL.g:11868:7: lv_attributes_22_0= ruleDtoAttribute
                    	    {

                    	    							newCompositeNode(grammarAccess.getDataTransferObjectAccess().getAttributesDtoAttributeParserRuleCall_6_3_0_0());
                    	    						
                    	    pushFollow(FOLLOW_158);
                    	    lv_attributes_22_0=ruleDtoAttribute();

                    	    state._fsp--;


                    	    							if (current==null) {
                    	    								current = createModelElementForParent(grammarAccess.getDataTransferObjectRule());
                    	    							}
                    	    							add(
                    	    								current,
                    	    								"attributes",
                    	    								lv_attributes_22_0,
                    	    								"org.contextmapper.tactic.dsl.TacticDDDLanguage.DtoAttribute");
                    	    							afterParserOrEnumRuleCall();
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 2 :
                    	    // InternalContextMappingDSL.g:11886:5: ( (lv_references_23_0= ruleDtoReference ) )
                    	    {
                    	    // InternalContextMappingDSL.g:11886:5: ( (lv_references_23_0= ruleDtoReference ) )
                    	    // InternalContextMappingDSL.g:11887:6: (lv_references_23_0= ruleDtoReference )
                    	    {
                    	    // InternalContextMappingDSL.g:11887:6: (lv_references_23_0= ruleDtoReference )
                    	    // InternalContextMappingDSL.g:11888:7: lv_references_23_0= ruleDtoReference
                    	    {

                    	    							newCompositeNode(grammarAccess.getDataTransferObjectAccess().getReferencesDtoReferenceParserRuleCall_6_3_1_0());
                    	    						
                    	    pushFollow(FOLLOW_158);
                    	    lv_references_23_0=ruleDtoReference();

                    	    state._fsp--;


                    	    							if (current==null) {
                    	    								current = createModelElementForParent(grammarAccess.getDataTransferObjectRule());
                    	    							}
                    	    							add(
                    	    								current,
                    	    								"references",
                    	    								lv_references_23_0,
                    	    								"org.contextmapper.tactic.dsl.TacticDDDLanguage.DtoReference");
                    	    							afterParserOrEnumRuleCall();
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop289;
                        }
                    } while (true);

                    otherlv_24=(Token)match(input,RULE_CLOSE,FOLLOW_2); 

                    				newLeafNode(otherlv_24, grammarAccess.getDataTransferObjectAccess().getRightCurlyBracketKeyword_6_4());
                    			

                    }
                    break;

            }


            }


            }


            	leaveRule();

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleDataTransferObject"


    // $ANTLR start "entryRuleBasicType"
    // InternalContextMappingDSL.g:11915:1: entryRuleBasicType returns [EObject current=null] : iv_ruleBasicType= ruleBasicType EOF ;
    public final EObject entryRuleBasicType() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleBasicType = null;


        try {
            // InternalContextMappingDSL.g:11915:50: (iv_ruleBasicType= ruleBasicType EOF )
            // InternalContextMappingDSL.g:11916:2: iv_ruleBasicType= ruleBasicType EOF
            {
             newCompositeNode(grammarAccess.getBasicTypeRule()); 
            pushFollow(FOLLOW_1);
            iv_ruleBasicType=ruleBasicType();

            state._fsp--;

             current =iv_ruleBasicType; 
            match(input,EOF,FOLLOW_2); 

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleBasicType"


    // $ANTLR start "ruleBasicType"
    // InternalContextMappingDSL.g:11922:1: ruleBasicType returns [EObject current=null] : ( ( (lv_doc_0_0= RULE_STRING ) )? otherlv_1= 'BasicType' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= 'with' (otherlv_4= '@' )? ( (otherlv_5= RULE_ID ) ) )* (otherlv_6= '{' (otherlv_7= 'package' otherlv_8= '=' ( (lv_package_9_0= ruleJavaIdentifier ) ) )? ( ( ( ( ({...}? => ( ({...}? => ( ( ( (lv_notImmutable_11_0= RULE_NOT ) ) otherlv_12= 'immutable' ) | otherlv_13= 'immutable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_14_0= 'gap' ) ) | ( (lv_noGapClass_15_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_16= 'hint' otherlv_17= '=' ( (lv_hint_18_0= RULE_STRING ) ) ) ) ) ) )* ) ) ) ( ( (lv_attributes_19_0= ruleAttribute ) ) | ( (lv_references_20_0= ruleReference ) ) | ( (lv_operations_21_0= ruleDomainObjectOperation ) ) )* otherlv_22= '}' )? ) ;
    public final EObject ruleBasicType() throws RecognitionException {
        EObject current = null;

        Token lv_doc_0_0=null;
        Token otherlv_1=null;
        Token lv_name_2_0=null;
        Token otherlv_3=null;
        Token otherlv_4=null;
        Token otherlv_5=null;
        Token otherlv_6=null;
        Token otherlv_7=null;
        Token otherlv_8=null;
        Token lv_notImmutable_11_0=null;
        Token otherlv_12=null;
        Token otherlv_13=null;
        Token lv_gapClass_14_0=null;
        Token lv_noGapClass_15_0=null;
        Token otherlv_16=null;
        Token otherlv_17=null;
        Token lv_hint_18_0=null;
        Token otherlv_22=null;
        AntlrDatatypeRuleToken lv_package_9_0 = null;

        EObject lv_attributes_19_0 = null;

        EObject lv_references_20_0 = null;

        EObject lv_operations_21_0 = null;



        	enterRule();

        try {
            // InternalContextMappingDSL.g:11928:2: ( ( ( (lv_doc_0_0= RULE_STRING ) )? otherlv_1= 'BasicType' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= 'with' (otherlv_4= '@' )? ( (otherlv_5= RULE_ID ) ) )* (otherlv_6= '{' (otherlv_7= 'package' otherlv_8= '=' ( (lv_package_9_0= ruleJavaIdentifier ) ) )? ( ( ( ( ({...}? => ( ({...}? => ( ( ( (lv_notImmutable_11_0= RULE_NOT ) ) otherlv_12= 'immutable' ) | otherlv_13= 'immutable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_14_0= 'gap' ) ) | ( (lv_noGapClass_15_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_16= 'hint' otherlv_17= '=' ( (lv_hint_18_0= RULE_STRING ) ) ) ) ) ) )* ) ) ) ( ( (lv_attributes_19_0= ruleAttribute ) ) | ( (lv_references_20_0= ruleReference ) ) | ( (lv_operations_21_0= ruleDomainObjectOperation ) ) )* otherlv_22= '}' )? ) )
            // InternalContextMappingDSL.g:11929:2: ( ( (lv_doc_0_0= RULE_STRING ) )? otherlv_1= 'BasicType' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= 'with' (otherlv_4= '@' )? ( (otherlv_5= RULE_ID ) ) )* (otherlv_6= '{' (otherlv_7= 'package' otherlv_8= '=' ( (lv_package_9_0= ruleJavaIdentifier ) ) )? ( ( ( ( ({...}? => ( ({...}? => ( ( ( (lv_notImmutable_11_0= RULE_NOT ) ) otherlv_12= 'immutable' ) | otherlv_13= 'immutable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_14_0= 'gap' ) ) | ( (lv_noGapClass_15_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_16= 'hint' otherlv_17= '=' ( (lv_hint_18_0= RULE_STRING ) ) ) ) ) ) )* ) ) ) ( ( (lv_attributes_19_0= ruleAttribute ) ) | ( (lv_references_20_0= ruleReference ) ) | ( (lv_operations_21_0= ruleDomainObjectOperation ) ) )* otherlv_22= '}' )? )
            {
            // InternalContextMappingDSL.g:11929:2: ( ( (lv_doc_0_0= RULE_STRING ) )? otherlv_1= 'BasicType' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= 'with' (otherlv_4= '@' )? ( (otherlv_5= RULE_ID ) ) )* (otherlv_6= '{' (otherlv_7= 'package' otherlv_8= '=' ( (lv_package_9_0= ruleJavaIdentifier ) ) )? ( ( ( ( ({...}? => ( ({...}? => ( ( ( (lv_notImmutable_11_0= RULE_NOT ) ) otherlv_12= 'immutable' ) | otherlv_13= 'immutable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_14_0= 'gap' ) ) | ( (lv_noGapClass_15_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_16= 'hint' otherlv_17= '=' ( (lv_hint_18_0= RULE_STRING ) ) ) ) ) ) )* ) ) ) ( ( (lv_attributes_19_0= ruleAttribute ) ) | ( (lv_references_20_0= ruleReference ) ) | ( (lv_operations_21_0= ruleDomainObjectOperation ) ) )* otherlv_22= '}' )? )
            // InternalContextMappingDSL.g:11930:3: ( (lv_doc_0_0= RULE_STRING ) )? otherlv_1= 'BasicType' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= 'with' (otherlv_4= '@' )? ( (otherlv_5= RULE_ID ) ) )* (otherlv_6= '{' (otherlv_7= 'package' otherlv_8= '=' ( (lv_package_9_0= ruleJavaIdentifier ) ) )? ( ( ( ( ({...}? => ( ({...}? => ( ( ( (lv_notImmutable_11_0= RULE_NOT ) ) otherlv_12= 'immutable' ) | otherlv_13= 'immutable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_14_0= 'gap' ) ) | ( (lv_noGapClass_15_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_16= 'hint' otherlv_17= '=' ( (lv_hint_18_0= RULE_STRING ) ) ) ) ) ) )* ) ) ) ( ( (lv_attributes_19_0= ruleAttribute ) ) | ( (lv_references_20_0= ruleReference ) ) | ( (lv_operations_21_0= ruleDomainObjectOperation ) ) )* otherlv_22= '}' )?
            {
            // InternalContextMappingDSL.g:11930:3: ( (lv_doc_0_0= RULE_STRING ) )?
            int alt291=2;
            int LA291_0 = input.LA(1);

            if ( (LA291_0==RULE_STRING) ) {
                alt291=1;
            }
            switch (alt291) {
                case 1 :
                    // InternalContextMappingDSL.g:11931:4: (lv_doc_0_0= RULE_STRING )
                    {
                    // InternalContextMappingDSL.g:11931:4: (lv_doc_0_0= RULE_STRING )
                    // InternalContextMappingDSL.g:11932:5: lv_doc_0_0= RULE_STRING
                    {
                    lv_doc_0_0=(Token)match(input,RULE_STRING,FOLLOW_159); 

                    					newLeafNode(lv_doc_0_0, grammarAccess.getBasicTypeAccess().getDocSTRINGTerminalRuleCall_0_0());
                    				

                    					if (current==null) {
                    						current = createModelElement(grammarAccess.getBasicTypeRule());
                    					}
                    					setWithLastConsumed(
                    						current,
                    						"doc",
                    						lv_doc_0_0,
                    						"org.eclipse.xtext.common.Terminals.STRING");
                    				

                    }


                    }
                    break;

            }

            otherlv_1=(Token)match(input,130,FOLLOW_10); 

            			newLeafNode(otherlv_1, grammarAccess.getBasicTypeAccess().getBasicTypeKeyword_1());
            		
            // InternalContextMappingDSL.g:11952:3: ( (lv_name_2_0= RULE_ID ) )
            // InternalContextMappingDSL.g:11953:4: (lv_name_2_0= RULE_ID )
            {
            // InternalContextMappingDSL.g:11953:4: (lv_name_2_0= RULE_ID )
            // InternalContextMappingDSL.g:11954:5: lv_name_2_0= RULE_ID
            {
            lv_name_2_0=(Token)match(input,RULE_ID,FOLLOW_125); 

            					newLeafNode(lv_name_2_0, grammarAccess.getBasicTypeAccess().getNameIDTerminalRuleCall_2_0());
            				

            					if (current==null) {
            						current = createModelElement(grammarAccess.getBasicTypeRule());
            					}
            					setWithLastConsumed(
            						current,
            						"name",
            						lv_name_2_0,
            						"org.eclipse.xtext.common.Terminals.ID");
            				

            }


            }

            // InternalContextMappingDSL.g:11970:3: (otherlv_3= 'with' (otherlv_4= '@' )? ( (otherlv_5= RULE_ID ) ) )*
            loop293:
            do {
                int alt293=2;
                int LA293_0 = input.LA(1);

                if ( (LA293_0==108) ) {
                    alt293=1;
                }


                switch (alt293) {
            	case 1 :
            	    // InternalContextMappingDSL.g:11971:4: otherlv_3= 'with' (otherlv_4= '@' )? ( (otherlv_5= RULE_ID ) )
            	    {
            	    otherlv_3=(Token)match(input,108,FOLLOW_96); 

            	    				newLeafNode(otherlv_3, grammarAccess.getBasicTypeAccess().getWithKeyword_3_0());
            	    			
            	    // InternalContextMappingDSL.g:11975:4: (otherlv_4= '@' )?
            	    int alt292=2;
            	    int LA292_0 = input.LA(1);

            	    if ( (LA292_0==79) ) {
            	        alt292=1;
            	    }
            	    switch (alt292) {
            	        case 1 :
            	            // InternalContextMappingDSL.g:11976:5: otherlv_4= '@'
            	            {
            	            otherlv_4=(Token)match(input,79,FOLLOW_10); 

            	            					newLeafNode(otherlv_4, grammarAccess.getBasicTypeAccess().getCommercialAtKeyword_3_1());
            	            				

            	            }
            	            break;

            	    }

            	    // InternalContextMappingDSL.g:11981:4: ( (otherlv_5= RULE_ID ) )
            	    // InternalContextMappingDSL.g:11982:5: (otherlv_5= RULE_ID )
            	    {
            	    // InternalContextMappingDSL.g:11982:5: (otherlv_5= RULE_ID )
            	    // InternalContextMappingDSL.g:11983:6: otherlv_5= RULE_ID
            	    {

            	    						if (current==null) {
            	    							current = createModelElement(grammarAccess.getBasicTypeRule());
            	    						}
            	    					
            	    otherlv_5=(Token)match(input,RULE_ID,FOLLOW_125); 

            	    						newLeafNode(otherlv_5, grammarAccess.getBasicTypeAccess().getTraitsTraitCrossReference_3_2_0());
            	    					

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop293;
                }
            } while (true);

            // InternalContextMappingDSL.g:11995:3: (otherlv_6= '{' (otherlv_7= 'package' otherlv_8= '=' ( (lv_package_9_0= ruleJavaIdentifier ) ) )? ( ( ( ( ({...}? => ( ({...}? => ( ( ( (lv_notImmutable_11_0= RULE_NOT ) ) otherlv_12= 'immutable' ) | otherlv_13= 'immutable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_14_0= 'gap' ) ) | ( (lv_noGapClass_15_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_16= 'hint' otherlv_17= '=' ( (lv_hint_18_0= RULE_STRING ) ) ) ) ) ) )* ) ) ) ( ( (lv_attributes_19_0= ruleAttribute ) ) | ( (lv_references_20_0= ruleReference ) ) | ( (lv_operations_21_0= ruleDomainObjectOperation ) ) )* otherlv_22= '}' )?
            int alt299=2;
            int LA299_0 = input.LA(1);

            if ( (LA299_0==RULE_OPEN) ) {
                alt299=1;
            }
            switch (alt299) {
                case 1 :
                    // InternalContextMappingDSL.g:11996:4: otherlv_6= '{' (otherlv_7= 'package' otherlv_8= '=' ( (lv_package_9_0= ruleJavaIdentifier ) ) )? ( ( ( ( ({...}? => ( ({...}? => ( ( ( (lv_notImmutable_11_0= RULE_NOT ) ) otherlv_12= 'immutable' ) | otherlv_13= 'immutable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_14_0= 'gap' ) ) | ( (lv_noGapClass_15_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_16= 'hint' otherlv_17= '=' ( (lv_hint_18_0= RULE_STRING ) ) ) ) ) ) )* ) ) ) ( ( (lv_attributes_19_0= ruleAttribute ) ) | ( (lv_references_20_0= ruleReference ) ) | ( (lv_operations_21_0= ruleDomainObjectOperation ) ) )* otherlv_22= '}'
                    {
                    otherlv_6=(Token)match(input,RULE_OPEN,FOLLOW_160); 

                    				newLeafNode(otherlv_6, grammarAccess.getBasicTypeAccess().getLeftCurlyBracketKeyword_4_0());
                    			
                    // InternalContextMappingDSL.g:12000:4: (otherlv_7= 'package' otherlv_8= '=' ( (lv_package_9_0= ruleJavaIdentifier ) ) )?
                    int alt294=2;
                    int LA294_0 = input.LA(1);

                    if ( (LA294_0==109) ) {
                        int LA294_1 = input.LA(2);

                        if ( (LA294_1==21) ) {
                            alt294=1;
                        }
                    }
                    switch (alt294) {
                        case 1 :
                            // InternalContextMappingDSL.g:12001:5: otherlv_7= 'package' otherlv_8= '=' ( (lv_package_9_0= ruleJavaIdentifier ) )
                            {
                            otherlv_7=(Token)match(input,109,FOLLOW_81); 

                            					newLeafNode(otherlv_7, grammarAccess.getBasicTypeAccess().getPackageKeyword_4_1_0());
                            				
                            otherlv_8=(Token)match(input,21,FOLLOW_10); 

                            					newLeafNode(otherlv_8, grammarAccess.getBasicTypeAccess().getEqualsSignKeyword_4_1_1());
                            				
                            // InternalContextMappingDSL.g:12009:5: ( (lv_package_9_0= ruleJavaIdentifier ) )
                            // InternalContextMappingDSL.g:12010:6: (lv_package_9_0= ruleJavaIdentifier )
                            {
                            // InternalContextMappingDSL.g:12010:6: (lv_package_9_0= ruleJavaIdentifier )
                            // InternalContextMappingDSL.g:12011:7: lv_package_9_0= ruleJavaIdentifier
                            {

                            							newCompositeNode(grammarAccess.getBasicTypeAccess().getPackageJavaIdentifierParserRuleCall_4_1_2_0());
                            						
                            pushFollow(FOLLOW_160);
                            lv_package_9_0=ruleJavaIdentifier();

                            state._fsp--;


                            							if (current==null) {
                            								current = createModelElementForParent(grammarAccess.getBasicTypeRule());
                            							}
                            							set(
                            								current,
                            								"package",
                            								lv_package_9_0,
                            								"org.contextmapper.tactic.dsl.TacticDDDLanguage.JavaIdentifier");
                            							afterParserOrEnumRuleCall();
                            						

                            }


                            }


                            }
                            break;

                    }

                    // InternalContextMappingDSL.g:12029:4: ( ( ( ( ({...}? => ( ({...}? => ( ( ( (lv_notImmutable_11_0= RULE_NOT ) ) otherlv_12= 'immutable' ) | otherlv_13= 'immutable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_14_0= 'gap' ) ) | ( (lv_noGapClass_15_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_16= 'hint' otherlv_17= '=' ( (lv_hint_18_0= RULE_STRING ) ) ) ) ) ) )* ) ) )
                    // InternalContextMappingDSL.g:12030:5: ( ( ( ({...}? => ( ({...}? => ( ( ( (lv_notImmutable_11_0= RULE_NOT ) ) otherlv_12= 'immutable' ) | otherlv_13= 'immutable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_14_0= 'gap' ) ) | ( (lv_noGapClass_15_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_16= 'hint' otherlv_17= '=' ( (lv_hint_18_0= RULE_STRING ) ) ) ) ) ) )* ) )
                    {
                    // InternalContextMappingDSL.g:12030:5: ( ( ( ({...}? => ( ({...}? => ( ( ( (lv_notImmutable_11_0= RULE_NOT ) ) otherlv_12= 'immutable' ) | otherlv_13= 'immutable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_14_0= 'gap' ) ) | ( (lv_noGapClass_15_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_16= 'hint' otherlv_17= '=' ( (lv_hint_18_0= RULE_STRING ) ) ) ) ) ) )* ) )
                    // InternalContextMappingDSL.g:12031:6: ( ( ({...}? => ( ({...}? => ( ( ( (lv_notImmutable_11_0= RULE_NOT ) ) otherlv_12= 'immutable' ) | otherlv_13= 'immutable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_14_0= 'gap' ) ) | ( (lv_noGapClass_15_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_16= 'hint' otherlv_17= '=' ( (lv_hint_18_0= RULE_STRING ) ) ) ) ) ) )* )
                    {
                     
                    					  getUnorderedGroupHelper().enter(grammarAccess.getBasicTypeAccess().getUnorderedGroup_4_2());
                    					
                    // InternalContextMappingDSL.g:12034:6: ( ( ({...}? => ( ({...}? => ( ( ( (lv_notImmutable_11_0= RULE_NOT ) ) otherlv_12= 'immutable' ) | otherlv_13= 'immutable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_14_0= 'gap' ) ) | ( (lv_noGapClass_15_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_16= 'hint' otherlv_17= '=' ( (lv_hint_18_0= RULE_STRING ) ) ) ) ) ) )* )
                    // InternalContextMappingDSL.g:12035:7: ( ({...}? => ( ({...}? => ( ( ( (lv_notImmutable_11_0= RULE_NOT ) ) otherlv_12= 'immutable' ) | otherlv_13= 'immutable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_14_0= 'gap' ) ) | ( (lv_noGapClass_15_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_16= 'hint' otherlv_17= '=' ( (lv_hint_18_0= RULE_STRING ) ) ) ) ) ) )*
                    {
                    // InternalContextMappingDSL.g:12035:7: ( ({...}? => ( ({...}? => ( ( ( (lv_notImmutable_11_0= RULE_NOT ) ) otherlv_12= 'immutable' ) | otherlv_13= 'immutable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_14_0= 'gap' ) ) | ( (lv_noGapClass_15_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_16= 'hint' otherlv_17= '=' ( (lv_hint_18_0= RULE_STRING ) ) ) ) ) ) )*
                    loop297:
                    do {
                        int alt297=4;
                        int LA297_0 = input.LA(1);

                        if ( ( LA297_0 == RULE_NOT || LA297_0 == 122 ) && getUnorderedGroupHelper().canSelect(grammarAccess.getBasicTypeAccess().getUnorderedGroup_4_2(), 0) ) {
                            alt297=1;
                        }
                        else if ( LA297_0 >= 71 && LA297_0 <= 72 && getUnorderedGroupHelper().canSelect(grammarAccess.getBasicTypeAccess().getUnorderedGroup_4_2(), 1) ) {
                            alt297=2;
                        }
                        else if ( LA297_0 == 67 && getUnorderedGroupHelper().canSelect(grammarAccess.getBasicTypeAccess().getUnorderedGroup_4_2(), 2) ) {
                            alt297=3;
                        }


                        switch (alt297) {
                    	case 1 :
                    	    // InternalContextMappingDSL.g:12036:5: ({...}? => ( ({...}? => ( ( ( (lv_notImmutable_11_0= RULE_NOT ) ) otherlv_12= 'immutable' ) | otherlv_13= 'immutable' ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:12036:5: ({...}? => ( ({...}? => ( ( ( (lv_notImmutable_11_0= RULE_NOT ) ) otherlv_12= 'immutable' ) | otherlv_13= 'immutable' ) ) ) )
                    	    // InternalContextMappingDSL.g:12037:6: {...}? => ( ({...}? => ( ( ( (lv_notImmutable_11_0= RULE_NOT ) ) otherlv_12= 'immutable' ) | otherlv_13= 'immutable' ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getBasicTypeAccess().getUnorderedGroup_4_2(), 0) ) {
                    	        throw new FailedPredicateException(input, "ruleBasicType", "getUnorderedGroupHelper().canSelect(grammarAccess.getBasicTypeAccess().getUnorderedGroup_4_2(), 0)");
                    	    }
                    	    // InternalContextMappingDSL.g:12037:109: ( ({...}? => ( ( ( (lv_notImmutable_11_0= RULE_NOT ) ) otherlv_12= 'immutable' ) | otherlv_13= 'immutable' ) ) )
                    	    // InternalContextMappingDSL.g:12038:7: ({...}? => ( ( ( (lv_notImmutable_11_0= RULE_NOT ) ) otherlv_12= 'immutable' ) | otherlv_13= 'immutable' ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getBasicTypeAccess().getUnorderedGroup_4_2(), 0);
                    	    						
                    	    // InternalContextMappingDSL.g:12041:10: ({...}? => ( ( ( (lv_notImmutable_11_0= RULE_NOT ) ) otherlv_12= 'immutable' ) | otherlv_13= 'immutable' ) )
                    	    // InternalContextMappingDSL.g:12041:11: {...}? => ( ( ( (lv_notImmutable_11_0= RULE_NOT ) ) otherlv_12= 'immutable' ) | otherlv_13= 'immutable' )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleBasicType", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:12041:20: ( ( ( (lv_notImmutable_11_0= RULE_NOT ) ) otherlv_12= 'immutable' ) | otherlv_13= 'immutable' )
                    	    int alt295=2;
                    	    int LA295_0 = input.LA(1);

                    	    if ( (LA295_0==RULE_NOT) ) {
                    	        alt295=1;
                    	    }
                    	    else if ( (LA295_0==122) ) {
                    	        alt295=2;
                    	    }
                    	    else {
                    	        NoViableAltException nvae =
                    	            new NoViableAltException("", 295, 0, input);

                    	        throw nvae;
                    	    }
                    	    switch (alt295) {
                    	        case 1 :
                    	            // InternalContextMappingDSL.g:12041:21: ( ( (lv_notImmutable_11_0= RULE_NOT ) ) otherlv_12= 'immutable' )
                    	            {
                    	            // InternalContextMappingDSL.g:12041:21: ( ( (lv_notImmutable_11_0= RULE_NOT ) ) otherlv_12= 'immutable' )
                    	            // InternalContextMappingDSL.g:12042:11: ( (lv_notImmutable_11_0= RULE_NOT ) ) otherlv_12= 'immutable'
                    	            {
                    	            // InternalContextMappingDSL.g:12042:11: ( (lv_notImmutable_11_0= RULE_NOT ) )
                    	            // InternalContextMappingDSL.g:12043:12: (lv_notImmutable_11_0= RULE_NOT )
                    	            {
                    	            // InternalContextMappingDSL.g:12043:12: (lv_notImmutable_11_0= RULE_NOT )
                    	            // InternalContextMappingDSL.g:12044:13: lv_notImmutable_11_0= RULE_NOT
                    	            {
                    	            lv_notImmutable_11_0=(Token)match(input,RULE_NOT,FOLLOW_137); 

                    	            													newLeafNode(lv_notImmutable_11_0, grammarAccess.getBasicTypeAccess().getNotImmutableNOTTerminalRuleCall_4_2_0_0_0_0());
                    	            												

                    	            													if (current==null) {
                    	            														current = createModelElement(grammarAccess.getBasicTypeRule());
                    	            													}
                    	            													setWithLastConsumed(
                    	            														current,
                    	            														"notImmutable",
                    	            														true,
                    	            														"org.contextmapper.tactic.dsl.TacticDDDLanguage.NOT");
                    	            												

                    	            }


                    	            }

                    	            otherlv_12=(Token)match(input,122,FOLLOW_160); 

                    	            											newLeafNode(otherlv_12, grammarAccess.getBasicTypeAccess().getImmutableKeyword_4_2_0_0_1());
                    	            										

                    	            }


                    	            }
                    	            break;
                    	        case 2 :
                    	            // InternalContextMappingDSL.g:12066:10: otherlv_13= 'immutable'
                    	            {
                    	            otherlv_13=(Token)match(input,122,FOLLOW_160); 

                    	            										newLeafNode(otherlv_13, grammarAccess.getBasicTypeAccess().getImmutableKeyword_4_2_0_1());
                    	            									

                    	            }
                    	            break;

                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getBasicTypeAccess().getUnorderedGroup_4_2());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 2 :
                    	    // InternalContextMappingDSL.g:12076:5: ({...}? => ( ({...}? => ( ( (lv_gapClass_14_0= 'gap' ) ) | ( (lv_noGapClass_15_0= 'nogap' ) ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:12076:5: ({...}? => ( ({...}? => ( ( (lv_gapClass_14_0= 'gap' ) ) | ( (lv_noGapClass_15_0= 'nogap' ) ) ) ) ) )
                    	    // InternalContextMappingDSL.g:12077:6: {...}? => ( ({...}? => ( ( (lv_gapClass_14_0= 'gap' ) ) | ( (lv_noGapClass_15_0= 'nogap' ) ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getBasicTypeAccess().getUnorderedGroup_4_2(), 1) ) {
                    	        throw new FailedPredicateException(input, "ruleBasicType", "getUnorderedGroupHelper().canSelect(grammarAccess.getBasicTypeAccess().getUnorderedGroup_4_2(), 1)");
                    	    }
                    	    // InternalContextMappingDSL.g:12077:109: ( ({...}? => ( ( (lv_gapClass_14_0= 'gap' ) ) | ( (lv_noGapClass_15_0= 'nogap' ) ) ) ) )
                    	    // InternalContextMappingDSL.g:12078:7: ({...}? => ( ( (lv_gapClass_14_0= 'gap' ) ) | ( (lv_noGapClass_15_0= 'nogap' ) ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getBasicTypeAccess().getUnorderedGroup_4_2(), 1);
                    	    						
                    	    // InternalContextMappingDSL.g:12081:10: ({...}? => ( ( (lv_gapClass_14_0= 'gap' ) ) | ( (lv_noGapClass_15_0= 'nogap' ) ) ) )
                    	    // InternalContextMappingDSL.g:12081:11: {...}? => ( ( (lv_gapClass_14_0= 'gap' ) ) | ( (lv_noGapClass_15_0= 'nogap' ) ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleBasicType", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:12081:20: ( ( (lv_gapClass_14_0= 'gap' ) ) | ( (lv_noGapClass_15_0= 'nogap' ) ) )
                    	    int alt296=2;
                    	    int LA296_0 = input.LA(1);

                    	    if ( (LA296_0==71) ) {
                    	        alt296=1;
                    	    }
                    	    else if ( (LA296_0==72) ) {
                    	        alt296=2;
                    	    }
                    	    else {
                    	        NoViableAltException nvae =
                    	            new NoViableAltException("", 296, 0, input);

                    	        throw nvae;
                    	    }
                    	    switch (alt296) {
                    	        case 1 :
                    	            // InternalContextMappingDSL.g:12081:21: ( (lv_gapClass_14_0= 'gap' ) )
                    	            {
                    	            // InternalContextMappingDSL.g:12081:21: ( (lv_gapClass_14_0= 'gap' ) )
                    	            // InternalContextMappingDSL.g:12082:11: (lv_gapClass_14_0= 'gap' )
                    	            {
                    	            // InternalContextMappingDSL.g:12082:11: (lv_gapClass_14_0= 'gap' )
                    	            // InternalContextMappingDSL.g:12083:12: lv_gapClass_14_0= 'gap'
                    	            {
                    	            lv_gapClass_14_0=(Token)match(input,71,FOLLOW_160); 

                    	            												newLeafNode(lv_gapClass_14_0, grammarAccess.getBasicTypeAccess().getGapClassGapKeyword_4_2_1_0_0());
                    	            											

                    	            												if (current==null) {
                    	            													current = createModelElement(grammarAccess.getBasicTypeRule());
                    	            												}
                    	            												setWithLastConsumed(current, "gapClass", true, "gap");
                    	            											

                    	            }


                    	            }


                    	            }
                    	            break;
                    	        case 2 :
                    	            // InternalContextMappingDSL.g:12096:10: ( (lv_noGapClass_15_0= 'nogap' ) )
                    	            {
                    	            // InternalContextMappingDSL.g:12096:10: ( (lv_noGapClass_15_0= 'nogap' ) )
                    	            // InternalContextMappingDSL.g:12097:11: (lv_noGapClass_15_0= 'nogap' )
                    	            {
                    	            // InternalContextMappingDSL.g:12097:11: (lv_noGapClass_15_0= 'nogap' )
                    	            // InternalContextMappingDSL.g:12098:12: lv_noGapClass_15_0= 'nogap'
                    	            {
                    	            lv_noGapClass_15_0=(Token)match(input,72,FOLLOW_160); 

                    	            												newLeafNode(lv_noGapClass_15_0, grammarAccess.getBasicTypeAccess().getNoGapClassNogapKeyword_4_2_1_1_0());
                    	            											

                    	            												if (current==null) {
                    	            													current = createModelElement(grammarAccess.getBasicTypeRule());
                    	            												}
                    	            												setWithLastConsumed(current, "noGapClass", true, "nogap");
                    	            											

                    	            }


                    	            }


                    	            }
                    	            break;

                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getBasicTypeAccess().getUnorderedGroup_4_2());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 3 :
                    	    // InternalContextMappingDSL.g:12116:5: ({...}? => ( ({...}? => (otherlv_16= 'hint' otherlv_17= '=' ( (lv_hint_18_0= RULE_STRING ) ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:12116:5: ({...}? => ( ({...}? => (otherlv_16= 'hint' otherlv_17= '=' ( (lv_hint_18_0= RULE_STRING ) ) ) ) ) )
                    	    // InternalContextMappingDSL.g:12117:6: {...}? => ( ({...}? => (otherlv_16= 'hint' otherlv_17= '=' ( (lv_hint_18_0= RULE_STRING ) ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getBasicTypeAccess().getUnorderedGroup_4_2(), 2) ) {
                    	        throw new FailedPredicateException(input, "ruleBasicType", "getUnorderedGroupHelper().canSelect(grammarAccess.getBasicTypeAccess().getUnorderedGroup_4_2(), 2)");
                    	    }
                    	    // InternalContextMappingDSL.g:12117:109: ( ({...}? => (otherlv_16= 'hint' otherlv_17= '=' ( (lv_hint_18_0= RULE_STRING ) ) ) ) )
                    	    // InternalContextMappingDSL.g:12118:7: ({...}? => (otherlv_16= 'hint' otherlv_17= '=' ( (lv_hint_18_0= RULE_STRING ) ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getBasicTypeAccess().getUnorderedGroup_4_2(), 2);
                    	    						
                    	    // InternalContextMappingDSL.g:12121:10: ({...}? => (otherlv_16= 'hint' otherlv_17= '=' ( (lv_hint_18_0= RULE_STRING ) ) ) )
                    	    // InternalContextMappingDSL.g:12121:11: {...}? => (otherlv_16= 'hint' otherlv_17= '=' ( (lv_hint_18_0= RULE_STRING ) ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleBasicType", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:12121:20: (otherlv_16= 'hint' otherlv_17= '=' ( (lv_hint_18_0= RULE_STRING ) ) )
                    	    // InternalContextMappingDSL.g:12121:21: otherlv_16= 'hint' otherlv_17= '=' ( (lv_hint_18_0= RULE_STRING ) )
                    	    {
                    	    otherlv_16=(Token)match(input,67,FOLLOW_81); 

                    	    										newLeafNode(otherlv_16, grammarAccess.getBasicTypeAccess().getHintKeyword_4_2_2_0());
                    	    									
                    	    otherlv_17=(Token)match(input,21,FOLLOW_4); 

                    	    										newLeafNode(otherlv_17, grammarAccess.getBasicTypeAccess().getEqualsSignKeyword_4_2_2_1());
                    	    									
                    	    // InternalContextMappingDSL.g:12129:10: ( (lv_hint_18_0= RULE_STRING ) )
                    	    // InternalContextMappingDSL.g:12130:11: (lv_hint_18_0= RULE_STRING )
                    	    {
                    	    // InternalContextMappingDSL.g:12130:11: (lv_hint_18_0= RULE_STRING )
                    	    // InternalContextMappingDSL.g:12131:12: lv_hint_18_0= RULE_STRING
                    	    {
                    	    lv_hint_18_0=(Token)match(input,RULE_STRING,FOLLOW_160); 

                    	    												newLeafNode(lv_hint_18_0, grammarAccess.getBasicTypeAccess().getHintSTRINGTerminalRuleCall_4_2_2_2_0());
                    	    											

                    	    												if (current==null) {
                    	    													current = createModelElement(grammarAccess.getBasicTypeRule());
                    	    												}
                    	    												setWithLastConsumed(
                    	    													current,
                    	    													"hint",
                    	    													lv_hint_18_0,
                    	    													"org.eclipse.xtext.common.Terminals.STRING");
                    	    											

                    	    }


                    	    }


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getBasicTypeAccess().getUnorderedGroup_4_2());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop297;
                        }
                    } while (true);


                    }


                    }

                     
                    					  getUnorderedGroupHelper().leave(grammarAccess.getBasicTypeAccess().getUnorderedGroup_4_2());
                    					

                    }

                    // InternalContextMappingDSL.g:12160:4: ( ( (lv_attributes_19_0= ruleAttribute ) ) | ( (lv_references_20_0= ruleReference ) ) | ( (lv_operations_21_0= ruleDomainObjectOperation ) ) )*
                    loop298:
                    do {
                        int alt298=4;
                        switch ( input.LA(1) ) {
                        case RULE_STRING:
                            {
                            switch ( input.LA(2) ) {
                            case 127:
                            case 128:
                                {
                                alt298=3;
                                }
                                break;
                            case RULE_REF:
                                {
                                alt298=2;
                                }
                                break;
                            case RULE_ID:
                            case 109:
                            case 170:
                            case 171:
                            case 172:
                            case 173:
                            case 174:
                            case 175:
                            case 176:
                            case 177:
                            case 178:
                            case 179:
                            case 180:
                            case 181:
                            case 182:
                            case 183:
                            case 184:
                            case 185:
                            case 186:
                            case 187:
                            case 188:
                            case 189:
                            case 190:
                            case 191:
                            case 218:
                            case 228:
                            case 229:
                            case 230:
                            case 231:
                            case 232:
                            case 233:
                            case 234:
                                {
                                alt298=1;
                                }
                                break;

                            }

                            }
                            break;
                        case RULE_ID:
                        case 109:
                        case 170:
                        case 171:
                        case 172:
                        case 173:
                        case 174:
                        case 175:
                        case 176:
                        case 177:
                        case 178:
                        case 179:
                        case 180:
                        case 181:
                        case 182:
                        case 183:
                        case 184:
                        case 185:
                        case 186:
                        case 187:
                        case 188:
                        case 189:
                        case 190:
                        case 191:
                        case 218:
                        case 228:
                        case 229:
                        case 230:
                        case 231:
                        case 232:
                        case 233:
                        case 234:
                            {
                            alt298=1;
                            }
                            break;
                        case RULE_REF:
                            {
                            alt298=2;
                            }
                            break;
                        case 127:
                        case 128:
                            {
                            alt298=3;
                            }
                            break;

                        }

                        switch (alt298) {
                    	case 1 :
                    	    // InternalContextMappingDSL.g:12161:5: ( (lv_attributes_19_0= ruleAttribute ) )
                    	    {
                    	    // InternalContextMappingDSL.g:12161:5: ( (lv_attributes_19_0= ruleAttribute ) )
                    	    // InternalContextMappingDSL.g:12162:6: (lv_attributes_19_0= ruleAttribute )
                    	    {
                    	    // InternalContextMappingDSL.g:12162:6: (lv_attributes_19_0= ruleAttribute )
                    	    // InternalContextMappingDSL.g:12163:7: lv_attributes_19_0= ruleAttribute
                    	    {

                    	    							newCompositeNode(grammarAccess.getBasicTypeAccess().getAttributesAttributeParserRuleCall_4_3_0_0());
                    	    						
                    	    pushFollow(FOLLOW_148);
                    	    lv_attributes_19_0=ruleAttribute();

                    	    state._fsp--;


                    	    							if (current==null) {
                    	    								current = createModelElementForParent(grammarAccess.getBasicTypeRule());
                    	    							}
                    	    							add(
                    	    								current,
                    	    								"attributes",
                    	    								lv_attributes_19_0,
                    	    								"org.contextmapper.tactic.dsl.TacticDDDLanguage.Attribute");
                    	    							afterParserOrEnumRuleCall();
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 2 :
                    	    // InternalContextMappingDSL.g:12181:5: ( (lv_references_20_0= ruleReference ) )
                    	    {
                    	    // InternalContextMappingDSL.g:12181:5: ( (lv_references_20_0= ruleReference ) )
                    	    // InternalContextMappingDSL.g:12182:6: (lv_references_20_0= ruleReference )
                    	    {
                    	    // InternalContextMappingDSL.g:12182:6: (lv_references_20_0= ruleReference )
                    	    // InternalContextMappingDSL.g:12183:7: lv_references_20_0= ruleReference
                    	    {

                    	    							newCompositeNode(grammarAccess.getBasicTypeAccess().getReferencesReferenceParserRuleCall_4_3_1_0());
                    	    						
                    	    pushFollow(FOLLOW_148);
                    	    lv_references_20_0=ruleReference();

                    	    state._fsp--;


                    	    							if (current==null) {
                    	    								current = createModelElementForParent(grammarAccess.getBasicTypeRule());
                    	    							}
                    	    							add(
                    	    								current,
                    	    								"references",
                    	    								lv_references_20_0,
                    	    								"org.contextmapper.tactic.dsl.TacticDDDLanguage.Reference");
                    	    							afterParserOrEnumRuleCall();
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 3 :
                    	    // InternalContextMappingDSL.g:12201:5: ( (lv_operations_21_0= ruleDomainObjectOperation ) )
                    	    {
                    	    // InternalContextMappingDSL.g:12201:5: ( (lv_operations_21_0= ruleDomainObjectOperation ) )
                    	    // InternalContextMappingDSL.g:12202:6: (lv_operations_21_0= ruleDomainObjectOperation )
                    	    {
                    	    // InternalContextMappingDSL.g:12202:6: (lv_operations_21_0= ruleDomainObjectOperation )
                    	    // InternalContextMappingDSL.g:12203:7: lv_operations_21_0= ruleDomainObjectOperation
                    	    {

                    	    							newCompositeNode(grammarAccess.getBasicTypeAccess().getOperationsDomainObjectOperationParserRuleCall_4_3_2_0());
                    	    						
                    	    pushFollow(FOLLOW_148);
                    	    lv_operations_21_0=ruleDomainObjectOperation();

                    	    state._fsp--;


                    	    							if (current==null) {
                    	    								current = createModelElementForParent(grammarAccess.getBasicTypeRule());
                    	    							}
                    	    							add(
                    	    								current,
                    	    								"operations",
                    	    								lv_operations_21_0,
                    	    								"org.contextmapper.tactic.dsl.TacticDDDLanguage.DomainObjectOperation");
                    	    							afterParserOrEnumRuleCall();
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop298;
                        }
                    } while (true);

                    otherlv_22=(Token)match(input,RULE_CLOSE,FOLLOW_2); 

                    				newLeafNode(otherlv_22, grammarAccess.getBasicTypeAccess().getRightCurlyBracketKeyword_4_4());
                    			

                    }
                    break;

            }


            }


            }


            	leaveRule();

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleBasicType"


    // $ANTLR start "entryRuleAttribute"
    // InternalContextMappingDSL.g:12230:1: entryRuleAttribute returns [EObject current=null] : iv_ruleAttribute= ruleAttribute EOF ;
    public final EObject entryRuleAttribute() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleAttribute = null;


        try {
            // InternalContextMappingDSL.g:12230:50: (iv_ruleAttribute= ruleAttribute EOF )
            // InternalContextMappingDSL.g:12231:2: iv_ruleAttribute= ruleAttribute EOF
            {
             newCompositeNode(grammarAccess.getAttributeRule()); 
            pushFollow(FOLLOW_1);
            iv_ruleAttribute=ruleAttribute();

            state._fsp--;

             current =iv_ruleAttribute; 
            match(input,EOF,FOLLOW_2); 

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleAttribute"


    // $ANTLR start "ruleAttribute"
    // InternalContextMappingDSL.g:12237:1: ruleAttribute returns [EObject current=null] : ( ( (lv_doc_0_0= RULE_STRING ) )? ( (lv_visibility_1_0= ruleVisibility ) )? ( ( ( (lv_collectionType_2_0= ruleCollectionType ) ) otherlv_3= '<' ( (lv_type_4_0= ruleType ) ) otherlv_5= '>' ) | ( (lv_type_6_0= ruleType ) ) ) ( (lv_name_7_0= RULE_ID ) ) ( ( ( ( ({...}? => ( ({...}? => ( (lv_key_9_0= 'key' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notChangeable_10_0= RULE_NOT ) ) otherlv_11= 'changeable' ) | otherlv_12= 'changeable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_required_13_0= 'required' ) ) | (this_NOT_14= RULE_NOT otherlv_15= 'required' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_nullable_16_0= 'nullable' ) ) | (this_NOT_17= RULE_NOT otherlv_18= 'nullable' ) ) (otherlv_19= '=' ( (lv_nullableMessage_20_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( (lv_index_21_0= 'index' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_assertFalse_22_0= 'assertFalse' ) ) (otherlv_23= '=' ( (lv_assertFalseMessage_24_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_assertTrue_25_0= 'assertTrue' ) ) (otherlv_26= '=' ( (lv_assertTrueMessage_27_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_28= 'hint' otherlv_29= '=' ( (lv_hint_30_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_creditCardNumber_31_0= 'creditCardNumber' ) ) (otherlv_32= '=' ( (lv_creditCardNumberMessage_33_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_34= 'digits' otherlv_35= '=' ( (lv_digits_36_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_email_37_0= 'email' ) ) (otherlv_38= '=' ( (lv_emailMessage_39_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_future_40_0= 'future' ) ) (otherlv_41= '=' ( (lv_futureMessage_42_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_past_43_0= 'past' ) ) (otherlv_44= '=' ( (lv_pastMessage_45_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_46= 'max' otherlv_47= '=' ( (lv_max_48_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_49= 'min' otherlv_50= '=' ( (lv_min_51_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_52= 'decimalMax' otherlv_53= '=' ( (lv_decimalMax_54_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_55= 'decimalMin' otherlv_56= '=' ( (lv_decimalMin_57_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notEmpty_58_0= 'notEmpty' ) ) (otherlv_59= '=' ( (lv_notEmptyMessage_60_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notBlank_61_0= 'notBlank' ) ) (otherlv_62= '=' ( (lv_notBlankMessage_63_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_64= 'pattern' otherlv_65= '=' ( (lv_pattern_66_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_67= 'range' otherlv_68= '=' ( (lv_range_69_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_70= 'size' otherlv_71= '=' ( (lv_size_72_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_73= 'length' otherlv_74= '=' ( (lv_length_75_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_76= 'scriptAssert' otherlv_77= '=' ( (lv_scriptAssert_78_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_79= 'url' otherlv_80= '=' ( (lv_url_81_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_82= 'validate' otherlv_83= '=' ( (lv_validate_84_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_85_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_86= 'databaseColumn' otherlv_87= '=' ( (lv_databaseColumn_88_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_89= 'databaseType' otherlv_90= '=' ( (lv_databaseType_91_0= RULE_STRING ) ) ) ) ) ) )* ) ) ) (otherlv_92= ';' )? ) ;
    public final EObject ruleAttribute() throws RecognitionException {
        EObject current = null;

        Token lv_doc_0_0=null;
        Token otherlv_3=null;
        Token otherlv_5=null;
        Token lv_name_7_0=null;
        Token lv_key_9_0=null;
        Token lv_notChangeable_10_0=null;
        Token otherlv_11=null;
        Token otherlv_12=null;
        Token lv_required_13_0=null;
        Token this_NOT_14=null;
        Token otherlv_15=null;
        Token lv_nullable_16_0=null;
        Token this_NOT_17=null;
        Token otherlv_18=null;
        Token otherlv_19=null;
        Token lv_nullableMessage_20_0=null;
        Token lv_index_21_0=null;
        Token lv_assertFalse_22_0=null;
        Token otherlv_23=null;
        Token lv_assertFalseMessage_24_0=null;
        Token lv_assertTrue_25_0=null;
        Token otherlv_26=null;
        Token lv_assertTrueMessage_27_0=null;
        Token otherlv_28=null;
        Token otherlv_29=null;
        Token lv_hint_30_0=null;
        Token lv_creditCardNumber_31_0=null;
        Token otherlv_32=null;
        Token lv_creditCardNumberMessage_33_0=null;
        Token otherlv_34=null;
        Token otherlv_35=null;
        Token lv_digits_36_0=null;
        Token lv_email_37_0=null;
        Token otherlv_38=null;
        Token lv_emailMessage_39_0=null;
        Token lv_future_40_0=null;
        Token otherlv_41=null;
        Token lv_futureMessage_42_0=null;
        Token lv_past_43_0=null;
        Token otherlv_44=null;
        Token lv_pastMessage_45_0=null;
        Token otherlv_46=null;
        Token otherlv_47=null;
        Token lv_max_48_0=null;
        Token otherlv_49=null;
        Token otherlv_50=null;
        Token lv_min_51_0=null;
        Token otherlv_52=null;
        Token otherlv_53=null;
        Token lv_decimalMax_54_0=null;
        Token otherlv_55=null;
        Token otherlv_56=null;
        Token lv_decimalMin_57_0=null;
        Token lv_notEmpty_58_0=null;
        Token otherlv_59=null;
        Token lv_notEmptyMessage_60_0=null;
        Token lv_notBlank_61_0=null;
        Token otherlv_62=null;
        Token lv_notBlankMessage_63_0=null;
        Token otherlv_64=null;
        Token otherlv_65=null;
        Token lv_pattern_66_0=null;
        Token otherlv_67=null;
        Token otherlv_68=null;
        Token lv_range_69_0=null;
        Token otherlv_70=null;
        Token otherlv_71=null;
        Token lv_size_72_0=null;
        Token otherlv_73=null;
        Token otherlv_74=null;
        Token lv_length_75_0=null;
        Token otherlv_76=null;
        Token otherlv_77=null;
        Token lv_scriptAssert_78_0=null;
        Token otherlv_79=null;
        Token otherlv_80=null;
        Token lv_url_81_0=null;
        Token otherlv_82=null;
        Token otherlv_83=null;
        Token lv_validate_84_0=null;
        Token lv_transient_85_0=null;
        Token otherlv_86=null;
        Token otherlv_87=null;
        Token lv_databaseColumn_88_0=null;
        Token otherlv_89=null;
        Token otherlv_90=null;
        Token lv_databaseType_91_0=null;
        Token otherlv_92=null;
        Enumerator lv_visibility_1_0 = null;

        Enumerator lv_collectionType_2_0 = null;

        AntlrDatatypeRuleToken lv_type_4_0 = null;

        AntlrDatatypeRuleToken lv_type_6_0 = null;



        	enterRule();

        try {
            // InternalContextMappingDSL.g:12243:2: ( ( ( (lv_doc_0_0= RULE_STRING ) )? ( (lv_visibility_1_0= ruleVisibility ) )? ( ( ( (lv_collectionType_2_0= ruleCollectionType ) ) otherlv_3= '<' ( (lv_type_4_0= ruleType ) ) otherlv_5= '>' ) | ( (lv_type_6_0= ruleType ) ) ) ( (lv_name_7_0= RULE_ID ) ) ( ( ( ( ({...}? => ( ({...}? => ( (lv_key_9_0= 'key' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notChangeable_10_0= RULE_NOT ) ) otherlv_11= 'changeable' ) | otherlv_12= 'changeable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_required_13_0= 'required' ) ) | (this_NOT_14= RULE_NOT otherlv_15= 'required' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_nullable_16_0= 'nullable' ) ) | (this_NOT_17= RULE_NOT otherlv_18= 'nullable' ) ) (otherlv_19= '=' ( (lv_nullableMessage_20_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( (lv_index_21_0= 'index' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_assertFalse_22_0= 'assertFalse' ) ) (otherlv_23= '=' ( (lv_assertFalseMessage_24_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_assertTrue_25_0= 'assertTrue' ) ) (otherlv_26= '=' ( (lv_assertTrueMessage_27_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_28= 'hint' otherlv_29= '=' ( (lv_hint_30_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_creditCardNumber_31_0= 'creditCardNumber' ) ) (otherlv_32= '=' ( (lv_creditCardNumberMessage_33_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_34= 'digits' otherlv_35= '=' ( (lv_digits_36_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_email_37_0= 'email' ) ) (otherlv_38= '=' ( (lv_emailMessage_39_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_future_40_0= 'future' ) ) (otherlv_41= '=' ( (lv_futureMessage_42_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_past_43_0= 'past' ) ) (otherlv_44= '=' ( (lv_pastMessage_45_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_46= 'max' otherlv_47= '=' ( (lv_max_48_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_49= 'min' otherlv_50= '=' ( (lv_min_51_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_52= 'decimalMax' otherlv_53= '=' ( (lv_decimalMax_54_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_55= 'decimalMin' otherlv_56= '=' ( (lv_decimalMin_57_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notEmpty_58_0= 'notEmpty' ) ) (otherlv_59= '=' ( (lv_notEmptyMessage_60_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notBlank_61_0= 'notBlank' ) ) (otherlv_62= '=' ( (lv_notBlankMessage_63_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_64= 'pattern' otherlv_65= '=' ( (lv_pattern_66_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_67= 'range' otherlv_68= '=' ( (lv_range_69_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_70= 'size' otherlv_71= '=' ( (lv_size_72_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_73= 'length' otherlv_74= '=' ( (lv_length_75_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_76= 'scriptAssert' otherlv_77= '=' ( (lv_scriptAssert_78_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_79= 'url' otherlv_80= '=' ( (lv_url_81_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_82= 'validate' otherlv_83= '=' ( (lv_validate_84_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_85_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_86= 'databaseColumn' otherlv_87= '=' ( (lv_databaseColumn_88_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_89= 'databaseType' otherlv_90= '=' ( (lv_databaseType_91_0= RULE_STRING ) ) ) ) ) ) )* ) ) ) (otherlv_92= ';' )? ) )
            // InternalContextMappingDSL.g:12244:2: ( ( (lv_doc_0_0= RULE_STRING ) )? ( (lv_visibility_1_0= ruleVisibility ) )? ( ( ( (lv_collectionType_2_0= ruleCollectionType ) ) otherlv_3= '<' ( (lv_type_4_0= ruleType ) ) otherlv_5= '>' ) | ( (lv_type_6_0= ruleType ) ) ) ( (lv_name_7_0= RULE_ID ) ) ( ( ( ( ({...}? => ( ({...}? => ( (lv_key_9_0= 'key' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notChangeable_10_0= RULE_NOT ) ) otherlv_11= 'changeable' ) | otherlv_12= 'changeable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_required_13_0= 'required' ) ) | (this_NOT_14= RULE_NOT otherlv_15= 'required' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_nullable_16_0= 'nullable' ) ) | (this_NOT_17= RULE_NOT otherlv_18= 'nullable' ) ) (otherlv_19= '=' ( (lv_nullableMessage_20_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( (lv_index_21_0= 'index' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_assertFalse_22_0= 'assertFalse' ) ) (otherlv_23= '=' ( (lv_assertFalseMessage_24_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_assertTrue_25_0= 'assertTrue' ) ) (otherlv_26= '=' ( (lv_assertTrueMessage_27_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_28= 'hint' otherlv_29= '=' ( (lv_hint_30_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_creditCardNumber_31_0= 'creditCardNumber' ) ) (otherlv_32= '=' ( (lv_creditCardNumberMessage_33_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_34= 'digits' otherlv_35= '=' ( (lv_digits_36_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_email_37_0= 'email' ) ) (otherlv_38= '=' ( (lv_emailMessage_39_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_future_40_0= 'future' ) ) (otherlv_41= '=' ( (lv_futureMessage_42_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_past_43_0= 'past' ) ) (otherlv_44= '=' ( (lv_pastMessage_45_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_46= 'max' otherlv_47= '=' ( (lv_max_48_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_49= 'min' otherlv_50= '=' ( (lv_min_51_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_52= 'decimalMax' otherlv_53= '=' ( (lv_decimalMax_54_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_55= 'decimalMin' otherlv_56= '=' ( (lv_decimalMin_57_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notEmpty_58_0= 'notEmpty' ) ) (otherlv_59= '=' ( (lv_notEmptyMessage_60_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notBlank_61_0= 'notBlank' ) ) (otherlv_62= '=' ( (lv_notBlankMessage_63_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_64= 'pattern' otherlv_65= '=' ( (lv_pattern_66_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_67= 'range' otherlv_68= '=' ( (lv_range_69_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_70= 'size' otherlv_71= '=' ( (lv_size_72_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_73= 'length' otherlv_74= '=' ( (lv_length_75_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_76= 'scriptAssert' otherlv_77= '=' ( (lv_scriptAssert_78_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_79= 'url' otherlv_80= '=' ( (lv_url_81_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_82= 'validate' otherlv_83= '=' ( (lv_validate_84_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_85_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_86= 'databaseColumn' otherlv_87= '=' ( (lv_databaseColumn_88_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_89= 'databaseType' otherlv_90= '=' ( (lv_databaseType_91_0= RULE_STRING ) ) ) ) ) ) )* ) ) ) (otherlv_92= ';' )? )
            {
            // InternalContextMappingDSL.g:12244:2: ( ( (lv_doc_0_0= RULE_STRING ) )? ( (lv_visibility_1_0= ruleVisibility ) )? ( ( ( (lv_collectionType_2_0= ruleCollectionType ) ) otherlv_3= '<' ( (lv_type_4_0= ruleType ) ) otherlv_5= '>' ) | ( (lv_type_6_0= ruleType ) ) ) ( (lv_name_7_0= RULE_ID ) ) ( ( ( ( ({...}? => ( ({...}? => ( (lv_key_9_0= 'key' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notChangeable_10_0= RULE_NOT ) ) otherlv_11= 'changeable' ) | otherlv_12= 'changeable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_required_13_0= 'required' ) ) | (this_NOT_14= RULE_NOT otherlv_15= 'required' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_nullable_16_0= 'nullable' ) ) | (this_NOT_17= RULE_NOT otherlv_18= 'nullable' ) ) (otherlv_19= '=' ( (lv_nullableMessage_20_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( (lv_index_21_0= 'index' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_assertFalse_22_0= 'assertFalse' ) ) (otherlv_23= '=' ( (lv_assertFalseMessage_24_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_assertTrue_25_0= 'assertTrue' ) ) (otherlv_26= '=' ( (lv_assertTrueMessage_27_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_28= 'hint' otherlv_29= '=' ( (lv_hint_30_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_creditCardNumber_31_0= 'creditCardNumber' ) ) (otherlv_32= '=' ( (lv_creditCardNumberMessage_33_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_34= 'digits' otherlv_35= '=' ( (lv_digits_36_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_email_37_0= 'email' ) ) (otherlv_38= '=' ( (lv_emailMessage_39_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_future_40_0= 'future' ) ) (otherlv_41= '=' ( (lv_futureMessage_42_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_past_43_0= 'past' ) ) (otherlv_44= '=' ( (lv_pastMessage_45_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_46= 'max' otherlv_47= '=' ( (lv_max_48_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_49= 'min' otherlv_50= '=' ( (lv_min_51_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_52= 'decimalMax' otherlv_53= '=' ( (lv_decimalMax_54_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_55= 'decimalMin' otherlv_56= '=' ( (lv_decimalMin_57_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notEmpty_58_0= 'notEmpty' ) ) (otherlv_59= '=' ( (lv_notEmptyMessage_60_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notBlank_61_0= 'notBlank' ) ) (otherlv_62= '=' ( (lv_notBlankMessage_63_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_64= 'pattern' otherlv_65= '=' ( (lv_pattern_66_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_67= 'range' otherlv_68= '=' ( (lv_range_69_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_70= 'size' otherlv_71= '=' ( (lv_size_72_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_73= 'length' otherlv_74= '=' ( (lv_length_75_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_76= 'scriptAssert' otherlv_77= '=' ( (lv_scriptAssert_78_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_79= 'url' otherlv_80= '=' ( (lv_url_81_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_82= 'validate' otherlv_83= '=' ( (lv_validate_84_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_85_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_86= 'databaseColumn' otherlv_87= '=' ( (lv_databaseColumn_88_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_89= 'databaseType' otherlv_90= '=' ( (lv_databaseType_91_0= RULE_STRING ) ) ) ) ) ) )* ) ) ) (otherlv_92= ';' )? )
            // InternalContextMappingDSL.g:12245:3: ( (lv_doc_0_0= RULE_STRING ) )? ( (lv_visibility_1_0= ruleVisibility ) )? ( ( ( (lv_collectionType_2_0= ruleCollectionType ) ) otherlv_3= '<' ( (lv_type_4_0= ruleType ) ) otherlv_5= '>' ) | ( (lv_type_6_0= ruleType ) ) ) ( (lv_name_7_0= RULE_ID ) ) ( ( ( ( ({...}? => ( ({...}? => ( (lv_key_9_0= 'key' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notChangeable_10_0= RULE_NOT ) ) otherlv_11= 'changeable' ) | otherlv_12= 'changeable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_required_13_0= 'required' ) ) | (this_NOT_14= RULE_NOT otherlv_15= 'required' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_nullable_16_0= 'nullable' ) ) | (this_NOT_17= RULE_NOT otherlv_18= 'nullable' ) ) (otherlv_19= '=' ( (lv_nullableMessage_20_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( (lv_index_21_0= 'index' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_assertFalse_22_0= 'assertFalse' ) ) (otherlv_23= '=' ( (lv_assertFalseMessage_24_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_assertTrue_25_0= 'assertTrue' ) ) (otherlv_26= '=' ( (lv_assertTrueMessage_27_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_28= 'hint' otherlv_29= '=' ( (lv_hint_30_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_creditCardNumber_31_0= 'creditCardNumber' ) ) (otherlv_32= '=' ( (lv_creditCardNumberMessage_33_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_34= 'digits' otherlv_35= '=' ( (lv_digits_36_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_email_37_0= 'email' ) ) (otherlv_38= '=' ( (lv_emailMessage_39_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_future_40_0= 'future' ) ) (otherlv_41= '=' ( (lv_futureMessage_42_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_past_43_0= 'past' ) ) (otherlv_44= '=' ( (lv_pastMessage_45_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_46= 'max' otherlv_47= '=' ( (lv_max_48_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_49= 'min' otherlv_50= '=' ( (lv_min_51_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_52= 'decimalMax' otherlv_53= '=' ( (lv_decimalMax_54_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_55= 'decimalMin' otherlv_56= '=' ( (lv_decimalMin_57_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notEmpty_58_0= 'notEmpty' ) ) (otherlv_59= '=' ( (lv_notEmptyMessage_60_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notBlank_61_0= 'notBlank' ) ) (otherlv_62= '=' ( (lv_notBlankMessage_63_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_64= 'pattern' otherlv_65= '=' ( (lv_pattern_66_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_67= 'range' otherlv_68= '=' ( (lv_range_69_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_70= 'size' otherlv_71= '=' ( (lv_size_72_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_73= 'length' otherlv_74= '=' ( (lv_length_75_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_76= 'scriptAssert' otherlv_77= '=' ( (lv_scriptAssert_78_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_79= 'url' otherlv_80= '=' ( (lv_url_81_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_82= 'validate' otherlv_83= '=' ( (lv_validate_84_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_85_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_86= 'databaseColumn' otherlv_87= '=' ( (lv_databaseColumn_88_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_89= 'databaseType' otherlv_90= '=' ( (lv_databaseType_91_0= RULE_STRING ) ) ) ) ) ) )* ) ) ) (otherlv_92= ';' )?
            {
            // InternalContextMappingDSL.g:12245:3: ( (lv_doc_0_0= RULE_STRING ) )?
            int alt300=2;
            int LA300_0 = input.LA(1);

            if ( (LA300_0==RULE_STRING) ) {
                alt300=1;
            }
            switch (alt300) {
                case 1 :
                    // InternalContextMappingDSL.g:12246:4: (lv_doc_0_0= RULE_STRING )
                    {
                    // InternalContextMappingDSL.g:12246:4: (lv_doc_0_0= RULE_STRING )
                    // InternalContextMappingDSL.g:12247:5: lv_doc_0_0= RULE_STRING
                    {
                    lv_doc_0_0=(Token)match(input,RULE_STRING,FOLLOW_161); 

                    					newLeafNode(lv_doc_0_0, grammarAccess.getAttributeAccess().getDocSTRINGTerminalRuleCall_0_0());
                    				

                    					if (current==null) {
                    						current = createModelElement(grammarAccess.getAttributeRule());
                    					}
                    					setWithLastConsumed(
                    						current,
                    						"doc",
                    						lv_doc_0_0,
                    						"org.eclipse.xtext.common.Terminals.STRING");
                    				

                    }


                    }
                    break;

            }

            // InternalContextMappingDSL.g:12263:3: ( (lv_visibility_1_0= ruleVisibility ) )?
            int alt301=2;
            int LA301_0 = input.LA(1);

            if ( (LA301_0==109||(LA301_0>=232 && LA301_0<=234)) ) {
                alt301=1;
            }
            switch (alt301) {
                case 1 :
                    // InternalContextMappingDSL.g:12264:4: (lv_visibility_1_0= ruleVisibility )
                    {
                    // InternalContextMappingDSL.g:12264:4: (lv_visibility_1_0= ruleVisibility )
                    // InternalContextMappingDSL.g:12265:5: lv_visibility_1_0= ruleVisibility
                    {

                    					newCompositeNode(grammarAccess.getAttributeAccess().getVisibilityVisibilityEnumRuleCall_1_0());
                    				
                    pushFollow(FOLLOW_162);
                    lv_visibility_1_0=ruleVisibility();

                    state._fsp--;


                    					if (current==null) {
                    						current = createModelElementForParent(grammarAccess.getAttributeRule());
                    					}
                    					set(
                    						current,
                    						"visibility",
                    						lv_visibility_1_0,
                    						"org.contextmapper.tactic.dsl.TacticDDDLanguage.Visibility");
                    					afterParserOrEnumRuleCall();
                    				

                    }


                    }
                    break;

            }

            // InternalContextMappingDSL.g:12282:3: ( ( ( (lv_collectionType_2_0= ruleCollectionType ) ) otherlv_3= '<' ( (lv_type_4_0= ruleType ) ) otherlv_5= '>' ) | ( (lv_type_6_0= ruleType ) ) )
            int alt302=2;
            int LA302_0 = input.LA(1);

            if ( (LA302_0==218||(LA302_0>=228 && LA302_0<=231)) ) {
                alt302=1;
            }
            else if ( (LA302_0==RULE_ID||(LA302_0>=170 && LA302_0<=191)) ) {
                alt302=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 302, 0, input);

                throw nvae;
            }
            switch (alt302) {
                case 1 :
                    // InternalContextMappingDSL.g:12283:4: ( ( (lv_collectionType_2_0= ruleCollectionType ) ) otherlv_3= '<' ( (lv_type_4_0= ruleType ) ) otherlv_5= '>' )
                    {
                    // InternalContextMappingDSL.g:12283:4: ( ( (lv_collectionType_2_0= ruleCollectionType ) ) otherlv_3= '<' ( (lv_type_4_0= ruleType ) ) otherlv_5= '>' )
                    // InternalContextMappingDSL.g:12284:5: ( (lv_collectionType_2_0= ruleCollectionType ) ) otherlv_3= '<' ( (lv_type_4_0= ruleType ) ) otherlv_5= '>'
                    {
                    // InternalContextMappingDSL.g:12284:5: ( (lv_collectionType_2_0= ruleCollectionType ) )
                    // InternalContextMappingDSL.g:12285:6: (lv_collectionType_2_0= ruleCollectionType )
                    {
                    // InternalContextMappingDSL.g:12285:6: (lv_collectionType_2_0= ruleCollectionType )
                    // InternalContextMappingDSL.g:12286:7: lv_collectionType_2_0= ruleCollectionType
                    {

                    							newCompositeNode(grammarAccess.getAttributeAccess().getCollectionTypeCollectionTypeEnumRuleCall_2_0_0_0());
                    						
                    pushFollow(FOLLOW_117);
                    lv_collectionType_2_0=ruleCollectionType();

                    state._fsp--;


                    							if (current==null) {
                    								current = createModelElementForParent(grammarAccess.getAttributeRule());
                    							}
                    							set(
                    								current,
                    								"collectionType",
                    								lv_collectionType_2_0,
                    								"org.contextmapper.tactic.dsl.TacticDDDLanguage.CollectionType");
                    							afterParserOrEnumRuleCall();
                    						

                    }


                    }

                    otherlv_3=(Token)match(input,103,FOLLOW_163); 

                    					newLeafNode(otherlv_3, grammarAccess.getAttributeAccess().getLessThanSignKeyword_2_0_1());
                    				
                    // InternalContextMappingDSL.g:12307:5: ( (lv_type_4_0= ruleType ) )
                    // InternalContextMappingDSL.g:12308:6: (lv_type_4_0= ruleType )
                    {
                    // InternalContextMappingDSL.g:12308:6: (lv_type_4_0= ruleType )
                    // InternalContextMappingDSL.g:12309:7: lv_type_4_0= ruleType
                    {

                    							newCompositeNode(grammarAccess.getAttributeAccess().getTypeTypeParserRuleCall_2_0_2_0());
                    						
                    pushFollow(FOLLOW_119);
                    lv_type_4_0=ruleType();

                    state._fsp--;


                    							if (current==null) {
                    								current = createModelElementForParent(grammarAccess.getAttributeRule());
                    							}
                    							set(
                    								current,
                    								"type",
                    								lv_type_4_0,
                    								"org.contextmapper.tactic.dsl.TacticDDDLanguage.Type");
                    							afterParserOrEnumRuleCall();
                    						

                    }


                    }

                    otherlv_5=(Token)match(input,104,FOLLOW_10); 

                    					newLeafNode(otherlv_5, grammarAccess.getAttributeAccess().getGreaterThanSignKeyword_2_0_3());
                    				

                    }


                    }
                    break;
                case 2 :
                    // InternalContextMappingDSL.g:12332:4: ( (lv_type_6_0= ruleType ) )
                    {
                    // InternalContextMappingDSL.g:12332:4: ( (lv_type_6_0= ruleType ) )
                    // InternalContextMappingDSL.g:12333:5: (lv_type_6_0= ruleType )
                    {
                    // InternalContextMappingDSL.g:12333:5: (lv_type_6_0= ruleType )
                    // InternalContextMappingDSL.g:12334:6: lv_type_6_0= ruleType
                    {

                    						newCompositeNode(grammarAccess.getAttributeAccess().getTypeTypeParserRuleCall_2_1_0());
                    					
                    pushFollow(FOLLOW_10);
                    lv_type_6_0=ruleType();

                    state._fsp--;


                    						if (current==null) {
                    							current = createModelElementForParent(grammarAccess.getAttributeRule());
                    						}
                    						set(
                    							current,
                    							"type",
                    							lv_type_6_0,
                    							"org.contextmapper.tactic.dsl.TacticDDDLanguage.Type");
                    						afterParserOrEnumRuleCall();
                    					

                    }


                    }


                    }
                    break;

            }

            // InternalContextMappingDSL.g:12352:3: ( (lv_name_7_0= RULE_ID ) )
            // InternalContextMappingDSL.g:12353:4: (lv_name_7_0= RULE_ID )
            {
            // InternalContextMappingDSL.g:12353:4: (lv_name_7_0= RULE_ID )
            // InternalContextMappingDSL.g:12354:5: lv_name_7_0= RULE_ID
            {
            lv_name_7_0=(Token)match(input,RULE_ID,FOLLOW_164); 

            					newLeafNode(lv_name_7_0, grammarAccess.getAttributeAccess().getNameIDTerminalRuleCall_3_0());
            				

            					if (current==null) {
            						current = createModelElement(grammarAccess.getAttributeRule());
            					}
            					setWithLastConsumed(
            						current,
            						"name",
            						lv_name_7_0,
            						"org.eclipse.xtext.common.Terminals.ID");
            				

            }


            }

            // InternalContextMappingDSL.g:12370:3: ( ( ( ( ({...}? => ( ({...}? => ( (lv_key_9_0= 'key' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notChangeable_10_0= RULE_NOT ) ) otherlv_11= 'changeable' ) | otherlv_12= 'changeable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_required_13_0= 'required' ) ) | (this_NOT_14= RULE_NOT otherlv_15= 'required' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_nullable_16_0= 'nullable' ) ) | (this_NOT_17= RULE_NOT otherlv_18= 'nullable' ) ) (otherlv_19= '=' ( (lv_nullableMessage_20_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( (lv_index_21_0= 'index' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_assertFalse_22_0= 'assertFalse' ) ) (otherlv_23= '=' ( (lv_assertFalseMessage_24_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_assertTrue_25_0= 'assertTrue' ) ) (otherlv_26= '=' ( (lv_assertTrueMessage_27_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_28= 'hint' otherlv_29= '=' ( (lv_hint_30_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_creditCardNumber_31_0= 'creditCardNumber' ) ) (otherlv_32= '=' ( (lv_creditCardNumberMessage_33_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_34= 'digits' otherlv_35= '=' ( (lv_digits_36_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_email_37_0= 'email' ) ) (otherlv_38= '=' ( (lv_emailMessage_39_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_future_40_0= 'future' ) ) (otherlv_41= '=' ( (lv_futureMessage_42_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_past_43_0= 'past' ) ) (otherlv_44= '=' ( (lv_pastMessage_45_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_46= 'max' otherlv_47= '=' ( (lv_max_48_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_49= 'min' otherlv_50= '=' ( (lv_min_51_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_52= 'decimalMax' otherlv_53= '=' ( (lv_decimalMax_54_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_55= 'decimalMin' otherlv_56= '=' ( (lv_decimalMin_57_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notEmpty_58_0= 'notEmpty' ) ) (otherlv_59= '=' ( (lv_notEmptyMessage_60_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notBlank_61_0= 'notBlank' ) ) (otherlv_62= '=' ( (lv_notBlankMessage_63_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_64= 'pattern' otherlv_65= '=' ( (lv_pattern_66_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_67= 'range' otherlv_68= '=' ( (lv_range_69_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_70= 'size' otherlv_71= '=' ( (lv_size_72_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_73= 'length' otherlv_74= '=' ( (lv_length_75_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_76= 'scriptAssert' otherlv_77= '=' ( (lv_scriptAssert_78_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_79= 'url' otherlv_80= '=' ( (lv_url_81_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_82= 'validate' otherlv_83= '=' ( (lv_validate_84_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_85_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_86= 'databaseColumn' otherlv_87= '=' ( (lv_databaseColumn_88_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_89= 'databaseType' otherlv_90= '=' ( (lv_databaseType_91_0= RULE_STRING ) ) ) ) ) ) )* ) ) )
            // InternalContextMappingDSL.g:12371:4: ( ( ( ({...}? => ( ({...}? => ( (lv_key_9_0= 'key' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notChangeable_10_0= RULE_NOT ) ) otherlv_11= 'changeable' ) | otherlv_12= 'changeable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_required_13_0= 'required' ) ) | (this_NOT_14= RULE_NOT otherlv_15= 'required' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_nullable_16_0= 'nullable' ) ) | (this_NOT_17= RULE_NOT otherlv_18= 'nullable' ) ) (otherlv_19= '=' ( (lv_nullableMessage_20_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( (lv_index_21_0= 'index' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_assertFalse_22_0= 'assertFalse' ) ) (otherlv_23= '=' ( (lv_assertFalseMessage_24_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_assertTrue_25_0= 'assertTrue' ) ) (otherlv_26= '=' ( (lv_assertTrueMessage_27_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_28= 'hint' otherlv_29= '=' ( (lv_hint_30_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_creditCardNumber_31_0= 'creditCardNumber' ) ) (otherlv_32= '=' ( (lv_creditCardNumberMessage_33_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_34= 'digits' otherlv_35= '=' ( (lv_digits_36_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_email_37_0= 'email' ) ) (otherlv_38= '=' ( (lv_emailMessage_39_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_future_40_0= 'future' ) ) (otherlv_41= '=' ( (lv_futureMessage_42_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_past_43_0= 'past' ) ) (otherlv_44= '=' ( (lv_pastMessage_45_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_46= 'max' otherlv_47= '=' ( (lv_max_48_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_49= 'min' otherlv_50= '=' ( (lv_min_51_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_52= 'decimalMax' otherlv_53= '=' ( (lv_decimalMax_54_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_55= 'decimalMin' otherlv_56= '=' ( (lv_decimalMin_57_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notEmpty_58_0= 'notEmpty' ) ) (otherlv_59= '=' ( (lv_notEmptyMessage_60_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notBlank_61_0= 'notBlank' ) ) (otherlv_62= '=' ( (lv_notBlankMessage_63_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_64= 'pattern' otherlv_65= '=' ( (lv_pattern_66_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_67= 'range' otherlv_68= '=' ( (lv_range_69_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_70= 'size' otherlv_71= '=' ( (lv_size_72_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_73= 'length' otherlv_74= '=' ( (lv_length_75_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_76= 'scriptAssert' otherlv_77= '=' ( (lv_scriptAssert_78_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_79= 'url' otherlv_80= '=' ( (lv_url_81_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_82= 'validate' otherlv_83= '=' ( (lv_validate_84_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_85_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_86= 'databaseColumn' otherlv_87= '=' ( (lv_databaseColumn_88_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_89= 'databaseType' otherlv_90= '=' ( (lv_databaseType_91_0= RULE_STRING ) ) ) ) ) ) )* ) )
            {
            // InternalContextMappingDSL.g:12371:4: ( ( ( ({...}? => ( ({...}? => ( (lv_key_9_0= 'key' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notChangeable_10_0= RULE_NOT ) ) otherlv_11= 'changeable' ) | otherlv_12= 'changeable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_required_13_0= 'required' ) ) | (this_NOT_14= RULE_NOT otherlv_15= 'required' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_nullable_16_0= 'nullable' ) ) | (this_NOT_17= RULE_NOT otherlv_18= 'nullable' ) ) (otherlv_19= '=' ( (lv_nullableMessage_20_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( (lv_index_21_0= 'index' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_assertFalse_22_0= 'assertFalse' ) ) (otherlv_23= '=' ( (lv_assertFalseMessage_24_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_assertTrue_25_0= 'assertTrue' ) ) (otherlv_26= '=' ( (lv_assertTrueMessage_27_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_28= 'hint' otherlv_29= '=' ( (lv_hint_30_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_creditCardNumber_31_0= 'creditCardNumber' ) ) (otherlv_32= '=' ( (lv_creditCardNumberMessage_33_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_34= 'digits' otherlv_35= '=' ( (lv_digits_36_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_email_37_0= 'email' ) ) (otherlv_38= '=' ( (lv_emailMessage_39_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_future_40_0= 'future' ) ) (otherlv_41= '=' ( (lv_futureMessage_42_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_past_43_0= 'past' ) ) (otherlv_44= '=' ( (lv_pastMessage_45_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_46= 'max' otherlv_47= '=' ( (lv_max_48_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_49= 'min' otherlv_50= '=' ( (lv_min_51_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_52= 'decimalMax' otherlv_53= '=' ( (lv_decimalMax_54_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_55= 'decimalMin' otherlv_56= '=' ( (lv_decimalMin_57_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notEmpty_58_0= 'notEmpty' ) ) (otherlv_59= '=' ( (lv_notEmptyMessage_60_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notBlank_61_0= 'notBlank' ) ) (otherlv_62= '=' ( (lv_notBlankMessage_63_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_64= 'pattern' otherlv_65= '=' ( (lv_pattern_66_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_67= 'range' otherlv_68= '=' ( (lv_range_69_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_70= 'size' otherlv_71= '=' ( (lv_size_72_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_73= 'length' otherlv_74= '=' ( (lv_length_75_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_76= 'scriptAssert' otherlv_77= '=' ( (lv_scriptAssert_78_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_79= 'url' otherlv_80= '=' ( (lv_url_81_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_82= 'validate' otherlv_83= '=' ( (lv_validate_84_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_85_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_86= 'databaseColumn' otherlv_87= '=' ( (lv_databaseColumn_88_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_89= 'databaseType' otherlv_90= '=' ( (lv_databaseType_91_0= RULE_STRING ) ) ) ) ) ) )* ) )
            // InternalContextMappingDSL.g:12372:5: ( ( ({...}? => ( ({...}? => ( (lv_key_9_0= 'key' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notChangeable_10_0= RULE_NOT ) ) otherlv_11= 'changeable' ) | otherlv_12= 'changeable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_required_13_0= 'required' ) ) | (this_NOT_14= RULE_NOT otherlv_15= 'required' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_nullable_16_0= 'nullable' ) ) | (this_NOT_17= RULE_NOT otherlv_18= 'nullable' ) ) (otherlv_19= '=' ( (lv_nullableMessage_20_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( (lv_index_21_0= 'index' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_assertFalse_22_0= 'assertFalse' ) ) (otherlv_23= '=' ( (lv_assertFalseMessage_24_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_assertTrue_25_0= 'assertTrue' ) ) (otherlv_26= '=' ( (lv_assertTrueMessage_27_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_28= 'hint' otherlv_29= '=' ( (lv_hint_30_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_creditCardNumber_31_0= 'creditCardNumber' ) ) (otherlv_32= '=' ( (lv_creditCardNumberMessage_33_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_34= 'digits' otherlv_35= '=' ( (lv_digits_36_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_email_37_0= 'email' ) ) (otherlv_38= '=' ( (lv_emailMessage_39_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_future_40_0= 'future' ) ) (otherlv_41= '=' ( (lv_futureMessage_42_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_past_43_0= 'past' ) ) (otherlv_44= '=' ( (lv_pastMessage_45_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_46= 'max' otherlv_47= '=' ( (lv_max_48_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_49= 'min' otherlv_50= '=' ( (lv_min_51_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_52= 'decimalMax' otherlv_53= '=' ( (lv_decimalMax_54_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_55= 'decimalMin' otherlv_56= '=' ( (lv_decimalMin_57_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notEmpty_58_0= 'notEmpty' ) ) (otherlv_59= '=' ( (lv_notEmptyMessage_60_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notBlank_61_0= 'notBlank' ) ) (otherlv_62= '=' ( (lv_notBlankMessage_63_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_64= 'pattern' otherlv_65= '=' ( (lv_pattern_66_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_67= 'range' otherlv_68= '=' ( (lv_range_69_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_70= 'size' otherlv_71= '=' ( (lv_size_72_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_73= 'length' otherlv_74= '=' ( (lv_length_75_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_76= 'scriptAssert' otherlv_77= '=' ( (lv_scriptAssert_78_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_79= 'url' otherlv_80= '=' ( (lv_url_81_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_82= 'validate' otherlv_83= '=' ( (lv_validate_84_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_85_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_86= 'databaseColumn' otherlv_87= '=' ( (lv_databaseColumn_88_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_89= 'databaseType' otherlv_90= '=' ( (lv_databaseType_91_0= RULE_STRING ) ) ) ) ) ) )* )
            {
             
            				  getUnorderedGroupHelper().enter(grammarAccess.getAttributeAccess().getUnorderedGroup_4());
            				
            // InternalContextMappingDSL.g:12375:5: ( ( ({...}? => ( ({...}? => ( (lv_key_9_0= 'key' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notChangeable_10_0= RULE_NOT ) ) otherlv_11= 'changeable' ) | otherlv_12= 'changeable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_required_13_0= 'required' ) ) | (this_NOT_14= RULE_NOT otherlv_15= 'required' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_nullable_16_0= 'nullable' ) ) | (this_NOT_17= RULE_NOT otherlv_18= 'nullable' ) ) (otherlv_19= '=' ( (lv_nullableMessage_20_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( (lv_index_21_0= 'index' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_assertFalse_22_0= 'assertFalse' ) ) (otherlv_23= '=' ( (lv_assertFalseMessage_24_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_assertTrue_25_0= 'assertTrue' ) ) (otherlv_26= '=' ( (lv_assertTrueMessage_27_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_28= 'hint' otherlv_29= '=' ( (lv_hint_30_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_creditCardNumber_31_0= 'creditCardNumber' ) ) (otherlv_32= '=' ( (lv_creditCardNumberMessage_33_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_34= 'digits' otherlv_35= '=' ( (lv_digits_36_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_email_37_0= 'email' ) ) (otherlv_38= '=' ( (lv_emailMessage_39_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_future_40_0= 'future' ) ) (otherlv_41= '=' ( (lv_futureMessage_42_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_past_43_0= 'past' ) ) (otherlv_44= '=' ( (lv_pastMessage_45_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_46= 'max' otherlv_47= '=' ( (lv_max_48_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_49= 'min' otherlv_50= '=' ( (lv_min_51_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_52= 'decimalMax' otherlv_53= '=' ( (lv_decimalMax_54_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_55= 'decimalMin' otherlv_56= '=' ( (lv_decimalMin_57_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notEmpty_58_0= 'notEmpty' ) ) (otherlv_59= '=' ( (lv_notEmptyMessage_60_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notBlank_61_0= 'notBlank' ) ) (otherlv_62= '=' ( (lv_notBlankMessage_63_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_64= 'pattern' otherlv_65= '=' ( (lv_pattern_66_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_67= 'range' otherlv_68= '=' ( (lv_range_69_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_70= 'size' otherlv_71= '=' ( (lv_size_72_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_73= 'length' otherlv_74= '=' ( (lv_length_75_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_76= 'scriptAssert' otherlv_77= '=' ( (lv_scriptAssert_78_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_79= 'url' otherlv_80= '=' ( (lv_url_81_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_82= 'validate' otherlv_83= '=' ( (lv_validate_84_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_85_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_86= 'databaseColumn' otherlv_87= '=' ( (lv_databaseColumn_88_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_89= 'databaseType' otherlv_90= '=' ( (lv_databaseType_91_0= RULE_STRING ) ) ) ) ) ) )* )
            // InternalContextMappingDSL.g:12376:6: ( ({...}? => ( ({...}? => ( (lv_key_9_0= 'key' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notChangeable_10_0= RULE_NOT ) ) otherlv_11= 'changeable' ) | otherlv_12= 'changeable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_required_13_0= 'required' ) ) | (this_NOT_14= RULE_NOT otherlv_15= 'required' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_nullable_16_0= 'nullable' ) ) | (this_NOT_17= RULE_NOT otherlv_18= 'nullable' ) ) (otherlv_19= '=' ( (lv_nullableMessage_20_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( (lv_index_21_0= 'index' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_assertFalse_22_0= 'assertFalse' ) ) (otherlv_23= '=' ( (lv_assertFalseMessage_24_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_assertTrue_25_0= 'assertTrue' ) ) (otherlv_26= '=' ( (lv_assertTrueMessage_27_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_28= 'hint' otherlv_29= '=' ( (lv_hint_30_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_creditCardNumber_31_0= 'creditCardNumber' ) ) (otherlv_32= '=' ( (lv_creditCardNumberMessage_33_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_34= 'digits' otherlv_35= '=' ( (lv_digits_36_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_email_37_0= 'email' ) ) (otherlv_38= '=' ( (lv_emailMessage_39_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_future_40_0= 'future' ) ) (otherlv_41= '=' ( (lv_futureMessage_42_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_past_43_0= 'past' ) ) (otherlv_44= '=' ( (lv_pastMessage_45_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_46= 'max' otherlv_47= '=' ( (lv_max_48_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_49= 'min' otherlv_50= '=' ( (lv_min_51_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_52= 'decimalMax' otherlv_53= '=' ( (lv_decimalMax_54_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_55= 'decimalMin' otherlv_56= '=' ( (lv_decimalMin_57_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notEmpty_58_0= 'notEmpty' ) ) (otherlv_59= '=' ( (lv_notEmptyMessage_60_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notBlank_61_0= 'notBlank' ) ) (otherlv_62= '=' ( (lv_notBlankMessage_63_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_64= 'pattern' otherlv_65= '=' ( (lv_pattern_66_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_67= 'range' otherlv_68= '=' ( (lv_range_69_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_70= 'size' otherlv_71= '=' ( (lv_size_72_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_73= 'length' otherlv_74= '=' ( (lv_length_75_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_76= 'scriptAssert' otherlv_77= '=' ( (lv_scriptAssert_78_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_79= 'url' otherlv_80= '=' ( (lv_url_81_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_82= 'validate' otherlv_83= '=' ( (lv_validate_84_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_85_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_86= 'databaseColumn' otherlv_87= '=' ( (lv_databaseColumn_88_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_89= 'databaseType' otherlv_90= '=' ( (lv_databaseType_91_0= RULE_STRING ) ) ) ) ) ) )*
            {
            // InternalContextMappingDSL.g:12376:6: ( ({...}? => ( ({...}? => ( (lv_key_9_0= 'key' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notChangeable_10_0= RULE_NOT ) ) otherlv_11= 'changeable' ) | otherlv_12= 'changeable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_required_13_0= 'required' ) ) | (this_NOT_14= RULE_NOT otherlv_15= 'required' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_nullable_16_0= 'nullable' ) ) | (this_NOT_17= RULE_NOT otherlv_18= 'nullable' ) ) (otherlv_19= '=' ( (lv_nullableMessage_20_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( (lv_index_21_0= 'index' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_assertFalse_22_0= 'assertFalse' ) ) (otherlv_23= '=' ( (lv_assertFalseMessage_24_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_assertTrue_25_0= 'assertTrue' ) ) (otherlv_26= '=' ( (lv_assertTrueMessage_27_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_28= 'hint' otherlv_29= '=' ( (lv_hint_30_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_creditCardNumber_31_0= 'creditCardNumber' ) ) (otherlv_32= '=' ( (lv_creditCardNumberMessage_33_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_34= 'digits' otherlv_35= '=' ( (lv_digits_36_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_email_37_0= 'email' ) ) (otherlv_38= '=' ( (lv_emailMessage_39_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_future_40_0= 'future' ) ) (otherlv_41= '=' ( (lv_futureMessage_42_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_past_43_0= 'past' ) ) (otherlv_44= '=' ( (lv_pastMessage_45_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_46= 'max' otherlv_47= '=' ( (lv_max_48_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_49= 'min' otherlv_50= '=' ( (lv_min_51_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_52= 'decimalMax' otherlv_53= '=' ( (lv_decimalMax_54_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_55= 'decimalMin' otherlv_56= '=' ( (lv_decimalMin_57_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notEmpty_58_0= 'notEmpty' ) ) (otherlv_59= '=' ( (lv_notEmptyMessage_60_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notBlank_61_0= 'notBlank' ) ) (otherlv_62= '=' ( (lv_notBlankMessage_63_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_64= 'pattern' otherlv_65= '=' ( (lv_pattern_66_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_67= 'range' otherlv_68= '=' ( (lv_range_69_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_70= 'size' otherlv_71= '=' ( (lv_size_72_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_73= 'length' otherlv_74= '=' ( (lv_length_75_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_76= 'scriptAssert' otherlv_77= '=' ( (lv_scriptAssert_78_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_79= 'url' otherlv_80= '=' ( (lv_url_81_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_82= 'validate' otherlv_83= '=' ( (lv_validate_84_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_85_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_86= 'databaseColumn' otherlv_87= '=' ( (lv_databaseColumn_88_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_89= 'databaseType' otherlv_90= '=' ( (lv_databaseType_91_0= RULE_STRING ) ) ) ) ) ) )*
            loop315:
            do {
                int alt315=30;
                alt315 = dfa315.predict(input);
                switch (alt315) {
            	case 1 :
            	    // InternalContextMappingDSL.g:12377:4: ({...}? => ( ({...}? => ( (lv_key_9_0= 'key' ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:12377:4: ({...}? => ( ({...}? => ( (lv_key_9_0= 'key' ) ) ) ) )
            	    // InternalContextMappingDSL.g:12378:5: {...}? => ( ({...}? => ( (lv_key_9_0= 'key' ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 0) ) {
            	        throw new FailedPredicateException(input, "ruleAttribute", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 0)");
            	    }
            	    // InternalContextMappingDSL.g:12378:106: ( ({...}? => ( (lv_key_9_0= 'key' ) ) ) )
            	    // InternalContextMappingDSL.g:12379:6: ({...}? => ( (lv_key_9_0= 'key' ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 0);
            	    					
            	    // InternalContextMappingDSL.g:12382:9: ({...}? => ( (lv_key_9_0= 'key' ) ) )
            	    // InternalContextMappingDSL.g:12382:10: {...}? => ( (lv_key_9_0= 'key' ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleAttribute", "true");
            	    }
            	    // InternalContextMappingDSL.g:12382:19: ( (lv_key_9_0= 'key' ) )
            	    // InternalContextMappingDSL.g:12382:20: (lv_key_9_0= 'key' )
            	    {
            	    // InternalContextMappingDSL.g:12382:20: (lv_key_9_0= 'key' )
            	    // InternalContextMappingDSL.g:12383:10: lv_key_9_0= 'key'
            	    {
            	    lv_key_9_0=(Token)match(input,131,FOLLOW_164); 

            	    										newLeafNode(lv_key_9_0, grammarAccess.getAttributeAccess().getKeyKeyKeyword_4_0_0());
            	    									

            	    										if (current==null) {
            	    											current = createModelElement(grammarAccess.getAttributeRule());
            	    										}
            	    										setWithLastConsumed(current, "key", true, "key");
            	    									

            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getAttributeAccess().getUnorderedGroup_4());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 2 :
            	    // InternalContextMappingDSL.g:12400:4: ({...}? => ( ({...}? => ( ( ( (lv_notChangeable_10_0= RULE_NOT ) ) otherlv_11= 'changeable' ) | otherlv_12= 'changeable' ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:12400:4: ({...}? => ( ({...}? => ( ( ( (lv_notChangeable_10_0= RULE_NOT ) ) otherlv_11= 'changeable' ) | otherlv_12= 'changeable' ) ) ) )
            	    // InternalContextMappingDSL.g:12401:5: {...}? => ( ({...}? => ( ( ( (lv_notChangeable_10_0= RULE_NOT ) ) otherlv_11= 'changeable' ) | otherlv_12= 'changeable' ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 1) ) {
            	        throw new FailedPredicateException(input, "ruleAttribute", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 1)");
            	    }
            	    // InternalContextMappingDSL.g:12401:106: ( ({...}? => ( ( ( (lv_notChangeable_10_0= RULE_NOT ) ) otherlv_11= 'changeable' ) | otherlv_12= 'changeable' ) ) )
            	    // InternalContextMappingDSL.g:12402:6: ({...}? => ( ( ( (lv_notChangeable_10_0= RULE_NOT ) ) otherlv_11= 'changeable' ) | otherlv_12= 'changeable' ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 1);
            	    					
            	    // InternalContextMappingDSL.g:12405:9: ({...}? => ( ( ( (lv_notChangeable_10_0= RULE_NOT ) ) otherlv_11= 'changeable' ) | otherlv_12= 'changeable' ) )
            	    // InternalContextMappingDSL.g:12405:10: {...}? => ( ( ( (lv_notChangeable_10_0= RULE_NOT ) ) otherlv_11= 'changeable' ) | otherlv_12= 'changeable' )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleAttribute", "true");
            	    }
            	    // InternalContextMappingDSL.g:12405:19: ( ( ( (lv_notChangeable_10_0= RULE_NOT ) ) otherlv_11= 'changeable' ) | otherlv_12= 'changeable' )
            	    int alt303=2;
            	    int LA303_0 = input.LA(1);

            	    if ( (LA303_0==RULE_NOT) ) {
            	        alt303=1;
            	    }
            	    else if ( (LA303_0==132) ) {
            	        alt303=2;
            	    }
            	    else {
            	        NoViableAltException nvae =
            	            new NoViableAltException("", 303, 0, input);

            	        throw nvae;
            	    }
            	    switch (alt303) {
            	        case 1 :
            	            // InternalContextMappingDSL.g:12405:20: ( ( (lv_notChangeable_10_0= RULE_NOT ) ) otherlv_11= 'changeable' )
            	            {
            	            // InternalContextMappingDSL.g:12405:20: ( ( (lv_notChangeable_10_0= RULE_NOT ) ) otherlv_11= 'changeable' )
            	            // InternalContextMappingDSL.g:12406:10: ( (lv_notChangeable_10_0= RULE_NOT ) ) otherlv_11= 'changeable'
            	            {
            	            // InternalContextMappingDSL.g:12406:10: ( (lv_notChangeable_10_0= RULE_NOT ) )
            	            // InternalContextMappingDSL.g:12407:11: (lv_notChangeable_10_0= RULE_NOT )
            	            {
            	            // InternalContextMappingDSL.g:12407:11: (lv_notChangeable_10_0= RULE_NOT )
            	            // InternalContextMappingDSL.g:12408:12: lv_notChangeable_10_0= RULE_NOT
            	            {
            	            lv_notChangeable_10_0=(Token)match(input,RULE_NOT,FOLLOW_165); 

            	            												newLeafNode(lv_notChangeable_10_0, grammarAccess.getAttributeAccess().getNotChangeableNOTTerminalRuleCall_4_1_0_0_0());
            	            											

            	            												if (current==null) {
            	            													current = createModelElement(grammarAccess.getAttributeRule());
            	            												}
            	            												setWithLastConsumed(
            	            													current,
            	            													"notChangeable",
            	            													true,
            	            													"org.contextmapper.tactic.dsl.TacticDDDLanguage.NOT");
            	            											

            	            }


            	            }

            	            otherlv_11=(Token)match(input,132,FOLLOW_164); 

            	            										newLeafNode(otherlv_11, grammarAccess.getAttributeAccess().getChangeableKeyword_4_1_0_1());
            	            									

            	            }


            	            }
            	            break;
            	        case 2 :
            	            // InternalContextMappingDSL.g:12430:9: otherlv_12= 'changeable'
            	            {
            	            otherlv_12=(Token)match(input,132,FOLLOW_164); 

            	            									newLeafNode(otherlv_12, grammarAccess.getAttributeAccess().getChangeableKeyword_4_1_1());
            	            								

            	            }
            	            break;

            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getAttributeAccess().getUnorderedGroup_4());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 3 :
            	    // InternalContextMappingDSL.g:12440:4: ({...}? => ( ({...}? => ( ( (lv_required_13_0= 'required' ) ) | (this_NOT_14= RULE_NOT otherlv_15= 'required' ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:12440:4: ({...}? => ( ({...}? => ( ( (lv_required_13_0= 'required' ) ) | (this_NOT_14= RULE_NOT otherlv_15= 'required' ) ) ) ) )
            	    // InternalContextMappingDSL.g:12441:5: {...}? => ( ({...}? => ( ( (lv_required_13_0= 'required' ) ) | (this_NOT_14= RULE_NOT otherlv_15= 'required' ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 2) ) {
            	        throw new FailedPredicateException(input, "ruleAttribute", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 2)");
            	    }
            	    // InternalContextMappingDSL.g:12441:106: ( ({...}? => ( ( (lv_required_13_0= 'required' ) ) | (this_NOT_14= RULE_NOT otherlv_15= 'required' ) ) ) )
            	    // InternalContextMappingDSL.g:12442:6: ({...}? => ( ( (lv_required_13_0= 'required' ) ) | (this_NOT_14= RULE_NOT otherlv_15= 'required' ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 2);
            	    					
            	    // InternalContextMappingDSL.g:12445:9: ({...}? => ( ( (lv_required_13_0= 'required' ) ) | (this_NOT_14= RULE_NOT otherlv_15= 'required' ) ) )
            	    // InternalContextMappingDSL.g:12445:10: {...}? => ( ( (lv_required_13_0= 'required' ) ) | (this_NOT_14= RULE_NOT otherlv_15= 'required' ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleAttribute", "true");
            	    }
            	    // InternalContextMappingDSL.g:12445:19: ( ( (lv_required_13_0= 'required' ) ) | (this_NOT_14= RULE_NOT otherlv_15= 'required' ) )
            	    int alt304=2;
            	    int LA304_0 = input.LA(1);

            	    if ( (LA304_0==133) ) {
            	        alt304=1;
            	    }
            	    else if ( (LA304_0==RULE_NOT) ) {
            	        alt304=2;
            	    }
            	    else {
            	        NoViableAltException nvae =
            	            new NoViableAltException("", 304, 0, input);

            	        throw nvae;
            	    }
            	    switch (alt304) {
            	        case 1 :
            	            // InternalContextMappingDSL.g:12445:20: ( (lv_required_13_0= 'required' ) )
            	            {
            	            // InternalContextMappingDSL.g:12445:20: ( (lv_required_13_0= 'required' ) )
            	            // InternalContextMappingDSL.g:12446:10: (lv_required_13_0= 'required' )
            	            {
            	            // InternalContextMappingDSL.g:12446:10: (lv_required_13_0= 'required' )
            	            // InternalContextMappingDSL.g:12447:11: lv_required_13_0= 'required'
            	            {
            	            lv_required_13_0=(Token)match(input,133,FOLLOW_164); 

            	            											newLeafNode(lv_required_13_0, grammarAccess.getAttributeAccess().getRequiredRequiredKeyword_4_2_0_0());
            	            										

            	            											if (current==null) {
            	            												current = createModelElement(grammarAccess.getAttributeRule());
            	            											}
            	            											setWithLastConsumed(current, "required", true, "required");
            	            										

            	            }


            	            }


            	            }
            	            break;
            	        case 2 :
            	            // InternalContextMappingDSL.g:12460:9: (this_NOT_14= RULE_NOT otherlv_15= 'required' )
            	            {
            	            // InternalContextMappingDSL.g:12460:9: (this_NOT_14= RULE_NOT otherlv_15= 'required' )
            	            // InternalContextMappingDSL.g:12461:10: this_NOT_14= RULE_NOT otherlv_15= 'required'
            	            {
            	            this_NOT_14=(Token)match(input,RULE_NOT,FOLLOW_166); 

            	            										newLeafNode(this_NOT_14, grammarAccess.getAttributeAccess().getNOTTerminalRuleCall_4_2_1_0());
            	            									
            	            otherlv_15=(Token)match(input,133,FOLLOW_164); 

            	            										newLeafNode(otherlv_15, grammarAccess.getAttributeAccess().getRequiredKeyword_4_2_1_1());
            	            									

            	            }


            	            }
            	            break;

            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getAttributeAccess().getUnorderedGroup_4());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 4 :
            	    // InternalContextMappingDSL.g:12476:4: ({...}? => ( ({...}? => ( ( ( (lv_nullable_16_0= 'nullable' ) ) | (this_NOT_17= RULE_NOT otherlv_18= 'nullable' ) ) (otherlv_19= '=' ( (lv_nullableMessage_20_0= RULE_STRING ) ) )? ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:12476:4: ({...}? => ( ({...}? => ( ( ( (lv_nullable_16_0= 'nullable' ) ) | (this_NOT_17= RULE_NOT otherlv_18= 'nullable' ) ) (otherlv_19= '=' ( (lv_nullableMessage_20_0= RULE_STRING ) ) )? ) ) ) )
            	    // InternalContextMappingDSL.g:12477:5: {...}? => ( ({...}? => ( ( ( (lv_nullable_16_0= 'nullable' ) ) | (this_NOT_17= RULE_NOT otherlv_18= 'nullable' ) ) (otherlv_19= '=' ( (lv_nullableMessage_20_0= RULE_STRING ) ) )? ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 3) ) {
            	        throw new FailedPredicateException(input, "ruleAttribute", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 3)");
            	    }
            	    // InternalContextMappingDSL.g:12477:106: ( ({...}? => ( ( ( (lv_nullable_16_0= 'nullable' ) ) | (this_NOT_17= RULE_NOT otherlv_18= 'nullable' ) ) (otherlv_19= '=' ( (lv_nullableMessage_20_0= RULE_STRING ) ) )? ) ) )
            	    // InternalContextMappingDSL.g:12478:6: ({...}? => ( ( ( (lv_nullable_16_0= 'nullable' ) ) | (this_NOT_17= RULE_NOT otherlv_18= 'nullable' ) ) (otherlv_19= '=' ( (lv_nullableMessage_20_0= RULE_STRING ) ) )? ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 3);
            	    					
            	    // InternalContextMappingDSL.g:12481:9: ({...}? => ( ( ( (lv_nullable_16_0= 'nullable' ) ) | (this_NOT_17= RULE_NOT otherlv_18= 'nullable' ) ) (otherlv_19= '=' ( (lv_nullableMessage_20_0= RULE_STRING ) ) )? ) )
            	    // InternalContextMappingDSL.g:12481:10: {...}? => ( ( ( (lv_nullable_16_0= 'nullable' ) ) | (this_NOT_17= RULE_NOT otherlv_18= 'nullable' ) ) (otherlv_19= '=' ( (lv_nullableMessage_20_0= RULE_STRING ) ) )? )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleAttribute", "true");
            	    }
            	    // InternalContextMappingDSL.g:12481:19: ( ( ( (lv_nullable_16_0= 'nullable' ) ) | (this_NOT_17= RULE_NOT otherlv_18= 'nullable' ) ) (otherlv_19= '=' ( (lv_nullableMessage_20_0= RULE_STRING ) ) )? )
            	    // InternalContextMappingDSL.g:12481:20: ( ( (lv_nullable_16_0= 'nullable' ) ) | (this_NOT_17= RULE_NOT otherlv_18= 'nullable' ) ) (otherlv_19= '=' ( (lv_nullableMessage_20_0= RULE_STRING ) ) )?
            	    {
            	    // InternalContextMappingDSL.g:12481:20: ( ( (lv_nullable_16_0= 'nullable' ) ) | (this_NOT_17= RULE_NOT otherlv_18= 'nullable' ) )
            	    int alt305=2;
            	    int LA305_0 = input.LA(1);

            	    if ( (LA305_0==134) ) {
            	        alt305=1;
            	    }
            	    else if ( (LA305_0==RULE_NOT) ) {
            	        alt305=2;
            	    }
            	    else {
            	        NoViableAltException nvae =
            	            new NoViableAltException("", 305, 0, input);

            	        throw nvae;
            	    }
            	    switch (alt305) {
            	        case 1 :
            	            // InternalContextMappingDSL.g:12482:10: ( (lv_nullable_16_0= 'nullable' ) )
            	            {
            	            // InternalContextMappingDSL.g:12482:10: ( (lv_nullable_16_0= 'nullable' ) )
            	            // InternalContextMappingDSL.g:12483:11: (lv_nullable_16_0= 'nullable' )
            	            {
            	            // InternalContextMappingDSL.g:12483:11: (lv_nullable_16_0= 'nullable' )
            	            // InternalContextMappingDSL.g:12484:12: lv_nullable_16_0= 'nullable'
            	            {
            	            lv_nullable_16_0=(Token)match(input,134,FOLLOW_167); 

            	            												newLeafNode(lv_nullable_16_0, grammarAccess.getAttributeAccess().getNullableNullableKeyword_4_3_0_0_0());
            	            											

            	            												if (current==null) {
            	            													current = createModelElement(grammarAccess.getAttributeRule());
            	            												}
            	            												setWithLastConsumed(current, "nullable", true, "nullable");
            	            											

            	            }


            	            }


            	            }
            	            break;
            	        case 2 :
            	            // InternalContextMappingDSL.g:12497:10: (this_NOT_17= RULE_NOT otherlv_18= 'nullable' )
            	            {
            	            // InternalContextMappingDSL.g:12497:10: (this_NOT_17= RULE_NOT otherlv_18= 'nullable' )
            	            // InternalContextMappingDSL.g:12498:11: this_NOT_17= RULE_NOT otherlv_18= 'nullable'
            	            {
            	            this_NOT_17=(Token)match(input,RULE_NOT,FOLLOW_168); 

            	            											newLeafNode(this_NOT_17, grammarAccess.getAttributeAccess().getNOTTerminalRuleCall_4_3_0_1_0());
            	            										
            	            otherlv_18=(Token)match(input,134,FOLLOW_167); 

            	            											newLeafNode(otherlv_18, grammarAccess.getAttributeAccess().getNullableKeyword_4_3_0_1_1());
            	            										

            	            }


            	            }
            	            break;

            	    }

            	    // InternalContextMappingDSL.g:12508:9: (otherlv_19= '=' ( (lv_nullableMessage_20_0= RULE_STRING ) ) )?
            	    int alt306=2;
            	    int LA306_0 = input.LA(1);

            	    if ( (LA306_0==21) ) {
            	        alt306=1;
            	    }
            	    switch (alt306) {
            	        case 1 :
            	            // InternalContextMappingDSL.g:12509:10: otherlv_19= '=' ( (lv_nullableMessage_20_0= RULE_STRING ) )
            	            {
            	            otherlv_19=(Token)match(input,21,FOLLOW_4); 

            	            										newLeafNode(otherlv_19, grammarAccess.getAttributeAccess().getEqualsSignKeyword_4_3_1_0());
            	            									
            	            // InternalContextMappingDSL.g:12513:10: ( (lv_nullableMessage_20_0= RULE_STRING ) )
            	            // InternalContextMappingDSL.g:12514:11: (lv_nullableMessage_20_0= RULE_STRING )
            	            {
            	            // InternalContextMappingDSL.g:12514:11: (lv_nullableMessage_20_0= RULE_STRING )
            	            // InternalContextMappingDSL.g:12515:12: lv_nullableMessage_20_0= RULE_STRING
            	            {
            	            lv_nullableMessage_20_0=(Token)match(input,RULE_STRING,FOLLOW_164); 

            	            												newLeafNode(lv_nullableMessage_20_0, grammarAccess.getAttributeAccess().getNullableMessageSTRINGTerminalRuleCall_4_3_1_1_0());
            	            											

            	            												if (current==null) {
            	            													current = createModelElement(grammarAccess.getAttributeRule());
            	            												}
            	            												setWithLastConsumed(
            	            													current,
            	            													"nullableMessage",
            	            													lv_nullableMessage_20_0,
            	            													"org.eclipse.xtext.common.Terminals.STRING");
            	            											

            	            }


            	            }


            	            }
            	            break;

            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getAttributeAccess().getUnorderedGroup_4());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 5 :
            	    // InternalContextMappingDSL.g:12538:4: ({...}? => ( ({...}? => ( (lv_index_21_0= 'index' ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:12538:4: ({...}? => ( ({...}? => ( (lv_index_21_0= 'index' ) ) ) ) )
            	    // InternalContextMappingDSL.g:12539:5: {...}? => ( ({...}? => ( (lv_index_21_0= 'index' ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 4) ) {
            	        throw new FailedPredicateException(input, "ruleAttribute", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 4)");
            	    }
            	    // InternalContextMappingDSL.g:12539:106: ( ({...}? => ( (lv_index_21_0= 'index' ) ) ) )
            	    // InternalContextMappingDSL.g:12540:6: ({...}? => ( (lv_index_21_0= 'index' ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 4);
            	    					
            	    // InternalContextMappingDSL.g:12543:9: ({...}? => ( (lv_index_21_0= 'index' ) ) )
            	    // InternalContextMappingDSL.g:12543:10: {...}? => ( (lv_index_21_0= 'index' ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleAttribute", "true");
            	    }
            	    // InternalContextMappingDSL.g:12543:19: ( (lv_index_21_0= 'index' ) )
            	    // InternalContextMappingDSL.g:12543:20: (lv_index_21_0= 'index' )
            	    {
            	    // InternalContextMappingDSL.g:12543:20: (lv_index_21_0= 'index' )
            	    // InternalContextMappingDSL.g:12544:10: lv_index_21_0= 'index'
            	    {
            	    lv_index_21_0=(Token)match(input,135,FOLLOW_164); 

            	    										newLeafNode(lv_index_21_0, grammarAccess.getAttributeAccess().getIndexIndexKeyword_4_4_0());
            	    									

            	    										if (current==null) {
            	    											current = createModelElement(grammarAccess.getAttributeRule());
            	    										}
            	    										setWithLastConsumed(current, "index", true, "index");
            	    									

            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getAttributeAccess().getUnorderedGroup_4());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 6 :
            	    // InternalContextMappingDSL.g:12561:4: ({...}? => ( ({...}? => ( ( (lv_assertFalse_22_0= 'assertFalse' ) ) (otherlv_23= '=' ( (lv_assertFalseMessage_24_0= RULE_STRING ) ) )? ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:12561:4: ({...}? => ( ({...}? => ( ( (lv_assertFalse_22_0= 'assertFalse' ) ) (otherlv_23= '=' ( (lv_assertFalseMessage_24_0= RULE_STRING ) ) )? ) ) ) )
            	    // InternalContextMappingDSL.g:12562:5: {...}? => ( ({...}? => ( ( (lv_assertFalse_22_0= 'assertFalse' ) ) (otherlv_23= '=' ( (lv_assertFalseMessage_24_0= RULE_STRING ) ) )? ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 5) ) {
            	        throw new FailedPredicateException(input, "ruleAttribute", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 5)");
            	    }
            	    // InternalContextMappingDSL.g:12562:106: ( ({...}? => ( ( (lv_assertFalse_22_0= 'assertFalse' ) ) (otherlv_23= '=' ( (lv_assertFalseMessage_24_0= RULE_STRING ) ) )? ) ) )
            	    // InternalContextMappingDSL.g:12563:6: ({...}? => ( ( (lv_assertFalse_22_0= 'assertFalse' ) ) (otherlv_23= '=' ( (lv_assertFalseMessage_24_0= RULE_STRING ) ) )? ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 5);
            	    					
            	    // InternalContextMappingDSL.g:12566:9: ({...}? => ( ( (lv_assertFalse_22_0= 'assertFalse' ) ) (otherlv_23= '=' ( (lv_assertFalseMessage_24_0= RULE_STRING ) ) )? ) )
            	    // InternalContextMappingDSL.g:12566:10: {...}? => ( ( (lv_assertFalse_22_0= 'assertFalse' ) ) (otherlv_23= '=' ( (lv_assertFalseMessage_24_0= RULE_STRING ) ) )? )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleAttribute", "true");
            	    }
            	    // InternalContextMappingDSL.g:12566:19: ( ( (lv_assertFalse_22_0= 'assertFalse' ) ) (otherlv_23= '=' ( (lv_assertFalseMessage_24_0= RULE_STRING ) ) )? )
            	    // InternalContextMappingDSL.g:12566:20: ( (lv_assertFalse_22_0= 'assertFalse' ) ) (otherlv_23= '=' ( (lv_assertFalseMessage_24_0= RULE_STRING ) ) )?
            	    {
            	    // InternalContextMappingDSL.g:12566:20: ( (lv_assertFalse_22_0= 'assertFalse' ) )
            	    // InternalContextMappingDSL.g:12567:10: (lv_assertFalse_22_0= 'assertFalse' )
            	    {
            	    // InternalContextMappingDSL.g:12567:10: (lv_assertFalse_22_0= 'assertFalse' )
            	    // InternalContextMappingDSL.g:12568:11: lv_assertFalse_22_0= 'assertFalse'
            	    {
            	    lv_assertFalse_22_0=(Token)match(input,136,FOLLOW_167); 

            	    											newLeafNode(lv_assertFalse_22_0, grammarAccess.getAttributeAccess().getAssertFalseAssertFalseKeyword_4_5_0_0());
            	    										

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getAttributeRule());
            	    											}
            	    											setWithLastConsumed(current, "assertFalse", true, "assertFalse");
            	    										

            	    }


            	    }

            	    // InternalContextMappingDSL.g:12580:9: (otherlv_23= '=' ( (lv_assertFalseMessage_24_0= RULE_STRING ) ) )?
            	    int alt307=2;
            	    int LA307_0 = input.LA(1);

            	    if ( (LA307_0==21) ) {
            	        alt307=1;
            	    }
            	    switch (alt307) {
            	        case 1 :
            	            // InternalContextMappingDSL.g:12581:10: otherlv_23= '=' ( (lv_assertFalseMessage_24_0= RULE_STRING ) )
            	            {
            	            otherlv_23=(Token)match(input,21,FOLLOW_4); 

            	            										newLeafNode(otherlv_23, grammarAccess.getAttributeAccess().getEqualsSignKeyword_4_5_1_0());
            	            									
            	            // InternalContextMappingDSL.g:12585:10: ( (lv_assertFalseMessage_24_0= RULE_STRING ) )
            	            // InternalContextMappingDSL.g:12586:11: (lv_assertFalseMessage_24_0= RULE_STRING )
            	            {
            	            // InternalContextMappingDSL.g:12586:11: (lv_assertFalseMessage_24_0= RULE_STRING )
            	            // InternalContextMappingDSL.g:12587:12: lv_assertFalseMessage_24_0= RULE_STRING
            	            {
            	            lv_assertFalseMessage_24_0=(Token)match(input,RULE_STRING,FOLLOW_164); 

            	            												newLeafNode(lv_assertFalseMessage_24_0, grammarAccess.getAttributeAccess().getAssertFalseMessageSTRINGTerminalRuleCall_4_5_1_1_0());
            	            											

            	            												if (current==null) {
            	            													current = createModelElement(grammarAccess.getAttributeRule());
            	            												}
            	            												setWithLastConsumed(
            	            													current,
            	            													"assertFalseMessage",
            	            													lv_assertFalseMessage_24_0,
            	            													"org.eclipse.xtext.common.Terminals.STRING");
            	            											

            	            }


            	            }


            	            }
            	            break;

            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getAttributeAccess().getUnorderedGroup_4());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 7 :
            	    // InternalContextMappingDSL.g:12610:4: ({...}? => ( ({...}? => ( ( (lv_assertTrue_25_0= 'assertTrue' ) ) (otherlv_26= '=' ( (lv_assertTrueMessage_27_0= RULE_STRING ) ) )? ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:12610:4: ({...}? => ( ({...}? => ( ( (lv_assertTrue_25_0= 'assertTrue' ) ) (otherlv_26= '=' ( (lv_assertTrueMessage_27_0= RULE_STRING ) ) )? ) ) ) )
            	    // InternalContextMappingDSL.g:12611:5: {...}? => ( ({...}? => ( ( (lv_assertTrue_25_0= 'assertTrue' ) ) (otherlv_26= '=' ( (lv_assertTrueMessage_27_0= RULE_STRING ) ) )? ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 6) ) {
            	        throw new FailedPredicateException(input, "ruleAttribute", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 6)");
            	    }
            	    // InternalContextMappingDSL.g:12611:106: ( ({...}? => ( ( (lv_assertTrue_25_0= 'assertTrue' ) ) (otherlv_26= '=' ( (lv_assertTrueMessage_27_0= RULE_STRING ) ) )? ) ) )
            	    // InternalContextMappingDSL.g:12612:6: ({...}? => ( ( (lv_assertTrue_25_0= 'assertTrue' ) ) (otherlv_26= '=' ( (lv_assertTrueMessage_27_0= RULE_STRING ) ) )? ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 6);
            	    					
            	    // InternalContextMappingDSL.g:12615:9: ({...}? => ( ( (lv_assertTrue_25_0= 'assertTrue' ) ) (otherlv_26= '=' ( (lv_assertTrueMessage_27_0= RULE_STRING ) ) )? ) )
            	    // InternalContextMappingDSL.g:12615:10: {...}? => ( ( (lv_assertTrue_25_0= 'assertTrue' ) ) (otherlv_26= '=' ( (lv_assertTrueMessage_27_0= RULE_STRING ) ) )? )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleAttribute", "true");
            	    }
            	    // InternalContextMappingDSL.g:12615:19: ( ( (lv_assertTrue_25_0= 'assertTrue' ) ) (otherlv_26= '=' ( (lv_assertTrueMessage_27_0= RULE_STRING ) ) )? )
            	    // InternalContextMappingDSL.g:12615:20: ( (lv_assertTrue_25_0= 'assertTrue' ) ) (otherlv_26= '=' ( (lv_assertTrueMessage_27_0= RULE_STRING ) ) )?
            	    {
            	    // InternalContextMappingDSL.g:12615:20: ( (lv_assertTrue_25_0= 'assertTrue' ) )
            	    // InternalContextMappingDSL.g:12616:10: (lv_assertTrue_25_0= 'assertTrue' )
            	    {
            	    // InternalContextMappingDSL.g:12616:10: (lv_assertTrue_25_0= 'assertTrue' )
            	    // InternalContextMappingDSL.g:12617:11: lv_assertTrue_25_0= 'assertTrue'
            	    {
            	    lv_assertTrue_25_0=(Token)match(input,137,FOLLOW_167); 

            	    											newLeafNode(lv_assertTrue_25_0, grammarAccess.getAttributeAccess().getAssertTrueAssertTrueKeyword_4_6_0_0());
            	    										

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getAttributeRule());
            	    											}
            	    											setWithLastConsumed(current, "assertTrue", true, "assertTrue");
            	    										

            	    }


            	    }

            	    // InternalContextMappingDSL.g:12629:9: (otherlv_26= '=' ( (lv_assertTrueMessage_27_0= RULE_STRING ) ) )?
            	    int alt308=2;
            	    int LA308_0 = input.LA(1);

            	    if ( (LA308_0==21) ) {
            	        alt308=1;
            	    }
            	    switch (alt308) {
            	        case 1 :
            	            // InternalContextMappingDSL.g:12630:10: otherlv_26= '=' ( (lv_assertTrueMessage_27_0= RULE_STRING ) )
            	            {
            	            otherlv_26=(Token)match(input,21,FOLLOW_4); 

            	            										newLeafNode(otherlv_26, grammarAccess.getAttributeAccess().getEqualsSignKeyword_4_6_1_0());
            	            									
            	            // InternalContextMappingDSL.g:12634:10: ( (lv_assertTrueMessage_27_0= RULE_STRING ) )
            	            // InternalContextMappingDSL.g:12635:11: (lv_assertTrueMessage_27_0= RULE_STRING )
            	            {
            	            // InternalContextMappingDSL.g:12635:11: (lv_assertTrueMessage_27_0= RULE_STRING )
            	            // InternalContextMappingDSL.g:12636:12: lv_assertTrueMessage_27_0= RULE_STRING
            	            {
            	            lv_assertTrueMessage_27_0=(Token)match(input,RULE_STRING,FOLLOW_164); 

            	            												newLeafNode(lv_assertTrueMessage_27_0, grammarAccess.getAttributeAccess().getAssertTrueMessageSTRINGTerminalRuleCall_4_6_1_1_0());
            	            											

            	            												if (current==null) {
            	            													current = createModelElement(grammarAccess.getAttributeRule());
            	            												}
            	            												setWithLastConsumed(
            	            													current,
            	            													"assertTrueMessage",
            	            													lv_assertTrueMessage_27_0,
            	            													"org.eclipse.xtext.common.Terminals.STRING");
            	            											

            	            }


            	            }


            	            }
            	            break;

            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getAttributeAccess().getUnorderedGroup_4());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 8 :
            	    // InternalContextMappingDSL.g:12659:4: ({...}? => ( ({...}? => (otherlv_28= 'hint' otherlv_29= '=' ( (lv_hint_30_0= RULE_STRING ) ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:12659:4: ({...}? => ( ({...}? => (otherlv_28= 'hint' otherlv_29= '=' ( (lv_hint_30_0= RULE_STRING ) ) ) ) ) )
            	    // InternalContextMappingDSL.g:12660:5: {...}? => ( ({...}? => (otherlv_28= 'hint' otherlv_29= '=' ( (lv_hint_30_0= RULE_STRING ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 7) ) {
            	        throw new FailedPredicateException(input, "ruleAttribute", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 7)");
            	    }
            	    // InternalContextMappingDSL.g:12660:106: ( ({...}? => (otherlv_28= 'hint' otherlv_29= '=' ( (lv_hint_30_0= RULE_STRING ) ) ) ) )
            	    // InternalContextMappingDSL.g:12661:6: ({...}? => (otherlv_28= 'hint' otherlv_29= '=' ( (lv_hint_30_0= RULE_STRING ) ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 7);
            	    					
            	    // InternalContextMappingDSL.g:12664:9: ({...}? => (otherlv_28= 'hint' otherlv_29= '=' ( (lv_hint_30_0= RULE_STRING ) ) ) )
            	    // InternalContextMappingDSL.g:12664:10: {...}? => (otherlv_28= 'hint' otherlv_29= '=' ( (lv_hint_30_0= RULE_STRING ) ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleAttribute", "true");
            	    }
            	    // InternalContextMappingDSL.g:12664:19: (otherlv_28= 'hint' otherlv_29= '=' ( (lv_hint_30_0= RULE_STRING ) ) )
            	    // InternalContextMappingDSL.g:12664:20: otherlv_28= 'hint' otherlv_29= '=' ( (lv_hint_30_0= RULE_STRING ) )
            	    {
            	    otherlv_28=(Token)match(input,67,FOLLOW_81); 

            	    									newLeafNode(otherlv_28, grammarAccess.getAttributeAccess().getHintKeyword_4_7_0());
            	    								
            	    otherlv_29=(Token)match(input,21,FOLLOW_4); 

            	    									newLeafNode(otherlv_29, grammarAccess.getAttributeAccess().getEqualsSignKeyword_4_7_1());
            	    								
            	    // InternalContextMappingDSL.g:12672:9: ( (lv_hint_30_0= RULE_STRING ) )
            	    // InternalContextMappingDSL.g:12673:10: (lv_hint_30_0= RULE_STRING )
            	    {
            	    // InternalContextMappingDSL.g:12673:10: (lv_hint_30_0= RULE_STRING )
            	    // InternalContextMappingDSL.g:12674:11: lv_hint_30_0= RULE_STRING
            	    {
            	    lv_hint_30_0=(Token)match(input,RULE_STRING,FOLLOW_164); 

            	    											newLeafNode(lv_hint_30_0, grammarAccess.getAttributeAccess().getHintSTRINGTerminalRuleCall_4_7_2_0());
            	    										

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getAttributeRule());
            	    											}
            	    											setWithLastConsumed(
            	    												current,
            	    												"hint",
            	    												lv_hint_30_0,
            	    												"org.eclipse.xtext.common.Terminals.STRING");
            	    										

            	    }


            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getAttributeAccess().getUnorderedGroup_4());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 9 :
            	    // InternalContextMappingDSL.g:12696:4: ({...}? => ( ({...}? => ( ( (lv_creditCardNumber_31_0= 'creditCardNumber' ) ) (otherlv_32= '=' ( (lv_creditCardNumberMessage_33_0= RULE_STRING ) ) )? ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:12696:4: ({...}? => ( ({...}? => ( ( (lv_creditCardNumber_31_0= 'creditCardNumber' ) ) (otherlv_32= '=' ( (lv_creditCardNumberMessage_33_0= RULE_STRING ) ) )? ) ) ) )
            	    // InternalContextMappingDSL.g:12697:5: {...}? => ( ({...}? => ( ( (lv_creditCardNumber_31_0= 'creditCardNumber' ) ) (otherlv_32= '=' ( (lv_creditCardNumberMessage_33_0= RULE_STRING ) ) )? ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 8) ) {
            	        throw new FailedPredicateException(input, "ruleAttribute", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 8)");
            	    }
            	    // InternalContextMappingDSL.g:12697:106: ( ({...}? => ( ( (lv_creditCardNumber_31_0= 'creditCardNumber' ) ) (otherlv_32= '=' ( (lv_creditCardNumberMessage_33_0= RULE_STRING ) ) )? ) ) )
            	    // InternalContextMappingDSL.g:12698:6: ({...}? => ( ( (lv_creditCardNumber_31_0= 'creditCardNumber' ) ) (otherlv_32= '=' ( (lv_creditCardNumberMessage_33_0= RULE_STRING ) ) )? ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 8);
            	    					
            	    // InternalContextMappingDSL.g:12701:9: ({...}? => ( ( (lv_creditCardNumber_31_0= 'creditCardNumber' ) ) (otherlv_32= '=' ( (lv_creditCardNumberMessage_33_0= RULE_STRING ) ) )? ) )
            	    // InternalContextMappingDSL.g:12701:10: {...}? => ( ( (lv_creditCardNumber_31_0= 'creditCardNumber' ) ) (otherlv_32= '=' ( (lv_creditCardNumberMessage_33_0= RULE_STRING ) ) )? )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleAttribute", "true");
            	    }
            	    // InternalContextMappingDSL.g:12701:19: ( ( (lv_creditCardNumber_31_0= 'creditCardNumber' ) ) (otherlv_32= '=' ( (lv_creditCardNumberMessage_33_0= RULE_STRING ) ) )? )
            	    // InternalContextMappingDSL.g:12701:20: ( (lv_creditCardNumber_31_0= 'creditCardNumber' ) ) (otherlv_32= '=' ( (lv_creditCardNumberMessage_33_0= RULE_STRING ) ) )?
            	    {
            	    // InternalContextMappingDSL.g:12701:20: ( (lv_creditCardNumber_31_0= 'creditCardNumber' ) )
            	    // InternalContextMappingDSL.g:12702:10: (lv_creditCardNumber_31_0= 'creditCardNumber' )
            	    {
            	    // InternalContextMappingDSL.g:12702:10: (lv_creditCardNumber_31_0= 'creditCardNumber' )
            	    // InternalContextMappingDSL.g:12703:11: lv_creditCardNumber_31_0= 'creditCardNumber'
            	    {
            	    lv_creditCardNumber_31_0=(Token)match(input,138,FOLLOW_167); 

            	    											newLeafNode(lv_creditCardNumber_31_0, grammarAccess.getAttributeAccess().getCreditCardNumberCreditCardNumberKeyword_4_8_0_0());
            	    										

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getAttributeRule());
            	    											}
            	    											setWithLastConsumed(current, "creditCardNumber", true, "creditCardNumber");
            	    										

            	    }


            	    }

            	    // InternalContextMappingDSL.g:12715:9: (otherlv_32= '=' ( (lv_creditCardNumberMessage_33_0= RULE_STRING ) ) )?
            	    int alt309=2;
            	    int LA309_0 = input.LA(1);

            	    if ( (LA309_0==21) ) {
            	        alt309=1;
            	    }
            	    switch (alt309) {
            	        case 1 :
            	            // InternalContextMappingDSL.g:12716:10: otherlv_32= '=' ( (lv_creditCardNumberMessage_33_0= RULE_STRING ) )
            	            {
            	            otherlv_32=(Token)match(input,21,FOLLOW_4); 

            	            										newLeafNode(otherlv_32, grammarAccess.getAttributeAccess().getEqualsSignKeyword_4_8_1_0());
            	            									
            	            // InternalContextMappingDSL.g:12720:10: ( (lv_creditCardNumberMessage_33_0= RULE_STRING ) )
            	            // InternalContextMappingDSL.g:12721:11: (lv_creditCardNumberMessage_33_0= RULE_STRING )
            	            {
            	            // InternalContextMappingDSL.g:12721:11: (lv_creditCardNumberMessage_33_0= RULE_STRING )
            	            // InternalContextMappingDSL.g:12722:12: lv_creditCardNumberMessage_33_0= RULE_STRING
            	            {
            	            lv_creditCardNumberMessage_33_0=(Token)match(input,RULE_STRING,FOLLOW_164); 

            	            												newLeafNode(lv_creditCardNumberMessage_33_0, grammarAccess.getAttributeAccess().getCreditCardNumberMessageSTRINGTerminalRuleCall_4_8_1_1_0());
            	            											

            	            												if (current==null) {
            	            													current = createModelElement(grammarAccess.getAttributeRule());
            	            												}
            	            												setWithLastConsumed(
            	            													current,
            	            													"creditCardNumberMessage",
            	            													lv_creditCardNumberMessage_33_0,
            	            													"org.eclipse.xtext.common.Terminals.STRING");
            	            											

            	            }


            	            }


            	            }
            	            break;

            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getAttributeAccess().getUnorderedGroup_4());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 10 :
            	    // InternalContextMappingDSL.g:12745:4: ({...}? => ( ({...}? => (otherlv_34= 'digits' otherlv_35= '=' ( (lv_digits_36_0= RULE_STRING ) ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:12745:4: ({...}? => ( ({...}? => (otherlv_34= 'digits' otherlv_35= '=' ( (lv_digits_36_0= RULE_STRING ) ) ) ) ) )
            	    // InternalContextMappingDSL.g:12746:5: {...}? => ( ({...}? => (otherlv_34= 'digits' otherlv_35= '=' ( (lv_digits_36_0= RULE_STRING ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 9) ) {
            	        throw new FailedPredicateException(input, "ruleAttribute", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 9)");
            	    }
            	    // InternalContextMappingDSL.g:12746:106: ( ({...}? => (otherlv_34= 'digits' otherlv_35= '=' ( (lv_digits_36_0= RULE_STRING ) ) ) ) )
            	    // InternalContextMappingDSL.g:12747:6: ({...}? => (otherlv_34= 'digits' otherlv_35= '=' ( (lv_digits_36_0= RULE_STRING ) ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 9);
            	    					
            	    // InternalContextMappingDSL.g:12750:9: ({...}? => (otherlv_34= 'digits' otherlv_35= '=' ( (lv_digits_36_0= RULE_STRING ) ) ) )
            	    // InternalContextMappingDSL.g:12750:10: {...}? => (otherlv_34= 'digits' otherlv_35= '=' ( (lv_digits_36_0= RULE_STRING ) ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleAttribute", "true");
            	    }
            	    // InternalContextMappingDSL.g:12750:19: (otherlv_34= 'digits' otherlv_35= '=' ( (lv_digits_36_0= RULE_STRING ) ) )
            	    // InternalContextMappingDSL.g:12750:20: otherlv_34= 'digits' otherlv_35= '=' ( (lv_digits_36_0= RULE_STRING ) )
            	    {
            	    otherlv_34=(Token)match(input,139,FOLLOW_81); 

            	    									newLeafNode(otherlv_34, grammarAccess.getAttributeAccess().getDigitsKeyword_4_9_0());
            	    								
            	    otherlv_35=(Token)match(input,21,FOLLOW_4); 

            	    									newLeafNode(otherlv_35, grammarAccess.getAttributeAccess().getEqualsSignKeyword_4_9_1());
            	    								
            	    // InternalContextMappingDSL.g:12758:9: ( (lv_digits_36_0= RULE_STRING ) )
            	    // InternalContextMappingDSL.g:12759:10: (lv_digits_36_0= RULE_STRING )
            	    {
            	    // InternalContextMappingDSL.g:12759:10: (lv_digits_36_0= RULE_STRING )
            	    // InternalContextMappingDSL.g:12760:11: lv_digits_36_0= RULE_STRING
            	    {
            	    lv_digits_36_0=(Token)match(input,RULE_STRING,FOLLOW_164); 

            	    											newLeafNode(lv_digits_36_0, grammarAccess.getAttributeAccess().getDigitsSTRINGTerminalRuleCall_4_9_2_0());
            	    										

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getAttributeRule());
            	    											}
            	    											setWithLastConsumed(
            	    												current,
            	    												"digits",
            	    												lv_digits_36_0,
            	    												"org.eclipse.xtext.common.Terminals.STRING");
            	    										

            	    }


            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getAttributeAccess().getUnorderedGroup_4());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 11 :
            	    // InternalContextMappingDSL.g:12782:4: ({...}? => ( ({...}? => ( ( (lv_email_37_0= 'email' ) ) (otherlv_38= '=' ( (lv_emailMessage_39_0= RULE_STRING ) ) )? ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:12782:4: ({...}? => ( ({...}? => ( ( (lv_email_37_0= 'email' ) ) (otherlv_38= '=' ( (lv_emailMessage_39_0= RULE_STRING ) ) )? ) ) ) )
            	    // InternalContextMappingDSL.g:12783:5: {...}? => ( ({...}? => ( ( (lv_email_37_0= 'email' ) ) (otherlv_38= '=' ( (lv_emailMessage_39_0= RULE_STRING ) ) )? ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 10) ) {
            	        throw new FailedPredicateException(input, "ruleAttribute", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 10)");
            	    }
            	    // InternalContextMappingDSL.g:12783:107: ( ({...}? => ( ( (lv_email_37_0= 'email' ) ) (otherlv_38= '=' ( (lv_emailMessage_39_0= RULE_STRING ) ) )? ) ) )
            	    // InternalContextMappingDSL.g:12784:6: ({...}? => ( ( (lv_email_37_0= 'email' ) ) (otherlv_38= '=' ( (lv_emailMessage_39_0= RULE_STRING ) ) )? ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 10);
            	    					
            	    // InternalContextMappingDSL.g:12787:9: ({...}? => ( ( (lv_email_37_0= 'email' ) ) (otherlv_38= '=' ( (lv_emailMessage_39_0= RULE_STRING ) ) )? ) )
            	    // InternalContextMappingDSL.g:12787:10: {...}? => ( ( (lv_email_37_0= 'email' ) ) (otherlv_38= '=' ( (lv_emailMessage_39_0= RULE_STRING ) ) )? )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleAttribute", "true");
            	    }
            	    // InternalContextMappingDSL.g:12787:19: ( ( (lv_email_37_0= 'email' ) ) (otherlv_38= '=' ( (lv_emailMessage_39_0= RULE_STRING ) ) )? )
            	    // InternalContextMappingDSL.g:12787:20: ( (lv_email_37_0= 'email' ) ) (otherlv_38= '=' ( (lv_emailMessage_39_0= RULE_STRING ) ) )?
            	    {
            	    // InternalContextMappingDSL.g:12787:20: ( (lv_email_37_0= 'email' ) )
            	    // InternalContextMappingDSL.g:12788:10: (lv_email_37_0= 'email' )
            	    {
            	    // InternalContextMappingDSL.g:12788:10: (lv_email_37_0= 'email' )
            	    // InternalContextMappingDSL.g:12789:11: lv_email_37_0= 'email'
            	    {
            	    lv_email_37_0=(Token)match(input,140,FOLLOW_167); 

            	    											newLeafNode(lv_email_37_0, grammarAccess.getAttributeAccess().getEmailEmailKeyword_4_10_0_0());
            	    										

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getAttributeRule());
            	    											}
            	    											setWithLastConsumed(current, "email", true, "email");
            	    										

            	    }


            	    }

            	    // InternalContextMappingDSL.g:12801:9: (otherlv_38= '=' ( (lv_emailMessage_39_0= RULE_STRING ) ) )?
            	    int alt310=2;
            	    int LA310_0 = input.LA(1);

            	    if ( (LA310_0==21) ) {
            	        alt310=1;
            	    }
            	    switch (alt310) {
            	        case 1 :
            	            // InternalContextMappingDSL.g:12802:10: otherlv_38= '=' ( (lv_emailMessage_39_0= RULE_STRING ) )
            	            {
            	            otherlv_38=(Token)match(input,21,FOLLOW_4); 

            	            										newLeafNode(otherlv_38, grammarAccess.getAttributeAccess().getEqualsSignKeyword_4_10_1_0());
            	            									
            	            // InternalContextMappingDSL.g:12806:10: ( (lv_emailMessage_39_0= RULE_STRING ) )
            	            // InternalContextMappingDSL.g:12807:11: (lv_emailMessage_39_0= RULE_STRING )
            	            {
            	            // InternalContextMappingDSL.g:12807:11: (lv_emailMessage_39_0= RULE_STRING )
            	            // InternalContextMappingDSL.g:12808:12: lv_emailMessage_39_0= RULE_STRING
            	            {
            	            lv_emailMessage_39_0=(Token)match(input,RULE_STRING,FOLLOW_164); 

            	            												newLeafNode(lv_emailMessage_39_0, grammarAccess.getAttributeAccess().getEmailMessageSTRINGTerminalRuleCall_4_10_1_1_0());
            	            											

            	            												if (current==null) {
            	            													current = createModelElement(grammarAccess.getAttributeRule());
            	            												}
            	            												setWithLastConsumed(
            	            													current,
            	            													"emailMessage",
            	            													lv_emailMessage_39_0,
            	            													"org.eclipse.xtext.common.Terminals.STRING");
            	            											

            	            }


            	            }


            	            }
            	            break;

            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getAttributeAccess().getUnorderedGroup_4());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 12 :
            	    // InternalContextMappingDSL.g:12831:4: ({...}? => ( ({...}? => ( ( (lv_future_40_0= 'future' ) ) (otherlv_41= '=' ( (lv_futureMessage_42_0= RULE_STRING ) ) )? ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:12831:4: ({...}? => ( ({...}? => ( ( (lv_future_40_0= 'future' ) ) (otherlv_41= '=' ( (lv_futureMessage_42_0= RULE_STRING ) ) )? ) ) ) )
            	    // InternalContextMappingDSL.g:12832:5: {...}? => ( ({...}? => ( ( (lv_future_40_0= 'future' ) ) (otherlv_41= '=' ( (lv_futureMessage_42_0= RULE_STRING ) ) )? ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 11) ) {
            	        throw new FailedPredicateException(input, "ruleAttribute", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 11)");
            	    }
            	    // InternalContextMappingDSL.g:12832:107: ( ({...}? => ( ( (lv_future_40_0= 'future' ) ) (otherlv_41= '=' ( (lv_futureMessage_42_0= RULE_STRING ) ) )? ) ) )
            	    // InternalContextMappingDSL.g:12833:6: ({...}? => ( ( (lv_future_40_0= 'future' ) ) (otherlv_41= '=' ( (lv_futureMessage_42_0= RULE_STRING ) ) )? ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 11);
            	    					
            	    // InternalContextMappingDSL.g:12836:9: ({...}? => ( ( (lv_future_40_0= 'future' ) ) (otherlv_41= '=' ( (lv_futureMessage_42_0= RULE_STRING ) ) )? ) )
            	    // InternalContextMappingDSL.g:12836:10: {...}? => ( ( (lv_future_40_0= 'future' ) ) (otherlv_41= '=' ( (lv_futureMessage_42_0= RULE_STRING ) ) )? )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleAttribute", "true");
            	    }
            	    // InternalContextMappingDSL.g:12836:19: ( ( (lv_future_40_0= 'future' ) ) (otherlv_41= '=' ( (lv_futureMessage_42_0= RULE_STRING ) ) )? )
            	    // InternalContextMappingDSL.g:12836:20: ( (lv_future_40_0= 'future' ) ) (otherlv_41= '=' ( (lv_futureMessage_42_0= RULE_STRING ) ) )?
            	    {
            	    // InternalContextMappingDSL.g:12836:20: ( (lv_future_40_0= 'future' ) )
            	    // InternalContextMappingDSL.g:12837:10: (lv_future_40_0= 'future' )
            	    {
            	    // InternalContextMappingDSL.g:12837:10: (lv_future_40_0= 'future' )
            	    // InternalContextMappingDSL.g:12838:11: lv_future_40_0= 'future'
            	    {
            	    lv_future_40_0=(Token)match(input,141,FOLLOW_167); 

            	    											newLeafNode(lv_future_40_0, grammarAccess.getAttributeAccess().getFutureFutureKeyword_4_11_0_0());
            	    										

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getAttributeRule());
            	    											}
            	    											setWithLastConsumed(current, "future", true, "future");
            	    										

            	    }


            	    }

            	    // InternalContextMappingDSL.g:12850:9: (otherlv_41= '=' ( (lv_futureMessage_42_0= RULE_STRING ) ) )?
            	    int alt311=2;
            	    int LA311_0 = input.LA(1);

            	    if ( (LA311_0==21) ) {
            	        alt311=1;
            	    }
            	    switch (alt311) {
            	        case 1 :
            	            // InternalContextMappingDSL.g:12851:10: otherlv_41= '=' ( (lv_futureMessage_42_0= RULE_STRING ) )
            	            {
            	            otherlv_41=(Token)match(input,21,FOLLOW_4); 

            	            										newLeafNode(otherlv_41, grammarAccess.getAttributeAccess().getEqualsSignKeyword_4_11_1_0());
            	            									
            	            // InternalContextMappingDSL.g:12855:10: ( (lv_futureMessage_42_0= RULE_STRING ) )
            	            // InternalContextMappingDSL.g:12856:11: (lv_futureMessage_42_0= RULE_STRING )
            	            {
            	            // InternalContextMappingDSL.g:12856:11: (lv_futureMessage_42_0= RULE_STRING )
            	            // InternalContextMappingDSL.g:12857:12: lv_futureMessage_42_0= RULE_STRING
            	            {
            	            lv_futureMessage_42_0=(Token)match(input,RULE_STRING,FOLLOW_164); 

            	            												newLeafNode(lv_futureMessage_42_0, grammarAccess.getAttributeAccess().getFutureMessageSTRINGTerminalRuleCall_4_11_1_1_0());
            	            											

            	            												if (current==null) {
            	            													current = createModelElement(grammarAccess.getAttributeRule());
            	            												}
            	            												setWithLastConsumed(
            	            													current,
            	            													"futureMessage",
            	            													lv_futureMessage_42_0,
            	            													"org.eclipse.xtext.common.Terminals.STRING");
            	            											

            	            }


            	            }


            	            }
            	            break;

            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getAttributeAccess().getUnorderedGroup_4());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 13 :
            	    // InternalContextMappingDSL.g:12880:4: ({...}? => ( ({...}? => ( ( (lv_past_43_0= 'past' ) ) (otherlv_44= '=' ( (lv_pastMessage_45_0= RULE_STRING ) ) )? ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:12880:4: ({...}? => ( ({...}? => ( ( (lv_past_43_0= 'past' ) ) (otherlv_44= '=' ( (lv_pastMessage_45_0= RULE_STRING ) ) )? ) ) ) )
            	    // InternalContextMappingDSL.g:12881:5: {...}? => ( ({...}? => ( ( (lv_past_43_0= 'past' ) ) (otherlv_44= '=' ( (lv_pastMessage_45_0= RULE_STRING ) ) )? ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 12) ) {
            	        throw new FailedPredicateException(input, "ruleAttribute", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 12)");
            	    }
            	    // InternalContextMappingDSL.g:12881:107: ( ({...}? => ( ( (lv_past_43_0= 'past' ) ) (otherlv_44= '=' ( (lv_pastMessage_45_0= RULE_STRING ) ) )? ) ) )
            	    // InternalContextMappingDSL.g:12882:6: ({...}? => ( ( (lv_past_43_0= 'past' ) ) (otherlv_44= '=' ( (lv_pastMessage_45_0= RULE_STRING ) ) )? ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 12);
            	    					
            	    // InternalContextMappingDSL.g:12885:9: ({...}? => ( ( (lv_past_43_0= 'past' ) ) (otherlv_44= '=' ( (lv_pastMessage_45_0= RULE_STRING ) ) )? ) )
            	    // InternalContextMappingDSL.g:12885:10: {...}? => ( ( (lv_past_43_0= 'past' ) ) (otherlv_44= '=' ( (lv_pastMessage_45_0= RULE_STRING ) ) )? )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleAttribute", "true");
            	    }
            	    // InternalContextMappingDSL.g:12885:19: ( ( (lv_past_43_0= 'past' ) ) (otherlv_44= '=' ( (lv_pastMessage_45_0= RULE_STRING ) ) )? )
            	    // InternalContextMappingDSL.g:12885:20: ( (lv_past_43_0= 'past' ) ) (otherlv_44= '=' ( (lv_pastMessage_45_0= RULE_STRING ) ) )?
            	    {
            	    // InternalContextMappingDSL.g:12885:20: ( (lv_past_43_0= 'past' ) )
            	    // InternalContextMappingDSL.g:12886:10: (lv_past_43_0= 'past' )
            	    {
            	    // InternalContextMappingDSL.g:12886:10: (lv_past_43_0= 'past' )
            	    // InternalContextMappingDSL.g:12887:11: lv_past_43_0= 'past'
            	    {
            	    lv_past_43_0=(Token)match(input,142,FOLLOW_167); 

            	    											newLeafNode(lv_past_43_0, grammarAccess.getAttributeAccess().getPastPastKeyword_4_12_0_0());
            	    										

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getAttributeRule());
            	    											}
            	    											setWithLastConsumed(current, "past", true, "past");
            	    										

            	    }


            	    }

            	    // InternalContextMappingDSL.g:12899:9: (otherlv_44= '=' ( (lv_pastMessage_45_0= RULE_STRING ) ) )?
            	    int alt312=2;
            	    int LA312_0 = input.LA(1);

            	    if ( (LA312_0==21) ) {
            	        alt312=1;
            	    }
            	    switch (alt312) {
            	        case 1 :
            	            // InternalContextMappingDSL.g:12900:10: otherlv_44= '=' ( (lv_pastMessage_45_0= RULE_STRING ) )
            	            {
            	            otherlv_44=(Token)match(input,21,FOLLOW_4); 

            	            										newLeafNode(otherlv_44, grammarAccess.getAttributeAccess().getEqualsSignKeyword_4_12_1_0());
            	            									
            	            // InternalContextMappingDSL.g:12904:10: ( (lv_pastMessage_45_0= RULE_STRING ) )
            	            // InternalContextMappingDSL.g:12905:11: (lv_pastMessage_45_0= RULE_STRING )
            	            {
            	            // InternalContextMappingDSL.g:12905:11: (lv_pastMessage_45_0= RULE_STRING )
            	            // InternalContextMappingDSL.g:12906:12: lv_pastMessage_45_0= RULE_STRING
            	            {
            	            lv_pastMessage_45_0=(Token)match(input,RULE_STRING,FOLLOW_164); 

            	            												newLeafNode(lv_pastMessage_45_0, grammarAccess.getAttributeAccess().getPastMessageSTRINGTerminalRuleCall_4_12_1_1_0());
            	            											

            	            												if (current==null) {
            	            													current = createModelElement(grammarAccess.getAttributeRule());
            	            												}
            	            												setWithLastConsumed(
            	            													current,
            	            													"pastMessage",
            	            													lv_pastMessage_45_0,
            	            													"org.eclipse.xtext.common.Terminals.STRING");
            	            											

            	            }


            	            }


            	            }
            	            break;

            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getAttributeAccess().getUnorderedGroup_4());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 14 :
            	    // InternalContextMappingDSL.g:12929:4: ({...}? => ( ({...}? => (otherlv_46= 'max' otherlv_47= '=' ( (lv_max_48_0= RULE_STRING ) ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:12929:4: ({...}? => ( ({...}? => (otherlv_46= 'max' otherlv_47= '=' ( (lv_max_48_0= RULE_STRING ) ) ) ) ) )
            	    // InternalContextMappingDSL.g:12930:5: {...}? => ( ({...}? => (otherlv_46= 'max' otherlv_47= '=' ( (lv_max_48_0= RULE_STRING ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 13) ) {
            	        throw new FailedPredicateException(input, "ruleAttribute", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 13)");
            	    }
            	    // InternalContextMappingDSL.g:12930:107: ( ({...}? => (otherlv_46= 'max' otherlv_47= '=' ( (lv_max_48_0= RULE_STRING ) ) ) ) )
            	    // InternalContextMappingDSL.g:12931:6: ({...}? => (otherlv_46= 'max' otherlv_47= '=' ( (lv_max_48_0= RULE_STRING ) ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 13);
            	    					
            	    // InternalContextMappingDSL.g:12934:9: ({...}? => (otherlv_46= 'max' otherlv_47= '=' ( (lv_max_48_0= RULE_STRING ) ) ) )
            	    // InternalContextMappingDSL.g:12934:10: {...}? => (otherlv_46= 'max' otherlv_47= '=' ( (lv_max_48_0= RULE_STRING ) ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleAttribute", "true");
            	    }
            	    // InternalContextMappingDSL.g:12934:19: (otherlv_46= 'max' otherlv_47= '=' ( (lv_max_48_0= RULE_STRING ) ) )
            	    // InternalContextMappingDSL.g:12934:20: otherlv_46= 'max' otherlv_47= '=' ( (lv_max_48_0= RULE_STRING ) )
            	    {
            	    otherlv_46=(Token)match(input,143,FOLLOW_81); 

            	    									newLeafNode(otherlv_46, grammarAccess.getAttributeAccess().getMaxKeyword_4_13_0());
            	    								
            	    otherlv_47=(Token)match(input,21,FOLLOW_4); 

            	    									newLeafNode(otherlv_47, grammarAccess.getAttributeAccess().getEqualsSignKeyword_4_13_1());
            	    								
            	    // InternalContextMappingDSL.g:12942:9: ( (lv_max_48_0= RULE_STRING ) )
            	    // InternalContextMappingDSL.g:12943:10: (lv_max_48_0= RULE_STRING )
            	    {
            	    // InternalContextMappingDSL.g:12943:10: (lv_max_48_0= RULE_STRING )
            	    // InternalContextMappingDSL.g:12944:11: lv_max_48_0= RULE_STRING
            	    {
            	    lv_max_48_0=(Token)match(input,RULE_STRING,FOLLOW_164); 

            	    											newLeafNode(lv_max_48_0, grammarAccess.getAttributeAccess().getMaxSTRINGTerminalRuleCall_4_13_2_0());
            	    										

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getAttributeRule());
            	    											}
            	    											setWithLastConsumed(
            	    												current,
            	    												"max",
            	    												lv_max_48_0,
            	    												"org.eclipse.xtext.common.Terminals.STRING");
            	    										

            	    }


            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getAttributeAccess().getUnorderedGroup_4());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 15 :
            	    // InternalContextMappingDSL.g:12966:4: ({...}? => ( ({...}? => (otherlv_49= 'min' otherlv_50= '=' ( (lv_min_51_0= RULE_STRING ) ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:12966:4: ({...}? => ( ({...}? => (otherlv_49= 'min' otherlv_50= '=' ( (lv_min_51_0= RULE_STRING ) ) ) ) ) )
            	    // InternalContextMappingDSL.g:12967:5: {...}? => ( ({...}? => (otherlv_49= 'min' otherlv_50= '=' ( (lv_min_51_0= RULE_STRING ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 14) ) {
            	        throw new FailedPredicateException(input, "ruleAttribute", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 14)");
            	    }
            	    // InternalContextMappingDSL.g:12967:107: ( ({...}? => (otherlv_49= 'min' otherlv_50= '=' ( (lv_min_51_0= RULE_STRING ) ) ) ) )
            	    // InternalContextMappingDSL.g:12968:6: ({...}? => (otherlv_49= 'min' otherlv_50= '=' ( (lv_min_51_0= RULE_STRING ) ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 14);
            	    					
            	    // InternalContextMappingDSL.g:12971:9: ({...}? => (otherlv_49= 'min' otherlv_50= '=' ( (lv_min_51_0= RULE_STRING ) ) ) )
            	    // InternalContextMappingDSL.g:12971:10: {...}? => (otherlv_49= 'min' otherlv_50= '=' ( (lv_min_51_0= RULE_STRING ) ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleAttribute", "true");
            	    }
            	    // InternalContextMappingDSL.g:12971:19: (otherlv_49= 'min' otherlv_50= '=' ( (lv_min_51_0= RULE_STRING ) ) )
            	    // InternalContextMappingDSL.g:12971:20: otherlv_49= 'min' otherlv_50= '=' ( (lv_min_51_0= RULE_STRING ) )
            	    {
            	    otherlv_49=(Token)match(input,144,FOLLOW_81); 

            	    									newLeafNode(otherlv_49, grammarAccess.getAttributeAccess().getMinKeyword_4_14_0());
            	    								
            	    otherlv_50=(Token)match(input,21,FOLLOW_4); 

            	    									newLeafNode(otherlv_50, grammarAccess.getAttributeAccess().getEqualsSignKeyword_4_14_1());
            	    								
            	    // InternalContextMappingDSL.g:12979:9: ( (lv_min_51_0= RULE_STRING ) )
            	    // InternalContextMappingDSL.g:12980:10: (lv_min_51_0= RULE_STRING )
            	    {
            	    // InternalContextMappingDSL.g:12980:10: (lv_min_51_0= RULE_STRING )
            	    // InternalContextMappingDSL.g:12981:11: lv_min_51_0= RULE_STRING
            	    {
            	    lv_min_51_0=(Token)match(input,RULE_STRING,FOLLOW_164); 

            	    											newLeafNode(lv_min_51_0, grammarAccess.getAttributeAccess().getMinSTRINGTerminalRuleCall_4_14_2_0());
            	    										

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getAttributeRule());
            	    											}
            	    											setWithLastConsumed(
            	    												current,
            	    												"min",
            	    												lv_min_51_0,
            	    												"org.eclipse.xtext.common.Terminals.STRING");
            	    										

            	    }


            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getAttributeAccess().getUnorderedGroup_4());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 16 :
            	    // InternalContextMappingDSL.g:13003:4: ({...}? => ( ({...}? => (otherlv_52= 'decimalMax' otherlv_53= '=' ( (lv_decimalMax_54_0= RULE_STRING ) ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:13003:4: ({...}? => ( ({...}? => (otherlv_52= 'decimalMax' otherlv_53= '=' ( (lv_decimalMax_54_0= RULE_STRING ) ) ) ) ) )
            	    // InternalContextMappingDSL.g:13004:5: {...}? => ( ({...}? => (otherlv_52= 'decimalMax' otherlv_53= '=' ( (lv_decimalMax_54_0= RULE_STRING ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 15) ) {
            	        throw new FailedPredicateException(input, "ruleAttribute", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 15)");
            	    }
            	    // InternalContextMappingDSL.g:13004:107: ( ({...}? => (otherlv_52= 'decimalMax' otherlv_53= '=' ( (lv_decimalMax_54_0= RULE_STRING ) ) ) ) )
            	    // InternalContextMappingDSL.g:13005:6: ({...}? => (otherlv_52= 'decimalMax' otherlv_53= '=' ( (lv_decimalMax_54_0= RULE_STRING ) ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 15);
            	    					
            	    // InternalContextMappingDSL.g:13008:9: ({...}? => (otherlv_52= 'decimalMax' otherlv_53= '=' ( (lv_decimalMax_54_0= RULE_STRING ) ) ) )
            	    // InternalContextMappingDSL.g:13008:10: {...}? => (otherlv_52= 'decimalMax' otherlv_53= '=' ( (lv_decimalMax_54_0= RULE_STRING ) ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleAttribute", "true");
            	    }
            	    // InternalContextMappingDSL.g:13008:19: (otherlv_52= 'decimalMax' otherlv_53= '=' ( (lv_decimalMax_54_0= RULE_STRING ) ) )
            	    // InternalContextMappingDSL.g:13008:20: otherlv_52= 'decimalMax' otherlv_53= '=' ( (lv_decimalMax_54_0= RULE_STRING ) )
            	    {
            	    otherlv_52=(Token)match(input,145,FOLLOW_81); 

            	    									newLeafNode(otherlv_52, grammarAccess.getAttributeAccess().getDecimalMaxKeyword_4_15_0());
            	    								
            	    otherlv_53=(Token)match(input,21,FOLLOW_4); 

            	    									newLeafNode(otherlv_53, grammarAccess.getAttributeAccess().getEqualsSignKeyword_4_15_1());
            	    								
            	    // InternalContextMappingDSL.g:13016:9: ( (lv_decimalMax_54_0= RULE_STRING ) )
            	    // InternalContextMappingDSL.g:13017:10: (lv_decimalMax_54_0= RULE_STRING )
            	    {
            	    // InternalContextMappingDSL.g:13017:10: (lv_decimalMax_54_0= RULE_STRING )
            	    // InternalContextMappingDSL.g:13018:11: lv_decimalMax_54_0= RULE_STRING
            	    {
            	    lv_decimalMax_54_0=(Token)match(input,RULE_STRING,FOLLOW_164); 

            	    											newLeafNode(lv_decimalMax_54_0, grammarAccess.getAttributeAccess().getDecimalMaxSTRINGTerminalRuleCall_4_15_2_0());
            	    										

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getAttributeRule());
            	    											}
            	    											setWithLastConsumed(
            	    												current,
            	    												"decimalMax",
            	    												lv_decimalMax_54_0,
            	    												"org.eclipse.xtext.common.Terminals.STRING");
            	    										

            	    }


            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getAttributeAccess().getUnorderedGroup_4());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 17 :
            	    // InternalContextMappingDSL.g:13040:4: ({...}? => ( ({...}? => (otherlv_55= 'decimalMin' otherlv_56= '=' ( (lv_decimalMin_57_0= RULE_STRING ) ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:13040:4: ({...}? => ( ({...}? => (otherlv_55= 'decimalMin' otherlv_56= '=' ( (lv_decimalMin_57_0= RULE_STRING ) ) ) ) ) )
            	    // InternalContextMappingDSL.g:13041:5: {...}? => ( ({...}? => (otherlv_55= 'decimalMin' otherlv_56= '=' ( (lv_decimalMin_57_0= RULE_STRING ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 16) ) {
            	        throw new FailedPredicateException(input, "ruleAttribute", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 16)");
            	    }
            	    // InternalContextMappingDSL.g:13041:107: ( ({...}? => (otherlv_55= 'decimalMin' otherlv_56= '=' ( (lv_decimalMin_57_0= RULE_STRING ) ) ) ) )
            	    // InternalContextMappingDSL.g:13042:6: ({...}? => (otherlv_55= 'decimalMin' otherlv_56= '=' ( (lv_decimalMin_57_0= RULE_STRING ) ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 16);
            	    					
            	    // InternalContextMappingDSL.g:13045:9: ({...}? => (otherlv_55= 'decimalMin' otherlv_56= '=' ( (lv_decimalMin_57_0= RULE_STRING ) ) ) )
            	    // InternalContextMappingDSL.g:13045:10: {...}? => (otherlv_55= 'decimalMin' otherlv_56= '=' ( (lv_decimalMin_57_0= RULE_STRING ) ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleAttribute", "true");
            	    }
            	    // InternalContextMappingDSL.g:13045:19: (otherlv_55= 'decimalMin' otherlv_56= '=' ( (lv_decimalMin_57_0= RULE_STRING ) ) )
            	    // InternalContextMappingDSL.g:13045:20: otherlv_55= 'decimalMin' otherlv_56= '=' ( (lv_decimalMin_57_0= RULE_STRING ) )
            	    {
            	    otherlv_55=(Token)match(input,146,FOLLOW_81); 

            	    									newLeafNode(otherlv_55, grammarAccess.getAttributeAccess().getDecimalMinKeyword_4_16_0());
            	    								
            	    otherlv_56=(Token)match(input,21,FOLLOW_4); 

            	    									newLeafNode(otherlv_56, grammarAccess.getAttributeAccess().getEqualsSignKeyword_4_16_1());
            	    								
            	    // InternalContextMappingDSL.g:13053:9: ( (lv_decimalMin_57_0= RULE_STRING ) )
            	    // InternalContextMappingDSL.g:13054:10: (lv_decimalMin_57_0= RULE_STRING )
            	    {
            	    // InternalContextMappingDSL.g:13054:10: (lv_decimalMin_57_0= RULE_STRING )
            	    // InternalContextMappingDSL.g:13055:11: lv_decimalMin_57_0= RULE_STRING
            	    {
            	    lv_decimalMin_57_0=(Token)match(input,RULE_STRING,FOLLOW_164); 

            	    											newLeafNode(lv_decimalMin_57_0, grammarAccess.getAttributeAccess().getDecimalMinSTRINGTerminalRuleCall_4_16_2_0());
            	    										

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getAttributeRule());
            	    											}
            	    											setWithLastConsumed(
            	    												current,
            	    												"decimalMin",
            	    												lv_decimalMin_57_0,
            	    												"org.eclipse.xtext.common.Terminals.STRING");
            	    										

            	    }


            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getAttributeAccess().getUnorderedGroup_4());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 18 :
            	    // InternalContextMappingDSL.g:13077:4: ({...}? => ( ({...}? => ( ( (lv_notEmpty_58_0= 'notEmpty' ) ) (otherlv_59= '=' ( (lv_notEmptyMessage_60_0= RULE_STRING ) ) )? ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:13077:4: ({...}? => ( ({...}? => ( ( (lv_notEmpty_58_0= 'notEmpty' ) ) (otherlv_59= '=' ( (lv_notEmptyMessage_60_0= RULE_STRING ) ) )? ) ) ) )
            	    // InternalContextMappingDSL.g:13078:5: {...}? => ( ({...}? => ( ( (lv_notEmpty_58_0= 'notEmpty' ) ) (otherlv_59= '=' ( (lv_notEmptyMessage_60_0= RULE_STRING ) ) )? ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 17) ) {
            	        throw new FailedPredicateException(input, "ruleAttribute", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 17)");
            	    }
            	    // InternalContextMappingDSL.g:13078:107: ( ({...}? => ( ( (lv_notEmpty_58_0= 'notEmpty' ) ) (otherlv_59= '=' ( (lv_notEmptyMessage_60_0= RULE_STRING ) ) )? ) ) )
            	    // InternalContextMappingDSL.g:13079:6: ({...}? => ( ( (lv_notEmpty_58_0= 'notEmpty' ) ) (otherlv_59= '=' ( (lv_notEmptyMessage_60_0= RULE_STRING ) ) )? ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 17);
            	    					
            	    // InternalContextMappingDSL.g:13082:9: ({...}? => ( ( (lv_notEmpty_58_0= 'notEmpty' ) ) (otherlv_59= '=' ( (lv_notEmptyMessage_60_0= RULE_STRING ) ) )? ) )
            	    // InternalContextMappingDSL.g:13082:10: {...}? => ( ( (lv_notEmpty_58_0= 'notEmpty' ) ) (otherlv_59= '=' ( (lv_notEmptyMessage_60_0= RULE_STRING ) ) )? )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleAttribute", "true");
            	    }
            	    // InternalContextMappingDSL.g:13082:19: ( ( (lv_notEmpty_58_0= 'notEmpty' ) ) (otherlv_59= '=' ( (lv_notEmptyMessage_60_0= RULE_STRING ) ) )? )
            	    // InternalContextMappingDSL.g:13082:20: ( (lv_notEmpty_58_0= 'notEmpty' ) ) (otherlv_59= '=' ( (lv_notEmptyMessage_60_0= RULE_STRING ) ) )?
            	    {
            	    // InternalContextMappingDSL.g:13082:20: ( (lv_notEmpty_58_0= 'notEmpty' ) )
            	    // InternalContextMappingDSL.g:13083:10: (lv_notEmpty_58_0= 'notEmpty' )
            	    {
            	    // InternalContextMappingDSL.g:13083:10: (lv_notEmpty_58_0= 'notEmpty' )
            	    // InternalContextMappingDSL.g:13084:11: lv_notEmpty_58_0= 'notEmpty'
            	    {
            	    lv_notEmpty_58_0=(Token)match(input,147,FOLLOW_167); 

            	    											newLeafNode(lv_notEmpty_58_0, grammarAccess.getAttributeAccess().getNotEmptyNotEmptyKeyword_4_17_0_0());
            	    										

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getAttributeRule());
            	    											}
            	    											setWithLastConsumed(current, "notEmpty", true, "notEmpty");
            	    										

            	    }


            	    }

            	    // InternalContextMappingDSL.g:13096:9: (otherlv_59= '=' ( (lv_notEmptyMessage_60_0= RULE_STRING ) ) )?
            	    int alt313=2;
            	    int LA313_0 = input.LA(1);

            	    if ( (LA313_0==21) ) {
            	        alt313=1;
            	    }
            	    switch (alt313) {
            	        case 1 :
            	            // InternalContextMappingDSL.g:13097:10: otherlv_59= '=' ( (lv_notEmptyMessage_60_0= RULE_STRING ) )
            	            {
            	            otherlv_59=(Token)match(input,21,FOLLOW_4); 

            	            										newLeafNode(otherlv_59, grammarAccess.getAttributeAccess().getEqualsSignKeyword_4_17_1_0());
            	            									
            	            // InternalContextMappingDSL.g:13101:10: ( (lv_notEmptyMessage_60_0= RULE_STRING ) )
            	            // InternalContextMappingDSL.g:13102:11: (lv_notEmptyMessage_60_0= RULE_STRING )
            	            {
            	            // InternalContextMappingDSL.g:13102:11: (lv_notEmptyMessage_60_0= RULE_STRING )
            	            // InternalContextMappingDSL.g:13103:12: lv_notEmptyMessage_60_0= RULE_STRING
            	            {
            	            lv_notEmptyMessage_60_0=(Token)match(input,RULE_STRING,FOLLOW_164); 

            	            												newLeafNode(lv_notEmptyMessage_60_0, grammarAccess.getAttributeAccess().getNotEmptyMessageSTRINGTerminalRuleCall_4_17_1_1_0());
            	            											

            	            												if (current==null) {
            	            													current = createModelElement(grammarAccess.getAttributeRule());
            	            												}
            	            												setWithLastConsumed(
            	            													current,
            	            													"notEmptyMessage",
            	            													lv_notEmptyMessage_60_0,
            	            													"org.eclipse.xtext.common.Terminals.STRING");
            	            											

            	            }


            	            }


            	            }
            	            break;

            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getAttributeAccess().getUnorderedGroup_4());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 19 :
            	    // InternalContextMappingDSL.g:13126:4: ({...}? => ( ({...}? => ( ( (lv_notBlank_61_0= 'notBlank' ) ) (otherlv_62= '=' ( (lv_notBlankMessage_63_0= RULE_STRING ) ) )? ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:13126:4: ({...}? => ( ({...}? => ( ( (lv_notBlank_61_0= 'notBlank' ) ) (otherlv_62= '=' ( (lv_notBlankMessage_63_0= RULE_STRING ) ) )? ) ) ) )
            	    // InternalContextMappingDSL.g:13127:5: {...}? => ( ({...}? => ( ( (lv_notBlank_61_0= 'notBlank' ) ) (otherlv_62= '=' ( (lv_notBlankMessage_63_0= RULE_STRING ) ) )? ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 18) ) {
            	        throw new FailedPredicateException(input, "ruleAttribute", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 18)");
            	    }
            	    // InternalContextMappingDSL.g:13127:107: ( ({...}? => ( ( (lv_notBlank_61_0= 'notBlank' ) ) (otherlv_62= '=' ( (lv_notBlankMessage_63_0= RULE_STRING ) ) )? ) ) )
            	    // InternalContextMappingDSL.g:13128:6: ({...}? => ( ( (lv_notBlank_61_0= 'notBlank' ) ) (otherlv_62= '=' ( (lv_notBlankMessage_63_0= RULE_STRING ) ) )? ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 18);
            	    					
            	    // InternalContextMappingDSL.g:13131:9: ({...}? => ( ( (lv_notBlank_61_0= 'notBlank' ) ) (otherlv_62= '=' ( (lv_notBlankMessage_63_0= RULE_STRING ) ) )? ) )
            	    // InternalContextMappingDSL.g:13131:10: {...}? => ( ( (lv_notBlank_61_0= 'notBlank' ) ) (otherlv_62= '=' ( (lv_notBlankMessage_63_0= RULE_STRING ) ) )? )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleAttribute", "true");
            	    }
            	    // InternalContextMappingDSL.g:13131:19: ( ( (lv_notBlank_61_0= 'notBlank' ) ) (otherlv_62= '=' ( (lv_notBlankMessage_63_0= RULE_STRING ) ) )? )
            	    // InternalContextMappingDSL.g:13131:20: ( (lv_notBlank_61_0= 'notBlank' ) ) (otherlv_62= '=' ( (lv_notBlankMessage_63_0= RULE_STRING ) ) )?
            	    {
            	    // InternalContextMappingDSL.g:13131:20: ( (lv_notBlank_61_0= 'notBlank' ) )
            	    // InternalContextMappingDSL.g:13132:10: (lv_notBlank_61_0= 'notBlank' )
            	    {
            	    // InternalContextMappingDSL.g:13132:10: (lv_notBlank_61_0= 'notBlank' )
            	    // InternalContextMappingDSL.g:13133:11: lv_notBlank_61_0= 'notBlank'
            	    {
            	    lv_notBlank_61_0=(Token)match(input,148,FOLLOW_167); 

            	    											newLeafNode(lv_notBlank_61_0, grammarAccess.getAttributeAccess().getNotBlankNotBlankKeyword_4_18_0_0());
            	    										

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getAttributeRule());
            	    											}
            	    											setWithLastConsumed(current, "notBlank", true, "notBlank");
            	    										

            	    }


            	    }

            	    // InternalContextMappingDSL.g:13145:9: (otherlv_62= '=' ( (lv_notBlankMessage_63_0= RULE_STRING ) ) )?
            	    int alt314=2;
            	    int LA314_0 = input.LA(1);

            	    if ( (LA314_0==21) ) {
            	        alt314=1;
            	    }
            	    switch (alt314) {
            	        case 1 :
            	            // InternalContextMappingDSL.g:13146:10: otherlv_62= '=' ( (lv_notBlankMessage_63_0= RULE_STRING ) )
            	            {
            	            otherlv_62=(Token)match(input,21,FOLLOW_4); 

            	            										newLeafNode(otherlv_62, grammarAccess.getAttributeAccess().getEqualsSignKeyword_4_18_1_0());
            	            									
            	            // InternalContextMappingDSL.g:13150:10: ( (lv_notBlankMessage_63_0= RULE_STRING ) )
            	            // InternalContextMappingDSL.g:13151:11: (lv_notBlankMessage_63_0= RULE_STRING )
            	            {
            	            // InternalContextMappingDSL.g:13151:11: (lv_notBlankMessage_63_0= RULE_STRING )
            	            // InternalContextMappingDSL.g:13152:12: lv_notBlankMessage_63_0= RULE_STRING
            	            {
            	            lv_notBlankMessage_63_0=(Token)match(input,RULE_STRING,FOLLOW_164); 

            	            												newLeafNode(lv_notBlankMessage_63_0, grammarAccess.getAttributeAccess().getNotBlankMessageSTRINGTerminalRuleCall_4_18_1_1_0());
            	            											

            	            												if (current==null) {
            	            													current = createModelElement(grammarAccess.getAttributeRule());
            	            												}
            	            												setWithLastConsumed(
            	            													current,
            	            													"notBlankMessage",
            	            													lv_notBlankMessage_63_0,
            	            													"org.eclipse.xtext.common.Terminals.STRING");
            	            											

            	            }


            	            }


            	            }
            	            break;

            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getAttributeAccess().getUnorderedGroup_4());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 20 :
            	    // InternalContextMappingDSL.g:13175:4: ({...}? => ( ({...}? => (otherlv_64= 'pattern' otherlv_65= '=' ( (lv_pattern_66_0= RULE_STRING ) ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:13175:4: ({...}? => ( ({...}? => (otherlv_64= 'pattern' otherlv_65= '=' ( (lv_pattern_66_0= RULE_STRING ) ) ) ) ) )
            	    // InternalContextMappingDSL.g:13176:5: {...}? => ( ({...}? => (otherlv_64= 'pattern' otherlv_65= '=' ( (lv_pattern_66_0= RULE_STRING ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 19) ) {
            	        throw new FailedPredicateException(input, "ruleAttribute", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 19)");
            	    }
            	    // InternalContextMappingDSL.g:13176:107: ( ({...}? => (otherlv_64= 'pattern' otherlv_65= '=' ( (lv_pattern_66_0= RULE_STRING ) ) ) ) )
            	    // InternalContextMappingDSL.g:13177:6: ({...}? => (otherlv_64= 'pattern' otherlv_65= '=' ( (lv_pattern_66_0= RULE_STRING ) ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 19);
            	    					
            	    // InternalContextMappingDSL.g:13180:9: ({...}? => (otherlv_64= 'pattern' otherlv_65= '=' ( (lv_pattern_66_0= RULE_STRING ) ) ) )
            	    // InternalContextMappingDSL.g:13180:10: {...}? => (otherlv_64= 'pattern' otherlv_65= '=' ( (lv_pattern_66_0= RULE_STRING ) ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleAttribute", "true");
            	    }
            	    // InternalContextMappingDSL.g:13180:19: (otherlv_64= 'pattern' otherlv_65= '=' ( (lv_pattern_66_0= RULE_STRING ) ) )
            	    // InternalContextMappingDSL.g:13180:20: otherlv_64= 'pattern' otherlv_65= '=' ( (lv_pattern_66_0= RULE_STRING ) )
            	    {
            	    otherlv_64=(Token)match(input,149,FOLLOW_81); 

            	    									newLeafNode(otherlv_64, grammarAccess.getAttributeAccess().getPatternKeyword_4_19_0());
            	    								
            	    otherlv_65=(Token)match(input,21,FOLLOW_4); 

            	    									newLeafNode(otherlv_65, grammarAccess.getAttributeAccess().getEqualsSignKeyword_4_19_1());
            	    								
            	    // InternalContextMappingDSL.g:13188:9: ( (lv_pattern_66_0= RULE_STRING ) )
            	    // InternalContextMappingDSL.g:13189:10: (lv_pattern_66_0= RULE_STRING )
            	    {
            	    // InternalContextMappingDSL.g:13189:10: (lv_pattern_66_0= RULE_STRING )
            	    // InternalContextMappingDSL.g:13190:11: lv_pattern_66_0= RULE_STRING
            	    {
            	    lv_pattern_66_0=(Token)match(input,RULE_STRING,FOLLOW_164); 

            	    											newLeafNode(lv_pattern_66_0, grammarAccess.getAttributeAccess().getPatternSTRINGTerminalRuleCall_4_19_2_0());
            	    										

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getAttributeRule());
            	    											}
            	    											setWithLastConsumed(
            	    												current,
            	    												"pattern",
            	    												lv_pattern_66_0,
            	    												"org.eclipse.xtext.common.Terminals.STRING");
            	    										

            	    }


            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getAttributeAccess().getUnorderedGroup_4());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 21 :
            	    // InternalContextMappingDSL.g:13212:4: ({...}? => ( ({...}? => (otherlv_67= 'range' otherlv_68= '=' ( (lv_range_69_0= RULE_STRING ) ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:13212:4: ({...}? => ( ({...}? => (otherlv_67= 'range' otherlv_68= '=' ( (lv_range_69_0= RULE_STRING ) ) ) ) ) )
            	    // InternalContextMappingDSL.g:13213:5: {...}? => ( ({...}? => (otherlv_67= 'range' otherlv_68= '=' ( (lv_range_69_0= RULE_STRING ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 20) ) {
            	        throw new FailedPredicateException(input, "ruleAttribute", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 20)");
            	    }
            	    // InternalContextMappingDSL.g:13213:107: ( ({...}? => (otherlv_67= 'range' otherlv_68= '=' ( (lv_range_69_0= RULE_STRING ) ) ) ) )
            	    // InternalContextMappingDSL.g:13214:6: ({...}? => (otherlv_67= 'range' otherlv_68= '=' ( (lv_range_69_0= RULE_STRING ) ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 20);
            	    					
            	    // InternalContextMappingDSL.g:13217:9: ({...}? => (otherlv_67= 'range' otherlv_68= '=' ( (lv_range_69_0= RULE_STRING ) ) ) )
            	    // InternalContextMappingDSL.g:13217:10: {...}? => (otherlv_67= 'range' otherlv_68= '=' ( (lv_range_69_0= RULE_STRING ) ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleAttribute", "true");
            	    }
            	    // InternalContextMappingDSL.g:13217:19: (otherlv_67= 'range' otherlv_68= '=' ( (lv_range_69_0= RULE_STRING ) ) )
            	    // InternalContextMappingDSL.g:13217:20: otherlv_67= 'range' otherlv_68= '=' ( (lv_range_69_0= RULE_STRING ) )
            	    {
            	    otherlv_67=(Token)match(input,150,FOLLOW_81); 

            	    									newLeafNode(otherlv_67, grammarAccess.getAttributeAccess().getRangeKeyword_4_20_0());
            	    								
            	    otherlv_68=(Token)match(input,21,FOLLOW_4); 

            	    									newLeafNode(otherlv_68, grammarAccess.getAttributeAccess().getEqualsSignKeyword_4_20_1());
            	    								
            	    // InternalContextMappingDSL.g:13225:9: ( (lv_range_69_0= RULE_STRING ) )
            	    // InternalContextMappingDSL.g:13226:10: (lv_range_69_0= RULE_STRING )
            	    {
            	    // InternalContextMappingDSL.g:13226:10: (lv_range_69_0= RULE_STRING )
            	    // InternalContextMappingDSL.g:13227:11: lv_range_69_0= RULE_STRING
            	    {
            	    lv_range_69_0=(Token)match(input,RULE_STRING,FOLLOW_164); 

            	    											newLeafNode(lv_range_69_0, grammarAccess.getAttributeAccess().getRangeSTRINGTerminalRuleCall_4_20_2_0());
            	    										

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getAttributeRule());
            	    											}
            	    											setWithLastConsumed(
            	    												current,
            	    												"range",
            	    												lv_range_69_0,
            	    												"org.eclipse.xtext.common.Terminals.STRING");
            	    										

            	    }


            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getAttributeAccess().getUnorderedGroup_4());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 22 :
            	    // InternalContextMappingDSL.g:13249:4: ({...}? => ( ({...}? => (otherlv_70= 'size' otherlv_71= '=' ( (lv_size_72_0= RULE_STRING ) ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:13249:4: ({...}? => ( ({...}? => (otherlv_70= 'size' otherlv_71= '=' ( (lv_size_72_0= RULE_STRING ) ) ) ) ) )
            	    // InternalContextMappingDSL.g:13250:5: {...}? => ( ({...}? => (otherlv_70= 'size' otherlv_71= '=' ( (lv_size_72_0= RULE_STRING ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 21) ) {
            	        throw new FailedPredicateException(input, "ruleAttribute", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 21)");
            	    }
            	    // InternalContextMappingDSL.g:13250:107: ( ({...}? => (otherlv_70= 'size' otherlv_71= '=' ( (lv_size_72_0= RULE_STRING ) ) ) ) )
            	    // InternalContextMappingDSL.g:13251:6: ({...}? => (otherlv_70= 'size' otherlv_71= '=' ( (lv_size_72_0= RULE_STRING ) ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 21);
            	    					
            	    // InternalContextMappingDSL.g:13254:9: ({...}? => (otherlv_70= 'size' otherlv_71= '=' ( (lv_size_72_0= RULE_STRING ) ) ) )
            	    // InternalContextMappingDSL.g:13254:10: {...}? => (otherlv_70= 'size' otherlv_71= '=' ( (lv_size_72_0= RULE_STRING ) ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleAttribute", "true");
            	    }
            	    // InternalContextMappingDSL.g:13254:19: (otherlv_70= 'size' otherlv_71= '=' ( (lv_size_72_0= RULE_STRING ) ) )
            	    // InternalContextMappingDSL.g:13254:20: otherlv_70= 'size' otherlv_71= '=' ( (lv_size_72_0= RULE_STRING ) )
            	    {
            	    otherlv_70=(Token)match(input,151,FOLLOW_81); 

            	    									newLeafNode(otherlv_70, grammarAccess.getAttributeAccess().getSizeKeyword_4_21_0());
            	    								
            	    otherlv_71=(Token)match(input,21,FOLLOW_4); 

            	    									newLeafNode(otherlv_71, grammarAccess.getAttributeAccess().getEqualsSignKeyword_4_21_1());
            	    								
            	    // InternalContextMappingDSL.g:13262:9: ( (lv_size_72_0= RULE_STRING ) )
            	    // InternalContextMappingDSL.g:13263:10: (lv_size_72_0= RULE_STRING )
            	    {
            	    // InternalContextMappingDSL.g:13263:10: (lv_size_72_0= RULE_STRING )
            	    // InternalContextMappingDSL.g:13264:11: lv_size_72_0= RULE_STRING
            	    {
            	    lv_size_72_0=(Token)match(input,RULE_STRING,FOLLOW_164); 

            	    											newLeafNode(lv_size_72_0, grammarAccess.getAttributeAccess().getSizeSTRINGTerminalRuleCall_4_21_2_0());
            	    										

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getAttributeRule());
            	    											}
            	    											setWithLastConsumed(
            	    												current,
            	    												"size",
            	    												lv_size_72_0,
            	    												"org.eclipse.xtext.common.Terminals.STRING");
            	    										

            	    }


            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getAttributeAccess().getUnorderedGroup_4());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 23 :
            	    // InternalContextMappingDSL.g:13286:4: ({...}? => ( ({...}? => (otherlv_73= 'length' otherlv_74= '=' ( (lv_length_75_0= RULE_STRING ) ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:13286:4: ({...}? => ( ({...}? => (otherlv_73= 'length' otherlv_74= '=' ( (lv_length_75_0= RULE_STRING ) ) ) ) ) )
            	    // InternalContextMappingDSL.g:13287:5: {...}? => ( ({...}? => (otherlv_73= 'length' otherlv_74= '=' ( (lv_length_75_0= RULE_STRING ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 22) ) {
            	        throw new FailedPredicateException(input, "ruleAttribute", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 22)");
            	    }
            	    // InternalContextMappingDSL.g:13287:107: ( ({...}? => (otherlv_73= 'length' otherlv_74= '=' ( (lv_length_75_0= RULE_STRING ) ) ) ) )
            	    // InternalContextMappingDSL.g:13288:6: ({...}? => (otherlv_73= 'length' otherlv_74= '=' ( (lv_length_75_0= RULE_STRING ) ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 22);
            	    					
            	    // InternalContextMappingDSL.g:13291:9: ({...}? => (otherlv_73= 'length' otherlv_74= '=' ( (lv_length_75_0= RULE_STRING ) ) ) )
            	    // InternalContextMappingDSL.g:13291:10: {...}? => (otherlv_73= 'length' otherlv_74= '=' ( (lv_length_75_0= RULE_STRING ) ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleAttribute", "true");
            	    }
            	    // InternalContextMappingDSL.g:13291:19: (otherlv_73= 'length' otherlv_74= '=' ( (lv_length_75_0= RULE_STRING ) ) )
            	    // InternalContextMappingDSL.g:13291:20: otherlv_73= 'length' otherlv_74= '=' ( (lv_length_75_0= RULE_STRING ) )
            	    {
            	    otherlv_73=(Token)match(input,152,FOLLOW_81); 

            	    									newLeafNode(otherlv_73, grammarAccess.getAttributeAccess().getLengthKeyword_4_22_0());
            	    								
            	    otherlv_74=(Token)match(input,21,FOLLOW_4); 

            	    									newLeafNode(otherlv_74, grammarAccess.getAttributeAccess().getEqualsSignKeyword_4_22_1());
            	    								
            	    // InternalContextMappingDSL.g:13299:9: ( (lv_length_75_0= RULE_STRING ) )
            	    // InternalContextMappingDSL.g:13300:10: (lv_length_75_0= RULE_STRING )
            	    {
            	    // InternalContextMappingDSL.g:13300:10: (lv_length_75_0= RULE_STRING )
            	    // InternalContextMappingDSL.g:13301:11: lv_length_75_0= RULE_STRING
            	    {
            	    lv_length_75_0=(Token)match(input,RULE_STRING,FOLLOW_164); 

            	    											newLeafNode(lv_length_75_0, grammarAccess.getAttributeAccess().getLengthSTRINGTerminalRuleCall_4_22_2_0());
            	    										

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getAttributeRule());
            	    											}
            	    											setWithLastConsumed(
            	    												current,
            	    												"length",
            	    												lv_length_75_0,
            	    												"org.eclipse.xtext.common.Terminals.STRING");
            	    										

            	    }


            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getAttributeAccess().getUnorderedGroup_4());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 24 :
            	    // InternalContextMappingDSL.g:13323:4: ({...}? => ( ({...}? => (otherlv_76= 'scriptAssert' otherlv_77= '=' ( (lv_scriptAssert_78_0= RULE_STRING ) ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:13323:4: ({...}? => ( ({...}? => (otherlv_76= 'scriptAssert' otherlv_77= '=' ( (lv_scriptAssert_78_0= RULE_STRING ) ) ) ) ) )
            	    // InternalContextMappingDSL.g:13324:5: {...}? => ( ({...}? => (otherlv_76= 'scriptAssert' otherlv_77= '=' ( (lv_scriptAssert_78_0= RULE_STRING ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 23) ) {
            	        throw new FailedPredicateException(input, "ruleAttribute", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 23)");
            	    }
            	    // InternalContextMappingDSL.g:13324:107: ( ({...}? => (otherlv_76= 'scriptAssert' otherlv_77= '=' ( (lv_scriptAssert_78_0= RULE_STRING ) ) ) ) )
            	    // InternalContextMappingDSL.g:13325:6: ({...}? => (otherlv_76= 'scriptAssert' otherlv_77= '=' ( (lv_scriptAssert_78_0= RULE_STRING ) ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 23);
            	    					
            	    // InternalContextMappingDSL.g:13328:9: ({...}? => (otherlv_76= 'scriptAssert' otherlv_77= '=' ( (lv_scriptAssert_78_0= RULE_STRING ) ) ) )
            	    // InternalContextMappingDSL.g:13328:10: {...}? => (otherlv_76= 'scriptAssert' otherlv_77= '=' ( (lv_scriptAssert_78_0= RULE_STRING ) ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleAttribute", "true");
            	    }
            	    // InternalContextMappingDSL.g:13328:19: (otherlv_76= 'scriptAssert' otherlv_77= '=' ( (lv_scriptAssert_78_0= RULE_STRING ) ) )
            	    // InternalContextMappingDSL.g:13328:20: otherlv_76= 'scriptAssert' otherlv_77= '=' ( (lv_scriptAssert_78_0= RULE_STRING ) )
            	    {
            	    otherlv_76=(Token)match(input,153,FOLLOW_81); 

            	    									newLeafNode(otherlv_76, grammarAccess.getAttributeAccess().getScriptAssertKeyword_4_23_0());
            	    								
            	    otherlv_77=(Token)match(input,21,FOLLOW_4); 

            	    									newLeafNode(otherlv_77, grammarAccess.getAttributeAccess().getEqualsSignKeyword_4_23_1());
            	    								
            	    // InternalContextMappingDSL.g:13336:9: ( (lv_scriptAssert_78_0= RULE_STRING ) )
            	    // InternalContextMappingDSL.g:13337:10: (lv_scriptAssert_78_0= RULE_STRING )
            	    {
            	    // InternalContextMappingDSL.g:13337:10: (lv_scriptAssert_78_0= RULE_STRING )
            	    // InternalContextMappingDSL.g:13338:11: lv_scriptAssert_78_0= RULE_STRING
            	    {
            	    lv_scriptAssert_78_0=(Token)match(input,RULE_STRING,FOLLOW_164); 

            	    											newLeafNode(lv_scriptAssert_78_0, grammarAccess.getAttributeAccess().getScriptAssertSTRINGTerminalRuleCall_4_23_2_0());
            	    										

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getAttributeRule());
            	    											}
            	    											setWithLastConsumed(
            	    												current,
            	    												"scriptAssert",
            	    												lv_scriptAssert_78_0,
            	    												"org.eclipse.xtext.common.Terminals.STRING");
            	    										

            	    }


            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getAttributeAccess().getUnorderedGroup_4());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 25 :
            	    // InternalContextMappingDSL.g:13360:4: ({...}? => ( ({...}? => (otherlv_79= 'url' otherlv_80= '=' ( (lv_url_81_0= RULE_STRING ) ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:13360:4: ({...}? => ( ({...}? => (otherlv_79= 'url' otherlv_80= '=' ( (lv_url_81_0= RULE_STRING ) ) ) ) ) )
            	    // InternalContextMappingDSL.g:13361:5: {...}? => ( ({...}? => (otherlv_79= 'url' otherlv_80= '=' ( (lv_url_81_0= RULE_STRING ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 24) ) {
            	        throw new FailedPredicateException(input, "ruleAttribute", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 24)");
            	    }
            	    // InternalContextMappingDSL.g:13361:107: ( ({...}? => (otherlv_79= 'url' otherlv_80= '=' ( (lv_url_81_0= RULE_STRING ) ) ) ) )
            	    // InternalContextMappingDSL.g:13362:6: ({...}? => (otherlv_79= 'url' otherlv_80= '=' ( (lv_url_81_0= RULE_STRING ) ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 24);
            	    					
            	    // InternalContextMappingDSL.g:13365:9: ({...}? => (otherlv_79= 'url' otherlv_80= '=' ( (lv_url_81_0= RULE_STRING ) ) ) )
            	    // InternalContextMappingDSL.g:13365:10: {...}? => (otherlv_79= 'url' otherlv_80= '=' ( (lv_url_81_0= RULE_STRING ) ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleAttribute", "true");
            	    }
            	    // InternalContextMappingDSL.g:13365:19: (otherlv_79= 'url' otherlv_80= '=' ( (lv_url_81_0= RULE_STRING ) ) )
            	    // InternalContextMappingDSL.g:13365:20: otherlv_79= 'url' otherlv_80= '=' ( (lv_url_81_0= RULE_STRING ) )
            	    {
            	    otherlv_79=(Token)match(input,154,FOLLOW_81); 

            	    									newLeafNode(otherlv_79, grammarAccess.getAttributeAccess().getUrlKeyword_4_24_0());
            	    								
            	    otherlv_80=(Token)match(input,21,FOLLOW_4); 

            	    									newLeafNode(otherlv_80, grammarAccess.getAttributeAccess().getEqualsSignKeyword_4_24_1());
            	    								
            	    // InternalContextMappingDSL.g:13373:9: ( (lv_url_81_0= RULE_STRING ) )
            	    // InternalContextMappingDSL.g:13374:10: (lv_url_81_0= RULE_STRING )
            	    {
            	    // InternalContextMappingDSL.g:13374:10: (lv_url_81_0= RULE_STRING )
            	    // InternalContextMappingDSL.g:13375:11: lv_url_81_0= RULE_STRING
            	    {
            	    lv_url_81_0=(Token)match(input,RULE_STRING,FOLLOW_164); 

            	    											newLeafNode(lv_url_81_0, grammarAccess.getAttributeAccess().getUrlSTRINGTerminalRuleCall_4_24_2_0());
            	    										

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getAttributeRule());
            	    											}
            	    											setWithLastConsumed(
            	    												current,
            	    												"url",
            	    												lv_url_81_0,
            	    												"org.eclipse.xtext.common.Terminals.STRING");
            	    										

            	    }


            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getAttributeAccess().getUnorderedGroup_4());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 26 :
            	    // InternalContextMappingDSL.g:13397:4: ({...}? => ( ({...}? => (otherlv_82= 'validate' otherlv_83= '=' ( (lv_validate_84_0= RULE_STRING ) ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:13397:4: ({...}? => ( ({...}? => (otherlv_82= 'validate' otherlv_83= '=' ( (lv_validate_84_0= RULE_STRING ) ) ) ) ) )
            	    // InternalContextMappingDSL.g:13398:5: {...}? => ( ({...}? => (otherlv_82= 'validate' otherlv_83= '=' ( (lv_validate_84_0= RULE_STRING ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 25) ) {
            	        throw new FailedPredicateException(input, "ruleAttribute", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 25)");
            	    }
            	    // InternalContextMappingDSL.g:13398:107: ( ({...}? => (otherlv_82= 'validate' otherlv_83= '=' ( (lv_validate_84_0= RULE_STRING ) ) ) ) )
            	    // InternalContextMappingDSL.g:13399:6: ({...}? => (otherlv_82= 'validate' otherlv_83= '=' ( (lv_validate_84_0= RULE_STRING ) ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 25);
            	    					
            	    // InternalContextMappingDSL.g:13402:9: ({...}? => (otherlv_82= 'validate' otherlv_83= '=' ( (lv_validate_84_0= RULE_STRING ) ) ) )
            	    // InternalContextMappingDSL.g:13402:10: {...}? => (otherlv_82= 'validate' otherlv_83= '=' ( (lv_validate_84_0= RULE_STRING ) ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleAttribute", "true");
            	    }
            	    // InternalContextMappingDSL.g:13402:19: (otherlv_82= 'validate' otherlv_83= '=' ( (lv_validate_84_0= RULE_STRING ) ) )
            	    // InternalContextMappingDSL.g:13402:20: otherlv_82= 'validate' otherlv_83= '=' ( (lv_validate_84_0= RULE_STRING ) )
            	    {
            	    otherlv_82=(Token)match(input,118,FOLLOW_81); 

            	    									newLeafNode(otherlv_82, grammarAccess.getAttributeAccess().getValidateKeyword_4_25_0());
            	    								
            	    otherlv_83=(Token)match(input,21,FOLLOW_4); 

            	    									newLeafNode(otherlv_83, grammarAccess.getAttributeAccess().getEqualsSignKeyword_4_25_1());
            	    								
            	    // InternalContextMappingDSL.g:13410:9: ( (lv_validate_84_0= RULE_STRING ) )
            	    // InternalContextMappingDSL.g:13411:10: (lv_validate_84_0= RULE_STRING )
            	    {
            	    // InternalContextMappingDSL.g:13411:10: (lv_validate_84_0= RULE_STRING )
            	    // InternalContextMappingDSL.g:13412:11: lv_validate_84_0= RULE_STRING
            	    {
            	    lv_validate_84_0=(Token)match(input,RULE_STRING,FOLLOW_164); 

            	    											newLeafNode(lv_validate_84_0, grammarAccess.getAttributeAccess().getValidateSTRINGTerminalRuleCall_4_25_2_0());
            	    										

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getAttributeRule());
            	    											}
            	    											setWithLastConsumed(
            	    												current,
            	    												"validate",
            	    												lv_validate_84_0,
            	    												"org.eclipse.xtext.common.Terminals.STRING");
            	    										

            	    }


            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getAttributeAccess().getUnorderedGroup_4());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 27 :
            	    // InternalContextMappingDSL.g:13434:4: ({...}? => ( ({...}? => ( (lv_transient_85_0= 'transient' ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:13434:4: ({...}? => ( ({...}? => ( (lv_transient_85_0= 'transient' ) ) ) ) )
            	    // InternalContextMappingDSL.g:13435:5: {...}? => ( ({...}? => ( (lv_transient_85_0= 'transient' ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 26) ) {
            	        throw new FailedPredicateException(input, "ruleAttribute", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 26)");
            	    }
            	    // InternalContextMappingDSL.g:13435:107: ( ({...}? => ( (lv_transient_85_0= 'transient' ) ) ) )
            	    // InternalContextMappingDSL.g:13436:6: ({...}? => ( (lv_transient_85_0= 'transient' ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 26);
            	    					
            	    // InternalContextMappingDSL.g:13439:9: ({...}? => ( (lv_transient_85_0= 'transient' ) ) )
            	    // InternalContextMappingDSL.g:13439:10: {...}? => ( (lv_transient_85_0= 'transient' ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleAttribute", "true");
            	    }
            	    // InternalContextMappingDSL.g:13439:19: ( (lv_transient_85_0= 'transient' ) )
            	    // InternalContextMappingDSL.g:13439:20: (lv_transient_85_0= 'transient' )
            	    {
            	    // InternalContextMappingDSL.g:13439:20: (lv_transient_85_0= 'transient' )
            	    // InternalContextMappingDSL.g:13440:10: lv_transient_85_0= 'transient'
            	    {
            	    lv_transient_85_0=(Token)match(input,155,FOLLOW_164); 

            	    										newLeafNode(lv_transient_85_0, grammarAccess.getAttributeAccess().getTransientTransientKeyword_4_26_0());
            	    									

            	    										if (current==null) {
            	    											current = createModelElement(grammarAccess.getAttributeRule());
            	    										}
            	    										setWithLastConsumed(current, "transient", true, "transient");
            	    									

            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getAttributeAccess().getUnorderedGroup_4());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 28 :
            	    // InternalContextMappingDSL.g:13457:4: ({...}? => ( ({...}? => (otherlv_86= 'databaseColumn' otherlv_87= '=' ( (lv_databaseColumn_88_0= RULE_STRING ) ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:13457:4: ({...}? => ( ({...}? => (otherlv_86= 'databaseColumn' otherlv_87= '=' ( (lv_databaseColumn_88_0= RULE_STRING ) ) ) ) ) )
            	    // InternalContextMappingDSL.g:13458:5: {...}? => ( ({...}? => (otherlv_86= 'databaseColumn' otherlv_87= '=' ( (lv_databaseColumn_88_0= RULE_STRING ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 27) ) {
            	        throw new FailedPredicateException(input, "ruleAttribute", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 27)");
            	    }
            	    // InternalContextMappingDSL.g:13458:107: ( ({...}? => (otherlv_86= 'databaseColumn' otherlv_87= '=' ( (lv_databaseColumn_88_0= RULE_STRING ) ) ) ) )
            	    // InternalContextMappingDSL.g:13459:6: ({...}? => (otherlv_86= 'databaseColumn' otherlv_87= '=' ( (lv_databaseColumn_88_0= RULE_STRING ) ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 27);
            	    					
            	    // InternalContextMappingDSL.g:13462:9: ({...}? => (otherlv_86= 'databaseColumn' otherlv_87= '=' ( (lv_databaseColumn_88_0= RULE_STRING ) ) ) )
            	    // InternalContextMappingDSL.g:13462:10: {...}? => (otherlv_86= 'databaseColumn' otherlv_87= '=' ( (lv_databaseColumn_88_0= RULE_STRING ) ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleAttribute", "true");
            	    }
            	    // InternalContextMappingDSL.g:13462:19: (otherlv_86= 'databaseColumn' otherlv_87= '=' ( (lv_databaseColumn_88_0= RULE_STRING ) ) )
            	    // InternalContextMappingDSL.g:13462:20: otherlv_86= 'databaseColumn' otherlv_87= '=' ( (lv_databaseColumn_88_0= RULE_STRING ) )
            	    {
            	    otherlv_86=(Token)match(input,156,FOLLOW_81); 

            	    									newLeafNode(otherlv_86, grammarAccess.getAttributeAccess().getDatabaseColumnKeyword_4_27_0());
            	    								
            	    otherlv_87=(Token)match(input,21,FOLLOW_4); 

            	    									newLeafNode(otherlv_87, grammarAccess.getAttributeAccess().getEqualsSignKeyword_4_27_1());
            	    								
            	    // InternalContextMappingDSL.g:13470:9: ( (lv_databaseColumn_88_0= RULE_STRING ) )
            	    // InternalContextMappingDSL.g:13471:10: (lv_databaseColumn_88_0= RULE_STRING )
            	    {
            	    // InternalContextMappingDSL.g:13471:10: (lv_databaseColumn_88_0= RULE_STRING )
            	    // InternalContextMappingDSL.g:13472:11: lv_databaseColumn_88_0= RULE_STRING
            	    {
            	    lv_databaseColumn_88_0=(Token)match(input,RULE_STRING,FOLLOW_164); 

            	    											newLeafNode(lv_databaseColumn_88_0, grammarAccess.getAttributeAccess().getDatabaseColumnSTRINGTerminalRuleCall_4_27_2_0());
            	    										

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getAttributeRule());
            	    											}
            	    											setWithLastConsumed(
            	    												current,
            	    												"databaseColumn",
            	    												lv_databaseColumn_88_0,
            	    												"org.eclipse.xtext.common.Terminals.STRING");
            	    										

            	    }


            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getAttributeAccess().getUnorderedGroup_4());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 29 :
            	    // InternalContextMappingDSL.g:13494:4: ({...}? => ( ({...}? => (otherlv_89= 'databaseType' otherlv_90= '=' ( (lv_databaseType_91_0= RULE_STRING ) ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:13494:4: ({...}? => ( ({...}? => (otherlv_89= 'databaseType' otherlv_90= '=' ( (lv_databaseType_91_0= RULE_STRING ) ) ) ) ) )
            	    // InternalContextMappingDSL.g:13495:5: {...}? => ( ({...}? => (otherlv_89= 'databaseType' otherlv_90= '=' ( (lv_databaseType_91_0= RULE_STRING ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 28) ) {
            	        throw new FailedPredicateException(input, "ruleAttribute", "getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 28)");
            	    }
            	    // InternalContextMappingDSL.g:13495:107: ( ({...}? => (otherlv_89= 'databaseType' otherlv_90= '=' ( (lv_databaseType_91_0= RULE_STRING ) ) ) ) )
            	    // InternalContextMappingDSL.g:13496:6: ({...}? => (otherlv_89= 'databaseType' otherlv_90= '=' ( (lv_databaseType_91_0= RULE_STRING ) ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 28);
            	    					
            	    // InternalContextMappingDSL.g:13499:9: ({...}? => (otherlv_89= 'databaseType' otherlv_90= '=' ( (lv_databaseType_91_0= RULE_STRING ) ) ) )
            	    // InternalContextMappingDSL.g:13499:10: {...}? => (otherlv_89= 'databaseType' otherlv_90= '=' ( (lv_databaseType_91_0= RULE_STRING ) ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleAttribute", "true");
            	    }
            	    // InternalContextMappingDSL.g:13499:19: (otherlv_89= 'databaseType' otherlv_90= '=' ( (lv_databaseType_91_0= RULE_STRING ) ) )
            	    // InternalContextMappingDSL.g:13499:20: otherlv_89= 'databaseType' otherlv_90= '=' ( (lv_databaseType_91_0= RULE_STRING ) )
            	    {
            	    otherlv_89=(Token)match(input,157,FOLLOW_81); 

            	    									newLeafNode(otherlv_89, grammarAccess.getAttributeAccess().getDatabaseTypeKeyword_4_28_0());
            	    								
            	    otherlv_90=(Token)match(input,21,FOLLOW_4); 

            	    									newLeafNode(otherlv_90, grammarAccess.getAttributeAccess().getEqualsSignKeyword_4_28_1());
            	    								
            	    // InternalContextMappingDSL.g:13507:9: ( (lv_databaseType_91_0= RULE_STRING ) )
            	    // InternalContextMappingDSL.g:13508:10: (lv_databaseType_91_0= RULE_STRING )
            	    {
            	    // InternalContextMappingDSL.g:13508:10: (lv_databaseType_91_0= RULE_STRING )
            	    // InternalContextMappingDSL.g:13509:11: lv_databaseType_91_0= RULE_STRING
            	    {
            	    lv_databaseType_91_0=(Token)match(input,RULE_STRING,FOLLOW_164); 

            	    											newLeafNode(lv_databaseType_91_0, grammarAccess.getAttributeAccess().getDatabaseTypeSTRINGTerminalRuleCall_4_28_2_0());
            	    										

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getAttributeRule());
            	    											}
            	    											setWithLastConsumed(
            	    												current,
            	    												"databaseType",
            	    												lv_databaseType_91_0,
            	    												"org.eclipse.xtext.common.Terminals.STRING");
            	    										

            	    }


            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getAttributeAccess().getUnorderedGroup_4());
            	    					

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop315;
                }
            } while (true);


            }


            }

             
            				  getUnorderedGroupHelper().leave(grammarAccess.getAttributeAccess().getUnorderedGroup_4());
            				

            }

            // InternalContextMappingDSL.g:13538:3: (otherlv_92= ';' )?
            int alt316=2;
            int LA316_0 = input.LA(1);

            if ( (LA316_0==90) ) {
                alt316=1;
            }
            switch (alt316) {
                case 1 :
                    // InternalContextMappingDSL.g:13539:4: otherlv_92= ';'
                    {
                    otherlv_92=(Token)match(input,90,FOLLOW_2); 

                    				newLeafNode(otherlv_92, grammarAccess.getAttributeAccess().getSemicolonKeyword_5());
                    			

                    }
                    break;

            }


            }


            }


            	leaveRule();

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleAttribute"


    // $ANTLR start "entryRuleReference"
    // InternalContextMappingDSL.g:13548:1: entryRuleReference returns [EObject current=null] : iv_ruleReference= ruleReference EOF ;
    public final EObject entryRuleReference() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleReference = null;


        try {
            // InternalContextMappingDSL.g:13548:50: (iv_ruleReference= ruleReference EOF )
            // InternalContextMappingDSL.g:13549:2: iv_ruleReference= ruleReference EOF
            {
             newCompositeNode(grammarAccess.getReferenceRule()); 
            pushFollow(FOLLOW_1);
            iv_ruleReference=ruleReference();

            state._fsp--;

             current =iv_ruleReference; 
            match(input,EOF,FOLLOW_2); 

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleReference"


    // $ANTLR start "ruleReference"
    // InternalContextMappingDSL.g:13555:1: ruleReference returns [EObject current=null] : ( ( (lv_doc_0_0= RULE_STRING ) )? this_REF_1= RULE_REF ( (lv_visibility_2_0= ruleVisibility ) )? ( ( ( (lv_collectionType_3_0= ruleCollectionType ) ) otherlv_4= '<' ( (otherlv_5= '@' )? ( (otherlv_6= RULE_ID ) ) ) otherlv_7= '>' ) | ( (otherlv_8= '@' )? ( (otherlv_9= RULE_ID ) ) ) ) ( (lv_name_10_0= RULE_ID ) ) ( ( ( ( ({...}? => ( ({...}? => ( (lv_key_12_0= 'key' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notChangeable_13_0= RULE_NOT ) ) otherlv_14= 'changeable' ) | otherlv_15= 'changeable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_required_16_0= 'required' ) ) | (this_NOT_17= RULE_NOT otherlv_18= 'required' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_nullable_19_0= 'nullable' ) ) | (this_NOT_20= RULE_NOT otherlv_21= 'nullable' ) ) (otherlv_22= '=' ( (lv_nullableMessage_23_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_24= 'hint' otherlv_25= '=' ( (lv_hint_26_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_27= 'cascade' otherlv_28= '=' ( (lv_cascade_29_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_30= 'fetch' otherlv_31= '=' ( (lv_fetch_32_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_cache_33_0= 'cache' ) ) | (this_NOT_34= RULE_NOT otherlv_35= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_inverse_36_0= 'inverse' ) ) | (this_NOT_37= RULE_NOT otherlv_38= 'inverse' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_39= 'databaseColumn' otherlv_40= '=' ( (lv_databaseColumn_41_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_42= 'databaseJoinTable' otherlv_43= '=' ( (lv_databaseJoinTable_44_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_45= 'databaseJoinColumn' otherlv_46= '=' ( (lv_databaseJoinColumn_47_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notEmpty_48_0= 'notEmpty' ) ) (otherlv_49= '=' ( (lv_notEmptyMessage_50_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_51= 'size' otherlv_52= '=' ( (lv_size_53_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_valid_54_0= 'valid' ) ) (otherlv_55= '=' ( (lv_validMessage_56_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_57= 'validate' otherlv_58= '=' ( (lv_validate_59_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_60_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_61= 'orderby' otherlv_62= '=' ( (lv_orderBy_63_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_orderColumn_64_0= 'orderColumn' ) ) (otherlv_65= '=' ( (lv_orderColumnName_66_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( (lv_oppositeHolder_67_0= ruleOppositeHolder ) ) ) ) ) )* ) ) ) (otherlv_68= ';' )? ) ;
    public final EObject ruleReference() throws RecognitionException {
        EObject current = null;

        Token lv_doc_0_0=null;
        Token this_REF_1=null;
        Token otherlv_4=null;
        Token otherlv_5=null;
        Token otherlv_6=null;
        Token otherlv_7=null;
        Token otherlv_8=null;
        Token otherlv_9=null;
        Token lv_name_10_0=null;
        Token lv_key_12_0=null;
        Token lv_notChangeable_13_0=null;
        Token otherlv_14=null;
        Token otherlv_15=null;
        Token lv_required_16_0=null;
        Token this_NOT_17=null;
        Token otherlv_18=null;
        Token lv_nullable_19_0=null;
        Token this_NOT_20=null;
        Token otherlv_21=null;
        Token otherlv_22=null;
        Token lv_nullableMessage_23_0=null;
        Token otherlv_24=null;
        Token otherlv_25=null;
        Token lv_hint_26_0=null;
        Token otherlv_27=null;
        Token otherlv_28=null;
        Token lv_cascade_29_0=null;
        Token otherlv_30=null;
        Token otherlv_31=null;
        Token lv_fetch_32_0=null;
        Token lv_cache_33_0=null;
        Token this_NOT_34=null;
        Token otherlv_35=null;
        Token lv_inverse_36_0=null;
        Token this_NOT_37=null;
        Token otherlv_38=null;
        Token otherlv_39=null;
        Token otherlv_40=null;
        Token lv_databaseColumn_41_0=null;
        Token otherlv_42=null;
        Token otherlv_43=null;
        Token lv_databaseJoinTable_44_0=null;
        Token otherlv_45=null;
        Token otherlv_46=null;
        Token lv_databaseJoinColumn_47_0=null;
        Token lv_notEmpty_48_0=null;
        Token otherlv_49=null;
        Token lv_notEmptyMessage_50_0=null;
        Token otherlv_51=null;
        Token otherlv_52=null;
        Token lv_size_53_0=null;
        Token lv_valid_54_0=null;
        Token otherlv_55=null;
        Token lv_validMessage_56_0=null;
        Token otherlv_57=null;
        Token otherlv_58=null;
        Token lv_validate_59_0=null;
        Token lv_transient_60_0=null;
        Token otherlv_61=null;
        Token otherlv_62=null;
        Token lv_orderBy_63_0=null;
        Token lv_orderColumn_64_0=null;
        Token otherlv_65=null;
        Token lv_orderColumnName_66_0=null;
        Token otherlv_68=null;
        Enumerator lv_visibility_2_0 = null;

        Enumerator lv_collectionType_3_0 = null;

        EObject lv_oppositeHolder_67_0 = null;



        	enterRule();

        try {
            // InternalContextMappingDSL.g:13561:2: ( ( ( (lv_doc_0_0= RULE_STRING ) )? this_REF_1= RULE_REF ( (lv_visibility_2_0= ruleVisibility ) )? ( ( ( (lv_collectionType_3_0= ruleCollectionType ) ) otherlv_4= '<' ( (otherlv_5= '@' )? ( (otherlv_6= RULE_ID ) ) ) otherlv_7= '>' ) | ( (otherlv_8= '@' )? ( (otherlv_9= RULE_ID ) ) ) ) ( (lv_name_10_0= RULE_ID ) ) ( ( ( ( ({...}? => ( ({...}? => ( (lv_key_12_0= 'key' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notChangeable_13_0= RULE_NOT ) ) otherlv_14= 'changeable' ) | otherlv_15= 'changeable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_required_16_0= 'required' ) ) | (this_NOT_17= RULE_NOT otherlv_18= 'required' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_nullable_19_0= 'nullable' ) ) | (this_NOT_20= RULE_NOT otherlv_21= 'nullable' ) ) (otherlv_22= '=' ( (lv_nullableMessage_23_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_24= 'hint' otherlv_25= '=' ( (lv_hint_26_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_27= 'cascade' otherlv_28= '=' ( (lv_cascade_29_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_30= 'fetch' otherlv_31= '=' ( (lv_fetch_32_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_cache_33_0= 'cache' ) ) | (this_NOT_34= RULE_NOT otherlv_35= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_inverse_36_0= 'inverse' ) ) | (this_NOT_37= RULE_NOT otherlv_38= 'inverse' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_39= 'databaseColumn' otherlv_40= '=' ( (lv_databaseColumn_41_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_42= 'databaseJoinTable' otherlv_43= '=' ( (lv_databaseJoinTable_44_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_45= 'databaseJoinColumn' otherlv_46= '=' ( (lv_databaseJoinColumn_47_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notEmpty_48_0= 'notEmpty' ) ) (otherlv_49= '=' ( (lv_notEmptyMessage_50_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_51= 'size' otherlv_52= '=' ( (lv_size_53_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_valid_54_0= 'valid' ) ) (otherlv_55= '=' ( (lv_validMessage_56_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_57= 'validate' otherlv_58= '=' ( (lv_validate_59_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_60_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_61= 'orderby' otherlv_62= '=' ( (lv_orderBy_63_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_orderColumn_64_0= 'orderColumn' ) ) (otherlv_65= '=' ( (lv_orderColumnName_66_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( (lv_oppositeHolder_67_0= ruleOppositeHolder ) ) ) ) ) )* ) ) ) (otherlv_68= ';' )? ) )
            // InternalContextMappingDSL.g:13562:2: ( ( (lv_doc_0_0= RULE_STRING ) )? this_REF_1= RULE_REF ( (lv_visibility_2_0= ruleVisibility ) )? ( ( ( (lv_collectionType_3_0= ruleCollectionType ) ) otherlv_4= '<' ( (otherlv_5= '@' )? ( (otherlv_6= RULE_ID ) ) ) otherlv_7= '>' ) | ( (otherlv_8= '@' )? ( (otherlv_9= RULE_ID ) ) ) ) ( (lv_name_10_0= RULE_ID ) ) ( ( ( ( ({...}? => ( ({...}? => ( (lv_key_12_0= 'key' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notChangeable_13_0= RULE_NOT ) ) otherlv_14= 'changeable' ) | otherlv_15= 'changeable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_required_16_0= 'required' ) ) | (this_NOT_17= RULE_NOT otherlv_18= 'required' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_nullable_19_0= 'nullable' ) ) | (this_NOT_20= RULE_NOT otherlv_21= 'nullable' ) ) (otherlv_22= '=' ( (lv_nullableMessage_23_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_24= 'hint' otherlv_25= '=' ( (lv_hint_26_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_27= 'cascade' otherlv_28= '=' ( (lv_cascade_29_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_30= 'fetch' otherlv_31= '=' ( (lv_fetch_32_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_cache_33_0= 'cache' ) ) | (this_NOT_34= RULE_NOT otherlv_35= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_inverse_36_0= 'inverse' ) ) | (this_NOT_37= RULE_NOT otherlv_38= 'inverse' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_39= 'databaseColumn' otherlv_40= '=' ( (lv_databaseColumn_41_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_42= 'databaseJoinTable' otherlv_43= '=' ( (lv_databaseJoinTable_44_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_45= 'databaseJoinColumn' otherlv_46= '=' ( (lv_databaseJoinColumn_47_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notEmpty_48_0= 'notEmpty' ) ) (otherlv_49= '=' ( (lv_notEmptyMessage_50_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_51= 'size' otherlv_52= '=' ( (lv_size_53_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_valid_54_0= 'valid' ) ) (otherlv_55= '=' ( (lv_validMessage_56_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_57= 'validate' otherlv_58= '=' ( (lv_validate_59_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_60_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_61= 'orderby' otherlv_62= '=' ( (lv_orderBy_63_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_orderColumn_64_0= 'orderColumn' ) ) (otherlv_65= '=' ( (lv_orderColumnName_66_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( (lv_oppositeHolder_67_0= ruleOppositeHolder ) ) ) ) ) )* ) ) ) (otherlv_68= ';' )? )
            {
            // InternalContextMappingDSL.g:13562:2: ( ( (lv_doc_0_0= RULE_STRING ) )? this_REF_1= RULE_REF ( (lv_visibility_2_0= ruleVisibility ) )? ( ( ( (lv_collectionType_3_0= ruleCollectionType ) ) otherlv_4= '<' ( (otherlv_5= '@' )? ( (otherlv_6= RULE_ID ) ) ) otherlv_7= '>' ) | ( (otherlv_8= '@' )? ( (otherlv_9= RULE_ID ) ) ) ) ( (lv_name_10_0= RULE_ID ) ) ( ( ( ( ({...}? => ( ({...}? => ( (lv_key_12_0= 'key' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notChangeable_13_0= RULE_NOT ) ) otherlv_14= 'changeable' ) | otherlv_15= 'changeable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_required_16_0= 'required' ) ) | (this_NOT_17= RULE_NOT otherlv_18= 'required' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_nullable_19_0= 'nullable' ) ) | (this_NOT_20= RULE_NOT otherlv_21= 'nullable' ) ) (otherlv_22= '=' ( (lv_nullableMessage_23_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_24= 'hint' otherlv_25= '=' ( (lv_hint_26_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_27= 'cascade' otherlv_28= '=' ( (lv_cascade_29_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_30= 'fetch' otherlv_31= '=' ( (lv_fetch_32_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_cache_33_0= 'cache' ) ) | (this_NOT_34= RULE_NOT otherlv_35= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_inverse_36_0= 'inverse' ) ) | (this_NOT_37= RULE_NOT otherlv_38= 'inverse' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_39= 'databaseColumn' otherlv_40= '=' ( (lv_databaseColumn_41_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_42= 'databaseJoinTable' otherlv_43= '=' ( (lv_databaseJoinTable_44_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_45= 'databaseJoinColumn' otherlv_46= '=' ( (lv_databaseJoinColumn_47_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notEmpty_48_0= 'notEmpty' ) ) (otherlv_49= '=' ( (lv_notEmptyMessage_50_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_51= 'size' otherlv_52= '=' ( (lv_size_53_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_valid_54_0= 'valid' ) ) (otherlv_55= '=' ( (lv_validMessage_56_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_57= 'validate' otherlv_58= '=' ( (lv_validate_59_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_60_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_61= 'orderby' otherlv_62= '=' ( (lv_orderBy_63_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_orderColumn_64_0= 'orderColumn' ) ) (otherlv_65= '=' ( (lv_orderColumnName_66_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( (lv_oppositeHolder_67_0= ruleOppositeHolder ) ) ) ) ) )* ) ) ) (otherlv_68= ';' )? )
            // InternalContextMappingDSL.g:13563:3: ( (lv_doc_0_0= RULE_STRING ) )? this_REF_1= RULE_REF ( (lv_visibility_2_0= ruleVisibility ) )? ( ( ( (lv_collectionType_3_0= ruleCollectionType ) ) otherlv_4= '<' ( (otherlv_5= '@' )? ( (otherlv_6= RULE_ID ) ) ) otherlv_7= '>' ) | ( (otherlv_8= '@' )? ( (otherlv_9= RULE_ID ) ) ) ) ( (lv_name_10_0= RULE_ID ) ) ( ( ( ( ({...}? => ( ({...}? => ( (lv_key_12_0= 'key' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notChangeable_13_0= RULE_NOT ) ) otherlv_14= 'changeable' ) | otherlv_15= 'changeable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_required_16_0= 'required' ) ) | (this_NOT_17= RULE_NOT otherlv_18= 'required' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_nullable_19_0= 'nullable' ) ) | (this_NOT_20= RULE_NOT otherlv_21= 'nullable' ) ) (otherlv_22= '=' ( (lv_nullableMessage_23_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_24= 'hint' otherlv_25= '=' ( (lv_hint_26_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_27= 'cascade' otherlv_28= '=' ( (lv_cascade_29_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_30= 'fetch' otherlv_31= '=' ( (lv_fetch_32_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_cache_33_0= 'cache' ) ) | (this_NOT_34= RULE_NOT otherlv_35= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_inverse_36_0= 'inverse' ) ) | (this_NOT_37= RULE_NOT otherlv_38= 'inverse' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_39= 'databaseColumn' otherlv_40= '=' ( (lv_databaseColumn_41_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_42= 'databaseJoinTable' otherlv_43= '=' ( (lv_databaseJoinTable_44_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_45= 'databaseJoinColumn' otherlv_46= '=' ( (lv_databaseJoinColumn_47_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notEmpty_48_0= 'notEmpty' ) ) (otherlv_49= '=' ( (lv_notEmptyMessage_50_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_51= 'size' otherlv_52= '=' ( (lv_size_53_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_valid_54_0= 'valid' ) ) (otherlv_55= '=' ( (lv_validMessage_56_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_57= 'validate' otherlv_58= '=' ( (lv_validate_59_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_60_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_61= 'orderby' otherlv_62= '=' ( (lv_orderBy_63_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_orderColumn_64_0= 'orderColumn' ) ) (otherlv_65= '=' ( (lv_orderColumnName_66_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( (lv_oppositeHolder_67_0= ruleOppositeHolder ) ) ) ) ) )* ) ) ) (otherlv_68= ';' )?
            {
            // InternalContextMappingDSL.g:13563:3: ( (lv_doc_0_0= RULE_STRING ) )?
            int alt317=2;
            int LA317_0 = input.LA(1);

            if ( (LA317_0==RULE_STRING) ) {
                alt317=1;
            }
            switch (alt317) {
                case 1 :
                    // InternalContextMappingDSL.g:13564:4: (lv_doc_0_0= RULE_STRING )
                    {
                    // InternalContextMappingDSL.g:13564:4: (lv_doc_0_0= RULE_STRING )
                    // InternalContextMappingDSL.g:13565:5: lv_doc_0_0= RULE_STRING
                    {
                    lv_doc_0_0=(Token)match(input,RULE_STRING,FOLLOW_169); 

                    					newLeafNode(lv_doc_0_0, grammarAccess.getReferenceAccess().getDocSTRINGTerminalRuleCall_0_0());
                    				

                    					if (current==null) {
                    						current = createModelElement(grammarAccess.getReferenceRule());
                    					}
                    					setWithLastConsumed(
                    						current,
                    						"doc",
                    						lv_doc_0_0,
                    						"org.eclipse.xtext.common.Terminals.STRING");
                    				

                    }


                    }
                    break;

            }

            this_REF_1=(Token)match(input,RULE_REF,FOLLOW_170); 

            			newLeafNode(this_REF_1, grammarAccess.getReferenceAccess().getREFTerminalRuleCall_1());
            		
            // InternalContextMappingDSL.g:13585:3: ( (lv_visibility_2_0= ruleVisibility ) )?
            int alt318=2;
            int LA318_0 = input.LA(1);

            if ( (LA318_0==109||(LA318_0>=232 && LA318_0<=234)) ) {
                alt318=1;
            }
            switch (alt318) {
                case 1 :
                    // InternalContextMappingDSL.g:13586:4: (lv_visibility_2_0= ruleVisibility )
                    {
                    // InternalContextMappingDSL.g:13586:4: (lv_visibility_2_0= ruleVisibility )
                    // InternalContextMappingDSL.g:13587:5: lv_visibility_2_0= ruleVisibility
                    {

                    					newCompositeNode(grammarAccess.getReferenceAccess().getVisibilityVisibilityEnumRuleCall_2_0());
                    				
                    pushFollow(FOLLOW_171);
                    lv_visibility_2_0=ruleVisibility();

                    state._fsp--;


                    					if (current==null) {
                    						current = createModelElementForParent(grammarAccess.getReferenceRule());
                    					}
                    					set(
                    						current,
                    						"visibility",
                    						lv_visibility_2_0,
                    						"org.contextmapper.tactic.dsl.TacticDDDLanguage.Visibility");
                    					afterParserOrEnumRuleCall();
                    				

                    }


                    }
                    break;

            }

            // InternalContextMappingDSL.g:13604:3: ( ( ( (lv_collectionType_3_0= ruleCollectionType ) ) otherlv_4= '<' ( (otherlv_5= '@' )? ( (otherlv_6= RULE_ID ) ) ) otherlv_7= '>' ) | ( (otherlv_8= '@' )? ( (otherlv_9= RULE_ID ) ) ) )
            int alt321=2;
            int LA321_0 = input.LA(1);

            if ( (LA321_0==218||(LA321_0>=228 && LA321_0<=231)) ) {
                alt321=1;
            }
            else if ( (LA321_0==RULE_ID||LA321_0==79) ) {
                alt321=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 321, 0, input);

                throw nvae;
            }
            switch (alt321) {
                case 1 :
                    // InternalContextMappingDSL.g:13605:4: ( ( (lv_collectionType_3_0= ruleCollectionType ) ) otherlv_4= '<' ( (otherlv_5= '@' )? ( (otherlv_6= RULE_ID ) ) ) otherlv_7= '>' )
                    {
                    // InternalContextMappingDSL.g:13605:4: ( ( (lv_collectionType_3_0= ruleCollectionType ) ) otherlv_4= '<' ( (otherlv_5= '@' )? ( (otherlv_6= RULE_ID ) ) ) otherlv_7= '>' )
                    // InternalContextMappingDSL.g:13606:5: ( (lv_collectionType_3_0= ruleCollectionType ) ) otherlv_4= '<' ( (otherlv_5= '@' )? ( (otherlv_6= RULE_ID ) ) ) otherlv_7= '>'
                    {
                    // InternalContextMappingDSL.g:13606:5: ( (lv_collectionType_3_0= ruleCollectionType ) )
                    // InternalContextMappingDSL.g:13607:6: (lv_collectionType_3_0= ruleCollectionType )
                    {
                    // InternalContextMappingDSL.g:13607:6: (lv_collectionType_3_0= ruleCollectionType )
                    // InternalContextMappingDSL.g:13608:7: lv_collectionType_3_0= ruleCollectionType
                    {

                    							newCompositeNode(grammarAccess.getReferenceAccess().getCollectionTypeCollectionTypeEnumRuleCall_3_0_0_0());
                    						
                    pushFollow(FOLLOW_117);
                    lv_collectionType_3_0=ruleCollectionType();

                    state._fsp--;


                    							if (current==null) {
                    								current = createModelElementForParent(grammarAccess.getReferenceRule());
                    							}
                    							set(
                    								current,
                    								"collectionType",
                    								lv_collectionType_3_0,
                    								"org.contextmapper.tactic.dsl.TacticDDDLanguage.CollectionType");
                    							afterParserOrEnumRuleCall();
                    						

                    }


                    }

                    otherlv_4=(Token)match(input,103,FOLLOW_96); 

                    					newLeafNode(otherlv_4, grammarAccess.getReferenceAccess().getLessThanSignKeyword_3_0_1());
                    				
                    // InternalContextMappingDSL.g:13629:5: ( (otherlv_5= '@' )? ( (otherlv_6= RULE_ID ) ) )
                    // InternalContextMappingDSL.g:13630:6: (otherlv_5= '@' )? ( (otherlv_6= RULE_ID ) )
                    {
                    // InternalContextMappingDSL.g:13630:6: (otherlv_5= '@' )?
                    int alt319=2;
                    int LA319_0 = input.LA(1);

                    if ( (LA319_0==79) ) {
                        alt319=1;
                    }
                    switch (alt319) {
                        case 1 :
                            // InternalContextMappingDSL.g:13631:7: otherlv_5= '@'
                            {
                            otherlv_5=(Token)match(input,79,FOLLOW_10); 

                            							newLeafNode(otherlv_5, grammarAccess.getReferenceAccess().getCommercialAtKeyword_3_0_2_0());
                            						

                            }
                            break;

                    }

                    // InternalContextMappingDSL.g:13636:6: ( (otherlv_6= RULE_ID ) )
                    // InternalContextMappingDSL.g:13637:7: (otherlv_6= RULE_ID )
                    {
                    // InternalContextMappingDSL.g:13637:7: (otherlv_6= RULE_ID )
                    // InternalContextMappingDSL.g:13638:8: otherlv_6= RULE_ID
                    {

                    								if (current==null) {
                    									current = createModelElement(grammarAccess.getReferenceRule());
                    								}
                    							
                    otherlv_6=(Token)match(input,RULE_ID,FOLLOW_119); 

                    								newLeafNode(otherlv_6, grammarAccess.getReferenceAccess().getDomainObjectTypeSimpleDomainObjectCrossReference_3_0_2_1_0());
                    							

                    }


                    }


                    }

                    otherlv_7=(Token)match(input,104,FOLLOW_10); 

                    					newLeafNode(otherlv_7, grammarAccess.getReferenceAccess().getGreaterThanSignKeyword_3_0_3());
                    				

                    }


                    }
                    break;
                case 2 :
                    // InternalContextMappingDSL.g:13656:4: ( (otherlv_8= '@' )? ( (otherlv_9= RULE_ID ) ) )
                    {
                    // InternalContextMappingDSL.g:13656:4: ( (otherlv_8= '@' )? ( (otherlv_9= RULE_ID ) ) )
                    // InternalContextMappingDSL.g:13657:5: (otherlv_8= '@' )? ( (otherlv_9= RULE_ID ) )
                    {
                    // InternalContextMappingDSL.g:13657:5: (otherlv_8= '@' )?
                    int alt320=2;
                    int LA320_0 = input.LA(1);

                    if ( (LA320_0==79) ) {
                        alt320=1;
                    }
                    switch (alt320) {
                        case 1 :
                            // InternalContextMappingDSL.g:13658:6: otherlv_8= '@'
                            {
                            otherlv_8=(Token)match(input,79,FOLLOW_10); 

                            						newLeafNode(otherlv_8, grammarAccess.getReferenceAccess().getCommercialAtKeyword_3_1_0());
                            					

                            }
                            break;

                    }

                    // InternalContextMappingDSL.g:13663:5: ( (otherlv_9= RULE_ID ) )
                    // InternalContextMappingDSL.g:13664:6: (otherlv_9= RULE_ID )
                    {
                    // InternalContextMappingDSL.g:13664:6: (otherlv_9= RULE_ID )
                    // InternalContextMappingDSL.g:13665:7: otherlv_9= RULE_ID
                    {

                    							if (current==null) {
                    								current = createModelElement(grammarAccess.getReferenceRule());
                    							}
                    						
                    otherlv_9=(Token)match(input,RULE_ID,FOLLOW_10); 

                    							newLeafNode(otherlv_9, grammarAccess.getReferenceAccess().getDomainObjectTypeSimpleDomainObjectCrossReference_3_1_1_0());
                    						

                    }


                    }


                    }


                    }
                    break;

            }

            // InternalContextMappingDSL.g:13678:3: ( (lv_name_10_0= RULE_ID ) )
            // InternalContextMappingDSL.g:13679:4: (lv_name_10_0= RULE_ID )
            {
            // InternalContextMappingDSL.g:13679:4: (lv_name_10_0= RULE_ID )
            // InternalContextMappingDSL.g:13680:5: lv_name_10_0= RULE_ID
            {
            lv_name_10_0=(Token)match(input,RULE_ID,FOLLOW_172); 

            					newLeafNode(lv_name_10_0, grammarAccess.getReferenceAccess().getNameIDTerminalRuleCall_4_0());
            				

            					if (current==null) {
            						current = createModelElement(grammarAccess.getReferenceRule());
            					}
            					setWithLastConsumed(
            						current,
            						"name",
            						lv_name_10_0,
            						"org.eclipse.xtext.common.Terminals.ID");
            				

            }


            }

            // InternalContextMappingDSL.g:13696:3: ( ( ( ( ({...}? => ( ({...}? => ( (lv_key_12_0= 'key' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notChangeable_13_0= RULE_NOT ) ) otherlv_14= 'changeable' ) | otherlv_15= 'changeable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_required_16_0= 'required' ) ) | (this_NOT_17= RULE_NOT otherlv_18= 'required' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_nullable_19_0= 'nullable' ) ) | (this_NOT_20= RULE_NOT otherlv_21= 'nullable' ) ) (otherlv_22= '=' ( (lv_nullableMessage_23_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_24= 'hint' otherlv_25= '=' ( (lv_hint_26_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_27= 'cascade' otherlv_28= '=' ( (lv_cascade_29_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_30= 'fetch' otherlv_31= '=' ( (lv_fetch_32_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_cache_33_0= 'cache' ) ) | (this_NOT_34= RULE_NOT otherlv_35= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_inverse_36_0= 'inverse' ) ) | (this_NOT_37= RULE_NOT otherlv_38= 'inverse' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_39= 'databaseColumn' otherlv_40= '=' ( (lv_databaseColumn_41_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_42= 'databaseJoinTable' otherlv_43= '=' ( (lv_databaseJoinTable_44_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_45= 'databaseJoinColumn' otherlv_46= '=' ( (lv_databaseJoinColumn_47_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notEmpty_48_0= 'notEmpty' ) ) (otherlv_49= '=' ( (lv_notEmptyMessage_50_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_51= 'size' otherlv_52= '=' ( (lv_size_53_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_valid_54_0= 'valid' ) ) (otherlv_55= '=' ( (lv_validMessage_56_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_57= 'validate' otherlv_58= '=' ( (lv_validate_59_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_60_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_61= 'orderby' otherlv_62= '=' ( (lv_orderBy_63_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_orderColumn_64_0= 'orderColumn' ) ) (otherlv_65= '=' ( (lv_orderColumnName_66_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( (lv_oppositeHolder_67_0= ruleOppositeHolder ) ) ) ) ) )* ) ) )
            // InternalContextMappingDSL.g:13697:4: ( ( ( ({...}? => ( ({...}? => ( (lv_key_12_0= 'key' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notChangeable_13_0= RULE_NOT ) ) otherlv_14= 'changeable' ) | otherlv_15= 'changeable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_required_16_0= 'required' ) ) | (this_NOT_17= RULE_NOT otherlv_18= 'required' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_nullable_19_0= 'nullable' ) ) | (this_NOT_20= RULE_NOT otherlv_21= 'nullable' ) ) (otherlv_22= '=' ( (lv_nullableMessage_23_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_24= 'hint' otherlv_25= '=' ( (lv_hint_26_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_27= 'cascade' otherlv_28= '=' ( (lv_cascade_29_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_30= 'fetch' otherlv_31= '=' ( (lv_fetch_32_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_cache_33_0= 'cache' ) ) | (this_NOT_34= RULE_NOT otherlv_35= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_inverse_36_0= 'inverse' ) ) | (this_NOT_37= RULE_NOT otherlv_38= 'inverse' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_39= 'databaseColumn' otherlv_40= '=' ( (lv_databaseColumn_41_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_42= 'databaseJoinTable' otherlv_43= '=' ( (lv_databaseJoinTable_44_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_45= 'databaseJoinColumn' otherlv_46= '=' ( (lv_databaseJoinColumn_47_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notEmpty_48_0= 'notEmpty' ) ) (otherlv_49= '=' ( (lv_notEmptyMessage_50_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_51= 'size' otherlv_52= '=' ( (lv_size_53_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_valid_54_0= 'valid' ) ) (otherlv_55= '=' ( (lv_validMessage_56_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_57= 'validate' otherlv_58= '=' ( (lv_validate_59_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_60_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_61= 'orderby' otherlv_62= '=' ( (lv_orderBy_63_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_orderColumn_64_0= 'orderColumn' ) ) (otherlv_65= '=' ( (lv_orderColumnName_66_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( (lv_oppositeHolder_67_0= ruleOppositeHolder ) ) ) ) ) )* ) )
            {
            // InternalContextMappingDSL.g:13697:4: ( ( ( ({...}? => ( ({...}? => ( (lv_key_12_0= 'key' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notChangeable_13_0= RULE_NOT ) ) otherlv_14= 'changeable' ) | otherlv_15= 'changeable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_required_16_0= 'required' ) ) | (this_NOT_17= RULE_NOT otherlv_18= 'required' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_nullable_19_0= 'nullable' ) ) | (this_NOT_20= RULE_NOT otherlv_21= 'nullable' ) ) (otherlv_22= '=' ( (lv_nullableMessage_23_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_24= 'hint' otherlv_25= '=' ( (lv_hint_26_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_27= 'cascade' otherlv_28= '=' ( (lv_cascade_29_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_30= 'fetch' otherlv_31= '=' ( (lv_fetch_32_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_cache_33_0= 'cache' ) ) | (this_NOT_34= RULE_NOT otherlv_35= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_inverse_36_0= 'inverse' ) ) | (this_NOT_37= RULE_NOT otherlv_38= 'inverse' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_39= 'databaseColumn' otherlv_40= '=' ( (lv_databaseColumn_41_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_42= 'databaseJoinTable' otherlv_43= '=' ( (lv_databaseJoinTable_44_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_45= 'databaseJoinColumn' otherlv_46= '=' ( (lv_databaseJoinColumn_47_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notEmpty_48_0= 'notEmpty' ) ) (otherlv_49= '=' ( (lv_notEmptyMessage_50_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_51= 'size' otherlv_52= '=' ( (lv_size_53_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_valid_54_0= 'valid' ) ) (otherlv_55= '=' ( (lv_validMessage_56_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_57= 'validate' otherlv_58= '=' ( (lv_validate_59_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_60_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_61= 'orderby' otherlv_62= '=' ( (lv_orderBy_63_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_orderColumn_64_0= 'orderColumn' ) ) (otherlv_65= '=' ( (lv_orderColumnName_66_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( (lv_oppositeHolder_67_0= ruleOppositeHolder ) ) ) ) ) )* ) )
            // InternalContextMappingDSL.g:13698:5: ( ( ({...}? => ( ({...}? => ( (lv_key_12_0= 'key' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notChangeable_13_0= RULE_NOT ) ) otherlv_14= 'changeable' ) | otherlv_15= 'changeable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_required_16_0= 'required' ) ) | (this_NOT_17= RULE_NOT otherlv_18= 'required' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_nullable_19_0= 'nullable' ) ) | (this_NOT_20= RULE_NOT otherlv_21= 'nullable' ) ) (otherlv_22= '=' ( (lv_nullableMessage_23_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_24= 'hint' otherlv_25= '=' ( (lv_hint_26_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_27= 'cascade' otherlv_28= '=' ( (lv_cascade_29_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_30= 'fetch' otherlv_31= '=' ( (lv_fetch_32_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_cache_33_0= 'cache' ) ) | (this_NOT_34= RULE_NOT otherlv_35= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_inverse_36_0= 'inverse' ) ) | (this_NOT_37= RULE_NOT otherlv_38= 'inverse' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_39= 'databaseColumn' otherlv_40= '=' ( (lv_databaseColumn_41_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_42= 'databaseJoinTable' otherlv_43= '=' ( (lv_databaseJoinTable_44_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_45= 'databaseJoinColumn' otherlv_46= '=' ( (lv_databaseJoinColumn_47_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notEmpty_48_0= 'notEmpty' ) ) (otherlv_49= '=' ( (lv_notEmptyMessage_50_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_51= 'size' otherlv_52= '=' ( (lv_size_53_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_valid_54_0= 'valid' ) ) (otherlv_55= '=' ( (lv_validMessage_56_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_57= 'validate' otherlv_58= '=' ( (lv_validate_59_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_60_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_61= 'orderby' otherlv_62= '=' ( (lv_orderBy_63_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_orderColumn_64_0= 'orderColumn' ) ) (otherlv_65= '=' ( (lv_orderColumnName_66_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( (lv_oppositeHolder_67_0= ruleOppositeHolder ) ) ) ) ) )* )
            {
             
            				  getUnorderedGroupHelper().enter(grammarAccess.getReferenceAccess().getUnorderedGroup_5());
            				
            // InternalContextMappingDSL.g:13701:5: ( ( ({...}? => ( ({...}? => ( (lv_key_12_0= 'key' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notChangeable_13_0= RULE_NOT ) ) otherlv_14= 'changeable' ) | otherlv_15= 'changeable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_required_16_0= 'required' ) ) | (this_NOT_17= RULE_NOT otherlv_18= 'required' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_nullable_19_0= 'nullable' ) ) | (this_NOT_20= RULE_NOT otherlv_21= 'nullable' ) ) (otherlv_22= '=' ( (lv_nullableMessage_23_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_24= 'hint' otherlv_25= '=' ( (lv_hint_26_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_27= 'cascade' otherlv_28= '=' ( (lv_cascade_29_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_30= 'fetch' otherlv_31= '=' ( (lv_fetch_32_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_cache_33_0= 'cache' ) ) | (this_NOT_34= RULE_NOT otherlv_35= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_inverse_36_0= 'inverse' ) ) | (this_NOT_37= RULE_NOT otherlv_38= 'inverse' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_39= 'databaseColumn' otherlv_40= '=' ( (lv_databaseColumn_41_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_42= 'databaseJoinTable' otherlv_43= '=' ( (lv_databaseJoinTable_44_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_45= 'databaseJoinColumn' otherlv_46= '=' ( (lv_databaseJoinColumn_47_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notEmpty_48_0= 'notEmpty' ) ) (otherlv_49= '=' ( (lv_notEmptyMessage_50_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_51= 'size' otherlv_52= '=' ( (lv_size_53_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_valid_54_0= 'valid' ) ) (otherlv_55= '=' ( (lv_validMessage_56_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_57= 'validate' otherlv_58= '=' ( (lv_validate_59_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_60_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_61= 'orderby' otherlv_62= '=' ( (lv_orderBy_63_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_orderColumn_64_0= 'orderColumn' ) ) (otherlv_65= '=' ( (lv_orderColumnName_66_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( (lv_oppositeHolder_67_0= ruleOppositeHolder ) ) ) ) ) )* )
            // InternalContextMappingDSL.g:13702:6: ( ({...}? => ( ({...}? => ( (lv_key_12_0= 'key' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notChangeable_13_0= RULE_NOT ) ) otherlv_14= 'changeable' ) | otherlv_15= 'changeable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_required_16_0= 'required' ) ) | (this_NOT_17= RULE_NOT otherlv_18= 'required' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_nullable_19_0= 'nullable' ) ) | (this_NOT_20= RULE_NOT otherlv_21= 'nullable' ) ) (otherlv_22= '=' ( (lv_nullableMessage_23_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_24= 'hint' otherlv_25= '=' ( (lv_hint_26_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_27= 'cascade' otherlv_28= '=' ( (lv_cascade_29_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_30= 'fetch' otherlv_31= '=' ( (lv_fetch_32_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_cache_33_0= 'cache' ) ) | (this_NOT_34= RULE_NOT otherlv_35= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_inverse_36_0= 'inverse' ) ) | (this_NOT_37= RULE_NOT otherlv_38= 'inverse' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_39= 'databaseColumn' otherlv_40= '=' ( (lv_databaseColumn_41_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_42= 'databaseJoinTable' otherlv_43= '=' ( (lv_databaseJoinTable_44_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_45= 'databaseJoinColumn' otherlv_46= '=' ( (lv_databaseJoinColumn_47_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notEmpty_48_0= 'notEmpty' ) ) (otherlv_49= '=' ( (lv_notEmptyMessage_50_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_51= 'size' otherlv_52= '=' ( (lv_size_53_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_valid_54_0= 'valid' ) ) (otherlv_55= '=' ( (lv_validMessage_56_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_57= 'validate' otherlv_58= '=' ( (lv_validate_59_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_60_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_61= 'orderby' otherlv_62= '=' ( (lv_orderBy_63_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_orderColumn_64_0= 'orderColumn' ) ) (otherlv_65= '=' ( (lv_orderColumnName_66_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( (lv_oppositeHolder_67_0= ruleOppositeHolder ) ) ) ) ) )*
            {
            // InternalContextMappingDSL.g:13702:6: ( ({...}? => ( ({...}? => ( (lv_key_12_0= 'key' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notChangeable_13_0= RULE_NOT ) ) otherlv_14= 'changeable' ) | otherlv_15= 'changeable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_required_16_0= 'required' ) ) | (this_NOT_17= RULE_NOT otherlv_18= 'required' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_nullable_19_0= 'nullable' ) ) | (this_NOT_20= RULE_NOT otherlv_21= 'nullable' ) ) (otherlv_22= '=' ( (lv_nullableMessage_23_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_24= 'hint' otherlv_25= '=' ( (lv_hint_26_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_27= 'cascade' otherlv_28= '=' ( (lv_cascade_29_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_30= 'fetch' otherlv_31= '=' ( (lv_fetch_32_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_cache_33_0= 'cache' ) ) | (this_NOT_34= RULE_NOT otherlv_35= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_inverse_36_0= 'inverse' ) ) | (this_NOT_37= RULE_NOT otherlv_38= 'inverse' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_39= 'databaseColumn' otherlv_40= '=' ( (lv_databaseColumn_41_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_42= 'databaseJoinTable' otherlv_43= '=' ( (lv_databaseJoinTable_44_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_45= 'databaseJoinColumn' otherlv_46= '=' ( (lv_databaseJoinColumn_47_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notEmpty_48_0= 'notEmpty' ) ) (otherlv_49= '=' ( (lv_notEmptyMessage_50_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_51= 'size' otherlv_52= '=' ( (lv_size_53_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_valid_54_0= 'valid' ) ) (otherlv_55= '=' ( (lv_validMessage_56_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_57= 'validate' otherlv_58= '=' ( (lv_validate_59_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_60_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_61= 'orderby' otherlv_62= '=' ( (lv_orderBy_63_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_orderColumn_64_0= 'orderColumn' ) ) (otherlv_65= '=' ( (lv_orderColumnName_66_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( (lv_oppositeHolder_67_0= ruleOppositeHolder ) ) ) ) ) )*
            loop331:
            do {
                int alt331=21;
                alt331 = dfa331.predict(input);
                switch (alt331) {
            	case 1 :
            	    // InternalContextMappingDSL.g:13703:4: ({...}? => ( ({...}? => ( (lv_key_12_0= 'key' ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:13703:4: ({...}? => ( ({...}? => ( (lv_key_12_0= 'key' ) ) ) ) )
            	    // InternalContextMappingDSL.g:13704:5: {...}? => ( ({...}? => ( (lv_key_12_0= 'key' ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 0) ) {
            	        throw new FailedPredicateException(input, "ruleReference", "getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 0)");
            	    }
            	    // InternalContextMappingDSL.g:13704:106: ( ({...}? => ( (lv_key_12_0= 'key' ) ) ) )
            	    // InternalContextMappingDSL.g:13705:6: ({...}? => ( (lv_key_12_0= 'key' ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 0);
            	    					
            	    // InternalContextMappingDSL.g:13708:9: ({...}? => ( (lv_key_12_0= 'key' ) ) )
            	    // InternalContextMappingDSL.g:13708:10: {...}? => ( (lv_key_12_0= 'key' ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleReference", "true");
            	    }
            	    // InternalContextMappingDSL.g:13708:19: ( (lv_key_12_0= 'key' ) )
            	    // InternalContextMappingDSL.g:13708:20: (lv_key_12_0= 'key' )
            	    {
            	    // InternalContextMappingDSL.g:13708:20: (lv_key_12_0= 'key' )
            	    // InternalContextMappingDSL.g:13709:10: lv_key_12_0= 'key'
            	    {
            	    lv_key_12_0=(Token)match(input,131,FOLLOW_172); 

            	    										newLeafNode(lv_key_12_0, grammarAccess.getReferenceAccess().getKeyKeyKeyword_5_0_0());
            	    									

            	    										if (current==null) {
            	    											current = createModelElement(grammarAccess.getReferenceRule());
            	    										}
            	    										setWithLastConsumed(current, "key", true, "key");
            	    									

            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getReferenceAccess().getUnorderedGroup_5());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 2 :
            	    // InternalContextMappingDSL.g:13726:4: ({...}? => ( ({...}? => ( ( ( (lv_notChangeable_13_0= RULE_NOT ) ) otherlv_14= 'changeable' ) | otherlv_15= 'changeable' ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:13726:4: ({...}? => ( ({...}? => ( ( ( (lv_notChangeable_13_0= RULE_NOT ) ) otherlv_14= 'changeable' ) | otherlv_15= 'changeable' ) ) ) )
            	    // InternalContextMappingDSL.g:13727:5: {...}? => ( ({...}? => ( ( ( (lv_notChangeable_13_0= RULE_NOT ) ) otherlv_14= 'changeable' ) | otherlv_15= 'changeable' ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 1) ) {
            	        throw new FailedPredicateException(input, "ruleReference", "getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 1)");
            	    }
            	    // InternalContextMappingDSL.g:13727:106: ( ({...}? => ( ( ( (lv_notChangeable_13_0= RULE_NOT ) ) otherlv_14= 'changeable' ) | otherlv_15= 'changeable' ) ) )
            	    // InternalContextMappingDSL.g:13728:6: ({...}? => ( ( ( (lv_notChangeable_13_0= RULE_NOT ) ) otherlv_14= 'changeable' ) | otherlv_15= 'changeable' ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 1);
            	    					
            	    // InternalContextMappingDSL.g:13731:9: ({...}? => ( ( ( (lv_notChangeable_13_0= RULE_NOT ) ) otherlv_14= 'changeable' ) | otherlv_15= 'changeable' ) )
            	    // InternalContextMappingDSL.g:13731:10: {...}? => ( ( ( (lv_notChangeable_13_0= RULE_NOT ) ) otherlv_14= 'changeable' ) | otherlv_15= 'changeable' )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleReference", "true");
            	    }
            	    // InternalContextMappingDSL.g:13731:19: ( ( ( (lv_notChangeable_13_0= RULE_NOT ) ) otherlv_14= 'changeable' ) | otherlv_15= 'changeable' )
            	    int alt322=2;
            	    int LA322_0 = input.LA(1);

            	    if ( (LA322_0==RULE_NOT) ) {
            	        alt322=1;
            	    }
            	    else if ( (LA322_0==132) ) {
            	        alt322=2;
            	    }
            	    else {
            	        NoViableAltException nvae =
            	            new NoViableAltException("", 322, 0, input);

            	        throw nvae;
            	    }
            	    switch (alt322) {
            	        case 1 :
            	            // InternalContextMappingDSL.g:13731:20: ( ( (lv_notChangeable_13_0= RULE_NOT ) ) otherlv_14= 'changeable' )
            	            {
            	            // InternalContextMappingDSL.g:13731:20: ( ( (lv_notChangeable_13_0= RULE_NOT ) ) otherlv_14= 'changeable' )
            	            // InternalContextMappingDSL.g:13732:10: ( (lv_notChangeable_13_0= RULE_NOT ) ) otherlv_14= 'changeable'
            	            {
            	            // InternalContextMappingDSL.g:13732:10: ( (lv_notChangeable_13_0= RULE_NOT ) )
            	            // InternalContextMappingDSL.g:13733:11: (lv_notChangeable_13_0= RULE_NOT )
            	            {
            	            // InternalContextMappingDSL.g:13733:11: (lv_notChangeable_13_0= RULE_NOT )
            	            // InternalContextMappingDSL.g:13734:12: lv_notChangeable_13_0= RULE_NOT
            	            {
            	            lv_notChangeable_13_0=(Token)match(input,RULE_NOT,FOLLOW_165); 

            	            												newLeafNode(lv_notChangeable_13_0, grammarAccess.getReferenceAccess().getNotChangeableNOTTerminalRuleCall_5_1_0_0_0());
            	            											

            	            												if (current==null) {
            	            													current = createModelElement(grammarAccess.getReferenceRule());
            	            												}
            	            												setWithLastConsumed(
            	            													current,
            	            													"notChangeable",
            	            													true,
            	            													"org.contextmapper.tactic.dsl.TacticDDDLanguage.NOT");
            	            											

            	            }


            	            }

            	            otherlv_14=(Token)match(input,132,FOLLOW_172); 

            	            										newLeafNode(otherlv_14, grammarAccess.getReferenceAccess().getChangeableKeyword_5_1_0_1());
            	            									

            	            }


            	            }
            	            break;
            	        case 2 :
            	            // InternalContextMappingDSL.g:13756:9: otherlv_15= 'changeable'
            	            {
            	            otherlv_15=(Token)match(input,132,FOLLOW_172); 

            	            									newLeafNode(otherlv_15, grammarAccess.getReferenceAccess().getChangeableKeyword_5_1_1());
            	            								

            	            }
            	            break;

            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getReferenceAccess().getUnorderedGroup_5());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 3 :
            	    // InternalContextMappingDSL.g:13766:4: ({...}? => ( ({...}? => ( ( (lv_required_16_0= 'required' ) ) | (this_NOT_17= RULE_NOT otherlv_18= 'required' ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:13766:4: ({...}? => ( ({...}? => ( ( (lv_required_16_0= 'required' ) ) | (this_NOT_17= RULE_NOT otherlv_18= 'required' ) ) ) ) )
            	    // InternalContextMappingDSL.g:13767:5: {...}? => ( ({...}? => ( ( (lv_required_16_0= 'required' ) ) | (this_NOT_17= RULE_NOT otherlv_18= 'required' ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 2) ) {
            	        throw new FailedPredicateException(input, "ruleReference", "getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 2)");
            	    }
            	    // InternalContextMappingDSL.g:13767:106: ( ({...}? => ( ( (lv_required_16_0= 'required' ) ) | (this_NOT_17= RULE_NOT otherlv_18= 'required' ) ) ) )
            	    // InternalContextMappingDSL.g:13768:6: ({...}? => ( ( (lv_required_16_0= 'required' ) ) | (this_NOT_17= RULE_NOT otherlv_18= 'required' ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 2);
            	    					
            	    // InternalContextMappingDSL.g:13771:9: ({...}? => ( ( (lv_required_16_0= 'required' ) ) | (this_NOT_17= RULE_NOT otherlv_18= 'required' ) ) )
            	    // InternalContextMappingDSL.g:13771:10: {...}? => ( ( (lv_required_16_0= 'required' ) ) | (this_NOT_17= RULE_NOT otherlv_18= 'required' ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleReference", "true");
            	    }
            	    // InternalContextMappingDSL.g:13771:19: ( ( (lv_required_16_0= 'required' ) ) | (this_NOT_17= RULE_NOT otherlv_18= 'required' ) )
            	    int alt323=2;
            	    int LA323_0 = input.LA(1);

            	    if ( (LA323_0==133) ) {
            	        alt323=1;
            	    }
            	    else if ( (LA323_0==RULE_NOT) ) {
            	        alt323=2;
            	    }
            	    else {
            	        NoViableAltException nvae =
            	            new NoViableAltException("", 323, 0, input);

            	        throw nvae;
            	    }
            	    switch (alt323) {
            	        case 1 :
            	            // InternalContextMappingDSL.g:13771:20: ( (lv_required_16_0= 'required' ) )
            	            {
            	            // InternalContextMappingDSL.g:13771:20: ( (lv_required_16_0= 'required' ) )
            	            // InternalContextMappingDSL.g:13772:10: (lv_required_16_0= 'required' )
            	            {
            	            // InternalContextMappingDSL.g:13772:10: (lv_required_16_0= 'required' )
            	            // InternalContextMappingDSL.g:13773:11: lv_required_16_0= 'required'
            	            {
            	            lv_required_16_0=(Token)match(input,133,FOLLOW_172); 

            	            											newLeafNode(lv_required_16_0, grammarAccess.getReferenceAccess().getRequiredRequiredKeyword_5_2_0_0());
            	            										

            	            											if (current==null) {
            	            												current = createModelElement(grammarAccess.getReferenceRule());
            	            											}
            	            											setWithLastConsumed(current, "required", true, "required");
            	            										

            	            }


            	            }


            	            }
            	            break;
            	        case 2 :
            	            // InternalContextMappingDSL.g:13786:9: (this_NOT_17= RULE_NOT otherlv_18= 'required' )
            	            {
            	            // InternalContextMappingDSL.g:13786:9: (this_NOT_17= RULE_NOT otherlv_18= 'required' )
            	            // InternalContextMappingDSL.g:13787:10: this_NOT_17= RULE_NOT otherlv_18= 'required'
            	            {
            	            this_NOT_17=(Token)match(input,RULE_NOT,FOLLOW_166); 

            	            										newLeafNode(this_NOT_17, grammarAccess.getReferenceAccess().getNOTTerminalRuleCall_5_2_1_0());
            	            									
            	            otherlv_18=(Token)match(input,133,FOLLOW_172); 

            	            										newLeafNode(otherlv_18, grammarAccess.getReferenceAccess().getRequiredKeyword_5_2_1_1());
            	            									

            	            }


            	            }
            	            break;

            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getReferenceAccess().getUnorderedGroup_5());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 4 :
            	    // InternalContextMappingDSL.g:13802:4: ({...}? => ( ({...}? => ( ( ( (lv_nullable_19_0= 'nullable' ) ) | (this_NOT_20= RULE_NOT otherlv_21= 'nullable' ) ) (otherlv_22= '=' ( (lv_nullableMessage_23_0= RULE_STRING ) ) )? ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:13802:4: ({...}? => ( ({...}? => ( ( ( (lv_nullable_19_0= 'nullable' ) ) | (this_NOT_20= RULE_NOT otherlv_21= 'nullable' ) ) (otherlv_22= '=' ( (lv_nullableMessage_23_0= RULE_STRING ) ) )? ) ) ) )
            	    // InternalContextMappingDSL.g:13803:5: {...}? => ( ({...}? => ( ( ( (lv_nullable_19_0= 'nullable' ) ) | (this_NOT_20= RULE_NOT otherlv_21= 'nullable' ) ) (otherlv_22= '=' ( (lv_nullableMessage_23_0= RULE_STRING ) ) )? ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 3) ) {
            	        throw new FailedPredicateException(input, "ruleReference", "getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 3)");
            	    }
            	    // InternalContextMappingDSL.g:13803:106: ( ({...}? => ( ( ( (lv_nullable_19_0= 'nullable' ) ) | (this_NOT_20= RULE_NOT otherlv_21= 'nullable' ) ) (otherlv_22= '=' ( (lv_nullableMessage_23_0= RULE_STRING ) ) )? ) ) )
            	    // InternalContextMappingDSL.g:13804:6: ({...}? => ( ( ( (lv_nullable_19_0= 'nullable' ) ) | (this_NOT_20= RULE_NOT otherlv_21= 'nullable' ) ) (otherlv_22= '=' ( (lv_nullableMessage_23_0= RULE_STRING ) ) )? ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 3);
            	    					
            	    // InternalContextMappingDSL.g:13807:9: ({...}? => ( ( ( (lv_nullable_19_0= 'nullable' ) ) | (this_NOT_20= RULE_NOT otherlv_21= 'nullable' ) ) (otherlv_22= '=' ( (lv_nullableMessage_23_0= RULE_STRING ) ) )? ) )
            	    // InternalContextMappingDSL.g:13807:10: {...}? => ( ( ( (lv_nullable_19_0= 'nullable' ) ) | (this_NOT_20= RULE_NOT otherlv_21= 'nullable' ) ) (otherlv_22= '=' ( (lv_nullableMessage_23_0= RULE_STRING ) ) )? )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleReference", "true");
            	    }
            	    // InternalContextMappingDSL.g:13807:19: ( ( ( (lv_nullable_19_0= 'nullable' ) ) | (this_NOT_20= RULE_NOT otherlv_21= 'nullable' ) ) (otherlv_22= '=' ( (lv_nullableMessage_23_0= RULE_STRING ) ) )? )
            	    // InternalContextMappingDSL.g:13807:20: ( ( (lv_nullable_19_0= 'nullable' ) ) | (this_NOT_20= RULE_NOT otherlv_21= 'nullable' ) ) (otherlv_22= '=' ( (lv_nullableMessage_23_0= RULE_STRING ) ) )?
            	    {
            	    // InternalContextMappingDSL.g:13807:20: ( ( (lv_nullable_19_0= 'nullable' ) ) | (this_NOT_20= RULE_NOT otherlv_21= 'nullable' ) )
            	    int alt324=2;
            	    int LA324_0 = input.LA(1);

            	    if ( (LA324_0==134) ) {
            	        alt324=1;
            	    }
            	    else if ( (LA324_0==RULE_NOT) ) {
            	        alt324=2;
            	    }
            	    else {
            	        NoViableAltException nvae =
            	            new NoViableAltException("", 324, 0, input);

            	        throw nvae;
            	    }
            	    switch (alt324) {
            	        case 1 :
            	            // InternalContextMappingDSL.g:13808:10: ( (lv_nullable_19_0= 'nullable' ) )
            	            {
            	            // InternalContextMappingDSL.g:13808:10: ( (lv_nullable_19_0= 'nullable' ) )
            	            // InternalContextMappingDSL.g:13809:11: (lv_nullable_19_0= 'nullable' )
            	            {
            	            // InternalContextMappingDSL.g:13809:11: (lv_nullable_19_0= 'nullable' )
            	            // InternalContextMappingDSL.g:13810:12: lv_nullable_19_0= 'nullable'
            	            {
            	            lv_nullable_19_0=(Token)match(input,134,FOLLOW_173); 

            	            												newLeafNode(lv_nullable_19_0, grammarAccess.getReferenceAccess().getNullableNullableKeyword_5_3_0_0_0());
            	            											

            	            												if (current==null) {
            	            													current = createModelElement(grammarAccess.getReferenceRule());
            	            												}
            	            												setWithLastConsumed(current, "nullable", true, "nullable");
            	            											

            	            }


            	            }


            	            }
            	            break;
            	        case 2 :
            	            // InternalContextMappingDSL.g:13823:10: (this_NOT_20= RULE_NOT otherlv_21= 'nullable' )
            	            {
            	            // InternalContextMappingDSL.g:13823:10: (this_NOT_20= RULE_NOT otherlv_21= 'nullable' )
            	            // InternalContextMappingDSL.g:13824:11: this_NOT_20= RULE_NOT otherlv_21= 'nullable'
            	            {
            	            this_NOT_20=(Token)match(input,RULE_NOT,FOLLOW_168); 

            	            											newLeafNode(this_NOT_20, grammarAccess.getReferenceAccess().getNOTTerminalRuleCall_5_3_0_1_0());
            	            										
            	            otherlv_21=(Token)match(input,134,FOLLOW_173); 

            	            											newLeafNode(otherlv_21, grammarAccess.getReferenceAccess().getNullableKeyword_5_3_0_1_1());
            	            										

            	            }


            	            }
            	            break;

            	    }

            	    // InternalContextMappingDSL.g:13834:9: (otherlv_22= '=' ( (lv_nullableMessage_23_0= RULE_STRING ) ) )?
            	    int alt325=2;
            	    int LA325_0 = input.LA(1);

            	    if ( (LA325_0==21) ) {
            	        alt325=1;
            	    }
            	    switch (alt325) {
            	        case 1 :
            	            // InternalContextMappingDSL.g:13835:10: otherlv_22= '=' ( (lv_nullableMessage_23_0= RULE_STRING ) )
            	            {
            	            otherlv_22=(Token)match(input,21,FOLLOW_4); 

            	            										newLeafNode(otherlv_22, grammarAccess.getReferenceAccess().getEqualsSignKeyword_5_3_1_0());
            	            									
            	            // InternalContextMappingDSL.g:13839:10: ( (lv_nullableMessage_23_0= RULE_STRING ) )
            	            // InternalContextMappingDSL.g:13840:11: (lv_nullableMessage_23_0= RULE_STRING )
            	            {
            	            // InternalContextMappingDSL.g:13840:11: (lv_nullableMessage_23_0= RULE_STRING )
            	            // InternalContextMappingDSL.g:13841:12: lv_nullableMessage_23_0= RULE_STRING
            	            {
            	            lv_nullableMessage_23_0=(Token)match(input,RULE_STRING,FOLLOW_172); 

            	            												newLeafNode(lv_nullableMessage_23_0, grammarAccess.getReferenceAccess().getNullableMessageSTRINGTerminalRuleCall_5_3_1_1_0());
            	            											

            	            												if (current==null) {
            	            													current = createModelElement(grammarAccess.getReferenceRule());
            	            												}
            	            												setWithLastConsumed(
            	            													current,
            	            													"nullableMessage",
            	            													lv_nullableMessage_23_0,
            	            													"org.eclipse.xtext.common.Terminals.STRING");
            	            											

            	            }


            	            }


            	            }
            	            break;

            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getReferenceAccess().getUnorderedGroup_5());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 5 :
            	    // InternalContextMappingDSL.g:13864:4: ({...}? => ( ({...}? => (otherlv_24= 'hint' otherlv_25= '=' ( (lv_hint_26_0= RULE_STRING ) ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:13864:4: ({...}? => ( ({...}? => (otherlv_24= 'hint' otherlv_25= '=' ( (lv_hint_26_0= RULE_STRING ) ) ) ) ) )
            	    // InternalContextMappingDSL.g:13865:5: {...}? => ( ({...}? => (otherlv_24= 'hint' otherlv_25= '=' ( (lv_hint_26_0= RULE_STRING ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 4) ) {
            	        throw new FailedPredicateException(input, "ruleReference", "getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 4)");
            	    }
            	    // InternalContextMappingDSL.g:13865:106: ( ({...}? => (otherlv_24= 'hint' otherlv_25= '=' ( (lv_hint_26_0= RULE_STRING ) ) ) ) )
            	    // InternalContextMappingDSL.g:13866:6: ({...}? => (otherlv_24= 'hint' otherlv_25= '=' ( (lv_hint_26_0= RULE_STRING ) ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 4);
            	    					
            	    // InternalContextMappingDSL.g:13869:9: ({...}? => (otherlv_24= 'hint' otherlv_25= '=' ( (lv_hint_26_0= RULE_STRING ) ) ) )
            	    // InternalContextMappingDSL.g:13869:10: {...}? => (otherlv_24= 'hint' otherlv_25= '=' ( (lv_hint_26_0= RULE_STRING ) ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleReference", "true");
            	    }
            	    // InternalContextMappingDSL.g:13869:19: (otherlv_24= 'hint' otherlv_25= '=' ( (lv_hint_26_0= RULE_STRING ) ) )
            	    // InternalContextMappingDSL.g:13869:20: otherlv_24= 'hint' otherlv_25= '=' ( (lv_hint_26_0= RULE_STRING ) )
            	    {
            	    otherlv_24=(Token)match(input,67,FOLLOW_81); 

            	    									newLeafNode(otherlv_24, grammarAccess.getReferenceAccess().getHintKeyword_5_4_0());
            	    								
            	    otherlv_25=(Token)match(input,21,FOLLOW_4); 

            	    									newLeafNode(otherlv_25, grammarAccess.getReferenceAccess().getEqualsSignKeyword_5_4_1());
            	    								
            	    // InternalContextMappingDSL.g:13877:9: ( (lv_hint_26_0= RULE_STRING ) )
            	    // InternalContextMappingDSL.g:13878:10: (lv_hint_26_0= RULE_STRING )
            	    {
            	    // InternalContextMappingDSL.g:13878:10: (lv_hint_26_0= RULE_STRING )
            	    // InternalContextMappingDSL.g:13879:11: lv_hint_26_0= RULE_STRING
            	    {
            	    lv_hint_26_0=(Token)match(input,RULE_STRING,FOLLOW_172); 

            	    											newLeafNode(lv_hint_26_0, grammarAccess.getReferenceAccess().getHintSTRINGTerminalRuleCall_5_4_2_0());
            	    										

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getReferenceRule());
            	    											}
            	    											setWithLastConsumed(
            	    												current,
            	    												"hint",
            	    												lv_hint_26_0,
            	    												"org.eclipse.xtext.common.Terminals.STRING");
            	    										

            	    }


            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getReferenceAccess().getUnorderedGroup_5());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 6 :
            	    // InternalContextMappingDSL.g:13901:4: ({...}? => ( ({...}? => (otherlv_27= 'cascade' otherlv_28= '=' ( (lv_cascade_29_0= RULE_STRING ) ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:13901:4: ({...}? => ( ({...}? => (otherlv_27= 'cascade' otherlv_28= '=' ( (lv_cascade_29_0= RULE_STRING ) ) ) ) ) )
            	    // InternalContextMappingDSL.g:13902:5: {...}? => ( ({...}? => (otherlv_27= 'cascade' otherlv_28= '=' ( (lv_cascade_29_0= RULE_STRING ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 5) ) {
            	        throw new FailedPredicateException(input, "ruleReference", "getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 5)");
            	    }
            	    // InternalContextMappingDSL.g:13902:106: ( ({...}? => (otherlv_27= 'cascade' otherlv_28= '=' ( (lv_cascade_29_0= RULE_STRING ) ) ) ) )
            	    // InternalContextMappingDSL.g:13903:6: ({...}? => (otherlv_27= 'cascade' otherlv_28= '=' ( (lv_cascade_29_0= RULE_STRING ) ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 5);
            	    					
            	    // InternalContextMappingDSL.g:13906:9: ({...}? => (otherlv_27= 'cascade' otherlv_28= '=' ( (lv_cascade_29_0= RULE_STRING ) ) ) )
            	    // InternalContextMappingDSL.g:13906:10: {...}? => (otherlv_27= 'cascade' otherlv_28= '=' ( (lv_cascade_29_0= RULE_STRING ) ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleReference", "true");
            	    }
            	    // InternalContextMappingDSL.g:13906:19: (otherlv_27= 'cascade' otherlv_28= '=' ( (lv_cascade_29_0= RULE_STRING ) ) )
            	    // InternalContextMappingDSL.g:13906:20: otherlv_27= 'cascade' otherlv_28= '=' ( (lv_cascade_29_0= RULE_STRING ) )
            	    {
            	    otherlv_27=(Token)match(input,158,FOLLOW_81); 

            	    									newLeafNode(otherlv_27, grammarAccess.getReferenceAccess().getCascadeKeyword_5_5_0());
            	    								
            	    otherlv_28=(Token)match(input,21,FOLLOW_4); 

            	    									newLeafNode(otherlv_28, grammarAccess.getReferenceAccess().getEqualsSignKeyword_5_5_1());
            	    								
            	    // InternalContextMappingDSL.g:13914:9: ( (lv_cascade_29_0= RULE_STRING ) )
            	    // InternalContextMappingDSL.g:13915:10: (lv_cascade_29_0= RULE_STRING )
            	    {
            	    // InternalContextMappingDSL.g:13915:10: (lv_cascade_29_0= RULE_STRING )
            	    // InternalContextMappingDSL.g:13916:11: lv_cascade_29_0= RULE_STRING
            	    {
            	    lv_cascade_29_0=(Token)match(input,RULE_STRING,FOLLOW_172); 

            	    											newLeafNode(lv_cascade_29_0, grammarAccess.getReferenceAccess().getCascadeSTRINGTerminalRuleCall_5_5_2_0());
            	    										

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getReferenceRule());
            	    											}
            	    											setWithLastConsumed(
            	    												current,
            	    												"cascade",
            	    												lv_cascade_29_0,
            	    												"org.eclipse.xtext.common.Terminals.STRING");
            	    										

            	    }


            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getReferenceAccess().getUnorderedGroup_5());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 7 :
            	    // InternalContextMappingDSL.g:13938:4: ({...}? => ( ({...}? => (otherlv_30= 'fetch' otherlv_31= '=' ( (lv_fetch_32_0= RULE_STRING ) ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:13938:4: ({...}? => ( ({...}? => (otherlv_30= 'fetch' otherlv_31= '=' ( (lv_fetch_32_0= RULE_STRING ) ) ) ) ) )
            	    // InternalContextMappingDSL.g:13939:5: {...}? => ( ({...}? => (otherlv_30= 'fetch' otherlv_31= '=' ( (lv_fetch_32_0= RULE_STRING ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 6) ) {
            	        throw new FailedPredicateException(input, "ruleReference", "getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 6)");
            	    }
            	    // InternalContextMappingDSL.g:13939:106: ( ({...}? => (otherlv_30= 'fetch' otherlv_31= '=' ( (lv_fetch_32_0= RULE_STRING ) ) ) ) )
            	    // InternalContextMappingDSL.g:13940:6: ({...}? => (otherlv_30= 'fetch' otherlv_31= '=' ( (lv_fetch_32_0= RULE_STRING ) ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 6);
            	    					
            	    // InternalContextMappingDSL.g:13943:9: ({...}? => (otherlv_30= 'fetch' otherlv_31= '=' ( (lv_fetch_32_0= RULE_STRING ) ) ) )
            	    // InternalContextMappingDSL.g:13943:10: {...}? => (otherlv_30= 'fetch' otherlv_31= '=' ( (lv_fetch_32_0= RULE_STRING ) ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleReference", "true");
            	    }
            	    // InternalContextMappingDSL.g:13943:19: (otherlv_30= 'fetch' otherlv_31= '=' ( (lv_fetch_32_0= RULE_STRING ) ) )
            	    // InternalContextMappingDSL.g:13943:20: otherlv_30= 'fetch' otherlv_31= '=' ( (lv_fetch_32_0= RULE_STRING ) )
            	    {
            	    otherlv_30=(Token)match(input,159,FOLLOW_81); 

            	    									newLeafNode(otherlv_30, grammarAccess.getReferenceAccess().getFetchKeyword_5_6_0());
            	    								
            	    otherlv_31=(Token)match(input,21,FOLLOW_4); 

            	    									newLeafNode(otherlv_31, grammarAccess.getReferenceAccess().getEqualsSignKeyword_5_6_1());
            	    								
            	    // InternalContextMappingDSL.g:13951:9: ( (lv_fetch_32_0= RULE_STRING ) )
            	    // InternalContextMappingDSL.g:13952:10: (lv_fetch_32_0= RULE_STRING )
            	    {
            	    // InternalContextMappingDSL.g:13952:10: (lv_fetch_32_0= RULE_STRING )
            	    // InternalContextMappingDSL.g:13953:11: lv_fetch_32_0= RULE_STRING
            	    {
            	    lv_fetch_32_0=(Token)match(input,RULE_STRING,FOLLOW_172); 

            	    											newLeafNode(lv_fetch_32_0, grammarAccess.getReferenceAccess().getFetchSTRINGTerminalRuleCall_5_6_2_0());
            	    										

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getReferenceRule());
            	    											}
            	    											setWithLastConsumed(
            	    												current,
            	    												"fetch",
            	    												lv_fetch_32_0,
            	    												"org.eclipse.xtext.common.Terminals.STRING");
            	    										

            	    }


            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getReferenceAccess().getUnorderedGroup_5());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 8 :
            	    // InternalContextMappingDSL.g:13975:4: ({...}? => ( ({...}? => ( ( (lv_cache_33_0= 'cache' ) ) | (this_NOT_34= RULE_NOT otherlv_35= 'cache' ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:13975:4: ({...}? => ( ({...}? => ( ( (lv_cache_33_0= 'cache' ) ) | (this_NOT_34= RULE_NOT otherlv_35= 'cache' ) ) ) ) )
            	    // InternalContextMappingDSL.g:13976:5: {...}? => ( ({...}? => ( ( (lv_cache_33_0= 'cache' ) ) | (this_NOT_34= RULE_NOT otherlv_35= 'cache' ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 7) ) {
            	        throw new FailedPredicateException(input, "ruleReference", "getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 7)");
            	    }
            	    // InternalContextMappingDSL.g:13976:106: ( ({...}? => ( ( (lv_cache_33_0= 'cache' ) ) | (this_NOT_34= RULE_NOT otherlv_35= 'cache' ) ) ) )
            	    // InternalContextMappingDSL.g:13977:6: ({...}? => ( ( (lv_cache_33_0= 'cache' ) ) | (this_NOT_34= RULE_NOT otherlv_35= 'cache' ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 7);
            	    					
            	    // InternalContextMappingDSL.g:13980:9: ({...}? => ( ( (lv_cache_33_0= 'cache' ) ) | (this_NOT_34= RULE_NOT otherlv_35= 'cache' ) ) )
            	    // InternalContextMappingDSL.g:13980:10: {...}? => ( ( (lv_cache_33_0= 'cache' ) ) | (this_NOT_34= RULE_NOT otherlv_35= 'cache' ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleReference", "true");
            	    }
            	    // InternalContextMappingDSL.g:13980:19: ( ( (lv_cache_33_0= 'cache' ) ) | (this_NOT_34= RULE_NOT otherlv_35= 'cache' ) )
            	    int alt326=2;
            	    int LA326_0 = input.LA(1);

            	    if ( (LA326_0==93) ) {
            	        alt326=1;
            	    }
            	    else if ( (LA326_0==RULE_NOT) ) {
            	        alt326=2;
            	    }
            	    else {
            	        NoViableAltException nvae =
            	            new NoViableAltException("", 326, 0, input);

            	        throw nvae;
            	    }
            	    switch (alt326) {
            	        case 1 :
            	            // InternalContextMappingDSL.g:13980:20: ( (lv_cache_33_0= 'cache' ) )
            	            {
            	            // InternalContextMappingDSL.g:13980:20: ( (lv_cache_33_0= 'cache' ) )
            	            // InternalContextMappingDSL.g:13981:10: (lv_cache_33_0= 'cache' )
            	            {
            	            // InternalContextMappingDSL.g:13981:10: (lv_cache_33_0= 'cache' )
            	            // InternalContextMappingDSL.g:13982:11: lv_cache_33_0= 'cache'
            	            {
            	            lv_cache_33_0=(Token)match(input,93,FOLLOW_172); 

            	            											newLeafNode(lv_cache_33_0, grammarAccess.getReferenceAccess().getCacheCacheKeyword_5_7_0_0());
            	            										

            	            											if (current==null) {
            	            												current = createModelElement(grammarAccess.getReferenceRule());
            	            											}
            	            											setWithLastConsumed(current, "cache", true, "cache");
            	            										

            	            }


            	            }


            	            }
            	            break;
            	        case 2 :
            	            // InternalContextMappingDSL.g:13995:9: (this_NOT_34= RULE_NOT otherlv_35= 'cache' )
            	            {
            	            // InternalContextMappingDSL.g:13995:9: (this_NOT_34= RULE_NOT otherlv_35= 'cache' )
            	            // InternalContextMappingDSL.g:13996:10: this_NOT_34= RULE_NOT otherlv_35= 'cache'
            	            {
            	            this_NOT_34=(Token)match(input,RULE_NOT,FOLLOW_129); 

            	            										newLeafNode(this_NOT_34, grammarAccess.getReferenceAccess().getNOTTerminalRuleCall_5_7_1_0());
            	            									
            	            otherlv_35=(Token)match(input,93,FOLLOW_172); 

            	            										newLeafNode(otherlv_35, grammarAccess.getReferenceAccess().getCacheKeyword_5_7_1_1());
            	            									

            	            }


            	            }
            	            break;

            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getReferenceAccess().getUnorderedGroup_5());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 9 :
            	    // InternalContextMappingDSL.g:14011:4: ({...}? => ( ({...}? => ( ( (lv_inverse_36_0= 'inverse' ) ) | (this_NOT_37= RULE_NOT otherlv_38= 'inverse' ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:14011:4: ({...}? => ( ({...}? => ( ( (lv_inverse_36_0= 'inverse' ) ) | (this_NOT_37= RULE_NOT otherlv_38= 'inverse' ) ) ) ) )
            	    // InternalContextMappingDSL.g:14012:5: {...}? => ( ({...}? => ( ( (lv_inverse_36_0= 'inverse' ) ) | (this_NOT_37= RULE_NOT otherlv_38= 'inverse' ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 8) ) {
            	        throw new FailedPredicateException(input, "ruleReference", "getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 8)");
            	    }
            	    // InternalContextMappingDSL.g:14012:106: ( ({...}? => ( ( (lv_inverse_36_0= 'inverse' ) ) | (this_NOT_37= RULE_NOT otherlv_38= 'inverse' ) ) ) )
            	    // InternalContextMappingDSL.g:14013:6: ({...}? => ( ( (lv_inverse_36_0= 'inverse' ) ) | (this_NOT_37= RULE_NOT otherlv_38= 'inverse' ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 8);
            	    					
            	    // InternalContextMappingDSL.g:14016:9: ({...}? => ( ( (lv_inverse_36_0= 'inverse' ) ) | (this_NOT_37= RULE_NOT otherlv_38= 'inverse' ) ) )
            	    // InternalContextMappingDSL.g:14016:10: {...}? => ( ( (lv_inverse_36_0= 'inverse' ) ) | (this_NOT_37= RULE_NOT otherlv_38= 'inverse' ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleReference", "true");
            	    }
            	    // InternalContextMappingDSL.g:14016:19: ( ( (lv_inverse_36_0= 'inverse' ) ) | (this_NOT_37= RULE_NOT otherlv_38= 'inverse' ) )
            	    int alt327=2;
            	    int LA327_0 = input.LA(1);

            	    if ( (LA327_0==160) ) {
            	        alt327=1;
            	    }
            	    else if ( (LA327_0==RULE_NOT) ) {
            	        alt327=2;
            	    }
            	    else {
            	        NoViableAltException nvae =
            	            new NoViableAltException("", 327, 0, input);

            	        throw nvae;
            	    }
            	    switch (alt327) {
            	        case 1 :
            	            // InternalContextMappingDSL.g:14016:20: ( (lv_inverse_36_0= 'inverse' ) )
            	            {
            	            // InternalContextMappingDSL.g:14016:20: ( (lv_inverse_36_0= 'inverse' ) )
            	            // InternalContextMappingDSL.g:14017:10: (lv_inverse_36_0= 'inverse' )
            	            {
            	            // InternalContextMappingDSL.g:14017:10: (lv_inverse_36_0= 'inverse' )
            	            // InternalContextMappingDSL.g:14018:11: lv_inverse_36_0= 'inverse'
            	            {
            	            lv_inverse_36_0=(Token)match(input,160,FOLLOW_172); 

            	            											newLeafNode(lv_inverse_36_0, grammarAccess.getReferenceAccess().getInverseInverseKeyword_5_8_0_0());
            	            										

            	            											if (current==null) {
            	            												current = createModelElement(grammarAccess.getReferenceRule());
            	            											}
            	            											setWithLastConsumed(current, "inverse", true, "inverse");
            	            										

            	            }


            	            }


            	            }
            	            break;
            	        case 2 :
            	            // InternalContextMappingDSL.g:14031:9: (this_NOT_37= RULE_NOT otherlv_38= 'inverse' )
            	            {
            	            // InternalContextMappingDSL.g:14031:9: (this_NOT_37= RULE_NOT otherlv_38= 'inverse' )
            	            // InternalContextMappingDSL.g:14032:10: this_NOT_37= RULE_NOT otherlv_38= 'inverse'
            	            {
            	            this_NOT_37=(Token)match(input,RULE_NOT,FOLLOW_174); 

            	            										newLeafNode(this_NOT_37, grammarAccess.getReferenceAccess().getNOTTerminalRuleCall_5_8_1_0());
            	            									
            	            otherlv_38=(Token)match(input,160,FOLLOW_172); 

            	            										newLeafNode(otherlv_38, grammarAccess.getReferenceAccess().getInverseKeyword_5_8_1_1());
            	            									

            	            }


            	            }
            	            break;

            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getReferenceAccess().getUnorderedGroup_5());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 10 :
            	    // InternalContextMappingDSL.g:14047:4: ({...}? => ( ({...}? => (otherlv_39= 'databaseColumn' otherlv_40= '=' ( (lv_databaseColumn_41_0= RULE_STRING ) ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:14047:4: ({...}? => ( ({...}? => (otherlv_39= 'databaseColumn' otherlv_40= '=' ( (lv_databaseColumn_41_0= RULE_STRING ) ) ) ) ) )
            	    // InternalContextMappingDSL.g:14048:5: {...}? => ( ({...}? => (otherlv_39= 'databaseColumn' otherlv_40= '=' ( (lv_databaseColumn_41_0= RULE_STRING ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 9) ) {
            	        throw new FailedPredicateException(input, "ruleReference", "getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 9)");
            	    }
            	    // InternalContextMappingDSL.g:14048:106: ( ({...}? => (otherlv_39= 'databaseColumn' otherlv_40= '=' ( (lv_databaseColumn_41_0= RULE_STRING ) ) ) ) )
            	    // InternalContextMappingDSL.g:14049:6: ({...}? => (otherlv_39= 'databaseColumn' otherlv_40= '=' ( (lv_databaseColumn_41_0= RULE_STRING ) ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 9);
            	    					
            	    // InternalContextMappingDSL.g:14052:9: ({...}? => (otherlv_39= 'databaseColumn' otherlv_40= '=' ( (lv_databaseColumn_41_0= RULE_STRING ) ) ) )
            	    // InternalContextMappingDSL.g:14052:10: {...}? => (otherlv_39= 'databaseColumn' otherlv_40= '=' ( (lv_databaseColumn_41_0= RULE_STRING ) ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleReference", "true");
            	    }
            	    // InternalContextMappingDSL.g:14052:19: (otherlv_39= 'databaseColumn' otherlv_40= '=' ( (lv_databaseColumn_41_0= RULE_STRING ) ) )
            	    // InternalContextMappingDSL.g:14052:20: otherlv_39= 'databaseColumn' otherlv_40= '=' ( (lv_databaseColumn_41_0= RULE_STRING ) )
            	    {
            	    otherlv_39=(Token)match(input,156,FOLLOW_81); 

            	    									newLeafNode(otherlv_39, grammarAccess.getReferenceAccess().getDatabaseColumnKeyword_5_9_0());
            	    								
            	    otherlv_40=(Token)match(input,21,FOLLOW_4); 

            	    									newLeafNode(otherlv_40, grammarAccess.getReferenceAccess().getEqualsSignKeyword_5_9_1());
            	    								
            	    // InternalContextMappingDSL.g:14060:9: ( (lv_databaseColumn_41_0= RULE_STRING ) )
            	    // InternalContextMappingDSL.g:14061:10: (lv_databaseColumn_41_0= RULE_STRING )
            	    {
            	    // InternalContextMappingDSL.g:14061:10: (lv_databaseColumn_41_0= RULE_STRING )
            	    // InternalContextMappingDSL.g:14062:11: lv_databaseColumn_41_0= RULE_STRING
            	    {
            	    lv_databaseColumn_41_0=(Token)match(input,RULE_STRING,FOLLOW_172); 

            	    											newLeafNode(lv_databaseColumn_41_0, grammarAccess.getReferenceAccess().getDatabaseColumnSTRINGTerminalRuleCall_5_9_2_0());
            	    										

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getReferenceRule());
            	    											}
            	    											setWithLastConsumed(
            	    												current,
            	    												"databaseColumn",
            	    												lv_databaseColumn_41_0,
            	    												"org.eclipse.xtext.common.Terminals.STRING");
            	    										

            	    }


            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getReferenceAccess().getUnorderedGroup_5());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 11 :
            	    // InternalContextMappingDSL.g:14084:4: ({...}? => ( ({...}? => (otherlv_42= 'databaseJoinTable' otherlv_43= '=' ( (lv_databaseJoinTable_44_0= RULE_STRING ) ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:14084:4: ({...}? => ( ({...}? => (otherlv_42= 'databaseJoinTable' otherlv_43= '=' ( (lv_databaseJoinTable_44_0= RULE_STRING ) ) ) ) ) )
            	    // InternalContextMappingDSL.g:14085:5: {...}? => ( ({...}? => (otherlv_42= 'databaseJoinTable' otherlv_43= '=' ( (lv_databaseJoinTable_44_0= RULE_STRING ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 10) ) {
            	        throw new FailedPredicateException(input, "ruleReference", "getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 10)");
            	    }
            	    // InternalContextMappingDSL.g:14085:107: ( ({...}? => (otherlv_42= 'databaseJoinTable' otherlv_43= '=' ( (lv_databaseJoinTable_44_0= RULE_STRING ) ) ) ) )
            	    // InternalContextMappingDSL.g:14086:6: ({...}? => (otherlv_42= 'databaseJoinTable' otherlv_43= '=' ( (lv_databaseJoinTable_44_0= RULE_STRING ) ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 10);
            	    					
            	    // InternalContextMappingDSL.g:14089:9: ({...}? => (otherlv_42= 'databaseJoinTable' otherlv_43= '=' ( (lv_databaseJoinTable_44_0= RULE_STRING ) ) ) )
            	    // InternalContextMappingDSL.g:14089:10: {...}? => (otherlv_42= 'databaseJoinTable' otherlv_43= '=' ( (lv_databaseJoinTable_44_0= RULE_STRING ) ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleReference", "true");
            	    }
            	    // InternalContextMappingDSL.g:14089:19: (otherlv_42= 'databaseJoinTable' otherlv_43= '=' ( (lv_databaseJoinTable_44_0= RULE_STRING ) ) )
            	    // InternalContextMappingDSL.g:14089:20: otherlv_42= 'databaseJoinTable' otherlv_43= '=' ( (lv_databaseJoinTable_44_0= RULE_STRING ) )
            	    {
            	    otherlv_42=(Token)match(input,161,FOLLOW_81); 

            	    									newLeafNode(otherlv_42, grammarAccess.getReferenceAccess().getDatabaseJoinTableKeyword_5_10_0());
            	    								
            	    otherlv_43=(Token)match(input,21,FOLLOW_4); 

            	    									newLeafNode(otherlv_43, grammarAccess.getReferenceAccess().getEqualsSignKeyword_5_10_1());
            	    								
            	    // InternalContextMappingDSL.g:14097:9: ( (lv_databaseJoinTable_44_0= RULE_STRING ) )
            	    // InternalContextMappingDSL.g:14098:10: (lv_databaseJoinTable_44_0= RULE_STRING )
            	    {
            	    // InternalContextMappingDSL.g:14098:10: (lv_databaseJoinTable_44_0= RULE_STRING )
            	    // InternalContextMappingDSL.g:14099:11: lv_databaseJoinTable_44_0= RULE_STRING
            	    {
            	    lv_databaseJoinTable_44_0=(Token)match(input,RULE_STRING,FOLLOW_172); 

            	    											newLeafNode(lv_databaseJoinTable_44_0, grammarAccess.getReferenceAccess().getDatabaseJoinTableSTRINGTerminalRuleCall_5_10_2_0());
            	    										

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getReferenceRule());
            	    											}
            	    											setWithLastConsumed(
            	    												current,
            	    												"databaseJoinTable",
            	    												lv_databaseJoinTable_44_0,
            	    												"org.eclipse.xtext.common.Terminals.STRING");
            	    										

            	    }


            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getReferenceAccess().getUnorderedGroup_5());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 12 :
            	    // InternalContextMappingDSL.g:14121:4: ({...}? => ( ({...}? => (otherlv_45= 'databaseJoinColumn' otherlv_46= '=' ( (lv_databaseJoinColumn_47_0= RULE_STRING ) ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:14121:4: ({...}? => ( ({...}? => (otherlv_45= 'databaseJoinColumn' otherlv_46= '=' ( (lv_databaseJoinColumn_47_0= RULE_STRING ) ) ) ) ) )
            	    // InternalContextMappingDSL.g:14122:5: {...}? => ( ({...}? => (otherlv_45= 'databaseJoinColumn' otherlv_46= '=' ( (lv_databaseJoinColumn_47_0= RULE_STRING ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 11) ) {
            	        throw new FailedPredicateException(input, "ruleReference", "getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 11)");
            	    }
            	    // InternalContextMappingDSL.g:14122:107: ( ({...}? => (otherlv_45= 'databaseJoinColumn' otherlv_46= '=' ( (lv_databaseJoinColumn_47_0= RULE_STRING ) ) ) ) )
            	    // InternalContextMappingDSL.g:14123:6: ({...}? => (otherlv_45= 'databaseJoinColumn' otherlv_46= '=' ( (lv_databaseJoinColumn_47_0= RULE_STRING ) ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 11);
            	    					
            	    // InternalContextMappingDSL.g:14126:9: ({...}? => (otherlv_45= 'databaseJoinColumn' otherlv_46= '=' ( (lv_databaseJoinColumn_47_0= RULE_STRING ) ) ) )
            	    // InternalContextMappingDSL.g:14126:10: {...}? => (otherlv_45= 'databaseJoinColumn' otherlv_46= '=' ( (lv_databaseJoinColumn_47_0= RULE_STRING ) ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleReference", "true");
            	    }
            	    // InternalContextMappingDSL.g:14126:19: (otherlv_45= 'databaseJoinColumn' otherlv_46= '=' ( (lv_databaseJoinColumn_47_0= RULE_STRING ) ) )
            	    // InternalContextMappingDSL.g:14126:20: otherlv_45= 'databaseJoinColumn' otherlv_46= '=' ( (lv_databaseJoinColumn_47_0= RULE_STRING ) )
            	    {
            	    otherlv_45=(Token)match(input,162,FOLLOW_81); 

            	    									newLeafNode(otherlv_45, grammarAccess.getReferenceAccess().getDatabaseJoinColumnKeyword_5_11_0());
            	    								
            	    otherlv_46=(Token)match(input,21,FOLLOW_4); 

            	    									newLeafNode(otherlv_46, grammarAccess.getReferenceAccess().getEqualsSignKeyword_5_11_1());
            	    								
            	    // InternalContextMappingDSL.g:14134:9: ( (lv_databaseJoinColumn_47_0= RULE_STRING ) )
            	    // InternalContextMappingDSL.g:14135:10: (lv_databaseJoinColumn_47_0= RULE_STRING )
            	    {
            	    // InternalContextMappingDSL.g:14135:10: (lv_databaseJoinColumn_47_0= RULE_STRING )
            	    // InternalContextMappingDSL.g:14136:11: lv_databaseJoinColumn_47_0= RULE_STRING
            	    {
            	    lv_databaseJoinColumn_47_0=(Token)match(input,RULE_STRING,FOLLOW_172); 

            	    											newLeafNode(lv_databaseJoinColumn_47_0, grammarAccess.getReferenceAccess().getDatabaseJoinColumnSTRINGTerminalRuleCall_5_11_2_0());
            	    										

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getReferenceRule());
            	    											}
            	    											setWithLastConsumed(
            	    												current,
            	    												"databaseJoinColumn",
            	    												lv_databaseJoinColumn_47_0,
            	    												"org.eclipse.xtext.common.Terminals.STRING");
            	    										

            	    }


            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getReferenceAccess().getUnorderedGroup_5());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 13 :
            	    // InternalContextMappingDSL.g:14158:4: ({...}? => ( ({...}? => ( ( (lv_notEmpty_48_0= 'notEmpty' ) ) (otherlv_49= '=' ( (lv_notEmptyMessage_50_0= RULE_STRING ) ) )? ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:14158:4: ({...}? => ( ({...}? => ( ( (lv_notEmpty_48_0= 'notEmpty' ) ) (otherlv_49= '=' ( (lv_notEmptyMessage_50_0= RULE_STRING ) ) )? ) ) ) )
            	    // InternalContextMappingDSL.g:14159:5: {...}? => ( ({...}? => ( ( (lv_notEmpty_48_0= 'notEmpty' ) ) (otherlv_49= '=' ( (lv_notEmptyMessage_50_0= RULE_STRING ) ) )? ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 12) ) {
            	        throw new FailedPredicateException(input, "ruleReference", "getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 12)");
            	    }
            	    // InternalContextMappingDSL.g:14159:107: ( ({...}? => ( ( (lv_notEmpty_48_0= 'notEmpty' ) ) (otherlv_49= '=' ( (lv_notEmptyMessage_50_0= RULE_STRING ) ) )? ) ) )
            	    // InternalContextMappingDSL.g:14160:6: ({...}? => ( ( (lv_notEmpty_48_0= 'notEmpty' ) ) (otherlv_49= '=' ( (lv_notEmptyMessage_50_0= RULE_STRING ) ) )? ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 12);
            	    					
            	    // InternalContextMappingDSL.g:14163:9: ({...}? => ( ( (lv_notEmpty_48_0= 'notEmpty' ) ) (otherlv_49= '=' ( (lv_notEmptyMessage_50_0= RULE_STRING ) ) )? ) )
            	    // InternalContextMappingDSL.g:14163:10: {...}? => ( ( (lv_notEmpty_48_0= 'notEmpty' ) ) (otherlv_49= '=' ( (lv_notEmptyMessage_50_0= RULE_STRING ) ) )? )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleReference", "true");
            	    }
            	    // InternalContextMappingDSL.g:14163:19: ( ( (lv_notEmpty_48_0= 'notEmpty' ) ) (otherlv_49= '=' ( (lv_notEmptyMessage_50_0= RULE_STRING ) ) )? )
            	    // InternalContextMappingDSL.g:14163:20: ( (lv_notEmpty_48_0= 'notEmpty' ) ) (otherlv_49= '=' ( (lv_notEmptyMessage_50_0= RULE_STRING ) ) )?
            	    {
            	    // InternalContextMappingDSL.g:14163:20: ( (lv_notEmpty_48_0= 'notEmpty' ) )
            	    // InternalContextMappingDSL.g:14164:10: (lv_notEmpty_48_0= 'notEmpty' )
            	    {
            	    // InternalContextMappingDSL.g:14164:10: (lv_notEmpty_48_0= 'notEmpty' )
            	    // InternalContextMappingDSL.g:14165:11: lv_notEmpty_48_0= 'notEmpty'
            	    {
            	    lv_notEmpty_48_0=(Token)match(input,147,FOLLOW_173); 

            	    											newLeafNode(lv_notEmpty_48_0, grammarAccess.getReferenceAccess().getNotEmptyNotEmptyKeyword_5_12_0_0());
            	    										

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getReferenceRule());
            	    											}
            	    											setWithLastConsumed(current, "notEmpty", true, "notEmpty");
            	    										

            	    }


            	    }

            	    // InternalContextMappingDSL.g:14177:9: (otherlv_49= '=' ( (lv_notEmptyMessage_50_0= RULE_STRING ) ) )?
            	    int alt328=2;
            	    int LA328_0 = input.LA(1);

            	    if ( (LA328_0==21) ) {
            	        alt328=1;
            	    }
            	    switch (alt328) {
            	        case 1 :
            	            // InternalContextMappingDSL.g:14178:10: otherlv_49= '=' ( (lv_notEmptyMessage_50_0= RULE_STRING ) )
            	            {
            	            otherlv_49=(Token)match(input,21,FOLLOW_4); 

            	            										newLeafNode(otherlv_49, grammarAccess.getReferenceAccess().getEqualsSignKeyword_5_12_1_0());
            	            									
            	            // InternalContextMappingDSL.g:14182:10: ( (lv_notEmptyMessage_50_0= RULE_STRING ) )
            	            // InternalContextMappingDSL.g:14183:11: (lv_notEmptyMessage_50_0= RULE_STRING )
            	            {
            	            // InternalContextMappingDSL.g:14183:11: (lv_notEmptyMessage_50_0= RULE_STRING )
            	            // InternalContextMappingDSL.g:14184:12: lv_notEmptyMessage_50_0= RULE_STRING
            	            {
            	            lv_notEmptyMessage_50_0=(Token)match(input,RULE_STRING,FOLLOW_172); 

            	            												newLeafNode(lv_notEmptyMessage_50_0, grammarAccess.getReferenceAccess().getNotEmptyMessageSTRINGTerminalRuleCall_5_12_1_1_0());
            	            											

            	            												if (current==null) {
            	            													current = createModelElement(grammarAccess.getReferenceRule());
            	            												}
            	            												setWithLastConsumed(
            	            													current,
            	            													"notEmptyMessage",
            	            													lv_notEmptyMessage_50_0,
            	            													"org.eclipse.xtext.common.Terminals.STRING");
            	            											

            	            }


            	            }


            	            }
            	            break;

            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getReferenceAccess().getUnorderedGroup_5());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 14 :
            	    // InternalContextMappingDSL.g:14207:4: ({...}? => ( ({...}? => (otherlv_51= 'size' otherlv_52= '=' ( (lv_size_53_0= RULE_STRING ) ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:14207:4: ({...}? => ( ({...}? => (otherlv_51= 'size' otherlv_52= '=' ( (lv_size_53_0= RULE_STRING ) ) ) ) ) )
            	    // InternalContextMappingDSL.g:14208:5: {...}? => ( ({...}? => (otherlv_51= 'size' otherlv_52= '=' ( (lv_size_53_0= RULE_STRING ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 13) ) {
            	        throw new FailedPredicateException(input, "ruleReference", "getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 13)");
            	    }
            	    // InternalContextMappingDSL.g:14208:107: ( ({...}? => (otherlv_51= 'size' otherlv_52= '=' ( (lv_size_53_0= RULE_STRING ) ) ) ) )
            	    // InternalContextMappingDSL.g:14209:6: ({...}? => (otherlv_51= 'size' otherlv_52= '=' ( (lv_size_53_0= RULE_STRING ) ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 13);
            	    					
            	    // InternalContextMappingDSL.g:14212:9: ({...}? => (otherlv_51= 'size' otherlv_52= '=' ( (lv_size_53_0= RULE_STRING ) ) ) )
            	    // InternalContextMappingDSL.g:14212:10: {...}? => (otherlv_51= 'size' otherlv_52= '=' ( (lv_size_53_0= RULE_STRING ) ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleReference", "true");
            	    }
            	    // InternalContextMappingDSL.g:14212:19: (otherlv_51= 'size' otherlv_52= '=' ( (lv_size_53_0= RULE_STRING ) ) )
            	    // InternalContextMappingDSL.g:14212:20: otherlv_51= 'size' otherlv_52= '=' ( (lv_size_53_0= RULE_STRING ) )
            	    {
            	    otherlv_51=(Token)match(input,151,FOLLOW_81); 

            	    									newLeafNode(otherlv_51, grammarAccess.getReferenceAccess().getSizeKeyword_5_13_0());
            	    								
            	    otherlv_52=(Token)match(input,21,FOLLOW_4); 

            	    									newLeafNode(otherlv_52, grammarAccess.getReferenceAccess().getEqualsSignKeyword_5_13_1());
            	    								
            	    // InternalContextMappingDSL.g:14220:9: ( (lv_size_53_0= RULE_STRING ) )
            	    // InternalContextMappingDSL.g:14221:10: (lv_size_53_0= RULE_STRING )
            	    {
            	    // InternalContextMappingDSL.g:14221:10: (lv_size_53_0= RULE_STRING )
            	    // InternalContextMappingDSL.g:14222:11: lv_size_53_0= RULE_STRING
            	    {
            	    lv_size_53_0=(Token)match(input,RULE_STRING,FOLLOW_172); 

            	    											newLeafNode(lv_size_53_0, grammarAccess.getReferenceAccess().getSizeSTRINGTerminalRuleCall_5_13_2_0());
            	    										

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getReferenceRule());
            	    											}
            	    											setWithLastConsumed(
            	    												current,
            	    												"size",
            	    												lv_size_53_0,
            	    												"org.eclipse.xtext.common.Terminals.STRING");
            	    										

            	    }


            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getReferenceAccess().getUnorderedGroup_5());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 15 :
            	    // InternalContextMappingDSL.g:14244:4: ({...}? => ( ({...}? => ( ( (lv_valid_54_0= 'valid' ) ) (otherlv_55= '=' ( (lv_validMessage_56_0= RULE_STRING ) ) )? ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:14244:4: ({...}? => ( ({...}? => ( ( (lv_valid_54_0= 'valid' ) ) (otherlv_55= '=' ( (lv_validMessage_56_0= RULE_STRING ) ) )? ) ) ) )
            	    // InternalContextMappingDSL.g:14245:5: {...}? => ( ({...}? => ( ( (lv_valid_54_0= 'valid' ) ) (otherlv_55= '=' ( (lv_validMessage_56_0= RULE_STRING ) ) )? ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 14) ) {
            	        throw new FailedPredicateException(input, "ruleReference", "getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 14)");
            	    }
            	    // InternalContextMappingDSL.g:14245:107: ( ({...}? => ( ( (lv_valid_54_0= 'valid' ) ) (otherlv_55= '=' ( (lv_validMessage_56_0= RULE_STRING ) ) )? ) ) )
            	    // InternalContextMappingDSL.g:14246:6: ({...}? => ( ( (lv_valid_54_0= 'valid' ) ) (otherlv_55= '=' ( (lv_validMessage_56_0= RULE_STRING ) ) )? ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 14);
            	    					
            	    // InternalContextMappingDSL.g:14249:9: ({...}? => ( ( (lv_valid_54_0= 'valid' ) ) (otherlv_55= '=' ( (lv_validMessage_56_0= RULE_STRING ) ) )? ) )
            	    // InternalContextMappingDSL.g:14249:10: {...}? => ( ( (lv_valid_54_0= 'valid' ) ) (otherlv_55= '=' ( (lv_validMessage_56_0= RULE_STRING ) ) )? )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleReference", "true");
            	    }
            	    // InternalContextMappingDSL.g:14249:19: ( ( (lv_valid_54_0= 'valid' ) ) (otherlv_55= '=' ( (lv_validMessage_56_0= RULE_STRING ) ) )? )
            	    // InternalContextMappingDSL.g:14249:20: ( (lv_valid_54_0= 'valid' ) ) (otherlv_55= '=' ( (lv_validMessage_56_0= RULE_STRING ) ) )?
            	    {
            	    // InternalContextMappingDSL.g:14249:20: ( (lv_valid_54_0= 'valid' ) )
            	    // InternalContextMappingDSL.g:14250:10: (lv_valid_54_0= 'valid' )
            	    {
            	    // InternalContextMappingDSL.g:14250:10: (lv_valid_54_0= 'valid' )
            	    // InternalContextMappingDSL.g:14251:11: lv_valid_54_0= 'valid'
            	    {
            	    lv_valid_54_0=(Token)match(input,163,FOLLOW_173); 

            	    											newLeafNode(lv_valid_54_0, grammarAccess.getReferenceAccess().getValidValidKeyword_5_14_0_0());
            	    										

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getReferenceRule());
            	    											}
            	    											setWithLastConsumed(current, "valid", true, "valid");
            	    										

            	    }


            	    }

            	    // InternalContextMappingDSL.g:14263:9: (otherlv_55= '=' ( (lv_validMessage_56_0= RULE_STRING ) ) )?
            	    int alt329=2;
            	    int LA329_0 = input.LA(1);

            	    if ( (LA329_0==21) ) {
            	        alt329=1;
            	    }
            	    switch (alt329) {
            	        case 1 :
            	            // InternalContextMappingDSL.g:14264:10: otherlv_55= '=' ( (lv_validMessage_56_0= RULE_STRING ) )
            	            {
            	            otherlv_55=(Token)match(input,21,FOLLOW_4); 

            	            										newLeafNode(otherlv_55, grammarAccess.getReferenceAccess().getEqualsSignKeyword_5_14_1_0());
            	            									
            	            // InternalContextMappingDSL.g:14268:10: ( (lv_validMessage_56_0= RULE_STRING ) )
            	            // InternalContextMappingDSL.g:14269:11: (lv_validMessage_56_0= RULE_STRING )
            	            {
            	            // InternalContextMappingDSL.g:14269:11: (lv_validMessage_56_0= RULE_STRING )
            	            // InternalContextMappingDSL.g:14270:12: lv_validMessage_56_0= RULE_STRING
            	            {
            	            lv_validMessage_56_0=(Token)match(input,RULE_STRING,FOLLOW_172); 

            	            												newLeafNode(lv_validMessage_56_0, grammarAccess.getReferenceAccess().getValidMessageSTRINGTerminalRuleCall_5_14_1_1_0());
            	            											

            	            												if (current==null) {
            	            													current = createModelElement(grammarAccess.getReferenceRule());
            	            												}
            	            												setWithLastConsumed(
            	            													current,
            	            													"validMessage",
            	            													lv_validMessage_56_0,
            	            													"org.eclipse.xtext.common.Terminals.STRING");
            	            											

            	            }


            	            }


            	            }
            	            break;

            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getReferenceAccess().getUnorderedGroup_5());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 16 :
            	    // InternalContextMappingDSL.g:14293:4: ({...}? => ( ({...}? => (otherlv_57= 'validate' otherlv_58= '=' ( (lv_validate_59_0= RULE_STRING ) ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:14293:4: ({...}? => ( ({...}? => (otherlv_57= 'validate' otherlv_58= '=' ( (lv_validate_59_0= RULE_STRING ) ) ) ) ) )
            	    // InternalContextMappingDSL.g:14294:5: {...}? => ( ({...}? => (otherlv_57= 'validate' otherlv_58= '=' ( (lv_validate_59_0= RULE_STRING ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 15) ) {
            	        throw new FailedPredicateException(input, "ruleReference", "getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 15)");
            	    }
            	    // InternalContextMappingDSL.g:14294:107: ( ({...}? => (otherlv_57= 'validate' otherlv_58= '=' ( (lv_validate_59_0= RULE_STRING ) ) ) ) )
            	    // InternalContextMappingDSL.g:14295:6: ({...}? => (otherlv_57= 'validate' otherlv_58= '=' ( (lv_validate_59_0= RULE_STRING ) ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 15);
            	    					
            	    // InternalContextMappingDSL.g:14298:9: ({...}? => (otherlv_57= 'validate' otherlv_58= '=' ( (lv_validate_59_0= RULE_STRING ) ) ) )
            	    // InternalContextMappingDSL.g:14298:10: {...}? => (otherlv_57= 'validate' otherlv_58= '=' ( (lv_validate_59_0= RULE_STRING ) ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleReference", "true");
            	    }
            	    // InternalContextMappingDSL.g:14298:19: (otherlv_57= 'validate' otherlv_58= '=' ( (lv_validate_59_0= RULE_STRING ) ) )
            	    // InternalContextMappingDSL.g:14298:20: otherlv_57= 'validate' otherlv_58= '=' ( (lv_validate_59_0= RULE_STRING ) )
            	    {
            	    otherlv_57=(Token)match(input,118,FOLLOW_81); 

            	    									newLeafNode(otherlv_57, grammarAccess.getReferenceAccess().getValidateKeyword_5_15_0());
            	    								
            	    otherlv_58=(Token)match(input,21,FOLLOW_4); 

            	    									newLeafNode(otherlv_58, grammarAccess.getReferenceAccess().getEqualsSignKeyword_5_15_1());
            	    								
            	    // InternalContextMappingDSL.g:14306:9: ( (lv_validate_59_0= RULE_STRING ) )
            	    // InternalContextMappingDSL.g:14307:10: (lv_validate_59_0= RULE_STRING )
            	    {
            	    // InternalContextMappingDSL.g:14307:10: (lv_validate_59_0= RULE_STRING )
            	    // InternalContextMappingDSL.g:14308:11: lv_validate_59_0= RULE_STRING
            	    {
            	    lv_validate_59_0=(Token)match(input,RULE_STRING,FOLLOW_172); 

            	    											newLeafNode(lv_validate_59_0, grammarAccess.getReferenceAccess().getValidateSTRINGTerminalRuleCall_5_15_2_0());
            	    										

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getReferenceRule());
            	    											}
            	    											setWithLastConsumed(
            	    												current,
            	    												"validate",
            	    												lv_validate_59_0,
            	    												"org.eclipse.xtext.common.Terminals.STRING");
            	    										

            	    }


            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getReferenceAccess().getUnorderedGroup_5());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 17 :
            	    // InternalContextMappingDSL.g:14330:4: ({...}? => ( ({...}? => ( (lv_transient_60_0= 'transient' ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:14330:4: ({...}? => ( ({...}? => ( (lv_transient_60_0= 'transient' ) ) ) ) )
            	    // InternalContextMappingDSL.g:14331:5: {...}? => ( ({...}? => ( (lv_transient_60_0= 'transient' ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 16) ) {
            	        throw new FailedPredicateException(input, "ruleReference", "getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 16)");
            	    }
            	    // InternalContextMappingDSL.g:14331:107: ( ({...}? => ( (lv_transient_60_0= 'transient' ) ) ) )
            	    // InternalContextMappingDSL.g:14332:6: ({...}? => ( (lv_transient_60_0= 'transient' ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 16);
            	    					
            	    // InternalContextMappingDSL.g:14335:9: ({...}? => ( (lv_transient_60_0= 'transient' ) ) )
            	    // InternalContextMappingDSL.g:14335:10: {...}? => ( (lv_transient_60_0= 'transient' ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleReference", "true");
            	    }
            	    // InternalContextMappingDSL.g:14335:19: ( (lv_transient_60_0= 'transient' ) )
            	    // InternalContextMappingDSL.g:14335:20: (lv_transient_60_0= 'transient' )
            	    {
            	    // InternalContextMappingDSL.g:14335:20: (lv_transient_60_0= 'transient' )
            	    // InternalContextMappingDSL.g:14336:10: lv_transient_60_0= 'transient'
            	    {
            	    lv_transient_60_0=(Token)match(input,155,FOLLOW_172); 

            	    										newLeafNode(lv_transient_60_0, grammarAccess.getReferenceAccess().getTransientTransientKeyword_5_16_0());
            	    									

            	    										if (current==null) {
            	    											current = createModelElement(grammarAccess.getReferenceRule());
            	    										}
            	    										setWithLastConsumed(current, "transient", true, "transient");
            	    									

            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getReferenceAccess().getUnorderedGroup_5());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 18 :
            	    // InternalContextMappingDSL.g:14353:4: ({...}? => ( ({...}? => (otherlv_61= 'orderby' otherlv_62= '=' ( (lv_orderBy_63_0= RULE_STRING ) ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:14353:4: ({...}? => ( ({...}? => (otherlv_61= 'orderby' otherlv_62= '=' ( (lv_orderBy_63_0= RULE_STRING ) ) ) ) ) )
            	    // InternalContextMappingDSL.g:14354:5: {...}? => ( ({...}? => (otherlv_61= 'orderby' otherlv_62= '=' ( (lv_orderBy_63_0= RULE_STRING ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 17) ) {
            	        throw new FailedPredicateException(input, "ruleReference", "getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 17)");
            	    }
            	    // InternalContextMappingDSL.g:14354:107: ( ({...}? => (otherlv_61= 'orderby' otherlv_62= '=' ( (lv_orderBy_63_0= RULE_STRING ) ) ) ) )
            	    // InternalContextMappingDSL.g:14355:6: ({...}? => (otherlv_61= 'orderby' otherlv_62= '=' ( (lv_orderBy_63_0= RULE_STRING ) ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 17);
            	    					
            	    // InternalContextMappingDSL.g:14358:9: ({...}? => (otherlv_61= 'orderby' otherlv_62= '=' ( (lv_orderBy_63_0= RULE_STRING ) ) ) )
            	    // InternalContextMappingDSL.g:14358:10: {...}? => (otherlv_61= 'orderby' otherlv_62= '=' ( (lv_orderBy_63_0= RULE_STRING ) ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleReference", "true");
            	    }
            	    // InternalContextMappingDSL.g:14358:19: (otherlv_61= 'orderby' otherlv_62= '=' ( (lv_orderBy_63_0= RULE_STRING ) ) )
            	    // InternalContextMappingDSL.g:14358:20: otherlv_61= 'orderby' otherlv_62= '=' ( (lv_orderBy_63_0= RULE_STRING ) )
            	    {
            	    otherlv_61=(Token)match(input,164,FOLLOW_81); 

            	    									newLeafNode(otherlv_61, grammarAccess.getReferenceAccess().getOrderbyKeyword_5_17_0());
            	    								
            	    otherlv_62=(Token)match(input,21,FOLLOW_4); 

            	    									newLeafNode(otherlv_62, grammarAccess.getReferenceAccess().getEqualsSignKeyword_5_17_1());
            	    								
            	    // InternalContextMappingDSL.g:14366:9: ( (lv_orderBy_63_0= RULE_STRING ) )
            	    // InternalContextMappingDSL.g:14367:10: (lv_orderBy_63_0= RULE_STRING )
            	    {
            	    // InternalContextMappingDSL.g:14367:10: (lv_orderBy_63_0= RULE_STRING )
            	    // InternalContextMappingDSL.g:14368:11: lv_orderBy_63_0= RULE_STRING
            	    {
            	    lv_orderBy_63_0=(Token)match(input,RULE_STRING,FOLLOW_172); 

            	    											newLeafNode(lv_orderBy_63_0, grammarAccess.getReferenceAccess().getOrderBySTRINGTerminalRuleCall_5_17_2_0());
            	    										

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getReferenceRule());
            	    											}
            	    											setWithLastConsumed(
            	    												current,
            	    												"orderBy",
            	    												lv_orderBy_63_0,
            	    												"org.eclipse.xtext.common.Terminals.STRING");
            	    										

            	    }


            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getReferenceAccess().getUnorderedGroup_5());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 19 :
            	    // InternalContextMappingDSL.g:14390:4: ({...}? => ( ({...}? => ( ( (lv_orderColumn_64_0= 'orderColumn' ) ) (otherlv_65= '=' ( (lv_orderColumnName_66_0= RULE_STRING ) ) )? ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:14390:4: ({...}? => ( ({...}? => ( ( (lv_orderColumn_64_0= 'orderColumn' ) ) (otherlv_65= '=' ( (lv_orderColumnName_66_0= RULE_STRING ) ) )? ) ) ) )
            	    // InternalContextMappingDSL.g:14391:5: {...}? => ( ({...}? => ( ( (lv_orderColumn_64_0= 'orderColumn' ) ) (otherlv_65= '=' ( (lv_orderColumnName_66_0= RULE_STRING ) ) )? ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 18) ) {
            	        throw new FailedPredicateException(input, "ruleReference", "getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 18)");
            	    }
            	    // InternalContextMappingDSL.g:14391:107: ( ({...}? => ( ( (lv_orderColumn_64_0= 'orderColumn' ) ) (otherlv_65= '=' ( (lv_orderColumnName_66_0= RULE_STRING ) ) )? ) ) )
            	    // InternalContextMappingDSL.g:14392:6: ({...}? => ( ( (lv_orderColumn_64_0= 'orderColumn' ) ) (otherlv_65= '=' ( (lv_orderColumnName_66_0= RULE_STRING ) ) )? ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 18);
            	    					
            	    // InternalContextMappingDSL.g:14395:9: ({...}? => ( ( (lv_orderColumn_64_0= 'orderColumn' ) ) (otherlv_65= '=' ( (lv_orderColumnName_66_0= RULE_STRING ) ) )? ) )
            	    // InternalContextMappingDSL.g:14395:10: {...}? => ( ( (lv_orderColumn_64_0= 'orderColumn' ) ) (otherlv_65= '=' ( (lv_orderColumnName_66_0= RULE_STRING ) ) )? )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleReference", "true");
            	    }
            	    // InternalContextMappingDSL.g:14395:19: ( ( (lv_orderColumn_64_0= 'orderColumn' ) ) (otherlv_65= '=' ( (lv_orderColumnName_66_0= RULE_STRING ) ) )? )
            	    // InternalContextMappingDSL.g:14395:20: ( (lv_orderColumn_64_0= 'orderColumn' ) ) (otherlv_65= '=' ( (lv_orderColumnName_66_0= RULE_STRING ) ) )?
            	    {
            	    // InternalContextMappingDSL.g:14395:20: ( (lv_orderColumn_64_0= 'orderColumn' ) )
            	    // InternalContextMappingDSL.g:14396:10: (lv_orderColumn_64_0= 'orderColumn' )
            	    {
            	    // InternalContextMappingDSL.g:14396:10: (lv_orderColumn_64_0= 'orderColumn' )
            	    // InternalContextMappingDSL.g:14397:11: lv_orderColumn_64_0= 'orderColumn'
            	    {
            	    lv_orderColumn_64_0=(Token)match(input,165,FOLLOW_173); 

            	    											newLeafNode(lv_orderColumn_64_0, grammarAccess.getReferenceAccess().getOrderColumnOrderColumnKeyword_5_18_0_0());
            	    										

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getReferenceRule());
            	    											}
            	    											setWithLastConsumed(current, "orderColumn", true, "orderColumn");
            	    										

            	    }


            	    }

            	    // InternalContextMappingDSL.g:14409:9: (otherlv_65= '=' ( (lv_orderColumnName_66_0= RULE_STRING ) ) )?
            	    int alt330=2;
            	    int LA330_0 = input.LA(1);

            	    if ( (LA330_0==21) ) {
            	        alt330=1;
            	    }
            	    switch (alt330) {
            	        case 1 :
            	            // InternalContextMappingDSL.g:14410:10: otherlv_65= '=' ( (lv_orderColumnName_66_0= RULE_STRING ) )
            	            {
            	            otherlv_65=(Token)match(input,21,FOLLOW_4); 

            	            										newLeafNode(otherlv_65, grammarAccess.getReferenceAccess().getEqualsSignKeyword_5_18_1_0());
            	            									
            	            // InternalContextMappingDSL.g:14414:10: ( (lv_orderColumnName_66_0= RULE_STRING ) )
            	            // InternalContextMappingDSL.g:14415:11: (lv_orderColumnName_66_0= RULE_STRING )
            	            {
            	            // InternalContextMappingDSL.g:14415:11: (lv_orderColumnName_66_0= RULE_STRING )
            	            // InternalContextMappingDSL.g:14416:12: lv_orderColumnName_66_0= RULE_STRING
            	            {
            	            lv_orderColumnName_66_0=(Token)match(input,RULE_STRING,FOLLOW_172); 

            	            												newLeafNode(lv_orderColumnName_66_0, grammarAccess.getReferenceAccess().getOrderColumnNameSTRINGTerminalRuleCall_5_18_1_1_0());
            	            											

            	            												if (current==null) {
            	            													current = createModelElement(grammarAccess.getReferenceRule());
            	            												}
            	            												setWithLastConsumed(
            	            													current,
            	            													"orderColumnName",
            	            													lv_orderColumnName_66_0,
            	            													"org.eclipse.xtext.common.Terminals.STRING");
            	            											

            	            }


            	            }


            	            }
            	            break;

            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getReferenceAccess().getUnorderedGroup_5());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 20 :
            	    // InternalContextMappingDSL.g:14439:4: ({...}? => ( ({...}? => ( (lv_oppositeHolder_67_0= ruleOppositeHolder ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:14439:4: ({...}? => ( ({...}? => ( (lv_oppositeHolder_67_0= ruleOppositeHolder ) ) ) ) )
            	    // InternalContextMappingDSL.g:14440:5: {...}? => ( ({...}? => ( (lv_oppositeHolder_67_0= ruleOppositeHolder ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 19) ) {
            	        throw new FailedPredicateException(input, "ruleReference", "getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 19)");
            	    }
            	    // InternalContextMappingDSL.g:14440:107: ( ({...}? => ( (lv_oppositeHolder_67_0= ruleOppositeHolder ) ) ) )
            	    // InternalContextMappingDSL.g:14441:6: ({...}? => ( (lv_oppositeHolder_67_0= ruleOppositeHolder ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 19);
            	    					
            	    // InternalContextMappingDSL.g:14444:9: ({...}? => ( (lv_oppositeHolder_67_0= ruleOppositeHolder ) ) )
            	    // InternalContextMappingDSL.g:14444:10: {...}? => ( (lv_oppositeHolder_67_0= ruleOppositeHolder ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleReference", "true");
            	    }
            	    // InternalContextMappingDSL.g:14444:19: ( (lv_oppositeHolder_67_0= ruleOppositeHolder ) )
            	    // InternalContextMappingDSL.g:14444:20: (lv_oppositeHolder_67_0= ruleOppositeHolder )
            	    {
            	    // InternalContextMappingDSL.g:14444:20: (lv_oppositeHolder_67_0= ruleOppositeHolder )
            	    // InternalContextMappingDSL.g:14445:10: lv_oppositeHolder_67_0= ruleOppositeHolder
            	    {

            	    										newCompositeNode(grammarAccess.getReferenceAccess().getOppositeHolderOppositeHolderParserRuleCall_5_19_0());
            	    									
            	    pushFollow(FOLLOW_172);
            	    lv_oppositeHolder_67_0=ruleOppositeHolder();

            	    state._fsp--;


            	    										if (current==null) {
            	    											current = createModelElementForParent(grammarAccess.getReferenceRule());
            	    										}
            	    										set(
            	    											current,
            	    											"oppositeHolder",
            	    											lv_oppositeHolder_67_0,
            	    											"org.contextmapper.tactic.dsl.TacticDDDLanguage.OppositeHolder");
            	    										afterParserOrEnumRuleCall();
            	    									

            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getReferenceAccess().getUnorderedGroup_5());
            	    					

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop331;
                }
            } while (true);


            }


            }

             
            				  getUnorderedGroupHelper().leave(grammarAccess.getReferenceAccess().getUnorderedGroup_5());
            				

            }

            // InternalContextMappingDSL.g:14474:3: (otherlv_68= ';' )?
            int alt332=2;
            int LA332_0 = input.LA(1);

            if ( (LA332_0==90) ) {
                alt332=1;
            }
            switch (alt332) {
                case 1 :
                    // InternalContextMappingDSL.g:14475:4: otherlv_68= ';'
                    {
                    otherlv_68=(Token)match(input,90,FOLLOW_2); 

                    				newLeafNode(otherlv_68, grammarAccess.getReferenceAccess().getSemicolonKeyword_6());
                    			

                    }
                    break;

            }


            }


            }


            	leaveRule();

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleReference"


    // $ANTLR start "entryRuleDtoAttribute"
    // InternalContextMappingDSL.g:14484:1: entryRuleDtoAttribute returns [EObject current=null] : iv_ruleDtoAttribute= ruleDtoAttribute EOF ;
    public final EObject entryRuleDtoAttribute() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleDtoAttribute = null;


        try {
            // InternalContextMappingDSL.g:14484:53: (iv_ruleDtoAttribute= ruleDtoAttribute EOF )
            // InternalContextMappingDSL.g:14485:2: iv_ruleDtoAttribute= ruleDtoAttribute EOF
            {
             newCompositeNode(grammarAccess.getDtoAttributeRule()); 
            pushFollow(FOLLOW_1);
            iv_ruleDtoAttribute=ruleDtoAttribute();

            state._fsp--;

             current =iv_ruleDtoAttribute; 
            match(input,EOF,FOLLOW_2); 

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleDtoAttribute"


    // $ANTLR start "ruleDtoAttribute"
    // InternalContextMappingDSL.g:14491:1: ruleDtoAttribute returns [EObject current=null] : ( ( (lv_doc_0_0= RULE_STRING ) )? ( (lv_visibility_1_0= ruleVisibility ) )? ( ( (lv_collectionType_2_0= ruleCollectionType ) ) otherlv_3= '<' )? ( (lv_type_4_0= ruleType ) ) (otherlv_5= '>' )? ( (lv_name_6_0= RULE_ID ) ) ( ( ( ( ({...}? => ( ({...}? => ( (lv_key_8_0= 'key' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notChangeable_9_0= RULE_NOT ) ) otherlv_10= 'changeable' ) | otherlv_11= 'changeable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_required_12_0= 'required' ) ) | (this_NOT_13= RULE_NOT otherlv_14= 'required' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_nullable_15_0= 'nullable' ) ) | (this_NOT_16= RULE_NOT otherlv_17= 'nullable' ) ) (otherlv_18= '=' ( (lv_nullableMessage_19_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_20_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_assertFalse_21_0= 'assertFalse' ) ) (otherlv_22= '=' ( (lv_assertFalseMessage_23_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_assertTrue_24_0= 'assertTrue' ) ) (otherlv_25= '=' ( (lv_assertTrueMessage_26_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_creditCardNumber_27_0= 'creditCardNumber' ) ) (otherlv_28= '=' ( (lv_creditCardNumberMessage_29_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_30= 'digits' otherlv_31= '=' ( (lv_digits_32_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_email_33_0= 'email' ) ) (otherlv_34= '=' ( (lv_emailMessage_35_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_future_36_0= 'future' ) ) (otherlv_37= '=' ( (lv_futureMessage_38_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_past_39_0= 'past' ) ) (otherlv_40= '=' ( (lv_pastMessage_41_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_42= 'max' otherlv_43= '=' ( (lv_max_44_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_45= 'min' otherlv_46= '=' ( (lv_min_47_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_48= 'decimalMax' otherlv_49= '=' ( (lv_decimalMax_50_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_51= 'decimalMin' otherlv_52= '=' ( (lv_decimalMin_53_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notEmpty_54_0= 'notEmpty' ) ) (otherlv_55= '=' ( (lv_notEmptyMessage_56_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notBlank_57_0= 'notBlank' ) ) (otherlv_58= '=' ( (lv_notBlankMessage_59_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_60= 'pattern' otherlv_61= '=' ( (lv_pattern_62_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_63= 'range' otherlv_64= '=' ( (lv_range_65_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_66= 'size' otherlv_67= '=' ( (lv_size_68_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_69= 'length' otherlv_70= '=' ( (lv_length_71_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_72= 'scriptAssert' otherlv_73= '=' ( (lv_scriptAssert_74_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_75= 'url' otherlv_76= '=' ( (lv_url_77_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_78= 'validate' otherlv_79= '=' ( (lv_validate_80_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_81= 'hint' otherlv_82= '=' ( (lv_hint_83_0= RULE_STRING ) ) ) ) ) ) )* ) ) ) (otherlv_84= ';' )? ) ;
    public final EObject ruleDtoAttribute() throws RecognitionException {
        EObject current = null;

        Token lv_doc_0_0=null;
        Token otherlv_3=null;
        Token otherlv_5=null;
        Token lv_name_6_0=null;
        Token lv_key_8_0=null;
        Token lv_notChangeable_9_0=null;
        Token otherlv_10=null;
        Token otherlv_11=null;
        Token lv_required_12_0=null;
        Token this_NOT_13=null;
        Token otherlv_14=null;
        Token lv_nullable_15_0=null;
        Token this_NOT_16=null;
        Token otherlv_17=null;
        Token otherlv_18=null;
        Token lv_nullableMessage_19_0=null;
        Token lv_transient_20_0=null;
        Token lv_assertFalse_21_0=null;
        Token otherlv_22=null;
        Token lv_assertFalseMessage_23_0=null;
        Token lv_assertTrue_24_0=null;
        Token otherlv_25=null;
        Token lv_assertTrueMessage_26_0=null;
        Token lv_creditCardNumber_27_0=null;
        Token otherlv_28=null;
        Token lv_creditCardNumberMessage_29_0=null;
        Token otherlv_30=null;
        Token otherlv_31=null;
        Token lv_digits_32_0=null;
        Token lv_email_33_0=null;
        Token otherlv_34=null;
        Token lv_emailMessage_35_0=null;
        Token lv_future_36_0=null;
        Token otherlv_37=null;
        Token lv_futureMessage_38_0=null;
        Token lv_past_39_0=null;
        Token otherlv_40=null;
        Token lv_pastMessage_41_0=null;
        Token otherlv_42=null;
        Token otherlv_43=null;
        Token lv_max_44_0=null;
        Token otherlv_45=null;
        Token otherlv_46=null;
        Token lv_min_47_0=null;
        Token otherlv_48=null;
        Token otherlv_49=null;
        Token lv_decimalMax_50_0=null;
        Token otherlv_51=null;
        Token otherlv_52=null;
        Token lv_decimalMin_53_0=null;
        Token lv_notEmpty_54_0=null;
        Token otherlv_55=null;
        Token lv_notEmptyMessage_56_0=null;
        Token lv_notBlank_57_0=null;
        Token otherlv_58=null;
        Token lv_notBlankMessage_59_0=null;
        Token otherlv_60=null;
        Token otherlv_61=null;
        Token lv_pattern_62_0=null;
        Token otherlv_63=null;
        Token otherlv_64=null;
        Token lv_range_65_0=null;
        Token otherlv_66=null;
        Token otherlv_67=null;
        Token lv_size_68_0=null;
        Token otherlv_69=null;
        Token otherlv_70=null;
        Token lv_length_71_0=null;
        Token otherlv_72=null;
        Token otherlv_73=null;
        Token lv_scriptAssert_74_0=null;
        Token otherlv_75=null;
        Token otherlv_76=null;
        Token lv_url_77_0=null;
        Token otherlv_78=null;
        Token otherlv_79=null;
        Token lv_validate_80_0=null;
        Token otherlv_81=null;
        Token otherlv_82=null;
        Token lv_hint_83_0=null;
        Token otherlv_84=null;
        Enumerator lv_visibility_1_0 = null;

        Enumerator lv_collectionType_2_0 = null;

        AntlrDatatypeRuleToken lv_type_4_0 = null;



        	enterRule();

        try {
            // InternalContextMappingDSL.g:14497:2: ( ( ( (lv_doc_0_0= RULE_STRING ) )? ( (lv_visibility_1_0= ruleVisibility ) )? ( ( (lv_collectionType_2_0= ruleCollectionType ) ) otherlv_3= '<' )? ( (lv_type_4_0= ruleType ) ) (otherlv_5= '>' )? ( (lv_name_6_0= RULE_ID ) ) ( ( ( ( ({...}? => ( ({...}? => ( (lv_key_8_0= 'key' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notChangeable_9_0= RULE_NOT ) ) otherlv_10= 'changeable' ) | otherlv_11= 'changeable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_required_12_0= 'required' ) ) | (this_NOT_13= RULE_NOT otherlv_14= 'required' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_nullable_15_0= 'nullable' ) ) | (this_NOT_16= RULE_NOT otherlv_17= 'nullable' ) ) (otherlv_18= '=' ( (lv_nullableMessage_19_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_20_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_assertFalse_21_0= 'assertFalse' ) ) (otherlv_22= '=' ( (lv_assertFalseMessage_23_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_assertTrue_24_0= 'assertTrue' ) ) (otherlv_25= '=' ( (lv_assertTrueMessage_26_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_creditCardNumber_27_0= 'creditCardNumber' ) ) (otherlv_28= '=' ( (lv_creditCardNumberMessage_29_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_30= 'digits' otherlv_31= '=' ( (lv_digits_32_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_email_33_0= 'email' ) ) (otherlv_34= '=' ( (lv_emailMessage_35_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_future_36_0= 'future' ) ) (otherlv_37= '=' ( (lv_futureMessage_38_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_past_39_0= 'past' ) ) (otherlv_40= '=' ( (lv_pastMessage_41_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_42= 'max' otherlv_43= '=' ( (lv_max_44_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_45= 'min' otherlv_46= '=' ( (lv_min_47_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_48= 'decimalMax' otherlv_49= '=' ( (lv_decimalMax_50_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_51= 'decimalMin' otherlv_52= '=' ( (lv_decimalMin_53_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notEmpty_54_0= 'notEmpty' ) ) (otherlv_55= '=' ( (lv_notEmptyMessage_56_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notBlank_57_0= 'notBlank' ) ) (otherlv_58= '=' ( (lv_notBlankMessage_59_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_60= 'pattern' otherlv_61= '=' ( (lv_pattern_62_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_63= 'range' otherlv_64= '=' ( (lv_range_65_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_66= 'size' otherlv_67= '=' ( (lv_size_68_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_69= 'length' otherlv_70= '=' ( (lv_length_71_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_72= 'scriptAssert' otherlv_73= '=' ( (lv_scriptAssert_74_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_75= 'url' otherlv_76= '=' ( (lv_url_77_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_78= 'validate' otherlv_79= '=' ( (lv_validate_80_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_81= 'hint' otherlv_82= '=' ( (lv_hint_83_0= RULE_STRING ) ) ) ) ) ) )* ) ) ) (otherlv_84= ';' )? ) )
            // InternalContextMappingDSL.g:14498:2: ( ( (lv_doc_0_0= RULE_STRING ) )? ( (lv_visibility_1_0= ruleVisibility ) )? ( ( (lv_collectionType_2_0= ruleCollectionType ) ) otherlv_3= '<' )? ( (lv_type_4_0= ruleType ) ) (otherlv_5= '>' )? ( (lv_name_6_0= RULE_ID ) ) ( ( ( ( ({...}? => ( ({...}? => ( (lv_key_8_0= 'key' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notChangeable_9_0= RULE_NOT ) ) otherlv_10= 'changeable' ) | otherlv_11= 'changeable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_required_12_0= 'required' ) ) | (this_NOT_13= RULE_NOT otherlv_14= 'required' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_nullable_15_0= 'nullable' ) ) | (this_NOT_16= RULE_NOT otherlv_17= 'nullable' ) ) (otherlv_18= '=' ( (lv_nullableMessage_19_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_20_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_assertFalse_21_0= 'assertFalse' ) ) (otherlv_22= '=' ( (lv_assertFalseMessage_23_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_assertTrue_24_0= 'assertTrue' ) ) (otherlv_25= '=' ( (lv_assertTrueMessage_26_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_creditCardNumber_27_0= 'creditCardNumber' ) ) (otherlv_28= '=' ( (lv_creditCardNumberMessage_29_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_30= 'digits' otherlv_31= '=' ( (lv_digits_32_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_email_33_0= 'email' ) ) (otherlv_34= '=' ( (lv_emailMessage_35_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_future_36_0= 'future' ) ) (otherlv_37= '=' ( (lv_futureMessage_38_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_past_39_0= 'past' ) ) (otherlv_40= '=' ( (lv_pastMessage_41_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_42= 'max' otherlv_43= '=' ( (lv_max_44_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_45= 'min' otherlv_46= '=' ( (lv_min_47_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_48= 'decimalMax' otherlv_49= '=' ( (lv_decimalMax_50_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_51= 'decimalMin' otherlv_52= '=' ( (lv_decimalMin_53_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notEmpty_54_0= 'notEmpty' ) ) (otherlv_55= '=' ( (lv_notEmptyMessage_56_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notBlank_57_0= 'notBlank' ) ) (otherlv_58= '=' ( (lv_notBlankMessage_59_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_60= 'pattern' otherlv_61= '=' ( (lv_pattern_62_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_63= 'range' otherlv_64= '=' ( (lv_range_65_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_66= 'size' otherlv_67= '=' ( (lv_size_68_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_69= 'length' otherlv_70= '=' ( (lv_length_71_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_72= 'scriptAssert' otherlv_73= '=' ( (lv_scriptAssert_74_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_75= 'url' otherlv_76= '=' ( (lv_url_77_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_78= 'validate' otherlv_79= '=' ( (lv_validate_80_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_81= 'hint' otherlv_82= '=' ( (lv_hint_83_0= RULE_STRING ) ) ) ) ) ) )* ) ) ) (otherlv_84= ';' )? )
            {
            // InternalContextMappingDSL.g:14498:2: ( ( (lv_doc_0_0= RULE_STRING ) )? ( (lv_visibility_1_0= ruleVisibility ) )? ( ( (lv_collectionType_2_0= ruleCollectionType ) ) otherlv_3= '<' )? ( (lv_type_4_0= ruleType ) ) (otherlv_5= '>' )? ( (lv_name_6_0= RULE_ID ) ) ( ( ( ( ({...}? => ( ({...}? => ( (lv_key_8_0= 'key' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notChangeable_9_0= RULE_NOT ) ) otherlv_10= 'changeable' ) | otherlv_11= 'changeable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_required_12_0= 'required' ) ) | (this_NOT_13= RULE_NOT otherlv_14= 'required' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_nullable_15_0= 'nullable' ) ) | (this_NOT_16= RULE_NOT otherlv_17= 'nullable' ) ) (otherlv_18= '=' ( (lv_nullableMessage_19_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_20_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_assertFalse_21_0= 'assertFalse' ) ) (otherlv_22= '=' ( (lv_assertFalseMessage_23_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_assertTrue_24_0= 'assertTrue' ) ) (otherlv_25= '=' ( (lv_assertTrueMessage_26_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_creditCardNumber_27_0= 'creditCardNumber' ) ) (otherlv_28= '=' ( (lv_creditCardNumberMessage_29_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_30= 'digits' otherlv_31= '=' ( (lv_digits_32_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_email_33_0= 'email' ) ) (otherlv_34= '=' ( (lv_emailMessage_35_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_future_36_0= 'future' ) ) (otherlv_37= '=' ( (lv_futureMessage_38_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_past_39_0= 'past' ) ) (otherlv_40= '=' ( (lv_pastMessage_41_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_42= 'max' otherlv_43= '=' ( (lv_max_44_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_45= 'min' otherlv_46= '=' ( (lv_min_47_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_48= 'decimalMax' otherlv_49= '=' ( (lv_decimalMax_50_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_51= 'decimalMin' otherlv_52= '=' ( (lv_decimalMin_53_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notEmpty_54_0= 'notEmpty' ) ) (otherlv_55= '=' ( (lv_notEmptyMessage_56_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notBlank_57_0= 'notBlank' ) ) (otherlv_58= '=' ( (lv_notBlankMessage_59_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_60= 'pattern' otherlv_61= '=' ( (lv_pattern_62_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_63= 'range' otherlv_64= '=' ( (lv_range_65_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_66= 'size' otherlv_67= '=' ( (lv_size_68_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_69= 'length' otherlv_70= '=' ( (lv_length_71_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_72= 'scriptAssert' otherlv_73= '=' ( (lv_scriptAssert_74_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_75= 'url' otherlv_76= '=' ( (lv_url_77_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_78= 'validate' otherlv_79= '=' ( (lv_validate_80_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_81= 'hint' otherlv_82= '=' ( (lv_hint_83_0= RULE_STRING ) ) ) ) ) ) )* ) ) ) (otherlv_84= ';' )? )
            // InternalContextMappingDSL.g:14499:3: ( (lv_doc_0_0= RULE_STRING ) )? ( (lv_visibility_1_0= ruleVisibility ) )? ( ( (lv_collectionType_2_0= ruleCollectionType ) ) otherlv_3= '<' )? ( (lv_type_4_0= ruleType ) ) (otherlv_5= '>' )? ( (lv_name_6_0= RULE_ID ) ) ( ( ( ( ({...}? => ( ({...}? => ( (lv_key_8_0= 'key' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notChangeable_9_0= RULE_NOT ) ) otherlv_10= 'changeable' ) | otherlv_11= 'changeable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_required_12_0= 'required' ) ) | (this_NOT_13= RULE_NOT otherlv_14= 'required' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_nullable_15_0= 'nullable' ) ) | (this_NOT_16= RULE_NOT otherlv_17= 'nullable' ) ) (otherlv_18= '=' ( (lv_nullableMessage_19_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_20_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_assertFalse_21_0= 'assertFalse' ) ) (otherlv_22= '=' ( (lv_assertFalseMessage_23_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_assertTrue_24_0= 'assertTrue' ) ) (otherlv_25= '=' ( (lv_assertTrueMessage_26_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_creditCardNumber_27_0= 'creditCardNumber' ) ) (otherlv_28= '=' ( (lv_creditCardNumberMessage_29_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_30= 'digits' otherlv_31= '=' ( (lv_digits_32_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_email_33_0= 'email' ) ) (otherlv_34= '=' ( (lv_emailMessage_35_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_future_36_0= 'future' ) ) (otherlv_37= '=' ( (lv_futureMessage_38_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_past_39_0= 'past' ) ) (otherlv_40= '=' ( (lv_pastMessage_41_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_42= 'max' otherlv_43= '=' ( (lv_max_44_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_45= 'min' otherlv_46= '=' ( (lv_min_47_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_48= 'decimalMax' otherlv_49= '=' ( (lv_decimalMax_50_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_51= 'decimalMin' otherlv_52= '=' ( (lv_decimalMin_53_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notEmpty_54_0= 'notEmpty' ) ) (otherlv_55= '=' ( (lv_notEmptyMessage_56_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notBlank_57_0= 'notBlank' ) ) (otherlv_58= '=' ( (lv_notBlankMessage_59_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_60= 'pattern' otherlv_61= '=' ( (lv_pattern_62_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_63= 'range' otherlv_64= '=' ( (lv_range_65_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_66= 'size' otherlv_67= '=' ( (lv_size_68_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_69= 'length' otherlv_70= '=' ( (lv_length_71_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_72= 'scriptAssert' otherlv_73= '=' ( (lv_scriptAssert_74_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_75= 'url' otherlv_76= '=' ( (lv_url_77_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_78= 'validate' otherlv_79= '=' ( (lv_validate_80_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_81= 'hint' otherlv_82= '=' ( (lv_hint_83_0= RULE_STRING ) ) ) ) ) ) )* ) ) ) (otherlv_84= ';' )?
            {
            // InternalContextMappingDSL.g:14499:3: ( (lv_doc_0_0= RULE_STRING ) )?
            int alt333=2;
            int LA333_0 = input.LA(1);

            if ( (LA333_0==RULE_STRING) ) {
                alt333=1;
            }
            switch (alt333) {
                case 1 :
                    // InternalContextMappingDSL.g:14500:4: (lv_doc_0_0= RULE_STRING )
                    {
                    // InternalContextMappingDSL.g:14500:4: (lv_doc_0_0= RULE_STRING )
                    // InternalContextMappingDSL.g:14501:5: lv_doc_0_0= RULE_STRING
                    {
                    lv_doc_0_0=(Token)match(input,RULE_STRING,FOLLOW_161); 

                    					newLeafNode(lv_doc_0_0, grammarAccess.getDtoAttributeAccess().getDocSTRINGTerminalRuleCall_0_0());
                    				

                    					if (current==null) {
                    						current = createModelElement(grammarAccess.getDtoAttributeRule());
                    					}
                    					setWithLastConsumed(
                    						current,
                    						"doc",
                    						lv_doc_0_0,
                    						"org.eclipse.xtext.common.Terminals.STRING");
                    				

                    }


                    }
                    break;

            }

            // InternalContextMappingDSL.g:14517:3: ( (lv_visibility_1_0= ruleVisibility ) )?
            int alt334=2;
            int LA334_0 = input.LA(1);

            if ( (LA334_0==109||(LA334_0>=232 && LA334_0<=234)) ) {
                alt334=1;
            }
            switch (alt334) {
                case 1 :
                    // InternalContextMappingDSL.g:14518:4: (lv_visibility_1_0= ruleVisibility )
                    {
                    // InternalContextMappingDSL.g:14518:4: (lv_visibility_1_0= ruleVisibility )
                    // InternalContextMappingDSL.g:14519:5: lv_visibility_1_0= ruleVisibility
                    {

                    					newCompositeNode(grammarAccess.getDtoAttributeAccess().getVisibilityVisibilityEnumRuleCall_1_0());
                    				
                    pushFollow(FOLLOW_162);
                    lv_visibility_1_0=ruleVisibility();

                    state._fsp--;


                    					if (current==null) {
                    						current = createModelElementForParent(grammarAccess.getDtoAttributeRule());
                    					}
                    					set(
                    						current,
                    						"visibility",
                    						lv_visibility_1_0,
                    						"org.contextmapper.tactic.dsl.TacticDDDLanguage.Visibility");
                    					afterParserOrEnumRuleCall();
                    				

                    }


                    }
                    break;

            }

            // InternalContextMappingDSL.g:14536:3: ( ( (lv_collectionType_2_0= ruleCollectionType ) ) otherlv_3= '<' )?
            int alt335=2;
            int LA335_0 = input.LA(1);

            if ( (LA335_0==218||(LA335_0>=228 && LA335_0<=231)) ) {
                alt335=1;
            }
            switch (alt335) {
                case 1 :
                    // InternalContextMappingDSL.g:14537:4: ( (lv_collectionType_2_0= ruleCollectionType ) ) otherlv_3= '<'
                    {
                    // InternalContextMappingDSL.g:14537:4: ( (lv_collectionType_2_0= ruleCollectionType ) )
                    // InternalContextMappingDSL.g:14538:5: (lv_collectionType_2_0= ruleCollectionType )
                    {
                    // InternalContextMappingDSL.g:14538:5: (lv_collectionType_2_0= ruleCollectionType )
                    // InternalContextMappingDSL.g:14539:6: lv_collectionType_2_0= ruleCollectionType
                    {

                    						newCompositeNode(grammarAccess.getDtoAttributeAccess().getCollectionTypeCollectionTypeEnumRuleCall_2_0_0());
                    					
                    pushFollow(FOLLOW_117);
                    lv_collectionType_2_0=ruleCollectionType();

                    state._fsp--;


                    						if (current==null) {
                    							current = createModelElementForParent(grammarAccess.getDtoAttributeRule());
                    						}
                    						set(
                    							current,
                    							"collectionType",
                    							lv_collectionType_2_0,
                    							"org.contextmapper.tactic.dsl.TacticDDDLanguage.CollectionType");
                    						afterParserOrEnumRuleCall();
                    					

                    }


                    }

                    otherlv_3=(Token)match(input,103,FOLLOW_163); 

                    				newLeafNode(otherlv_3, grammarAccess.getDtoAttributeAccess().getLessThanSignKeyword_2_1());
                    			

                    }
                    break;

            }

            // InternalContextMappingDSL.g:14561:3: ( (lv_type_4_0= ruleType ) )
            // InternalContextMappingDSL.g:14562:4: (lv_type_4_0= ruleType )
            {
            // InternalContextMappingDSL.g:14562:4: (lv_type_4_0= ruleType )
            // InternalContextMappingDSL.g:14563:5: lv_type_4_0= ruleType
            {

            					newCompositeNode(grammarAccess.getDtoAttributeAccess().getTypeTypeParserRuleCall_3_0());
            				
            pushFollow(FOLLOW_175);
            lv_type_4_0=ruleType();

            state._fsp--;


            					if (current==null) {
            						current = createModelElementForParent(grammarAccess.getDtoAttributeRule());
            					}
            					set(
            						current,
            						"type",
            						lv_type_4_0,
            						"org.contextmapper.tactic.dsl.TacticDDDLanguage.Type");
            					afterParserOrEnumRuleCall();
            				

            }


            }

            // InternalContextMappingDSL.g:14580:3: (otherlv_5= '>' )?
            int alt336=2;
            int LA336_0 = input.LA(1);

            if ( (LA336_0==104) ) {
                alt336=1;
            }
            switch (alt336) {
                case 1 :
                    // InternalContextMappingDSL.g:14581:4: otherlv_5= '>'
                    {
                    otherlv_5=(Token)match(input,104,FOLLOW_10); 

                    				newLeafNode(otherlv_5, grammarAccess.getDtoAttributeAccess().getGreaterThanSignKeyword_4());
                    			

                    }
                    break;

            }

            // InternalContextMappingDSL.g:14586:3: ( (lv_name_6_0= RULE_ID ) )
            // InternalContextMappingDSL.g:14587:4: (lv_name_6_0= RULE_ID )
            {
            // InternalContextMappingDSL.g:14587:4: (lv_name_6_0= RULE_ID )
            // InternalContextMappingDSL.g:14588:5: lv_name_6_0= RULE_ID
            {
            lv_name_6_0=(Token)match(input,RULE_ID,FOLLOW_176); 

            					newLeafNode(lv_name_6_0, grammarAccess.getDtoAttributeAccess().getNameIDTerminalRuleCall_5_0());
            				

            					if (current==null) {
            						current = createModelElement(grammarAccess.getDtoAttributeRule());
            					}
            					setWithLastConsumed(
            						current,
            						"name",
            						lv_name_6_0,
            						"org.eclipse.xtext.common.Terminals.ID");
            				

            }


            }

            // InternalContextMappingDSL.g:14604:3: ( ( ( ( ({...}? => ( ({...}? => ( (lv_key_8_0= 'key' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notChangeable_9_0= RULE_NOT ) ) otherlv_10= 'changeable' ) | otherlv_11= 'changeable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_required_12_0= 'required' ) ) | (this_NOT_13= RULE_NOT otherlv_14= 'required' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_nullable_15_0= 'nullable' ) ) | (this_NOT_16= RULE_NOT otherlv_17= 'nullable' ) ) (otherlv_18= '=' ( (lv_nullableMessage_19_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_20_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_assertFalse_21_0= 'assertFalse' ) ) (otherlv_22= '=' ( (lv_assertFalseMessage_23_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_assertTrue_24_0= 'assertTrue' ) ) (otherlv_25= '=' ( (lv_assertTrueMessage_26_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_creditCardNumber_27_0= 'creditCardNumber' ) ) (otherlv_28= '=' ( (lv_creditCardNumberMessage_29_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_30= 'digits' otherlv_31= '=' ( (lv_digits_32_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_email_33_0= 'email' ) ) (otherlv_34= '=' ( (lv_emailMessage_35_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_future_36_0= 'future' ) ) (otherlv_37= '=' ( (lv_futureMessage_38_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_past_39_0= 'past' ) ) (otherlv_40= '=' ( (lv_pastMessage_41_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_42= 'max' otherlv_43= '=' ( (lv_max_44_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_45= 'min' otherlv_46= '=' ( (lv_min_47_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_48= 'decimalMax' otherlv_49= '=' ( (lv_decimalMax_50_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_51= 'decimalMin' otherlv_52= '=' ( (lv_decimalMin_53_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notEmpty_54_0= 'notEmpty' ) ) (otherlv_55= '=' ( (lv_notEmptyMessage_56_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notBlank_57_0= 'notBlank' ) ) (otherlv_58= '=' ( (lv_notBlankMessage_59_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_60= 'pattern' otherlv_61= '=' ( (lv_pattern_62_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_63= 'range' otherlv_64= '=' ( (lv_range_65_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_66= 'size' otherlv_67= '=' ( (lv_size_68_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_69= 'length' otherlv_70= '=' ( (lv_length_71_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_72= 'scriptAssert' otherlv_73= '=' ( (lv_scriptAssert_74_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_75= 'url' otherlv_76= '=' ( (lv_url_77_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_78= 'validate' otherlv_79= '=' ( (lv_validate_80_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_81= 'hint' otherlv_82= '=' ( (lv_hint_83_0= RULE_STRING ) ) ) ) ) ) )* ) ) )
            // InternalContextMappingDSL.g:14605:4: ( ( ( ({...}? => ( ({...}? => ( (lv_key_8_0= 'key' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notChangeable_9_0= RULE_NOT ) ) otherlv_10= 'changeable' ) | otherlv_11= 'changeable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_required_12_0= 'required' ) ) | (this_NOT_13= RULE_NOT otherlv_14= 'required' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_nullable_15_0= 'nullable' ) ) | (this_NOT_16= RULE_NOT otherlv_17= 'nullable' ) ) (otherlv_18= '=' ( (lv_nullableMessage_19_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_20_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_assertFalse_21_0= 'assertFalse' ) ) (otherlv_22= '=' ( (lv_assertFalseMessage_23_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_assertTrue_24_0= 'assertTrue' ) ) (otherlv_25= '=' ( (lv_assertTrueMessage_26_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_creditCardNumber_27_0= 'creditCardNumber' ) ) (otherlv_28= '=' ( (lv_creditCardNumberMessage_29_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_30= 'digits' otherlv_31= '=' ( (lv_digits_32_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_email_33_0= 'email' ) ) (otherlv_34= '=' ( (lv_emailMessage_35_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_future_36_0= 'future' ) ) (otherlv_37= '=' ( (lv_futureMessage_38_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_past_39_0= 'past' ) ) (otherlv_40= '=' ( (lv_pastMessage_41_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_42= 'max' otherlv_43= '=' ( (lv_max_44_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_45= 'min' otherlv_46= '=' ( (lv_min_47_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_48= 'decimalMax' otherlv_49= '=' ( (lv_decimalMax_50_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_51= 'decimalMin' otherlv_52= '=' ( (lv_decimalMin_53_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notEmpty_54_0= 'notEmpty' ) ) (otherlv_55= '=' ( (lv_notEmptyMessage_56_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notBlank_57_0= 'notBlank' ) ) (otherlv_58= '=' ( (lv_notBlankMessage_59_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_60= 'pattern' otherlv_61= '=' ( (lv_pattern_62_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_63= 'range' otherlv_64= '=' ( (lv_range_65_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_66= 'size' otherlv_67= '=' ( (lv_size_68_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_69= 'length' otherlv_70= '=' ( (lv_length_71_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_72= 'scriptAssert' otherlv_73= '=' ( (lv_scriptAssert_74_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_75= 'url' otherlv_76= '=' ( (lv_url_77_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_78= 'validate' otherlv_79= '=' ( (lv_validate_80_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_81= 'hint' otherlv_82= '=' ( (lv_hint_83_0= RULE_STRING ) ) ) ) ) ) )* ) )
            {
            // InternalContextMappingDSL.g:14605:4: ( ( ( ({...}? => ( ({...}? => ( (lv_key_8_0= 'key' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notChangeable_9_0= RULE_NOT ) ) otherlv_10= 'changeable' ) | otherlv_11= 'changeable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_required_12_0= 'required' ) ) | (this_NOT_13= RULE_NOT otherlv_14= 'required' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_nullable_15_0= 'nullable' ) ) | (this_NOT_16= RULE_NOT otherlv_17= 'nullable' ) ) (otherlv_18= '=' ( (lv_nullableMessage_19_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_20_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_assertFalse_21_0= 'assertFalse' ) ) (otherlv_22= '=' ( (lv_assertFalseMessage_23_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_assertTrue_24_0= 'assertTrue' ) ) (otherlv_25= '=' ( (lv_assertTrueMessage_26_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_creditCardNumber_27_0= 'creditCardNumber' ) ) (otherlv_28= '=' ( (lv_creditCardNumberMessage_29_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_30= 'digits' otherlv_31= '=' ( (lv_digits_32_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_email_33_0= 'email' ) ) (otherlv_34= '=' ( (lv_emailMessage_35_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_future_36_0= 'future' ) ) (otherlv_37= '=' ( (lv_futureMessage_38_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_past_39_0= 'past' ) ) (otherlv_40= '=' ( (lv_pastMessage_41_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_42= 'max' otherlv_43= '=' ( (lv_max_44_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_45= 'min' otherlv_46= '=' ( (lv_min_47_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_48= 'decimalMax' otherlv_49= '=' ( (lv_decimalMax_50_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_51= 'decimalMin' otherlv_52= '=' ( (lv_decimalMin_53_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notEmpty_54_0= 'notEmpty' ) ) (otherlv_55= '=' ( (lv_notEmptyMessage_56_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notBlank_57_0= 'notBlank' ) ) (otherlv_58= '=' ( (lv_notBlankMessage_59_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_60= 'pattern' otherlv_61= '=' ( (lv_pattern_62_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_63= 'range' otherlv_64= '=' ( (lv_range_65_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_66= 'size' otherlv_67= '=' ( (lv_size_68_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_69= 'length' otherlv_70= '=' ( (lv_length_71_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_72= 'scriptAssert' otherlv_73= '=' ( (lv_scriptAssert_74_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_75= 'url' otherlv_76= '=' ( (lv_url_77_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_78= 'validate' otherlv_79= '=' ( (lv_validate_80_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_81= 'hint' otherlv_82= '=' ( (lv_hint_83_0= RULE_STRING ) ) ) ) ) ) )* ) )
            // InternalContextMappingDSL.g:14606:5: ( ( ({...}? => ( ({...}? => ( (lv_key_8_0= 'key' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notChangeable_9_0= RULE_NOT ) ) otherlv_10= 'changeable' ) | otherlv_11= 'changeable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_required_12_0= 'required' ) ) | (this_NOT_13= RULE_NOT otherlv_14= 'required' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_nullable_15_0= 'nullable' ) ) | (this_NOT_16= RULE_NOT otherlv_17= 'nullable' ) ) (otherlv_18= '=' ( (lv_nullableMessage_19_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_20_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_assertFalse_21_0= 'assertFalse' ) ) (otherlv_22= '=' ( (lv_assertFalseMessage_23_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_assertTrue_24_0= 'assertTrue' ) ) (otherlv_25= '=' ( (lv_assertTrueMessage_26_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_creditCardNumber_27_0= 'creditCardNumber' ) ) (otherlv_28= '=' ( (lv_creditCardNumberMessage_29_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_30= 'digits' otherlv_31= '=' ( (lv_digits_32_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_email_33_0= 'email' ) ) (otherlv_34= '=' ( (lv_emailMessage_35_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_future_36_0= 'future' ) ) (otherlv_37= '=' ( (lv_futureMessage_38_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_past_39_0= 'past' ) ) (otherlv_40= '=' ( (lv_pastMessage_41_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_42= 'max' otherlv_43= '=' ( (lv_max_44_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_45= 'min' otherlv_46= '=' ( (lv_min_47_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_48= 'decimalMax' otherlv_49= '=' ( (lv_decimalMax_50_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_51= 'decimalMin' otherlv_52= '=' ( (lv_decimalMin_53_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notEmpty_54_0= 'notEmpty' ) ) (otherlv_55= '=' ( (lv_notEmptyMessage_56_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notBlank_57_0= 'notBlank' ) ) (otherlv_58= '=' ( (lv_notBlankMessage_59_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_60= 'pattern' otherlv_61= '=' ( (lv_pattern_62_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_63= 'range' otherlv_64= '=' ( (lv_range_65_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_66= 'size' otherlv_67= '=' ( (lv_size_68_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_69= 'length' otherlv_70= '=' ( (lv_length_71_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_72= 'scriptAssert' otherlv_73= '=' ( (lv_scriptAssert_74_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_75= 'url' otherlv_76= '=' ( (lv_url_77_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_78= 'validate' otherlv_79= '=' ( (lv_validate_80_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_81= 'hint' otherlv_82= '=' ( (lv_hint_83_0= RULE_STRING ) ) ) ) ) ) )* )
            {
             
            				  getUnorderedGroupHelper().enter(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6());
            				
            // InternalContextMappingDSL.g:14609:5: ( ( ({...}? => ( ({...}? => ( (lv_key_8_0= 'key' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notChangeable_9_0= RULE_NOT ) ) otherlv_10= 'changeable' ) | otherlv_11= 'changeable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_required_12_0= 'required' ) ) | (this_NOT_13= RULE_NOT otherlv_14= 'required' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_nullable_15_0= 'nullable' ) ) | (this_NOT_16= RULE_NOT otherlv_17= 'nullable' ) ) (otherlv_18= '=' ( (lv_nullableMessage_19_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_20_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_assertFalse_21_0= 'assertFalse' ) ) (otherlv_22= '=' ( (lv_assertFalseMessage_23_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_assertTrue_24_0= 'assertTrue' ) ) (otherlv_25= '=' ( (lv_assertTrueMessage_26_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_creditCardNumber_27_0= 'creditCardNumber' ) ) (otherlv_28= '=' ( (lv_creditCardNumberMessage_29_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_30= 'digits' otherlv_31= '=' ( (lv_digits_32_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_email_33_0= 'email' ) ) (otherlv_34= '=' ( (lv_emailMessage_35_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_future_36_0= 'future' ) ) (otherlv_37= '=' ( (lv_futureMessage_38_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_past_39_0= 'past' ) ) (otherlv_40= '=' ( (lv_pastMessage_41_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_42= 'max' otherlv_43= '=' ( (lv_max_44_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_45= 'min' otherlv_46= '=' ( (lv_min_47_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_48= 'decimalMax' otherlv_49= '=' ( (lv_decimalMax_50_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_51= 'decimalMin' otherlv_52= '=' ( (lv_decimalMin_53_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notEmpty_54_0= 'notEmpty' ) ) (otherlv_55= '=' ( (lv_notEmptyMessage_56_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notBlank_57_0= 'notBlank' ) ) (otherlv_58= '=' ( (lv_notBlankMessage_59_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_60= 'pattern' otherlv_61= '=' ( (lv_pattern_62_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_63= 'range' otherlv_64= '=' ( (lv_range_65_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_66= 'size' otherlv_67= '=' ( (lv_size_68_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_69= 'length' otherlv_70= '=' ( (lv_length_71_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_72= 'scriptAssert' otherlv_73= '=' ( (lv_scriptAssert_74_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_75= 'url' otherlv_76= '=' ( (lv_url_77_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_78= 'validate' otherlv_79= '=' ( (lv_validate_80_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_81= 'hint' otherlv_82= '=' ( (lv_hint_83_0= RULE_STRING ) ) ) ) ) ) )* )
            // InternalContextMappingDSL.g:14610:6: ( ({...}? => ( ({...}? => ( (lv_key_8_0= 'key' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notChangeable_9_0= RULE_NOT ) ) otherlv_10= 'changeable' ) | otherlv_11= 'changeable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_required_12_0= 'required' ) ) | (this_NOT_13= RULE_NOT otherlv_14= 'required' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_nullable_15_0= 'nullable' ) ) | (this_NOT_16= RULE_NOT otherlv_17= 'nullable' ) ) (otherlv_18= '=' ( (lv_nullableMessage_19_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_20_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_assertFalse_21_0= 'assertFalse' ) ) (otherlv_22= '=' ( (lv_assertFalseMessage_23_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_assertTrue_24_0= 'assertTrue' ) ) (otherlv_25= '=' ( (lv_assertTrueMessage_26_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_creditCardNumber_27_0= 'creditCardNumber' ) ) (otherlv_28= '=' ( (lv_creditCardNumberMessage_29_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_30= 'digits' otherlv_31= '=' ( (lv_digits_32_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_email_33_0= 'email' ) ) (otherlv_34= '=' ( (lv_emailMessage_35_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_future_36_0= 'future' ) ) (otherlv_37= '=' ( (lv_futureMessage_38_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_past_39_0= 'past' ) ) (otherlv_40= '=' ( (lv_pastMessage_41_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_42= 'max' otherlv_43= '=' ( (lv_max_44_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_45= 'min' otherlv_46= '=' ( (lv_min_47_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_48= 'decimalMax' otherlv_49= '=' ( (lv_decimalMax_50_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_51= 'decimalMin' otherlv_52= '=' ( (lv_decimalMin_53_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notEmpty_54_0= 'notEmpty' ) ) (otherlv_55= '=' ( (lv_notEmptyMessage_56_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notBlank_57_0= 'notBlank' ) ) (otherlv_58= '=' ( (lv_notBlankMessage_59_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_60= 'pattern' otherlv_61= '=' ( (lv_pattern_62_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_63= 'range' otherlv_64= '=' ( (lv_range_65_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_66= 'size' otherlv_67= '=' ( (lv_size_68_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_69= 'length' otherlv_70= '=' ( (lv_length_71_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_72= 'scriptAssert' otherlv_73= '=' ( (lv_scriptAssert_74_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_75= 'url' otherlv_76= '=' ( (lv_url_77_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_78= 'validate' otherlv_79= '=' ( (lv_validate_80_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_81= 'hint' otherlv_82= '=' ( (lv_hint_83_0= RULE_STRING ) ) ) ) ) ) )*
            {
            // InternalContextMappingDSL.g:14610:6: ( ({...}? => ( ({...}? => ( (lv_key_8_0= 'key' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notChangeable_9_0= RULE_NOT ) ) otherlv_10= 'changeable' ) | otherlv_11= 'changeable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_required_12_0= 'required' ) ) | (this_NOT_13= RULE_NOT otherlv_14= 'required' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_nullable_15_0= 'nullable' ) ) | (this_NOT_16= RULE_NOT otherlv_17= 'nullable' ) ) (otherlv_18= '=' ( (lv_nullableMessage_19_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_20_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_assertFalse_21_0= 'assertFalse' ) ) (otherlv_22= '=' ( (lv_assertFalseMessage_23_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_assertTrue_24_0= 'assertTrue' ) ) (otherlv_25= '=' ( (lv_assertTrueMessage_26_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_creditCardNumber_27_0= 'creditCardNumber' ) ) (otherlv_28= '=' ( (lv_creditCardNumberMessage_29_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_30= 'digits' otherlv_31= '=' ( (lv_digits_32_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_email_33_0= 'email' ) ) (otherlv_34= '=' ( (lv_emailMessage_35_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_future_36_0= 'future' ) ) (otherlv_37= '=' ( (lv_futureMessage_38_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_past_39_0= 'past' ) ) (otherlv_40= '=' ( (lv_pastMessage_41_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_42= 'max' otherlv_43= '=' ( (lv_max_44_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_45= 'min' otherlv_46= '=' ( (lv_min_47_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_48= 'decimalMax' otherlv_49= '=' ( (lv_decimalMax_50_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_51= 'decimalMin' otherlv_52= '=' ( (lv_decimalMin_53_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notEmpty_54_0= 'notEmpty' ) ) (otherlv_55= '=' ( (lv_notEmptyMessage_56_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notBlank_57_0= 'notBlank' ) ) (otherlv_58= '=' ( (lv_notBlankMessage_59_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_60= 'pattern' otherlv_61= '=' ( (lv_pattern_62_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_63= 'range' otherlv_64= '=' ( (lv_range_65_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_66= 'size' otherlv_67= '=' ( (lv_size_68_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_69= 'length' otherlv_70= '=' ( (lv_length_71_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_72= 'scriptAssert' otherlv_73= '=' ( (lv_scriptAssert_74_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_75= 'url' otherlv_76= '=' ( (lv_url_77_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_78= 'validate' otherlv_79= '=' ( (lv_validate_80_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_81= 'hint' otherlv_82= '=' ( (lv_hint_83_0= RULE_STRING ) ) ) ) ) ) )*
            loop349:
            do {
                int alt349=27;
                alt349 = dfa349.predict(input);
                switch (alt349) {
            	case 1 :
            	    // InternalContextMappingDSL.g:14611:4: ({...}? => ( ({...}? => ( (lv_key_8_0= 'key' ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:14611:4: ({...}? => ( ({...}? => ( (lv_key_8_0= 'key' ) ) ) ) )
            	    // InternalContextMappingDSL.g:14612:5: {...}? => ( ({...}? => ( (lv_key_8_0= 'key' ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 0) ) {
            	        throw new FailedPredicateException(input, "ruleDtoAttribute", "getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 0)");
            	    }
            	    // InternalContextMappingDSL.g:14612:109: ( ({...}? => ( (lv_key_8_0= 'key' ) ) ) )
            	    // InternalContextMappingDSL.g:14613:6: ({...}? => ( (lv_key_8_0= 'key' ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 0);
            	    					
            	    // InternalContextMappingDSL.g:14616:9: ({...}? => ( (lv_key_8_0= 'key' ) ) )
            	    // InternalContextMappingDSL.g:14616:10: {...}? => ( (lv_key_8_0= 'key' ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleDtoAttribute", "true");
            	    }
            	    // InternalContextMappingDSL.g:14616:19: ( (lv_key_8_0= 'key' ) )
            	    // InternalContextMappingDSL.g:14616:20: (lv_key_8_0= 'key' )
            	    {
            	    // InternalContextMappingDSL.g:14616:20: (lv_key_8_0= 'key' )
            	    // InternalContextMappingDSL.g:14617:10: lv_key_8_0= 'key'
            	    {
            	    lv_key_8_0=(Token)match(input,131,FOLLOW_176); 

            	    										newLeafNode(lv_key_8_0, grammarAccess.getDtoAttributeAccess().getKeyKeyKeyword_6_0_0());
            	    									

            	    										if (current==null) {
            	    											current = createModelElement(grammarAccess.getDtoAttributeRule());
            	    										}
            	    										setWithLastConsumed(current, "key", true, "key");
            	    									

            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 2 :
            	    // InternalContextMappingDSL.g:14634:4: ({...}? => ( ({...}? => ( ( ( (lv_notChangeable_9_0= RULE_NOT ) ) otherlv_10= 'changeable' ) | otherlv_11= 'changeable' ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:14634:4: ({...}? => ( ({...}? => ( ( ( (lv_notChangeable_9_0= RULE_NOT ) ) otherlv_10= 'changeable' ) | otherlv_11= 'changeable' ) ) ) )
            	    // InternalContextMappingDSL.g:14635:5: {...}? => ( ({...}? => ( ( ( (lv_notChangeable_9_0= RULE_NOT ) ) otherlv_10= 'changeable' ) | otherlv_11= 'changeable' ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 1) ) {
            	        throw new FailedPredicateException(input, "ruleDtoAttribute", "getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 1)");
            	    }
            	    // InternalContextMappingDSL.g:14635:109: ( ({...}? => ( ( ( (lv_notChangeable_9_0= RULE_NOT ) ) otherlv_10= 'changeable' ) | otherlv_11= 'changeable' ) ) )
            	    // InternalContextMappingDSL.g:14636:6: ({...}? => ( ( ( (lv_notChangeable_9_0= RULE_NOT ) ) otherlv_10= 'changeable' ) | otherlv_11= 'changeable' ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 1);
            	    					
            	    // InternalContextMappingDSL.g:14639:9: ({...}? => ( ( ( (lv_notChangeable_9_0= RULE_NOT ) ) otherlv_10= 'changeable' ) | otherlv_11= 'changeable' ) )
            	    // InternalContextMappingDSL.g:14639:10: {...}? => ( ( ( (lv_notChangeable_9_0= RULE_NOT ) ) otherlv_10= 'changeable' ) | otherlv_11= 'changeable' )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleDtoAttribute", "true");
            	    }
            	    // InternalContextMappingDSL.g:14639:19: ( ( ( (lv_notChangeable_9_0= RULE_NOT ) ) otherlv_10= 'changeable' ) | otherlv_11= 'changeable' )
            	    int alt337=2;
            	    int LA337_0 = input.LA(1);

            	    if ( (LA337_0==RULE_NOT) ) {
            	        alt337=1;
            	    }
            	    else if ( (LA337_0==132) ) {
            	        alt337=2;
            	    }
            	    else {
            	        NoViableAltException nvae =
            	            new NoViableAltException("", 337, 0, input);

            	        throw nvae;
            	    }
            	    switch (alt337) {
            	        case 1 :
            	            // InternalContextMappingDSL.g:14639:20: ( ( (lv_notChangeable_9_0= RULE_NOT ) ) otherlv_10= 'changeable' )
            	            {
            	            // InternalContextMappingDSL.g:14639:20: ( ( (lv_notChangeable_9_0= RULE_NOT ) ) otherlv_10= 'changeable' )
            	            // InternalContextMappingDSL.g:14640:10: ( (lv_notChangeable_9_0= RULE_NOT ) ) otherlv_10= 'changeable'
            	            {
            	            // InternalContextMappingDSL.g:14640:10: ( (lv_notChangeable_9_0= RULE_NOT ) )
            	            // InternalContextMappingDSL.g:14641:11: (lv_notChangeable_9_0= RULE_NOT )
            	            {
            	            // InternalContextMappingDSL.g:14641:11: (lv_notChangeable_9_0= RULE_NOT )
            	            // InternalContextMappingDSL.g:14642:12: lv_notChangeable_9_0= RULE_NOT
            	            {
            	            lv_notChangeable_9_0=(Token)match(input,RULE_NOT,FOLLOW_165); 

            	            												newLeafNode(lv_notChangeable_9_0, grammarAccess.getDtoAttributeAccess().getNotChangeableNOTTerminalRuleCall_6_1_0_0_0());
            	            											

            	            												if (current==null) {
            	            													current = createModelElement(grammarAccess.getDtoAttributeRule());
            	            												}
            	            												setWithLastConsumed(
            	            													current,
            	            													"notChangeable",
            	            													true,
            	            													"org.contextmapper.tactic.dsl.TacticDDDLanguage.NOT");
            	            											

            	            }


            	            }

            	            otherlv_10=(Token)match(input,132,FOLLOW_176); 

            	            										newLeafNode(otherlv_10, grammarAccess.getDtoAttributeAccess().getChangeableKeyword_6_1_0_1());
            	            									

            	            }


            	            }
            	            break;
            	        case 2 :
            	            // InternalContextMappingDSL.g:14664:9: otherlv_11= 'changeable'
            	            {
            	            otherlv_11=(Token)match(input,132,FOLLOW_176); 

            	            									newLeafNode(otherlv_11, grammarAccess.getDtoAttributeAccess().getChangeableKeyword_6_1_1());
            	            								

            	            }
            	            break;

            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 3 :
            	    // InternalContextMappingDSL.g:14674:4: ({...}? => ( ({...}? => ( ( (lv_required_12_0= 'required' ) ) | (this_NOT_13= RULE_NOT otherlv_14= 'required' ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:14674:4: ({...}? => ( ({...}? => ( ( (lv_required_12_0= 'required' ) ) | (this_NOT_13= RULE_NOT otherlv_14= 'required' ) ) ) ) )
            	    // InternalContextMappingDSL.g:14675:5: {...}? => ( ({...}? => ( ( (lv_required_12_0= 'required' ) ) | (this_NOT_13= RULE_NOT otherlv_14= 'required' ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 2) ) {
            	        throw new FailedPredicateException(input, "ruleDtoAttribute", "getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 2)");
            	    }
            	    // InternalContextMappingDSL.g:14675:109: ( ({...}? => ( ( (lv_required_12_0= 'required' ) ) | (this_NOT_13= RULE_NOT otherlv_14= 'required' ) ) ) )
            	    // InternalContextMappingDSL.g:14676:6: ({...}? => ( ( (lv_required_12_0= 'required' ) ) | (this_NOT_13= RULE_NOT otherlv_14= 'required' ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 2);
            	    					
            	    // InternalContextMappingDSL.g:14679:9: ({...}? => ( ( (lv_required_12_0= 'required' ) ) | (this_NOT_13= RULE_NOT otherlv_14= 'required' ) ) )
            	    // InternalContextMappingDSL.g:14679:10: {...}? => ( ( (lv_required_12_0= 'required' ) ) | (this_NOT_13= RULE_NOT otherlv_14= 'required' ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleDtoAttribute", "true");
            	    }
            	    // InternalContextMappingDSL.g:14679:19: ( ( (lv_required_12_0= 'required' ) ) | (this_NOT_13= RULE_NOT otherlv_14= 'required' ) )
            	    int alt338=2;
            	    int LA338_0 = input.LA(1);

            	    if ( (LA338_0==133) ) {
            	        alt338=1;
            	    }
            	    else if ( (LA338_0==RULE_NOT) ) {
            	        alt338=2;
            	    }
            	    else {
            	        NoViableAltException nvae =
            	            new NoViableAltException("", 338, 0, input);

            	        throw nvae;
            	    }
            	    switch (alt338) {
            	        case 1 :
            	            // InternalContextMappingDSL.g:14679:20: ( (lv_required_12_0= 'required' ) )
            	            {
            	            // InternalContextMappingDSL.g:14679:20: ( (lv_required_12_0= 'required' ) )
            	            // InternalContextMappingDSL.g:14680:10: (lv_required_12_0= 'required' )
            	            {
            	            // InternalContextMappingDSL.g:14680:10: (lv_required_12_0= 'required' )
            	            // InternalContextMappingDSL.g:14681:11: lv_required_12_0= 'required'
            	            {
            	            lv_required_12_0=(Token)match(input,133,FOLLOW_176); 

            	            											newLeafNode(lv_required_12_0, grammarAccess.getDtoAttributeAccess().getRequiredRequiredKeyword_6_2_0_0());
            	            										

            	            											if (current==null) {
            	            												current = createModelElement(grammarAccess.getDtoAttributeRule());
            	            											}
            	            											setWithLastConsumed(current, "required", true, "required");
            	            										

            	            }


            	            }


            	            }
            	            break;
            	        case 2 :
            	            // InternalContextMappingDSL.g:14694:9: (this_NOT_13= RULE_NOT otherlv_14= 'required' )
            	            {
            	            // InternalContextMappingDSL.g:14694:9: (this_NOT_13= RULE_NOT otherlv_14= 'required' )
            	            // InternalContextMappingDSL.g:14695:10: this_NOT_13= RULE_NOT otherlv_14= 'required'
            	            {
            	            this_NOT_13=(Token)match(input,RULE_NOT,FOLLOW_166); 

            	            										newLeafNode(this_NOT_13, grammarAccess.getDtoAttributeAccess().getNOTTerminalRuleCall_6_2_1_0());
            	            									
            	            otherlv_14=(Token)match(input,133,FOLLOW_176); 

            	            										newLeafNode(otherlv_14, grammarAccess.getDtoAttributeAccess().getRequiredKeyword_6_2_1_1());
            	            									

            	            }


            	            }
            	            break;

            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 4 :
            	    // InternalContextMappingDSL.g:14710:4: ({...}? => ( ({...}? => ( ( ( (lv_nullable_15_0= 'nullable' ) ) | (this_NOT_16= RULE_NOT otherlv_17= 'nullable' ) ) (otherlv_18= '=' ( (lv_nullableMessage_19_0= RULE_STRING ) ) )? ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:14710:4: ({...}? => ( ({...}? => ( ( ( (lv_nullable_15_0= 'nullable' ) ) | (this_NOT_16= RULE_NOT otherlv_17= 'nullable' ) ) (otherlv_18= '=' ( (lv_nullableMessage_19_0= RULE_STRING ) ) )? ) ) ) )
            	    // InternalContextMappingDSL.g:14711:5: {...}? => ( ({...}? => ( ( ( (lv_nullable_15_0= 'nullable' ) ) | (this_NOT_16= RULE_NOT otherlv_17= 'nullable' ) ) (otherlv_18= '=' ( (lv_nullableMessage_19_0= RULE_STRING ) ) )? ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 3) ) {
            	        throw new FailedPredicateException(input, "ruleDtoAttribute", "getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 3)");
            	    }
            	    // InternalContextMappingDSL.g:14711:109: ( ({...}? => ( ( ( (lv_nullable_15_0= 'nullable' ) ) | (this_NOT_16= RULE_NOT otherlv_17= 'nullable' ) ) (otherlv_18= '=' ( (lv_nullableMessage_19_0= RULE_STRING ) ) )? ) ) )
            	    // InternalContextMappingDSL.g:14712:6: ({...}? => ( ( ( (lv_nullable_15_0= 'nullable' ) ) | (this_NOT_16= RULE_NOT otherlv_17= 'nullable' ) ) (otherlv_18= '=' ( (lv_nullableMessage_19_0= RULE_STRING ) ) )? ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 3);
            	    					
            	    // InternalContextMappingDSL.g:14715:9: ({...}? => ( ( ( (lv_nullable_15_0= 'nullable' ) ) | (this_NOT_16= RULE_NOT otherlv_17= 'nullable' ) ) (otherlv_18= '=' ( (lv_nullableMessage_19_0= RULE_STRING ) ) )? ) )
            	    // InternalContextMappingDSL.g:14715:10: {...}? => ( ( ( (lv_nullable_15_0= 'nullable' ) ) | (this_NOT_16= RULE_NOT otherlv_17= 'nullable' ) ) (otherlv_18= '=' ( (lv_nullableMessage_19_0= RULE_STRING ) ) )? )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleDtoAttribute", "true");
            	    }
            	    // InternalContextMappingDSL.g:14715:19: ( ( ( (lv_nullable_15_0= 'nullable' ) ) | (this_NOT_16= RULE_NOT otherlv_17= 'nullable' ) ) (otherlv_18= '=' ( (lv_nullableMessage_19_0= RULE_STRING ) ) )? )
            	    // InternalContextMappingDSL.g:14715:20: ( ( (lv_nullable_15_0= 'nullable' ) ) | (this_NOT_16= RULE_NOT otherlv_17= 'nullable' ) ) (otherlv_18= '=' ( (lv_nullableMessage_19_0= RULE_STRING ) ) )?
            	    {
            	    // InternalContextMappingDSL.g:14715:20: ( ( (lv_nullable_15_0= 'nullable' ) ) | (this_NOT_16= RULE_NOT otherlv_17= 'nullable' ) )
            	    int alt339=2;
            	    int LA339_0 = input.LA(1);

            	    if ( (LA339_0==134) ) {
            	        alt339=1;
            	    }
            	    else if ( (LA339_0==RULE_NOT) ) {
            	        alt339=2;
            	    }
            	    else {
            	        NoViableAltException nvae =
            	            new NoViableAltException("", 339, 0, input);

            	        throw nvae;
            	    }
            	    switch (alt339) {
            	        case 1 :
            	            // InternalContextMappingDSL.g:14716:10: ( (lv_nullable_15_0= 'nullable' ) )
            	            {
            	            // InternalContextMappingDSL.g:14716:10: ( (lv_nullable_15_0= 'nullable' ) )
            	            // InternalContextMappingDSL.g:14717:11: (lv_nullable_15_0= 'nullable' )
            	            {
            	            // InternalContextMappingDSL.g:14717:11: (lv_nullable_15_0= 'nullable' )
            	            // InternalContextMappingDSL.g:14718:12: lv_nullable_15_0= 'nullable'
            	            {
            	            lv_nullable_15_0=(Token)match(input,134,FOLLOW_177); 

            	            												newLeafNode(lv_nullable_15_0, grammarAccess.getDtoAttributeAccess().getNullableNullableKeyword_6_3_0_0_0());
            	            											

            	            												if (current==null) {
            	            													current = createModelElement(grammarAccess.getDtoAttributeRule());
            	            												}
            	            												setWithLastConsumed(current, "nullable", true, "nullable");
            	            											

            	            }


            	            }


            	            }
            	            break;
            	        case 2 :
            	            // InternalContextMappingDSL.g:14731:10: (this_NOT_16= RULE_NOT otherlv_17= 'nullable' )
            	            {
            	            // InternalContextMappingDSL.g:14731:10: (this_NOT_16= RULE_NOT otherlv_17= 'nullable' )
            	            // InternalContextMappingDSL.g:14732:11: this_NOT_16= RULE_NOT otherlv_17= 'nullable'
            	            {
            	            this_NOT_16=(Token)match(input,RULE_NOT,FOLLOW_168); 

            	            											newLeafNode(this_NOT_16, grammarAccess.getDtoAttributeAccess().getNOTTerminalRuleCall_6_3_0_1_0());
            	            										
            	            otherlv_17=(Token)match(input,134,FOLLOW_177); 

            	            											newLeafNode(otherlv_17, grammarAccess.getDtoAttributeAccess().getNullableKeyword_6_3_0_1_1());
            	            										

            	            }


            	            }
            	            break;

            	    }

            	    // InternalContextMappingDSL.g:14742:9: (otherlv_18= '=' ( (lv_nullableMessage_19_0= RULE_STRING ) ) )?
            	    int alt340=2;
            	    int LA340_0 = input.LA(1);

            	    if ( (LA340_0==21) ) {
            	        alt340=1;
            	    }
            	    switch (alt340) {
            	        case 1 :
            	            // InternalContextMappingDSL.g:14743:10: otherlv_18= '=' ( (lv_nullableMessage_19_0= RULE_STRING ) )
            	            {
            	            otherlv_18=(Token)match(input,21,FOLLOW_4); 

            	            										newLeafNode(otherlv_18, grammarAccess.getDtoAttributeAccess().getEqualsSignKeyword_6_3_1_0());
            	            									
            	            // InternalContextMappingDSL.g:14747:10: ( (lv_nullableMessage_19_0= RULE_STRING ) )
            	            // InternalContextMappingDSL.g:14748:11: (lv_nullableMessage_19_0= RULE_STRING )
            	            {
            	            // InternalContextMappingDSL.g:14748:11: (lv_nullableMessage_19_0= RULE_STRING )
            	            // InternalContextMappingDSL.g:14749:12: lv_nullableMessage_19_0= RULE_STRING
            	            {
            	            lv_nullableMessage_19_0=(Token)match(input,RULE_STRING,FOLLOW_176); 

            	            												newLeafNode(lv_nullableMessage_19_0, grammarAccess.getDtoAttributeAccess().getNullableMessageSTRINGTerminalRuleCall_6_3_1_1_0());
            	            											

            	            												if (current==null) {
            	            													current = createModelElement(grammarAccess.getDtoAttributeRule());
            	            												}
            	            												setWithLastConsumed(
            	            													current,
            	            													"nullableMessage",
            	            													lv_nullableMessage_19_0,
            	            													"org.eclipse.xtext.common.Terminals.STRING");
            	            											

            	            }


            	            }


            	            }
            	            break;

            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 5 :
            	    // InternalContextMappingDSL.g:14772:4: ({...}? => ( ({...}? => ( (lv_transient_20_0= 'transient' ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:14772:4: ({...}? => ( ({...}? => ( (lv_transient_20_0= 'transient' ) ) ) ) )
            	    // InternalContextMappingDSL.g:14773:5: {...}? => ( ({...}? => ( (lv_transient_20_0= 'transient' ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 4) ) {
            	        throw new FailedPredicateException(input, "ruleDtoAttribute", "getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 4)");
            	    }
            	    // InternalContextMappingDSL.g:14773:109: ( ({...}? => ( (lv_transient_20_0= 'transient' ) ) ) )
            	    // InternalContextMappingDSL.g:14774:6: ({...}? => ( (lv_transient_20_0= 'transient' ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 4);
            	    					
            	    // InternalContextMappingDSL.g:14777:9: ({...}? => ( (lv_transient_20_0= 'transient' ) ) )
            	    // InternalContextMappingDSL.g:14777:10: {...}? => ( (lv_transient_20_0= 'transient' ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleDtoAttribute", "true");
            	    }
            	    // InternalContextMappingDSL.g:14777:19: ( (lv_transient_20_0= 'transient' ) )
            	    // InternalContextMappingDSL.g:14777:20: (lv_transient_20_0= 'transient' )
            	    {
            	    // InternalContextMappingDSL.g:14777:20: (lv_transient_20_0= 'transient' )
            	    // InternalContextMappingDSL.g:14778:10: lv_transient_20_0= 'transient'
            	    {
            	    lv_transient_20_0=(Token)match(input,155,FOLLOW_176); 

            	    										newLeafNode(lv_transient_20_0, grammarAccess.getDtoAttributeAccess().getTransientTransientKeyword_6_4_0());
            	    									

            	    										if (current==null) {
            	    											current = createModelElement(grammarAccess.getDtoAttributeRule());
            	    										}
            	    										setWithLastConsumed(current, "transient", true, "transient");
            	    									

            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 6 :
            	    // InternalContextMappingDSL.g:14795:4: ({...}? => ( ({...}? => ( ( (lv_assertFalse_21_0= 'assertFalse' ) ) (otherlv_22= '=' ( (lv_assertFalseMessage_23_0= RULE_STRING ) ) )? ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:14795:4: ({...}? => ( ({...}? => ( ( (lv_assertFalse_21_0= 'assertFalse' ) ) (otherlv_22= '=' ( (lv_assertFalseMessage_23_0= RULE_STRING ) ) )? ) ) ) )
            	    // InternalContextMappingDSL.g:14796:5: {...}? => ( ({...}? => ( ( (lv_assertFalse_21_0= 'assertFalse' ) ) (otherlv_22= '=' ( (lv_assertFalseMessage_23_0= RULE_STRING ) ) )? ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 5) ) {
            	        throw new FailedPredicateException(input, "ruleDtoAttribute", "getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 5)");
            	    }
            	    // InternalContextMappingDSL.g:14796:109: ( ({...}? => ( ( (lv_assertFalse_21_0= 'assertFalse' ) ) (otherlv_22= '=' ( (lv_assertFalseMessage_23_0= RULE_STRING ) ) )? ) ) )
            	    // InternalContextMappingDSL.g:14797:6: ({...}? => ( ( (lv_assertFalse_21_0= 'assertFalse' ) ) (otherlv_22= '=' ( (lv_assertFalseMessage_23_0= RULE_STRING ) ) )? ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 5);
            	    					
            	    // InternalContextMappingDSL.g:14800:9: ({...}? => ( ( (lv_assertFalse_21_0= 'assertFalse' ) ) (otherlv_22= '=' ( (lv_assertFalseMessage_23_0= RULE_STRING ) ) )? ) )
            	    // InternalContextMappingDSL.g:14800:10: {...}? => ( ( (lv_assertFalse_21_0= 'assertFalse' ) ) (otherlv_22= '=' ( (lv_assertFalseMessage_23_0= RULE_STRING ) ) )? )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleDtoAttribute", "true");
            	    }
            	    // InternalContextMappingDSL.g:14800:19: ( ( (lv_assertFalse_21_0= 'assertFalse' ) ) (otherlv_22= '=' ( (lv_assertFalseMessage_23_0= RULE_STRING ) ) )? )
            	    // InternalContextMappingDSL.g:14800:20: ( (lv_assertFalse_21_0= 'assertFalse' ) ) (otherlv_22= '=' ( (lv_assertFalseMessage_23_0= RULE_STRING ) ) )?
            	    {
            	    // InternalContextMappingDSL.g:14800:20: ( (lv_assertFalse_21_0= 'assertFalse' ) )
            	    // InternalContextMappingDSL.g:14801:10: (lv_assertFalse_21_0= 'assertFalse' )
            	    {
            	    // InternalContextMappingDSL.g:14801:10: (lv_assertFalse_21_0= 'assertFalse' )
            	    // InternalContextMappingDSL.g:14802:11: lv_assertFalse_21_0= 'assertFalse'
            	    {
            	    lv_assertFalse_21_0=(Token)match(input,136,FOLLOW_177); 

            	    											newLeafNode(lv_assertFalse_21_0, grammarAccess.getDtoAttributeAccess().getAssertFalseAssertFalseKeyword_6_5_0_0());
            	    										

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getDtoAttributeRule());
            	    											}
            	    											setWithLastConsumed(current, "assertFalse", true, "assertFalse");
            	    										

            	    }


            	    }

            	    // InternalContextMappingDSL.g:14814:9: (otherlv_22= '=' ( (lv_assertFalseMessage_23_0= RULE_STRING ) ) )?
            	    int alt341=2;
            	    int LA341_0 = input.LA(1);

            	    if ( (LA341_0==21) ) {
            	        alt341=1;
            	    }
            	    switch (alt341) {
            	        case 1 :
            	            // InternalContextMappingDSL.g:14815:10: otherlv_22= '=' ( (lv_assertFalseMessage_23_0= RULE_STRING ) )
            	            {
            	            otherlv_22=(Token)match(input,21,FOLLOW_4); 

            	            										newLeafNode(otherlv_22, grammarAccess.getDtoAttributeAccess().getEqualsSignKeyword_6_5_1_0());
            	            									
            	            // InternalContextMappingDSL.g:14819:10: ( (lv_assertFalseMessage_23_0= RULE_STRING ) )
            	            // InternalContextMappingDSL.g:14820:11: (lv_assertFalseMessage_23_0= RULE_STRING )
            	            {
            	            // InternalContextMappingDSL.g:14820:11: (lv_assertFalseMessage_23_0= RULE_STRING )
            	            // InternalContextMappingDSL.g:14821:12: lv_assertFalseMessage_23_0= RULE_STRING
            	            {
            	            lv_assertFalseMessage_23_0=(Token)match(input,RULE_STRING,FOLLOW_176); 

            	            												newLeafNode(lv_assertFalseMessage_23_0, grammarAccess.getDtoAttributeAccess().getAssertFalseMessageSTRINGTerminalRuleCall_6_5_1_1_0());
            	            											

            	            												if (current==null) {
            	            													current = createModelElement(grammarAccess.getDtoAttributeRule());
            	            												}
            	            												setWithLastConsumed(
            	            													current,
            	            													"assertFalseMessage",
            	            													lv_assertFalseMessage_23_0,
            	            													"org.eclipse.xtext.common.Terminals.STRING");
            	            											

            	            }


            	            }


            	            }
            	            break;

            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 7 :
            	    // InternalContextMappingDSL.g:14844:4: ({...}? => ( ({...}? => ( ( (lv_assertTrue_24_0= 'assertTrue' ) ) (otherlv_25= '=' ( (lv_assertTrueMessage_26_0= RULE_STRING ) ) )? ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:14844:4: ({...}? => ( ({...}? => ( ( (lv_assertTrue_24_0= 'assertTrue' ) ) (otherlv_25= '=' ( (lv_assertTrueMessage_26_0= RULE_STRING ) ) )? ) ) ) )
            	    // InternalContextMappingDSL.g:14845:5: {...}? => ( ({...}? => ( ( (lv_assertTrue_24_0= 'assertTrue' ) ) (otherlv_25= '=' ( (lv_assertTrueMessage_26_0= RULE_STRING ) ) )? ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 6) ) {
            	        throw new FailedPredicateException(input, "ruleDtoAttribute", "getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 6)");
            	    }
            	    // InternalContextMappingDSL.g:14845:109: ( ({...}? => ( ( (lv_assertTrue_24_0= 'assertTrue' ) ) (otherlv_25= '=' ( (lv_assertTrueMessage_26_0= RULE_STRING ) ) )? ) ) )
            	    // InternalContextMappingDSL.g:14846:6: ({...}? => ( ( (lv_assertTrue_24_0= 'assertTrue' ) ) (otherlv_25= '=' ( (lv_assertTrueMessage_26_0= RULE_STRING ) ) )? ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 6);
            	    					
            	    // InternalContextMappingDSL.g:14849:9: ({...}? => ( ( (lv_assertTrue_24_0= 'assertTrue' ) ) (otherlv_25= '=' ( (lv_assertTrueMessage_26_0= RULE_STRING ) ) )? ) )
            	    // InternalContextMappingDSL.g:14849:10: {...}? => ( ( (lv_assertTrue_24_0= 'assertTrue' ) ) (otherlv_25= '=' ( (lv_assertTrueMessage_26_0= RULE_STRING ) ) )? )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleDtoAttribute", "true");
            	    }
            	    // InternalContextMappingDSL.g:14849:19: ( ( (lv_assertTrue_24_0= 'assertTrue' ) ) (otherlv_25= '=' ( (lv_assertTrueMessage_26_0= RULE_STRING ) ) )? )
            	    // InternalContextMappingDSL.g:14849:20: ( (lv_assertTrue_24_0= 'assertTrue' ) ) (otherlv_25= '=' ( (lv_assertTrueMessage_26_0= RULE_STRING ) ) )?
            	    {
            	    // InternalContextMappingDSL.g:14849:20: ( (lv_assertTrue_24_0= 'assertTrue' ) )
            	    // InternalContextMappingDSL.g:14850:10: (lv_assertTrue_24_0= 'assertTrue' )
            	    {
            	    // InternalContextMappingDSL.g:14850:10: (lv_assertTrue_24_0= 'assertTrue' )
            	    // InternalContextMappingDSL.g:14851:11: lv_assertTrue_24_0= 'assertTrue'
            	    {
            	    lv_assertTrue_24_0=(Token)match(input,137,FOLLOW_177); 

            	    											newLeafNode(lv_assertTrue_24_0, grammarAccess.getDtoAttributeAccess().getAssertTrueAssertTrueKeyword_6_6_0_0());
            	    										

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getDtoAttributeRule());
            	    											}
            	    											setWithLastConsumed(current, "assertTrue", true, "assertTrue");
            	    										

            	    }


            	    }

            	    // InternalContextMappingDSL.g:14863:9: (otherlv_25= '=' ( (lv_assertTrueMessage_26_0= RULE_STRING ) ) )?
            	    int alt342=2;
            	    int LA342_0 = input.LA(1);

            	    if ( (LA342_0==21) ) {
            	        alt342=1;
            	    }
            	    switch (alt342) {
            	        case 1 :
            	            // InternalContextMappingDSL.g:14864:10: otherlv_25= '=' ( (lv_assertTrueMessage_26_0= RULE_STRING ) )
            	            {
            	            otherlv_25=(Token)match(input,21,FOLLOW_4); 

            	            										newLeafNode(otherlv_25, grammarAccess.getDtoAttributeAccess().getEqualsSignKeyword_6_6_1_0());
            	            									
            	            // InternalContextMappingDSL.g:14868:10: ( (lv_assertTrueMessage_26_0= RULE_STRING ) )
            	            // InternalContextMappingDSL.g:14869:11: (lv_assertTrueMessage_26_0= RULE_STRING )
            	            {
            	            // InternalContextMappingDSL.g:14869:11: (lv_assertTrueMessage_26_0= RULE_STRING )
            	            // InternalContextMappingDSL.g:14870:12: lv_assertTrueMessage_26_0= RULE_STRING
            	            {
            	            lv_assertTrueMessage_26_0=(Token)match(input,RULE_STRING,FOLLOW_176); 

            	            												newLeafNode(lv_assertTrueMessage_26_0, grammarAccess.getDtoAttributeAccess().getAssertTrueMessageSTRINGTerminalRuleCall_6_6_1_1_0());
            	            											

            	            												if (current==null) {
            	            													current = createModelElement(grammarAccess.getDtoAttributeRule());
            	            												}
            	            												setWithLastConsumed(
            	            													current,
            	            													"assertTrueMessage",
            	            													lv_assertTrueMessage_26_0,
            	            													"org.eclipse.xtext.common.Terminals.STRING");
            	            											

            	            }


            	            }


            	            }
            	            break;

            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 8 :
            	    // InternalContextMappingDSL.g:14893:4: ({...}? => ( ({...}? => ( ( (lv_creditCardNumber_27_0= 'creditCardNumber' ) ) (otherlv_28= '=' ( (lv_creditCardNumberMessage_29_0= RULE_STRING ) ) )? ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:14893:4: ({...}? => ( ({...}? => ( ( (lv_creditCardNumber_27_0= 'creditCardNumber' ) ) (otherlv_28= '=' ( (lv_creditCardNumberMessage_29_0= RULE_STRING ) ) )? ) ) ) )
            	    // InternalContextMappingDSL.g:14894:5: {...}? => ( ({...}? => ( ( (lv_creditCardNumber_27_0= 'creditCardNumber' ) ) (otherlv_28= '=' ( (lv_creditCardNumberMessage_29_0= RULE_STRING ) ) )? ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 7) ) {
            	        throw new FailedPredicateException(input, "ruleDtoAttribute", "getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 7)");
            	    }
            	    // InternalContextMappingDSL.g:14894:109: ( ({...}? => ( ( (lv_creditCardNumber_27_0= 'creditCardNumber' ) ) (otherlv_28= '=' ( (lv_creditCardNumberMessage_29_0= RULE_STRING ) ) )? ) ) )
            	    // InternalContextMappingDSL.g:14895:6: ({...}? => ( ( (lv_creditCardNumber_27_0= 'creditCardNumber' ) ) (otherlv_28= '=' ( (lv_creditCardNumberMessage_29_0= RULE_STRING ) ) )? ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 7);
            	    					
            	    // InternalContextMappingDSL.g:14898:9: ({...}? => ( ( (lv_creditCardNumber_27_0= 'creditCardNumber' ) ) (otherlv_28= '=' ( (lv_creditCardNumberMessage_29_0= RULE_STRING ) ) )? ) )
            	    // InternalContextMappingDSL.g:14898:10: {...}? => ( ( (lv_creditCardNumber_27_0= 'creditCardNumber' ) ) (otherlv_28= '=' ( (lv_creditCardNumberMessage_29_0= RULE_STRING ) ) )? )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleDtoAttribute", "true");
            	    }
            	    // InternalContextMappingDSL.g:14898:19: ( ( (lv_creditCardNumber_27_0= 'creditCardNumber' ) ) (otherlv_28= '=' ( (lv_creditCardNumberMessage_29_0= RULE_STRING ) ) )? )
            	    // InternalContextMappingDSL.g:14898:20: ( (lv_creditCardNumber_27_0= 'creditCardNumber' ) ) (otherlv_28= '=' ( (lv_creditCardNumberMessage_29_0= RULE_STRING ) ) )?
            	    {
            	    // InternalContextMappingDSL.g:14898:20: ( (lv_creditCardNumber_27_0= 'creditCardNumber' ) )
            	    // InternalContextMappingDSL.g:14899:10: (lv_creditCardNumber_27_0= 'creditCardNumber' )
            	    {
            	    // InternalContextMappingDSL.g:14899:10: (lv_creditCardNumber_27_0= 'creditCardNumber' )
            	    // InternalContextMappingDSL.g:14900:11: lv_creditCardNumber_27_0= 'creditCardNumber'
            	    {
            	    lv_creditCardNumber_27_0=(Token)match(input,138,FOLLOW_177); 

            	    											newLeafNode(lv_creditCardNumber_27_0, grammarAccess.getDtoAttributeAccess().getCreditCardNumberCreditCardNumberKeyword_6_7_0_0());
            	    										

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getDtoAttributeRule());
            	    											}
            	    											setWithLastConsumed(current, "creditCardNumber", true, "creditCardNumber");
            	    										

            	    }


            	    }

            	    // InternalContextMappingDSL.g:14912:9: (otherlv_28= '=' ( (lv_creditCardNumberMessage_29_0= RULE_STRING ) ) )?
            	    int alt343=2;
            	    int LA343_0 = input.LA(1);

            	    if ( (LA343_0==21) ) {
            	        alt343=1;
            	    }
            	    switch (alt343) {
            	        case 1 :
            	            // InternalContextMappingDSL.g:14913:10: otherlv_28= '=' ( (lv_creditCardNumberMessage_29_0= RULE_STRING ) )
            	            {
            	            otherlv_28=(Token)match(input,21,FOLLOW_4); 

            	            										newLeafNode(otherlv_28, grammarAccess.getDtoAttributeAccess().getEqualsSignKeyword_6_7_1_0());
            	            									
            	            // InternalContextMappingDSL.g:14917:10: ( (lv_creditCardNumberMessage_29_0= RULE_STRING ) )
            	            // InternalContextMappingDSL.g:14918:11: (lv_creditCardNumberMessage_29_0= RULE_STRING )
            	            {
            	            // InternalContextMappingDSL.g:14918:11: (lv_creditCardNumberMessage_29_0= RULE_STRING )
            	            // InternalContextMappingDSL.g:14919:12: lv_creditCardNumberMessage_29_0= RULE_STRING
            	            {
            	            lv_creditCardNumberMessage_29_0=(Token)match(input,RULE_STRING,FOLLOW_176); 

            	            												newLeafNode(lv_creditCardNumberMessage_29_0, grammarAccess.getDtoAttributeAccess().getCreditCardNumberMessageSTRINGTerminalRuleCall_6_7_1_1_0());
            	            											

            	            												if (current==null) {
            	            													current = createModelElement(grammarAccess.getDtoAttributeRule());
            	            												}
            	            												setWithLastConsumed(
            	            													current,
            	            													"creditCardNumberMessage",
            	            													lv_creditCardNumberMessage_29_0,
            	            													"org.eclipse.xtext.common.Terminals.STRING");
            	            											

            	            }


            	            }


            	            }
            	            break;

            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 9 :
            	    // InternalContextMappingDSL.g:14942:4: ({...}? => ( ({...}? => (otherlv_30= 'digits' otherlv_31= '=' ( (lv_digits_32_0= RULE_STRING ) ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:14942:4: ({...}? => ( ({...}? => (otherlv_30= 'digits' otherlv_31= '=' ( (lv_digits_32_0= RULE_STRING ) ) ) ) ) )
            	    // InternalContextMappingDSL.g:14943:5: {...}? => ( ({...}? => (otherlv_30= 'digits' otherlv_31= '=' ( (lv_digits_32_0= RULE_STRING ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 8) ) {
            	        throw new FailedPredicateException(input, "ruleDtoAttribute", "getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 8)");
            	    }
            	    // InternalContextMappingDSL.g:14943:109: ( ({...}? => (otherlv_30= 'digits' otherlv_31= '=' ( (lv_digits_32_0= RULE_STRING ) ) ) ) )
            	    // InternalContextMappingDSL.g:14944:6: ({...}? => (otherlv_30= 'digits' otherlv_31= '=' ( (lv_digits_32_0= RULE_STRING ) ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 8);
            	    					
            	    // InternalContextMappingDSL.g:14947:9: ({...}? => (otherlv_30= 'digits' otherlv_31= '=' ( (lv_digits_32_0= RULE_STRING ) ) ) )
            	    // InternalContextMappingDSL.g:14947:10: {...}? => (otherlv_30= 'digits' otherlv_31= '=' ( (lv_digits_32_0= RULE_STRING ) ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleDtoAttribute", "true");
            	    }
            	    // InternalContextMappingDSL.g:14947:19: (otherlv_30= 'digits' otherlv_31= '=' ( (lv_digits_32_0= RULE_STRING ) ) )
            	    // InternalContextMappingDSL.g:14947:20: otherlv_30= 'digits' otherlv_31= '=' ( (lv_digits_32_0= RULE_STRING ) )
            	    {
            	    otherlv_30=(Token)match(input,139,FOLLOW_81); 

            	    									newLeafNode(otherlv_30, grammarAccess.getDtoAttributeAccess().getDigitsKeyword_6_8_0());
            	    								
            	    otherlv_31=(Token)match(input,21,FOLLOW_4); 

            	    									newLeafNode(otherlv_31, grammarAccess.getDtoAttributeAccess().getEqualsSignKeyword_6_8_1());
            	    								
            	    // InternalContextMappingDSL.g:14955:9: ( (lv_digits_32_0= RULE_STRING ) )
            	    // InternalContextMappingDSL.g:14956:10: (lv_digits_32_0= RULE_STRING )
            	    {
            	    // InternalContextMappingDSL.g:14956:10: (lv_digits_32_0= RULE_STRING )
            	    // InternalContextMappingDSL.g:14957:11: lv_digits_32_0= RULE_STRING
            	    {
            	    lv_digits_32_0=(Token)match(input,RULE_STRING,FOLLOW_176); 

            	    											newLeafNode(lv_digits_32_0, grammarAccess.getDtoAttributeAccess().getDigitsSTRINGTerminalRuleCall_6_8_2_0());
            	    										

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getDtoAttributeRule());
            	    											}
            	    											setWithLastConsumed(
            	    												current,
            	    												"digits",
            	    												lv_digits_32_0,
            	    												"org.eclipse.xtext.common.Terminals.STRING");
            	    										

            	    }


            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 10 :
            	    // InternalContextMappingDSL.g:14979:4: ({...}? => ( ({...}? => ( ( (lv_email_33_0= 'email' ) ) (otherlv_34= '=' ( (lv_emailMessage_35_0= RULE_STRING ) ) )? ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:14979:4: ({...}? => ( ({...}? => ( ( (lv_email_33_0= 'email' ) ) (otherlv_34= '=' ( (lv_emailMessage_35_0= RULE_STRING ) ) )? ) ) ) )
            	    // InternalContextMappingDSL.g:14980:5: {...}? => ( ({...}? => ( ( (lv_email_33_0= 'email' ) ) (otherlv_34= '=' ( (lv_emailMessage_35_0= RULE_STRING ) ) )? ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 9) ) {
            	        throw new FailedPredicateException(input, "ruleDtoAttribute", "getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 9)");
            	    }
            	    // InternalContextMappingDSL.g:14980:109: ( ({...}? => ( ( (lv_email_33_0= 'email' ) ) (otherlv_34= '=' ( (lv_emailMessage_35_0= RULE_STRING ) ) )? ) ) )
            	    // InternalContextMappingDSL.g:14981:6: ({...}? => ( ( (lv_email_33_0= 'email' ) ) (otherlv_34= '=' ( (lv_emailMessage_35_0= RULE_STRING ) ) )? ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 9);
            	    					
            	    // InternalContextMappingDSL.g:14984:9: ({...}? => ( ( (lv_email_33_0= 'email' ) ) (otherlv_34= '=' ( (lv_emailMessage_35_0= RULE_STRING ) ) )? ) )
            	    // InternalContextMappingDSL.g:14984:10: {...}? => ( ( (lv_email_33_0= 'email' ) ) (otherlv_34= '=' ( (lv_emailMessage_35_0= RULE_STRING ) ) )? )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleDtoAttribute", "true");
            	    }
            	    // InternalContextMappingDSL.g:14984:19: ( ( (lv_email_33_0= 'email' ) ) (otherlv_34= '=' ( (lv_emailMessage_35_0= RULE_STRING ) ) )? )
            	    // InternalContextMappingDSL.g:14984:20: ( (lv_email_33_0= 'email' ) ) (otherlv_34= '=' ( (lv_emailMessage_35_0= RULE_STRING ) ) )?
            	    {
            	    // InternalContextMappingDSL.g:14984:20: ( (lv_email_33_0= 'email' ) )
            	    // InternalContextMappingDSL.g:14985:10: (lv_email_33_0= 'email' )
            	    {
            	    // InternalContextMappingDSL.g:14985:10: (lv_email_33_0= 'email' )
            	    // InternalContextMappingDSL.g:14986:11: lv_email_33_0= 'email'
            	    {
            	    lv_email_33_0=(Token)match(input,140,FOLLOW_177); 

            	    											newLeafNode(lv_email_33_0, grammarAccess.getDtoAttributeAccess().getEmailEmailKeyword_6_9_0_0());
            	    										

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getDtoAttributeRule());
            	    											}
            	    											setWithLastConsumed(current, "email", true, "email");
            	    										

            	    }


            	    }

            	    // InternalContextMappingDSL.g:14998:9: (otherlv_34= '=' ( (lv_emailMessage_35_0= RULE_STRING ) ) )?
            	    int alt344=2;
            	    int LA344_0 = input.LA(1);

            	    if ( (LA344_0==21) ) {
            	        alt344=1;
            	    }
            	    switch (alt344) {
            	        case 1 :
            	            // InternalContextMappingDSL.g:14999:10: otherlv_34= '=' ( (lv_emailMessage_35_0= RULE_STRING ) )
            	            {
            	            otherlv_34=(Token)match(input,21,FOLLOW_4); 

            	            										newLeafNode(otherlv_34, grammarAccess.getDtoAttributeAccess().getEqualsSignKeyword_6_9_1_0());
            	            									
            	            // InternalContextMappingDSL.g:15003:10: ( (lv_emailMessage_35_0= RULE_STRING ) )
            	            // InternalContextMappingDSL.g:15004:11: (lv_emailMessage_35_0= RULE_STRING )
            	            {
            	            // InternalContextMappingDSL.g:15004:11: (lv_emailMessage_35_0= RULE_STRING )
            	            // InternalContextMappingDSL.g:15005:12: lv_emailMessage_35_0= RULE_STRING
            	            {
            	            lv_emailMessage_35_0=(Token)match(input,RULE_STRING,FOLLOW_176); 

            	            												newLeafNode(lv_emailMessage_35_0, grammarAccess.getDtoAttributeAccess().getEmailMessageSTRINGTerminalRuleCall_6_9_1_1_0());
            	            											

            	            												if (current==null) {
            	            													current = createModelElement(grammarAccess.getDtoAttributeRule());
            	            												}
            	            												setWithLastConsumed(
            	            													current,
            	            													"emailMessage",
            	            													lv_emailMessage_35_0,
            	            													"org.eclipse.xtext.common.Terminals.STRING");
            	            											

            	            }


            	            }


            	            }
            	            break;

            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 11 :
            	    // InternalContextMappingDSL.g:15028:4: ({...}? => ( ({...}? => ( ( (lv_future_36_0= 'future' ) ) (otherlv_37= '=' ( (lv_futureMessage_38_0= RULE_STRING ) ) )? ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:15028:4: ({...}? => ( ({...}? => ( ( (lv_future_36_0= 'future' ) ) (otherlv_37= '=' ( (lv_futureMessage_38_0= RULE_STRING ) ) )? ) ) ) )
            	    // InternalContextMappingDSL.g:15029:5: {...}? => ( ({...}? => ( ( (lv_future_36_0= 'future' ) ) (otherlv_37= '=' ( (lv_futureMessage_38_0= RULE_STRING ) ) )? ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 10) ) {
            	        throw new FailedPredicateException(input, "ruleDtoAttribute", "getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 10)");
            	    }
            	    // InternalContextMappingDSL.g:15029:110: ( ({...}? => ( ( (lv_future_36_0= 'future' ) ) (otherlv_37= '=' ( (lv_futureMessage_38_0= RULE_STRING ) ) )? ) ) )
            	    // InternalContextMappingDSL.g:15030:6: ({...}? => ( ( (lv_future_36_0= 'future' ) ) (otherlv_37= '=' ( (lv_futureMessage_38_0= RULE_STRING ) ) )? ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 10);
            	    					
            	    // InternalContextMappingDSL.g:15033:9: ({...}? => ( ( (lv_future_36_0= 'future' ) ) (otherlv_37= '=' ( (lv_futureMessage_38_0= RULE_STRING ) ) )? ) )
            	    // InternalContextMappingDSL.g:15033:10: {...}? => ( ( (lv_future_36_0= 'future' ) ) (otherlv_37= '=' ( (lv_futureMessage_38_0= RULE_STRING ) ) )? )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleDtoAttribute", "true");
            	    }
            	    // InternalContextMappingDSL.g:15033:19: ( ( (lv_future_36_0= 'future' ) ) (otherlv_37= '=' ( (lv_futureMessage_38_0= RULE_STRING ) ) )? )
            	    // InternalContextMappingDSL.g:15033:20: ( (lv_future_36_0= 'future' ) ) (otherlv_37= '=' ( (lv_futureMessage_38_0= RULE_STRING ) ) )?
            	    {
            	    // InternalContextMappingDSL.g:15033:20: ( (lv_future_36_0= 'future' ) )
            	    // InternalContextMappingDSL.g:15034:10: (lv_future_36_0= 'future' )
            	    {
            	    // InternalContextMappingDSL.g:15034:10: (lv_future_36_0= 'future' )
            	    // InternalContextMappingDSL.g:15035:11: lv_future_36_0= 'future'
            	    {
            	    lv_future_36_0=(Token)match(input,141,FOLLOW_177); 

            	    											newLeafNode(lv_future_36_0, grammarAccess.getDtoAttributeAccess().getFutureFutureKeyword_6_10_0_0());
            	    										

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getDtoAttributeRule());
            	    											}
            	    											setWithLastConsumed(current, "future", true, "future");
            	    										

            	    }


            	    }

            	    // InternalContextMappingDSL.g:15047:9: (otherlv_37= '=' ( (lv_futureMessage_38_0= RULE_STRING ) ) )?
            	    int alt345=2;
            	    int LA345_0 = input.LA(1);

            	    if ( (LA345_0==21) ) {
            	        alt345=1;
            	    }
            	    switch (alt345) {
            	        case 1 :
            	            // InternalContextMappingDSL.g:15048:10: otherlv_37= '=' ( (lv_futureMessage_38_0= RULE_STRING ) )
            	            {
            	            otherlv_37=(Token)match(input,21,FOLLOW_4); 

            	            										newLeafNode(otherlv_37, grammarAccess.getDtoAttributeAccess().getEqualsSignKeyword_6_10_1_0());
            	            									
            	            // InternalContextMappingDSL.g:15052:10: ( (lv_futureMessage_38_0= RULE_STRING ) )
            	            // InternalContextMappingDSL.g:15053:11: (lv_futureMessage_38_0= RULE_STRING )
            	            {
            	            // InternalContextMappingDSL.g:15053:11: (lv_futureMessage_38_0= RULE_STRING )
            	            // InternalContextMappingDSL.g:15054:12: lv_futureMessage_38_0= RULE_STRING
            	            {
            	            lv_futureMessage_38_0=(Token)match(input,RULE_STRING,FOLLOW_176); 

            	            												newLeafNode(lv_futureMessage_38_0, grammarAccess.getDtoAttributeAccess().getFutureMessageSTRINGTerminalRuleCall_6_10_1_1_0());
            	            											

            	            												if (current==null) {
            	            													current = createModelElement(grammarAccess.getDtoAttributeRule());
            	            												}
            	            												setWithLastConsumed(
            	            													current,
            	            													"futureMessage",
            	            													lv_futureMessage_38_0,
            	            													"org.eclipse.xtext.common.Terminals.STRING");
            	            											

            	            }


            	            }


            	            }
            	            break;

            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 12 :
            	    // InternalContextMappingDSL.g:15077:4: ({...}? => ( ({...}? => ( ( (lv_past_39_0= 'past' ) ) (otherlv_40= '=' ( (lv_pastMessage_41_0= RULE_STRING ) ) )? ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:15077:4: ({...}? => ( ({...}? => ( ( (lv_past_39_0= 'past' ) ) (otherlv_40= '=' ( (lv_pastMessage_41_0= RULE_STRING ) ) )? ) ) ) )
            	    // InternalContextMappingDSL.g:15078:5: {...}? => ( ({...}? => ( ( (lv_past_39_0= 'past' ) ) (otherlv_40= '=' ( (lv_pastMessage_41_0= RULE_STRING ) ) )? ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 11) ) {
            	        throw new FailedPredicateException(input, "ruleDtoAttribute", "getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 11)");
            	    }
            	    // InternalContextMappingDSL.g:15078:110: ( ({...}? => ( ( (lv_past_39_0= 'past' ) ) (otherlv_40= '=' ( (lv_pastMessage_41_0= RULE_STRING ) ) )? ) ) )
            	    // InternalContextMappingDSL.g:15079:6: ({...}? => ( ( (lv_past_39_0= 'past' ) ) (otherlv_40= '=' ( (lv_pastMessage_41_0= RULE_STRING ) ) )? ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 11);
            	    					
            	    // InternalContextMappingDSL.g:15082:9: ({...}? => ( ( (lv_past_39_0= 'past' ) ) (otherlv_40= '=' ( (lv_pastMessage_41_0= RULE_STRING ) ) )? ) )
            	    // InternalContextMappingDSL.g:15082:10: {...}? => ( ( (lv_past_39_0= 'past' ) ) (otherlv_40= '=' ( (lv_pastMessage_41_0= RULE_STRING ) ) )? )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleDtoAttribute", "true");
            	    }
            	    // InternalContextMappingDSL.g:15082:19: ( ( (lv_past_39_0= 'past' ) ) (otherlv_40= '=' ( (lv_pastMessage_41_0= RULE_STRING ) ) )? )
            	    // InternalContextMappingDSL.g:15082:20: ( (lv_past_39_0= 'past' ) ) (otherlv_40= '=' ( (lv_pastMessage_41_0= RULE_STRING ) ) )?
            	    {
            	    // InternalContextMappingDSL.g:15082:20: ( (lv_past_39_0= 'past' ) )
            	    // InternalContextMappingDSL.g:15083:10: (lv_past_39_0= 'past' )
            	    {
            	    // InternalContextMappingDSL.g:15083:10: (lv_past_39_0= 'past' )
            	    // InternalContextMappingDSL.g:15084:11: lv_past_39_0= 'past'
            	    {
            	    lv_past_39_0=(Token)match(input,142,FOLLOW_177); 

            	    											newLeafNode(lv_past_39_0, grammarAccess.getDtoAttributeAccess().getPastPastKeyword_6_11_0_0());
            	    										

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getDtoAttributeRule());
            	    											}
            	    											setWithLastConsumed(current, "past", true, "past");
            	    										

            	    }


            	    }

            	    // InternalContextMappingDSL.g:15096:9: (otherlv_40= '=' ( (lv_pastMessage_41_0= RULE_STRING ) ) )?
            	    int alt346=2;
            	    int LA346_0 = input.LA(1);

            	    if ( (LA346_0==21) ) {
            	        alt346=1;
            	    }
            	    switch (alt346) {
            	        case 1 :
            	            // InternalContextMappingDSL.g:15097:10: otherlv_40= '=' ( (lv_pastMessage_41_0= RULE_STRING ) )
            	            {
            	            otherlv_40=(Token)match(input,21,FOLLOW_4); 

            	            										newLeafNode(otherlv_40, grammarAccess.getDtoAttributeAccess().getEqualsSignKeyword_6_11_1_0());
            	            									
            	            // InternalContextMappingDSL.g:15101:10: ( (lv_pastMessage_41_0= RULE_STRING ) )
            	            // InternalContextMappingDSL.g:15102:11: (lv_pastMessage_41_0= RULE_STRING )
            	            {
            	            // InternalContextMappingDSL.g:15102:11: (lv_pastMessage_41_0= RULE_STRING )
            	            // InternalContextMappingDSL.g:15103:12: lv_pastMessage_41_0= RULE_STRING
            	            {
            	            lv_pastMessage_41_0=(Token)match(input,RULE_STRING,FOLLOW_176); 

            	            												newLeafNode(lv_pastMessage_41_0, grammarAccess.getDtoAttributeAccess().getPastMessageSTRINGTerminalRuleCall_6_11_1_1_0());
            	            											

            	            												if (current==null) {
            	            													current = createModelElement(grammarAccess.getDtoAttributeRule());
            	            												}
            	            												setWithLastConsumed(
            	            													current,
            	            													"pastMessage",
            	            													lv_pastMessage_41_0,
            	            													"org.eclipse.xtext.common.Terminals.STRING");
            	            											

            	            }


            	            }


            	            }
            	            break;

            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 13 :
            	    // InternalContextMappingDSL.g:15126:4: ({...}? => ( ({...}? => (otherlv_42= 'max' otherlv_43= '=' ( (lv_max_44_0= RULE_STRING ) ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:15126:4: ({...}? => ( ({...}? => (otherlv_42= 'max' otherlv_43= '=' ( (lv_max_44_0= RULE_STRING ) ) ) ) ) )
            	    // InternalContextMappingDSL.g:15127:5: {...}? => ( ({...}? => (otherlv_42= 'max' otherlv_43= '=' ( (lv_max_44_0= RULE_STRING ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 12) ) {
            	        throw new FailedPredicateException(input, "ruleDtoAttribute", "getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 12)");
            	    }
            	    // InternalContextMappingDSL.g:15127:110: ( ({...}? => (otherlv_42= 'max' otherlv_43= '=' ( (lv_max_44_0= RULE_STRING ) ) ) ) )
            	    // InternalContextMappingDSL.g:15128:6: ({...}? => (otherlv_42= 'max' otherlv_43= '=' ( (lv_max_44_0= RULE_STRING ) ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 12);
            	    					
            	    // InternalContextMappingDSL.g:15131:9: ({...}? => (otherlv_42= 'max' otherlv_43= '=' ( (lv_max_44_0= RULE_STRING ) ) ) )
            	    // InternalContextMappingDSL.g:15131:10: {...}? => (otherlv_42= 'max' otherlv_43= '=' ( (lv_max_44_0= RULE_STRING ) ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleDtoAttribute", "true");
            	    }
            	    // InternalContextMappingDSL.g:15131:19: (otherlv_42= 'max' otherlv_43= '=' ( (lv_max_44_0= RULE_STRING ) ) )
            	    // InternalContextMappingDSL.g:15131:20: otherlv_42= 'max' otherlv_43= '=' ( (lv_max_44_0= RULE_STRING ) )
            	    {
            	    otherlv_42=(Token)match(input,143,FOLLOW_81); 

            	    									newLeafNode(otherlv_42, grammarAccess.getDtoAttributeAccess().getMaxKeyword_6_12_0());
            	    								
            	    otherlv_43=(Token)match(input,21,FOLLOW_4); 

            	    									newLeafNode(otherlv_43, grammarAccess.getDtoAttributeAccess().getEqualsSignKeyword_6_12_1());
            	    								
            	    // InternalContextMappingDSL.g:15139:9: ( (lv_max_44_0= RULE_STRING ) )
            	    // InternalContextMappingDSL.g:15140:10: (lv_max_44_0= RULE_STRING )
            	    {
            	    // InternalContextMappingDSL.g:15140:10: (lv_max_44_0= RULE_STRING )
            	    // InternalContextMappingDSL.g:15141:11: lv_max_44_0= RULE_STRING
            	    {
            	    lv_max_44_0=(Token)match(input,RULE_STRING,FOLLOW_176); 

            	    											newLeafNode(lv_max_44_0, grammarAccess.getDtoAttributeAccess().getMaxSTRINGTerminalRuleCall_6_12_2_0());
            	    										

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getDtoAttributeRule());
            	    											}
            	    											setWithLastConsumed(
            	    												current,
            	    												"max",
            	    												lv_max_44_0,
            	    												"org.eclipse.xtext.common.Terminals.STRING");
            	    										

            	    }


            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 14 :
            	    // InternalContextMappingDSL.g:15163:4: ({...}? => ( ({...}? => (otherlv_45= 'min' otherlv_46= '=' ( (lv_min_47_0= RULE_STRING ) ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:15163:4: ({...}? => ( ({...}? => (otherlv_45= 'min' otherlv_46= '=' ( (lv_min_47_0= RULE_STRING ) ) ) ) ) )
            	    // InternalContextMappingDSL.g:15164:5: {...}? => ( ({...}? => (otherlv_45= 'min' otherlv_46= '=' ( (lv_min_47_0= RULE_STRING ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 13) ) {
            	        throw new FailedPredicateException(input, "ruleDtoAttribute", "getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 13)");
            	    }
            	    // InternalContextMappingDSL.g:15164:110: ( ({...}? => (otherlv_45= 'min' otherlv_46= '=' ( (lv_min_47_0= RULE_STRING ) ) ) ) )
            	    // InternalContextMappingDSL.g:15165:6: ({...}? => (otherlv_45= 'min' otherlv_46= '=' ( (lv_min_47_0= RULE_STRING ) ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 13);
            	    					
            	    // InternalContextMappingDSL.g:15168:9: ({...}? => (otherlv_45= 'min' otherlv_46= '=' ( (lv_min_47_0= RULE_STRING ) ) ) )
            	    // InternalContextMappingDSL.g:15168:10: {...}? => (otherlv_45= 'min' otherlv_46= '=' ( (lv_min_47_0= RULE_STRING ) ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleDtoAttribute", "true");
            	    }
            	    // InternalContextMappingDSL.g:15168:19: (otherlv_45= 'min' otherlv_46= '=' ( (lv_min_47_0= RULE_STRING ) ) )
            	    // InternalContextMappingDSL.g:15168:20: otherlv_45= 'min' otherlv_46= '=' ( (lv_min_47_0= RULE_STRING ) )
            	    {
            	    otherlv_45=(Token)match(input,144,FOLLOW_81); 

            	    									newLeafNode(otherlv_45, grammarAccess.getDtoAttributeAccess().getMinKeyword_6_13_0());
            	    								
            	    otherlv_46=(Token)match(input,21,FOLLOW_4); 

            	    									newLeafNode(otherlv_46, grammarAccess.getDtoAttributeAccess().getEqualsSignKeyword_6_13_1());
            	    								
            	    // InternalContextMappingDSL.g:15176:9: ( (lv_min_47_0= RULE_STRING ) )
            	    // InternalContextMappingDSL.g:15177:10: (lv_min_47_0= RULE_STRING )
            	    {
            	    // InternalContextMappingDSL.g:15177:10: (lv_min_47_0= RULE_STRING )
            	    // InternalContextMappingDSL.g:15178:11: lv_min_47_0= RULE_STRING
            	    {
            	    lv_min_47_0=(Token)match(input,RULE_STRING,FOLLOW_176); 

            	    											newLeafNode(lv_min_47_0, grammarAccess.getDtoAttributeAccess().getMinSTRINGTerminalRuleCall_6_13_2_0());
            	    										

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getDtoAttributeRule());
            	    											}
            	    											setWithLastConsumed(
            	    												current,
            	    												"min",
            	    												lv_min_47_0,
            	    												"org.eclipse.xtext.common.Terminals.STRING");
            	    										

            	    }


            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 15 :
            	    // InternalContextMappingDSL.g:15200:4: ({...}? => ( ({...}? => (otherlv_48= 'decimalMax' otherlv_49= '=' ( (lv_decimalMax_50_0= RULE_STRING ) ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:15200:4: ({...}? => ( ({...}? => (otherlv_48= 'decimalMax' otherlv_49= '=' ( (lv_decimalMax_50_0= RULE_STRING ) ) ) ) ) )
            	    // InternalContextMappingDSL.g:15201:5: {...}? => ( ({...}? => (otherlv_48= 'decimalMax' otherlv_49= '=' ( (lv_decimalMax_50_0= RULE_STRING ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 14) ) {
            	        throw new FailedPredicateException(input, "ruleDtoAttribute", "getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 14)");
            	    }
            	    // InternalContextMappingDSL.g:15201:110: ( ({...}? => (otherlv_48= 'decimalMax' otherlv_49= '=' ( (lv_decimalMax_50_0= RULE_STRING ) ) ) ) )
            	    // InternalContextMappingDSL.g:15202:6: ({...}? => (otherlv_48= 'decimalMax' otherlv_49= '=' ( (lv_decimalMax_50_0= RULE_STRING ) ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 14);
            	    					
            	    // InternalContextMappingDSL.g:15205:9: ({...}? => (otherlv_48= 'decimalMax' otherlv_49= '=' ( (lv_decimalMax_50_0= RULE_STRING ) ) ) )
            	    // InternalContextMappingDSL.g:15205:10: {...}? => (otherlv_48= 'decimalMax' otherlv_49= '=' ( (lv_decimalMax_50_0= RULE_STRING ) ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleDtoAttribute", "true");
            	    }
            	    // InternalContextMappingDSL.g:15205:19: (otherlv_48= 'decimalMax' otherlv_49= '=' ( (lv_decimalMax_50_0= RULE_STRING ) ) )
            	    // InternalContextMappingDSL.g:15205:20: otherlv_48= 'decimalMax' otherlv_49= '=' ( (lv_decimalMax_50_0= RULE_STRING ) )
            	    {
            	    otherlv_48=(Token)match(input,145,FOLLOW_81); 

            	    									newLeafNode(otherlv_48, grammarAccess.getDtoAttributeAccess().getDecimalMaxKeyword_6_14_0());
            	    								
            	    otherlv_49=(Token)match(input,21,FOLLOW_4); 

            	    									newLeafNode(otherlv_49, grammarAccess.getDtoAttributeAccess().getEqualsSignKeyword_6_14_1());
            	    								
            	    // InternalContextMappingDSL.g:15213:9: ( (lv_decimalMax_50_0= RULE_STRING ) )
            	    // InternalContextMappingDSL.g:15214:10: (lv_decimalMax_50_0= RULE_STRING )
            	    {
            	    // InternalContextMappingDSL.g:15214:10: (lv_decimalMax_50_0= RULE_STRING )
            	    // InternalContextMappingDSL.g:15215:11: lv_decimalMax_50_0= RULE_STRING
            	    {
            	    lv_decimalMax_50_0=(Token)match(input,RULE_STRING,FOLLOW_176); 

            	    											newLeafNode(lv_decimalMax_50_0, grammarAccess.getDtoAttributeAccess().getDecimalMaxSTRINGTerminalRuleCall_6_14_2_0());
            	    										

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getDtoAttributeRule());
            	    											}
            	    											setWithLastConsumed(
            	    												current,
            	    												"decimalMax",
            	    												lv_decimalMax_50_0,
            	    												"org.eclipse.xtext.common.Terminals.STRING");
            	    										

            	    }


            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 16 :
            	    // InternalContextMappingDSL.g:15237:4: ({...}? => ( ({...}? => (otherlv_51= 'decimalMin' otherlv_52= '=' ( (lv_decimalMin_53_0= RULE_STRING ) ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:15237:4: ({...}? => ( ({...}? => (otherlv_51= 'decimalMin' otherlv_52= '=' ( (lv_decimalMin_53_0= RULE_STRING ) ) ) ) ) )
            	    // InternalContextMappingDSL.g:15238:5: {...}? => ( ({...}? => (otherlv_51= 'decimalMin' otherlv_52= '=' ( (lv_decimalMin_53_0= RULE_STRING ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 15) ) {
            	        throw new FailedPredicateException(input, "ruleDtoAttribute", "getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 15)");
            	    }
            	    // InternalContextMappingDSL.g:15238:110: ( ({...}? => (otherlv_51= 'decimalMin' otherlv_52= '=' ( (lv_decimalMin_53_0= RULE_STRING ) ) ) ) )
            	    // InternalContextMappingDSL.g:15239:6: ({...}? => (otherlv_51= 'decimalMin' otherlv_52= '=' ( (lv_decimalMin_53_0= RULE_STRING ) ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 15);
            	    					
            	    // InternalContextMappingDSL.g:15242:9: ({...}? => (otherlv_51= 'decimalMin' otherlv_52= '=' ( (lv_decimalMin_53_0= RULE_STRING ) ) ) )
            	    // InternalContextMappingDSL.g:15242:10: {...}? => (otherlv_51= 'decimalMin' otherlv_52= '=' ( (lv_decimalMin_53_0= RULE_STRING ) ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleDtoAttribute", "true");
            	    }
            	    // InternalContextMappingDSL.g:15242:19: (otherlv_51= 'decimalMin' otherlv_52= '=' ( (lv_decimalMin_53_0= RULE_STRING ) ) )
            	    // InternalContextMappingDSL.g:15242:20: otherlv_51= 'decimalMin' otherlv_52= '=' ( (lv_decimalMin_53_0= RULE_STRING ) )
            	    {
            	    otherlv_51=(Token)match(input,146,FOLLOW_81); 

            	    									newLeafNode(otherlv_51, grammarAccess.getDtoAttributeAccess().getDecimalMinKeyword_6_15_0());
            	    								
            	    otherlv_52=(Token)match(input,21,FOLLOW_4); 

            	    									newLeafNode(otherlv_52, grammarAccess.getDtoAttributeAccess().getEqualsSignKeyword_6_15_1());
            	    								
            	    // InternalContextMappingDSL.g:15250:9: ( (lv_decimalMin_53_0= RULE_STRING ) )
            	    // InternalContextMappingDSL.g:15251:10: (lv_decimalMin_53_0= RULE_STRING )
            	    {
            	    // InternalContextMappingDSL.g:15251:10: (lv_decimalMin_53_0= RULE_STRING )
            	    // InternalContextMappingDSL.g:15252:11: lv_decimalMin_53_0= RULE_STRING
            	    {
            	    lv_decimalMin_53_0=(Token)match(input,RULE_STRING,FOLLOW_176); 

            	    											newLeafNode(lv_decimalMin_53_0, grammarAccess.getDtoAttributeAccess().getDecimalMinSTRINGTerminalRuleCall_6_15_2_0());
            	    										

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getDtoAttributeRule());
            	    											}
            	    											setWithLastConsumed(
            	    												current,
            	    												"decimalMin",
            	    												lv_decimalMin_53_0,
            	    												"org.eclipse.xtext.common.Terminals.STRING");
            	    										

            	    }


            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 17 :
            	    // InternalContextMappingDSL.g:15274:4: ({...}? => ( ({...}? => ( ( (lv_notEmpty_54_0= 'notEmpty' ) ) (otherlv_55= '=' ( (lv_notEmptyMessage_56_0= RULE_STRING ) ) )? ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:15274:4: ({...}? => ( ({...}? => ( ( (lv_notEmpty_54_0= 'notEmpty' ) ) (otherlv_55= '=' ( (lv_notEmptyMessage_56_0= RULE_STRING ) ) )? ) ) ) )
            	    // InternalContextMappingDSL.g:15275:5: {...}? => ( ({...}? => ( ( (lv_notEmpty_54_0= 'notEmpty' ) ) (otherlv_55= '=' ( (lv_notEmptyMessage_56_0= RULE_STRING ) ) )? ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 16) ) {
            	        throw new FailedPredicateException(input, "ruleDtoAttribute", "getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 16)");
            	    }
            	    // InternalContextMappingDSL.g:15275:110: ( ({...}? => ( ( (lv_notEmpty_54_0= 'notEmpty' ) ) (otherlv_55= '=' ( (lv_notEmptyMessage_56_0= RULE_STRING ) ) )? ) ) )
            	    // InternalContextMappingDSL.g:15276:6: ({...}? => ( ( (lv_notEmpty_54_0= 'notEmpty' ) ) (otherlv_55= '=' ( (lv_notEmptyMessage_56_0= RULE_STRING ) ) )? ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 16);
            	    					
            	    // InternalContextMappingDSL.g:15279:9: ({...}? => ( ( (lv_notEmpty_54_0= 'notEmpty' ) ) (otherlv_55= '=' ( (lv_notEmptyMessage_56_0= RULE_STRING ) ) )? ) )
            	    // InternalContextMappingDSL.g:15279:10: {...}? => ( ( (lv_notEmpty_54_0= 'notEmpty' ) ) (otherlv_55= '=' ( (lv_notEmptyMessage_56_0= RULE_STRING ) ) )? )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleDtoAttribute", "true");
            	    }
            	    // InternalContextMappingDSL.g:15279:19: ( ( (lv_notEmpty_54_0= 'notEmpty' ) ) (otherlv_55= '=' ( (lv_notEmptyMessage_56_0= RULE_STRING ) ) )? )
            	    // InternalContextMappingDSL.g:15279:20: ( (lv_notEmpty_54_0= 'notEmpty' ) ) (otherlv_55= '=' ( (lv_notEmptyMessage_56_0= RULE_STRING ) ) )?
            	    {
            	    // InternalContextMappingDSL.g:15279:20: ( (lv_notEmpty_54_0= 'notEmpty' ) )
            	    // InternalContextMappingDSL.g:15280:10: (lv_notEmpty_54_0= 'notEmpty' )
            	    {
            	    // InternalContextMappingDSL.g:15280:10: (lv_notEmpty_54_0= 'notEmpty' )
            	    // InternalContextMappingDSL.g:15281:11: lv_notEmpty_54_0= 'notEmpty'
            	    {
            	    lv_notEmpty_54_0=(Token)match(input,147,FOLLOW_177); 

            	    											newLeafNode(lv_notEmpty_54_0, grammarAccess.getDtoAttributeAccess().getNotEmptyNotEmptyKeyword_6_16_0_0());
            	    										

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getDtoAttributeRule());
            	    											}
            	    											setWithLastConsumed(current, "notEmpty", true, "notEmpty");
            	    										

            	    }


            	    }

            	    // InternalContextMappingDSL.g:15293:9: (otherlv_55= '=' ( (lv_notEmptyMessage_56_0= RULE_STRING ) ) )?
            	    int alt347=2;
            	    int LA347_0 = input.LA(1);

            	    if ( (LA347_0==21) ) {
            	        alt347=1;
            	    }
            	    switch (alt347) {
            	        case 1 :
            	            // InternalContextMappingDSL.g:15294:10: otherlv_55= '=' ( (lv_notEmptyMessage_56_0= RULE_STRING ) )
            	            {
            	            otherlv_55=(Token)match(input,21,FOLLOW_4); 

            	            										newLeafNode(otherlv_55, grammarAccess.getDtoAttributeAccess().getEqualsSignKeyword_6_16_1_0());
            	            									
            	            // InternalContextMappingDSL.g:15298:10: ( (lv_notEmptyMessage_56_0= RULE_STRING ) )
            	            // InternalContextMappingDSL.g:15299:11: (lv_notEmptyMessage_56_0= RULE_STRING )
            	            {
            	            // InternalContextMappingDSL.g:15299:11: (lv_notEmptyMessage_56_0= RULE_STRING )
            	            // InternalContextMappingDSL.g:15300:12: lv_notEmptyMessage_56_0= RULE_STRING
            	            {
            	            lv_notEmptyMessage_56_0=(Token)match(input,RULE_STRING,FOLLOW_176); 

            	            												newLeafNode(lv_notEmptyMessage_56_0, grammarAccess.getDtoAttributeAccess().getNotEmptyMessageSTRINGTerminalRuleCall_6_16_1_1_0());
            	            											

            	            												if (current==null) {
            	            													current = createModelElement(grammarAccess.getDtoAttributeRule());
            	            												}
            	            												setWithLastConsumed(
            	            													current,
            	            													"notEmptyMessage",
            	            													lv_notEmptyMessage_56_0,
            	            													"org.eclipse.xtext.common.Terminals.STRING");
            	            											

            	            }


            	            }


            	            }
            	            break;

            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 18 :
            	    // InternalContextMappingDSL.g:15323:4: ({...}? => ( ({...}? => ( ( (lv_notBlank_57_0= 'notBlank' ) ) (otherlv_58= '=' ( (lv_notBlankMessage_59_0= RULE_STRING ) ) )? ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:15323:4: ({...}? => ( ({...}? => ( ( (lv_notBlank_57_0= 'notBlank' ) ) (otherlv_58= '=' ( (lv_notBlankMessage_59_0= RULE_STRING ) ) )? ) ) ) )
            	    // InternalContextMappingDSL.g:15324:5: {...}? => ( ({...}? => ( ( (lv_notBlank_57_0= 'notBlank' ) ) (otherlv_58= '=' ( (lv_notBlankMessage_59_0= RULE_STRING ) ) )? ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 17) ) {
            	        throw new FailedPredicateException(input, "ruleDtoAttribute", "getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 17)");
            	    }
            	    // InternalContextMappingDSL.g:15324:110: ( ({...}? => ( ( (lv_notBlank_57_0= 'notBlank' ) ) (otherlv_58= '=' ( (lv_notBlankMessage_59_0= RULE_STRING ) ) )? ) ) )
            	    // InternalContextMappingDSL.g:15325:6: ({...}? => ( ( (lv_notBlank_57_0= 'notBlank' ) ) (otherlv_58= '=' ( (lv_notBlankMessage_59_0= RULE_STRING ) ) )? ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 17);
            	    					
            	    // InternalContextMappingDSL.g:15328:9: ({...}? => ( ( (lv_notBlank_57_0= 'notBlank' ) ) (otherlv_58= '=' ( (lv_notBlankMessage_59_0= RULE_STRING ) ) )? ) )
            	    // InternalContextMappingDSL.g:15328:10: {...}? => ( ( (lv_notBlank_57_0= 'notBlank' ) ) (otherlv_58= '=' ( (lv_notBlankMessage_59_0= RULE_STRING ) ) )? )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleDtoAttribute", "true");
            	    }
            	    // InternalContextMappingDSL.g:15328:19: ( ( (lv_notBlank_57_0= 'notBlank' ) ) (otherlv_58= '=' ( (lv_notBlankMessage_59_0= RULE_STRING ) ) )? )
            	    // InternalContextMappingDSL.g:15328:20: ( (lv_notBlank_57_0= 'notBlank' ) ) (otherlv_58= '=' ( (lv_notBlankMessage_59_0= RULE_STRING ) ) )?
            	    {
            	    // InternalContextMappingDSL.g:15328:20: ( (lv_notBlank_57_0= 'notBlank' ) )
            	    // InternalContextMappingDSL.g:15329:10: (lv_notBlank_57_0= 'notBlank' )
            	    {
            	    // InternalContextMappingDSL.g:15329:10: (lv_notBlank_57_0= 'notBlank' )
            	    // InternalContextMappingDSL.g:15330:11: lv_notBlank_57_0= 'notBlank'
            	    {
            	    lv_notBlank_57_0=(Token)match(input,148,FOLLOW_177); 

            	    											newLeafNode(lv_notBlank_57_0, grammarAccess.getDtoAttributeAccess().getNotBlankNotBlankKeyword_6_17_0_0());
            	    										

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getDtoAttributeRule());
            	    											}
            	    											setWithLastConsumed(current, "notBlank", true, "notBlank");
            	    										

            	    }


            	    }

            	    // InternalContextMappingDSL.g:15342:9: (otherlv_58= '=' ( (lv_notBlankMessage_59_0= RULE_STRING ) ) )?
            	    int alt348=2;
            	    int LA348_0 = input.LA(1);

            	    if ( (LA348_0==21) ) {
            	        alt348=1;
            	    }
            	    switch (alt348) {
            	        case 1 :
            	            // InternalContextMappingDSL.g:15343:10: otherlv_58= '=' ( (lv_notBlankMessage_59_0= RULE_STRING ) )
            	            {
            	            otherlv_58=(Token)match(input,21,FOLLOW_4); 

            	            										newLeafNode(otherlv_58, grammarAccess.getDtoAttributeAccess().getEqualsSignKeyword_6_17_1_0());
            	            									
            	            // InternalContextMappingDSL.g:15347:10: ( (lv_notBlankMessage_59_0= RULE_STRING ) )
            	            // InternalContextMappingDSL.g:15348:11: (lv_notBlankMessage_59_0= RULE_STRING )
            	            {
            	            // InternalContextMappingDSL.g:15348:11: (lv_notBlankMessage_59_0= RULE_STRING )
            	            // InternalContextMappingDSL.g:15349:12: lv_notBlankMessage_59_0= RULE_STRING
            	            {
            	            lv_notBlankMessage_59_0=(Token)match(input,RULE_STRING,FOLLOW_176); 

            	            												newLeafNode(lv_notBlankMessage_59_0, grammarAccess.getDtoAttributeAccess().getNotBlankMessageSTRINGTerminalRuleCall_6_17_1_1_0());
            	            											

            	            												if (current==null) {
            	            													current = createModelElement(grammarAccess.getDtoAttributeRule());
            	            												}
            	            												setWithLastConsumed(
            	            													current,
            	            													"notBlankMessage",
            	            													lv_notBlankMessage_59_0,
            	            													"org.eclipse.xtext.common.Terminals.STRING");
            	            											

            	            }


            	            }


            	            }
            	            break;

            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 19 :
            	    // InternalContextMappingDSL.g:15372:4: ({...}? => ( ({...}? => (otherlv_60= 'pattern' otherlv_61= '=' ( (lv_pattern_62_0= RULE_STRING ) ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:15372:4: ({...}? => ( ({...}? => (otherlv_60= 'pattern' otherlv_61= '=' ( (lv_pattern_62_0= RULE_STRING ) ) ) ) ) )
            	    // InternalContextMappingDSL.g:15373:5: {...}? => ( ({...}? => (otherlv_60= 'pattern' otherlv_61= '=' ( (lv_pattern_62_0= RULE_STRING ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 18) ) {
            	        throw new FailedPredicateException(input, "ruleDtoAttribute", "getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 18)");
            	    }
            	    // InternalContextMappingDSL.g:15373:110: ( ({...}? => (otherlv_60= 'pattern' otherlv_61= '=' ( (lv_pattern_62_0= RULE_STRING ) ) ) ) )
            	    // InternalContextMappingDSL.g:15374:6: ({...}? => (otherlv_60= 'pattern' otherlv_61= '=' ( (lv_pattern_62_0= RULE_STRING ) ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 18);
            	    					
            	    // InternalContextMappingDSL.g:15377:9: ({...}? => (otherlv_60= 'pattern' otherlv_61= '=' ( (lv_pattern_62_0= RULE_STRING ) ) ) )
            	    // InternalContextMappingDSL.g:15377:10: {...}? => (otherlv_60= 'pattern' otherlv_61= '=' ( (lv_pattern_62_0= RULE_STRING ) ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleDtoAttribute", "true");
            	    }
            	    // InternalContextMappingDSL.g:15377:19: (otherlv_60= 'pattern' otherlv_61= '=' ( (lv_pattern_62_0= RULE_STRING ) ) )
            	    // InternalContextMappingDSL.g:15377:20: otherlv_60= 'pattern' otherlv_61= '=' ( (lv_pattern_62_0= RULE_STRING ) )
            	    {
            	    otherlv_60=(Token)match(input,149,FOLLOW_81); 

            	    									newLeafNode(otherlv_60, grammarAccess.getDtoAttributeAccess().getPatternKeyword_6_18_0());
            	    								
            	    otherlv_61=(Token)match(input,21,FOLLOW_4); 

            	    									newLeafNode(otherlv_61, grammarAccess.getDtoAttributeAccess().getEqualsSignKeyword_6_18_1());
            	    								
            	    // InternalContextMappingDSL.g:15385:9: ( (lv_pattern_62_0= RULE_STRING ) )
            	    // InternalContextMappingDSL.g:15386:10: (lv_pattern_62_0= RULE_STRING )
            	    {
            	    // InternalContextMappingDSL.g:15386:10: (lv_pattern_62_0= RULE_STRING )
            	    // InternalContextMappingDSL.g:15387:11: lv_pattern_62_0= RULE_STRING
            	    {
            	    lv_pattern_62_0=(Token)match(input,RULE_STRING,FOLLOW_176); 

            	    											newLeafNode(lv_pattern_62_0, grammarAccess.getDtoAttributeAccess().getPatternSTRINGTerminalRuleCall_6_18_2_0());
            	    										

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getDtoAttributeRule());
            	    											}
            	    											setWithLastConsumed(
            	    												current,
            	    												"pattern",
            	    												lv_pattern_62_0,
            	    												"org.eclipse.xtext.common.Terminals.STRING");
            	    										

            	    }


            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 20 :
            	    // InternalContextMappingDSL.g:15409:4: ({...}? => ( ({...}? => (otherlv_63= 'range' otherlv_64= '=' ( (lv_range_65_0= RULE_STRING ) ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:15409:4: ({...}? => ( ({...}? => (otherlv_63= 'range' otherlv_64= '=' ( (lv_range_65_0= RULE_STRING ) ) ) ) ) )
            	    // InternalContextMappingDSL.g:15410:5: {...}? => ( ({...}? => (otherlv_63= 'range' otherlv_64= '=' ( (lv_range_65_0= RULE_STRING ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 19) ) {
            	        throw new FailedPredicateException(input, "ruleDtoAttribute", "getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 19)");
            	    }
            	    // InternalContextMappingDSL.g:15410:110: ( ({...}? => (otherlv_63= 'range' otherlv_64= '=' ( (lv_range_65_0= RULE_STRING ) ) ) ) )
            	    // InternalContextMappingDSL.g:15411:6: ({...}? => (otherlv_63= 'range' otherlv_64= '=' ( (lv_range_65_0= RULE_STRING ) ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 19);
            	    					
            	    // InternalContextMappingDSL.g:15414:9: ({...}? => (otherlv_63= 'range' otherlv_64= '=' ( (lv_range_65_0= RULE_STRING ) ) ) )
            	    // InternalContextMappingDSL.g:15414:10: {...}? => (otherlv_63= 'range' otherlv_64= '=' ( (lv_range_65_0= RULE_STRING ) ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleDtoAttribute", "true");
            	    }
            	    // InternalContextMappingDSL.g:15414:19: (otherlv_63= 'range' otherlv_64= '=' ( (lv_range_65_0= RULE_STRING ) ) )
            	    // InternalContextMappingDSL.g:15414:20: otherlv_63= 'range' otherlv_64= '=' ( (lv_range_65_0= RULE_STRING ) )
            	    {
            	    otherlv_63=(Token)match(input,150,FOLLOW_81); 

            	    									newLeafNode(otherlv_63, grammarAccess.getDtoAttributeAccess().getRangeKeyword_6_19_0());
            	    								
            	    otherlv_64=(Token)match(input,21,FOLLOW_4); 

            	    									newLeafNode(otherlv_64, grammarAccess.getDtoAttributeAccess().getEqualsSignKeyword_6_19_1());
            	    								
            	    // InternalContextMappingDSL.g:15422:9: ( (lv_range_65_0= RULE_STRING ) )
            	    // InternalContextMappingDSL.g:15423:10: (lv_range_65_0= RULE_STRING )
            	    {
            	    // InternalContextMappingDSL.g:15423:10: (lv_range_65_0= RULE_STRING )
            	    // InternalContextMappingDSL.g:15424:11: lv_range_65_0= RULE_STRING
            	    {
            	    lv_range_65_0=(Token)match(input,RULE_STRING,FOLLOW_176); 

            	    											newLeafNode(lv_range_65_0, grammarAccess.getDtoAttributeAccess().getRangeSTRINGTerminalRuleCall_6_19_2_0());
            	    										

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getDtoAttributeRule());
            	    											}
            	    											setWithLastConsumed(
            	    												current,
            	    												"range",
            	    												lv_range_65_0,
            	    												"org.eclipse.xtext.common.Terminals.STRING");
            	    										

            	    }


            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 21 :
            	    // InternalContextMappingDSL.g:15446:4: ({...}? => ( ({...}? => (otherlv_66= 'size' otherlv_67= '=' ( (lv_size_68_0= RULE_STRING ) ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:15446:4: ({...}? => ( ({...}? => (otherlv_66= 'size' otherlv_67= '=' ( (lv_size_68_0= RULE_STRING ) ) ) ) ) )
            	    // InternalContextMappingDSL.g:15447:5: {...}? => ( ({...}? => (otherlv_66= 'size' otherlv_67= '=' ( (lv_size_68_0= RULE_STRING ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 20) ) {
            	        throw new FailedPredicateException(input, "ruleDtoAttribute", "getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 20)");
            	    }
            	    // InternalContextMappingDSL.g:15447:110: ( ({...}? => (otherlv_66= 'size' otherlv_67= '=' ( (lv_size_68_0= RULE_STRING ) ) ) ) )
            	    // InternalContextMappingDSL.g:15448:6: ({...}? => (otherlv_66= 'size' otherlv_67= '=' ( (lv_size_68_0= RULE_STRING ) ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 20);
            	    					
            	    // InternalContextMappingDSL.g:15451:9: ({...}? => (otherlv_66= 'size' otherlv_67= '=' ( (lv_size_68_0= RULE_STRING ) ) ) )
            	    // InternalContextMappingDSL.g:15451:10: {...}? => (otherlv_66= 'size' otherlv_67= '=' ( (lv_size_68_0= RULE_STRING ) ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleDtoAttribute", "true");
            	    }
            	    // InternalContextMappingDSL.g:15451:19: (otherlv_66= 'size' otherlv_67= '=' ( (lv_size_68_0= RULE_STRING ) ) )
            	    // InternalContextMappingDSL.g:15451:20: otherlv_66= 'size' otherlv_67= '=' ( (lv_size_68_0= RULE_STRING ) )
            	    {
            	    otherlv_66=(Token)match(input,151,FOLLOW_81); 

            	    									newLeafNode(otherlv_66, grammarAccess.getDtoAttributeAccess().getSizeKeyword_6_20_0());
            	    								
            	    otherlv_67=(Token)match(input,21,FOLLOW_4); 

            	    									newLeafNode(otherlv_67, grammarAccess.getDtoAttributeAccess().getEqualsSignKeyword_6_20_1());
            	    								
            	    // InternalContextMappingDSL.g:15459:9: ( (lv_size_68_0= RULE_STRING ) )
            	    // InternalContextMappingDSL.g:15460:10: (lv_size_68_0= RULE_STRING )
            	    {
            	    // InternalContextMappingDSL.g:15460:10: (lv_size_68_0= RULE_STRING )
            	    // InternalContextMappingDSL.g:15461:11: lv_size_68_0= RULE_STRING
            	    {
            	    lv_size_68_0=(Token)match(input,RULE_STRING,FOLLOW_176); 

            	    											newLeafNode(lv_size_68_0, grammarAccess.getDtoAttributeAccess().getSizeSTRINGTerminalRuleCall_6_20_2_0());
            	    										

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getDtoAttributeRule());
            	    											}
            	    											setWithLastConsumed(
            	    												current,
            	    												"size",
            	    												lv_size_68_0,
            	    												"org.eclipse.xtext.common.Terminals.STRING");
            	    										

            	    }


            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 22 :
            	    // InternalContextMappingDSL.g:15483:4: ({...}? => ( ({...}? => (otherlv_69= 'length' otherlv_70= '=' ( (lv_length_71_0= RULE_STRING ) ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:15483:4: ({...}? => ( ({...}? => (otherlv_69= 'length' otherlv_70= '=' ( (lv_length_71_0= RULE_STRING ) ) ) ) ) )
            	    // InternalContextMappingDSL.g:15484:5: {...}? => ( ({...}? => (otherlv_69= 'length' otherlv_70= '=' ( (lv_length_71_0= RULE_STRING ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 21) ) {
            	        throw new FailedPredicateException(input, "ruleDtoAttribute", "getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 21)");
            	    }
            	    // InternalContextMappingDSL.g:15484:110: ( ({...}? => (otherlv_69= 'length' otherlv_70= '=' ( (lv_length_71_0= RULE_STRING ) ) ) ) )
            	    // InternalContextMappingDSL.g:15485:6: ({...}? => (otherlv_69= 'length' otherlv_70= '=' ( (lv_length_71_0= RULE_STRING ) ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 21);
            	    					
            	    // InternalContextMappingDSL.g:15488:9: ({...}? => (otherlv_69= 'length' otherlv_70= '=' ( (lv_length_71_0= RULE_STRING ) ) ) )
            	    // InternalContextMappingDSL.g:15488:10: {...}? => (otherlv_69= 'length' otherlv_70= '=' ( (lv_length_71_0= RULE_STRING ) ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleDtoAttribute", "true");
            	    }
            	    // InternalContextMappingDSL.g:15488:19: (otherlv_69= 'length' otherlv_70= '=' ( (lv_length_71_0= RULE_STRING ) ) )
            	    // InternalContextMappingDSL.g:15488:20: otherlv_69= 'length' otherlv_70= '=' ( (lv_length_71_0= RULE_STRING ) )
            	    {
            	    otherlv_69=(Token)match(input,152,FOLLOW_81); 

            	    									newLeafNode(otherlv_69, grammarAccess.getDtoAttributeAccess().getLengthKeyword_6_21_0());
            	    								
            	    otherlv_70=(Token)match(input,21,FOLLOW_4); 

            	    									newLeafNode(otherlv_70, grammarAccess.getDtoAttributeAccess().getEqualsSignKeyword_6_21_1());
            	    								
            	    // InternalContextMappingDSL.g:15496:9: ( (lv_length_71_0= RULE_STRING ) )
            	    // InternalContextMappingDSL.g:15497:10: (lv_length_71_0= RULE_STRING )
            	    {
            	    // InternalContextMappingDSL.g:15497:10: (lv_length_71_0= RULE_STRING )
            	    // InternalContextMappingDSL.g:15498:11: lv_length_71_0= RULE_STRING
            	    {
            	    lv_length_71_0=(Token)match(input,RULE_STRING,FOLLOW_176); 

            	    											newLeafNode(lv_length_71_0, grammarAccess.getDtoAttributeAccess().getLengthSTRINGTerminalRuleCall_6_21_2_0());
            	    										

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getDtoAttributeRule());
            	    											}
            	    											setWithLastConsumed(
            	    												current,
            	    												"length",
            	    												lv_length_71_0,
            	    												"org.eclipse.xtext.common.Terminals.STRING");
            	    										

            	    }


            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 23 :
            	    // InternalContextMappingDSL.g:15520:4: ({...}? => ( ({...}? => (otherlv_72= 'scriptAssert' otherlv_73= '=' ( (lv_scriptAssert_74_0= RULE_STRING ) ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:15520:4: ({...}? => ( ({...}? => (otherlv_72= 'scriptAssert' otherlv_73= '=' ( (lv_scriptAssert_74_0= RULE_STRING ) ) ) ) ) )
            	    // InternalContextMappingDSL.g:15521:5: {...}? => ( ({...}? => (otherlv_72= 'scriptAssert' otherlv_73= '=' ( (lv_scriptAssert_74_0= RULE_STRING ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 22) ) {
            	        throw new FailedPredicateException(input, "ruleDtoAttribute", "getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 22)");
            	    }
            	    // InternalContextMappingDSL.g:15521:110: ( ({...}? => (otherlv_72= 'scriptAssert' otherlv_73= '=' ( (lv_scriptAssert_74_0= RULE_STRING ) ) ) ) )
            	    // InternalContextMappingDSL.g:15522:6: ({...}? => (otherlv_72= 'scriptAssert' otherlv_73= '=' ( (lv_scriptAssert_74_0= RULE_STRING ) ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 22);
            	    					
            	    // InternalContextMappingDSL.g:15525:9: ({...}? => (otherlv_72= 'scriptAssert' otherlv_73= '=' ( (lv_scriptAssert_74_0= RULE_STRING ) ) ) )
            	    // InternalContextMappingDSL.g:15525:10: {...}? => (otherlv_72= 'scriptAssert' otherlv_73= '=' ( (lv_scriptAssert_74_0= RULE_STRING ) ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleDtoAttribute", "true");
            	    }
            	    // InternalContextMappingDSL.g:15525:19: (otherlv_72= 'scriptAssert' otherlv_73= '=' ( (lv_scriptAssert_74_0= RULE_STRING ) ) )
            	    // InternalContextMappingDSL.g:15525:20: otherlv_72= 'scriptAssert' otherlv_73= '=' ( (lv_scriptAssert_74_0= RULE_STRING ) )
            	    {
            	    otherlv_72=(Token)match(input,153,FOLLOW_81); 

            	    									newLeafNode(otherlv_72, grammarAccess.getDtoAttributeAccess().getScriptAssertKeyword_6_22_0());
            	    								
            	    otherlv_73=(Token)match(input,21,FOLLOW_4); 

            	    									newLeafNode(otherlv_73, grammarAccess.getDtoAttributeAccess().getEqualsSignKeyword_6_22_1());
            	    								
            	    // InternalContextMappingDSL.g:15533:9: ( (lv_scriptAssert_74_0= RULE_STRING ) )
            	    // InternalContextMappingDSL.g:15534:10: (lv_scriptAssert_74_0= RULE_STRING )
            	    {
            	    // InternalContextMappingDSL.g:15534:10: (lv_scriptAssert_74_0= RULE_STRING )
            	    // InternalContextMappingDSL.g:15535:11: lv_scriptAssert_74_0= RULE_STRING
            	    {
            	    lv_scriptAssert_74_0=(Token)match(input,RULE_STRING,FOLLOW_176); 

            	    											newLeafNode(lv_scriptAssert_74_0, grammarAccess.getDtoAttributeAccess().getScriptAssertSTRINGTerminalRuleCall_6_22_2_0());
            	    										

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getDtoAttributeRule());
            	    											}
            	    											setWithLastConsumed(
            	    												current,
            	    												"scriptAssert",
            	    												lv_scriptAssert_74_0,
            	    												"org.eclipse.xtext.common.Terminals.STRING");
            	    										

            	    }


            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 24 :
            	    // InternalContextMappingDSL.g:15557:4: ({...}? => ( ({...}? => (otherlv_75= 'url' otherlv_76= '=' ( (lv_url_77_0= RULE_STRING ) ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:15557:4: ({...}? => ( ({...}? => (otherlv_75= 'url' otherlv_76= '=' ( (lv_url_77_0= RULE_STRING ) ) ) ) ) )
            	    // InternalContextMappingDSL.g:15558:5: {...}? => ( ({...}? => (otherlv_75= 'url' otherlv_76= '=' ( (lv_url_77_0= RULE_STRING ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 23) ) {
            	        throw new FailedPredicateException(input, "ruleDtoAttribute", "getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 23)");
            	    }
            	    // InternalContextMappingDSL.g:15558:110: ( ({...}? => (otherlv_75= 'url' otherlv_76= '=' ( (lv_url_77_0= RULE_STRING ) ) ) ) )
            	    // InternalContextMappingDSL.g:15559:6: ({...}? => (otherlv_75= 'url' otherlv_76= '=' ( (lv_url_77_0= RULE_STRING ) ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 23);
            	    					
            	    // InternalContextMappingDSL.g:15562:9: ({...}? => (otherlv_75= 'url' otherlv_76= '=' ( (lv_url_77_0= RULE_STRING ) ) ) )
            	    // InternalContextMappingDSL.g:15562:10: {...}? => (otherlv_75= 'url' otherlv_76= '=' ( (lv_url_77_0= RULE_STRING ) ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleDtoAttribute", "true");
            	    }
            	    // InternalContextMappingDSL.g:15562:19: (otherlv_75= 'url' otherlv_76= '=' ( (lv_url_77_0= RULE_STRING ) ) )
            	    // InternalContextMappingDSL.g:15562:20: otherlv_75= 'url' otherlv_76= '=' ( (lv_url_77_0= RULE_STRING ) )
            	    {
            	    otherlv_75=(Token)match(input,154,FOLLOW_81); 

            	    									newLeafNode(otherlv_75, grammarAccess.getDtoAttributeAccess().getUrlKeyword_6_23_0());
            	    								
            	    otherlv_76=(Token)match(input,21,FOLLOW_4); 

            	    									newLeafNode(otherlv_76, grammarAccess.getDtoAttributeAccess().getEqualsSignKeyword_6_23_1());
            	    								
            	    // InternalContextMappingDSL.g:15570:9: ( (lv_url_77_0= RULE_STRING ) )
            	    // InternalContextMappingDSL.g:15571:10: (lv_url_77_0= RULE_STRING )
            	    {
            	    // InternalContextMappingDSL.g:15571:10: (lv_url_77_0= RULE_STRING )
            	    // InternalContextMappingDSL.g:15572:11: lv_url_77_0= RULE_STRING
            	    {
            	    lv_url_77_0=(Token)match(input,RULE_STRING,FOLLOW_176); 

            	    											newLeafNode(lv_url_77_0, grammarAccess.getDtoAttributeAccess().getUrlSTRINGTerminalRuleCall_6_23_2_0());
            	    										

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getDtoAttributeRule());
            	    											}
            	    											setWithLastConsumed(
            	    												current,
            	    												"url",
            	    												lv_url_77_0,
            	    												"org.eclipse.xtext.common.Terminals.STRING");
            	    										

            	    }


            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 25 :
            	    // InternalContextMappingDSL.g:15594:4: ({...}? => ( ({...}? => (otherlv_78= 'validate' otherlv_79= '=' ( (lv_validate_80_0= RULE_STRING ) ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:15594:4: ({...}? => ( ({...}? => (otherlv_78= 'validate' otherlv_79= '=' ( (lv_validate_80_0= RULE_STRING ) ) ) ) ) )
            	    // InternalContextMappingDSL.g:15595:5: {...}? => ( ({...}? => (otherlv_78= 'validate' otherlv_79= '=' ( (lv_validate_80_0= RULE_STRING ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 24) ) {
            	        throw new FailedPredicateException(input, "ruleDtoAttribute", "getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 24)");
            	    }
            	    // InternalContextMappingDSL.g:15595:110: ( ({...}? => (otherlv_78= 'validate' otherlv_79= '=' ( (lv_validate_80_0= RULE_STRING ) ) ) ) )
            	    // InternalContextMappingDSL.g:15596:6: ({...}? => (otherlv_78= 'validate' otherlv_79= '=' ( (lv_validate_80_0= RULE_STRING ) ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 24);
            	    					
            	    // InternalContextMappingDSL.g:15599:9: ({...}? => (otherlv_78= 'validate' otherlv_79= '=' ( (lv_validate_80_0= RULE_STRING ) ) ) )
            	    // InternalContextMappingDSL.g:15599:10: {...}? => (otherlv_78= 'validate' otherlv_79= '=' ( (lv_validate_80_0= RULE_STRING ) ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleDtoAttribute", "true");
            	    }
            	    // InternalContextMappingDSL.g:15599:19: (otherlv_78= 'validate' otherlv_79= '=' ( (lv_validate_80_0= RULE_STRING ) ) )
            	    // InternalContextMappingDSL.g:15599:20: otherlv_78= 'validate' otherlv_79= '=' ( (lv_validate_80_0= RULE_STRING ) )
            	    {
            	    otherlv_78=(Token)match(input,118,FOLLOW_81); 

            	    									newLeafNode(otherlv_78, grammarAccess.getDtoAttributeAccess().getValidateKeyword_6_24_0());
            	    								
            	    otherlv_79=(Token)match(input,21,FOLLOW_4); 

            	    									newLeafNode(otherlv_79, grammarAccess.getDtoAttributeAccess().getEqualsSignKeyword_6_24_1());
            	    								
            	    // InternalContextMappingDSL.g:15607:9: ( (lv_validate_80_0= RULE_STRING ) )
            	    // InternalContextMappingDSL.g:15608:10: (lv_validate_80_0= RULE_STRING )
            	    {
            	    // InternalContextMappingDSL.g:15608:10: (lv_validate_80_0= RULE_STRING )
            	    // InternalContextMappingDSL.g:15609:11: lv_validate_80_0= RULE_STRING
            	    {
            	    lv_validate_80_0=(Token)match(input,RULE_STRING,FOLLOW_176); 

            	    											newLeafNode(lv_validate_80_0, grammarAccess.getDtoAttributeAccess().getValidateSTRINGTerminalRuleCall_6_24_2_0());
            	    										

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getDtoAttributeRule());
            	    											}
            	    											setWithLastConsumed(
            	    												current,
            	    												"validate",
            	    												lv_validate_80_0,
            	    												"org.eclipse.xtext.common.Terminals.STRING");
            	    										

            	    }


            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 26 :
            	    // InternalContextMappingDSL.g:15631:4: ({...}? => ( ({...}? => (otherlv_81= 'hint' otherlv_82= '=' ( (lv_hint_83_0= RULE_STRING ) ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:15631:4: ({...}? => ( ({...}? => (otherlv_81= 'hint' otherlv_82= '=' ( (lv_hint_83_0= RULE_STRING ) ) ) ) ) )
            	    // InternalContextMappingDSL.g:15632:5: {...}? => ( ({...}? => (otherlv_81= 'hint' otherlv_82= '=' ( (lv_hint_83_0= RULE_STRING ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 25) ) {
            	        throw new FailedPredicateException(input, "ruleDtoAttribute", "getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 25)");
            	    }
            	    // InternalContextMappingDSL.g:15632:110: ( ({...}? => (otherlv_81= 'hint' otherlv_82= '=' ( (lv_hint_83_0= RULE_STRING ) ) ) ) )
            	    // InternalContextMappingDSL.g:15633:6: ({...}? => (otherlv_81= 'hint' otherlv_82= '=' ( (lv_hint_83_0= RULE_STRING ) ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 25);
            	    					
            	    // InternalContextMappingDSL.g:15636:9: ({...}? => (otherlv_81= 'hint' otherlv_82= '=' ( (lv_hint_83_0= RULE_STRING ) ) ) )
            	    // InternalContextMappingDSL.g:15636:10: {...}? => (otherlv_81= 'hint' otherlv_82= '=' ( (lv_hint_83_0= RULE_STRING ) ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleDtoAttribute", "true");
            	    }
            	    // InternalContextMappingDSL.g:15636:19: (otherlv_81= 'hint' otherlv_82= '=' ( (lv_hint_83_0= RULE_STRING ) ) )
            	    // InternalContextMappingDSL.g:15636:20: otherlv_81= 'hint' otherlv_82= '=' ( (lv_hint_83_0= RULE_STRING ) )
            	    {
            	    otherlv_81=(Token)match(input,67,FOLLOW_81); 

            	    									newLeafNode(otherlv_81, grammarAccess.getDtoAttributeAccess().getHintKeyword_6_25_0());
            	    								
            	    otherlv_82=(Token)match(input,21,FOLLOW_4); 

            	    									newLeafNode(otherlv_82, grammarAccess.getDtoAttributeAccess().getEqualsSignKeyword_6_25_1());
            	    								
            	    // InternalContextMappingDSL.g:15644:9: ( (lv_hint_83_0= RULE_STRING ) )
            	    // InternalContextMappingDSL.g:15645:10: (lv_hint_83_0= RULE_STRING )
            	    {
            	    // InternalContextMappingDSL.g:15645:10: (lv_hint_83_0= RULE_STRING )
            	    // InternalContextMappingDSL.g:15646:11: lv_hint_83_0= RULE_STRING
            	    {
            	    lv_hint_83_0=(Token)match(input,RULE_STRING,FOLLOW_176); 

            	    											newLeafNode(lv_hint_83_0, grammarAccess.getDtoAttributeAccess().getHintSTRINGTerminalRuleCall_6_25_2_0());
            	    										

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getDtoAttributeRule());
            	    											}
            	    											setWithLastConsumed(
            	    												current,
            	    												"hint",
            	    												lv_hint_83_0,
            	    												"org.eclipse.xtext.common.Terminals.STRING");
            	    										

            	    }


            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6());
            	    					

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop349;
                }
            } while (true);


            }


            }

             
            				  getUnorderedGroupHelper().leave(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6());
            				

            }

            // InternalContextMappingDSL.g:15675:3: (otherlv_84= ';' )?
            int alt350=2;
            int LA350_0 = input.LA(1);

            if ( (LA350_0==90) ) {
                alt350=1;
            }
            switch (alt350) {
                case 1 :
                    // InternalContextMappingDSL.g:15676:4: otherlv_84= ';'
                    {
                    otherlv_84=(Token)match(input,90,FOLLOW_2); 

                    				newLeafNode(otherlv_84, grammarAccess.getDtoAttributeAccess().getSemicolonKeyword_7());
                    			

                    }
                    break;

            }


            }


            }


            	leaveRule();

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleDtoAttribute"


    // $ANTLR start "entryRuleDtoReference"
    // InternalContextMappingDSL.g:15685:1: entryRuleDtoReference returns [EObject current=null] : iv_ruleDtoReference= ruleDtoReference EOF ;
    public final EObject entryRuleDtoReference() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleDtoReference = null;


        try {
            // InternalContextMappingDSL.g:15685:53: (iv_ruleDtoReference= ruleDtoReference EOF )
            // InternalContextMappingDSL.g:15686:2: iv_ruleDtoReference= ruleDtoReference EOF
            {
             newCompositeNode(grammarAccess.getDtoReferenceRule()); 
            pushFollow(FOLLOW_1);
            iv_ruleDtoReference=ruleDtoReference();

            state._fsp--;

             current =iv_ruleDtoReference; 
            match(input,EOF,FOLLOW_2); 

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleDtoReference"


    // $ANTLR start "ruleDtoReference"
    // InternalContextMappingDSL.g:15692:1: ruleDtoReference returns [EObject current=null] : ( ( (lv_doc_0_0= RULE_STRING ) )? this_REF_1= RULE_REF ( (lv_visibility_2_0= ruleVisibility ) )? ( ( (lv_collectionType_3_0= ruleCollectionType ) ) otherlv_4= '<' )? ( (otherlv_5= '@' )? ( (otherlv_6= RULE_ID ) ) ) (otherlv_7= '>' )? ( (lv_name_8_0= RULE_ID ) ) ( ( ( ( ({...}? => ( ({...}? => ( (lv_key_10_0= 'key' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notChangeable_11_0= RULE_NOT ) ) otherlv_12= 'changeable' ) | otherlv_13= 'changeable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_required_14_0= 'required' ) ) | (this_NOT_15= RULE_NOT otherlv_16= 'required' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_nullable_17_0= 'nullable' ) ) | (this_NOT_18= RULE_NOT otherlv_19= 'nullable' ) ) (otherlv_20= '=' ( (lv_nullableMessage_21_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_22_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notEmpty_23_0= 'notEmpty' ) ) (otherlv_24= '=' ( (lv_notEmptyMessage_25_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_26= 'size' otherlv_27= '=' ( (lv_size_28_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_valid_29_0= 'valid' ) ) (otherlv_30= '=' ( (lv_validMessage_31_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'validate' otherlv_33= '=' ( (lv_validate_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'hint' otherlv_36= '=' ( (lv_hint_37_0= RULE_STRING ) ) ) ) ) ) )* ) ) ) (otherlv_38= ';' )? ) ;
    public final EObject ruleDtoReference() throws RecognitionException {
        EObject current = null;

        Token lv_doc_0_0=null;
        Token this_REF_1=null;
        Token otherlv_4=null;
        Token otherlv_5=null;
        Token otherlv_6=null;
        Token otherlv_7=null;
        Token lv_name_8_0=null;
        Token lv_key_10_0=null;
        Token lv_notChangeable_11_0=null;
        Token otherlv_12=null;
        Token otherlv_13=null;
        Token lv_required_14_0=null;
        Token this_NOT_15=null;
        Token otherlv_16=null;
        Token lv_nullable_17_0=null;
        Token this_NOT_18=null;
        Token otherlv_19=null;
        Token otherlv_20=null;
        Token lv_nullableMessage_21_0=null;
        Token lv_transient_22_0=null;
        Token lv_notEmpty_23_0=null;
        Token otherlv_24=null;
        Token lv_notEmptyMessage_25_0=null;
        Token otherlv_26=null;
        Token otherlv_27=null;
        Token lv_size_28_0=null;
        Token lv_valid_29_0=null;
        Token otherlv_30=null;
        Token lv_validMessage_31_0=null;
        Token otherlv_32=null;
        Token otherlv_33=null;
        Token lv_validate_34_0=null;
        Token otherlv_35=null;
        Token otherlv_36=null;
        Token lv_hint_37_0=null;
        Token otherlv_38=null;
        Enumerator lv_visibility_2_0 = null;

        Enumerator lv_collectionType_3_0 = null;



        	enterRule();

        try {
            // InternalContextMappingDSL.g:15698:2: ( ( ( (lv_doc_0_0= RULE_STRING ) )? this_REF_1= RULE_REF ( (lv_visibility_2_0= ruleVisibility ) )? ( ( (lv_collectionType_3_0= ruleCollectionType ) ) otherlv_4= '<' )? ( (otherlv_5= '@' )? ( (otherlv_6= RULE_ID ) ) ) (otherlv_7= '>' )? ( (lv_name_8_0= RULE_ID ) ) ( ( ( ( ({...}? => ( ({...}? => ( (lv_key_10_0= 'key' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notChangeable_11_0= RULE_NOT ) ) otherlv_12= 'changeable' ) | otherlv_13= 'changeable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_required_14_0= 'required' ) ) | (this_NOT_15= RULE_NOT otherlv_16= 'required' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_nullable_17_0= 'nullable' ) ) | (this_NOT_18= RULE_NOT otherlv_19= 'nullable' ) ) (otherlv_20= '=' ( (lv_nullableMessage_21_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_22_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notEmpty_23_0= 'notEmpty' ) ) (otherlv_24= '=' ( (lv_notEmptyMessage_25_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_26= 'size' otherlv_27= '=' ( (lv_size_28_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_valid_29_0= 'valid' ) ) (otherlv_30= '=' ( (lv_validMessage_31_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'validate' otherlv_33= '=' ( (lv_validate_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'hint' otherlv_36= '=' ( (lv_hint_37_0= RULE_STRING ) ) ) ) ) ) )* ) ) ) (otherlv_38= ';' )? ) )
            // InternalContextMappingDSL.g:15699:2: ( ( (lv_doc_0_0= RULE_STRING ) )? this_REF_1= RULE_REF ( (lv_visibility_2_0= ruleVisibility ) )? ( ( (lv_collectionType_3_0= ruleCollectionType ) ) otherlv_4= '<' )? ( (otherlv_5= '@' )? ( (otherlv_6= RULE_ID ) ) ) (otherlv_7= '>' )? ( (lv_name_8_0= RULE_ID ) ) ( ( ( ( ({...}? => ( ({...}? => ( (lv_key_10_0= 'key' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notChangeable_11_0= RULE_NOT ) ) otherlv_12= 'changeable' ) | otherlv_13= 'changeable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_required_14_0= 'required' ) ) | (this_NOT_15= RULE_NOT otherlv_16= 'required' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_nullable_17_0= 'nullable' ) ) | (this_NOT_18= RULE_NOT otherlv_19= 'nullable' ) ) (otherlv_20= '=' ( (lv_nullableMessage_21_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_22_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notEmpty_23_0= 'notEmpty' ) ) (otherlv_24= '=' ( (lv_notEmptyMessage_25_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_26= 'size' otherlv_27= '=' ( (lv_size_28_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_valid_29_0= 'valid' ) ) (otherlv_30= '=' ( (lv_validMessage_31_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'validate' otherlv_33= '=' ( (lv_validate_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'hint' otherlv_36= '=' ( (lv_hint_37_0= RULE_STRING ) ) ) ) ) ) )* ) ) ) (otherlv_38= ';' )? )
            {
            // InternalContextMappingDSL.g:15699:2: ( ( (lv_doc_0_0= RULE_STRING ) )? this_REF_1= RULE_REF ( (lv_visibility_2_0= ruleVisibility ) )? ( ( (lv_collectionType_3_0= ruleCollectionType ) ) otherlv_4= '<' )? ( (otherlv_5= '@' )? ( (otherlv_6= RULE_ID ) ) ) (otherlv_7= '>' )? ( (lv_name_8_0= RULE_ID ) ) ( ( ( ( ({...}? => ( ({...}? => ( (lv_key_10_0= 'key' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notChangeable_11_0= RULE_NOT ) ) otherlv_12= 'changeable' ) | otherlv_13= 'changeable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_required_14_0= 'required' ) ) | (this_NOT_15= RULE_NOT otherlv_16= 'required' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_nullable_17_0= 'nullable' ) ) | (this_NOT_18= RULE_NOT otherlv_19= 'nullable' ) ) (otherlv_20= '=' ( (lv_nullableMessage_21_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_22_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notEmpty_23_0= 'notEmpty' ) ) (otherlv_24= '=' ( (lv_notEmptyMessage_25_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_26= 'size' otherlv_27= '=' ( (lv_size_28_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_valid_29_0= 'valid' ) ) (otherlv_30= '=' ( (lv_validMessage_31_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'validate' otherlv_33= '=' ( (lv_validate_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'hint' otherlv_36= '=' ( (lv_hint_37_0= RULE_STRING ) ) ) ) ) ) )* ) ) ) (otherlv_38= ';' )? )
            // InternalContextMappingDSL.g:15700:3: ( (lv_doc_0_0= RULE_STRING ) )? this_REF_1= RULE_REF ( (lv_visibility_2_0= ruleVisibility ) )? ( ( (lv_collectionType_3_0= ruleCollectionType ) ) otherlv_4= '<' )? ( (otherlv_5= '@' )? ( (otherlv_6= RULE_ID ) ) ) (otherlv_7= '>' )? ( (lv_name_8_0= RULE_ID ) ) ( ( ( ( ({...}? => ( ({...}? => ( (lv_key_10_0= 'key' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notChangeable_11_0= RULE_NOT ) ) otherlv_12= 'changeable' ) | otherlv_13= 'changeable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_required_14_0= 'required' ) ) | (this_NOT_15= RULE_NOT otherlv_16= 'required' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_nullable_17_0= 'nullable' ) ) | (this_NOT_18= RULE_NOT otherlv_19= 'nullable' ) ) (otherlv_20= '=' ( (lv_nullableMessage_21_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_22_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notEmpty_23_0= 'notEmpty' ) ) (otherlv_24= '=' ( (lv_notEmptyMessage_25_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_26= 'size' otherlv_27= '=' ( (lv_size_28_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_valid_29_0= 'valid' ) ) (otherlv_30= '=' ( (lv_validMessage_31_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'validate' otherlv_33= '=' ( (lv_validate_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'hint' otherlv_36= '=' ( (lv_hint_37_0= RULE_STRING ) ) ) ) ) ) )* ) ) ) (otherlv_38= ';' )?
            {
            // InternalContextMappingDSL.g:15700:3: ( (lv_doc_0_0= RULE_STRING ) )?
            int alt351=2;
            int LA351_0 = input.LA(1);

            if ( (LA351_0==RULE_STRING) ) {
                alt351=1;
            }
            switch (alt351) {
                case 1 :
                    // InternalContextMappingDSL.g:15701:4: (lv_doc_0_0= RULE_STRING )
                    {
                    // InternalContextMappingDSL.g:15701:4: (lv_doc_0_0= RULE_STRING )
                    // InternalContextMappingDSL.g:15702:5: lv_doc_0_0= RULE_STRING
                    {
                    lv_doc_0_0=(Token)match(input,RULE_STRING,FOLLOW_169); 

                    					newLeafNode(lv_doc_0_0, grammarAccess.getDtoReferenceAccess().getDocSTRINGTerminalRuleCall_0_0());
                    				

                    					if (current==null) {
                    						current = createModelElement(grammarAccess.getDtoReferenceRule());
                    					}
                    					setWithLastConsumed(
                    						current,
                    						"doc",
                    						lv_doc_0_0,
                    						"org.eclipse.xtext.common.Terminals.STRING");
                    				

                    }


                    }
                    break;

            }

            this_REF_1=(Token)match(input,RULE_REF,FOLLOW_170); 

            			newLeafNode(this_REF_1, grammarAccess.getDtoReferenceAccess().getREFTerminalRuleCall_1());
            		
            // InternalContextMappingDSL.g:15722:3: ( (lv_visibility_2_0= ruleVisibility ) )?
            int alt352=2;
            int LA352_0 = input.LA(1);

            if ( (LA352_0==109||(LA352_0>=232 && LA352_0<=234)) ) {
                alt352=1;
            }
            switch (alt352) {
                case 1 :
                    // InternalContextMappingDSL.g:15723:4: (lv_visibility_2_0= ruleVisibility )
                    {
                    // InternalContextMappingDSL.g:15723:4: (lv_visibility_2_0= ruleVisibility )
                    // InternalContextMappingDSL.g:15724:5: lv_visibility_2_0= ruleVisibility
                    {

                    					newCompositeNode(grammarAccess.getDtoReferenceAccess().getVisibilityVisibilityEnumRuleCall_2_0());
                    				
                    pushFollow(FOLLOW_171);
                    lv_visibility_2_0=ruleVisibility();

                    state._fsp--;


                    					if (current==null) {
                    						current = createModelElementForParent(grammarAccess.getDtoReferenceRule());
                    					}
                    					set(
                    						current,
                    						"visibility",
                    						lv_visibility_2_0,
                    						"org.contextmapper.tactic.dsl.TacticDDDLanguage.Visibility");
                    					afterParserOrEnumRuleCall();
                    				

                    }


                    }
                    break;

            }

            // InternalContextMappingDSL.g:15741:3: ( ( (lv_collectionType_3_0= ruleCollectionType ) ) otherlv_4= '<' )?
            int alt353=2;
            int LA353_0 = input.LA(1);

            if ( (LA353_0==218||(LA353_0>=228 && LA353_0<=231)) ) {
                alt353=1;
            }
            switch (alt353) {
                case 1 :
                    // InternalContextMappingDSL.g:15742:4: ( (lv_collectionType_3_0= ruleCollectionType ) ) otherlv_4= '<'
                    {
                    // InternalContextMappingDSL.g:15742:4: ( (lv_collectionType_3_0= ruleCollectionType ) )
                    // InternalContextMappingDSL.g:15743:5: (lv_collectionType_3_0= ruleCollectionType )
                    {
                    // InternalContextMappingDSL.g:15743:5: (lv_collectionType_3_0= ruleCollectionType )
                    // InternalContextMappingDSL.g:15744:6: lv_collectionType_3_0= ruleCollectionType
                    {

                    						newCompositeNode(grammarAccess.getDtoReferenceAccess().getCollectionTypeCollectionTypeEnumRuleCall_3_0_0());
                    					
                    pushFollow(FOLLOW_117);
                    lv_collectionType_3_0=ruleCollectionType();

                    state._fsp--;


                    						if (current==null) {
                    							current = createModelElementForParent(grammarAccess.getDtoReferenceRule());
                    						}
                    						set(
                    							current,
                    							"collectionType",
                    							lv_collectionType_3_0,
                    							"org.contextmapper.tactic.dsl.TacticDDDLanguage.CollectionType");
                    						afterParserOrEnumRuleCall();
                    					

                    }


                    }

                    otherlv_4=(Token)match(input,103,FOLLOW_96); 

                    				newLeafNode(otherlv_4, grammarAccess.getDtoReferenceAccess().getLessThanSignKeyword_3_1());
                    			

                    }
                    break;

            }

            // InternalContextMappingDSL.g:15766:3: ( (otherlv_5= '@' )? ( (otherlv_6= RULE_ID ) ) )
            // InternalContextMappingDSL.g:15767:4: (otherlv_5= '@' )? ( (otherlv_6= RULE_ID ) )
            {
            // InternalContextMappingDSL.g:15767:4: (otherlv_5= '@' )?
            int alt354=2;
            int LA354_0 = input.LA(1);

            if ( (LA354_0==79) ) {
                alt354=1;
            }
            switch (alt354) {
                case 1 :
                    // InternalContextMappingDSL.g:15768:5: otherlv_5= '@'
                    {
                    otherlv_5=(Token)match(input,79,FOLLOW_10); 

                    					newLeafNode(otherlv_5, grammarAccess.getDtoReferenceAccess().getCommercialAtKeyword_4_0());
                    				

                    }
                    break;

            }

            // InternalContextMappingDSL.g:15773:4: ( (otherlv_6= RULE_ID ) )
            // InternalContextMappingDSL.g:15774:5: (otherlv_6= RULE_ID )
            {
            // InternalContextMappingDSL.g:15774:5: (otherlv_6= RULE_ID )
            // InternalContextMappingDSL.g:15775:6: otherlv_6= RULE_ID
            {

            						if (current==null) {
            							current = createModelElement(grammarAccess.getDtoReferenceRule());
            						}
            					
            otherlv_6=(Token)match(input,RULE_ID,FOLLOW_175); 

            						newLeafNode(otherlv_6, grammarAccess.getDtoReferenceAccess().getDomainObjectTypeSimpleDomainObjectCrossReference_4_1_0());
            					

            }


            }


            }

            // InternalContextMappingDSL.g:15787:3: (otherlv_7= '>' )?
            int alt355=2;
            int LA355_0 = input.LA(1);

            if ( (LA355_0==104) ) {
                alt355=1;
            }
            switch (alt355) {
                case 1 :
                    // InternalContextMappingDSL.g:15788:4: otherlv_7= '>'
                    {
                    otherlv_7=(Token)match(input,104,FOLLOW_10); 

                    				newLeafNode(otherlv_7, grammarAccess.getDtoReferenceAccess().getGreaterThanSignKeyword_5());
                    			

                    }
                    break;

            }

            // InternalContextMappingDSL.g:15793:3: ( (lv_name_8_0= RULE_ID ) )
            // InternalContextMappingDSL.g:15794:4: (lv_name_8_0= RULE_ID )
            {
            // InternalContextMappingDSL.g:15794:4: (lv_name_8_0= RULE_ID )
            // InternalContextMappingDSL.g:15795:5: lv_name_8_0= RULE_ID
            {
            lv_name_8_0=(Token)match(input,RULE_ID,FOLLOW_178); 

            					newLeafNode(lv_name_8_0, grammarAccess.getDtoReferenceAccess().getNameIDTerminalRuleCall_6_0());
            				

            					if (current==null) {
            						current = createModelElement(grammarAccess.getDtoReferenceRule());
            					}
            					setWithLastConsumed(
            						current,
            						"name",
            						lv_name_8_0,
            						"org.eclipse.xtext.common.Terminals.ID");
            				

            }


            }

            // InternalContextMappingDSL.g:15811:3: ( ( ( ( ({...}? => ( ({...}? => ( (lv_key_10_0= 'key' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notChangeable_11_0= RULE_NOT ) ) otherlv_12= 'changeable' ) | otherlv_13= 'changeable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_required_14_0= 'required' ) ) | (this_NOT_15= RULE_NOT otherlv_16= 'required' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_nullable_17_0= 'nullable' ) ) | (this_NOT_18= RULE_NOT otherlv_19= 'nullable' ) ) (otherlv_20= '=' ( (lv_nullableMessage_21_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_22_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notEmpty_23_0= 'notEmpty' ) ) (otherlv_24= '=' ( (lv_notEmptyMessage_25_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_26= 'size' otherlv_27= '=' ( (lv_size_28_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_valid_29_0= 'valid' ) ) (otherlv_30= '=' ( (lv_validMessage_31_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'validate' otherlv_33= '=' ( (lv_validate_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'hint' otherlv_36= '=' ( (lv_hint_37_0= RULE_STRING ) ) ) ) ) ) )* ) ) )
            // InternalContextMappingDSL.g:15812:4: ( ( ( ({...}? => ( ({...}? => ( (lv_key_10_0= 'key' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notChangeable_11_0= RULE_NOT ) ) otherlv_12= 'changeable' ) | otherlv_13= 'changeable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_required_14_0= 'required' ) ) | (this_NOT_15= RULE_NOT otherlv_16= 'required' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_nullable_17_0= 'nullable' ) ) | (this_NOT_18= RULE_NOT otherlv_19= 'nullable' ) ) (otherlv_20= '=' ( (lv_nullableMessage_21_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_22_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notEmpty_23_0= 'notEmpty' ) ) (otherlv_24= '=' ( (lv_notEmptyMessage_25_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_26= 'size' otherlv_27= '=' ( (lv_size_28_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_valid_29_0= 'valid' ) ) (otherlv_30= '=' ( (lv_validMessage_31_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'validate' otherlv_33= '=' ( (lv_validate_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'hint' otherlv_36= '=' ( (lv_hint_37_0= RULE_STRING ) ) ) ) ) ) )* ) )
            {
            // InternalContextMappingDSL.g:15812:4: ( ( ( ({...}? => ( ({...}? => ( (lv_key_10_0= 'key' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notChangeable_11_0= RULE_NOT ) ) otherlv_12= 'changeable' ) | otherlv_13= 'changeable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_required_14_0= 'required' ) ) | (this_NOT_15= RULE_NOT otherlv_16= 'required' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_nullable_17_0= 'nullable' ) ) | (this_NOT_18= RULE_NOT otherlv_19= 'nullable' ) ) (otherlv_20= '=' ( (lv_nullableMessage_21_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_22_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notEmpty_23_0= 'notEmpty' ) ) (otherlv_24= '=' ( (lv_notEmptyMessage_25_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_26= 'size' otherlv_27= '=' ( (lv_size_28_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_valid_29_0= 'valid' ) ) (otherlv_30= '=' ( (lv_validMessage_31_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'validate' otherlv_33= '=' ( (lv_validate_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'hint' otherlv_36= '=' ( (lv_hint_37_0= RULE_STRING ) ) ) ) ) ) )* ) )
            // InternalContextMappingDSL.g:15813:5: ( ( ({...}? => ( ({...}? => ( (lv_key_10_0= 'key' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notChangeable_11_0= RULE_NOT ) ) otherlv_12= 'changeable' ) | otherlv_13= 'changeable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_required_14_0= 'required' ) ) | (this_NOT_15= RULE_NOT otherlv_16= 'required' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_nullable_17_0= 'nullable' ) ) | (this_NOT_18= RULE_NOT otherlv_19= 'nullable' ) ) (otherlv_20= '=' ( (lv_nullableMessage_21_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_22_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notEmpty_23_0= 'notEmpty' ) ) (otherlv_24= '=' ( (lv_notEmptyMessage_25_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_26= 'size' otherlv_27= '=' ( (lv_size_28_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_valid_29_0= 'valid' ) ) (otherlv_30= '=' ( (lv_validMessage_31_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'validate' otherlv_33= '=' ( (lv_validate_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'hint' otherlv_36= '=' ( (lv_hint_37_0= RULE_STRING ) ) ) ) ) ) )* )
            {
             
            				  getUnorderedGroupHelper().enter(grammarAccess.getDtoReferenceAccess().getUnorderedGroup_7());
            				
            // InternalContextMappingDSL.g:15816:5: ( ( ({...}? => ( ({...}? => ( (lv_key_10_0= 'key' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notChangeable_11_0= RULE_NOT ) ) otherlv_12= 'changeable' ) | otherlv_13= 'changeable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_required_14_0= 'required' ) ) | (this_NOT_15= RULE_NOT otherlv_16= 'required' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_nullable_17_0= 'nullable' ) ) | (this_NOT_18= RULE_NOT otherlv_19= 'nullable' ) ) (otherlv_20= '=' ( (lv_nullableMessage_21_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_22_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notEmpty_23_0= 'notEmpty' ) ) (otherlv_24= '=' ( (lv_notEmptyMessage_25_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_26= 'size' otherlv_27= '=' ( (lv_size_28_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_valid_29_0= 'valid' ) ) (otherlv_30= '=' ( (lv_validMessage_31_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'validate' otherlv_33= '=' ( (lv_validate_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'hint' otherlv_36= '=' ( (lv_hint_37_0= RULE_STRING ) ) ) ) ) ) )* )
            // InternalContextMappingDSL.g:15817:6: ( ({...}? => ( ({...}? => ( (lv_key_10_0= 'key' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notChangeable_11_0= RULE_NOT ) ) otherlv_12= 'changeable' ) | otherlv_13= 'changeable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_required_14_0= 'required' ) ) | (this_NOT_15= RULE_NOT otherlv_16= 'required' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_nullable_17_0= 'nullable' ) ) | (this_NOT_18= RULE_NOT otherlv_19= 'nullable' ) ) (otherlv_20= '=' ( (lv_nullableMessage_21_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_22_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notEmpty_23_0= 'notEmpty' ) ) (otherlv_24= '=' ( (lv_notEmptyMessage_25_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_26= 'size' otherlv_27= '=' ( (lv_size_28_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_valid_29_0= 'valid' ) ) (otherlv_30= '=' ( (lv_validMessage_31_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'validate' otherlv_33= '=' ( (lv_validate_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'hint' otherlv_36= '=' ( (lv_hint_37_0= RULE_STRING ) ) ) ) ) ) )*
            {
            // InternalContextMappingDSL.g:15817:6: ( ({...}? => ( ({...}? => ( (lv_key_10_0= 'key' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notChangeable_11_0= RULE_NOT ) ) otherlv_12= 'changeable' ) | otherlv_13= 'changeable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_required_14_0= 'required' ) ) | (this_NOT_15= RULE_NOT otherlv_16= 'required' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_nullable_17_0= 'nullable' ) ) | (this_NOT_18= RULE_NOT otherlv_19= 'nullable' ) ) (otherlv_20= '=' ( (lv_nullableMessage_21_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_22_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notEmpty_23_0= 'notEmpty' ) ) (otherlv_24= '=' ( (lv_notEmptyMessage_25_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_26= 'size' otherlv_27= '=' ( (lv_size_28_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_valid_29_0= 'valid' ) ) (otherlv_30= '=' ( (lv_validMessage_31_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'validate' otherlv_33= '=' ( (lv_validate_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'hint' otherlv_36= '=' ( (lv_hint_37_0= RULE_STRING ) ) ) ) ) ) )*
            loop362:
            do {
                int alt362=11;
                alt362 = dfa362.predict(input);
                switch (alt362) {
            	case 1 :
            	    // InternalContextMappingDSL.g:15818:4: ({...}? => ( ({...}? => ( (lv_key_10_0= 'key' ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:15818:4: ({...}? => ( ({...}? => ( (lv_key_10_0= 'key' ) ) ) ) )
            	    // InternalContextMappingDSL.g:15819:5: {...}? => ( ({...}? => ( (lv_key_10_0= 'key' ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDtoReferenceAccess().getUnorderedGroup_7(), 0) ) {
            	        throw new FailedPredicateException(input, "ruleDtoReference", "getUnorderedGroupHelper().canSelect(grammarAccess.getDtoReferenceAccess().getUnorderedGroup_7(), 0)");
            	    }
            	    // InternalContextMappingDSL.g:15819:109: ( ({...}? => ( (lv_key_10_0= 'key' ) ) ) )
            	    // InternalContextMappingDSL.g:15820:6: ({...}? => ( (lv_key_10_0= 'key' ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getDtoReferenceAccess().getUnorderedGroup_7(), 0);
            	    					
            	    // InternalContextMappingDSL.g:15823:9: ({...}? => ( (lv_key_10_0= 'key' ) ) )
            	    // InternalContextMappingDSL.g:15823:10: {...}? => ( (lv_key_10_0= 'key' ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleDtoReference", "true");
            	    }
            	    // InternalContextMappingDSL.g:15823:19: ( (lv_key_10_0= 'key' ) )
            	    // InternalContextMappingDSL.g:15823:20: (lv_key_10_0= 'key' )
            	    {
            	    // InternalContextMappingDSL.g:15823:20: (lv_key_10_0= 'key' )
            	    // InternalContextMappingDSL.g:15824:10: lv_key_10_0= 'key'
            	    {
            	    lv_key_10_0=(Token)match(input,131,FOLLOW_178); 

            	    										newLeafNode(lv_key_10_0, grammarAccess.getDtoReferenceAccess().getKeyKeyKeyword_7_0_0());
            	    									

            	    										if (current==null) {
            	    											current = createModelElement(grammarAccess.getDtoReferenceRule());
            	    										}
            	    										setWithLastConsumed(current, "key", true, "key");
            	    									

            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDtoReferenceAccess().getUnorderedGroup_7());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 2 :
            	    // InternalContextMappingDSL.g:15841:4: ({...}? => ( ({...}? => ( ( ( (lv_notChangeable_11_0= RULE_NOT ) ) otherlv_12= 'changeable' ) | otherlv_13= 'changeable' ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:15841:4: ({...}? => ( ({...}? => ( ( ( (lv_notChangeable_11_0= RULE_NOT ) ) otherlv_12= 'changeable' ) | otherlv_13= 'changeable' ) ) ) )
            	    // InternalContextMappingDSL.g:15842:5: {...}? => ( ({...}? => ( ( ( (lv_notChangeable_11_0= RULE_NOT ) ) otherlv_12= 'changeable' ) | otherlv_13= 'changeable' ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDtoReferenceAccess().getUnorderedGroup_7(), 1) ) {
            	        throw new FailedPredicateException(input, "ruleDtoReference", "getUnorderedGroupHelper().canSelect(grammarAccess.getDtoReferenceAccess().getUnorderedGroup_7(), 1)");
            	    }
            	    // InternalContextMappingDSL.g:15842:109: ( ({...}? => ( ( ( (lv_notChangeable_11_0= RULE_NOT ) ) otherlv_12= 'changeable' ) | otherlv_13= 'changeable' ) ) )
            	    // InternalContextMappingDSL.g:15843:6: ({...}? => ( ( ( (lv_notChangeable_11_0= RULE_NOT ) ) otherlv_12= 'changeable' ) | otherlv_13= 'changeable' ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getDtoReferenceAccess().getUnorderedGroup_7(), 1);
            	    					
            	    // InternalContextMappingDSL.g:15846:9: ({...}? => ( ( ( (lv_notChangeable_11_0= RULE_NOT ) ) otherlv_12= 'changeable' ) | otherlv_13= 'changeable' ) )
            	    // InternalContextMappingDSL.g:15846:10: {...}? => ( ( ( (lv_notChangeable_11_0= RULE_NOT ) ) otherlv_12= 'changeable' ) | otherlv_13= 'changeable' )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleDtoReference", "true");
            	    }
            	    // InternalContextMappingDSL.g:15846:19: ( ( ( (lv_notChangeable_11_0= RULE_NOT ) ) otherlv_12= 'changeable' ) | otherlv_13= 'changeable' )
            	    int alt356=2;
            	    int LA356_0 = input.LA(1);

            	    if ( (LA356_0==RULE_NOT) ) {
            	        alt356=1;
            	    }
            	    else if ( (LA356_0==132) ) {
            	        alt356=2;
            	    }
            	    else {
            	        NoViableAltException nvae =
            	            new NoViableAltException("", 356, 0, input);

            	        throw nvae;
            	    }
            	    switch (alt356) {
            	        case 1 :
            	            // InternalContextMappingDSL.g:15846:20: ( ( (lv_notChangeable_11_0= RULE_NOT ) ) otherlv_12= 'changeable' )
            	            {
            	            // InternalContextMappingDSL.g:15846:20: ( ( (lv_notChangeable_11_0= RULE_NOT ) ) otherlv_12= 'changeable' )
            	            // InternalContextMappingDSL.g:15847:10: ( (lv_notChangeable_11_0= RULE_NOT ) ) otherlv_12= 'changeable'
            	            {
            	            // InternalContextMappingDSL.g:15847:10: ( (lv_notChangeable_11_0= RULE_NOT ) )
            	            // InternalContextMappingDSL.g:15848:11: (lv_notChangeable_11_0= RULE_NOT )
            	            {
            	            // InternalContextMappingDSL.g:15848:11: (lv_notChangeable_11_0= RULE_NOT )
            	            // InternalContextMappingDSL.g:15849:12: lv_notChangeable_11_0= RULE_NOT
            	            {
            	            lv_notChangeable_11_0=(Token)match(input,RULE_NOT,FOLLOW_165); 

            	            												newLeafNode(lv_notChangeable_11_0, grammarAccess.getDtoReferenceAccess().getNotChangeableNOTTerminalRuleCall_7_1_0_0_0());
            	            											

            	            												if (current==null) {
            	            													current = createModelElement(grammarAccess.getDtoReferenceRule());
            	            												}
            	            												setWithLastConsumed(
            	            													current,
            	            													"notChangeable",
            	            													true,
            	            													"org.contextmapper.tactic.dsl.TacticDDDLanguage.NOT");
            	            											

            	            }


            	            }

            	            otherlv_12=(Token)match(input,132,FOLLOW_178); 

            	            										newLeafNode(otherlv_12, grammarAccess.getDtoReferenceAccess().getChangeableKeyword_7_1_0_1());
            	            									

            	            }


            	            }
            	            break;
            	        case 2 :
            	            // InternalContextMappingDSL.g:15871:9: otherlv_13= 'changeable'
            	            {
            	            otherlv_13=(Token)match(input,132,FOLLOW_178); 

            	            									newLeafNode(otherlv_13, grammarAccess.getDtoReferenceAccess().getChangeableKeyword_7_1_1());
            	            								

            	            }
            	            break;

            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDtoReferenceAccess().getUnorderedGroup_7());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 3 :
            	    // InternalContextMappingDSL.g:15881:4: ({...}? => ( ({...}? => ( ( (lv_required_14_0= 'required' ) ) | (this_NOT_15= RULE_NOT otherlv_16= 'required' ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:15881:4: ({...}? => ( ({...}? => ( ( (lv_required_14_0= 'required' ) ) | (this_NOT_15= RULE_NOT otherlv_16= 'required' ) ) ) ) )
            	    // InternalContextMappingDSL.g:15882:5: {...}? => ( ({...}? => ( ( (lv_required_14_0= 'required' ) ) | (this_NOT_15= RULE_NOT otherlv_16= 'required' ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDtoReferenceAccess().getUnorderedGroup_7(), 2) ) {
            	        throw new FailedPredicateException(input, "ruleDtoReference", "getUnorderedGroupHelper().canSelect(grammarAccess.getDtoReferenceAccess().getUnorderedGroup_7(), 2)");
            	    }
            	    // InternalContextMappingDSL.g:15882:109: ( ({...}? => ( ( (lv_required_14_0= 'required' ) ) | (this_NOT_15= RULE_NOT otherlv_16= 'required' ) ) ) )
            	    // InternalContextMappingDSL.g:15883:6: ({...}? => ( ( (lv_required_14_0= 'required' ) ) | (this_NOT_15= RULE_NOT otherlv_16= 'required' ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getDtoReferenceAccess().getUnorderedGroup_7(), 2);
            	    					
            	    // InternalContextMappingDSL.g:15886:9: ({...}? => ( ( (lv_required_14_0= 'required' ) ) | (this_NOT_15= RULE_NOT otherlv_16= 'required' ) ) )
            	    // InternalContextMappingDSL.g:15886:10: {...}? => ( ( (lv_required_14_0= 'required' ) ) | (this_NOT_15= RULE_NOT otherlv_16= 'required' ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleDtoReference", "true");
            	    }
            	    // InternalContextMappingDSL.g:15886:19: ( ( (lv_required_14_0= 'required' ) ) | (this_NOT_15= RULE_NOT otherlv_16= 'required' ) )
            	    int alt357=2;
            	    int LA357_0 = input.LA(1);

            	    if ( (LA357_0==133) ) {
            	        alt357=1;
            	    }
            	    else if ( (LA357_0==RULE_NOT) ) {
            	        alt357=2;
            	    }
            	    else {
            	        NoViableAltException nvae =
            	            new NoViableAltException("", 357, 0, input);

            	        throw nvae;
            	    }
            	    switch (alt357) {
            	        case 1 :
            	            // InternalContextMappingDSL.g:15886:20: ( (lv_required_14_0= 'required' ) )
            	            {
            	            // InternalContextMappingDSL.g:15886:20: ( (lv_required_14_0= 'required' ) )
            	            // InternalContextMappingDSL.g:15887:10: (lv_required_14_0= 'required' )
            	            {
            	            // InternalContextMappingDSL.g:15887:10: (lv_required_14_0= 'required' )
            	            // InternalContextMappingDSL.g:15888:11: lv_required_14_0= 'required'
            	            {
            	            lv_required_14_0=(Token)match(input,133,FOLLOW_178); 

            	            											newLeafNode(lv_required_14_0, grammarAccess.getDtoReferenceAccess().getRequiredRequiredKeyword_7_2_0_0());
            	            										

            	            											if (current==null) {
            	            												current = createModelElement(grammarAccess.getDtoReferenceRule());
            	            											}
            	            											setWithLastConsumed(current, "required", true, "required");
            	            										

            	            }


            	            }


            	            }
            	            break;
            	        case 2 :
            	            // InternalContextMappingDSL.g:15901:9: (this_NOT_15= RULE_NOT otherlv_16= 'required' )
            	            {
            	            // InternalContextMappingDSL.g:15901:9: (this_NOT_15= RULE_NOT otherlv_16= 'required' )
            	            // InternalContextMappingDSL.g:15902:10: this_NOT_15= RULE_NOT otherlv_16= 'required'
            	            {
            	            this_NOT_15=(Token)match(input,RULE_NOT,FOLLOW_166); 

            	            										newLeafNode(this_NOT_15, grammarAccess.getDtoReferenceAccess().getNOTTerminalRuleCall_7_2_1_0());
            	            									
            	            otherlv_16=(Token)match(input,133,FOLLOW_178); 

            	            										newLeafNode(otherlv_16, grammarAccess.getDtoReferenceAccess().getRequiredKeyword_7_2_1_1());
            	            									

            	            }


            	            }
            	            break;

            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDtoReferenceAccess().getUnorderedGroup_7());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 4 :
            	    // InternalContextMappingDSL.g:15917:4: ({...}? => ( ({...}? => ( ( ( (lv_nullable_17_0= 'nullable' ) ) | (this_NOT_18= RULE_NOT otherlv_19= 'nullable' ) ) (otherlv_20= '=' ( (lv_nullableMessage_21_0= RULE_STRING ) ) )? ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:15917:4: ({...}? => ( ({...}? => ( ( ( (lv_nullable_17_0= 'nullable' ) ) | (this_NOT_18= RULE_NOT otherlv_19= 'nullable' ) ) (otherlv_20= '=' ( (lv_nullableMessage_21_0= RULE_STRING ) ) )? ) ) ) )
            	    // InternalContextMappingDSL.g:15918:5: {...}? => ( ({...}? => ( ( ( (lv_nullable_17_0= 'nullable' ) ) | (this_NOT_18= RULE_NOT otherlv_19= 'nullable' ) ) (otherlv_20= '=' ( (lv_nullableMessage_21_0= RULE_STRING ) ) )? ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDtoReferenceAccess().getUnorderedGroup_7(), 3) ) {
            	        throw new FailedPredicateException(input, "ruleDtoReference", "getUnorderedGroupHelper().canSelect(grammarAccess.getDtoReferenceAccess().getUnorderedGroup_7(), 3)");
            	    }
            	    // InternalContextMappingDSL.g:15918:109: ( ({...}? => ( ( ( (lv_nullable_17_0= 'nullable' ) ) | (this_NOT_18= RULE_NOT otherlv_19= 'nullable' ) ) (otherlv_20= '=' ( (lv_nullableMessage_21_0= RULE_STRING ) ) )? ) ) )
            	    // InternalContextMappingDSL.g:15919:6: ({...}? => ( ( ( (lv_nullable_17_0= 'nullable' ) ) | (this_NOT_18= RULE_NOT otherlv_19= 'nullable' ) ) (otherlv_20= '=' ( (lv_nullableMessage_21_0= RULE_STRING ) ) )? ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getDtoReferenceAccess().getUnorderedGroup_7(), 3);
            	    					
            	    // InternalContextMappingDSL.g:15922:9: ({...}? => ( ( ( (lv_nullable_17_0= 'nullable' ) ) | (this_NOT_18= RULE_NOT otherlv_19= 'nullable' ) ) (otherlv_20= '=' ( (lv_nullableMessage_21_0= RULE_STRING ) ) )? ) )
            	    // InternalContextMappingDSL.g:15922:10: {...}? => ( ( ( (lv_nullable_17_0= 'nullable' ) ) | (this_NOT_18= RULE_NOT otherlv_19= 'nullable' ) ) (otherlv_20= '=' ( (lv_nullableMessage_21_0= RULE_STRING ) ) )? )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleDtoReference", "true");
            	    }
            	    // InternalContextMappingDSL.g:15922:19: ( ( ( (lv_nullable_17_0= 'nullable' ) ) | (this_NOT_18= RULE_NOT otherlv_19= 'nullable' ) ) (otherlv_20= '=' ( (lv_nullableMessage_21_0= RULE_STRING ) ) )? )
            	    // InternalContextMappingDSL.g:15922:20: ( ( (lv_nullable_17_0= 'nullable' ) ) | (this_NOT_18= RULE_NOT otherlv_19= 'nullable' ) ) (otherlv_20= '=' ( (lv_nullableMessage_21_0= RULE_STRING ) ) )?
            	    {
            	    // InternalContextMappingDSL.g:15922:20: ( ( (lv_nullable_17_0= 'nullable' ) ) | (this_NOT_18= RULE_NOT otherlv_19= 'nullable' ) )
            	    int alt358=2;
            	    int LA358_0 = input.LA(1);

            	    if ( (LA358_0==134) ) {
            	        alt358=1;
            	    }
            	    else if ( (LA358_0==RULE_NOT) ) {
            	        alt358=2;
            	    }
            	    else {
            	        NoViableAltException nvae =
            	            new NoViableAltException("", 358, 0, input);

            	        throw nvae;
            	    }
            	    switch (alt358) {
            	        case 1 :
            	            // InternalContextMappingDSL.g:15923:10: ( (lv_nullable_17_0= 'nullable' ) )
            	            {
            	            // InternalContextMappingDSL.g:15923:10: ( (lv_nullable_17_0= 'nullable' ) )
            	            // InternalContextMappingDSL.g:15924:11: (lv_nullable_17_0= 'nullable' )
            	            {
            	            // InternalContextMappingDSL.g:15924:11: (lv_nullable_17_0= 'nullable' )
            	            // InternalContextMappingDSL.g:15925:12: lv_nullable_17_0= 'nullable'
            	            {
            	            lv_nullable_17_0=(Token)match(input,134,FOLLOW_179); 

            	            												newLeafNode(lv_nullable_17_0, grammarAccess.getDtoReferenceAccess().getNullableNullableKeyword_7_3_0_0_0());
            	            											

            	            												if (current==null) {
            	            													current = createModelElement(grammarAccess.getDtoReferenceRule());
            	            												}
            	            												setWithLastConsumed(current, "nullable", true, "nullable");
            	            											

            	            }


            	            }


            	            }
            	            break;
            	        case 2 :
            	            // InternalContextMappingDSL.g:15938:10: (this_NOT_18= RULE_NOT otherlv_19= 'nullable' )
            	            {
            	            // InternalContextMappingDSL.g:15938:10: (this_NOT_18= RULE_NOT otherlv_19= 'nullable' )
            	            // InternalContextMappingDSL.g:15939:11: this_NOT_18= RULE_NOT otherlv_19= 'nullable'
            	            {
            	            this_NOT_18=(Token)match(input,RULE_NOT,FOLLOW_168); 

            	            											newLeafNode(this_NOT_18, grammarAccess.getDtoReferenceAccess().getNOTTerminalRuleCall_7_3_0_1_0());
            	            										
            	            otherlv_19=(Token)match(input,134,FOLLOW_179); 

            	            											newLeafNode(otherlv_19, grammarAccess.getDtoReferenceAccess().getNullableKeyword_7_3_0_1_1());
            	            										

            	            }


            	            }
            	            break;

            	    }

            	    // InternalContextMappingDSL.g:15949:9: (otherlv_20= '=' ( (lv_nullableMessage_21_0= RULE_STRING ) ) )?
            	    int alt359=2;
            	    int LA359_0 = input.LA(1);

            	    if ( (LA359_0==21) ) {
            	        alt359=1;
            	    }
            	    switch (alt359) {
            	        case 1 :
            	            // InternalContextMappingDSL.g:15950:10: otherlv_20= '=' ( (lv_nullableMessage_21_0= RULE_STRING ) )
            	            {
            	            otherlv_20=(Token)match(input,21,FOLLOW_4); 

            	            										newLeafNode(otherlv_20, grammarAccess.getDtoReferenceAccess().getEqualsSignKeyword_7_3_1_0());
            	            									
            	            // InternalContextMappingDSL.g:15954:10: ( (lv_nullableMessage_21_0= RULE_STRING ) )
            	            // InternalContextMappingDSL.g:15955:11: (lv_nullableMessage_21_0= RULE_STRING )
            	            {
            	            // InternalContextMappingDSL.g:15955:11: (lv_nullableMessage_21_0= RULE_STRING )
            	            // InternalContextMappingDSL.g:15956:12: lv_nullableMessage_21_0= RULE_STRING
            	            {
            	            lv_nullableMessage_21_0=(Token)match(input,RULE_STRING,FOLLOW_178); 

            	            												newLeafNode(lv_nullableMessage_21_0, grammarAccess.getDtoReferenceAccess().getNullableMessageSTRINGTerminalRuleCall_7_3_1_1_0());
            	            											

            	            												if (current==null) {
            	            													current = createModelElement(grammarAccess.getDtoReferenceRule());
            	            												}
            	            												setWithLastConsumed(
            	            													current,
            	            													"nullableMessage",
            	            													lv_nullableMessage_21_0,
            	            													"org.eclipse.xtext.common.Terminals.STRING");
            	            											

            	            }


            	            }


            	            }
            	            break;

            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDtoReferenceAccess().getUnorderedGroup_7());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 5 :
            	    // InternalContextMappingDSL.g:15979:4: ({...}? => ( ({...}? => ( (lv_transient_22_0= 'transient' ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:15979:4: ({...}? => ( ({...}? => ( (lv_transient_22_0= 'transient' ) ) ) ) )
            	    // InternalContextMappingDSL.g:15980:5: {...}? => ( ({...}? => ( (lv_transient_22_0= 'transient' ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDtoReferenceAccess().getUnorderedGroup_7(), 4) ) {
            	        throw new FailedPredicateException(input, "ruleDtoReference", "getUnorderedGroupHelper().canSelect(grammarAccess.getDtoReferenceAccess().getUnorderedGroup_7(), 4)");
            	    }
            	    // InternalContextMappingDSL.g:15980:109: ( ({...}? => ( (lv_transient_22_0= 'transient' ) ) ) )
            	    // InternalContextMappingDSL.g:15981:6: ({...}? => ( (lv_transient_22_0= 'transient' ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getDtoReferenceAccess().getUnorderedGroup_7(), 4);
            	    					
            	    // InternalContextMappingDSL.g:15984:9: ({...}? => ( (lv_transient_22_0= 'transient' ) ) )
            	    // InternalContextMappingDSL.g:15984:10: {...}? => ( (lv_transient_22_0= 'transient' ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleDtoReference", "true");
            	    }
            	    // InternalContextMappingDSL.g:15984:19: ( (lv_transient_22_0= 'transient' ) )
            	    // InternalContextMappingDSL.g:15984:20: (lv_transient_22_0= 'transient' )
            	    {
            	    // InternalContextMappingDSL.g:15984:20: (lv_transient_22_0= 'transient' )
            	    // InternalContextMappingDSL.g:15985:10: lv_transient_22_0= 'transient'
            	    {
            	    lv_transient_22_0=(Token)match(input,155,FOLLOW_178); 

            	    										newLeafNode(lv_transient_22_0, grammarAccess.getDtoReferenceAccess().getTransientTransientKeyword_7_4_0());
            	    									

            	    										if (current==null) {
            	    											current = createModelElement(grammarAccess.getDtoReferenceRule());
            	    										}
            	    										setWithLastConsumed(current, "transient", true, "transient");
            	    									

            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDtoReferenceAccess().getUnorderedGroup_7());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 6 :
            	    // InternalContextMappingDSL.g:16002:4: ({...}? => ( ({...}? => ( ( (lv_notEmpty_23_0= 'notEmpty' ) ) (otherlv_24= '=' ( (lv_notEmptyMessage_25_0= RULE_STRING ) ) )? ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:16002:4: ({...}? => ( ({...}? => ( ( (lv_notEmpty_23_0= 'notEmpty' ) ) (otherlv_24= '=' ( (lv_notEmptyMessage_25_0= RULE_STRING ) ) )? ) ) ) )
            	    // InternalContextMappingDSL.g:16003:5: {...}? => ( ({...}? => ( ( (lv_notEmpty_23_0= 'notEmpty' ) ) (otherlv_24= '=' ( (lv_notEmptyMessage_25_0= RULE_STRING ) ) )? ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDtoReferenceAccess().getUnorderedGroup_7(), 5) ) {
            	        throw new FailedPredicateException(input, "ruleDtoReference", "getUnorderedGroupHelper().canSelect(grammarAccess.getDtoReferenceAccess().getUnorderedGroup_7(), 5)");
            	    }
            	    // InternalContextMappingDSL.g:16003:109: ( ({...}? => ( ( (lv_notEmpty_23_0= 'notEmpty' ) ) (otherlv_24= '=' ( (lv_notEmptyMessage_25_0= RULE_STRING ) ) )? ) ) )
            	    // InternalContextMappingDSL.g:16004:6: ({...}? => ( ( (lv_notEmpty_23_0= 'notEmpty' ) ) (otherlv_24= '=' ( (lv_notEmptyMessage_25_0= RULE_STRING ) ) )? ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getDtoReferenceAccess().getUnorderedGroup_7(), 5);
            	    					
            	    // InternalContextMappingDSL.g:16007:9: ({...}? => ( ( (lv_notEmpty_23_0= 'notEmpty' ) ) (otherlv_24= '=' ( (lv_notEmptyMessage_25_0= RULE_STRING ) ) )? ) )
            	    // InternalContextMappingDSL.g:16007:10: {...}? => ( ( (lv_notEmpty_23_0= 'notEmpty' ) ) (otherlv_24= '=' ( (lv_notEmptyMessage_25_0= RULE_STRING ) ) )? )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleDtoReference", "true");
            	    }
            	    // InternalContextMappingDSL.g:16007:19: ( ( (lv_notEmpty_23_0= 'notEmpty' ) ) (otherlv_24= '=' ( (lv_notEmptyMessage_25_0= RULE_STRING ) ) )? )
            	    // InternalContextMappingDSL.g:16007:20: ( (lv_notEmpty_23_0= 'notEmpty' ) ) (otherlv_24= '=' ( (lv_notEmptyMessage_25_0= RULE_STRING ) ) )?
            	    {
            	    // InternalContextMappingDSL.g:16007:20: ( (lv_notEmpty_23_0= 'notEmpty' ) )
            	    // InternalContextMappingDSL.g:16008:10: (lv_notEmpty_23_0= 'notEmpty' )
            	    {
            	    // InternalContextMappingDSL.g:16008:10: (lv_notEmpty_23_0= 'notEmpty' )
            	    // InternalContextMappingDSL.g:16009:11: lv_notEmpty_23_0= 'notEmpty'
            	    {
            	    lv_notEmpty_23_0=(Token)match(input,147,FOLLOW_179); 

            	    											newLeafNode(lv_notEmpty_23_0, grammarAccess.getDtoReferenceAccess().getNotEmptyNotEmptyKeyword_7_5_0_0());
            	    										

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getDtoReferenceRule());
            	    											}
            	    											setWithLastConsumed(current, "notEmpty", true, "notEmpty");
            	    										

            	    }


            	    }

            	    // InternalContextMappingDSL.g:16021:9: (otherlv_24= '=' ( (lv_notEmptyMessage_25_0= RULE_STRING ) ) )?
            	    int alt360=2;
            	    int LA360_0 = input.LA(1);

            	    if ( (LA360_0==21) ) {
            	        alt360=1;
            	    }
            	    switch (alt360) {
            	        case 1 :
            	            // InternalContextMappingDSL.g:16022:10: otherlv_24= '=' ( (lv_notEmptyMessage_25_0= RULE_STRING ) )
            	            {
            	            otherlv_24=(Token)match(input,21,FOLLOW_4); 

            	            										newLeafNode(otherlv_24, grammarAccess.getDtoReferenceAccess().getEqualsSignKeyword_7_5_1_0());
            	            									
            	            // InternalContextMappingDSL.g:16026:10: ( (lv_notEmptyMessage_25_0= RULE_STRING ) )
            	            // InternalContextMappingDSL.g:16027:11: (lv_notEmptyMessage_25_0= RULE_STRING )
            	            {
            	            // InternalContextMappingDSL.g:16027:11: (lv_notEmptyMessage_25_0= RULE_STRING )
            	            // InternalContextMappingDSL.g:16028:12: lv_notEmptyMessage_25_0= RULE_STRING
            	            {
            	            lv_notEmptyMessage_25_0=(Token)match(input,RULE_STRING,FOLLOW_178); 

            	            												newLeafNode(lv_notEmptyMessage_25_0, grammarAccess.getDtoReferenceAccess().getNotEmptyMessageSTRINGTerminalRuleCall_7_5_1_1_0());
            	            											

            	            												if (current==null) {
            	            													current = createModelElement(grammarAccess.getDtoReferenceRule());
            	            												}
            	            												setWithLastConsumed(
            	            													current,
            	            													"notEmptyMessage",
            	            													lv_notEmptyMessage_25_0,
            	            													"org.eclipse.xtext.common.Terminals.STRING");
            	            											

            	            }


            	            }


            	            }
            	            break;

            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDtoReferenceAccess().getUnorderedGroup_7());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 7 :
            	    // InternalContextMappingDSL.g:16051:4: ({...}? => ( ({...}? => (otherlv_26= 'size' otherlv_27= '=' ( (lv_size_28_0= RULE_STRING ) ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:16051:4: ({...}? => ( ({...}? => (otherlv_26= 'size' otherlv_27= '=' ( (lv_size_28_0= RULE_STRING ) ) ) ) ) )
            	    // InternalContextMappingDSL.g:16052:5: {...}? => ( ({...}? => (otherlv_26= 'size' otherlv_27= '=' ( (lv_size_28_0= RULE_STRING ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDtoReferenceAccess().getUnorderedGroup_7(), 6) ) {
            	        throw new FailedPredicateException(input, "ruleDtoReference", "getUnorderedGroupHelper().canSelect(grammarAccess.getDtoReferenceAccess().getUnorderedGroup_7(), 6)");
            	    }
            	    // InternalContextMappingDSL.g:16052:109: ( ({...}? => (otherlv_26= 'size' otherlv_27= '=' ( (lv_size_28_0= RULE_STRING ) ) ) ) )
            	    // InternalContextMappingDSL.g:16053:6: ({...}? => (otherlv_26= 'size' otherlv_27= '=' ( (lv_size_28_0= RULE_STRING ) ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getDtoReferenceAccess().getUnorderedGroup_7(), 6);
            	    					
            	    // InternalContextMappingDSL.g:16056:9: ({...}? => (otherlv_26= 'size' otherlv_27= '=' ( (lv_size_28_0= RULE_STRING ) ) ) )
            	    // InternalContextMappingDSL.g:16056:10: {...}? => (otherlv_26= 'size' otherlv_27= '=' ( (lv_size_28_0= RULE_STRING ) ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleDtoReference", "true");
            	    }
            	    // InternalContextMappingDSL.g:16056:19: (otherlv_26= 'size' otherlv_27= '=' ( (lv_size_28_0= RULE_STRING ) ) )
            	    // InternalContextMappingDSL.g:16056:20: otherlv_26= 'size' otherlv_27= '=' ( (lv_size_28_0= RULE_STRING ) )
            	    {
            	    otherlv_26=(Token)match(input,151,FOLLOW_81); 

            	    									newLeafNode(otherlv_26, grammarAccess.getDtoReferenceAccess().getSizeKeyword_7_6_0());
            	    								
            	    otherlv_27=(Token)match(input,21,FOLLOW_4); 

            	    									newLeafNode(otherlv_27, grammarAccess.getDtoReferenceAccess().getEqualsSignKeyword_7_6_1());
            	    								
            	    // InternalContextMappingDSL.g:16064:9: ( (lv_size_28_0= RULE_STRING ) )
            	    // InternalContextMappingDSL.g:16065:10: (lv_size_28_0= RULE_STRING )
            	    {
            	    // InternalContextMappingDSL.g:16065:10: (lv_size_28_0= RULE_STRING )
            	    // InternalContextMappingDSL.g:16066:11: lv_size_28_0= RULE_STRING
            	    {
            	    lv_size_28_0=(Token)match(input,RULE_STRING,FOLLOW_178); 

            	    											newLeafNode(lv_size_28_0, grammarAccess.getDtoReferenceAccess().getSizeSTRINGTerminalRuleCall_7_6_2_0());
            	    										

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getDtoReferenceRule());
            	    											}
            	    											setWithLastConsumed(
            	    												current,
            	    												"size",
            	    												lv_size_28_0,
            	    												"org.eclipse.xtext.common.Terminals.STRING");
            	    										

            	    }


            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDtoReferenceAccess().getUnorderedGroup_7());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 8 :
            	    // InternalContextMappingDSL.g:16088:4: ({...}? => ( ({...}? => ( ( (lv_valid_29_0= 'valid' ) ) (otherlv_30= '=' ( (lv_validMessage_31_0= RULE_STRING ) ) )? ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:16088:4: ({...}? => ( ({...}? => ( ( (lv_valid_29_0= 'valid' ) ) (otherlv_30= '=' ( (lv_validMessage_31_0= RULE_STRING ) ) )? ) ) ) )
            	    // InternalContextMappingDSL.g:16089:5: {...}? => ( ({...}? => ( ( (lv_valid_29_0= 'valid' ) ) (otherlv_30= '=' ( (lv_validMessage_31_0= RULE_STRING ) ) )? ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDtoReferenceAccess().getUnorderedGroup_7(), 7) ) {
            	        throw new FailedPredicateException(input, "ruleDtoReference", "getUnorderedGroupHelper().canSelect(grammarAccess.getDtoReferenceAccess().getUnorderedGroup_7(), 7)");
            	    }
            	    // InternalContextMappingDSL.g:16089:109: ( ({...}? => ( ( (lv_valid_29_0= 'valid' ) ) (otherlv_30= '=' ( (lv_validMessage_31_0= RULE_STRING ) ) )? ) ) )
            	    // InternalContextMappingDSL.g:16090:6: ({...}? => ( ( (lv_valid_29_0= 'valid' ) ) (otherlv_30= '=' ( (lv_validMessage_31_0= RULE_STRING ) ) )? ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getDtoReferenceAccess().getUnorderedGroup_7(), 7);
            	    					
            	    // InternalContextMappingDSL.g:16093:9: ({...}? => ( ( (lv_valid_29_0= 'valid' ) ) (otherlv_30= '=' ( (lv_validMessage_31_0= RULE_STRING ) ) )? ) )
            	    // InternalContextMappingDSL.g:16093:10: {...}? => ( ( (lv_valid_29_0= 'valid' ) ) (otherlv_30= '=' ( (lv_validMessage_31_0= RULE_STRING ) ) )? )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleDtoReference", "true");
            	    }
            	    // InternalContextMappingDSL.g:16093:19: ( ( (lv_valid_29_0= 'valid' ) ) (otherlv_30= '=' ( (lv_validMessage_31_0= RULE_STRING ) ) )? )
            	    // InternalContextMappingDSL.g:16093:20: ( (lv_valid_29_0= 'valid' ) ) (otherlv_30= '=' ( (lv_validMessage_31_0= RULE_STRING ) ) )?
            	    {
            	    // InternalContextMappingDSL.g:16093:20: ( (lv_valid_29_0= 'valid' ) )
            	    // InternalContextMappingDSL.g:16094:10: (lv_valid_29_0= 'valid' )
            	    {
            	    // InternalContextMappingDSL.g:16094:10: (lv_valid_29_0= 'valid' )
            	    // InternalContextMappingDSL.g:16095:11: lv_valid_29_0= 'valid'
            	    {
            	    lv_valid_29_0=(Token)match(input,163,FOLLOW_179); 

            	    											newLeafNode(lv_valid_29_0, grammarAccess.getDtoReferenceAccess().getValidValidKeyword_7_7_0_0());
            	    										

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getDtoReferenceRule());
            	    											}
            	    											setWithLastConsumed(current, "valid", true, "valid");
            	    										

            	    }


            	    }

            	    // InternalContextMappingDSL.g:16107:9: (otherlv_30= '=' ( (lv_validMessage_31_0= RULE_STRING ) ) )?
            	    int alt361=2;
            	    int LA361_0 = input.LA(1);

            	    if ( (LA361_0==21) ) {
            	        alt361=1;
            	    }
            	    switch (alt361) {
            	        case 1 :
            	            // InternalContextMappingDSL.g:16108:10: otherlv_30= '=' ( (lv_validMessage_31_0= RULE_STRING ) )
            	            {
            	            otherlv_30=(Token)match(input,21,FOLLOW_4); 

            	            										newLeafNode(otherlv_30, grammarAccess.getDtoReferenceAccess().getEqualsSignKeyword_7_7_1_0());
            	            									
            	            // InternalContextMappingDSL.g:16112:10: ( (lv_validMessage_31_0= RULE_STRING ) )
            	            // InternalContextMappingDSL.g:16113:11: (lv_validMessage_31_0= RULE_STRING )
            	            {
            	            // InternalContextMappingDSL.g:16113:11: (lv_validMessage_31_0= RULE_STRING )
            	            // InternalContextMappingDSL.g:16114:12: lv_validMessage_31_0= RULE_STRING
            	            {
            	            lv_validMessage_31_0=(Token)match(input,RULE_STRING,FOLLOW_178); 

            	            												newLeafNode(lv_validMessage_31_0, grammarAccess.getDtoReferenceAccess().getValidMessageSTRINGTerminalRuleCall_7_7_1_1_0());
            	            											

            	            												if (current==null) {
            	            													current = createModelElement(grammarAccess.getDtoReferenceRule());
            	            												}
            	            												setWithLastConsumed(
            	            													current,
            	            													"validMessage",
            	            													lv_validMessage_31_0,
            	            													"org.eclipse.xtext.common.Terminals.STRING");
            	            											

            	            }


            	            }


            	            }
            	            break;

            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDtoReferenceAccess().getUnorderedGroup_7());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 9 :
            	    // InternalContextMappingDSL.g:16137:4: ({...}? => ( ({...}? => (otherlv_32= 'validate' otherlv_33= '=' ( (lv_validate_34_0= RULE_STRING ) ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:16137:4: ({...}? => ( ({...}? => (otherlv_32= 'validate' otherlv_33= '=' ( (lv_validate_34_0= RULE_STRING ) ) ) ) ) )
            	    // InternalContextMappingDSL.g:16138:5: {...}? => ( ({...}? => (otherlv_32= 'validate' otherlv_33= '=' ( (lv_validate_34_0= RULE_STRING ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDtoReferenceAccess().getUnorderedGroup_7(), 8) ) {
            	        throw new FailedPredicateException(input, "ruleDtoReference", "getUnorderedGroupHelper().canSelect(grammarAccess.getDtoReferenceAccess().getUnorderedGroup_7(), 8)");
            	    }
            	    // InternalContextMappingDSL.g:16138:109: ( ({...}? => (otherlv_32= 'validate' otherlv_33= '=' ( (lv_validate_34_0= RULE_STRING ) ) ) ) )
            	    // InternalContextMappingDSL.g:16139:6: ({...}? => (otherlv_32= 'validate' otherlv_33= '=' ( (lv_validate_34_0= RULE_STRING ) ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getDtoReferenceAccess().getUnorderedGroup_7(), 8);
            	    					
            	    // InternalContextMappingDSL.g:16142:9: ({...}? => (otherlv_32= 'validate' otherlv_33= '=' ( (lv_validate_34_0= RULE_STRING ) ) ) )
            	    // InternalContextMappingDSL.g:16142:10: {...}? => (otherlv_32= 'validate' otherlv_33= '=' ( (lv_validate_34_0= RULE_STRING ) ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleDtoReference", "true");
            	    }
            	    // InternalContextMappingDSL.g:16142:19: (otherlv_32= 'validate' otherlv_33= '=' ( (lv_validate_34_0= RULE_STRING ) ) )
            	    // InternalContextMappingDSL.g:16142:20: otherlv_32= 'validate' otherlv_33= '=' ( (lv_validate_34_0= RULE_STRING ) )
            	    {
            	    otherlv_32=(Token)match(input,118,FOLLOW_81); 

            	    									newLeafNode(otherlv_32, grammarAccess.getDtoReferenceAccess().getValidateKeyword_7_8_0());
            	    								
            	    otherlv_33=(Token)match(input,21,FOLLOW_4); 

            	    									newLeafNode(otherlv_33, grammarAccess.getDtoReferenceAccess().getEqualsSignKeyword_7_8_1());
            	    								
            	    // InternalContextMappingDSL.g:16150:9: ( (lv_validate_34_0= RULE_STRING ) )
            	    // InternalContextMappingDSL.g:16151:10: (lv_validate_34_0= RULE_STRING )
            	    {
            	    // InternalContextMappingDSL.g:16151:10: (lv_validate_34_0= RULE_STRING )
            	    // InternalContextMappingDSL.g:16152:11: lv_validate_34_0= RULE_STRING
            	    {
            	    lv_validate_34_0=(Token)match(input,RULE_STRING,FOLLOW_178); 

            	    											newLeafNode(lv_validate_34_0, grammarAccess.getDtoReferenceAccess().getValidateSTRINGTerminalRuleCall_7_8_2_0());
            	    										

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getDtoReferenceRule());
            	    											}
            	    											setWithLastConsumed(
            	    												current,
            	    												"validate",
            	    												lv_validate_34_0,
            	    												"org.eclipse.xtext.common.Terminals.STRING");
            	    										

            	    }


            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDtoReferenceAccess().getUnorderedGroup_7());
            	    					

            	    }


            	    }


            	    }
            	    break;
            	case 10 :
            	    // InternalContextMappingDSL.g:16174:4: ({...}? => ( ({...}? => (otherlv_35= 'hint' otherlv_36= '=' ( (lv_hint_37_0= RULE_STRING ) ) ) ) ) )
            	    {
            	    // InternalContextMappingDSL.g:16174:4: ({...}? => ( ({...}? => (otherlv_35= 'hint' otherlv_36= '=' ( (lv_hint_37_0= RULE_STRING ) ) ) ) ) )
            	    // InternalContextMappingDSL.g:16175:5: {...}? => ( ({...}? => (otherlv_35= 'hint' otherlv_36= '=' ( (lv_hint_37_0= RULE_STRING ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDtoReferenceAccess().getUnorderedGroup_7(), 9) ) {
            	        throw new FailedPredicateException(input, "ruleDtoReference", "getUnorderedGroupHelper().canSelect(grammarAccess.getDtoReferenceAccess().getUnorderedGroup_7(), 9)");
            	    }
            	    // InternalContextMappingDSL.g:16175:109: ( ({...}? => (otherlv_35= 'hint' otherlv_36= '=' ( (lv_hint_37_0= RULE_STRING ) ) ) ) )
            	    // InternalContextMappingDSL.g:16176:6: ({...}? => (otherlv_35= 'hint' otherlv_36= '=' ( (lv_hint_37_0= RULE_STRING ) ) ) )
            	    {

            	    						getUnorderedGroupHelper().select(grammarAccess.getDtoReferenceAccess().getUnorderedGroup_7(), 9);
            	    					
            	    // InternalContextMappingDSL.g:16179:9: ({...}? => (otherlv_35= 'hint' otherlv_36= '=' ( (lv_hint_37_0= RULE_STRING ) ) ) )
            	    // InternalContextMappingDSL.g:16179:10: {...}? => (otherlv_35= 'hint' otherlv_36= '=' ( (lv_hint_37_0= RULE_STRING ) ) )
            	    {
            	    if ( !((true)) ) {
            	        throw new FailedPredicateException(input, "ruleDtoReference", "true");
            	    }
            	    // InternalContextMappingDSL.g:16179:19: (otherlv_35= 'hint' otherlv_36= '=' ( (lv_hint_37_0= RULE_STRING ) ) )
            	    // InternalContextMappingDSL.g:16179:20: otherlv_35= 'hint' otherlv_36= '=' ( (lv_hint_37_0= RULE_STRING ) )
            	    {
            	    otherlv_35=(Token)match(input,67,FOLLOW_81); 

            	    									newLeafNode(otherlv_35, grammarAccess.getDtoReferenceAccess().getHintKeyword_7_9_0());
            	    								
            	    otherlv_36=(Token)match(input,21,FOLLOW_4); 

            	    									newLeafNode(otherlv_36, grammarAccess.getDtoReferenceAccess().getEqualsSignKeyword_7_9_1());
            	    								
            	    // InternalContextMappingDSL.g:16187:9: ( (lv_hint_37_0= RULE_STRING ) )
            	    // InternalContextMappingDSL.g:16188:10: (lv_hint_37_0= RULE_STRING )
            	    {
            	    // InternalContextMappingDSL.g:16188:10: (lv_hint_37_0= RULE_STRING )
            	    // InternalContextMappingDSL.g:16189:11: lv_hint_37_0= RULE_STRING
            	    {
            	    lv_hint_37_0=(Token)match(input,RULE_STRING,FOLLOW_178); 

            	    											newLeafNode(lv_hint_37_0, grammarAccess.getDtoReferenceAccess().getHintSTRINGTerminalRuleCall_7_9_2_0());
            	    										

            	    											if (current==null) {
            	    												current = createModelElement(grammarAccess.getDtoReferenceRule());
            	    											}
            	    											setWithLastConsumed(
            	    												current,
            	    												"hint",
            	    												lv_hint_37_0,
            	    												"org.eclipse.xtext.common.Terminals.STRING");
            	    										

            	    }


            	    }


            	    }


            	    }

            	     
            	    						getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDtoReferenceAccess().getUnorderedGroup_7());
            	    					

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop362;
                }
            } while (true);


            }


            }

             
            				  getUnorderedGroupHelper().leave(grammarAccess.getDtoReferenceAccess().getUnorderedGroup_7());
            				

            }

            // InternalContextMappingDSL.g:16218:3: (otherlv_38= ';' )?
            int alt363=2;
            int LA363_0 = input.LA(1);

            if ( (LA363_0==90) ) {
                alt363=1;
            }
            switch (alt363) {
                case 1 :
                    // InternalContextMappingDSL.g:16219:4: otherlv_38= ';'
                    {
                    otherlv_38=(Token)match(input,90,FOLLOW_2); 

                    				newLeafNode(otherlv_38, grammarAccess.getDtoReferenceAccess().getSemicolonKeyword_8());
                    			

                    }
                    break;

            }


            }


            }


            	leaveRule();

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleDtoReference"


    // $ANTLR start "entryRuleOppositeHolder"
    // InternalContextMappingDSL.g:16228:1: entryRuleOppositeHolder returns [EObject current=null] : iv_ruleOppositeHolder= ruleOppositeHolder EOF ;
    public final EObject entryRuleOppositeHolder() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleOppositeHolder = null;


        try {
            // InternalContextMappingDSL.g:16228:55: (iv_ruleOppositeHolder= ruleOppositeHolder EOF )
            // InternalContextMappingDSL.g:16229:2: iv_ruleOppositeHolder= ruleOppositeHolder EOF
            {
             newCompositeNode(grammarAccess.getOppositeHolderRule()); 
            pushFollow(FOLLOW_1);
            iv_ruleOppositeHolder=ruleOppositeHolder();

            state._fsp--;

             current =iv_ruleOppositeHolder; 
            match(input,EOF,FOLLOW_2); 

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleOppositeHolder"


    // $ANTLR start "ruleOppositeHolder"
    // InternalContextMappingDSL.g:16235:1: ruleOppositeHolder returns [EObject current=null] : (this_OPPOSITE_0= RULE_OPPOSITE ( (otherlv_1= RULE_ID ) ) ) ;
    public final EObject ruleOppositeHolder() throws RecognitionException {
        EObject current = null;

        Token this_OPPOSITE_0=null;
        Token otherlv_1=null;


        	enterRule();

        try {
            // InternalContextMappingDSL.g:16241:2: ( (this_OPPOSITE_0= RULE_OPPOSITE ( (otherlv_1= RULE_ID ) ) ) )
            // InternalContextMappingDSL.g:16242:2: (this_OPPOSITE_0= RULE_OPPOSITE ( (otherlv_1= RULE_ID ) ) )
            {
            // InternalContextMappingDSL.g:16242:2: (this_OPPOSITE_0= RULE_OPPOSITE ( (otherlv_1= RULE_ID ) ) )
            // InternalContextMappingDSL.g:16243:3: this_OPPOSITE_0= RULE_OPPOSITE ( (otherlv_1= RULE_ID ) )
            {
            this_OPPOSITE_0=(Token)match(input,RULE_OPPOSITE,FOLLOW_10); 

            			newLeafNode(this_OPPOSITE_0, grammarAccess.getOppositeHolderAccess().getOPPOSITETerminalRuleCall_0());
            		
            // InternalContextMappingDSL.g:16247:3: ( (otherlv_1= RULE_ID ) )
            // InternalContextMappingDSL.g:16248:4: (otherlv_1= RULE_ID )
            {
            // InternalContextMappingDSL.g:16248:4: (otherlv_1= RULE_ID )
            // InternalContextMappingDSL.g:16249:5: otherlv_1= RULE_ID
            {

            					if (current==null) {
            						current = createModelElement(grammarAccess.getOppositeHolderRule());
            					}
            				
            otherlv_1=(Token)match(input,RULE_ID,FOLLOW_2); 

            					newLeafNode(otherlv_1, grammarAccess.getOppositeHolderAccess().getOppositeReferenceCrossReference_1_0());
            				

            }


            }


            }


            }


            	leaveRule();

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleOppositeHolder"


    // $ANTLR start "entryRuleRepository"
    // InternalContextMappingDSL.g:16264:1: entryRuleRepository returns [EObject current=null] : iv_ruleRepository= ruleRepository EOF ;
    public final EObject entryRuleRepository() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleRepository = null;


        try {
            // InternalContextMappingDSL.g:16264:51: (iv_ruleRepository= ruleRepository EOF )
            // InternalContextMappingDSL.g:16265:2: iv_ruleRepository= ruleRepository EOF
            {
             newCompositeNode(grammarAccess.getRepositoryRule()); 
            pushFollow(FOLLOW_1);
            iv_ruleRepository=ruleRepository();

            state._fsp--;

             current =iv_ruleRepository; 
            match(input,EOF,FOLLOW_2); 

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleRepository"


    // $ANTLR start "ruleRepository"
    // InternalContextMappingDSL.g:16271:1: ruleRepository returns [EObject current=null] : ( ( (lv_doc_0_0= RULE_STRING ) )? otherlv_1= 'Repository' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= '{' ( ( ( ( ({...}? => ( ({...}? => ( ( (lv_gapClass_5_0= 'gap' ) ) | ( (lv_noGapClass_6_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_subscribe_10_0= ruleSubscribe ) ) ) ) ) )* ) ) ) ( (lv_dependencies_11_0= ruleDependency ) )* ( (lv_operations_12_0= ruleRepositoryOperation ) )* otherlv_13= '}' )? ) ;
    public final EObject ruleRepository() throws RecognitionException {
        EObject current = null;

        Token lv_doc_0_0=null;
        Token otherlv_1=null;
        Token lv_name_2_0=null;
        Token otherlv_3=null;
        Token lv_gapClass_5_0=null;
        Token lv_noGapClass_6_0=null;
        Token otherlv_7=null;
        Token otherlv_8=null;
        Token lv_hint_9_0=null;
        Token otherlv_13=null;
        EObject lv_subscribe_10_0 = null;

        EObject lv_dependencies_11_0 = null;

        EObject lv_operations_12_0 = null;



        	enterRule();

        try {
            // InternalContextMappingDSL.g:16277:2: ( ( ( (lv_doc_0_0= RULE_STRING ) )? otherlv_1= 'Repository' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= '{' ( ( ( ( ({...}? => ( ({...}? => ( ( (lv_gapClass_5_0= 'gap' ) ) | ( (lv_noGapClass_6_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_subscribe_10_0= ruleSubscribe ) ) ) ) ) )* ) ) ) ( (lv_dependencies_11_0= ruleDependency ) )* ( (lv_operations_12_0= ruleRepositoryOperation ) )* otherlv_13= '}' )? ) )
            // InternalContextMappingDSL.g:16278:2: ( ( (lv_doc_0_0= RULE_STRING ) )? otherlv_1= 'Repository' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= '{' ( ( ( ( ({...}? => ( ({...}? => ( ( (lv_gapClass_5_0= 'gap' ) ) | ( (lv_noGapClass_6_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_subscribe_10_0= ruleSubscribe ) ) ) ) ) )* ) ) ) ( (lv_dependencies_11_0= ruleDependency ) )* ( (lv_operations_12_0= ruleRepositoryOperation ) )* otherlv_13= '}' )? )
            {
            // InternalContextMappingDSL.g:16278:2: ( ( (lv_doc_0_0= RULE_STRING ) )? otherlv_1= 'Repository' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= '{' ( ( ( ( ({...}? => ( ({...}? => ( ( (lv_gapClass_5_0= 'gap' ) ) | ( (lv_noGapClass_6_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_subscribe_10_0= ruleSubscribe ) ) ) ) ) )* ) ) ) ( (lv_dependencies_11_0= ruleDependency ) )* ( (lv_operations_12_0= ruleRepositoryOperation ) )* otherlv_13= '}' )? )
            // InternalContextMappingDSL.g:16279:3: ( (lv_doc_0_0= RULE_STRING ) )? otherlv_1= 'Repository' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= '{' ( ( ( ( ({...}? => ( ({...}? => ( ( (lv_gapClass_5_0= 'gap' ) ) | ( (lv_noGapClass_6_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_subscribe_10_0= ruleSubscribe ) ) ) ) ) )* ) ) ) ( (lv_dependencies_11_0= ruleDependency ) )* ( (lv_operations_12_0= ruleRepositoryOperation ) )* otherlv_13= '}' )?
            {
            // InternalContextMappingDSL.g:16279:3: ( (lv_doc_0_0= RULE_STRING ) )?
            int alt364=2;
            int LA364_0 = input.LA(1);

            if ( (LA364_0==RULE_STRING) ) {
                alt364=1;
            }
            switch (alt364) {
                case 1 :
                    // InternalContextMappingDSL.g:16280:4: (lv_doc_0_0= RULE_STRING )
                    {
                    // InternalContextMappingDSL.g:16280:4: (lv_doc_0_0= RULE_STRING )
                    // InternalContextMappingDSL.g:16281:5: lv_doc_0_0= RULE_STRING
                    {
                    lv_doc_0_0=(Token)match(input,RULE_STRING,FOLLOW_180); 

                    					newLeafNode(lv_doc_0_0, grammarAccess.getRepositoryAccess().getDocSTRINGTerminalRuleCall_0_0());
                    				

                    					if (current==null) {
                    						current = createModelElement(grammarAccess.getRepositoryRule());
                    					}
                    					setWithLastConsumed(
                    						current,
                    						"doc",
                    						lv_doc_0_0,
                    						"org.eclipse.xtext.common.Terminals.STRING");
                    				

                    }


                    }
                    break;

            }

            otherlv_1=(Token)match(input,166,FOLLOW_10); 

            			newLeafNode(otherlv_1, grammarAccess.getRepositoryAccess().getRepositoryKeyword_1());
            		
            // InternalContextMappingDSL.g:16301:3: ( (lv_name_2_0= RULE_ID ) )
            // InternalContextMappingDSL.g:16302:4: (lv_name_2_0= RULE_ID )
            {
            // InternalContextMappingDSL.g:16302:4: (lv_name_2_0= RULE_ID )
            // InternalContextMappingDSL.g:16303:5: lv_name_2_0= RULE_ID
            {
            lv_name_2_0=(Token)match(input,RULE_ID,FOLLOW_23); 

            					newLeafNode(lv_name_2_0, grammarAccess.getRepositoryAccess().getNameIDTerminalRuleCall_2_0());
            				

            					if (current==null) {
            						current = createModelElement(grammarAccess.getRepositoryRule());
            					}
            					setWithLastConsumed(
            						current,
            						"name",
            						lv_name_2_0,
            						"org.eclipse.xtext.common.Terminals.ID");
            				

            }


            }

            // InternalContextMappingDSL.g:16319:3: (otherlv_3= '{' ( ( ( ( ({...}? => ( ({...}? => ( ( (lv_gapClass_5_0= 'gap' ) ) | ( (lv_noGapClass_6_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_subscribe_10_0= ruleSubscribe ) ) ) ) ) )* ) ) ) ( (lv_dependencies_11_0= ruleDependency ) )* ( (lv_operations_12_0= ruleRepositoryOperation ) )* otherlv_13= '}' )?
            int alt369=2;
            int LA369_0 = input.LA(1);

            if ( (LA369_0==RULE_OPEN) ) {
                alt369=1;
            }
            switch (alt369) {
                case 1 :
                    // InternalContextMappingDSL.g:16320:4: otherlv_3= '{' ( ( ( ( ({...}? => ( ({...}? => ( ( (lv_gapClass_5_0= 'gap' ) ) | ( (lv_noGapClass_6_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_subscribe_10_0= ruleSubscribe ) ) ) ) ) )* ) ) ) ( (lv_dependencies_11_0= ruleDependency ) )* ( (lv_operations_12_0= ruleRepositoryOperation ) )* otherlv_13= '}'
                    {
                    otherlv_3=(Token)match(input,RULE_OPEN,FOLLOW_87); 

                    				newLeafNode(otherlv_3, grammarAccess.getRepositoryAccess().getLeftCurlyBracketKeyword_3_0());
                    			
                    // InternalContextMappingDSL.g:16324:4: ( ( ( ( ({...}? => ( ({...}? => ( ( (lv_gapClass_5_0= 'gap' ) ) | ( (lv_noGapClass_6_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_subscribe_10_0= ruleSubscribe ) ) ) ) ) )* ) ) )
                    // InternalContextMappingDSL.g:16325:5: ( ( ( ({...}? => ( ({...}? => ( ( (lv_gapClass_5_0= 'gap' ) ) | ( (lv_noGapClass_6_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_subscribe_10_0= ruleSubscribe ) ) ) ) ) )* ) )
                    {
                    // InternalContextMappingDSL.g:16325:5: ( ( ( ({...}? => ( ({...}? => ( ( (lv_gapClass_5_0= 'gap' ) ) | ( (lv_noGapClass_6_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_subscribe_10_0= ruleSubscribe ) ) ) ) ) )* ) )
                    // InternalContextMappingDSL.g:16326:6: ( ( ({...}? => ( ({...}? => ( ( (lv_gapClass_5_0= 'gap' ) ) | ( (lv_noGapClass_6_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_subscribe_10_0= ruleSubscribe ) ) ) ) ) )* )
                    {
                     
                    					  getUnorderedGroupHelper().enter(grammarAccess.getRepositoryAccess().getUnorderedGroup_3_1());
                    					
                    // InternalContextMappingDSL.g:16329:6: ( ( ({...}? => ( ({...}? => ( ( (lv_gapClass_5_0= 'gap' ) ) | ( (lv_noGapClass_6_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_subscribe_10_0= ruleSubscribe ) ) ) ) ) )* )
                    // InternalContextMappingDSL.g:16330:7: ( ({...}? => ( ({...}? => ( ( (lv_gapClass_5_0= 'gap' ) ) | ( (lv_noGapClass_6_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_subscribe_10_0= ruleSubscribe ) ) ) ) ) )*
                    {
                    // InternalContextMappingDSL.g:16330:7: ( ({...}? => ( ({...}? => ( ( (lv_gapClass_5_0= 'gap' ) ) | ( (lv_noGapClass_6_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_subscribe_10_0= ruleSubscribe ) ) ) ) ) )*
                    loop366:
                    do {
                        int alt366=4;
                        int LA366_0 = input.LA(1);

                        if ( LA366_0 >= 71 && LA366_0 <= 72 && getUnorderedGroupHelper().canSelect(grammarAccess.getRepositoryAccess().getUnorderedGroup_3_1(), 0) ) {
                            alt366=1;
                        }
                        else if ( LA366_0 == 67 && getUnorderedGroupHelper().canSelect(grammarAccess.getRepositoryAccess().getUnorderedGroup_3_1(), 1) ) {
                            alt366=2;
                        }
                        else if ( LA366_0 == 82 && getUnorderedGroupHelper().canSelect(grammarAccess.getRepositoryAccess().getUnorderedGroup_3_1(), 2) ) {
                            alt366=3;
                        }


                        switch (alt366) {
                    	case 1 :
                    	    // InternalContextMappingDSL.g:16331:5: ({...}? => ( ({...}? => ( ( (lv_gapClass_5_0= 'gap' ) ) | ( (lv_noGapClass_6_0= 'nogap' ) ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:16331:5: ({...}? => ( ({...}? => ( ( (lv_gapClass_5_0= 'gap' ) ) | ( (lv_noGapClass_6_0= 'nogap' ) ) ) ) ) )
                    	    // InternalContextMappingDSL.g:16332:6: {...}? => ( ({...}? => ( ( (lv_gapClass_5_0= 'gap' ) ) | ( (lv_noGapClass_6_0= 'nogap' ) ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getRepositoryAccess().getUnorderedGroup_3_1(), 0) ) {
                    	        throw new FailedPredicateException(input, "ruleRepository", "getUnorderedGroupHelper().canSelect(grammarAccess.getRepositoryAccess().getUnorderedGroup_3_1(), 0)");
                    	    }
                    	    // InternalContextMappingDSL.g:16332:110: ( ({...}? => ( ( (lv_gapClass_5_0= 'gap' ) ) | ( (lv_noGapClass_6_0= 'nogap' ) ) ) ) )
                    	    // InternalContextMappingDSL.g:16333:7: ({...}? => ( ( (lv_gapClass_5_0= 'gap' ) ) | ( (lv_noGapClass_6_0= 'nogap' ) ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getRepositoryAccess().getUnorderedGroup_3_1(), 0);
                    	    						
                    	    // InternalContextMappingDSL.g:16336:10: ({...}? => ( ( (lv_gapClass_5_0= 'gap' ) ) | ( (lv_noGapClass_6_0= 'nogap' ) ) ) )
                    	    // InternalContextMappingDSL.g:16336:11: {...}? => ( ( (lv_gapClass_5_0= 'gap' ) ) | ( (lv_noGapClass_6_0= 'nogap' ) ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleRepository", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:16336:20: ( ( (lv_gapClass_5_0= 'gap' ) ) | ( (lv_noGapClass_6_0= 'nogap' ) ) )
                    	    int alt365=2;
                    	    int LA365_0 = input.LA(1);

                    	    if ( (LA365_0==71) ) {
                    	        alt365=1;
                    	    }
                    	    else if ( (LA365_0==72) ) {
                    	        alt365=2;
                    	    }
                    	    else {
                    	        NoViableAltException nvae =
                    	            new NoViableAltException("", 365, 0, input);

                    	        throw nvae;
                    	    }
                    	    switch (alt365) {
                    	        case 1 :
                    	            // InternalContextMappingDSL.g:16336:21: ( (lv_gapClass_5_0= 'gap' ) )
                    	            {
                    	            // InternalContextMappingDSL.g:16336:21: ( (lv_gapClass_5_0= 'gap' ) )
                    	            // InternalContextMappingDSL.g:16337:11: (lv_gapClass_5_0= 'gap' )
                    	            {
                    	            // InternalContextMappingDSL.g:16337:11: (lv_gapClass_5_0= 'gap' )
                    	            // InternalContextMappingDSL.g:16338:12: lv_gapClass_5_0= 'gap'
                    	            {
                    	            lv_gapClass_5_0=(Token)match(input,71,FOLLOW_87); 

                    	            												newLeafNode(lv_gapClass_5_0, grammarAccess.getRepositoryAccess().getGapClassGapKeyword_3_1_0_0_0());
                    	            											

                    	            												if (current==null) {
                    	            													current = createModelElement(grammarAccess.getRepositoryRule());
                    	            												}
                    	            												setWithLastConsumed(current, "gapClass", true, "gap");
                    	            											

                    	            }


                    	            }


                    	            }
                    	            break;
                    	        case 2 :
                    	            // InternalContextMappingDSL.g:16351:10: ( (lv_noGapClass_6_0= 'nogap' ) )
                    	            {
                    	            // InternalContextMappingDSL.g:16351:10: ( (lv_noGapClass_6_0= 'nogap' ) )
                    	            // InternalContextMappingDSL.g:16352:11: (lv_noGapClass_6_0= 'nogap' )
                    	            {
                    	            // InternalContextMappingDSL.g:16352:11: (lv_noGapClass_6_0= 'nogap' )
                    	            // InternalContextMappingDSL.g:16353:12: lv_noGapClass_6_0= 'nogap'
                    	            {
                    	            lv_noGapClass_6_0=(Token)match(input,72,FOLLOW_87); 

                    	            												newLeafNode(lv_noGapClass_6_0, grammarAccess.getRepositoryAccess().getNoGapClassNogapKeyword_3_1_0_1_0());
                    	            											

                    	            												if (current==null) {
                    	            													current = createModelElement(grammarAccess.getRepositoryRule());
                    	            												}
                    	            												setWithLastConsumed(current, "noGapClass", true, "nogap");
                    	            											

                    	            }


                    	            }


                    	            }
                    	            break;

                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getRepositoryAccess().getUnorderedGroup_3_1());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 2 :
                    	    // InternalContextMappingDSL.g:16371:5: ({...}? => ( ({...}? => (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:16371:5: ({...}? => ( ({...}? => (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) ) ) ) )
                    	    // InternalContextMappingDSL.g:16372:6: {...}? => ( ({...}? => (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getRepositoryAccess().getUnorderedGroup_3_1(), 1) ) {
                    	        throw new FailedPredicateException(input, "ruleRepository", "getUnorderedGroupHelper().canSelect(grammarAccess.getRepositoryAccess().getUnorderedGroup_3_1(), 1)");
                    	    }
                    	    // InternalContextMappingDSL.g:16372:110: ( ({...}? => (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) ) ) )
                    	    // InternalContextMappingDSL.g:16373:7: ({...}? => (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getRepositoryAccess().getUnorderedGroup_3_1(), 1);
                    	    						
                    	    // InternalContextMappingDSL.g:16376:10: ({...}? => (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) ) )
                    	    // InternalContextMappingDSL.g:16376:11: {...}? => (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleRepository", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:16376:20: (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) )
                    	    // InternalContextMappingDSL.g:16376:21: otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) )
                    	    {
                    	    otherlv_7=(Token)match(input,67,FOLLOW_81); 

                    	    										newLeafNode(otherlv_7, grammarAccess.getRepositoryAccess().getHintKeyword_3_1_1_0());
                    	    									
                    	    otherlv_8=(Token)match(input,21,FOLLOW_4); 

                    	    										newLeafNode(otherlv_8, grammarAccess.getRepositoryAccess().getEqualsSignKeyword_3_1_1_1());
                    	    									
                    	    // InternalContextMappingDSL.g:16384:10: ( (lv_hint_9_0= RULE_STRING ) )
                    	    // InternalContextMappingDSL.g:16385:11: (lv_hint_9_0= RULE_STRING )
                    	    {
                    	    // InternalContextMappingDSL.g:16385:11: (lv_hint_9_0= RULE_STRING )
                    	    // InternalContextMappingDSL.g:16386:12: lv_hint_9_0= RULE_STRING
                    	    {
                    	    lv_hint_9_0=(Token)match(input,RULE_STRING,FOLLOW_87); 

                    	    												newLeafNode(lv_hint_9_0, grammarAccess.getRepositoryAccess().getHintSTRINGTerminalRuleCall_3_1_1_2_0());
                    	    											

                    	    												if (current==null) {
                    	    													current = createModelElement(grammarAccess.getRepositoryRule());
                    	    												}
                    	    												setWithLastConsumed(
                    	    													current,
                    	    													"hint",
                    	    													lv_hint_9_0,
                    	    													"org.eclipse.xtext.common.Terminals.STRING");
                    	    											

                    	    }


                    	    }


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getRepositoryAccess().getUnorderedGroup_3_1());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 3 :
                    	    // InternalContextMappingDSL.g:16408:5: ({...}? => ( ({...}? => ( (lv_subscribe_10_0= ruleSubscribe ) ) ) ) )
                    	    {
                    	    // InternalContextMappingDSL.g:16408:5: ({...}? => ( ({...}? => ( (lv_subscribe_10_0= ruleSubscribe ) ) ) ) )
                    	    // InternalContextMappingDSL.g:16409:6: {...}? => ( ({...}? => ( (lv_subscribe_10_0= ruleSubscribe ) ) ) )
                    	    {
                    	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getRepositoryAccess().getUnorderedGroup_3_1(), 2) ) {
                    	        throw new FailedPredicateException(input, "ruleRepository", "getUnorderedGroupHelper().canSelect(grammarAccess.getRepositoryAccess().getUnorderedGroup_3_1(), 2)");
                    	    }
                    	    // InternalContextMappingDSL.g:16409:110: ( ({...}? => ( (lv_subscribe_10_0= ruleSubscribe ) ) ) )
                    	    // InternalContextMappingDSL.g:16410:7: ({...}? => ( (lv_subscribe_10_0= ruleSubscribe ) ) )
                    	    {

                    	    							getUnorderedGroupHelper().select(grammarAccess.getRepositoryAccess().getUnorderedGroup_3_1(), 2);
                    	    						
                    	    // InternalContextMappingDSL.g:16413:10: ({...}? => ( (lv_subscribe_10_0= ruleSubscribe ) ) )
                    	    // InternalContextMappingDSL.g:16413:11: {...}? => ( (lv_subscribe_10_0= ruleSubscribe ) )
                    	    {
                    	    if ( !((true)) ) {
                    	        throw new FailedPredicateException(input, "ruleRepository", "true");
                    	    }
                    	    // InternalContextMappingDSL.g:16413:20: ( (lv_subscribe_10_0= ruleSubscribe ) )
                    	    // InternalContextMappingDSL.g:16413:21: (lv_subscribe_10_0= ruleSubscribe )
                    	    {
                    	    // InternalContextMappingDSL.g:16413:21: (lv_subscribe_10_0= ruleSubscribe )
                    	    // InternalContextMappingDSL.g:16414:11: lv_subscribe_10_0= ruleSubscribe
                    	    {

                    	    											newCompositeNode(grammarAccess.getRepositoryAccess().getSubscribeSubscribeParserRuleCall_3_1_2_0());
                    	    										
                    	    pushFollow(FOLLOW_87);
                    	    lv_subscribe_10_0=ruleSubscribe();

                    	    state._fsp--;


                    	    											if (current==null) {
                    	    												current = createModelElementForParent(grammarAccess.getRepositoryRule());
                    	    											}
                    	    											set(
                    	    												current,
                    	    												"subscribe",
                    	    												lv_subscribe_10_0,
                    	    												"org.contextmapper.tactic.dsl.TacticDDDLanguage.Subscribe");
                    	    											afterParserOrEnumRuleCall();
                    	    										

                    	    }


                    	    }


                    	    }

                    	     
                    	    							getUnorderedGroupHelper().returnFromSelection(grammarAccess.getRepositoryAccess().getUnorderedGroup_3_1());
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop366;
                        }
                    } while (true);


                    }


                    }

                     
                    					  getUnorderedGroupHelper().leave(grammarAccess.getRepositoryAccess().getUnorderedGroup_3_1());
                    					

                    }

                    // InternalContextMappingDSL.g:16443:4: ( (lv_dependencies_11_0= ruleDependency ) )*
                    loop367:
                    do {
                        int alt367=2;
                        int LA367_0 = input.LA(1);

                        if ( (LA367_0==104||LA367_0==167) ) {
                            alt367=1;
                        }


                        switch (alt367) {
                    	case 1 :
                    	    // InternalContextMappingDSL.g:16444:5: (lv_dependencies_11_0= ruleDependency )
                    	    {
                    	    // InternalContextMappingDSL.g:16444:5: (lv_dependencies_11_0= ruleDependency )
                    	    // InternalContextMappingDSL.g:16445:6: lv_dependencies_11_0= ruleDependency
                    	    {

                    	    						newCompositeNode(grammarAccess.getRepositoryAccess().getDependenciesDependencyParserRuleCall_3_2_0());
                    	    					
                    	    pushFollow(FOLLOW_88);
                    	    lv_dependencies_11_0=ruleDependency();

                    	    state._fsp--;


                    	    						if (current==null) {
                    	    							current = createModelElementForParent(grammarAccess.getRepositoryRule());
                    	    						}
                    	    						add(
                    	    							current,
                    	    							"dependencies",
                    	    							lv_dependencies_11_0,
                    	    							"org.contextmapper.tactic.dsl.TacticDDDLanguage.Dependency");
                    	    						afterParserOrEnumRuleCall();
                    	    					

                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop367;
                        }
                    } while (true);

                    // InternalContextMappingDSL.g:16462:4: ( (lv_operations_12_0= ruleRepositoryOperation ) )*
                    loop368:
                    do {
                        int alt368=2;
                        int LA368_0 = input.LA(1);

                        if ( ((LA368_0>=RULE_STRING && LA368_0<=RULE_ID)||LA368_0==RULE_MAP_COLLECTION_TYPE||LA368_0==79||LA368_0==86||LA368_0==109||(LA368_0>=170 && LA368_0<=191)||LA368_0==218||(LA368_0>=228 && LA368_0<=234)) ) {
                            alt368=1;
                        }


                        switch (alt368) {
                    	case 1 :
                    	    // InternalContextMappingDSL.g:16463:5: (lv_operations_12_0= ruleRepositoryOperation )
                    	    {
                    	    // InternalContextMappingDSL.g:16463:5: (lv_operations_12_0= ruleRepositoryOperation )
                    	    // InternalContextMappingDSL.g:16464:6: lv_operations_12_0= ruleRepositoryOperation
                    	    {

                    	    						newCompositeNode(grammarAccess.getRepositoryAccess().getOperationsRepositoryOperationParserRuleCall_3_3_0());
                    	    					
                    	    pushFollow(FOLLOW_89);
                    	    lv_operations_12_0=ruleRepositoryOperation();

                    	    state._fsp--;


                    	    						if (current==null) {
                    	    							current = createModelElementForParent(grammarAccess.getRepositoryRule());
                    	    						}
                    	    						add(
                    	    							current,
                    	    							"operations",
                    	    							lv_operations_12_0,
                    	    							"org.contextmapper.tactic.dsl.TacticDDDLanguage.RepositoryOperation");
                    	    						afterParserOrEnumRuleCall();
                    	    					

                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop368;
                        }
                    } while (true);

                    otherlv_13=(Token)match(input,RULE_CLOSE,FOLLOW_2); 

                    				newLeafNode(otherlv_13, grammarAccess.getRepositoryAccess().getRightCurlyBracketKeyword_3_4());
                    			

                    }
                    break;

            }


            }


            }


            	leaveRule();

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleRepository"


    // $ANTLR start "entryRuleServiceDependency"
    // InternalContextMappingDSL.g:16490:1: entryRuleServiceDependency returns [EObject current=null] : iv_ruleServiceDependency= ruleServiceDependency EOF ;
    public final EObject entryRuleServiceDependency() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleServiceDependency = null;


        try {
            // InternalContextMappingDSL.g:16490:58: (iv_ruleServiceDependency= ruleServiceDependency EOF )
            // InternalContextMappingDSL.g:16491:2: iv_ruleServiceDependency= ruleServiceDependency EOF
            {
             newCompositeNode(grammarAccess.getServiceDependencyRule()); 
            pushFollow(FOLLOW_1);
            iv_ruleServiceDependency=ruleServiceDependency();

            state._fsp--;

             current =iv_ruleServiceDependency; 
            match(input,EOF,FOLLOW_2); 

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleServiceDependency"


    // $ANTLR start "ruleServiceDependency"
    // InternalContextMappingDSL.g:16497:1: ruleServiceDependency returns [EObject current=null] : ( (otherlv_0= '>' | otherlv_1= 'inject' ) (otherlv_2= '@' ( (otherlv_3= RULE_ID ) ) ) ) ;
    public final EObject ruleServiceDependency() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_1=null;
        Token otherlv_2=null;
        Token otherlv_3=null;


        	enterRule();

        try {
            // InternalContextMappingDSL.g:16503:2: ( ( (otherlv_0= '>' | otherlv_1= 'inject' ) (otherlv_2= '@' ( (otherlv_3= RULE_ID ) ) ) ) )
            // InternalContextMappingDSL.g:16504:2: ( (otherlv_0= '>' | otherlv_1= 'inject' ) (otherlv_2= '@' ( (otherlv_3= RULE_ID ) ) ) )
            {
            // InternalContextMappingDSL.g:16504:2: ( (otherlv_0= '>' | otherlv_1= 'inject' ) (otherlv_2= '@' ( (otherlv_3= RULE_ID ) ) ) )
            // InternalContextMappingDSL.g:16505:3: (otherlv_0= '>' | otherlv_1= 'inject' ) (otherlv_2= '@' ( (otherlv_3= RULE_ID ) ) )
            {
            // InternalContextMappingDSL.g:16505:3: (otherlv_0= '>' | otherlv_1= 'inject' )
            int alt370=2;
            int LA370_0 = input.LA(1);

            if ( (LA370_0==104) ) {
                alt370=1;
            }
            else if ( (LA370_0==167) ) {
                alt370=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 370, 0, input);

                throw nvae;
            }
            switch (alt370) {
                case 1 :
                    // InternalContextMappingDSL.g:16506:4: otherlv_0= '>'
                    {
                    otherlv_0=(Token)match(input,104,FOLLOW_118); 

                    				newLeafNode(otherlv_0, grammarAccess.getServiceDependencyAccess().getGreaterThanSignKeyword_0_0());
                    			

                    }
                    break;
                case 2 :
                    // InternalContextMappingDSL.g:16511:4: otherlv_1= 'inject'
                    {
                    otherlv_1=(Token)match(input,167,FOLLOW_118); 

                    				newLeafNode(otherlv_1, grammarAccess.getServiceDependencyAccess().getInjectKeyword_0_1());
                    			

                    }
                    break;

            }

            // InternalContextMappingDSL.g:16516:3: (otherlv_2= '@' ( (otherlv_3= RULE_ID ) ) )
            // InternalContextMappingDSL.g:16517:4: otherlv_2= '@' ( (otherlv_3= RULE_ID ) )
            {
            otherlv_2=(Token)match(input,79,FOLLOW_10); 

            				newLeafNode(otherlv_2, grammarAccess.getServiceDependencyAccess().getCommercialAtKeyword_1_0());
            			
            // InternalContextMappingDSL.g:16521:4: ( (otherlv_3= RULE_ID ) )
            // InternalContextMappingDSL.g:16522:5: (otherlv_3= RULE_ID )
            {
            // InternalContextMappingDSL.g:16522:5: (otherlv_3= RULE_ID )
            // InternalContextMappingDSL.g:16523:6: otherlv_3= RULE_ID
            {

            						if (current==null) {
            							current = createModelElement(grammarAccess.getServiceDependencyRule());
            						}
            					
            otherlv_3=(Token)match(input,RULE_ID,FOLLOW_2); 

            						newLeafNode(otherlv_3, grammarAccess.getServiceDependencyAccess().getDependencyServiceCrossReference_1_1_0());
            					

            }


            }


            }


            }


            }


            	leaveRule();

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleServiceDependency"


    // $ANTLR start "entryRuleDependency"
    // InternalContextMappingDSL.g:16539:1: entryRuleDependency returns [EObject current=null] : iv_ruleDependency= ruleDependency EOF ;
    public final EObject entryRuleDependency() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleDependency = null;


        try {
            // InternalContextMappingDSL.g:16539:51: (iv_ruleDependency= ruleDependency EOF )
            // InternalContextMappingDSL.g:16540:2: iv_ruleDependency= ruleDependency EOF
            {
             newCompositeNode(grammarAccess.getDependencyRule()); 
            pushFollow(FOLLOW_1);
            iv_ruleDependency=ruleDependency();

            state._fsp--;

             current =iv_ruleDependency; 
            match(input,EOF,FOLLOW_2); 

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleDependency"


    // $ANTLR start "ruleDependency"
    // InternalContextMappingDSL.g:16546:1: ruleDependency returns [EObject current=null] : ( (otherlv_0= '>' | otherlv_1= 'inject' ) ( (otherlv_2= '@' ( (otherlv_3= RULE_ID ) ) ) | ( (lv_name_4_0= RULE_ID ) ) ) ) ;
    public final EObject ruleDependency() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_1=null;
        Token otherlv_2=null;
        Token otherlv_3=null;
        Token lv_name_4_0=null;


        	enterRule();

        try {
            // InternalContextMappingDSL.g:16552:2: ( ( (otherlv_0= '>' | otherlv_1= 'inject' ) ( (otherlv_2= '@' ( (otherlv_3= RULE_ID ) ) ) | ( (lv_name_4_0= RULE_ID ) ) ) ) )
            // InternalContextMappingDSL.g:16553:2: ( (otherlv_0= '>' | otherlv_1= 'inject' ) ( (otherlv_2= '@' ( (otherlv_3= RULE_ID ) ) ) | ( (lv_name_4_0= RULE_ID ) ) ) )
            {
            // InternalContextMappingDSL.g:16553:2: ( (otherlv_0= '>' | otherlv_1= 'inject' ) ( (otherlv_2= '@' ( (otherlv_3= RULE_ID ) ) ) | ( (lv_name_4_0= RULE_ID ) ) ) )
            // InternalContextMappingDSL.g:16554:3: (otherlv_0= '>' | otherlv_1= 'inject' ) ( (otherlv_2= '@' ( (otherlv_3= RULE_ID ) ) ) | ( (lv_name_4_0= RULE_ID ) ) )
            {
            // InternalContextMappingDSL.g:16554:3: (otherlv_0= '>' | otherlv_1= 'inject' )
            int alt371=2;
            int LA371_0 = input.LA(1);

            if ( (LA371_0==104) ) {
                alt371=1;
            }
            else if ( (LA371_0==167) ) {
                alt371=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 371, 0, input);

                throw nvae;
            }
            switch (alt371) {
                case 1 :
                    // InternalContextMappingDSL.g:16555:4: otherlv_0= '>'
                    {
                    otherlv_0=(Token)match(input,104,FOLLOW_96); 

                    				newLeafNode(otherlv_0, grammarAccess.getDependencyAccess().getGreaterThanSignKeyword_0_0());
                    			

                    }
                    break;
                case 2 :
                    // InternalContextMappingDSL.g:16560:4: otherlv_1= 'inject'
                    {
                    otherlv_1=(Token)match(input,167,FOLLOW_96); 

                    				newLeafNode(otherlv_1, grammarAccess.getDependencyAccess().getInjectKeyword_0_1());
                    			

                    }
                    break;

            }

            // InternalContextMappingDSL.g:16565:3: ( (otherlv_2= '@' ( (otherlv_3= RULE_ID ) ) ) | ( (lv_name_4_0= RULE_ID ) ) )
            int alt372=2;
            int LA372_0 = input.LA(1);

            if ( (LA372_0==79) ) {
                alt372=1;
            }
            else if ( (LA372_0==RULE_ID) ) {
                alt372=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 372, 0, input);

                throw nvae;
            }
            switch (alt372) {
                case 1 :
                    // InternalContextMappingDSL.g:16566:4: (otherlv_2= '@' ( (otherlv_3= RULE_ID ) ) )
                    {
                    // InternalContextMappingDSL.g:16566:4: (otherlv_2= '@' ( (otherlv_3= RULE_ID ) ) )
                    // InternalContextMappingDSL.g:16567:5: otherlv_2= '@' ( (otherlv_3= RULE_ID ) )
                    {
                    otherlv_2=(Token)match(input,79,FOLLOW_10); 

                    					newLeafNode(otherlv_2, grammarAccess.getDependencyAccess().getCommercialAtKeyword_1_0_0());
                    				
                    // InternalContextMappingDSL.g:16571:5: ( (otherlv_3= RULE_ID ) )
                    // InternalContextMappingDSL.g:16572:6: (otherlv_3= RULE_ID )
                    {
                    // InternalContextMappingDSL.g:16572:6: (otherlv_3= RULE_ID )
                    // InternalContextMappingDSL.g:16573:7: otherlv_3= RULE_ID
                    {

                    							if (current==null) {
                    								current = createModelElement(grammarAccess.getDependencyRule());
                    							}
                    						
                    otherlv_3=(Token)match(input,RULE_ID,FOLLOW_2); 

                    							newLeafNode(otherlv_3, grammarAccess.getDependencyAccess().getDependencyServiceRepositoryOptionCrossReference_1_0_1_0());
                    						

                    }


                    }


                    }


                    }
                    break;
                case 2 :
                    // InternalContextMappingDSL.g:16586:4: ( (lv_name_4_0= RULE_ID ) )
                    {
                    // InternalContextMappingDSL.g:16586:4: ( (lv_name_4_0= RULE_ID ) )
                    // InternalContextMappingDSL.g:16587:5: (lv_name_4_0= RULE_ID )
                    {
                    // InternalContextMappingDSL.g:16587:5: (lv_name_4_0= RULE_ID )
                    // InternalContextMappingDSL.g:16588:6: lv_name_4_0= RULE_ID
                    {
                    lv_name_4_0=(Token)match(input,RULE_ID,FOLLOW_2); 

                    						newLeafNode(lv_name_4_0, grammarAccess.getDependencyAccess().getNameIDTerminalRuleCall_1_1_0());
                    					

                    						if (current==null) {
                    							current = createModelElement(grammarAccess.getDependencyRule());
                    						}
                    						setWithLastConsumed(
                    							current,
                    							"name",
                    							lv_name_4_0,
                    							"org.eclipse.xtext.common.Terminals.ID");
                    					

                    }


                    }


                    }
                    break;

            }


            }


            }


            	leaveRule();

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleDependency"


    // $ANTLR start "entryRuleEnum"
    // InternalContextMappingDSL.g:16609:1: entryRuleEnum returns [EObject current=null] : iv_ruleEnum= ruleEnum EOF ;
    public final EObject entryRuleEnum() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleEnum = null;


        try {
            // InternalContextMappingDSL.g:16609:45: (iv_ruleEnum= ruleEnum EOF )
            // InternalContextMappingDSL.g:16610:2: iv_ruleEnum= ruleEnum EOF
            {
             newCompositeNode(grammarAccess.getEnumRule()); 
            pushFollow(FOLLOW_1);
            iv_ruleEnum=ruleEnum();

            state._fsp--;

             current =iv_ruleEnum; 
            match(input,EOF,FOLLOW_2); 

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleEnum"


    // $ANTLR start "ruleEnum"
    // InternalContextMappingDSL.g:16616:1: ruleEnum returns [EObject current=null] : ( ( (lv_doc_0_0= RULE_STRING ) )? otherlv_1= 'enum' ( (lv_name_2_0= RULE_ID ) ) otherlv_3= '{' (otherlv_4= 'package' otherlv_5= '=' ( (lv_package_6_0= ruleJavaIdentifier ) ) )? (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) )? ( (lv_ordinal_10_0= 'ordinal' ) )? ( (lv_attributes_11_0= ruleEnumAttribute ) )* ( (lv_values_12_0= ruleEnumValue ) ) (otherlv_13= ',' ( (lv_values_14_0= ruleEnumValue ) ) )* (otherlv_15= ';' )? otherlv_16= '}' ) ;
    public final EObject ruleEnum() throws RecognitionException {
        EObject current = null;

        Token lv_doc_0_0=null;
        Token otherlv_1=null;
        Token lv_name_2_0=null;
        Token otherlv_3=null;
        Token otherlv_4=null;
        Token otherlv_5=null;
        Token otherlv_7=null;
        Token otherlv_8=null;
        Token lv_hint_9_0=null;
        Token lv_ordinal_10_0=null;
        Token otherlv_13=null;
        Token otherlv_15=null;
        Token otherlv_16=null;
        AntlrDatatypeRuleToken lv_package_6_0 = null;

        EObject lv_attributes_11_0 = null;

        EObject lv_values_12_0 = null;

        EObject lv_values_14_0 = null;



        	enterRule();

        try {
            // InternalContextMappingDSL.g:16622:2: ( ( ( (lv_doc_0_0= RULE_STRING ) )? otherlv_1= 'enum' ( (lv_name_2_0= RULE_ID ) ) otherlv_3= '{' (otherlv_4= 'package' otherlv_5= '=' ( (lv_package_6_0= ruleJavaIdentifier ) ) )? (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) )? ( (lv_ordinal_10_0= 'ordinal' ) )? ( (lv_attributes_11_0= ruleEnumAttribute ) )* ( (lv_values_12_0= ruleEnumValue ) ) (otherlv_13= ',' ( (lv_values_14_0= ruleEnumValue ) ) )* (otherlv_15= ';' )? otherlv_16= '}' ) )
            // InternalContextMappingDSL.g:16623:2: ( ( (lv_doc_0_0= RULE_STRING ) )? otherlv_1= 'enum' ( (lv_name_2_0= RULE_ID ) ) otherlv_3= '{' (otherlv_4= 'package' otherlv_5= '=' ( (lv_package_6_0= ruleJavaIdentifier ) ) )? (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) )? ( (lv_ordinal_10_0= 'ordinal' ) )? ( (lv_attributes_11_0= ruleEnumAttribute ) )* ( (lv_values_12_0= ruleEnumValue ) ) (otherlv_13= ',' ( (lv_values_14_0= ruleEnumValue ) ) )* (otherlv_15= ';' )? otherlv_16= '}' )
            {
            // InternalContextMappingDSL.g:16623:2: ( ( (lv_doc_0_0= RULE_STRING ) )? otherlv_1= 'enum' ( (lv_name_2_0= RULE_ID ) ) otherlv_3= '{' (otherlv_4= 'package' otherlv_5= '=' ( (lv_package_6_0= ruleJavaIdentifier ) ) )? (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) )? ( (lv_ordinal_10_0= 'ordinal' ) )? ( (lv_attributes_11_0= ruleEnumAttribute ) )* ( (lv_values_12_0= ruleEnumValue ) ) (otherlv_13= ',' ( (lv_values_14_0= ruleEnumValue ) ) )* (otherlv_15= ';' )? otherlv_16= '}' )
            // InternalContextMappingDSL.g:16624:3: ( (lv_doc_0_0= RULE_STRING ) )? otherlv_1= 'enum' ( (lv_name_2_0= RULE_ID ) ) otherlv_3= '{' (otherlv_4= 'package' otherlv_5= '=' ( (lv_package_6_0= ruleJavaIdentifier ) ) )? (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) )? ( (lv_ordinal_10_0= 'ordinal' ) )? ( (lv_attributes_11_0= ruleEnumAttribute ) )* ( (lv_values_12_0= ruleEnumValue ) ) (otherlv_13= ',' ( (lv_values_14_0= ruleEnumValue ) ) )* (otherlv_15= ';' )? otherlv_16= '}'
            {
            // InternalContextMappingDSL.g:16624:3: ( (lv_doc_0_0= RULE_STRING ) )?
            int alt373=2;
            int LA373_0 = input.LA(1);

            if ( (LA373_0==RULE_STRING) ) {
                alt373=1;
            }
            switch (alt373) {
                case 1 :
                    // InternalContextMappingDSL.g:16625:4: (lv_doc_0_0= RULE_STRING )
                    {
                    // InternalContextMappingDSL.g:16625:4: (lv_doc_0_0= RULE_STRING )
                    // InternalContextMappingDSL.g:16626:5: lv_doc_0_0= RULE_STRING
                    {
                    lv_doc_0_0=(Token)match(input,RULE_STRING,FOLLOW_181); 

                    					newLeafNode(lv_doc_0_0, grammarAccess.getEnumAccess().getDocSTRINGTerminalRuleCall_0_0());
                    				

                    					if (current==null) {
                    						current = createModelElement(grammarAccess.getEnumRule());
                    					}
                    					setWithLastConsumed(
                    						current,
                    						"doc",
                    						lv_doc_0_0,
                    						"org.eclipse.xtext.common.Terminals.STRING");
                    				

                    }


                    }
                    break;

            }

            otherlv_1=(Token)match(input,168,FOLLOW_10); 

            			newLeafNode(otherlv_1, grammarAccess.getEnumAccess().getEnumKeyword_1());
            		
            // InternalContextMappingDSL.g:16646:3: ( (lv_name_2_0= RULE_ID ) )
            // InternalContextMappingDSL.g:16647:4: (lv_name_2_0= RULE_ID )
            {
            // InternalContextMappingDSL.g:16647:4: (lv_name_2_0= RULE_ID )
            // InternalContextMappingDSL.g:16648:5: lv_name_2_0= RULE_ID
            {
            lv_name_2_0=(Token)match(input,RULE_ID,FOLLOW_6); 

            					newLeafNode(lv_name_2_0, grammarAccess.getEnumAccess().getNameIDTerminalRuleCall_2_0());
            				

            					if (current==null) {
            						current = createModelElement(grammarAccess.getEnumRule());
            					}
            					setWithLastConsumed(
            						current,
            						"name",
            						lv_name_2_0,
            						"org.eclipse.xtext.common.Terminals.ID");
            				

            }


            }

            otherlv_3=(Token)match(input,RULE_OPEN,FOLLOW_182); 

            			newLeafNode(otherlv_3, grammarAccess.getEnumAccess().getLeftCurlyBracketKeyword_3());
            		
            // InternalContextMappingDSL.g:16668:3: (otherlv_4= 'package' otherlv_5= '=' ( (lv_package_6_0= ruleJavaIdentifier ) ) )?
            int alt374=2;
            int LA374_0 = input.LA(1);

            if ( (LA374_0==109) ) {
                alt374=1;
            }
            switch (alt374) {
                case 1 :
                    // InternalContextMappingDSL.g:16669:4: otherlv_4= 'package' otherlv_5= '=' ( (lv_package_6_0= ruleJavaIdentifier ) )
                    {
                    otherlv_4=(Token)match(input,109,FOLLOW_81); 

                    				newLeafNode(otherlv_4, grammarAccess.getEnumAccess().getPackageKeyword_4_0());
                    			
                    otherlv_5=(Token)match(input,21,FOLLOW_10); 

                    				newLeafNode(otherlv_5, grammarAccess.getEnumAccess().getEqualsSignKeyword_4_1());
                    			
                    // InternalContextMappingDSL.g:16677:4: ( (lv_package_6_0= ruleJavaIdentifier ) )
                    // InternalContextMappingDSL.g:16678:5: (lv_package_6_0= ruleJavaIdentifier )
                    {
                    // InternalContextMappingDSL.g:16678:5: (lv_package_6_0= ruleJavaIdentifier )
                    // InternalContextMappingDSL.g:16679:6: lv_package_6_0= ruleJavaIdentifier
                    {

                    						newCompositeNode(grammarAccess.getEnumAccess().getPackageJavaIdentifierParserRuleCall_4_2_0());
                    					
                    pushFollow(FOLLOW_182);
                    lv_package_6_0=ruleJavaIdentifier();

                    state._fsp--;


                    						if (current==null) {
                    							current = createModelElementForParent(grammarAccess.getEnumRule());
                    						}
                    						set(
                    							current,
                    							"package",
                    							lv_package_6_0,
                    							"org.contextmapper.tactic.dsl.TacticDDDLanguage.JavaIdentifier");
                    						afterParserOrEnumRuleCall();
                    					

                    }


                    }


                    }
                    break;

            }

            // InternalContextMappingDSL.g:16697:3: (otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) ) )?
            int alt375=2;
            int LA375_0 = input.LA(1);

            if ( (LA375_0==67) ) {
                alt375=1;
            }
            switch (alt375) {
                case 1 :
                    // InternalContextMappingDSL.g:16698:4: otherlv_7= 'hint' otherlv_8= '=' ( (lv_hint_9_0= RULE_STRING ) )
                    {
                    otherlv_7=(Token)match(input,67,FOLLOW_81); 

                    				newLeafNode(otherlv_7, grammarAccess.getEnumAccess().getHintKeyword_5_0());
                    			
                    otherlv_8=(Token)match(input,21,FOLLOW_4); 

                    				newLeafNode(otherlv_8, grammarAccess.getEnumAccess().getEqualsSignKeyword_5_1());
                    			
                    // InternalContextMappingDSL.g:16706:4: ( (lv_hint_9_0= RULE_STRING ) )
                    // InternalContextMappingDSL.g:16707:5: (lv_hint_9_0= RULE_STRING )
                    {
                    // InternalContextMappingDSL.g:16707:5: (lv_hint_9_0= RULE_STRING )
                    // InternalContextMappingDSL.g:16708:6: lv_hint_9_0= RULE_STRING
                    {
                    lv_hint_9_0=(Token)match(input,RULE_STRING,FOLLOW_182); 

                    						newLeafNode(lv_hint_9_0, grammarAccess.getEnumAccess().getHintSTRINGTerminalRuleCall_5_2_0());
                    					

                    						if (current==null) {
                    							current = createModelElement(grammarAccess.getEnumRule());
                    						}
                    						setWithLastConsumed(
                    							current,
                    							"hint",
                    							lv_hint_9_0,
                    							"org.eclipse.xtext.common.Terminals.STRING");
                    					

                    }


                    }


                    }
                    break;

            }

            // InternalContextMappingDSL.g:16725:3: ( (lv_ordinal_10_0= 'ordinal' ) )?
            int alt376=2;
            int LA376_0 = input.LA(1);

            if ( (LA376_0==169) ) {
                alt376=1;
            }
            switch (alt376) {
                case 1 :
                    // InternalContextMappingDSL.g:16726:4: (lv_ordinal_10_0= 'ordinal' )
                    {
                    // InternalContextMappingDSL.g:16726:4: (lv_ordinal_10_0= 'ordinal' )
                    // InternalContextMappingDSL.g:16727:5: lv_ordinal_10_0= 'ordinal'
                    {
                    lv_ordinal_10_0=(Token)match(input,169,FOLLOW_182); 

                    					newLeafNode(lv_ordinal_10_0, grammarAccess.getEnumAccess().getOrdinalOrdinalKeyword_6_0());
                    				

                    					if (current==null) {
                    						current = createModelElement(grammarAccess.getEnumRule());
                    					}
                    					setWithLastConsumed(current, "ordinal", true, "ordinal");
                    				

                    }


                    }
                    break;

            }

            // InternalContextMappingDSL.g:16739:3: ( (lv_attributes_11_0= ruleEnumAttribute ) )*
            loop377:
            do {
                int alt377=2;
                switch ( input.LA(1) ) {
                case RULE_STRING:
                    {
                    int LA377_1 = input.LA(2);

                    if ( (LA377_1==RULE_ID) ) {
                        int LA377_2 = input.LA(3);

                        if ( (LA377_2==RULE_ID||LA377_2==91) ) {
                            alt377=1;
                        }


                    }
                    else if ( ((LA377_1>=170 && LA377_1<=191)) ) {
                        alt377=1;
                    }


                    }
                    break;
                case RULE_ID:
                    {
                    int LA377_2 = input.LA(2);

                    if ( (LA377_2==RULE_ID||LA377_2==91) ) {
                        alt377=1;
                    }


                    }
                    break;
                case 170:
                case 171:
                case 172:
                case 173:
                case 174:
                case 175:
                case 176:
                case 177:
                case 178:
                case 179:
                case 180:
                case 181:
                case 182:
                case 183:
                case 184:
                case 185:
                case 186:
                case 187:
                case 188:
                case 189:
                case 190:
                case 191:
                    {
                    alt377=1;
                    }
                    break;

                }

                switch (alt377) {
            	case 1 :
            	    // InternalContextMappingDSL.g:16740:4: (lv_attributes_11_0= ruleEnumAttribute )
            	    {
            	    // InternalContextMappingDSL.g:16740:4: (lv_attributes_11_0= ruleEnumAttribute )
            	    // InternalContextMappingDSL.g:16741:5: lv_attributes_11_0= ruleEnumAttribute
            	    {

            	    					newCompositeNode(grammarAccess.getEnumAccess().getAttributesEnumAttributeParserRuleCall_7_0());
            	    				
            	    pushFollow(FOLLOW_182);
            	    lv_attributes_11_0=ruleEnumAttribute();

            	    state._fsp--;


            	    					if (current==null) {
            	    						current = createModelElementForParent(grammarAccess.getEnumRule());
            	    					}
            	    					add(
            	    						current,
            	    						"attributes",
            	    						lv_attributes_11_0,
            	    						"org.contextmapper.tactic.dsl.TacticDDDLanguage.EnumAttribute");
            	    					afterParserOrEnumRuleCall();
            	    				

            	    }


            	    }
            	    break;

            	default :
            	    break loop377;
                }
            } while (true);

            // InternalContextMappingDSL.g:16758:3: ( (lv_values_12_0= ruleEnumValue ) )
            // InternalContextMappingDSL.g:16759:4: (lv_values_12_0= ruleEnumValue )
            {
            // InternalContextMappingDSL.g:16759:4: (lv_values_12_0= ruleEnumValue )
            // InternalContextMappingDSL.g:16760:5: lv_values_12_0= ruleEnumValue
            {

            					newCompositeNode(grammarAccess.getEnumAccess().getValuesEnumValueParserRuleCall_8_0());
            				
            pushFollow(FOLLOW_183);
            lv_values_12_0=ruleEnumValue();

            state._fsp--;


            					if (current==null) {
            						current = createModelElementForParent(grammarAccess.getEnumRule());
            					}
            					add(
            						current,
            						"values",
            						lv_values_12_0,
            						"org.contextmapper.tactic.dsl.TacticDDDLanguage.EnumValue");
            					afterParserOrEnumRuleCall();
            				

            }


            }

            // InternalContextMappingDSL.g:16777:3: (otherlv_13= ',' ( (lv_values_14_0= ruleEnumValue ) ) )*
            loop378:
            do {
                int alt378=2;
                int LA378_0 = input.LA(1);

                if ( (LA378_0==24) ) {
                    alt378=1;
                }


                switch (alt378) {
            	case 1 :
            	    // InternalContextMappingDSL.g:16778:4: otherlv_13= ',' ( (lv_values_14_0= ruleEnumValue ) )
            	    {
            	    otherlv_13=(Token)match(input,24,FOLLOW_182); 

            	    				newLeafNode(otherlv_13, grammarAccess.getEnumAccess().getCommaKeyword_9_0());
            	    			
            	    // InternalContextMappingDSL.g:16782:4: ( (lv_values_14_0= ruleEnumValue ) )
            	    // InternalContextMappingDSL.g:16783:5: (lv_values_14_0= ruleEnumValue )
            	    {
            	    // InternalContextMappingDSL.g:16783:5: (lv_values_14_0= ruleEnumValue )
            	    // InternalContextMappingDSL.g:16784:6: lv_values_14_0= ruleEnumValue
            	    {

            	    						newCompositeNode(grammarAccess.getEnumAccess().getValuesEnumValueParserRuleCall_9_1_0());
            	    					
            	    pushFollow(FOLLOW_183);
            	    lv_values_14_0=ruleEnumValue();

            	    state._fsp--;


            	    						if (current==null) {
            	    							current = createModelElementForParent(grammarAccess.getEnumRule());
            	    						}
            	    						add(
            	    							current,
            	    							"values",
            	    							lv_values_14_0,
            	    							"org.contextmapper.tactic.dsl.TacticDDDLanguage.EnumValue");
            	    						afterParserOrEnumRuleCall();
            	    					

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop378;
                }
            } while (true);

            // InternalContextMappingDSL.g:16802:3: (otherlv_15= ';' )?
            int alt379=2;
            int LA379_0 = input.LA(1);

            if ( (LA379_0==90) ) {
                alt379=1;
            }
            switch (alt379) {
                case 1 :
                    // InternalContextMappingDSL.g:16803:4: otherlv_15= ';'
                    {
                    otherlv_15=(Token)match(input,90,FOLLOW_35); 

                    				newLeafNode(otherlv_15, grammarAccess.getEnumAccess().getSemicolonKeyword_10());
                    			

                    }
                    break;

            }

            otherlv_16=(Token)match(input,RULE_CLOSE,FOLLOW_2); 

            			newLeafNode(otherlv_16, grammarAccess.getEnumAccess().getRightCurlyBracketKeyword_11());
            		

            }


            }


            	leaveRule();

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleEnum"


    // $ANTLR start "entryRuleEnumAttribute"
    // InternalContextMappingDSL.g:16816:1: entryRuleEnumAttribute returns [EObject current=null] : iv_ruleEnumAttribute= ruleEnumAttribute EOF ;
    public final EObject entryRuleEnumAttribute() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleEnumAttribute = null;


        try {
            // InternalContextMappingDSL.g:16816:54: (iv_ruleEnumAttribute= ruleEnumAttribute EOF )
            // InternalContextMappingDSL.g:16817:2: iv_ruleEnumAttribute= ruleEnumAttribute EOF
            {
             newCompositeNode(grammarAccess.getEnumAttributeRule()); 
            pushFollow(FOLLOW_1);
            iv_ruleEnumAttribute=ruleEnumAttribute();

            state._fsp--;

             current =iv_ruleEnumAttribute; 
            match(input,EOF,FOLLOW_2); 

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleEnumAttribute"


    // $ANTLR start "ruleEnumAttribute"
    // InternalContextMappingDSL.g:16823:1: ruleEnumAttribute returns [EObject current=null] : ( ( (lv_doc_0_0= RULE_STRING ) )? ( (lv_type_1_0= ruleType ) ) ( (lv_name_2_0= RULE_ID ) ) ( (lv_key_3_0= 'key' ) )? (otherlv_4= ';' )? ) ;
    public final EObject ruleEnumAttribute() throws RecognitionException {
        EObject current = null;

        Token lv_doc_0_0=null;
        Token lv_name_2_0=null;
        Token lv_key_3_0=null;
        Token otherlv_4=null;
        AntlrDatatypeRuleToken lv_type_1_0 = null;



        	enterRule();

        try {
            // InternalContextMappingDSL.g:16829:2: ( ( ( (lv_doc_0_0= RULE_STRING ) )? ( (lv_type_1_0= ruleType ) ) ( (lv_name_2_0= RULE_ID ) ) ( (lv_key_3_0= 'key' ) )? (otherlv_4= ';' )? ) )
            // InternalContextMappingDSL.g:16830:2: ( ( (lv_doc_0_0= RULE_STRING ) )? ( (lv_type_1_0= ruleType ) ) ( (lv_name_2_0= RULE_ID ) ) ( (lv_key_3_0= 'key' ) )? (otherlv_4= ';' )? )
            {
            // InternalContextMappingDSL.g:16830:2: ( ( (lv_doc_0_0= RULE_STRING ) )? ( (lv_type_1_0= ruleType ) ) ( (lv_name_2_0= RULE_ID ) ) ( (lv_key_3_0= 'key' ) )? (otherlv_4= ';' )? )
            // InternalContextMappingDSL.g:16831:3: ( (lv_doc_0_0= RULE_STRING ) )? ( (lv_type_1_0= ruleType ) ) ( (lv_name_2_0= RULE_ID ) ) ( (lv_key_3_0= 'key' ) )? (otherlv_4= ';' )?
            {
            // InternalContextMappingDSL.g:16831:3: ( (lv_doc_0_0= RULE_STRING ) )?
            int alt380=2;
            int LA380_0 = input.LA(1);

            if ( (LA380_0==RULE_STRING) ) {
                alt380=1;
            }
            switch (alt380) {
                case 1 :
                    // InternalContextMappingDSL.g:16832:4: (lv_doc_0_0= RULE_STRING )
                    {
                    // InternalContextMappingDSL.g:16832:4: (lv_doc_0_0= RULE_STRING )
                    // InternalContextMappingDSL.g:16833:5: lv_doc_0_0= RULE_STRING
                    {
                    lv_doc_0_0=(Token)match(input,RULE_STRING,FOLLOW_163); 

                    					newLeafNode(lv_doc_0_0, grammarAccess.getEnumAttributeAccess().getDocSTRINGTerminalRuleCall_0_0());
                    				

                    					if (current==null) {
                    						current = createModelElement(grammarAccess.getEnumAttributeRule());
                    					}
                    					setWithLastConsumed(
                    						current,
                    						"doc",
                    						lv_doc_0_0,
                    						"org.eclipse.xtext.common.Terminals.STRING");
                    				

                    }


                    }
                    break;

            }

            // InternalContextMappingDSL.g:16849:3: ( (lv_type_1_0= ruleType ) )
            // InternalContextMappingDSL.g:16850:4: (lv_type_1_0= ruleType )
            {
            // InternalContextMappingDSL.g:16850:4: (lv_type_1_0= ruleType )
            // InternalContextMappingDSL.g:16851:5: lv_type_1_0= ruleType
            {

            					newCompositeNode(grammarAccess.getEnumAttributeAccess().getTypeTypeParserRuleCall_1_0());
            				
            pushFollow(FOLLOW_10);
            lv_type_1_0=ruleType();

            state._fsp--;


            					if (current==null) {
            						current = createModelElementForParent(grammarAccess.getEnumAttributeRule());
            					}
            					set(
            						current,
            						"type",
            						lv_type_1_0,
            						"org.contextmapper.tactic.dsl.TacticDDDLanguage.Type");
            					afterParserOrEnumRuleCall();
            				

            }


            }

            // InternalContextMappingDSL.g:16868:3: ( (lv_name_2_0= RULE_ID ) )
            // InternalContextMappingDSL.g:16869:4: (lv_name_2_0= RULE_ID )
            {
            // InternalContextMappingDSL.g:16869:4: (lv_name_2_0= RULE_ID )
            // InternalContextMappingDSL.g:16870:5: lv_name_2_0= RULE_ID
            {
            lv_name_2_0=(Token)match(input,RULE_ID,FOLLOW_184); 

            					newLeafNode(lv_name_2_0, grammarAccess.getEnumAttributeAccess().getNameIDTerminalRuleCall_2_0());
            				

            					if (current==null) {
            						current = createModelElement(grammarAccess.getEnumAttributeRule());
            					}
            					setWithLastConsumed(
            						current,
            						"name",
            						lv_name_2_0,
            						"org.eclipse.xtext.common.Terminals.ID");
            				

            }


            }

            // InternalContextMappingDSL.g:16886:3: ( (lv_key_3_0= 'key' ) )?
            int alt381=2;
            int LA381_0 = input.LA(1);

            if ( (LA381_0==131) ) {
                alt381=1;
            }
            switch (alt381) {
                case 1 :
                    // InternalContextMappingDSL.g:16887:4: (lv_key_3_0= 'key' )
                    {
                    // InternalContextMappingDSL.g:16887:4: (lv_key_3_0= 'key' )
                    // InternalContextMappingDSL.g:16888:5: lv_key_3_0= 'key'
                    {
                    lv_key_3_0=(Token)match(input,131,FOLLOW_185); 

                    					newLeafNode(lv_key_3_0, grammarAccess.getEnumAttributeAccess().getKeyKeyKeyword_3_0());
                    				

                    					if (current==null) {
                    						current = createModelElement(grammarAccess.getEnumAttributeRule());
                    					}
                    					setWithLastConsumed(current, "key", true, "key");
                    				

                    }


                    }
                    break;

            }

            // InternalContextMappingDSL.g:16900:3: (otherlv_4= ';' )?
            int alt382=2;
            int LA382_0 = input.LA(1);

            if ( (LA382_0==90) ) {
                alt382=1;
            }
            switch (alt382) {
                case 1 :
                    // InternalContextMappingDSL.g:16901:4: otherlv_4= ';'
                    {
                    otherlv_4=(Token)match(input,90,FOLLOW_2); 

                    				newLeafNode(otherlv_4, grammarAccess.getEnumAttributeAccess().getSemicolonKeyword_4());
                    			

                    }
                    break;

            }


            }


            }


            	leaveRule();

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleEnumAttribute"


    // $ANTLR start "entryRuleEnumValue"
    // InternalContextMappingDSL.g:16910:1: entryRuleEnumValue returns [EObject current=null] : iv_ruleEnumValue= ruleEnumValue EOF ;
    public final EObject entryRuleEnumValue() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleEnumValue = null;


        try {
            // InternalContextMappingDSL.g:16910:50: (iv_ruleEnumValue= ruleEnumValue EOF )
            // InternalContextMappingDSL.g:16911:2: iv_ruleEnumValue= ruleEnumValue EOF
            {
             newCompositeNode(grammarAccess.getEnumValueRule()); 
            pushFollow(FOLLOW_1);
            iv_ruleEnumValue=ruleEnumValue();

            state._fsp--;

             current =iv_ruleEnumValue; 
            match(input,EOF,FOLLOW_2); 

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleEnumValue"


    // $ANTLR start "ruleEnumValue"
    // InternalContextMappingDSL.g:16917:1: ruleEnumValue returns [EObject current=null] : ( ( (lv_doc_0_0= RULE_STRING ) )? ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= '(' ( (lv_parameters_3_0= ruleEnumParameter ) ) (otherlv_4= ',' ( (lv_parameters_5_0= ruleEnumParameter ) ) )* otherlv_6= ')' )? ) ;
    public final EObject ruleEnumValue() throws RecognitionException {
        EObject current = null;

        Token lv_doc_0_0=null;
        Token lv_name_1_0=null;
        Token otherlv_2=null;
        Token otherlv_4=null;
        Token otherlv_6=null;
        EObject lv_parameters_3_0 = null;

        EObject lv_parameters_5_0 = null;



        	enterRule();

        try {
            // InternalContextMappingDSL.g:16923:2: ( ( ( (lv_doc_0_0= RULE_STRING ) )? ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= '(' ( (lv_parameters_3_0= ruleEnumParameter ) ) (otherlv_4= ',' ( (lv_parameters_5_0= ruleEnumParameter ) ) )* otherlv_6= ')' )? ) )
            // InternalContextMappingDSL.g:16924:2: ( ( (lv_doc_0_0= RULE_STRING ) )? ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= '(' ( (lv_parameters_3_0= ruleEnumParameter ) ) (otherlv_4= ',' ( (lv_parameters_5_0= ruleEnumParameter ) ) )* otherlv_6= ')' )? )
            {
            // InternalContextMappingDSL.g:16924:2: ( ( (lv_doc_0_0= RULE_STRING ) )? ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= '(' ( (lv_parameters_3_0= ruleEnumParameter ) ) (otherlv_4= ',' ( (lv_parameters_5_0= ruleEnumParameter ) ) )* otherlv_6= ')' )? )
            // InternalContextMappingDSL.g:16925:3: ( (lv_doc_0_0= RULE_STRING ) )? ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= '(' ( (lv_parameters_3_0= ruleEnumParameter ) ) (otherlv_4= ',' ( (lv_parameters_5_0= ruleEnumParameter ) ) )* otherlv_6= ')' )?
            {
            // InternalContextMappingDSL.g:16925:3: ( (lv_doc_0_0= RULE_STRING ) )?
            int alt383=2;
            int LA383_0 = input.LA(1);

            if ( (LA383_0==RULE_STRING) ) {
                alt383=1;
            }
            switch (alt383) {
                case 1 :
                    // InternalContextMappingDSL.g:16926:4: (lv_doc_0_0= RULE_STRING )
                    {
                    // InternalContextMappingDSL.g:16926:4: (lv_doc_0_0= RULE_STRING )
                    // InternalContextMappingDSL.g:16927:5: lv_doc_0_0= RULE_STRING
                    {
                    lv_doc_0_0=(Token)match(input,RULE_STRING,FOLLOW_10); 

                    					newLeafNode(lv_doc_0_0, grammarAccess.getEnumValueAccess().getDocSTRINGTerminalRuleCall_0_0());
                    				

                    					if (current==null) {
                    						current = createModelElement(grammarAccess.getEnumValueRule());
                    					}
                    					setWithLastConsumed(
                    						current,
                    						"doc",
                    						lv_doc_0_0,
                    						"org.eclipse.xtext.common.Terminals.STRING");
                    				

                    }


                    }
                    break;

            }

            // InternalContextMappingDSL.g:16943:3: ( (lv_name_1_0= RULE_ID ) )
            // InternalContextMappingDSL.g:16944:4: (lv_name_1_0= RULE_ID )
            {
            // InternalContextMappingDSL.g:16944:4: (lv_name_1_0= RULE_ID )
            // InternalContextMappingDSL.g:16945:5: lv_name_1_0= RULE_ID
            {
            lv_name_1_0=(Token)match(input,RULE_ID,FOLLOW_186); 

            					newLeafNode(lv_name_1_0, grammarAccess.getEnumValueAccess().getNameIDTerminalRuleCall_1_0());
            				

            					if (current==null) {
            						current = createModelElement(grammarAccess.getEnumValueRule());
            					}
            					setWithLastConsumed(
            						current,
            						"name",
            						lv_name_1_0,
            						"org.eclipse.xtext.common.Terminals.ID");
            				

            }


            }

            // InternalContextMappingDSL.g:16961:3: (otherlv_2= '(' ( (lv_parameters_3_0= ruleEnumParameter ) ) (otherlv_4= ',' ( (lv_parameters_5_0= ruleEnumParameter ) ) )* otherlv_6= ')' )?
            int alt385=2;
            int LA385_0 = input.LA(1);

            if ( (LA385_0==87) ) {
                alt385=1;
            }
            switch (alt385) {
                case 1 :
                    // InternalContextMappingDSL.g:16962:4: otherlv_2= '(' ( (lv_parameters_3_0= ruleEnumParameter ) ) (otherlv_4= ',' ( (lv_parameters_5_0= ruleEnumParameter ) ) )* otherlv_6= ')'
                    {
                    otherlv_2=(Token)match(input,87,FOLLOW_187); 

                    				newLeafNode(otherlv_2, grammarAccess.getEnumValueAccess().getLeftParenthesisKeyword_2_0());
                    			
                    // InternalContextMappingDSL.g:16966:4: ( (lv_parameters_3_0= ruleEnumParameter ) )
                    // InternalContextMappingDSL.g:16967:5: (lv_parameters_3_0= ruleEnumParameter )
                    {
                    // InternalContextMappingDSL.g:16967:5: (lv_parameters_3_0= ruleEnumParameter )
                    // InternalContextMappingDSL.g:16968:6: lv_parameters_3_0= ruleEnumParameter
                    {

                    						newCompositeNode(grammarAccess.getEnumValueAccess().getParametersEnumParameterParserRuleCall_2_1_0());
                    					
                    pushFollow(FOLLOW_105);
                    lv_parameters_3_0=ruleEnumParameter();

                    state._fsp--;


                    						if (current==null) {
                    							current = createModelElementForParent(grammarAccess.getEnumValueRule());
                    						}
                    						add(
                    							current,
                    							"parameters",
                    							lv_parameters_3_0,
                    							"org.contextmapper.tactic.dsl.TacticDDDLanguage.EnumParameter");
                    						afterParserOrEnumRuleCall();
                    					

                    }


                    }

                    // InternalContextMappingDSL.g:16985:4: (otherlv_4= ',' ( (lv_parameters_5_0= ruleEnumParameter ) ) )*
                    loop384:
                    do {
                        int alt384=2;
                        int LA384_0 = input.LA(1);

                        if ( (LA384_0==24) ) {
                            alt384=1;
                        }


                        switch (alt384) {
                    	case 1 :
                    	    // InternalContextMappingDSL.g:16986:5: otherlv_4= ',' ( (lv_parameters_5_0= ruleEnumParameter ) )
                    	    {
                    	    otherlv_4=(Token)match(input,24,FOLLOW_187); 

                    	    					newLeafNode(otherlv_4, grammarAccess.getEnumValueAccess().getCommaKeyword_2_2_0());
                    	    				
                    	    // InternalContextMappingDSL.g:16990:5: ( (lv_parameters_5_0= ruleEnumParameter ) )
                    	    // InternalContextMappingDSL.g:16991:6: (lv_parameters_5_0= ruleEnumParameter )
                    	    {
                    	    // InternalContextMappingDSL.g:16991:6: (lv_parameters_5_0= ruleEnumParameter )
                    	    // InternalContextMappingDSL.g:16992:7: lv_parameters_5_0= ruleEnumParameter
                    	    {

                    	    							newCompositeNode(grammarAccess.getEnumValueAccess().getParametersEnumParameterParserRuleCall_2_2_1_0());
                    	    						
                    	    pushFollow(FOLLOW_105);
                    	    lv_parameters_5_0=ruleEnumParameter();

                    	    state._fsp--;


                    	    							if (current==null) {
                    	    								current = createModelElementForParent(grammarAccess.getEnumValueRule());
                    	    							}
                    	    							add(
                    	    								current,
                    	    								"parameters",
                    	    								lv_parameters_5_0,
                    	    								"org.contextmapper.tactic.dsl.TacticDDDLanguage.EnumParameter");
                    	    							afterParserOrEnumRuleCall();
                    	    						

                    	    }


                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop384;
                        }
                    } while (true);

                    otherlv_6=(Token)match(input,88,FOLLOW_2); 

                    				newLeafNode(otherlv_6, grammarAccess.getEnumValueAccess().getRightParenthesisKeyword_2_3());
                    			

                    }
                    break;

            }


            }


            }


            	leaveRule();

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleEnumValue"


    // $ANTLR start "entryRuleEnumParameter"
    // InternalContextMappingDSL.g:17019:1: entryRuleEnumParameter returns [EObject current=null] : iv_ruleEnumParameter= ruleEnumParameter EOF ;
    public final EObject entryRuleEnumParameter() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleEnumParameter = null;


        try {
            // InternalContextMappingDSL.g:17019:54: (iv_ruleEnumParameter= ruleEnumParameter EOF )
            // InternalContextMappingDSL.g:17020:2: iv_ruleEnumParameter= ruleEnumParameter EOF
            {
             newCompositeNode(grammarAccess.getEnumParameterRule()); 
            pushFollow(FOLLOW_1);
            iv_ruleEnumParameter=ruleEnumParameter();

            state._fsp--;

             current =iv_ruleEnumParameter; 
            match(input,EOF,FOLLOW_2); 

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleEnumParameter"


    // $ANTLR start "ruleEnumParameter"
    // InternalContextMappingDSL.g:17026:1: ruleEnumParameter returns [EObject current=null] : ( ( (lv_value_0_0= RULE_STRING ) ) | ( (lv_integerValue_1_0= RULE_INT ) ) ) ;
    public final EObject ruleEnumParameter() throws RecognitionException {
        EObject current = null;

        Token lv_value_0_0=null;
        Token lv_integerValue_1_0=null;


        	enterRule();

        try {
            // InternalContextMappingDSL.g:17032:2: ( ( ( (lv_value_0_0= RULE_STRING ) ) | ( (lv_integerValue_1_0= RULE_INT ) ) ) )
            // InternalContextMappingDSL.g:17033:2: ( ( (lv_value_0_0= RULE_STRING ) ) | ( (lv_integerValue_1_0= RULE_INT ) ) )
            {
            // InternalContextMappingDSL.g:17033:2: ( ( (lv_value_0_0= RULE_STRING ) ) | ( (lv_integerValue_1_0= RULE_INT ) ) )
            int alt386=2;
            int LA386_0 = input.LA(1);

            if ( (LA386_0==RULE_STRING) ) {
                alt386=1;
            }
            else if ( (LA386_0==RULE_INT) ) {
                alt386=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 386, 0, input);

                throw nvae;
            }
            switch (alt386) {
                case 1 :
                    // InternalContextMappingDSL.g:17034:3: ( (lv_value_0_0= RULE_STRING ) )
                    {
                    // InternalContextMappingDSL.g:17034:3: ( (lv_value_0_0= RULE_STRING ) )
                    // InternalContextMappingDSL.g:17035:4: (lv_value_0_0= RULE_STRING )
                    {
                    // InternalContextMappingDSL.g:17035:4: (lv_value_0_0= RULE_STRING )
                    // InternalContextMappingDSL.g:17036:5: lv_value_0_0= RULE_STRING
                    {
                    lv_value_0_0=(Token)match(input,RULE_STRING,FOLLOW_2); 

                    					newLeafNode(lv_value_0_0, grammarAccess.getEnumParameterAccess().getValueSTRINGTerminalRuleCall_0_0());
                    				

                    					if (current==null) {
                    						current = createModelElement(grammarAccess.getEnumParameterRule());
                    					}
                    					setWithLastConsumed(
                    						current,
                    						"value",
                    						lv_value_0_0,
                    						"org.eclipse.xtext.common.Terminals.STRING");
                    				

                    }


                    }


                    }
                    break;
                case 2 :
                    // InternalContextMappingDSL.g:17053:3: ( (lv_integerValue_1_0= RULE_INT ) )
                    {
                    // InternalContextMappingDSL.g:17053:3: ( (lv_integerValue_1_0= RULE_INT ) )
                    // InternalContextMappingDSL.g:17054:4: (lv_integerValue_1_0= RULE_INT )
                    {
                    // InternalContextMappingDSL.g:17054:4: (lv_integerValue_1_0= RULE_INT )
                    // InternalContextMappingDSL.g:17055:5: lv_integerValue_1_0= RULE_INT
                    {
                    lv_integerValue_1_0=(Token)match(input,RULE_INT,FOLLOW_2); 

                    					newLeafNode(lv_integerValue_1_0, grammarAccess.getEnumParameterAccess().getIntegerValueINTTerminalRuleCall_1_0());
                    				

                    					if (current==null) {
                    						current = createModelElement(grammarAccess.getEnumParameterRule());
                    					}
                    					setWithLastConsumed(
                    						current,
                    						"integerValue",
                    						lv_integerValue_1_0,
                    						"org.eclipse.xtext.common.Terminals.INT");
                    				

                    }


                    }


                    }
                    break;

            }


            }


            	leaveRule();

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleEnumParameter"


    // $ANTLR start "entryRuleProperty"
    // InternalContextMappingDSL.g:17075:1: entryRuleProperty returns [EObject current=null] : iv_ruleProperty= ruleProperty EOF ;
    public final EObject entryRuleProperty() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleProperty = null;


        try {
            // InternalContextMappingDSL.g:17075:49: (iv_ruleProperty= ruleProperty EOF )
            // InternalContextMappingDSL.g:17076:2: iv_ruleProperty= ruleProperty EOF
            {
             newCompositeNode(grammarAccess.getPropertyRule()); 
            pushFollow(FOLLOW_1);
            iv_ruleProperty=ruleProperty();

            state._fsp--;

             current =iv_ruleProperty; 
            match(input,EOF,FOLLOW_2); 

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleProperty"


    // $ANTLR start "ruleProperty"
    // InternalContextMappingDSL.g:17082:1: ruleProperty returns [EObject current=null] : (this_Attribute_0= ruleAttribute | this_Reference_1= ruleReference ) ;
    public final EObject ruleProperty() throws RecognitionException {
        EObject current = null;

        EObject this_Attribute_0 = null;

        EObject this_Reference_1 = null;



        	enterRule();

        try {
            // InternalContextMappingDSL.g:17088:2: ( (this_Attribute_0= ruleAttribute | this_Reference_1= ruleReference ) )
            // InternalContextMappingDSL.g:17089:2: (this_Attribute_0= ruleAttribute | this_Reference_1= ruleReference )
            {
            // InternalContextMappingDSL.g:17089:2: (this_Attribute_0= ruleAttribute | this_Reference_1= ruleReference )
            int alt387=2;
            switch ( input.LA(1) ) {
            case RULE_STRING:
                {
                int LA387_1 = input.LA(2);

                if ( (LA387_1==RULE_ID||LA387_1==109||(LA387_1>=170 && LA387_1<=191)||LA387_1==218||(LA387_1>=228 && LA387_1<=234)) ) {
                    alt387=1;
                }
                else if ( (LA387_1==RULE_REF) ) {
                    alt387=2;
                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("", 387, 1, input);

                    throw nvae;
                }
                }
                break;
            case RULE_ID:
            case 109:
            case 170:
            case 171:
            case 172:
            case 173:
            case 174:
            case 175:
            case 176:
            case 177:
            case 178:
            case 179:
            case 180:
            case 181:
            case 182:
            case 183:
            case 184:
            case 185:
            case 186:
            case 187:
            case 188:
            case 189:
            case 190:
            case 191:
            case 218:
            case 228:
            case 229:
            case 230:
            case 231:
            case 232:
            case 233:
            case 234:
                {
                alt387=1;
                }
                break;
            case RULE_REF:
                {
                alt387=2;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("", 387, 0, input);

                throw nvae;
            }

            switch (alt387) {
                case 1 :
                    // InternalContextMappingDSL.g:17090:3: this_Attribute_0= ruleAttribute
                    {

                    			newCompositeNode(grammarAccess.getPropertyAccess().getAttributeParserRuleCall_0());
                    		
                    pushFollow(FOLLOW_2);
                    this_Attribute_0=ruleAttribute();

                    state._fsp--;


                    			current = this_Attribute_0;
                    			afterParserOrEnumRuleCall();
                    		

                    }
                    break;
                case 2 :
                    // InternalContextMappingDSL.g:17099:3: this_Reference_1= ruleReference
                    {

                    			newCompositeNode(grammarAccess.getPropertyAccess().getReferenceParserRuleCall_1());
                    		
                    pushFollow(FOLLOW_2);
                    this_Reference_1=ruleReference();

                    state._fsp--;


                    			current = this_Reference_1;
                    			afterParserOrEnumRuleCall();
                    		

                    }
                    break;

            }


            }


            	leaveRule();

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleProperty"


    // $ANTLR start "entryRuleDtoProperty"
    // InternalContextMappingDSL.g:17111:1: entryRuleDtoProperty returns [EObject current=null] : iv_ruleDtoProperty= ruleDtoProperty EOF ;
    public final EObject entryRuleDtoProperty() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleDtoProperty = null;


        try {
            // InternalContextMappingDSL.g:17111:52: (iv_ruleDtoProperty= ruleDtoProperty EOF )
            // InternalContextMappingDSL.g:17112:2: iv_ruleDtoProperty= ruleDtoProperty EOF
            {
             newCompositeNode(grammarAccess.getDtoPropertyRule()); 
            pushFollow(FOLLOW_1);
            iv_ruleDtoProperty=ruleDtoProperty();

            state._fsp--;

             current =iv_ruleDtoProperty; 
            match(input,EOF,FOLLOW_2); 

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleDtoProperty"


    // $ANTLR start "ruleDtoProperty"
    // InternalContextMappingDSL.g:17118:1: ruleDtoProperty returns [EObject current=null] : (this_DtoAttribute_0= ruleDtoAttribute | this_DtoReference_1= ruleDtoReference ) ;
    public final EObject ruleDtoProperty() throws RecognitionException {
        EObject current = null;

        EObject this_DtoAttribute_0 = null;

        EObject this_DtoReference_1 = null;



        	enterRule();

        try {
            // InternalContextMappingDSL.g:17124:2: ( (this_DtoAttribute_0= ruleDtoAttribute | this_DtoReference_1= ruleDtoReference ) )
            // InternalContextMappingDSL.g:17125:2: (this_DtoAttribute_0= ruleDtoAttribute | this_DtoReference_1= ruleDtoReference )
            {
            // InternalContextMappingDSL.g:17125:2: (this_DtoAttribute_0= ruleDtoAttribute | this_DtoReference_1= ruleDtoReference )
            int alt388=2;
            switch ( input.LA(1) ) {
            case RULE_STRING:
                {
                int LA388_1 = input.LA(2);

                if ( (LA388_1==RULE_ID||LA388_1==109||(LA388_1>=170 && LA388_1<=191)||LA388_1==218||(LA388_1>=228 && LA388_1<=234)) ) {
                    alt388=1;
                }
                else if ( (LA388_1==RULE_REF) ) {
                    alt388=2;
                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("", 388, 1, input);

                    throw nvae;
                }
                }
                break;
            case RULE_ID:
            case 109:
            case 170:
            case 171:
            case 172:
            case 173:
            case 174:
            case 175:
            case 176:
            case 177:
            case 178:
            case 179:
            case 180:
            case 181:
            case 182:
            case 183:
            case 184:
            case 185:
            case 186:
            case 187:
            case 188:
            case 189:
            case 190:
            case 191:
            case 218:
            case 228:
            case 229:
            case 230:
            case 231:
            case 232:
            case 233:
            case 234:
                {
                alt388=1;
                }
                break;
            case RULE_REF:
                {
                alt388=2;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("", 388, 0, input);

                throw nvae;
            }

            switch (alt388) {
                case 1 :
                    // InternalContextMappingDSL.g:17126:3: this_DtoAttribute_0= ruleDtoAttribute
                    {

                    			newCompositeNode(grammarAccess.getDtoPropertyAccess().getDtoAttributeParserRuleCall_0());
                    		
                    pushFollow(FOLLOW_2);
                    this_DtoAttribute_0=ruleDtoAttribute();

                    state._fsp--;


                    			current = this_DtoAttribute_0;
                    			afterParserOrEnumRuleCall();
                    		

                    }
                    break;
                case 2 :
                    // InternalContextMappingDSL.g:17135:3: this_DtoReference_1= ruleDtoReference
                    {

                    			newCompositeNode(grammarAccess.getDtoPropertyAccess().getDtoReferenceParserRuleCall_1());
                    		
                    pushFollow(FOLLOW_2);
                    this_DtoReference_1=ruleDtoReference();

                    state._fsp--;


                    			current = this_DtoReference_1;
                    			afterParserOrEnumRuleCall();
                    		

                    }
                    break;

            }


            }


            	leaveRule();

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleDtoProperty"


    // $ANTLR start "entryRuleType"
    // InternalContextMappingDSL.g:17147:1: entryRuleType returns [String current=null] : iv_ruleType= ruleType EOF ;
    public final String entryRuleType() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleType = null;


        try {
            // InternalContextMappingDSL.g:17147:44: (iv_ruleType= ruleType EOF )
            // InternalContextMappingDSL.g:17148:2: iv_ruleType= ruleType EOF
            {
             newCompositeNode(grammarAccess.getTypeRule()); 
            pushFollow(FOLLOW_1);
            iv_ruleType=ruleType();

            state._fsp--;

             current =iv_ruleType.getText(); 
            match(input,EOF,FOLLOW_2); 

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleType"


    // $ANTLR start "ruleType"
    // InternalContextMappingDSL.g:17154:1: ruleType returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (kw= 'String' | kw= 'int' | kw= 'Integer' | kw= 'long' | kw= 'Long' | kw= 'boolean' | kw= 'Boolean' | kw= 'Date' | kw= 'DateTime' | kw= 'Timestamp' | kw= 'BigDecimal' | kw= 'BigInteger' | kw= 'double' | kw= 'Double' | kw= 'float' | kw= 'Float' | kw= 'Key' | kw= 'PagingParameter' | kw= 'PagedResult' | kw= 'Blob' | kw= 'Clob' | kw= 'Object[]' | this_JavaIdentifier_22= ruleJavaIdentifier ) ;
    public final AntlrDatatypeRuleToken ruleType() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;
        AntlrDatatypeRuleToken this_JavaIdentifier_22 = null;



        	enterRule();

        try {
            // InternalContextMappingDSL.g:17160:2: ( (kw= 'String' | kw= 'int' | kw= 'Integer' | kw= 'long' | kw= 'Long' | kw= 'boolean' | kw= 'Boolean' | kw= 'Date' | kw= 'DateTime' | kw= 'Timestamp' | kw= 'BigDecimal' | kw= 'BigInteger' | kw= 'double' | kw= 'Double' | kw= 'float' | kw= 'Float' | kw= 'Key' | kw= 'PagingParameter' | kw= 'PagedResult' | kw= 'Blob' | kw= 'Clob' | kw= 'Object[]' | this_JavaIdentifier_22= ruleJavaIdentifier ) )
            // InternalContextMappingDSL.g:17161:2: (kw= 'String' | kw= 'int' | kw= 'Integer' | kw= 'long' | kw= 'Long' | kw= 'boolean' | kw= 'Boolean' | kw= 'Date' | kw= 'DateTime' | kw= 'Timestamp' | kw= 'BigDecimal' | kw= 'BigInteger' | kw= 'double' | kw= 'Double' | kw= 'float' | kw= 'Float' | kw= 'Key' | kw= 'PagingParameter' | kw= 'PagedResult' | kw= 'Blob' | kw= 'Clob' | kw= 'Object[]' | this_JavaIdentifier_22= ruleJavaIdentifier )
            {
            // InternalContextMappingDSL.g:17161:2: (kw= 'String' | kw= 'int' | kw= 'Integer' | kw= 'long' | kw= 'Long' | kw= 'boolean' | kw= 'Boolean' | kw= 'Date' | kw= 'DateTime' | kw= 'Timestamp' | kw= 'BigDecimal' | kw= 'BigInteger' | kw= 'double' | kw= 'Double' | kw= 'float' | kw= 'Float' | kw= 'Key' | kw= 'PagingParameter' | kw= 'PagedResult' | kw= 'Blob' | kw= 'Clob' | kw= 'Object[]' | this_JavaIdentifier_22= ruleJavaIdentifier )
            int alt389=23;
            switch ( input.LA(1) ) {
            case 170:
                {
                alt389=1;
                }
                break;
            case 171:
                {
                alt389=2;
                }
                break;
            case 172:
                {
                alt389=3;
                }
                break;
            case 173:
                {
                alt389=4;
                }
                break;
            case 174:
                {
                alt389=5;
                }
                break;
            case 175:
                {
                alt389=6;
                }
                break;
            case 176:
                {
                alt389=7;
                }
                break;
            case 177:
                {
                alt389=8;
                }
                break;
            case 178:
                {
                alt389=9;
                }
                break;
            case 179:
                {
                alt389=10;
                }
                break;
            case 180:
                {
                alt389=11;
                }
                break;
            case 181:
                {
                alt389=12;
                }
                break;
            case 182:
                {
                alt389=13;
                }
                break;
            case 183:
                {
                alt389=14;
                }
                break;
            case 184:
                {
                alt389=15;
                }
                break;
            case 185:
                {
                alt389=16;
                }
                break;
            case 186:
                {
                alt389=17;
                }
                break;
            case 187:
                {
                alt389=18;
                }
                break;
            case 188:
                {
                alt389=19;
                }
                break;
            case 189:
                {
                alt389=20;
                }
                break;
            case 190:
                {
                alt389=21;
                }
                break;
            case 191:
                {
                alt389=22;
                }
                break;
            case RULE_ID:
                {
                alt389=23;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("", 389, 0, input);

                throw nvae;
            }

            switch (alt389) {
                case 1 :
                    // InternalContextMappingDSL.g:17162:3: kw= 'String'
                    {
                    kw=(Token)match(input,170,FOLLOW_2); 

                    			current.merge(kw);
                    			newLeafNode(kw, grammarAccess.getTypeAccess().getStringKeyword_0());
                    		

                    }
                    break;
                case 2 :
                    // InternalContextMappingDSL.g:17168:3: kw= 'int'
                    {
                    kw=(Token)match(input,171,FOLLOW_2); 

                    			current.merge(kw);
                    			newLeafNode(kw, grammarAccess.getTypeAccess().getIntKeyword_1());
                    		

                    }
                    break;
                case 3 :
                    // InternalContextMappingDSL.g:17174:3: kw= 'Integer'
                    {
                    kw=(Token)match(input,172,FOLLOW_2); 

                    			current.merge(kw);
                    			newLeafNode(kw, grammarAccess.getTypeAccess().getIntegerKeyword_2());
                    		

                    }
                    break;
                case 4 :
                    // InternalContextMappingDSL.g:17180:3: kw= 'long'
                    {
                    kw=(Token)match(input,173,FOLLOW_2); 

                    			current.merge(kw);
                    			newLeafNode(kw, grammarAccess.getTypeAccess().getLongKeyword_3());
                    		

                    }
                    break;
                case 5 :
                    // InternalContextMappingDSL.g:17186:3: kw= 'Long'
                    {
                    kw=(Token)match(input,174,FOLLOW_2); 

                    			current.merge(kw);
                    			newLeafNode(kw, grammarAccess.getTypeAccess().getLongKeyword_4());
                    		

                    }
                    break;
                case 6 :
                    // InternalContextMappingDSL.g:17192:3: kw= 'boolean'
                    {
                    kw=(Token)match(input,175,FOLLOW_2); 

                    			current.merge(kw);
                    			newLeafNode(kw, grammarAccess.getTypeAccess().getBooleanKeyword_5());
                    		

                    }
                    break;
                case 7 :
                    // InternalContextMappingDSL.g:17198:3: kw= 'Boolean'
                    {
                    kw=(Token)match(input,176,FOLLOW_2); 

                    			current.merge(kw);
                    			newLeafNode(kw, grammarAccess.getTypeAccess().getBooleanKeyword_6());
                    		

                    }
                    break;
                case 8 :
                    // InternalContextMappingDSL.g:17204:3: kw= 'Date'
                    {
                    kw=(Token)match(input,177,FOLLOW_2); 

                    			current.merge(kw);
                    			newLeafNode(kw, grammarAccess.getTypeAccess().getDateKeyword_7());
                    		

                    }
                    break;
                case 9 :
                    // InternalContextMappingDSL.g:17210:3: kw= 'DateTime'
                    {
                    kw=(Token)match(input,178,FOLLOW_2); 

                    			current.merge(kw);
                    			newLeafNode(kw, grammarAccess.getTypeAccess().getDateTimeKeyword_8());
                    		

                    }
                    break;
                case 10 :
                    // InternalContextMappingDSL.g:17216:3: kw= 'Timestamp'
                    {
                    kw=(Token)match(input,179,FOLLOW_2); 

                    			current.merge(kw);
                    			newLeafNode(kw, grammarAccess.getTypeAccess().getTimestampKeyword_9());
                    		

                    }
                    break;
                case 11 :
                    // InternalContextMappingDSL.g:17222:3: kw= 'BigDecimal'
                    {
                    kw=(Token)match(input,180,FOLLOW_2); 

                    			current.merge(kw);
                    			newLeafNode(kw, grammarAccess.getTypeAccess().getBigDecimalKeyword_10());
                    		

                    }
                    break;
                case 12 :
                    // InternalContextMappingDSL.g:17228:3: kw= 'BigInteger'
                    {
                    kw=(Token)match(input,181,FOLLOW_2); 

                    			current.merge(kw);
                    			newLeafNode(kw, grammarAccess.getTypeAccess().getBigIntegerKeyword_11());
                    		

                    }
                    break;
                case 13 :
                    // InternalContextMappingDSL.g:17234:3: kw= 'double'
                    {
                    kw=(Token)match(input,182,FOLLOW_2); 

                    			current.merge(kw);
                    			newLeafNode(kw, grammarAccess.getTypeAccess().getDoubleKeyword_12());
                    		

                    }
                    break;
                case 14 :
                    // InternalContextMappingDSL.g:17240:3: kw= 'Double'
                    {
                    kw=(Token)match(input,183,FOLLOW_2); 

                    			current.merge(kw);
                    			newLeafNode(kw, grammarAccess.getTypeAccess().getDoubleKeyword_13());
                    		

                    }
                    break;
                case 15 :
                    // InternalContextMappingDSL.g:17246:3: kw= 'float'
                    {
                    kw=(Token)match(input,184,FOLLOW_2); 

                    			current.merge(kw);
                    			newLeafNode(kw, grammarAccess.getTypeAccess().getFloatKeyword_14());
                    		

                    }
                    break;
                case 16 :
                    // InternalContextMappingDSL.g:17252:3: kw= 'Float'
                    {
                    kw=(Token)match(input,185,FOLLOW_2); 

                    			current.merge(kw);
                    			newLeafNode(kw, grammarAccess.getTypeAccess().getFloatKeyword_15());
                    		

                    }
                    break;
                case 17 :
                    // InternalContextMappingDSL.g:17258:3: kw= 'Key'
                    {
                    kw=(Token)match(input,186,FOLLOW_2); 

                    			current.merge(kw);
                    			newLeafNode(kw, grammarAccess.getTypeAccess().getKeyKeyword_16());
                    		

                    }
                    break;
                case 18 :
                    // InternalContextMappingDSL.g:17264:3: kw= 'PagingParameter'
                    {
                    kw=(Token)match(input,187,FOLLOW_2); 

                    			current.merge(kw);
                    			newLeafNode(kw, grammarAccess.getTypeAccess().getPagingParameterKeyword_17());
                    		

                    }
                    break;
                case 19 :
                    // InternalContextMappingDSL.g:17270:3: kw= 'PagedResult'
                    {
                    kw=(Token)match(input,188,FOLLOW_2); 

                    			current.merge(kw);
                    			newLeafNode(kw, grammarAccess.getTypeAccess().getPagedResultKeyword_18());
                    		

                    }
                    break;
                case 20 :
                    // InternalContextMappingDSL.g:17276:3: kw= 'Blob'
                    {
                    kw=(Token)match(input,189,FOLLOW_2); 

                    			current.merge(kw);
                    			newLeafNode(kw, grammarAccess.getTypeAccess().getBlobKeyword_19());
                    		

                    }
                    break;
                case 21 :
                    // InternalContextMappingDSL.g:17282:3: kw= 'Clob'
                    {
                    kw=(Token)match(input,190,FOLLOW_2); 

                    			current.merge(kw);
                    			newLeafNode(kw, grammarAccess.getTypeAccess().getClobKeyword_20());
                    		

                    }
                    break;
                case 22 :
                    // InternalContextMappingDSL.g:17288:3: kw= 'Object[]'
                    {
                    kw=(Token)match(input,191,FOLLOW_2); 

                    			current.merge(kw);
                    			newLeafNode(kw, grammarAccess.getTypeAccess().getObjectKeyword_21());
                    		

                    }
                    break;
                case 23 :
                    // InternalContextMappingDSL.g:17294:3: this_JavaIdentifier_22= ruleJavaIdentifier
                    {

                    			newCompositeNode(grammarAccess.getTypeAccess().getJavaIdentifierParserRuleCall_22());
                    		
                    pushFollow(FOLLOW_2);
                    this_JavaIdentifier_22=ruleJavaIdentifier();

                    state._fsp--;


                    			current.merge(this_JavaIdentifier_22);
                    		

                    			afterParserOrEnumRuleCall();
                    		

                    }
                    break;

            }


            }


            	leaveRule();

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleType"


    // $ANTLR start "entryRuleJavaIdentifier"
    // InternalContextMappingDSL.g:17308:1: entryRuleJavaIdentifier returns [String current=null] : iv_ruleJavaIdentifier= ruleJavaIdentifier EOF ;
    public final String entryRuleJavaIdentifier() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleJavaIdentifier = null;


        try {
            // InternalContextMappingDSL.g:17308:54: (iv_ruleJavaIdentifier= ruleJavaIdentifier EOF )
            // InternalContextMappingDSL.g:17309:2: iv_ruleJavaIdentifier= ruleJavaIdentifier EOF
            {
             newCompositeNode(grammarAccess.getJavaIdentifierRule()); 
            pushFollow(FOLLOW_1);
            iv_ruleJavaIdentifier=ruleJavaIdentifier();

            state._fsp--;

             current =iv_ruleJavaIdentifier.getText(); 
            match(input,EOF,FOLLOW_2); 

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleJavaIdentifier"


    // $ANTLR start "ruleJavaIdentifier"
    // InternalContextMappingDSL.g:17315:1: ruleJavaIdentifier returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_ID_0= RULE_ID (kw= '.' this_ID_2= RULE_ID )* ) ;
    public final AntlrDatatypeRuleToken ruleJavaIdentifier() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token this_ID_0=null;
        Token kw=null;
        Token this_ID_2=null;


        	enterRule();

        try {
            // InternalContextMappingDSL.g:17321:2: ( (this_ID_0= RULE_ID (kw= '.' this_ID_2= RULE_ID )* ) )
            // InternalContextMappingDSL.g:17322:2: (this_ID_0= RULE_ID (kw= '.' this_ID_2= RULE_ID )* )
            {
            // InternalContextMappingDSL.g:17322:2: (this_ID_0= RULE_ID (kw= '.' this_ID_2= RULE_ID )* )
            // InternalContextMappingDSL.g:17323:3: this_ID_0= RULE_ID (kw= '.' this_ID_2= RULE_ID )*
            {
            this_ID_0=(Token)match(input,RULE_ID,FOLLOW_188); 

            			current.merge(this_ID_0);
            		

            			newLeafNode(this_ID_0, grammarAccess.getJavaIdentifierAccess().getIDTerminalRuleCall_0());
            		
            // InternalContextMappingDSL.g:17330:3: (kw= '.' this_ID_2= RULE_ID )*
            loop390:
            do {
                int alt390=2;
                int LA390_0 = input.LA(1);

                if ( (LA390_0==91) ) {
                    alt390=1;
                }


                switch (alt390) {
            	case 1 :
            	    // InternalContextMappingDSL.g:17331:4: kw= '.' this_ID_2= RULE_ID
            	    {
            	    kw=(Token)match(input,91,FOLLOW_10); 

            	    				current.merge(kw);
            	    				newLeafNode(kw, grammarAccess.getJavaIdentifierAccess().getFullStopKeyword_1_0());
            	    			
            	    this_ID_2=(Token)match(input,RULE_ID,FOLLOW_188); 

            	    				current.merge(this_ID_2);
            	    			

            	    				newLeafNode(this_ID_2, grammarAccess.getJavaIdentifierAccess().getIDTerminalRuleCall_1_1());
            	    			

            	    }
            	    break;

            	default :
            	    break loop390;
                }
            } while (true);


            }


            }


            	leaveRule();

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleJavaIdentifier"


    // $ANTLR start "entryRuleChannelIdentifier"
    // InternalContextMappingDSL.g:17348:1: entryRuleChannelIdentifier returns [String current=null] : iv_ruleChannelIdentifier= ruleChannelIdentifier EOF ;
    public final String entryRuleChannelIdentifier() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleChannelIdentifier = null;


        try {
            // InternalContextMappingDSL.g:17348:57: (iv_ruleChannelIdentifier= ruleChannelIdentifier EOF )
            // InternalContextMappingDSL.g:17349:2: iv_ruleChannelIdentifier= ruleChannelIdentifier EOF
            {
             newCompositeNode(grammarAccess.getChannelIdentifierRule()); 
            pushFollow(FOLLOW_1);
            iv_ruleChannelIdentifier=ruleChannelIdentifier();

            state._fsp--;

             current =iv_ruleChannelIdentifier.getText(); 
            match(input,EOF,FOLLOW_2); 

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleChannelIdentifier"


    // $ANTLR start "ruleChannelIdentifier"
    // InternalContextMappingDSL.g:17355:1: ruleChannelIdentifier returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_ID_0= RULE_ID ( (kw= '.' | kw= '/' | kw= ':' ) this_ID_4= RULE_ID )* ) ;
    public final AntlrDatatypeRuleToken ruleChannelIdentifier() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token this_ID_0=null;
        Token kw=null;
        Token this_ID_4=null;


        	enterRule();

        try {
            // InternalContextMappingDSL.g:17361:2: ( (this_ID_0= RULE_ID ( (kw= '.' | kw= '/' | kw= ':' ) this_ID_4= RULE_ID )* ) )
            // InternalContextMappingDSL.g:17362:2: (this_ID_0= RULE_ID ( (kw= '.' | kw= '/' | kw= ':' ) this_ID_4= RULE_ID )* )
            {
            // InternalContextMappingDSL.g:17362:2: (this_ID_0= RULE_ID ( (kw= '.' | kw= '/' | kw= ':' ) this_ID_4= RULE_ID )* )
            // InternalContextMappingDSL.g:17363:3: this_ID_0= RULE_ID ( (kw= '.' | kw= '/' | kw= ':' ) this_ID_4= RULE_ID )*
            {
            this_ID_0=(Token)match(input,RULE_ID,FOLLOW_189); 

            			current.merge(this_ID_0);
            		

            			newLeafNode(this_ID_0, grammarAccess.getChannelIdentifierAccess().getIDTerminalRuleCall_0());
            		
            // InternalContextMappingDSL.g:17370:3: ( (kw= '.' | kw= '/' | kw= ':' ) this_ID_4= RULE_ID )*
            loop392:
            do {
                int alt392=2;
                int LA392_0 = input.LA(1);

                if ( (LA392_0==40||LA392_0==91||LA392_0==192) ) {
                    alt392=1;
                }


                switch (alt392) {
            	case 1 :
            	    // InternalContextMappingDSL.g:17371:4: (kw= '.' | kw= '/' | kw= ':' ) this_ID_4= RULE_ID
            	    {
            	    // InternalContextMappingDSL.g:17371:4: (kw= '.' | kw= '/' | kw= ':' )
            	    int alt391=3;
            	    switch ( input.LA(1) ) {
            	    case 91:
            	        {
            	        alt391=1;
            	        }
            	        break;
            	    case 192:
            	        {
            	        alt391=2;
            	        }
            	        break;
            	    case 40:
            	        {
            	        alt391=3;
            	        }
            	        break;
            	    default:
            	        NoViableAltException nvae =
            	            new NoViableAltException("", 391, 0, input);

            	        throw nvae;
            	    }

            	    switch (alt391) {
            	        case 1 :
            	            // InternalContextMappingDSL.g:17372:5: kw= '.'
            	            {
            	            kw=(Token)match(input,91,FOLLOW_10); 

            	            					current.merge(kw);
            	            					newLeafNode(kw, grammarAccess.getChannelIdentifierAccess().getFullStopKeyword_1_0_0());
            	            				

            	            }
            	            break;
            	        case 2 :
            	            // InternalContextMappingDSL.g:17378:5: kw= '/'
            	            {
            	            kw=(Token)match(input,192,FOLLOW_10); 

            	            					current.merge(kw);
            	            					newLeafNode(kw, grammarAccess.getChannelIdentifierAccess().getSolidusKeyword_1_0_1());
            	            				

            	            }
            	            break;
            	        case 3 :
            	            // InternalContextMappingDSL.g:17384:5: kw= ':'
            	            {
            	            kw=(Token)match(input,40,FOLLOW_10); 

            	            					current.merge(kw);
            	            					newLeafNode(kw, grammarAccess.getChannelIdentifierAccess().getColonKeyword_1_0_2());
            	            				

            	            }
            	            break;

            	    }

            	    this_ID_4=(Token)match(input,RULE_ID,FOLLOW_189); 

            	    				current.merge(this_ID_4);
            	    			

            	    				newLeafNode(this_ID_4, grammarAccess.getChannelIdentifierAccess().getIDTerminalRuleCall_1_1());
            	    			

            	    }
            	    break;

            	default :
            	    break loop392;
                }
            } while (true);


            }


            }


            	leaveRule();

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleChannelIdentifier"


    // $ANTLR start "entryRuleThrowsIdentifier"
    // InternalContextMappingDSL.g:17402:1: entryRuleThrowsIdentifier returns [String current=null] : iv_ruleThrowsIdentifier= ruleThrowsIdentifier EOF ;
    public final String entryRuleThrowsIdentifier() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleThrowsIdentifier = null;


        try {
            // InternalContextMappingDSL.g:17402:56: (iv_ruleThrowsIdentifier= ruleThrowsIdentifier EOF )
            // InternalContextMappingDSL.g:17403:2: iv_ruleThrowsIdentifier= ruleThrowsIdentifier EOF
            {
             newCompositeNode(grammarAccess.getThrowsIdentifierRule()); 
            pushFollow(FOLLOW_1);
            iv_ruleThrowsIdentifier=ruleThrowsIdentifier();

            state._fsp--;

             current =iv_ruleThrowsIdentifier.getText(); 
            match(input,EOF,FOLLOW_2); 

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleThrowsIdentifier"


    // $ANTLR start "ruleThrowsIdentifier"
    // InternalContextMappingDSL.g:17409:1: ruleThrowsIdentifier returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_JavaIdentifier_0= ruleJavaIdentifier (kw= ',' this_JavaIdentifier_2= ruleJavaIdentifier )* ) ;
    public final AntlrDatatypeRuleToken ruleThrowsIdentifier() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;
        AntlrDatatypeRuleToken this_JavaIdentifier_0 = null;

        AntlrDatatypeRuleToken this_JavaIdentifier_2 = null;



        	enterRule();

        try {
            // InternalContextMappingDSL.g:17415:2: ( (this_JavaIdentifier_0= ruleJavaIdentifier (kw= ',' this_JavaIdentifier_2= ruleJavaIdentifier )* ) )
            // InternalContextMappingDSL.g:17416:2: (this_JavaIdentifier_0= ruleJavaIdentifier (kw= ',' this_JavaIdentifier_2= ruleJavaIdentifier )* )
            {
            // InternalContextMappingDSL.g:17416:2: (this_JavaIdentifier_0= ruleJavaIdentifier (kw= ',' this_JavaIdentifier_2= ruleJavaIdentifier )* )
            // InternalContextMappingDSL.g:17417:3: this_JavaIdentifier_0= ruleJavaIdentifier (kw= ',' this_JavaIdentifier_2= ruleJavaIdentifier )*
            {

            			newCompositeNode(grammarAccess.getThrowsIdentifierAccess().getJavaIdentifierParserRuleCall_0());
            		
            pushFollow(FOLLOW_190);
            this_JavaIdentifier_0=ruleJavaIdentifier();

            state._fsp--;


            			current.merge(this_JavaIdentifier_0);
            		

            			afterParserOrEnumRuleCall();
            		
            // InternalContextMappingDSL.g:17427:3: (kw= ',' this_JavaIdentifier_2= ruleJavaIdentifier )*
            loop393:
            do {
                int alt393=2;
                int LA393_0 = input.LA(1);

                if ( (LA393_0==24) ) {
                    alt393=1;
                }


                switch (alt393) {
            	case 1 :
            	    // InternalContextMappingDSL.g:17428:4: kw= ',' this_JavaIdentifier_2= ruleJavaIdentifier
            	    {
            	    kw=(Token)match(input,24,FOLLOW_10); 

            	    				current.merge(kw);
            	    				newLeafNode(kw, grammarAccess.getThrowsIdentifierAccess().getCommaKeyword_1_0());
            	    			

            	    				newCompositeNode(grammarAccess.getThrowsIdentifierAccess().getJavaIdentifierParserRuleCall_1_1());
            	    			
            	    pushFollow(FOLLOW_190);
            	    this_JavaIdentifier_2=ruleJavaIdentifier();

            	    state._fsp--;


            	    				current.merge(this_JavaIdentifier_2);
            	    			

            	    				afterParserOrEnumRuleCall();
            	    			

            	    }
            	    break;

            	default :
            	    break loop393;
                }
            } while (true);


            }


            }


            	leaveRule();

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleThrowsIdentifier"


    // $ANTLR start "ruleUpstreamRole"
    // InternalContextMappingDSL.g:17448:1: ruleUpstreamRole returns [Enumerator current=null] : ( (enumLiteral_0= 'PL' ) | (enumLiteral_1= 'OHS' ) ) ;
    public final Enumerator ruleUpstreamRole() throws RecognitionException {
        Enumerator current = null;

        Token enumLiteral_0=null;
        Token enumLiteral_1=null;


        	enterRule();

        try {
            // InternalContextMappingDSL.g:17454:2: ( ( (enumLiteral_0= 'PL' ) | (enumLiteral_1= 'OHS' ) ) )
            // InternalContextMappingDSL.g:17455:2: ( (enumLiteral_0= 'PL' ) | (enumLiteral_1= 'OHS' ) )
            {
            // InternalContextMappingDSL.g:17455:2: ( (enumLiteral_0= 'PL' ) | (enumLiteral_1= 'OHS' ) )
            int alt394=2;
            int LA394_0 = input.LA(1);

            if ( (LA394_0==193) ) {
                alt394=1;
            }
            else if ( (LA394_0==194) ) {
                alt394=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 394, 0, input);

                throw nvae;
            }
            switch (alt394) {
                case 1 :
                    // InternalContextMappingDSL.g:17456:3: (enumLiteral_0= 'PL' )
                    {
                    // InternalContextMappingDSL.g:17456:3: (enumLiteral_0= 'PL' )
                    // InternalContextMappingDSL.g:17457:4: enumLiteral_0= 'PL'
                    {
                    enumLiteral_0=(Token)match(input,193,FOLLOW_2); 

                    				current = grammarAccess.getUpstreamRoleAccess().getPUBLISHED_LANGUAGEEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
                    				newLeafNode(enumLiteral_0, grammarAccess.getUpstreamRoleAccess().getPUBLISHED_LANGUAGEEnumLiteralDeclaration_0());
                    			

                    }


                    }
                    break;
                case 2 :
                    // InternalContextMappingDSL.g:17464:3: (enumLiteral_1= 'OHS' )
                    {
                    // InternalContextMappingDSL.g:17464:3: (enumLiteral_1= 'OHS' )
                    // InternalContextMappingDSL.g:17465:4: enumLiteral_1= 'OHS'
                    {
                    enumLiteral_1=(Token)match(input,194,FOLLOW_2); 

                    				current = grammarAccess.getUpstreamRoleAccess().getOPEN_HOST_SERVICEEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
                    				newLeafNode(enumLiteral_1, grammarAccess.getUpstreamRoleAccess().getOPEN_HOST_SERVICEEnumLiteralDeclaration_1());
                    			

                    }


                    }
                    break;

            }


            }


            	leaveRule();

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleUpstreamRole"


    // $ANTLR start "ruleDownstreamRole"
    // InternalContextMappingDSL.g:17475:1: ruleDownstreamRole returns [Enumerator current=null] : ( (enumLiteral_0= 'ACL' ) | (enumLiteral_1= 'CF' ) ) ;
    public final Enumerator ruleDownstreamRole() throws RecognitionException {
        Enumerator current = null;

        Token enumLiteral_0=null;
        Token enumLiteral_1=null;


        	enterRule();

        try {
            // InternalContextMappingDSL.g:17481:2: ( ( (enumLiteral_0= 'ACL' ) | (enumLiteral_1= 'CF' ) ) )
            // InternalContextMappingDSL.g:17482:2: ( (enumLiteral_0= 'ACL' ) | (enumLiteral_1= 'CF' ) )
            {
            // InternalContextMappingDSL.g:17482:2: ( (enumLiteral_0= 'ACL' ) | (enumLiteral_1= 'CF' ) )
            int alt395=2;
            int LA395_0 = input.LA(1);

            if ( (LA395_0==195) ) {
                alt395=1;
            }
            else if ( (LA395_0==196) ) {
                alt395=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 395, 0, input);

                throw nvae;
            }
            switch (alt395) {
                case 1 :
                    // InternalContextMappingDSL.g:17483:3: (enumLiteral_0= 'ACL' )
                    {
                    // InternalContextMappingDSL.g:17483:3: (enumLiteral_0= 'ACL' )
                    // InternalContextMappingDSL.g:17484:4: enumLiteral_0= 'ACL'
                    {
                    enumLiteral_0=(Token)match(input,195,FOLLOW_2); 

                    				current = grammarAccess.getDownstreamRoleAccess().getANTICORRUPTION_LAYEREnumLiteralDeclaration_0().getEnumLiteral().getInstance();
                    				newLeafNode(enumLiteral_0, grammarAccess.getDownstreamRoleAccess().getANTICORRUPTION_LAYEREnumLiteralDeclaration_0());
                    			

                    }


                    }
                    break;
                case 2 :
                    // InternalContextMappingDSL.g:17491:3: (enumLiteral_1= 'CF' )
                    {
                    // InternalContextMappingDSL.g:17491:3: (enumLiteral_1= 'CF' )
                    // InternalContextMappingDSL.g:17492:4: enumLiteral_1= 'CF'
                    {
                    enumLiteral_1=(Token)match(input,196,FOLLOW_2); 

                    				current = grammarAccess.getDownstreamRoleAccess().getCONFORMISTEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
                    				newLeafNode(enumLiteral_1, grammarAccess.getDownstreamRoleAccess().getCONFORMISTEnumLiteralDeclaration_1());
                    			

                    }


                    }
                    break;

            }


            }


            	leaveRule();

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleDownstreamRole"


    // $ANTLR start "ruleContextMapState"
    // InternalContextMappingDSL.g:17502:1: ruleContextMapState returns [Enumerator current=null] : ( (enumLiteral_0= 'AS_IS' ) | (enumLiteral_1= 'TO_BE' ) ) ;
    public final Enumerator ruleContextMapState() throws RecognitionException {
        Enumerator current = null;

        Token enumLiteral_0=null;
        Token enumLiteral_1=null;


        	enterRule();

        try {
            // InternalContextMappingDSL.g:17508:2: ( ( (enumLiteral_0= 'AS_IS' ) | (enumLiteral_1= 'TO_BE' ) ) )
            // InternalContextMappingDSL.g:17509:2: ( (enumLiteral_0= 'AS_IS' ) | (enumLiteral_1= 'TO_BE' ) )
            {
            // InternalContextMappingDSL.g:17509:2: ( (enumLiteral_0= 'AS_IS' ) | (enumLiteral_1= 'TO_BE' ) )
            int alt396=2;
            int LA396_0 = input.LA(1);

            if ( (LA396_0==197) ) {
                alt396=1;
            }
            else if ( (LA396_0==198) ) {
                alt396=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 396, 0, input);

                throw nvae;
            }
            switch (alt396) {
                case 1 :
                    // InternalContextMappingDSL.g:17510:3: (enumLiteral_0= 'AS_IS' )
                    {
                    // InternalContextMappingDSL.g:17510:3: (enumLiteral_0= 'AS_IS' )
                    // InternalContextMappingDSL.g:17511:4: enumLiteral_0= 'AS_IS'
                    {
                    enumLiteral_0=(Token)match(input,197,FOLLOW_2); 

                    				current = grammarAccess.getContextMapStateAccess().getAS_ISEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
                    				newLeafNode(enumLiteral_0, grammarAccess.getContextMapStateAccess().getAS_ISEnumLiteralDeclaration_0());
                    			

                    }


                    }
                    break;
                case 2 :
                    // InternalContextMappingDSL.g:17518:3: (enumLiteral_1= 'TO_BE' )
                    {
                    // InternalContextMappingDSL.g:17518:3: (enumLiteral_1= 'TO_BE' )
                    // InternalContextMappingDSL.g:17519:4: enumLiteral_1= 'TO_BE'
                    {
                    enumLiteral_1=(Token)match(input,198,FOLLOW_2); 

                    				current = grammarAccess.getContextMapStateAccess().getTO_BEEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
                    				newLeafNode(enumLiteral_1, grammarAccess.getContextMapStateAccess().getTO_BEEnumLiteralDeclaration_1());
                    			

                    }


                    }
                    break;

            }


            }


            	leaveRule();

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleContextMapState"


    // $ANTLR start "ruleContextMapType"
    // InternalContextMappingDSL.g:17529:1: ruleContextMapType returns [Enumerator current=null] : ( (enumLiteral_0= 'SYSTEM_LANDSCAPE' ) | (enumLiteral_1= 'ORGANIZATIONAL' ) ) ;
    public final Enumerator ruleContextMapType() throws RecognitionException {
        Enumerator current = null;

        Token enumLiteral_0=null;
        Token enumLiteral_1=null;


        	enterRule();

        try {
            // InternalContextMappingDSL.g:17535:2: ( ( (enumLiteral_0= 'SYSTEM_LANDSCAPE' ) | (enumLiteral_1= 'ORGANIZATIONAL' ) ) )
            // InternalContextMappingDSL.g:17536:2: ( (enumLiteral_0= 'SYSTEM_LANDSCAPE' ) | (enumLiteral_1= 'ORGANIZATIONAL' ) )
            {
            // InternalContextMappingDSL.g:17536:2: ( (enumLiteral_0= 'SYSTEM_LANDSCAPE' ) | (enumLiteral_1= 'ORGANIZATIONAL' ) )
            int alt397=2;
            int LA397_0 = input.LA(1);

            if ( (LA397_0==199) ) {
                alt397=1;
            }
            else if ( (LA397_0==200) ) {
                alt397=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 397, 0, input);

                throw nvae;
            }
            switch (alt397) {
                case 1 :
                    // InternalContextMappingDSL.g:17537:3: (enumLiteral_0= 'SYSTEM_LANDSCAPE' )
                    {
                    // InternalContextMappingDSL.g:17537:3: (enumLiteral_0= 'SYSTEM_LANDSCAPE' )
                    // InternalContextMappingDSL.g:17538:4: enumLiteral_0= 'SYSTEM_LANDSCAPE'
                    {
                    enumLiteral_0=(Token)match(input,199,FOLLOW_2); 

                    				current = grammarAccess.getContextMapTypeAccess().getSYSTEM_LANDSCAPEEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
                    				newLeafNode(enumLiteral_0, grammarAccess.getContextMapTypeAccess().getSYSTEM_LANDSCAPEEnumLiteralDeclaration_0());
                    			

                    }


                    }
                    break;
                case 2 :
                    // InternalContextMappingDSL.g:17545:3: (enumLiteral_1= 'ORGANIZATIONAL' )
                    {
                    // InternalContextMappingDSL.g:17545:3: (enumLiteral_1= 'ORGANIZATIONAL' )
                    // InternalContextMappingDSL.g:17546:4: enumLiteral_1= 'ORGANIZATIONAL'
                    {
                    enumLiteral_1=(Token)match(input,200,FOLLOW_2); 

                    				current = grammarAccess.getContextMapTypeAccess().getORGANIZATIONALEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
                    				newLeafNode(enumLiteral_1, grammarAccess.getContextMapTypeAccess().getORGANIZATIONALEnumLiteralDeclaration_1());
                    			

                    }


                    }
                    break;

            }


            }


            	leaveRule();

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleContextMapType"


    // $ANTLR start "ruleBoundedContextType"
    // InternalContextMappingDSL.g:17556:1: ruleBoundedContextType returns [Enumerator current=null] : ( (enumLiteral_0= 'FEATURE' ) | (enumLiteral_1= 'APPLICATION' ) | (enumLiteral_2= 'SYSTEM' ) | (enumLiteral_3= 'TEAM' ) ) ;
    public final Enumerator ruleBoundedContextType() throws RecognitionException {
        Enumerator current = null;

        Token enumLiteral_0=null;
        Token enumLiteral_1=null;
        Token enumLiteral_2=null;
        Token enumLiteral_3=null;


        	enterRule();

        try {
            // InternalContextMappingDSL.g:17562:2: ( ( (enumLiteral_0= 'FEATURE' ) | (enumLiteral_1= 'APPLICATION' ) | (enumLiteral_2= 'SYSTEM' ) | (enumLiteral_3= 'TEAM' ) ) )
            // InternalContextMappingDSL.g:17563:2: ( (enumLiteral_0= 'FEATURE' ) | (enumLiteral_1= 'APPLICATION' ) | (enumLiteral_2= 'SYSTEM' ) | (enumLiteral_3= 'TEAM' ) )
            {
            // InternalContextMappingDSL.g:17563:2: ( (enumLiteral_0= 'FEATURE' ) | (enumLiteral_1= 'APPLICATION' ) | (enumLiteral_2= 'SYSTEM' ) | (enumLiteral_3= 'TEAM' ) )
            int alt398=4;
            switch ( input.LA(1) ) {
            case 201:
                {
                alt398=1;
                }
                break;
            case 202:
                {
                alt398=2;
                }
                break;
            case 203:
                {
                alt398=3;
                }
                break;
            case 204:
                {
                alt398=4;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("", 398, 0, input);

                throw nvae;
            }

            switch (alt398) {
                case 1 :
                    // InternalContextMappingDSL.g:17564:3: (enumLiteral_0= 'FEATURE' )
                    {
                    // InternalContextMappingDSL.g:17564:3: (enumLiteral_0= 'FEATURE' )
                    // InternalContextMappingDSL.g:17565:4: enumLiteral_0= 'FEATURE'
                    {
                    enumLiteral_0=(Token)match(input,201,FOLLOW_2); 

                    				current = grammarAccess.getBoundedContextTypeAccess().getFEATUREEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
                    				newLeafNode(enumLiteral_0, grammarAccess.getBoundedContextTypeAccess().getFEATUREEnumLiteralDeclaration_0());
                    			

                    }


                    }
                    break;
                case 2 :
                    // InternalContextMappingDSL.g:17572:3: (enumLiteral_1= 'APPLICATION' )
                    {
                    // InternalContextMappingDSL.g:17572:3: (enumLiteral_1= 'APPLICATION' )
                    // InternalContextMappingDSL.g:17573:4: enumLiteral_1= 'APPLICATION'
                    {
                    enumLiteral_1=(Token)match(input,202,FOLLOW_2); 

                    				current = grammarAccess.getBoundedContextTypeAccess().getAPPLICATIONEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
                    				newLeafNode(enumLiteral_1, grammarAccess.getBoundedContextTypeAccess().getAPPLICATIONEnumLiteralDeclaration_1());
                    			

                    }


                    }
                    break;
                case 3 :
                    // InternalContextMappingDSL.g:17580:3: (enumLiteral_2= 'SYSTEM' )
                    {
                    // InternalContextMappingDSL.g:17580:3: (enumLiteral_2= 'SYSTEM' )
                    // InternalContextMappingDSL.g:17581:4: enumLiteral_2= 'SYSTEM'
                    {
                    enumLiteral_2=(Token)match(input,203,FOLLOW_2); 

                    				current = grammarAccess.getBoundedContextTypeAccess().getSYSTEMEnumLiteralDeclaration_2().getEnumLiteral().getInstance();
                    				newLeafNode(enumLiteral_2, grammarAccess.getBoundedContextTypeAccess().getSYSTEMEnumLiteralDeclaration_2());
                    			

                    }


                    }
                    break;
                case 4 :
                    // InternalContextMappingDSL.g:17588:3: (enumLiteral_3= 'TEAM' )
                    {
                    // InternalContextMappingDSL.g:17588:3: (enumLiteral_3= 'TEAM' )
                    // InternalContextMappingDSL.g:17589:4: enumLiteral_3= 'TEAM'
                    {
                    enumLiteral_3=(Token)match(input,204,FOLLOW_2); 

                    				current = grammarAccess.getBoundedContextTypeAccess().getTEAMEnumLiteralDeclaration_3().getEnumLiteral().getInstance();
                    				newLeafNode(enumLiteral_3, grammarAccess.getBoundedContextTypeAccess().getTEAMEnumLiteralDeclaration_3());
                    			

                    }


                    }
                    break;

            }


            }


            	leaveRule();

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleBoundedContextType"


    // $ANTLR start "ruleSubDomainType"
    // InternalContextMappingDSL.g:17599:1: ruleSubDomainType returns [Enumerator current=null] : ( (enumLiteral_0= 'CORE_DOMAIN' ) | (enumLiteral_1= 'SUPPORTING_DOMAIN' ) | (enumLiteral_2= 'GENERIC_SUBDOMAIN' ) ) ;
    public final Enumerator ruleSubDomainType() throws RecognitionException {
        Enumerator current = null;

        Token enumLiteral_0=null;
        Token enumLiteral_1=null;
        Token enumLiteral_2=null;


        	enterRule();

        try {
            // InternalContextMappingDSL.g:17605:2: ( ( (enumLiteral_0= 'CORE_DOMAIN' ) | (enumLiteral_1= 'SUPPORTING_DOMAIN' ) | (enumLiteral_2= 'GENERIC_SUBDOMAIN' ) ) )
            // InternalContextMappingDSL.g:17606:2: ( (enumLiteral_0= 'CORE_DOMAIN' ) | (enumLiteral_1= 'SUPPORTING_DOMAIN' ) | (enumLiteral_2= 'GENERIC_SUBDOMAIN' ) )
            {
            // InternalContextMappingDSL.g:17606:2: ( (enumLiteral_0= 'CORE_DOMAIN' ) | (enumLiteral_1= 'SUPPORTING_DOMAIN' ) | (enumLiteral_2= 'GENERIC_SUBDOMAIN' ) )
            int alt399=3;
            switch ( input.LA(1) ) {
            case 205:
                {
                alt399=1;
                }
                break;
            case 206:
                {
                alt399=2;
                }
                break;
            case 207:
                {
                alt399=3;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("", 399, 0, input);

                throw nvae;
            }

            switch (alt399) {
                case 1 :
                    // InternalContextMappingDSL.g:17607:3: (enumLiteral_0= 'CORE_DOMAIN' )
                    {
                    // InternalContextMappingDSL.g:17607:3: (enumLiteral_0= 'CORE_DOMAIN' )
                    // InternalContextMappingDSL.g:17608:4: enumLiteral_0= 'CORE_DOMAIN'
                    {
                    enumLiteral_0=(Token)match(input,205,FOLLOW_2); 

                    				current = grammarAccess.getSubDomainTypeAccess().getCORE_DOMAINEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
                    				newLeafNode(enumLiteral_0, grammarAccess.getSubDomainTypeAccess().getCORE_DOMAINEnumLiteralDeclaration_0());
                    			

                    }


                    }
                    break;
                case 2 :
                    // InternalContextMappingDSL.g:17615:3: (enumLiteral_1= 'SUPPORTING_DOMAIN' )
                    {
                    // InternalContextMappingDSL.g:17615:3: (enumLiteral_1= 'SUPPORTING_DOMAIN' )
                    // InternalContextMappingDSL.g:17616:4: enumLiteral_1= 'SUPPORTING_DOMAIN'
                    {
                    enumLiteral_1=(Token)match(input,206,FOLLOW_2); 

                    				current = grammarAccess.getSubDomainTypeAccess().getSUPPORTING_DOMAINEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
                    				newLeafNode(enumLiteral_1, grammarAccess.getSubDomainTypeAccess().getSUPPORTING_DOMAINEnumLiteralDeclaration_1());
                    			

                    }


                    }
                    break;
                case 3 :
                    // InternalContextMappingDSL.g:17623:3: (enumLiteral_2= 'GENERIC_SUBDOMAIN' )
                    {
                    // InternalContextMappingDSL.g:17623:3: (enumLiteral_2= 'GENERIC_SUBDOMAIN' )
                    // InternalContextMappingDSL.g:17624:4: enumLiteral_2= 'GENERIC_SUBDOMAIN'
                    {
                    enumLiteral_2=(Token)match(input,207,FOLLOW_2); 

                    				current = grammarAccess.getSubDomainTypeAccess().getGENERIC_SUBDOMAINEnumLiteralDeclaration_2().getEnumLiteral().getInstance();
                    				newLeafNode(enumLiteral_2, grammarAccess.getSubDomainTypeAccess().getGENERIC_SUBDOMAINEnumLiteralDeclaration_2());
                    			

                    }


                    }
                    break;

            }


            }


            	leaveRule();

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleSubDomainType"


    // $ANTLR start "ruleDownstreamGovernanceRights"
    // InternalContextMappingDSL.g:17634:1: ruleDownstreamGovernanceRights returns [Enumerator current=null] : ( (enumLiteral_0= 'INFLUENCER' ) | (enumLiteral_1= 'OPINION_LEADER' ) | (enumLiteral_2= 'VETO_RIGHT' ) | (enumLiteral_3= 'DECISION_MAKER' ) | (enumLiteral_4= 'MONOPOLIST' ) ) ;
    public final Enumerator ruleDownstreamGovernanceRights() throws RecognitionException {
        Enumerator current = null;

        Token enumLiteral_0=null;
        Token enumLiteral_1=null;
        Token enumLiteral_2=null;
        Token enumLiteral_3=null;
        Token enumLiteral_4=null;


        	enterRule();

        try {
            // InternalContextMappingDSL.g:17640:2: ( ( (enumLiteral_0= 'INFLUENCER' ) | (enumLiteral_1= 'OPINION_LEADER' ) | (enumLiteral_2= 'VETO_RIGHT' ) | (enumLiteral_3= 'DECISION_MAKER' ) | (enumLiteral_4= 'MONOPOLIST' ) ) )
            // InternalContextMappingDSL.g:17641:2: ( (enumLiteral_0= 'INFLUENCER' ) | (enumLiteral_1= 'OPINION_LEADER' ) | (enumLiteral_2= 'VETO_RIGHT' ) | (enumLiteral_3= 'DECISION_MAKER' ) | (enumLiteral_4= 'MONOPOLIST' ) )
            {
            // InternalContextMappingDSL.g:17641:2: ( (enumLiteral_0= 'INFLUENCER' ) | (enumLiteral_1= 'OPINION_LEADER' ) | (enumLiteral_2= 'VETO_RIGHT' ) | (enumLiteral_3= 'DECISION_MAKER' ) | (enumLiteral_4= 'MONOPOLIST' ) )
            int alt400=5;
            switch ( input.LA(1) ) {
            case 208:
                {
                alt400=1;
                }
                break;
            case 209:
                {
                alt400=2;
                }
                break;
            case 210:
                {
                alt400=3;
                }
                break;
            case 211:
                {
                alt400=4;
                }
                break;
            case 212:
                {
                alt400=5;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("", 400, 0, input);

                throw nvae;
            }

            switch (alt400) {
                case 1 :
                    // InternalContextMappingDSL.g:17642:3: (enumLiteral_0= 'INFLUENCER' )
                    {
                    // InternalContextMappingDSL.g:17642:3: (enumLiteral_0= 'INFLUENCER' )
                    // InternalContextMappingDSL.g:17643:4: enumLiteral_0= 'INFLUENCER'
                    {
                    enumLiteral_0=(Token)match(input,208,FOLLOW_2); 

                    				current = grammarAccess.getDownstreamGovernanceRightsAccess().getINFLUENCEREnumLiteralDeclaration_0().getEnumLiteral().getInstance();
                    				newLeafNode(enumLiteral_0, grammarAccess.getDownstreamGovernanceRightsAccess().getINFLUENCEREnumLiteralDeclaration_0());
                    			

                    }


                    }
                    break;
                case 2 :
                    // InternalContextMappingDSL.g:17650:3: (enumLiteral_1= 'OPINION_LEADER' )
                    {
                    // InternalContextMappingDSL.g:17650:3: (enumLiteral_1= 'OPINION_LEADER' )
                    // InternalContextMappingDSL.g:17651:4: enumLiteral_1= 'OPINION_LEADER'
                    {
                    enumLiteral_1=(Token)match(input,209,FOLLOW_2); 

                    				current = grammarAccess.getDownstreamGovernanceRightsAccess().getOPINION_LEADEREnumLiteralDeclaration_1().getEnumLiteral().getInstance();
                    				newLeafNode(enumLiteral_1, grammarAccess.getDownstreamGovernanceRightsAccess().getOPINION_LEADEREnumLiteralDeclaration_1());
                    			

                    }


                    }
                    break;
                case 3 :
                    // InternalContextMappingDSL.g:17658:3: (enumLiteral_2= 'VETO_RIGHT' )
                    {
                    // InternalContextMappingDSL.g:17658:3: (enumLiteral_2= 'VETO_RIGHT' )
                    // InternalContextMappingDSL.g:17659:4: enumLiteral_2= 'VETO_RIGHT'
                    {
                    enumLiteral_2=(Token)match(input,210,FOLLOW_2); 

                    				current = grammarAccess.getDownstreamGovernanceRightsAccess().getVETO_RIGHTEnumLiteralDeclaration_2().getEnumLiteral().getInstance();
                    				newLeafNode(enumLiteral_2, grammarAccess.getDownstreamGovernanceRightsAccess().getVETO_RIGHTEnumLiteralDeclaration_2());
                    			

                    }


                    }
                    break;
                case 4 :
                    // InternalContextMappingDSL.g:17666:3: (enumLiteral_3= 'DECISION_MAKER' )
                    {
                    // InternalContextMappingDSL.g:17666:3: (enumLiteral_3= 'DECISION_MAKER' )
                    // InternalContextMappingDSL.g:17667:4: enumLiteral_3= 'DECISION_MAKER'
                    {
                    enumLiteral_3=(Token)match(input,211,FOLLOW_2); 

                    				current = grammarAccess.getDownstreamGovernanceRightsAccess().getDECISION_MAKEREnumLiteralDeclaration_3().getEnumLiteral().getInstance();
                    				newLeafNode(enumLiteral_3, grammarAccess.getDownstreamGovernanceRightsAccess().getDECISION_MAKEREnumLiteralDeclaration_3());
                    			

                    }


                    }
                    break;
                case 5 :
                    // InternalContextMappingDSL.g:17674:3: (enumLiteral_4= 'MONOPOLIST' )
                    {
                    // InternalContextMappingDSL.g:17674:3: (enumLiteral_4= 'MONOPOLIST' )
                    // InternalContextMappingDSL.g:17675:4: enumLiteral_4= 'MONOPOLIST'
                    {
                    enumLiteral_4=(Token)match(input,212,FOLLOW_2); 

                    				current = grammarAccess.getDownstreamGovernanceRightsAccess().getMONOPOLISTEnumLiteralDeclaration_4().getEnumLiteral().getInstance();
                    				newLeafNode(enumLiteral_4, grammarAccess.getDownstreamGovernanceRightsAccess().getMONOPOLISTEnumLiteralDeclaration_4());
                    			

                    }


                    }
                    break;

            }


            }


            	leaveRule();

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleDownstreamGovernanceRights"


    // $ANTLR start "ruleKnowledgeLevel"
    // InternalContextMappingDSL.g:17685:1: ruleKnowledgeLevel returns [Enumerator current=null] : ( (enumLiteral_0= 'META' ) | (enumLiteral_1= 'CONCRETE' ) ) ;
    public final Enumerator ruleKnowledgeLevel() throws RecognitionException {
        Enumerator current = null;

        Token enumLiteral_0=null;
        Token enumLiteral_1=null;


        	enterRule();

        try {
            // InternalContextMappingDSL.g:17691:2: ( ( (enumLiteral_0= 'META' ) | (enumLiteral_1= 'CONCRETE' ) ) )
            // InternalContextMappingDSL.g:17692:2: ( (enumLiteral_0= 'META' ) | (enumLiteral_1= 'CONCRETE' ) )
            {
            // InternalContextMappingDSL.g:17692:2: ( (enumLiteral_0= 'META' ) | (enumLiteral_1= 'CONCRETE' ) )
            int alt401=2;
            int LA401_0 = input.LA(1);

            if ( (LA401_0==213) ) {
                alt401=1;
            }
            else if ( (LA401_0==214) ) {
                alt401=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 401, 0, input);

                throw nvae;
            }
            switch (alt401) {
                case 1 :
                    // InternalContextMappingDSL.g:17693:3: (enumLiteral_0= 'META' )
                    {
                    // InternalContextMappingDSL.g:17693:3: (enumLiteral_0= 'META' )
                    // InternalContextMappingDSL.g:17694:4: enumLiteral_0= 'META'
                    {
                    enumLiteral_0=(Token)match(input,213,FOLLOW_2); 

                    				current = grammarAccess.getKnowledgeLevelAccess().getMETAEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
                    				newLeafNode(enumLiteral_0, grammarAccess.getKnowledgeLevelAccess().getMETAEnumLiteralDeclaration_0());
                    			

                    }


                    }
                    break;
                case 2 :
                    // InternalContextMappingDSL.g:17701:3: (enumLiteral_1= 'CONCRETE' )
                    {
                    // InternalContextMappingDSL.g:17701:3: (enumLiteral_1= 'CONCRETE' )
                    // InternalContextMappingDSL.g:17702:4: enumLiteral_1= 'CONCRETE'
                    {
                    enumLiteral_1=(Token)match(input,214,FOLLOW_2); 

                    				current = grammarAccess.getKnowledgeLevelAccess().getCONCRETEEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
                    				newLeafNode(enumLiteral_1, grammarAccess.getKnowledgeLevelAccess().getCONCRETEEnumLiteralDeclaration_1());
                    			

                    }


                    }
                    break;

            }


            }


            	leaveRule();

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleKnowledgeLevel"


    // $ANTLR start "ruleLikelihoodForChange"
    // InternalContextMappingDSL.g:17712:1: ruleLikelihoodForChange returns [Enumerator current=null] : ( (enumLiteral_0= 'NORMAL' ) | (enumLiteral_1= 'RARELY' ) | (enumLiteral_2= 'OFTEN' ) ) ;
    public final Enumerator ruleLikelihoodForChange() throws RecognitionException {
        Enumerator current = null;

        Token enumLiteral_0=null;
        Token enumLiteral_1=null;
        Token enumLiteral_2=null;


        	enterRule();

        try {
            // InternalContextMappingDSL.g:17718:2: ( ( (enumLiteral_0= 'NORMAL' ) | (enumLiteral_1= 'RARELY' ) | (enumLiteral_2= 'OFTEN' ) ) )
            // InternalContextMappingDSL.g:17719:2: ( (enumLiteral_0= 'NORMAL' ) | (enumLiteral_1= 'RARELY' ) | (enumLiteral_2= 'OFTEN' ) )
            {
            // InternalContextMappingDSL.g:17719:2: ( (enumLiteral_0= 'NORMAL' ) | (enumLiteral_1= 'RARELY' ) | (enumLiteral_2= 'OFTEN' ) )
            int alt402=3;
            switch ( input.LA(1) ) {
            case 215:
                {
                alt402=1;
                }
                break;
            case 216:
                {
                alt402=2;
                }
                break;
            case 217:
                {
                alt402=3;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("", 402, 0, input);

                throw nvae;
            }

            switch (alt402) {
                case 1 :
                    // InternalContextMappingDSL.g:17720:3: (enumLiteral_0= 'NORMAL' )
                    {
                    // InternalContextMappingDSL.g:17720:3: (enumLiteral_0= 'NORMAL' )
                    // InternalContextMappingDSL.g:17721:4: enumLiteral_0= 'NORMAL'
                    {
                    enumLiteral_0=(Token)match(input,215,FOLLOW_2); 

                    				current = grammarAccess.getLikelihoodForChangeAccess().getNORMALEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
                    				newLeafNode(enumLiteral_0, grammarAccess.getLikelihoodForChangeAccess().getNORMALEnumLiteralDeclaration_0());
                    			

                    }


                    }
                    break;
                case 2 :
                    // InternalContextMappingDSL.g:17728:3: (enumLiteral_1= 'RARELY' )
                    {
                    // InternalContextMappingDSL.g:17728:3: (enumLiteral_1= 'RARELY' )
                    // InternalContextMappingDSL.g:17729:4: enumLiteral_1= 'RARELY'
                    {
                    enumLiteral_1=(Token)match(input,216,FOLLOW_2); 

                    				current = grammarAccess.getLikelihoodForChangeAccess().getRARELYEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
                    				newLeafNode(enumLiteral_1, grammarAccess.getLikelihoodForChangeAccess().getRARELYEnumLiteralDeclaration_1());
                    			

                    }


                    }
                    break;
                case 3 :
                    // InternalContextMappingDSL.g:17736:3: (enumLiteral_2= 'OFTEN' )
                    {
                    // InternalContextMappingDSL.g:17736:3: (enumLiteral_2= 'OFTEN' )
                    // InternalContextMappingDSL.g:17737:4: enumLiteral_2= 'OFTEN'
                    {
                    enumLiteral_2=(Token)match(input,217,FOLLOW_2); 

                    				current = grammarAccess.getLikelihoodForChangeAccess().getOFTENEnumLiteralDeclaration_2().getEnumLiteral().getInstance();
                    				newLeafNode(enumLiteral_2, grammarAccess.getLikelihoodForChangeAccess().getOFTENEnumLiteralDeclaration_2());
                    			

                    }


                    }
                    break;

            }


            }


            	leaveRule();

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleLikelihoodForChange"


    // $ANTLR start "ruleHttpMethod"
    // InternalContextMappingDSL.g:17747:1: ruleHttpMethod returns [Enumerator current=null] : ( (enumLiteral_0= 'None' ) | (enumLiteral_1= 'GET' ) | (enumLiteral_2= 'POST' ) | (enumLiteral_3= 'PUT' ) | (enumLiteral_4= 'DELETE' ) ) ;
    public final Enumerator ruleHttpMethod() throws RecognitionException {
        Enumerator current = null;

        Token enumLiteral_0=null;
        Token enumLiteral_1=null;
        Token enumLiteral_2=null;
        Token enumLiteral_3=null;
        Token enumLiteral_4=null;


        	enterRule();

        try {
            // InternalContextMappingDSL.g:17753:2: ( ( (enumLiteral_0= 'None' ) | (enumLiteral_1= 'GET' ) | (enumLiteral_2= 'POST' ) | (enumLiteral_3= 'PUT' ) | (enumLiteral_4= 'DELETE' ) ) )
            // InternalContextMappingDSL.g:17754:2: ( (enumLiteral_0= 'None' ) | (enumLiteral_1= 'GET' ) | (enumLiteral_2= 'POST' ) | (enumLiteral_3= 'PUT' ) | (enumLiteral_4= 'DELETE' ) )
            {
            // InternalContextMappingDSL.g:17754:2: ( (enumLiteral_0= 'None' ) | (enumLiteral_1= 'GET' ) | (enumLiteral_2= 'POST' ) | (enumLiteral_3= 'PUT' ) | (enumLiteral_4= 'DELETE' ) )
            int alt403=5;
            switch ( input.LA(1) ) {
            case 218:
                {
                alt403=1;
                }
                break;
            case 219:
                {
                alt403=2;
                }
                break;
            case 220:
                {
                alt403=3;
                }
                break;
            case 221:
                {
                alt403=4;
                }
                break;
            case 222:
                {
                alt403=5;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("", 403, 0, input);

                throw nvae;
            }

            switch (alt403) {
                case 1 :
                    // InternalContextMappingDSL.g:17755:3: (enumLiteral_0= 'None' )
                    {
                    // InternalContextMappingDSL.g:17755:3: (enumLiteral_0= 'None' )
                    // InternalContextMappingDSL.g:17756:4: enumLiteral_0= 'None'
                    {
                    enumLiteral_0=(Token)match(input,218,FOLLOW_2); 

                    				current = grammarAccess.getHttpMethodAccess().getNoneEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
                    				newLeafNode(enumLiteral_0, grammarAccess.getHttpMethodAccess().getNoneEnumLiteralDeclaration_0());
                    			

                    }


                    }
                    break;
                case 2 :
                    // InternalContextMappingDSL.g:17763:3: (enumLiteral_1= 'GET' )
                    {
                    // InternalContextMappingDSL.g:17763:3: (enumLiteral_1= 'GET' )
                    // InternalContextMappingDSL.g:17764:4: enumLiteral_1= 'GET'
                    {
                    enumLiteral_1=(Token)match(input,219,FOLLOW_2); 

                    				current = grammarAccess.getHttpMethodAccess().getGETEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
                    				newLeafNode(enumLiteral_1, grammarAccess.getHttpMethodAccess().getGETEnumLiteralDeclaration_1());
                    			

                    }


                    }
                    break;
                case 3 :
                    // InternalContextMappingDSL.g:17771:3: (enumLiteral_2= 'POST' )
                    {
                    // InternalContextMappingDSL.g:17771:3: (enumLiteral_2= 'POST' )
                    // InternalContextMappingDSL.g:17772:4: enumLiteral_2= 'POST'
                    {
                    enumLiteral_2=(Token)match(input,220,FOLLOW_2); 

                    				current = grammarAccess.getHttpMethodAccess().getPOSTEnumLiteralDeclaration_2().getEnumLiteral().getInstance();
                    				newLeafNode(enumLiteral_2, grammarAccess.getHttpMethodAccess().getPOSTEnumLiteralDeclaration_2());
                    			

                    }


                    }
                    break;
                case 4 :
                    // InternalContextMappingDSL.g:17779:3: (enumLiteral_3= 'PUT' )
                    {
                    // InternalContextMappingDSL.g:17779:3: (enumLiteral_3= 'PUT' )
                    // InternalContextMappingDSL.g:17780:4: enumLiteral_3= 'PUT'
                    {
                    enumLiteral_3=(Token)match(input,221,FOLLOW_2); 

                    				current = grammarAccess.getHttpMethodAccess().getPUTEnumLiteralDeclaration_3().getEnumLiteral().getInstance();
                    				newLeafNode(enumLiteral_3, grammarAccess.getHttpMethodAccess().getPUTEnumLiteralDeclaration_3());
                    			

                    }


                    }
                    break;
                case 5 :
                    // InternalContextMappingDSL.g:17787:3: (enumLiteral_4= 'DELETE' )
                    {
                    // InternalContextMappingDSL.g:17787:3: (enumLiteral_4= 'DELETE' )
                    // InternalContextMappingDSL.g:17788:4: enumLiteral_4= 'DELETE'
                    {
                    enumLiteral_4=(Token)match(input,222,FOLLOW_2); 

                    				current = grammarAccess.getHttpMethodAccess().getDELETEEnumLiteralDeclaration_4().getEnumLiteral().getInstance();
                    				newLeafNode(enumLiteral_4, grammarAccess.getHttpMethodAccess().getDELETEEnumLiteralDeclaration_4());
                    			

                    }


                    }
                    break;

            }


            }


            	leaveRule();

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleHttpMethod"


    // $ANTLR start "ruleInheritanceType"
    // InternalContextMappingDSL.g:17798:1: ruleInheritanceType returns [Enumerator current=null] : ( (enumLiteral_0= 'JOINED' ) | (enumLiteral_1= 'SINGLE_TABLE' ) ) ;
    public final Enumerator ruleInheritanceType() throws RecognitionException {
        Enumerator current = null;

        Token enumLiteral_0=null;
        Token enumLiteral_1=null;


        	enterRule();

        try {
            // InternalContextMappingDSL.g:17804:2: ( ( (enumLiteral_0= 'JOINED' ) | (enumLiteral_1= 'SINGLE_TABLE' ) ) )
            // InternalContextMappingDSL.g:17805:2: ( (enumLiteral_0= 'JOINED' ) | (enumLiteral_1= 'SINGLE_TABLE' ) )
            {
            // InternalContextMappingDSL.g:17805:2: ( (enumLiteral_0= 'JOINED' ) | (enumLiteral_1= 'SINGLE_TABLE' ) )
            int alt404=2;
            int LA404_0 = input.LA(1);

            if ( (LA404_0==223) ) {
                alt404=1;
            }
            else if ( (LA404_0==224) ) {
                alt404=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 404, 0, input);

                throw nvae;
            }
            switch (alt404) {
                case 1 :
                    // InternalContextMappingDSL.g:17806:3: (enumLiteral_0= 'JOINED' )
                    {
                    // InternalContextMappingDSL.g:17806:3: (enumLiteral_0= 'JOINED' )
                    // InternalContextMappingDSL.g:17807:4: enumLiteral_0= 'JOINED'
                    {
                    enumLiteral_0=(Token)match(input,223,FOLLOW_2); 

                    				current = grammarAccess.getInheritanceTypeAccess().getJOINEDEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
                    				newLeafNode(enumLiteral_0, grammarAccess.getInheritanceTypeAccess().getJOINEDEnumLiteralDeclaration_0());
                    			

                    }


                    }
                    break;
                case 2 :
                    // InternalContextMappingDSL.g:17814:3: (enumLiteral_1= 'SINGLE_TABLE' )
                    {
                    // InternalContextMappingDSL.g:17814:3: (enumLiteral_1= 'SINGLE_TABLE' )
                    // InternalContextMappingDSL.g:17815:4: enumLiteral_1= 'SINGLE_TABLE'
                    {
                    enumLiteral_1=(Token)match(input,224,FOLLOW_2); 

                    				current = grammarAccess.getInheritanceTypeAccess().getSINGLE_TABLEEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
                    				newLeafNode(enumLiteral_1, grammarAccess.getInheritanceTypeAccess().getSINGLE_TABLEEnumLiteralDeclaration_1());
                    			

                    }


                    }
                    break;

            }


            }


            	leaveRule();

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleInheritanceType"


    // $ANTLR start "ruleDiscriminatorType"
    // InternalContextMappingDSL.g:17825:1: ruleDiscriminatorType returns [Enumerator current=null] : ( (enumLiteral_0= 'STRING' ) | (enumLiteral_1= 'CHAR' ) | (enumLiteral_2= 'INTEGER' ) ) ;
    public final Enumerator ruleDiscriminatorType() throws RecognitionException {
        Enumerator current = null;

        Token enumLiteral_0=null;
        Token enumLiteral_1=null;
        Token enumLiteral_2=null;


        	enterRule();

        try {
            // InternalContextMappingDSL.g:17831:2: ( ( (enumLiteral_0= 'STRING' ) | (enumLiteral_1= 'CHAR' ) | (enumLiteral_2= 'INTEGER' ) ) )
            // InternalContextMappingDSL.g:17832:2: ( (enumLiteral_0= 'STRING' ) | (enumLiteral_1= 'CHAR' ) | (enumLiteral_2= 'INTEGER' ) )
            {
            // InternalContextMappingDSL.g:17832:2: ( (enumLiteral_0= 'STRING' ) | (enumLiteral_1= 'CHAR' ) | (enumLiteral_2= 'INTEGER' ) )
            int alt405=3;
            switch ( input.LA(1) ) {
            case 225:
                {
                alt405=1;
                }
                break;
            case 226:
                {
                alt405=2;
                }
                break;
            case 227:
                {
                alt405=3;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("", 405, 0, input);

                throw nvae;
            }

            switch (alt405) {
                case 1 :
                    // InternalContextMappingDSL.g:17833:3: (enumLiteral_0= 'STRING' )
                    {
                    // InternalContextMappingDSL.g:17833:3: (enumLiteral_0= 'STRING' )
                    // InternalContextMappingDSL.g:17834:4: enumLiteral_0= 'STRING'
                    {
                    enumLiteral_0=(Token)match(input,225,FOLLOW_2); 

                    				current = grammarAccess.getDiscriminatorTypeAccess().getSTRINGEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
                    				newLeafNode(enumLiteral_0, grammarAccess.getDiscriminatorTypeAccess().getSTRINGEnumLiteralDeclaration_0());
                    			

                    }


                    }
                    break;
                case 2 :
                    // InternalContextMappingDSL.g:17841:3: (enumLiteral_1= 'CHAR' )
                    {
                    // InternalContextMappingDSL.g:17841:3: (enumLiteral_1= 'CHAR' )
                    // InternalContextMappingDSL.g:17842:4: enumLiteral_1= 'CHAR'
                    {
                    enumLiteral_1=(Token)match(input,226,FOLLOW_2); 

                    				current = grammarAccess.getDiscriminatorTypeAccess().getCHAREnumLiteralDeclaration_1().getEnumLiteral().getInstance();
                    				newLeafNode(enumLiteral_1, grammarAccess.getDiscriminatorTypeAccess().getCHAREnumLiteralDeclaration_1());
                    			

                    }


                    }
                    break;
                case 3 :
                    // InternalContextMappingDSL.g:17849:3: (enumLiteral_2= 'INTEGER' )
                    {
                    // InternalContextMappingDSL.g:17849:3: (enumLiteral_2= 'INTEGER' )
                    // InternalContextMappingDSL.g:17850:4: enumLiteral_2= 'INTEGER'
                    {
                    enumLiteral_2=(Token)match(input,227,FOLLOW_2); 

                    				current = grammarAccess.getDiscriminatorTypeAccess().getINTEGEREnumLiteralDeclaration_2().getEnumLiteral().getInstance();
                    				newLeafNode(enumLiteral_2, grammarAccess.getDiscriminatorTypeAccess().getINTEGEREnumLiteralDeclaration_2());
                    			

                    }


                    }
                    break;

            }


            }


            	leaveRule();

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleDiscriminatorType"


    // $ANTLR start "ruleCollectionType"
    // InternalContextMappingDSL.g:17860:1: ruleCollectionType returns [Enumerator current=null] : ( (enumLiteral_0= 'None' ) | (enumLiteral_1= 'Set' ) | (enumLiteral_2= 'List' ) | (enumLiteral_3= 'Bag' ) | (enumLiteral_4= 'Collection' ) ) ;
    public final Enumerator ruleCollectionType() throws RecognitionException {
        Enumerator current = null;

        Token enumLiteral_0=null;
        Token enumLiteral_1=null;
        Token enumLiteral_2=null;
        Token enumLiteral_3=null;
        Token enumLiteral_4=null;


        	enterRule();

        try {
            // InternalContextMappingDSL.g:17866:2: ( ( (enumLiteral_0= 'None' ) | (enumLiteral_1= 'Set' ) | (enumLiteral_2= 'List' ) | (enumLiteral_3= 'Bag' ) | (enumLiteral_4= 'Collection' ) ) )
            // InternalContextMappingDSL.g:17867:2: ( (enumLiteral_0= 'None' ) | (enumLiteral_1= 'Set' ) | (enumLiteral_2= 'List' ) | (enumLiteral_3= 'Bag' ) | (enumLiteral_4= 'Collection' ) )
            {
            // InternalContextMappingDSL.g:17867:2: ( (enumLiteral_0= 'None' ) | (enumLiteral_1= 'Set' ) | (enumLiteral_2= 'List' ) | (enumLiteral_3= 'Bag' ) | (enumLiteral_4= 'Collection' ) )
            int alt406=5;
            switch ( input.LA(1) ) {
            case 218:
                {
                alt406=1;
                }
                break;
            case 228:
                {
                alt406=2;
                }
                break;
            case 229:
                {
                alt406=3;
                }
                break;
            case 230:
                {
                alt406=4;
                }
                break;
            case 231:
                {
                alt406=5;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("", 406, 0, input);

                throw nvae;
            }

            switch (alt406) {
                case 1 :
                    // InternalContextMappingDSL.g:17868:3: (enumLiteral_0= 'None' )
                    {
                    // InternalContextMappingDSL.g:17868:3: (enumLiteral_0= 'None' )
                    // InternalContextMappingDSL.g:17869:4: enumLiteral_0= 'None'
                    {
                    enumLiteral_0=(Token)match(input,218,FOLLOW_2); 

                    				current = grammarAccess.getCollectionTypeAccess().getNoneEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
                    				newLeafNode(enumLiteral_0, grammarAccess.getCollectionTypeAccess().getNoneEnumLiteralDeclaration_0());
                    			

                    }


                    }
                    break;
                case 2 :
                    // InternalContextMappingDSL.g:17876:3: (enumLiteral_1= 'Set' )
                    {
                    // InternalContextMappingDSL.g:17876:3: (enumLiteral_1= 'Set' )
                    // InternalContextMappingDSL.g:17877:4: enumLiteral_1= 'Set'
                    {
                    enumLiteral_1=(Token)match(input,228,FOLLOW_2); 

                    				current = grammarAccess.getCollectionTypeAccess().getSetEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
                    				newLeafNode(enumLiteral_1, grammarAccess.getCollectionTypeAccess().getSetEnumLiteralDeclaration_1());
                    			

                    }


                    }
                    break;
                case 3 :
                    // InternalContextMappingDSL.g:17884:3: (enumLiteral_2= 'List' )
                    {
                    // InternalContextMappingDSL.g:17884:3: (enumLiteral_2= 'List' )
                    // InternalContextMappingDSL.g:17885:4: enumLiteral_2= 'List'
                    {
                    enumLiteral_2=(Token)match(input,229,FOLLOW_2); 

                    				current = grammarAccess.getCollectionTypeAccess().getListEnumLiteralDeclaration_2().getEnumLiteral().getInstance();
                    				newLeafNode(enumLiteral_2, grammarAccess.getCollectionTypeAccess().getListEnumLiteralDeclaration_2());
                    			

                    }


                    }
                    break;
                case 4 :
                    // InternalContextMappingDSL.g:17892:3: (enumLiteral_3= 'Bag' )
                    {
                    // InternalContextMappingDSL.g:17892:3: (enumLiteral_3= 'Bag' )
                    // InternalContextMappingDSL.g:17893:4: enumLiteral_3= 'Bag'
                    {
                    enumLiteral_3=(Token)match(input,230,FOLLOW_2); 

                    				current = grammarAccess.getCollectionTypeAccess().getBagEnumLiteralDeclaration_3().getEnumLiteral().getInstance();
                    				newLeafNode(enumLiteral_3, grammarAccess.getCollectionTypeAccess().getBagEnumLiteralDeclaration_3());
                    			

                    }


                    }
                    break;
                case 5 :
                    // InternalContextMappingDSL.g:17900:3: (enumLiteral_4= 'Collection' )
                    {
                    // InternalContextMappingDSL.g:17900:3: (enumLiteral_4= 'Collection' )
                    // InternalContextMappingDSL.g:17901:4: enumLiteral_4= 'Collection'
                    {
                    enumLiteral_4=(Token)match(input,231,FOLLOW_2); 

                    				current = grammarAccess.getCollectionTypeAccess().getCollectionEnumLiteralDeclaration_4().getEnumLiteral().getInstance();
                    				newLeafNode(enumLiteral_4, grammarAccess.getCollectionTypeAccess().getCollectionEnumLiteralDeclaration_4());
                    			

                    }


                    }
                    break;

            }


            }


            	leaveRule();

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleCollectionType"


    // $ANTLR start "ruleVisibility"
    // InternalContextMappingDSL.g:17911:1: ruleVisibility returns [Enumerator current=null] : ( (enumLiteral_0= 'public' ) | (enumLiteral_1= 'protected' ) | (enumLiteral_2= 'private' ) | (enumLiteral_3= 'package' ) ) ;
    public final Enumerator ruleVisibility() throws RecognitionException {
        Enumerator current = null;

        Token enumLiteral_0=null;
        Token enumLiteral_1=null;
        Token enumLiteral_2=null;
        Token enumLiteral_3=null;


        	enterRule();

        try {
            // InternalContextMappingDSL.g:17917:2: ( ( (enumLiteral_0= 'public' ) | (enumLiteral_1= 'protected' ) | (enumLiteral_2= 'private' ) | (enumLiteral_3= 'package' ) ) )
            // InternalContextMappingDSL.g:17918:2: ( (enumLiteral_0= 'public' ) | (enumLiteral_1= 'protected' ) | (enumLiteral_2= 'private' ) | (enumLiteral_3= 'package' ) )
            {
            // InternalContextMappingDSL.g:17918:2: ( (enumLiteral_0= 'public' ) | (enumLiteral_1= 'protected' ) | (enumLiteral_2= 'private' ) | (enumLiteral_3= 'package' ) )
            int alt407=4;
            switch ( input.LA(1) ) {
            case 232:
                {
                alt407=1;
                }
                break;
            case 233:
                {
                alt407=2;
                }
                break;
            case 234:
                {
                alt407=3;
                }
                break;
            case 109:
                {
                alt407=4;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("", 407, 0, input);

                throw nvae;
            }

            switch (alt407) {
                case 1 :
                    // InternalContextMappingDSL.g:17919:3: (enumLiteral_0= 'public' )
                    {
                    // InternalContextMappingDSL.g:17919:3: (enumLiteral_0= 'public' )
                    // InternalContextMappingDSL.g:17920:4: enumLiteral_0= 'public'
                    {
                    enumLiteral_0=(Token)match(input,232,FOLLOW_2); 

                    				current = grammarAccess.getVisibilityAccess().getPublicEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
                    				newLeafNode(enumLiteral_0, grammarAccess.getVisibilityAccess().getPublicEnumLiteralDeclaration_0());
                    			

                    }


                    }
                    break;
                case 2 :
                    // InternalContextMappingDSL.g:17927:3: (enumLiteral_1= 'protected' )
                    {
                    // InternalContextMappingDSL.g:17927:3: (enumLiteral_1= 'protected' )
                    // InternalContextMappingDSL.g:17928:4: enumLiteral_1= 'protected'
                    {
                    enumLiteral_1=(Token)match(input,233,FOLLOW_2); 

                    				current = grammarAccess.getVisibilityAccess().getProtectedEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
                    				newLeafNode(enumLiteral_1, grammarAccess.getVisibilityAccess().getProtectedEnumLiteralDeclaration_1());
                    			

                    }


                    }
                    break;
                case 3 :
                    // InternalContextMappingDSL.g:17935:3: (enumLiteral_2= 'private' )
                    {
                    // InternalContextMappingDSL.g:17935:3: (enumLiteral_2= 'private' )
                    // InternalContextMappingDSL.g:17936:4: enumLiteral_2= 'private'
                    {
                    enumLiteral_2=(Token)match(input,234,FOLLOW_2); 

                    				current = grammarAccess.getVisibilityAccess().getPrivateEnumLiteralDeclaration_2().getEnumLiteral().getInstance();
                    				newLeafNode(enumLiteral_2, grammarAccess.getVisibilityAccess().getPrivateEnumLiteralDeclaration_2());
                    			

                    }


                    }
                    break;
                case 4 :
                    // InternalContextMappingDSL.g:17943:3: (enumLiteral_3= 'package' )
                    {
                    // InternalContextMappingDSL.g:17943:3: (enumLiteral_3= 'package' )
                    // InternalContextMappingDSL.g:17944:4: enumLiteral_3= 'package'
                    {
                    enumLiteral_3=(Token)match(input,109,FOLLOW_2); 

                    				current = grammarAccess.getVisibilityAccess().getPackageEnumLiteralDeclaration_3().getEnumLiteral().getInstance();
                    				newLeafNode(enumLiteral_3, grammarAccess.getVisibilityAccess().getPackageEnumLiteralDeclaration_3());
                    			

                    }


                    }
                    break;

            }


            }


            	leaveRule();

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleVisibility"

    // Delegated rules


    protected DFA38 dfa38 = new DFA38(this);
    protected DFA43 dfa43 = new DFA43(this);
    protected DFA81 dfa81 = new DFA81(this);
    protected DFA72 dfa72 = new DFA72(this);
    protected DFA138 dfa138 = new DFA138(this);
    protected DFA192 dfa192 = new DFA192(this);
    protected DFA199 dfa199 = new DFA199(this);
    protected DFA196 dfa196 = new DFA196(this);
    protected DFA198 dfa198 = new DFA198(this);
    protected DFA200 dfa200 = new DFA200(this);
    protected DFA215 dfa215 = new DFA215(this);
    protected DFA233 dfa233 = new DFA233(this);
    protected DFA248 dfa248 = new DFA248(this);
    protected DFA263 dfa263 = new DFA263(this);
    protected DFA315 dfa315 = new DFA315(this);
    protected DFA331 dfa331 = new DFA331(this);
    protected DFA349 dfa349 = new DFA349(this);
    protected DFA362 dfa362 = new DFA362(this);
    static final String dfa_1s = "\20\uffff";
    static final String dfa_2s = "\1\6\1\43\1\44\1\uffff\1\44\2\45\1\6\2\46\2\6\4\uffff";
    static final String dfa_3s = "\1\43\1\47\1\44\1\uffff\1\44\2\45\1\6\2\46\2\43\4\uffff";
    static final String dfa_4s = "\3\uffff\1\5\10\uffff\1\3\1\1\1\4\1\2";
    static final String dfa_5s = "\20\uffff}>";
    static final String[] dfa_6s = {
            "\1\1\34\uffff\1\2",
            "\1\4\3\uffff\1\3",
            "\1\5",
            "",
            "\1\6",
            "\1\7",
            "\1\10",
            "\1\11",
            "\1\12",
            "\1\13",
            "\1\14\34\uffff\1\15",
            "\1\16\34\uffff\1\17",
            "",
            "",
            "",
            ""
    };

    static final short[] dfa_1 = DFA.unpackEncodedString(dfa_1s);
    static final char[] dfa_2 = DFA.unpackEncodedStringToUnsignedChars(dfa_2s);
    static final char[] dfa_3 = DFA.unpackEncodedStringToUnsignedChars(dfa_3s);
    static final short[] dfa_4 = DFA.unpackEncodedString(dfa_4s);
    static final short[] dfa_5 = DFA.unpackEncodedString(dfa_5s);
    static final short[][] dfa_6 = unpackEncodedStringArray(dfa_6s);

    class DFA38 extends DFA {

        public DFA38(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 38;
            this.eot = dfa_1;
            this.eof = dfa_1;
            this.min = dfa_2;
            this.max = dfa_3;
            this.accept = dfa_4;
            this.special = dfa_5;
            this.transition = dfa_6;
        }
        public String getDescription() {
            return "1373:3: ( ( ( (otherlv_0= RULE_ID ) ) otherlv_1= '[' otherlv_2= 'P' otherlv_3= ']' otherlv_4= '<->' otherlv_5= '[' otherlv_6= 'P' otherlv_7= ']' ( (otherlv_8= RULE_ID ) ) ) | (otherlv_9= '[' otherlv_10= 'P' otherlv_11= ']' ( (otherlv_12= RULE_ID ) ) otherlv_13= '<->' otherlv_14= '[' otherlv_15= 'P' otherlv_16= ']' ( (otherlv_17= RULE_ID ) ) ) | ( ( (otherlv_18= RULE_ID ) ) otherlv_19= '[' otherlv_20= 'P' otherlv_21= ']' otherlv_22= '<->' ( (otherlv_23= RULE_ID ) ) otherlv_24= '[' otherlv_25= 'P' otherlv_26= ']' ) | (otherlv_27= '[' otherlv_28= 'P' otherlv_29= ']' ( (otherlv_30= RULE_ID ) ) otherlv_31= '<->' ( (otherlv_32= RULE_ID ) ) otherlv_33= '[' otherlv_34= 'P' otherlv_35= ']' ) | ( ( (otherlv_36= RULE_ID ) ) otherlv_37= 'Partnership' ( (otherlv_38= RULE_ID ) ) ) )";
        }
    }
    static final String dfa_7s = "\21\uffff";
    static final String dfa_8s = "\1\6\1\43\1\51\1\uffff\1\51\1\uffff\2\45\1\6\2\46\2\6\4\uffff";
    static final String dfa_9s = "\1\43\1\52\1\51\1\uffff\1\51\1\uffff\2\45\1\6\2\46\2\43\4\uffff";
    static final String dfa_10s = "\3\uffff\1\5\1\uffff\1\6\7\uffff\1\3\1\1\1\4\1\2";
    static final String dfa_11s = "\21\uffff}>";
    static final String[] dfa_12s = {
            "\1\1\34\uffff\1\2",
            "\1\4\2\uffff\1\5\3\uffff\1\3",
            "\1\6",
            "",
            "\1\7",
            "",
            "\1\10",
            "\1\11",
            "\1\12",
            "\1\13",
            "\1\14",
            "\1\15\34\uffff\1\16",
            "\1\17\34\uffff\1\20",
            "",
            "",
            "",
            ""
    };

    static final short[] dfa_7 = DFA.unpackEncodedString(dfa_7s);
    static final char[] dfa_8 = DFA.unpackEncodedStringToUnsignedChars(dfa_8s);
    static final char[] dfa_9 = DFA.unpackEncodedStringToUnsignedChars(dfa_9s);
    static final short[] dfa_10 = DFA.unpackEncodedString(dfa_10s);
    static final short[] dfa_11 = DFA.unpackEncodedString(dfa_11s);
    static final short[][] dfa_12 = unpackEncodedStringArray(dfa_12s);

    class DFA43 extends DFA {

        public DFA43(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 43;
            this.eot = dfa_7;
            this.eof = dfa_7;
            this.min = dfa_8;
            this.max = dfa_9;
            this.accept = dfa_10;
            this.special = dfa_11;
            this.transition = dfa_12;
        }
        public String getDescription() {
            return "1718:3: ( ( ( (otherlv_0= RULE_ID ) ) otherlv_1= '[' otherlv_2= 'SK' otherlv_3= ']' otherlv_4= '<->' otherlv_5= '[' otherlv_6= 'SK' otherlv_7= ']' ( (otherlv_8= RULE_ID ) ) ) | (otherlv_9= '[' otherlv_10= 'SK' otherlv_11= ']' ( (otherlv_12= RULE_ID ) ) otherlv_13= '<->' otherlv_14= '[' otherlv_15= 'SK' otherlv_16= ']' ( (otherlv_17= RULE_ID ) ) ) | ( ( (otherlv_18= RULE_ID ) ) otherlv_19= '[' otherlv_20= 'SK' otherlv_21= ']' otherlv_22= '<->' ( (otherlv_23= RULE_ID ) ) otherlv_24= '[' otherlv_25= 'SK' otherlv_26= ']' ) | (otherlv_27= '[' otherlv_28= 'SK' otherlv_29= ']' ( (otherlv_30= RULE_ID ) ) otherlv_31= '<->' ( (otherlv_32= RULE_ID ) ) otherlv_33= '[' otherlv_34= 'SK' otherlv_35= ']' ) | ( ( (otherlv_36= RULE_ID ) ) otherlv_37= 'Shared-Kernel' ( (otherlv_38= RULE_ID ) ) ) | ( ( (otherlv_39= RULE_ID ) ) otherlv_40= '<->' ( (otherlv_41= RULE_ID ) ) ) )";
        }
    }
    static final String dfa_13s = "\26\uffff";
    static final String dfa_14s = "\1\6\1\43\1\45\2\uffff\2\30\1\57\4\30\1\u00c1\1\54\1\63\1\u00c3\1\56\1\64\4\30";
    static final String dfa_15s = "\1\6\1\66\1\u00c4\2\uffff\2\45\1\66\4\45\1\u00c2\1\66\1\u00c2\1\u00c4\1\65\1\u00c4\4\45";
    static final String dfa_16s = "\3\uffff\1\2\1\1\21\uffff";
    static final String dfa_17s = "\26\uffff}>";
    static final String[] dfa_18s = {
            "\1\1",
            "\1\2\10\uffff\1\3\1\uffff\3\3\4\uffff\2\4",
            "\1\7\5\uffff\1\10\1\uffff\1\13\5\uffff\2\4\u008c\uffff\1\5\1\6\1\11\1\12",
            "",
            "",
            "\1\14\14\uffff\1\15",
            "\1\14\14\uffff\1\15",
            "\2\3\4\uffff\2\4",
            "\1\16\14\uffff\1\3",
            "\1\17\14\uffff\1\20",
            "\1\17\14\uffff\1\20",
            "\1\21\14\uffff\1\3",
            "\1\22\1\23",
            "\1\3\2\uffff\1\3\6\uffff\1\4",
            "\1\4\u008d\uffff\2\3",
            "\1\24\1\25",
            "\1\3\1\uffff\1\3\4\uffff\1\4",
            "\1\4\u008e\uffff\2\3",
            "\1\14\14\uffff\1\15",
            "\1\14\14\uffff\1\15",
            "\1\17\14\uffff\1\20",
            "\1\17\14\uffff\1\20"
    };

    static final short[] dfa_13 = DFA.unpackEncodedString(dfa_13s);
    static final char[] dfa_14 = DFA.unpackEncodedStringToUnsignedChars(dfa_14s);
    static final char[] dfa_15 = DFA.unpackEncodedStringToUnsignedChars(dfa_15s);
    static final short[] dfa_16 = DFA.unpackEncodedString(dfa_16s);
    static final short[] dfa_17 = DFA.unpackEncodedString(dfa_17s);
    static final short[][] dfa_18 = unpackEncodedStringArray(dfa_18s);

    class DFA81 extends DFA {

        public DFA81(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 81;
            this.eot = dfa_13;
            this.eof = dfa_13;
            this.min = dfa_14;
            this.max = dfa_15;
            this.accept = dfa_16;
            this.special = dfa_17;
            this.transition = dfa_18;
        }
        public String getDescription() {
            return "2095:2: (this_CustomerSupplierRelationship_0= ruleCustomerSupplierRelationship | ( ( ( ( (otherlv_1= RULE_ID ) ) ( (otherlv_2= '[' otherlv_3= 'U' otherlv_4= ']' ) | ( (otherlv_5= '[' (otherlv_6= 'U' otherlv_7= ',' )? ( (lv_upstreamRoles_8_0= ruleUpstreamRole ) ) (otherlv_9= ',' ( (lv_upstreamRoles_10_0= ruleUpstreamRole ) ) )* ) otherlv_11= ']' ) )? otherlv_12= '->' ( (otherlv_13= '[' otherlv_14= 'D' otherlv_15= ']' ) | ( (otherlv_16= '[' (otherlv_17= 'D' otherlv_18= ',' )? ( (lv_downstreamRoles_19_0= ruleDownstreamRole ) ) (otherlv_20= ',' ( (lv_downstreamRoles_21_0= ruleDownstreamRole ) ) )* ) otherlv_22= ']' ) )? ( (otherlv_23= RULE_ID ) ) ) | ( ( (otherlv_24= RULE_ID ) ) ( (otherlv_25= '[' otherlv_26= 'D' otherlv_27= ']' ) | ( (otherlv_28= '[' (otherlv_29= 'D' otherlv_30= ',' )? ( (lv_downstreamRoles_31_0= ruleDownstreamRole ) ) (otherlv_32= ',' ( (lv_downstreamRoles_33_0= ruleDownstreamRole ) ) )* ) otherlv_34= ']' ) )? otherlv_35= '<-' ( (otherlv_36= '[' otherlv_37= 'U' otherlv_38= ']' ) | ( (otherlv_39= '[' (otherlv_40= 'U' otherlv_41= ',' )? ( (lv_upstreamRoles_42_0= ruleUpstreamRole ) ) (otherlv_43= ',' ( (lv_upstreamRoles_44_0= ruleUpstreamRole ) ) )* ) otherlv_45= ']' ) )? ( (otherlv_46= RULE_ID ) ) ) | ( ( (otherlv_47= RULE_ID ) ) (otherlv_48= '[' ( ( (lv_upstreamRoles_49_0= ruleUpstreamRole ) ) (otherlv_50= ',' ( (lv_upstreamRoles_51_0= ruleUpstreamRole ) ) )* )? otherlv_52= ']' )? otherlv_53= 'Upstream-Downstream' (otherlv_54= '[' ( ( (lv_downstreamRoles_55_0= ruleDownstreamRole ) ) (otherlv_56= ',' ( (lv_downstreamRoles_57_0= ruleDownstreamRole ) ) )* )? otherlv_58= ']' )? ( (otherlv_59= RULE_ID ) ) ) | ( ( (otherlv_60= RULE_ID ) ) (otherlv_61= '[' ( ( (lv_downstreamRoles_62_0= ruleDownstreamRole ) ) (otherlv_63= ',' ( (lv_downstreamRoles_64_0= ruleDownstreamRole ) ) )* )? otherlv_65= ']' )? otherlv_66= 'Downstream-Upstream' (otherlv_67= '[' ( ( (lv_upstreamRoles_68_0= ruleUpstreamRole ) ) (otherlv_69= ',' ( (lv_upstreamRoles_70_0= ruleUpstreamRole ) ) )* )? otherlv_71= ']' )? ( (otherlv_72= RULE_ID ) ) ) ) (otherlv_73= ':' ( (lv_name_74_0= RULE_ID ) ) )? (this_OPEN_75= RULE_OPEN ( ( ( ( ({...}? => ( ({...}? => (otherlv_77= 'implementationTechnology' (otherlv_78= '=' )? ( (lv_implementationTechnology_79_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (otherlv_80= 'exposedAggregates' (otherlv_81= '=' )? ( (otherlv_82= RULE_ID ) ) ) (otherlv_83= ',' ( (otherlv_84= RULE_ID ) ) )* ( (lv_exposedAggregatesComment_85_0= RULE_SL_COMMENT ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_86= 'downstreamRights' (otherlv_87= '=' )? ( (lv_downstreamGovernanceRights_88_0= ruleDownstreamGovernanceRights ) ) ) ) ) ) )* ) ) ) this_CLOSE_89= RULE_CLOSE )? ) )";
        }
    }
    static final String dfa_19s = "\24\uffff";
    static final String dfa_20s = "\1\6\1\43\1\45\4\uffff\4\30\1\57\1\u00c1\1\54\1\u00c3\1\56\4\30";
    static final String dfa_21s = "\1\6\1\60\1\u00c4\4\uffff\4\45\1\60\1\u00c2\1\57\1\u00c4\1\60\4\45";
    static final String dfa_22s = "\3\uffff\1\2\1\3\1\1\1\4\15\uffff";
    static final String dfa_23s = "\24\uffff}>";
    static final String[] dfa_24s = {
            "\1\1",
            "\1\2\10\uffff\1\5\1\uffff\1\3\1\4\1\6",
            "\1\13\5\uffff\1\5\1\uffff\1\3\u0093\uffff\1\7\1\10\1\11\1\12",
            "",
            "",
            "",
            "",
            "\1\14\14\uffff\1\15",
            "\1\14\14\uffff\1\15",
            "\1\16\14\uffff\1\17",
            "\1\16\14\uffff\1\17",
            "\1\4\1\6",
            "\1\20\1\21",
            "\1\5\2\uffff\1\4",
            "\1\22\1\23",
            "\1\3\1\uffff\1\6",
            "\1\14\14\uffff\1\15",
            "\1\14\14\uffff\1\15",
            "\1\16\14\uffff\1\17",
            "\1\16\14\uffff\1\17"
    };

    static final short[] dfa_19 = DFA.unpackEncodedString(dfa_19s);
    static final char[] dfa_20 = DFA.unpackEncodedStringToUnsignedChars(dfa_20s);
    static final char[] dfa_21 = DFA.unpackEncodedStringToUnsignedChars(dfa_21s);
    static final short[] dfa_22 = DFA.unpackEncodedString(dfa_22s);
    static final short[] dfa_23 = DFA.unpackEncodedString(dfa_23s);
    static final short[][] dfa_24 = unpackEncodedStringArray(dfa_24s);

    class DFA72 extends DFA {

        public DFA72(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 72;
            this.eot = dfa_19;
            this.eof = dfa_19;
            this.min = dfa_20;
            this.max = dfa_21;
            this.accept = dfa_22;
            this.special = dfa_23;
            this.transition = dfa_24;
        }
        public String getDescription() {
            return "2106:4: ( ( ( (otherlv_1= RULE_ID ) ) ( (otherlv_2= '[' otherlv_3= 'U' otherlv_4= ']' ) | ( (otherlv_5= '[' (otherlv_6= 'U' otherlv_7= ',' )? ( (lv_upstreamRoles_8_0= ruleUpstreamRole ) ) (otherlv_9= ',' ( (lv_upstreamRoles_10_0= ruleUpstreamRole ) ) )* ) otherlv_11= ']' ) )? otherlv_12= '->' ( (otherlv_13= '[' otherlv_14= 'D' otherlv_15= ']' ) | ( (otherlv_16= '[' (otherlv_17= 'D' otherlv_18= ',' )? ( (lv_downstreamRoles_19_0= ruleDownstreamRole ) ) (otherlv_20= ',' ( (lv_downstreamRoles_21_0= ruleDownstreamRole ) ) )* ) otherlv_22= ']' ) )? ( (otherlv_23= RULE_ID ) ) ) | ( ( (otherlv_24= RULE_ID ) ) ( (otherlv_25= '[' otherlv_26= 'D' otherlv_27= ']' ) | ( (otherlv_28= '[' (otherlv_29= 'D' otherlv_30= ',' )? ( (lv_downstreamRoles_31_0= ruleDownstreamRole ) ) (otherlv_32= ',' ( (lv_downstreamRoles_33_0= ruleDownstreamRole ) ) )* ) otherlv_34= ']' ) )? otherlv_35= '<-' ( (otherlv_36= '[' otherlv_37= 'U' otherlv_38= ']' ) | ( (otherlv_39= '[' (otherlv_40= 'U' otherlv_41= ',' )? ( (lv_upstreamRoles_42_0= ruleUpstreamRole ) ) (otherlv_43= ',' ( (lv_upstreamRoles_44_0= ruleUpstreamRole ) ) )* ) otherlv_45= ']' ) )? ( (otherlv_46= RULE_ID ) ) ) | ( ( (otherlv_47= RULE_ID ) ) (otherlv_48= '[' ( ( (lv_upstreamRoles_49_0= ruleUpstreamRole ) ) (otherlv_50= ',' ( (lv_upstreamRoles_51_0= ruleUpstreamRole ) ) )* )? otherlv_52= ']' )? otherlv_53= 'Upstream-Downstream' (otherlv_54= '[' ( ( (lv_downstreamRoles_55_0= ruleDownstreamRole ) ) (otherlv_56= ',' ( (lv_downstreamRoles_57_0= ruleDownstreamRole ) ) )* )? otherlv_58= ']' )? ( (otherlv_59= RULE_ID ) ) ) | ( ( (otherlv_60= RULE_ID ) ) (otherlv_61= '[' ( ( (lv_downstreamRoles_62_0= ruleDownstreamRole ) ) (otherlv_63= ',' ( (lv_downstreamRoles_64_0= ruleDownstreamRole ) ) )* )? otherlv_65= ']' )? otherlv_66= 'Downstream-Upstream' (otherlv_67= '[' ( ( (lv_upstreamRoles_68_0= ruleUpstreamRole ) ) (otherlv_69= ',' ( (lv_upstreamRoles_70_0= ruleUpstreamRole ) ) )* )? otherlv_71= ']' )? ( (otherlv_72= RULE_ID ) ) ) )";
        }
    }
    static final String dfa_25s = "\12\uffff";
    static final String dfa_26s = "\1\4\1\uffff\1\67\4\uffff\1\5\1\uffff\1\67";
    static final String dfa_27s = "\1\u00a8\1\uffff\1\u00a8\4\uffff\1\u0081\1\uffff\1\u0081";
    static final String dfa_28s = "\1\uffff\1\6\1\uffff\1\1\1\2\1\3\1\4\1\uffff\1\5\1\uffff";
    static final String dfa_29s = "\12\uffff}>";
    static final String[] dfa_30s = {
            "\1\7\1\2\2\uffff\1\1\56\uffff\1\10\16\uffff\1\3\3\uffff\1\4\2\uffff\1\5\33\uffff\2\6\16\uffff\1\6\2\uffff\3\6\2\uffff\2\6\45\uffff\1\6",
            "",
            "\1\10\16\uffff\1\3\3\uffff\1\4\2\uffff\1\5\33\uffff\2\6\16\uffff\1\6\2\uffff\3\6\2\uffff\2\6\45\uffff\1\6",
            "",
            "",
            "",
            "",
            "\1\11\61\uffff\1\10\61\uffff\2\6\16\uffff\1\6\2\uffff\2\6\3\uffff\1\6",
            "",
            "\1\10\61\uffff\2\6\16\uffff\1\6\2\uffff\2\6\3\uffff\1\6"
    };

    static final short[] dfa_25 = DFA.unpackEncodedString(dfa_25s);
    static final char[] dfa_26 = DFA.unpackEncodedStringToUnsignedChars(dfa_26s);
    static final char[] dfa_27 = DFA.unpackEncodedStringToUnsignedChars(dfa_27s);
    static final short[] dfa_28 = DFA.unpackEncodedString(dfa_28s);
    static final short[] dfa_29 = DFA.unpackEncodedString(dfa_29s);
    static final short[][] dfa_30 = unpackEncodedStringArray(dfa_30s);

    class DFA138 extends DFA {

        public DFA138(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 138;
            this.eot = dfa_25;
            this.eof = dfa_25;
            this.min = dfa_26;
            this.max = dfa_27;
            this.accept = dfa_28;
            this.special = dfa_29;
            this.transition = dfa_30;
        }
        public String getDescription() {
            return "()* loopback of 4629:4: ( ( (lv_services_11_0= ruleService ) ) | ( (lv_resources_12_0= ruleResource ) ) | ( (lv_consumers_13_0= ruleConsumer ) ) | ( (lv_domainObjects_14_0= ruleSimpleDomainObject ) ) | ( (lv_aggregates_15_0= ruleAggregate ) ) )*";
        }
    }
    static final String dfa_31s = "\17\uffff";
    static final String dfa_32s = "\1\11\16\uffff";
    static final String dfa_33s = "\1\145\16\uffff";
    static final String dfa_34s = "\1\uffff\1\16\1\1\1\2\1\3\1\4\1\5\1\6\1\7\1\10\1\11\1\12\1\13\1\14\1\15";
    static final String dfa_35s = "\1\0\16\uffff}>";
    static final String[] dfa_36s = {
            "\1\1\71\uffff\1\3\3\uffff\2\5\14\uffff\1\16\3\uffff\1\2\1\1\2\uffff\1\4\1\6\1\7\1\10\1\11\1\12\1\13\1\14\1\15",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static final short[] dfa_31 = DFA.unpackEncodedString(dfa_31s);
    static final char[] dfa_32 = DFA.unpackEncodedStringToUnsignedChars(dfa_32s);
    static final char[] dfa_33 = DFA.unpackEncodedStringToUnsignedChars(dfa_33s);
    static final short[] dfa_34 = DFA.unpackEncodedString(dfa_34s);
    static final short[] dfa_35 = DFA.unpackEncodedString(dfa_35s);
    static final short[][] dfa_36 = unpackEncodedStringArray(dfa_36s);

    class DFA192 extends DFA {

        public DFA192(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 192;
            this.eot = dfa_31;
            this.eof = dfa_31;
            this.min = dfa_32;
            this.max = dfa_33;
            this.accept = dfa_34;
            this.special = dfa_35;
            this.transition = dfa_36;
        }
        public String getDescription() {
            return "()* loopback of 6806:6: ( ({...}? => ( ({...}? => (otherlv_11= 'throws' ( (lv_throws_12_0= ruleThrowsIdentifier ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_13= 'hint' otherlv_14= '=' ( (lv_hint_15_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_cache_16_0= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapOperation_17_0= 'gap' ) ) | ( (lv_noGapOperation_18_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'query' otherlv_20= '=' ( (lv_query_21_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_22= 'condition' otherlv_23= '=' ( (lv_condition_24_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_25= 'select' otherlv_26= '=' ( (lv_select_27_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_28= 'groupBy' otherlv_29= '=' ( (lv_groupBy_30_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_31= 'orderBy' otherlv_32= '=' ( (lv_orderBy_33_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_construct_34_0= 'construct' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_build_35_0= 'build' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_map_36_0= 'map' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_publish_37_0= rulePublish ) ) ) ) ) )*";
        }
        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
            TokenStream input = (TokenStream)_input;
        	int _s = s;
            switch ( s ) {
                    case 0 : 
                        int LA192_0 = input.LA(1);

                         
                        int index192_0 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (LA192_0==RULE_DELEGATE||LA192_0==90) ) {s = 1;}

                        else if ( LA192_0 == 89 && getUnorderedGroupHelper().canSelect(grammarAccess.getRepositoryOperationAccess().getUnorderedGroup_5(), 0) ) {s = 2;}

                        else if ( LA192_0 == 67 && getUnorderedGroupHelper().canSelect(grammarAccess.getRepositoryOperationAccess().getUnorderedGroup_5(), 1) ) {s = 3;}

                        else if ( LA192_0 == 93 && getUnorderedGroupHelper().canSelect(grammarAccess.getRepositoryOperationAccess().getUnorderedGroup_5(), 2) ) {s = 4;}

                        else if ( LA192_0 >= 71 && LA192_0 <= 72 && getUnorderedGroupHelper().canSelect(grammarAccess.getRepositoryOperationAccess().getUnorderedGroup_5(), 3) ) {s = 5;}

                        else if ( LA192_0 == 94 && getUnorderedGroupHelper().canSelect(grammarAccess.getRepositoryOperationAccess().getUnorderedGroup_5(), 4) ) {s = 6;}

                        else if ( LA192_0 == 95 && getUnorderedGroupHelper().canSelect(grammarAccess.getRepositoryOperationAccess().getUnorderedGroup_5(), 5) ) {s = 7;}

                        else if ( LA192_0 == 96 && getUnorderedGroupHelper().canSelect(grammarAccess.getRepositoryOperationAccess().getUnorderedGroup_5(), 6) ) {s = 8;}

                        else if ( LA192_0 == 97 && getUnorderedGroupHelper().canSelect(grammarAccess.getRepositoryOperationAccess().getUnorderedGroup_5(), 7) ) {s = 9;}

                        else if ( LA192_0 == 98 && getUnorderedGroupHelper().canSelect(grammarAccess.getRepositoryOperationAccess().getUnorderedGroup_5(), 8) ) {s = 10;}

                        else if ( LA192_0 == 99 && getUnorderedGroupHelper().canSelect(grammarAccess.getRepositoryOperationAccess().getUnorderedGroup_5(), 9) ) {s = 11;}

                        else if ( LA192_0 == 100 && getUnorderedGroupHelper().canSelect(grammarAccess.getRepositoryOperationAccess().getUnorderedGroup_5(), 10) ) {s = 12;}

                        else if ( LA192_0 == 101 && getUnorderedGroupHelper().canSelect(grammarAccess.getRepositoryOperationAccess().getUnorderedGroup_5(), 11) ) {s = 13;}

                        else if ( LA192_0 == 85 && getUnorderedGroupHelper().canSelect(grammarAccess.getRepositoryOperationAccess().getUnorderedGroup_5(), 12) ) {s = 14;}

                         
                        input.seek(index192_0);
                        if ( s>=0 ) return s;
                        break;
            }
            NoViableAltException nvae =
                new NoViableAltException(getDescription(), 192, _s, input);
            error(nvae);
            throw nvae;
        }
    }
    static final String dfa_37s = "\37\uffff";
    static final String dfa_38s = "\1\uffff\27\33\6\uffff\1\33";
    static final String dfa_39s = "\30\6\5\uffff\2\6";
    static final String dfa_40s = "\1\u00e7\27\147\5\uffff\1\6\1\147";
    static final String dfa_41s = "\30\uffff\1\3\1\4\1\5\1\1\1\2\2\uffff";
    static final String dfa_42s = "\37\uffff}>";
    static final String[] dfa_43s = {
            "\1\27\3\uffff\1\32\104\uffff\1\30\132\uffff\1\1\1\2\1\3\1\4\1\5\1\6\1\7\1\10\1\11\1\12\1\13\1\14\1\15\1\16\1\17\1\20\1\21\1\22\1\23\1\24\1\25\1\26\32\uffff\1\31\11\uffff\4\31",
            "\1\33\140\uffff\1\34",
            "\1\33\140\uffff\1\34",
            "\1\33\140\uffff\1\34",
            "\1\33\140\uffff\1\34",
            "\1\33\140\uffff\1\34",
            "\1\33\140\uffff\1\34",
            "\1\33\140\uffff\1\34",
            "\1\33\140\uffff\1\34",
            "\1\33\140\uffff\1\34",
            "\1\33\140\uffff\1\34",
            "\1\33\140\uffff\1\34",
            "\1\33\140\uffff\1\34",
            "\1\33\140\uffff\1\34",
            "\1\33\140\uffff\1\34",
            "\1\33\140\uffff\1\34",
            "\1\33\140\uffff\1\34",
            "\1\33\140\uffff\1\34",
            "\1\33\140\uffff\1\34",
            "\1\33\140\uffff\1\34",
            "\1\33\140\uffff\1\34",
            "\1\33\140\uffff\1\34",
            "\1\33\140\uffff\1\34",
            "\1\33\124\uffff\1\35\13\uffff\1\34",
            "",
            "",
            "",
            "",
            "",
            "\1\36",
            "\1\33\124\uffff\1\35\13\uffff\1\34"
    };

    static final short[] dfa_37 = DFA.unpackEncodedString(dfa_37s);
    static final short[] dfa_38 = DFA.unpackEncodedString(dfa_38s);
    static final char[] dfa_39 = DFA.unpackEncodedStringToUnsignedChars(dfa_39s);
    static final char[] dfa_40 = DFA.unpackEncodedStringToUnsignedChars(dfa_40s);
    static final short[] dfa_41 = DFA.unpackEncodedString(dfa_41s);
    static final short[] dfa_42 = DFA.unpackEncodedString(dfa_42s);
    static final short[][] dfa_43 = unpackEncodedStringArray(dfa_43s);

    class DFA199 extends DFA {

        public DFA199(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 199;
            this.eot = dfa_37;
            this.eof = dfa_38;
            this.min = dfa_39;
            this.max = dfa_40;
            this.accept = dfa_41;
            this.special = dfa_42;
            this.transition = dfa_43;
        }
        public String getDescription() {
            return "7371:2: ( ( (lv_type_0_0= ruleType ) ) | ( ( (lv_type_1_0= ruleType ) ) otherlv_2= '<' otherlv_3= '@' ( (otherlv_4= RULE_ID ) ) otherlv_5= '>' ) | (otherlv_6= '@' ( (otherlv_7= RULE_ID ) ) ) | ( ( (lv_collectionType_8_0= ruleCollectionType ) ) otherlv_9= '<' ( (otherlv_10= '@' ( (otherlv_11= RULE_ID ) ) ) | ( (lv_type_12_0= ruleType ) ) | ( ( (lv_type_13_0= ruleType ) ) otherlv_14= '<' otherlv_15= '@' ( (otherlv_16= RULE_ID ) ) otherlv_17= '>' ) ) otherlv_18= '>' ) | ( ( (lv_mapCollectionType_19_0= RULE_MAP_COLLECTION_TYPE ) ) otherlv_20= '<' ( ( (lv_mapKeyType_21_0= ruleType ) ) | (otherlv_22= '@' ( (otherlv_23= RULE_ID ) ) ) ) otherlv_24= ',' ( (otherlv_25= '@' ( (otherlv_26= RULE_ID ) ) ) | ( (lv_type_27_0= ruleType ) ) | ( ( (lv_type_28_0= ruleType ) ) otherlv_29= '<' otherlv_30= '@' ( (otherlv_31= RULE_ID ) ) otherlv_32= '>' ) ) otherlv_33= '>' ) )";
        }
    }
    static final String dfa_44s = "\35\uffff";
    static final String dfa_45s = "\1\6\1\uffff\26\147\1\133\2\uffff\1\6\1\133";
    static final String dfa_46s = "\1\u00bf\1\uffff\27\150\2\uffff\1\6\1\150";
    static final String dfa_47s = "\1\uffff\1\1\27\uffff\1\2\1\3\2\uffff";
    static final String dfa_48s = "\35\uffff}>";
    static final String[] dfa_49s = {
            "\1\30\110\uffff\1\1\132\uffff\1\2\1\3\1\4\1\5\1\6\1\7\1\10\1\11\1\12\1\13\1\14\1\15\1\16\1\17\1\20\1\21\1\22\1\23\1\24\1\25\1\26\1\27",
            "",
            "\1\32\1\31",
            "\1\32\1\31",
            "\1\32\1\31",
            "\1\32\1\31",
            "\1\32\1\31",
            "\1\32\1\31",
            "\1\32\1\31",
            "\1\32\1\31",
            "\1\32\1\31",
            "\1\32\1\31",
            "\1\32\1\31",
            "\1\32\1\31",
            "\1\32\1\31",
            "\1\32\1\31",
            "\1\32\1\31",
            "\1\32\1\31",
            "\1\32\1\31",
            "\1\32\1\31",
            "\1\32\1\31",
            "\1\32\1\31",
            "\1\32\1\31",
            "\1\32\1\31",
            "\1\33\13\uffff\1\32\1\31",
            "",
            "",
            "\1\34",
            "\1\33\13\uffff\1\32\1\31"
    };

    static final short[] dfa_44 = DFA.unpackEncodedString(dfa_44s);
    static final char[] dfa_45 = DFA.unpackEncodedStringToUnsignedChars(dfa_45s);
    static final char[] dfa_46 = DFA.unpackEncodedStringToUnsignedChars(dfa_46s);
    static final short[] dfa_47 = DFA.unpackEncodedString(dfa_47s);
    static final short[] dfa_48 = DFA.unpackEncodedString(dfa_48s);
    static final short[][] dfa_49 = unpackEncodedStringArray(dfa_49s);

    class DFA196 extends DFA {

        public DFA196(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 196;
            this.eot = dfa_44;
            this.eof = dfa_44;
            this.min = dfa_45;
            this.max = dfa_46;
            this.accept = dfa_47;
            this.special = dfa_48;
            this.transition = dfa_49;
        }
        public String getDescription() {
            return "7483:4: ( (otherlv_10= '@' ( (otherlv_11= RULE_ID ) ) ) | ( (lv_type_12_0= ruleType ) ) | ( ( (lv_type_13_0= ruleType ) ) otherlv_14= '<' otherlv_15= '@' ( (otherlv_16= RULE_ID ) ) otherlv_17= '>' ) )";
        }
    }
    static final String dfa_50s = "\1\uffff\1\1\27\uffff\1\3\1\2\2\uffff";
    static final String[] dfa_51s = {
            "\1\30\110\uffff\1\1\132\uffff\1\2\1\3\1\4\1\5\1\6\1\7\1\10\1\11\1\12\1\13\1\14\1\15\1\16\1\17\1\20\1\21\1\22\1\23\1\24\1\25\1\26\1\27",
            "",
            "\1\31\1\32",
            "\1\31\1\32",
            "\1\31\1\32",
            "\1\31\1\32",
            "\1\31\1\32",
            "\1\31\1\32",
            "\1\31\1\32",
            "\1\31\1\32",
            "\1\31\1\32",
            "\1\31\1\32",
            "\1\31\1\32",
            "\1\31\1\32",
            "\1\31\1\32",
            "\1\31\1\32",
            "\1\31\1\32",
            "\1\31\1\32",
            "\1\31\1\32",
            "\1\31\1\32",
            "\1\31\1\32",
            "\1\31\1\32",
            "\1\31\1\32",
            "\1\31\1\32",
            "\1\33\13\uffff\1\31\1\32",
            "",
            "",
            "\1\34",
            "\1\33\13\uffff\1\31\1\32"
    };
    static final short[] dfa_50 = DFA.unpackEncodedString(dfa_50s);
    static final short[][] dfa_51 = unpackEncodedStringArray(dfa_51s);

    class DFA198 extends DFA {

        public DFA198(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 198;
            this.eot = dfa_44;
            this.eof = dfa_44;
            this.min = dfa_45;
            this.max = dfa_46;
            this.accept = dfa_50;
            this.special = dfa_48;
            this.transition = dfa_51;
        }
        public String getDescription() {
            return "7645:4: ( (otherlv_25= '@' ( (otherlv_26= RULE_ID ) ) ) | ( (lv_type_27_0= ruleType ) ) | ( ( (lv_type_28_0= ruleType ) ) otherlv_29= '<' otherlv_30= '@' ( (otherlv_31= RULE_ID ) ) otherlv_32= '>' ) )";
        }
    }
    static final String dfa_52s = "\1\4\1\151\2\uffff\1\5\1\152\3\uffff\1\151";
    static final String dfa_53s = "\2\u00a8\2\uffff\2\u0081\3\uffff\1\u0081";
    static final String dfa_54s = "\2\uffff\1\1\1\2\2\uffff\1\3\1\4\1\5\1\uffff";
    static final String[] dfa_55s = {
            "\1\4\1\1\143\uffff\1\5\1\6\16\uffff\1\6\2\uffff\2\6\1\10\2\uffff\1\7\1\2\45\uffff\1\3",
            "\1\5\1\6\16\uffff\1\6\2\uffff\2\6\1\10\2\uffff\1\7\1\2\45\uffff\1\3",
            "",
            "",
            "\1\11\143\uffff\1\5\1\6\16\uffff\1\6\2\uffff\2\6\3\uffff\1\7",
            "\1\6\16\uffff\1\6\2\uffff\2\6\3\uffff\1\7",
            "",
            "",
            "",
            "\1\5\1\6\16\uffff\1\6\2\uffff\2\6\3\uffff\1\7"
    };
    static final char[] dfa_52 = DFA.unpackEncodedStringToUnsignedChars(dfa_52s);
    static final char[] dfa_53 = DFA.unpackEncodedStringToUnsignedChars(dfa_53s);
    static final short[] dfa_54 = DFA.unpackEncodedString(dfa_54s);
    static final short[][] dfa_55 = unpackEncodedStringArray(dfa_55s);

    class DFA200 extends DFA {

        public DFA200(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 200;
            this.eot = dfa_25;
            this.eof = dfa_25;
            this.min = dfa_52;
            this.max = dfa_53;
            this.accept = dfa_54;
            this.special = dfa_29;
            this.transition = dfa_55;
        }
        public String getDescription() {
            return "7756:2: (this_BasicType_0= ruleBasicType | this_Enum_1= ruleEnum | this_DomainObject_2= ruleDomainObject | this_DataTransferObject_3= ruleDataTransferObject | this_Trait_4= ruleTrait )";
        }
    }
    static final String dfa_56s = "\22\uffff";
    static final String dfa_57s = "\1\5\1\uffff\1\135\17\uffff";
    static final String dfa_58s = "\1\u00ea\1\uffff\1\157\17\uffff";
    static final String dfa_59s = "\1\uffff\1\20\1\uffff\1\1\1\2\1\3\1\4\1\5\1\6\1\7\1\10\1\11\1\12\1\13\1\14\1\15\1\16\1\17";
    static final String dfa_60s = "\1\0\1\uffff\1\1\17\uffff}>";
    static final String[] dfa_61s = {
            "\2\1\1\uffff\1\1\2\uffff\1\2\1\1\66\uffff\1\10\3\uffff\2\6\2\uffff\1\7\21\uffff\1\5\17\uffff\1\1\1\3\1\4\1\11\1\12\1\13\1\14\1\15\1\16\1\17\1\20\1\21\6\uffff\2\1\45\uffff\1\1\3\uffff\26\1\32\uffff\1\1\11\uffff\7\1",
            "",
            "\1\5\20\uffff\1\3\1\4",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static final short[] dfa_56 = DFA.unpackEncodedString(dfa_56s);
    static final char[] dfa_57 = DFA.unpackEncodedStringToUnsignedChars(dfa_57s);
    static final char[] dfa_58 = DFA.unpackEncodedStringToUnsignedChars(dfa_58s);
    static final short[] dfa_59 = DFA.unpackEncodedString(dfa_59s);
    static final short[] dfa_60 = DFA.unpackEncodedString(dfa_60s);
    static final short[][] dfa_61 = unpackEncodedStringArray(dfa_61s);

    class DFA215 extends DFA {

        public DFA215(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 215;
            this.eot = dfa_56;
            this.eof = dfa_56;
            this.min = dfa_57;
            this.max = dfa_58;
            this.accept = dfa_59;
            this.special = dfa_60;
            this.transition = dfa_61;
        }
        public String getDescription() {
            return "()* loopback of 8049:7: ( ({...}? => ( ({...}? => ( ( ( (lv_notOptimisticLocking_17_0= RULE_NOT ) ) otherlv_18= 'optimisticLocking' ) | otherlv_19= 'optimisticLocking' ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notAuditable_20_0= RULE_NOT ) ) otherlv_21= 'auditable' ) | otherlv_22= 'auditable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_cache_23_0= 'cache' ) ) | (this_NOT_24= RULE_NOT otherlv_25= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_26_0= 'gap' ) ) | ( (lv_noGapClass_27_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_28_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'hint' otherlv_30= '=' ( (lv_hint_31_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'databaseTable' otherlv_33= '=' ( (lv_databaseTable_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'discriminatorValue' otherlv_36= '=' ( (lv_discriminatorValue_37_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'discriminatorColumn' otherlv_39= '=' ( (lv_discriminatorColumn_40_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'discriminatorType' otherlv_42= '=' ( (lv_discriminatorType_43_0= ruleDiscriminatorType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_44= 'discriminatorLength' otherlv_45= '=' ( (lv_discriminatorLength_46_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_47= 'inheritanceType' otherlv_48= '=' ( (lv_inheritanceType_49_0= ruleInheritanceType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_50= 'validate' otherlv_51= '=' ( (lv_validate_52_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_aggregateRoot_53_0= 'aggregateRoot' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_54= 'belongsTo' ( (otherlv_55= '@' )? ( (otherlv_56= RULE_ID ) ) ) ) ) ) ) )*";
        }
        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
            TokenStream input = (TokenStream)_input;
        	int _s = s;
            switch ( s ) {
                    case 0 : 
                        int LA215_0 = input.LA(1);

                         
                        int index215_0 = input.index();
                        input.rewind();
                        s = -1;
                        if ( ((LA215_0>=RULE_STRING && LA215_0<=RULE_ID)||LA215_0==RULE_CLOSE||LA215_0==RULE_REF||LA215_0==109||(LA215_0>=127 && LA215_0<=128)||LA215_0==166||(LA215_0>=170 && LA215_0<=191)||LA215_0==218||(LA215_0>=228 && LA215_0<=234)) ) {s = 1;}

                        else if ( LA215_0 == RULE_NOT && ( getUnorderedGroupHelper().canSelect(grammarAccess.getEntityAccess().getUnorderedGroup_7_2(), 2) || getUnorderedGroupHelper().canSelect(grammarAccess.getEntityAccess().getUnorderedGroup_7_2(), 1) || getUnorderedGroupHelper().canSelect(grammarAccess.getEntityAccess().getUnorderedGroup_7_2(), 0) ) ) {s = 2;}

                        else if ( LA215_0 == 110 && getUnorderedGroupHelper().canSelect(grammarAccess.getEntityAccess().getUnorderedGroup_7_2(), 0) ) {s = 3;}

                        else if ( LA215_0 == 111 && getUnorderedGroupHelper().canSelect(grammarAccess.getEntityAccess().getUnorderedGroup_7_2(), 1) ) {s = 4;}

                        else if ( LA215_0 == 93 && getUnorderedGroupHelper().canSelect(grammarAccess.getEntityAccess().getUnorderedGroup_7_2(), 2) ) {s = 5;}

                        else if ( LA215_0 >= 71 && LA215_0 <= 72 && getUnorderedGroupHelper().canSelect(grammarAccess.getEntityAccess().getUnorderedGroup_7_2(), 3) ) {s = 6;}

                        else if ( LA215_0 == 75 && getUnorderedGroupHelper().canSelect(grammarAccess.getEntityAccess().getUnorderedGroup_7_2(), 4) ) {s = 7;}

                        else if ( LA215_0 == 67 && getUnorderedGroupHelper().canSelect(grammarAccess.getEntityAccess().getUnorderedGroup_7_2(), 5) ) {s = 8;}

                        else if ( LA215_0 == 112 && getUnorderedGroupHelper().canSelect(grammarAccess.getEntityAccess().getUnorderedGroup_7_2(), 6) ) {s = 9;}

                        else if ( LA215_0 == 113 && getUnorderedGroupHelper().canSelect(grammarAccess.getEntityAccess().getUnorderedGroup_7_2(), 7) ) {s = 10;}

                        else if ( LA215_0 == 114 && getUnorderedGroupHelper().canSelect(grammarAccess.getEntityAccess().getUnorderedGroup_7_2(), 8) ) {s = 11;}

                        else if ( LA215_0 == 115 && getUnorderedGroupHelper().canSelect(grammarAccess.getEntityAccess().getUnorderedGroup_7_2(), 9) ) {s = 12;}

                        else if ( LA215_0 == 116 && getUnorderedGroupHelper().canSelect(grammarAccess.getEntityAccess().getUnorderedGroup_7_2(), 10) ) {s = 13;}

                        else if ( LA215_0 == 117 && getUnorderedGroupHelper().canSelect(grammarAccess.getEntityAccess().getUnorderedGroup_7_2(), 11) ) {s = 14;}

                        else if ( LA215_0 == 118 && getUnorderedGroupHelper().canSelect(grammarAccess.getEntityAccess().getUnorderedGroup_7_2(), 12) ) {s = 15;}

                        else if ( LA215_0 == 119 && getUnorderedGroupHelper().canSelect(grammarAccess.getEntityAccess().getUnorderedGroup_7_2(), 13) ) {s = 16;}

                        else if ( LA215_0 == 120 && getUnorderedGroupHelper().canSelect(grammarAccess.getEntityAccess().getUnorderedGroup_7_2(), 14) ) {s = 17;}

                         
                        input.seek(index215_0);
                        if ( s>=0 ) return s;
                        break;
                    case 1 : 
                        int LA215_2 = input.LA(1);

                         
                        int index215_2 = input.index();
                        input.rewind();
                        s = -1;
                        if ( LA215_2 == 93 && getUnorderedGroupHelper().canSelect(grammarAccess.getEntityAccess().getUnorderedGroup_7_2(), 2) ) {s = 5;}

                        else if ( LA215_2 == 110 && getUnorderedGroupHelper().canSelect(grammarAccess.getEntityAccess().getUnorderedGroup_7_2(), 0) ) {s = 3;}

                        else if ( LA215_2 == 111 && getUnorderedGroupHelper().canSelect(grammarAccess.getEntityAccess().getUnorderedGroup_7_2(), 1) ) {s = 4;}

                         
                        input.seek(index215_2);
                        if ( s>=0 ) return s;
                        break;
            }
            NoViableAltException nvae =
                new NoViableAltException(getDescription(), 215, _s, input);
            error(nvae);
            throw nvae;
        }
    }
    static final String dfa_62s = "\23\uffff";
    static final String dfa_63s = "\1\5\1\uffff\1\135\20\uffff";
    static final String dfa_64s = "\1\u00ea\1\uffff\1\173\20\uffff";
    static final String dfa_65s = "\1\uffff\1\21\1\uffff\1\1\1\2\1\3\1\4\1\5\1\6\1\7\1\10\1\11\1\12\1\13\1\14\1\15\1\16\1\17\1\20";
    static final String dfa_66s = "\1\0\1\uffff\1\1\20\uffff}>";
    static final String[] dfa_67s = {
            "\2\1\1\uffff\1\1\2\uffff\1\2\1\1\66\uffff\1\10\3\uffff\2\6\2\uffff\1\7\21\uffff\1\5\17\uffff\1\1\1\3\1\uffff\1\11\1\12\1\13\1\14\1\15\1\16\1\17\1\21\1\22\1\uffff\1\4\1\20\3\uffff\2\1\45\uffff\1\1\3\uffff\26\1\32\uffff\1\1\11\uffff\7\1",
            "",
            "\1\5\20\uffff\1\3\13\uffff\1\4\1\20",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static final short[] dfa_62 = DFA.unpackEncodedString(dfa_62s);
    static final char[] dfa_63 = DFA.unpackEncodedStringToUnsignedChars(dfa_63s);
    static final char[] dfa_64 = DFA.unpackEncodedStringToUnsignedChars(dfa_64s);
    static final short[] dfa_65 = DFA.unpackEncodedString(dfa_65s);
    static final short[] dfa_66 = DFA.unpackEncodedString(dfa_66s);
    static final short[][] dfa_67 = unpackEncodedStringArray(dfa_67s);

    class DFA233 extends DFA {

        public DFA233(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 233;
            this.eot = dfa_62;
            this.eof = dfa_62;
            this.min = dfa_63;
            this.max = dfa_64;
            this.accept = dfa_65;
            this.special = dfa_66;
            this.transition = dfa_67;
        }
        public String getDescription() {
            return "()* loopback of 8881:7: ( ({...}? => ( ({...}? => ( ( ( (lv_notOptimisticLocking_17_0= RULE_NOT ) ) otherlv_18= 'optimisticLocking' ) | otherlv_19= 'optimisticLocking' ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notImmutable_20_0= RULE_NOT ) ) otherlv_21= 'immutable' ) | otherlv_22= 'immutable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_cache_23_0= 'cache' ) ) | (this_NOT_24= RULE_NOT otherlv_25= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_26_0= 'gap' ) ) | ( (lv_noGapClass_27_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_28_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'hint' otherlv_30= '=' ( (lv_hint_31_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'databaseTable' otherlv_33= '=' ( (lv_databaseTable_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'discriminatorValue' otherlv_36= '=' ( (lv_discriminatorValue_37_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'discriminatorColumn' otherlv_39= '=' ( (lv_discriminatorColumn_40_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'discriminatorType' otherlv_42= '=' ( (lv_discriminatorType_43_0= ruleDiscriminatorType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_44= 'discriminatorLength' otherlv_45= '=' ( (lv_discriminatorLength_46_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_47= 'inheritanceType' otherlv_48= '=' ( (lv_inheritanceType_49_0= ruleInheritanceType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_50= 'validate' otherlv_51= '=' ( (lv_validate_52_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_persistent_53_0= 'persistent' ) ) | ( ( (lv_notPersistent_54_0= RULE_NOT ) ) otherlv_55= 'persistent' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_aggregateRoot_56_0= 'aggregateRoot' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_57= 'belongsTo' ( (otherlv_58= '@' )? ( (otherlv_59= RULE_ID ) ) ) ) ) ) ) )*";
        }
        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
            TokenStream input = (TokenStream)_input;
        	int _s = s;
            switch ( s ) {
                    case 0 : 
                        int LA233_0 = input.LA(1);

                         
                        int index233_0 = input.index();
                        input.rewind();
                        s = -1;
                        if ( ((LA233_0>=RULE_STRING && LA233_0<=RULE_ID)||LA233_0==RULE_CLOSE||LA233_0==RULE_REF||LA233_0==109||(LA233_0>=127 && LA233_0<=128)||LA233_0==166||(LA233_0>=170 && LA233_0<=191)||LA233_0==218||(LA233_0>=228 && LA233_0<=234)) ) {s = 1;}

                        else if ( LA233_0 == RULE_NOT && ( getUnorderedGroupHelper().canSelect(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2(), 0) || getUnorderedGroupHelper().canSelect(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2(), 13) || getUnorderedGroupHelper().canSelect(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2(), 2) || getUnorderedGroupHelper().canSelect(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2(), 1) ) ) {s = 2;}

                        else if ( LA233_0 == 110 && getUnorderedGroupHelper().canSelect(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2(), 0) ) {s = 3;}

                        else if ( LA233_0 == 122 && getUnorderedGroupHelper().canSelect(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2(), 1) ) {s = 4;}

                        else if ( LA233_0 == 93 && getUnorderedGroupHelper().canSelect(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2(), 2) ) {s = 5;}

                        else if ( LA233_0 >= 71 && LA233_0 <= 72 && getUnorderedGroupHelper().canSelect(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2(), 3) ) {s = 6;}

                        else if ( LA233_0 == 75 && getUnorderedGroupHelper().canSelect(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2(), 4) ) {s = 7;}

                        else if ( LA233_0 == 67 && getUnorderedGroupHelper().canSelect(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2(), 5) ) {s = 8;}

                        else if ( LA233_0 == 112 && getUnorderedGroupHelper().canSelect(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2(), 6) ) {s = 9;}

                        else if ( LA233_0 == 113 && getUnorderedGroupHelper().canSelect(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2(), 7) ) {s = 10;}

                        else if ( LA233_0 == 114 && getUnorderedGroupHelper().canSelect(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2(), 8) ) {s = 11;}

                        else if ( LA233_0 == 115 && getUnorderedGroupHelper().canSelect(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2(), 9) ) {s = 12;}

                        else if ( LA233_0 == 116 && getUnorderedGroupHelper().canSelect(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2(), 10) ) {s = 13;}

                        else if ( LA233_0 == 117 && getUnorderedGroupHelper().canSelect(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2(), 11) ) {s = 14;}

                        else if ( LA233_0 == 118 && getUnorderedGroupHelper().canSelect(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2(), 12) ) {s = 15;}

                        else if ( LA233_0 == 123 && getUnorderedGroupHelper().canSelect(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2(), 13) ) {s = 16;}

                        else if ( LA233_0 == 119 && getUnorderedGroupHelper().canSelect(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2(), 14) ) {s = 17;}

                        else if ( LA233_0 == 120 && getUnorderedGroupHelper().canSelect(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2(), 15) ) {s = 18;}

                         
                        input.seek(index233_0);
                        if ( s>=0 ) return s;
                        break;
                    case 1 : 
                        int LA233_2 = input.LA(1);

                         
                        int index233_2 = input.index();
                        input.rewind();
                        s = -1;
                        if ( LA233_2 == 93 && getUnorderedGroupHelper().canSelect(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2(), 2) ) {s = 5;}

                        else if ( LA233_2 == 110 && getUnorderedGroupHelper().canSelect(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2(), 0) ) {s = 3;}

                        else if ( LA233_2 == 122 && getUnorderedGroupHelper().canSelect(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2(), 1) ) {s = 4;}

                        else if ( LA233_2 == 123 && getUnorderedGroupHelper().canSelect(grammarAccess.getValueObjectAccess().getUnorderedGroup_7_2(), 13) ) {s = 16;}

                         
                        input.seek(index233_2);
                        if ( s>=0 ) return s;
                        break;
            }
            NoViableAltException nvae =
                new NoViableAltException(getDescription(), 233, _s, input);
            error(nvae);
            throw nvae;
        }
    }
    static final String dfa_68s = "\1\5\17\uffff";
    static final String dfa_69s = "\1\u00ea\17\uffff";
    static final String dfa_70s = "\1\uffff\1\17\1\1\1\2\1\3\1\4\1\5\1\6\1\7\1\10\1\11\1\12\1\13\1\14\1\15\1\16";
    static final String dfa_71s = "\1\0\17\uffff}>";
    static final String[] dfa_72s = {
            "\2\1\1\uffff\1\1\2\uffff\1\2\1\1\66\uffff\1\5\3\uffff\2\3\2\uffff\1\4\21\uffff\1\2\17\uffff\1\1\2\uffff\1\6\1\7\1\10\1\11\1\12\1\13\1\14\1\16\1\17\2\uffff\1\15\3\uffff\2\1\45\uffff\1\1\3\uffff\26\1\32\uffff\1\1\11\uffff\7\1",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };
    static final char[] dfa_68 = DFA.unpackEncodedStringToUnsignedChars(dfa_68s);
    static final char[] dfa_69 = DFA.unpackEncodedStringToUnsignedChars(dfa_69s);
    static final short[] dfa_70 = DFA.unpackEncodedString(dfa_70s);
    static final short[] dfa_71 = DFA.unpackEncodedString(dfa_71s);
    static final short[][] dfa_72 = unpackEncodedStringArray(dfa_72s);

    class DFA248 extends DFA {

        public DFA248(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 248;
            this.eot = dfa_1;
            this.eof = dfa_1;
            this.min = dfa_68;
            this.max = dfa_69;
            this.accept = dfa_70;
            this.special = dfa_71;
            this.transition = dfa_72;
        }
        public String getDescription() {
            return "()* loopback of 9763:7: ( ({...}? => ( ({...}? => ( ( (lv_cache_17_0= 'cache' ) ) | (this_NOT_18= RULE_NOT otherlv_19= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_20_0= 'gap' ) ) | ( (lv_noGapClass_21_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_22_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_23= 'hint' otherlv_24= '=' ( (lv_hint_25_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_26= 'databaseTable' otherlv_27= '=' ( (lv_databaseTable_28_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'discriminatorValue' otherlv_30= '=' ( (lv_discriminatorValue_31_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'discriminatorColumn' otherlv_33= '=' ( (lv_discriminatorColumn_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'discriminatorType' otherlv_36= '=' ( (lv_discriminatorType_37_0= ruleDiscriminatorType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'discriminatorLength' otherlv_39= '=' ( (lv_discriminatorLength_40_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'inheritanceType' otherlv_42= '=' ( (lv_inheritanceType_43_0= ruleInheritanceType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_44= 'validate' otherlv_45= '=' ( (lv_validate_46_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_persistent_47_0= 'persistent' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_aggregateRoot_48_0= 'aggregateRoot' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_49= 'belongsTo' ( (otherlv_50= '@' )? ( (otherlv_51= RULE_ID ) ) ) ) ) ) ) )*";
        }
        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
            TokenStream input = (TokenStream)_input;
        	int _s = s;
            switch ( s ) {
                    case 0 : 
                        int LA248_0 = input.LA(1);

                         
                        int index248_0 = input.index();
                        input.rewind();
                        s = -1;
                        if ( ((LA248_0>=RULE_STRING && LA248_0<=RULE_ID)||LA248_0==RULE_CLOSE||LA248_0==RULE_REF||LA248_0==109||(LA248_0>=127 && LA248_0<=128)||LA248_0==166||(LA248_0>=170 && LA248_0<=191)||LA248_0==218||(LA248_0>=228 && LA248_0<=234)) ) {s = 1;}

                        else if ( ( LA248_0 == RULE_NOT || LA248_0 == 93 ) && getUnorderedGroupHelper().canSelect(grammarAccess.getDomainEventAccess().getUnorderedGroup_7_2(), 0) ) {s = 2;}

                        else if ( LA248_0 >= 71 && LA248_0 <= 72 && getUnorderedGroupHelper().canSelect(grammarAccess.getDomainEventAccess().getUnorderedGroup_7_2(), 1) ) {s = 3;}

                        else if ( LA248_0 == 75 && getUnorderedGroupHelper().canSelect(grammarAccess.getDomainEventAccess().getUnorderedGroup_7_2(), 2) ) {s = 4;}

                        else if ( LA248_0 == 67 && getUnorderedGroupHelper().canSelect(grammarAccess.getDomainEventAccess().getUnorderedGroup_7_2(), 3) ) {s = 5;}

                        else if ( LA248_0 == 112 && getUnorderedGroupHelper().canSelect(grammarAccess.getDomainEventAccess().getUnorderedGroup_7_2(), 4) ) {s = 6;}

                        else if ( LA248_0 == 113 && getUnorderedGroupHelper().canSelect(grammarAccess.getDomainEventAccess().getUnorderedGroup_7_2(), 5) ) {s = 7;}

                        else if ( LA248_0 == 114 && getUnorderedGroupHelper().canSelect(grammarAccess.getDomainEventAccess().getUnorderedGroup_7_2(), 6) ) {s = 8;}

                        else if ( LA248_0 == 115 && getUnorderedGroupHelper().canSelect(grammarAccess.getDomainEventAccess().getUnorderedGroup_7_2(), 7) ) {s = 9;}

                        else if ( LA248_0 == 116 && getUnorderedGroupHelper().canSelect(grammarAccess.getDomainEventAccess().getUnorderedGroup_7_2(), 8) ) {s = 10;}

                        else if ( LA248_0 == 117 && getUnorderedGroupHelper().canSelect(grammarAccess.getDomainEventAccess().getUnorderedGroup_7_2(), 9) ) {s = 11;}

                        else if ( LA248_0 == 118 && getUnorderedGroupHelper().canSelect(grammarAccess.getDomainEventAccess().getUnorderedGroup_7_2(), 10) ) {s = 12;}

                        else if ( LA248_0 == 123 && getUnorderedGroupHelper().canSelect(grammarAccess.getDomainEventAccess().getUnorderedGroup_7_2(), 11) ) {s = 13;}

                        else if ( LA248_0 == 119 && getUnorderedGroupHelper().canSelect(grammarAccess.getDomainEventAccess().getUnorderedGroup_7_2(), 12) ) {s = 14;}

                        else if ( LA248_0 == 120 && getUnorderedGroupHelper().canSelect(grammarAccess.getDomainEventAccess().getUnorderedGroup_7_2(), 13) ) {s = 15;}

                         
                        input.seek(index248_0);
                        if ( s>=0 ) return s;
                        break;
            }
            NoViableAltException nvae =
                new NoViableAltException(getDescription(), 248, _s, input);
            error(nvae);
            throw nvae;
        }
    }

    class DFA263 extends DFA {

        public DFA263(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 263;
            this.eot = dfa_1;
            this.eof = dfa_1;
            this.min = dfa_68;
            this.max = dfa_69;
            this.accept = dfa_70;
            this.special = dfa_71;
            this.transition = dfa_72;
        }
        public String getDescription() {
            return "()* loopback of 10538:7: ( ({...}? => ( ({...}? => ( ( (lv_cache_17_0= 'cache' ) ) | (this_NOT_18= RULE_NOT otherlv_19= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_gapClass_20_0= 'gap' ) ) | ( (lv_noGapClass_21_0= 'nogap' ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_scaffold_22_0= 'scaffold' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_23= 'hint' otherlv_24= '=' ( (lv_hint_25_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_26= 'databaseTable' otherlv_27= '=' ( (lv_databaseTable_28_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'discriminatorValue' otherlv_30= '=' ( (lv_discriminatorValue_31_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'discriminatorColumn' otherlv_33= '=' ( (lv_discriminatorColumn_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'discriminatorType' otherlv_36= '=' ( (lv_discriminatorType_37_0= ruleDiscriminatorType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'discriminatorLength' otherlv_39= '=' ( (lv_discriminatorLength_40_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'inheritanceType' otherlv_42= '=' ( (lv_inheritanceType_43_0= ruleInheritanceType ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_44= 'validate' otherlv_45= '=' ( (lv_validate_46_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_persistent_47_0= 'persistent' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_aggregateRoot_48_0= 'aggregateRoot' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_49= 'belongsTo' ( (otherlv_50= '@' )? ( (otherlv_51= RULE_ID ) ) ) ) ) ) ) )*";
        }
        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
            TokenStream input = (TokenStream)_input;
        	int _s = s;
            switch ( s ) {
                    case 0 : 
                        int LA263_0 = input.LA(1);

                         
                        int index263_0 = input.index();
                        input.rewind();
                        s = -1;
                        if ( ((LA263_0>=RULE_STRING && LA263_0<=RULE_ID)||LA263_0==RULE_CLOSE||LA263_0==RULE_REF||LA263_0==109||(LA263_0>=127 && LA263_0<=128)||LA263_0==166||(LA263_0>=170 && LA263_0<=191)||LA263_0==218||(LA263_0>=228 && LA263_0<=234)) ) {s = 1;}

                        else if ( ( LA263_0 == RULE_NOT || LA263_0 == 93 ) && getUnorderedGroupHelper().canSelect(grammarAccess.getCommandEventAccess().getUnorderedGroup_7_2(), 0) ) {s = 2;}

                        else if ( LA263_0 >= 71 && LA263_0 <= 72 && getUnorderedGroupHelper().canSelect(grammarAccess.getCommandEventAccess().getUnorderedGroup_7_2(), 1) ) {s = 3;}

                        else if ( LA263_0 == 75 && getUnorderedGroupHelper().canSelect(grammarAccess.getCommandEventAccess().getUnorderedGroup_7_2(), 2) ) {s = 4;}

                        else if ( LA263_0 == 67 && getUnorderedGroupHelper().canSelect(grammarAccess.getCommandEventAccess().getUnorderedGroup_7_2(), 3) ) {s = 5;}

                        else if ( LA263_0 == 112 && getUnorderedGroupHelper().canSelect(grammarAccess.getCommandEventAccess().getUnorderedGroup_7_2(), 4) ) {s = 6;}

                        else if ( LA263_0 == 113 && getUnorderedGroupHelper().canSelect(grammarAccess.getCommandEventAccess().getUnorderedGroup_7_2(), 5) ) {s = 7;}

                        else if ( LA263_0 == 114 && getUnorderedGroupHelper().canSelect(grammarAccess.getCommandEventAccess().getUnorderedGroup_7_2(), 6) ) {s = 8;}

                        else if ( LA263_0 == 115 && getUnorderedGroupHelper().canSelect(grammarAccess.getCommandEventAccess().getUnorderedGroup_7_2(), 7) ) {s = 9;}

                        else if ( LA263_0 == 116 && getUnorderedGroupHelper().canSelect(grammarAccess.getCommandEventAccess().getUnorderedGroup_7_2(), 8) ) {s = 10;}

                        else if ( LA263_0 == 117 && getUnorderedGroupHelper().canSelect(grammarAccess.getCommandEventAccess().getUnorderedGroup_7_2(), 9) ) {s = 11;}

                        else if ( LA263_0 == 118 && getUnorderedGroupHelper().canSelect(grammarAccess.getCommandEventAccess().getUnorderedGroup_7_2(), 10) ) {s = 12;}

                        else if ( LA263_0 == 123 && getUnorderedGroupHelper().canSelect(grammarAccess.getCommandEventAccess().getUnorderedGroup_7_2(), 11) ) {s = 13;}

                        else if ( LA263_0 == 119 && getUnorderedGroupHelper().canSelect(grammarAccess.getCommandEventAccess().getUnorderedGroup_7_2(), 12) ) {s = 14;}

                        else if ( LA263_0 == 120 && getUnorderedGroupHelper().canSelect(grammarAccess.getCommandEventAccess().getUnorderedGroup_7_2(), 13) ) {s = 15;}

                         
                        input.seek(index263_0);
                        if ( s>=0 ) return s;
                        break;
            }
            NoViableAltException nvae =
                new NoViableAltException(getDescription(), 263, _s, input);
            error(nvae);
            throw nvae;
        }
    }
    static final String dfa_73s = "\40\uffff";
    static final String dfa_74s = "\1\1\37\uffff";
    static final String dfa_75s = "\1\5\2\uffff\1\u0084\34\uffff";
    static final String dfa_76s = "\1\u00ea\2\uffff\1\u0086\34\uffff";
    static final String dfa_77s = "\1\uffff\1\36\1\1\1\uffff\1\2\1\3\1\4\1\5\1\6\1\7\1\10\1\11\1\12\1\13\1\14\1\15\1\16\1\17\1\20\1\21\1\22\1\23\1\24\1\25\1\26\1\27\1\30\1\31\1\32\1\33\1\34\1\35";
    static final String dfa_78s = "\1\0\2\uffff\1\1\34\uffff}>";
    static final String[] dfa_79s = {
            "\2\1\1\uffff\1\1\2\uffff\1\3\1\1\66\uffff\1\12\26\uffff\1\1\22\uffff\1\1\10\uffff\1\34\10\uffff\2\1\2\uffff\1\2\1\4\1\5\1\6\1\7\1\10\1\11\1\13\1\14\1\15\1\16\1\17\1\20\1\21\1\22\1\23\1\24\1\25\1\26\1\27\1\30\1\31\1\32\1\33\1\35\1\36\1\37\10\uffff\1\1\3\uffff\26\1\32\uffff\1\1\11\uffff\7\1",
            "",
            "",
            "\1\4\1\5\1\6",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static final short[] dfa_73 = DFA.unpackEncodedString(dfa_73s);
    static final short[] dfa_74 = DFA.unpackEncodedString(dfa_74s);
    static final char[] dfa_75 = DFA.unpackEncodedStringToUnsignedChars(dfa_75s);
    static final char[] dfa_76 = DFA.unpackEncodedStringToUnsignedChars(dfa_76s);
    static final short[] dfa_77 = DFA.unpackEncodedString(dfa_77s);
    static final short[] dfa_78 = DFA.unpackEncodedString(dfa_78s);
    static final short[][] dfa_79 = unpackEncodedStringArray(dfa_79s);

    class DFA315 extends DFA {

        public DFA315(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 315;
            this.eot = dfa_73;
            this.eof = dfa_74;
            this.min = dfa_75;
            this.max = dfa_76;
            this.accept = dfa_77;
            this.special = dfa_78;
            this.transition = dfa_79;
        }
        public String getDescription() {
            return "()* loopback of 12376:6: ( ({...}? => ( ({...}? => ( (lv_key_9_0= 'key' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notChangeable_10_0= RULE_NOT ) ) otherlv_11= 'changeable' ) | otherlv_12= 'changeable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_required_13_0= 'required' ) ) | (this_NOT_14= RULE_NOT otherlv_15= 'required' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_nullable_16_0= 'nullable' ) ) | (this_NOT_17= RULE_NOT otherlv_18= 'nullable' ) ) (otherlv_19= '=' ( (lv_nullableMessage_20_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( (lv_index_21_0= 'index' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_assertFalse_22_0= 'assertFalse' ) ) (otherlv_23= '=' ( (lv_assertFalseMessage_24_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_assertTrue_25_0= 'assertTrue' ) ) (otherlv_26= '=' ( (lv_assertTrueMessage_27_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_28= 'hint' otherlv_29= '=' ( (lv_hint_30_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_creditCardNumber_31_0= 'creditCardNumber' ) ) (otherlv_32= '=' ( (lv_creditCardNumberMessage_33_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_34= 'digits' otherlv_35= '=' ( (lv_digits_36_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_email_37_0= 'email' ) ) (otherlv_38= '=' ( (lv_emailMessage_39_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_future_40_0= 'future' ) ) (otherlv_41= '=' ( (lv_futureMessage_42_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_past_43_0= 'past' ) ) (otherlv_44= '=' ( (lv_pastMessage_45_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_46= 'max' otherlv_47= '=' ( (lv_max_48_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_49= 'min' otherlv_50= '=' ( (lv_min_51_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_52= 'decimalMax' otherlv_53= '=' ( (lv_decimalMax_54_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_55= 'decimalMin' otherlv_56= '=' ( (lv_decimalMin_57_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notEmpty_58_0= 'notEmpty' ) ) (otherlv_59= '=' ( (lv_notEmptyMessage_60_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notBlank_61_0= 'notBlank' ) ) (otherlv_62= '=' ( (lv_notBlankMessage_63_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_64= 'pattern' otherlv_65= '=' ( (lv_pattern_66_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_67= 'range' otherlv_68= '=' ( (lv_range_69_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_70= 'size' otherlv_71= '=' ( (lv_size_72_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_73= 'length' otherlv_74= '=' ( (lv_length_75_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_76= 'scriptAssert' otherlv_77= '=' ( (lv_scriptAssert_78_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_79= 'url' otherlv_80= '=' ( (lv_url_81_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_82= 'validate' otherlv_83= '=' ( (lv_validate_84_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_85_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_86= 'databaseColumn' otherlv_87= '=' ( (lv_databaseColumn_88_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_89= 'databaseType' otherlv_90= '=' ( (lv_databaseType_91_0= RULE_STRING ) ) ) ) ) ) )*";
        }
        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
            TokenStream input = (TokenStream)_input;
        	int _s = s;
            switch ( s ) {
                    case 0 : 
                        int LA315_0 = input.LA(1);

                         
                        int index315_0 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (LA315_0==EOF||(LA315_0>=RULE_STRING && LA315_0<=RULE_ID)||LA315_0==RULE_CLOSE||LA315_0==RULE_REF||LA315_0==90||LA315_0==109||(LA315_0>=127 && LA315_0<=128)||LA315_0==166||(LA315_0>=170 && LA315_0<=191)||LA315_0==218||(LA315_0>=228 && LA315_0<=234)) ) {s = 1;}

                        else if ( LA315_0 == 131 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 0) ) {s = 2;}

                        else if ( LA315_0 == RULE_NOT && ( getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 2) || getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 1) || getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 3) ) ) {s = 3;}

                        else if ( LA315_0 == 132 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 1) ) {s = 4;}

                        else if ( LA315_0 == 133 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 2) ) {s = 5;}

                        else if ( LA315_0 == 134 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 3) ) {s = 6;}

                        else if ( LA315_0 == 135 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 4) ) {s = 7;}

                        else if ( LA315_0 == 136 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 5) ) {s = 8;}

                        else if ( LA315_0 == 137 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 6) ) {s = 9;}

                        else if ( LA315_0 == 67 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 7) ) {s = 10;}

                        else if ( LA315_0 == 138 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 8) ) {s = 11;}

                        else if ( LA315_0 == 139 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 9) ) {s = 12;}

                        else if ( LA315_0 == 140 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 10) ) {s = 13;}

                        else if ( LA315_0 == 141 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 11) ) {s = 14;}

                        else if ( LA315_0 == 142 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 12) ) {s = 15;}

                        else if ( LA315_0 == 143 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 13) ) {s = 16;}

                        else if ( LA315_0 == 144 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 14) ) {s = 17;}

                        else if ( LA315_0 == 145 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 15) ) {s = 18;}

                        else if ( LA315_0 == 146 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 16) ) {s = 19;}

                        else if ( LA315_0 == 147 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 17) ) {s = 20;}

                        else if ( LA315_0 == 148 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 18) ) {s = 21;}

                        else if ( LA315_0 == 149 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 19) ) {s = 22;}

                        else if ( LA315_0 == 150 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 20) ) {s = 23;}

                        else if ( LA315_0 == 151 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 21) ) {s = 24;}

                        else if ( LA315_0 == 152 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 22) ) {s = 25;}

                        else if ( LA315_0 == 153 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 23) ) {s = 26;}

                        else if ( LA315_0 == 154 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 24) ) {s = 27;}

                        else if ( LA315_0 == 118 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 25) ) {s = 28;}

                        else if ( LA315_0 == 155 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 26) ) {s = 29;}

                        else if ( LA315_0 == 156 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 27) ) {s = 30;}

                        else if ( LA315_0 == 157 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 28) ) {s = 31;}

                         
                        input.seek(index315_0);
                        if ( s>=0 ) return s;
                        break;
                    case 1 : 
                        int LA315_3 = input.LA(1);

                         
                        int index315_3 = input.index();
                        input.rewind();
                        s = -1;
                        if ( LA315_3 == 133 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 2) ) {s = 5;}

                        else if ( LA315_3 == 134 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 3) ) {s = 6;}

                        else if ( LA315_3 == 132 && getUnorderedGroupHelper().canSelect(grammarAccess.getAttributeAccess().getUnorderedGroup_4(), 1) ) {s = 4;}

                         
                        input.seek(index315_3);
                        if ( s>=0 ) return s;
                        break;
            }
            NoViableAltException nvae =
                new NoViableAltException(getDescription(), 315, _s, input);
            error(nvae);
            throw nvae;
        }
    }
    static final String dfa_80s = "\27\uffff";
    static final String dfa_81s = "\1\1\26\uffff";
    static final String dfa_82s = "\1\5\2\uffff\1\135\23\uffff";
    static final String dfa_83s = "\1\u00ea\2\uffff\1\u00a0\23\uffff";
    static final String dfa_84s = "\1\uffff\1\25\1\1\1\uffff\1\2\1\3\1\4\1\5\1\6\1\7\1\10\1\11\1\12\1\13\1\14\1\15\1\16\1\17\1\20\1\21\1\22\1\23\1\24";
    static final String dfa_85s = "\1\1\2\uffff\1\0\23\uffff}>";
    static final String[] dfa_86s = {
            "\2\1\1\uffff\1\1\2\uffff\1\3\1\1\1\26\65\uffff\1\7\26\uffff\1\1\2\uffff\1\12\17\uffff\1\1\10\uffff\1\22\10\uffff\2\1\2\uffff\1\2\1\4\1\5\1\6\14\uffff\1\17\3\uffff\1\20\3\uffff\1\23\1\14\1\uffff\1\10\1\11\1\13\1\15\1\16\1\21\1\24\1\25\1\1\3\uffff\26\1\32\uffff\1\1\11\uffff\7\1",
            "",
            "",
            "\1\12\46\uffff\1\4\1\5\1\6\31\uffff\1\13",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static final short[] dfa_80 = DFA.unpackEncodedString(dfa_80s);
    static final short[] dfa_81 = DFA.unpackEncodedString(dfa_81s);
    static final char[] dfa_82 = DFA.unpackEncodedStringToUnsignedChars(dfa_82s);
    static final char[] dfa_83 = DFA.unpackEncodedStringToUnsignedChars(dfa_83s);
    static final short[] dfa_84 = DFA.unpackEncodedString(dfa_84s);
    static final short[] dfa_85 = DFA.unpackEncodedString(dfa_85s);
    static final short[][] dfa_86 = unpackEncodedStringArray(dfa_86s);

    class DFA331 extends DFA {

        public DFA331(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 331;
            this.eot = dfa_80;
            this.eof = dfa_81;
            this.min = dfa_82;
            this.max = dfa_83;
            this.accept = dfa_84;
            this.special = dfa_85;
            this.transition = dfa_86;
        }
        public String getDescription() {
            return "()* loopback of 13702:6: ( ({...}? => ( ({...}? => ( (lv_key_12_0= 'key' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notChangeable_13_0= RULE_NOT ) ) otherlv_14= 'changeable' ) | otherlv_15= 'changeable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_required_16_0= 'required' ) ) | (this_NOT_17= RULE_NOT otherlv_18= 'required' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_nullable_19_0= 'nullable' ) ) | (this_NOT_20= RULE_NOT otherlv_21= 'nullable' ) ) (otherlv_22= '=' ( (lv_nullableMessage_23_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_24= 'hint' otherlv_25= '=' ( (lv_hint_26_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_27= 'cascade' otherlv_28= '=' ( (lv_cascade_29_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_30= 'fetch' otherlv_31= '=' ( (lv_fetch_32_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_cache_33_0= 'cache' ) ) | (this_NOT_34= RULE_NOT otherlv_35= 'cache' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_inverse_36_0= 'inverse' ) ) | (this_NOT_37= RULE_NOT otherlv_38= 'inverse' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_39= 'databaseColumn' otherlv_40= '=' ( (lv_databaseColumn_41_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_42= 'databaseJoinTable' otherlv_43= '=' ( (lv_databaseJoinTable_44_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_45= 'databaseJoinColumn' otherlv_46= '=' ( (lv_databaseJoinColumn_47_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notEmpty_48_0= 'notEmpty' ) ) (otherlv_49= '=' ( (lv_notEmptyMessage_50_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_51= 'size' otherlv_52= '=' ( (lv_size_53_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_valid_54_0= 'valid' ) ) (otherlv_55= '=' ( (lv_validMessage_56_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_57= 'validate' otherlv_58= '=' ( (lv_validate_59_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_60_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_61= 'orderby' otherlv_62= '=' ( (lv_orderBy_63_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_orderColumn_64_0= 'orderColumn' ) ) (otherlv_65= '=' ( (lv_orderColumnName_66_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( (lv_oppositeHolder_67_0= ruleOppositeHolder ) ) ) ) ) )*";
        }
        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
            TokenStream input = (TokenStream)_input;
        	int _s = s;
            switch ( s ) {
                    case 0 : 
                        int LA331_3 = input.LA(1);

                         
                        int index331_3 = input.index();
                        input.rewind();
                        s = -1;
                        if ( LA331_3 == 133 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 2) ) {s = 5;}

                        else if ( LA331_3 == 134 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 3) ) {s = 6;}

                        else if ( LA331_3 == 93 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 7) ) {s = 10;}

                        else if ( LA331_3 == 160 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 8) ) {s = 11;}

                        else if ( LA331_3 == 132 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 1) ) {s = 4;}

                         
                        input.seek(index331_3);
                        if ( s>=0 ) return s;
                        break;
                    case 1 : 
                        int LA331_0 = input.LA(1);

                         
                        int index331_0 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (LA331_0==EOF||(LA331_0>=RULE_STRING && LA331_0<=RULE_ID)||LA331_0==RULE_CLOSE||LA331_0==RULE_REF||LA331_0==90||LA331_0==109||(LA331_0>=127 && LA331_0<=128)||LA331_0==166||(LA331_0>=170 && LA331_0<=191)||LA331_0==218||(LA331_0>=228 && LA331_0<=234)) ) {s = 1;}

                        else if ( LA331_0 == 131 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 0) ) {s = 2;}

                        else if ( LA331_0 == RULE_NOT && ( getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 2) || getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 1) || getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 3) || getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 8) || getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 7) ) ) {s = 3;}

                        else if ( LA331_0 == 132 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 1) ) {s = 4;}

                        else if ( LA331_0 == 133 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 2) ) {s = 5;}

                        else if ( LA331_0 == 134 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 3) ) {s = 6;}

                        else if ( LA331_0 == 67 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 4) ) {s = 7;}

                        else if ( LA331_0 == 158 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 5) ) {s = 8;}

                        else if ( LA331_0 == 159 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 6) ) {s = 9;}

                        else if ( LA331_0 == 93 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 7) ) {s = 10;}

                        else if ( LA331_0 == 160 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 8) ) {s = 11;}

                        else if ( LA331_0 == 156 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 9) ) {s = 12;}

                        else if ( LA331_0 == 161 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 10) ) {s = 13;}

                        else if ( LA331_0 == 162 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 11) ) {s = 14;}

                        else if ( LA331_0 == 147 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 12) ) {s = 15;}

                        else if ( LA331_0 == 151 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 13) ) {s = 16;}

                        else if ( LA331_0 == 163 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 14) ) {s = 17;}

                        else if ( LA331_0 == 118 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 15) ) {s = 18;}

                        else if ( LA331_0 == 155 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 16) ) {s = 19;}

                        else if ( LA331_0 == 164 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 17) ) {s = 20;}

                        else if ( LA331_0 == 165 && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 18) ) {s = 21;}

                        else if ( LA331_0 == RULE_OPPOSITE && getUnorderedGroupHelper().canSelect(grammarAccess.getReferenceAccess().getUnorderedGroup_5(), 19) ) {s = 22;}

                         
                        input.seek(index331_0);
                        if ( s>=0 ) return s;
                        break;
            }
            NoViableAltException nvae =
                new NoViableAltException(getDescription(), 331, _s, input);
            error(nvae);
            throw nvae;
        }
    }
    static final String dfa_87s = "\1\1\34\uffff";
    static final String dfa_88s = "\1\5\2\uffff\1\u0084\31\uffff";
    static final String dfa_89s = "\1\u00ea\2\uffff\1\u0086\31\uffff";
    static final String dfa_90s = "\1\uffff\1\33\1\1\1\uffff\1\2\1\3\1\4\1\5\1\6\1\7\1\10\1\11\1\12\1\13\1\14\1\15\1\16\1\17\1\20\1\21\1\22\1\23\1\24\1\25\1\26\1\27\1\30\1\31\1\32";
    static final String dfa_91s = "\1\1\2\uffff\1\0\31\uffff}>";
    static final String[] dfa_92s = {
            "\2\1\1\uffff\1\1\2\uffff\1\3\1\1\66\uffff\1\34\26\uffff\1\1\22\uffff\1\1\10\uffff\1\33\14\uffff\1\2\1\4\1\5\1\6\1\uffff\1\10\1\11\1\12\1\13\1\14\1\15\1\16\1\17\1\20\1\21\1\22\1\23\1\24\1\25\1\26\1\27\1\30\1\31\1\32\1\7\16\uffff\26\1\32\uffff\1\1\11\uffff\7\1",
            "",
            "",
            "\1\4\1\5\1\6",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };
    static final short[] dfa_87 = DFA.unpackEncodedString(dfa_87s);
    static final char[] dfa_88 = DFA.unpackEncodedStringToUnsignedChars(dfa_88s);
    static final char[] dfa_89 = DFA.unpackEncodedStringToUnsignedChars(dfa_89s);
    static final short[] dfa_90 = DFA.unpackEncodedString(dfa_90s);
    static final short[] dfa_91 = DFA.unpackEncodedString(dfa_91s);
    static final short[][] dfa_92 = unpackEncodedStringArray(dfa_92s);

    class DFA349 extends DFA {

        public DFA349(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 349;
            this.eot = dfa_44;
            this.eof = dfa_87;
            this.min = dfa_88;
            this.max = dfa_89;
            this.accept = dfa_90;
            this.special = dfa_91;
            this.transition = dfa_92;
        }
        public String getDescription() {
            return "()* loopback of 14610:6: ( ({...}? => ( ({...}? => ( (lv_key_8_0= 'key' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notChangeable_9_0= RULE_NOT ) ) otherlv_10= 'changeable' ) | otherlv_11= 'changeable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_required_12_0= 'required' ) ) | (this_NOT_13= RULE_NOT otherlv_14= 'required' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_nullable_15_0= 'nullable' ) ) | (this_NOT_16= RULE_NOT otherlv_17= 'nullable' ) ) (otherlv_18= '=' ( (lv_nullableMessage_19_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_20_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_assertFalse_21_0= 'assertFalse' ) ) (otherlv_22= '=' ( (lv_assertFalseMessage_23_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_assertTrue_24_0= 'assertTrue' ) ) (otherlv_25= '=' ( (lv_assertTrueMessage_26_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_creditCardNumber_27_0= 'creditCardNumber' ) ) (otherlv_28= '=' ( (lv_creditCardNumberMessage_29_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_30= 'digits' otherlv_31= '=' ( (lv_digits_32_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_email_33_0= 'email' ) ) (otherlv_34= '=' ( (lv_emailMessage_35_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_future_36_0= 'future' ) ) (otherlv_37= '=' ( (lv_futureMessage_38_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_past_39_0= 'past' ) ) (otherlv_40= '=' ( (lv_pastMessage_41_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_42= 'max' otherlv_43= '=' ( (lv_max_44_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_45= 'min' otherlv_46= '=' ( (lv_min_47_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_48= 'decimalMax' otherlv_49= '=' ( (lv_decimalMax_50_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_51= 'decimalMin' otherlv_52= '=' ( (lv_decimalMin_53_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notEmpty_54_0= 'notEmpty' ) ) (otherlv_55= '=' ( (lv_notEmptyMessage_56_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notBlank_57_0= 'notBlank' ) ) (otherlv_58= '=' ( (lv_notBlankMessage_59_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_60= 'pattern' otherlv_61= '=' ( (lv_pattern_62_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_63= 'range' otherlv_64= '=' ( (lv_range_65_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_66= 'size' otherlv_67= '=' ( (lv_size_68_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_69= 'length' otherlv_70= '=' ( (lv_length_71_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_72= 'scriptAssert' otherlv_73= '=' ( (lv_scriptAssert_74_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_75= 'url' otherlv_76= '=' ( (lv_url_77_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_78= 'validate' otherlv_79= '=' ( (lv_validate_80_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_81= 'hint' otherlv_82= '=' ( (lv_hint_83_0= RULE_STRING ) ) ) ) ) ) )*";
        }
        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
            TokenStream input = (TokenStream)_input;
        	int _s = s;
            switch ( s ) {
                    case 0 : 
                        int LA349_3 = input.LA(1);

                         
                        int index349_3 = input.index();
                        input.rewind();
                        s = -1;
                        if ( LA349_3 == 132 && getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 1) ) {s = 4;}

                        else if ( LA349_3 == 133 && getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 2) ) {s = 5;}

                        else if ( LA349_3 == 134 && getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 3) ) {s = 6;}

                         
                        input.seek(index349_3);
                        if ( s>=0 ) return s;
                        break;
                    case 1 : 
                        int LA349_0 = input.LA(1);

                         
                        int index349_0 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (LA349_0==EOF||(LA349_0>=RULE_STRING && LA349_0<=RULE_ID)||LA349_0==RULE_CLOSE||LA349_0==RULE_REF||LA349_0==90||LA349_0==109||(LA349_0>=170 && LA349_0<=191)||LA349_0==218||(LA349_0>=228 && LA349_0<=234)) ) {s = 1;}

                        else if ( LA349_0 == 131 && getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 0) ) {s = 2;}

                        else if ( LA349_0 == RULE_NOT && ( getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 2) || getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 3) || getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 1) ) ) {s = 3;}

                        else if ( LA349_0 == 132 && getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 1) ) {s = 4;}

                        else if ( LA349_0 == 133 && getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 2) ) {s = 5;}

                        else if ( LA349_0 == 134 && getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 3) ) {s = 6;}

                        else if ( LA349_0 == 155 && getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 4) ) {s = 7;}

                        else if ( LA349_0 == 136 && getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 5) ) {s = 8;}

                        else if ( LA349_0 == 137 && getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 6) ) {s = 9;}

                        else if ( LA349_0 == 138 && getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 7) ) {s = 10;}

                        else if ( LA349_0 == 139 && getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 8) ) {s = 11;}

                        else if ( LA349_0 == 140 && getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 9) ) {s = 12;}

                        else if ( LA349_0 == 141 && getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 10) ) {s = 13;}

                        else if ( LA349_0 == 142 && getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 11) ) {s = 14;}

                        else if ( LA349_0 == 143 && getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 12) ) {s = 15;}

                        else if ( LA349_0 == 144 && getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 13) ) {s = 16;}

                        else if ( LA349_0 == 145 && getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 14) ) {s = 17;}

                        else if ( LA349_0 == 146 && getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 15) ) {s = 18;}

                        else if ( LA349_0 == 147 && getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 16) ) {s = 19;}

                        else if ( LA349_0 == 148 && getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 17) ) {s = 20;}

                        else if ( LA349_0 == 149 && getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 18) ) {s = 21;}

                        else if ( LA349_0 == 150 && getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 19) ) {s = 22;}

                        else if ( LA349_0 == 151 && getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 20) ) {s = 23;}

                        else if ( LA349_0 == 152 && getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 21) ) {s = 24;}

                        else if ( LA349_0 == 153 && getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 22) ) {s = 25;}

                        else if ( LA349_0 == 154 && getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 23) ) {s = 26;}

                        else if ( LA349_0 == 118 && getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 24) ) {s = 27;}

                        else if ( LA349_0 == 67 && getUnorderedGroupHelper().canSelect(grammarAccess.getDtoAttributeAccess().getUnorderedGroup_6(), 25) ) {s = 28;}

                         
                        input.seek(index349_0);
                        if ( s>=0 ) return s;
                        break;
            }
            NoViableAltException nvae =
                new NoViableAltException(getDescription(), 349, _s, input);
            error(nvae);
            throw nvae;
        }
    }
    static final String dfa_93s = "\15\uffff";
    static final String dfa_94s = "\1\1\14\uffff";
    static final String dfa_95s = "\1\5\2\uffff\1\u0084\11\uffff";
    static final String dfa_96s = "\1\u00ea\2\uffff\1\u0086\11\uffff";
    static final String dfa_97s = "\1\uffff\1\13\1\1\1\uffff\1\2\1\3\1\4\1\5\1\6\1\7\1\10\1\11\1\12";
    static final String dfa_98s = "\1\0\2\uffff\1\1\11\uffff}>";
    static final String[] dfa_99s = {
            "\2\1\1\uffff\1\1\2\uffff\1\3\1\1\66\uffff\1\14\26\uffff\1\1\22\uffff\1\1\10\uffff\1\13\14\uffff\1\2\1\4\1\5\1\6\14\uffff\1\10\3\uffff\1\11\3\uffff\1\7\7\uffff\1\12\6\uffff\26\1\32\uffff\1\1\11\uffff\7\1",
            "",
            "",
            "\1\4\1\5\1\6",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static final short[] dfa_93 = DFA.unpackEncodedString(dfa_93s);
    static final short[] dfa_94 = DFA.unpackEncodedString(dfa_94s);
    static final char[] dfa_95 = DFA.unpackEncodedStringToUnsignedChars(dfa_95s);
    static final char[] dfa_96 = DFA.unpackEncodedStringToUnsignedChars(dfa_96s);
    static final short[] dfa_97 = DFA.unpackEncodedString(dfa_97s);
    static final short[] dfa_98 = DFA.unpackEncodedString(dfa_98s);
    static final short[][] dfa_99 = unpackEncodedStringArray(dfa_99s);

    class DFA362 extends DFA {

        public DFA362(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 362;
            this.eot = dfa_93;
            this.eof = dfa_94;
            this.min = dfa_95;
            this.max = dfa_96;
            this.accept = dfa_97;
            this.special = dfa_98;
            this.transition = dfa_99;
        }
        public String getDescription() {
            return "()* loopback of 15817:6: ( ({...}? => ( ({...}? => ( (lv_key_10_0= 'key' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_notChangeable_11_0= RULE_NOT ) ) otherlv_12= 'changeable' ) | otherlv_13= 'changeable' ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_required_14_0= 'required' ) ) | (this_NOT_15= RULE_NOT otherlv_16= 'required' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( ( (lv_nullable_17_0= 'nullable' ) ) | (this_NOT_18= RULE_NOT otherlv_19= 'nullable' ) ) (otherlv_20= '=' ( (lv_nullableMessage_21_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_22_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_notEmpty_23_0= 'notEmpty' ) ) (otherlv_24= '=' ( (lv_notEmptyMessage_25_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_26= 'size' otherlv_27= '=' ( (lv_size_28_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_valid_29_0= 'valid' ) ) (otherlv_30= '=' ( (lv_validMessage_31_0= RULE_STRING ) ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'validate' otherlv_33= '=' ( (lv_validate_34_0= RULE_STRING ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'hint' otherlv_36= '=' ( (lv_hint_37_0= RULE_STRING ) ) ) ) ) ) )*";
        }
        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
            TokenStream input = (TokenStream)_input;
        	int _s = s;
            switch ( s ) {
                    case 0 : 
                        int LA362_0 = input.LA(1);

                         
                        int index362_0 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (LA362_0==EOF||(LA362_0>=RULE_STRING && LA362_0<=RULE_ID)||LA362_0==RULE_CLOSE||LA362_0==RULE_REF||LA362_0==90||LA362_0==109||(LA362_0>=170 && LA362_0<=191)||LA362_0==218||(LA362_0>=228 && LA362_0<=234)) ) {s = 1;}

                        else if ( LA362_0 == 131 && getUnorderedGroupHelper().canSelect(grammarAccess.getDtoReferenceAccess().getUnorderedGroup_7(), 0) ) {s = 2;}

                        else if ( LA362_0 == RULE_NOT && ( getUnorderedGroupHelper().canSelect(grammarAccess.getDtoReferenceAccess().getUnorderedGroup_7(), 2) || getUnorderedGroupHelper().canSelect(grammarAccess.getDtoReferenceAccess().getUnorderedGroup_7(), 3) || getUnorderedGroupHelper().canSelect(grammarAccess.getDtoReferenceAccess().getUnorderedGroup_7(), 1) ) ) {s = 3;}

                        else if ( LA362_0 == 132 && getUnorderedGroupHelper().canSelect(grammarAccess.getDtoReferenceAccess().getUnorderedGroup_7(), 1) ) {s = 4;}

                        else if ( LA362_0 == 133 && getUnorderedGroupHelper().canSelect(grammarAccess.getDtoReferenceAccess().getUnorderedGroup_7(), 2) ) {s = 5;}

                        else if ( LA362_0 == 134 && getUnorderedGroupHelper().canSelect(grammarAccess.getDtoReferenceAccess().getUnorderedGroup_7(), 3) ) {s = 6;}

                        else if ( LA362_0 == 155 && getUnorderedGroupHelper().canSelect(grammarAccess.getDtoReferenceAccess().getUnorderedGroup_7(), 4) ) {s = 7;}

                        else if ( LA362_0 == 147 && getUnorderedGroupHelper().canSelect(grammarAccess.getDtoReferenceAccess().getUnorderedGroup_7(), 5) ) {s = 8;}

                        else if ( LA362_0 == 151 && getUnorderedGroupHelper().canSelect(grammarAccess.getDtoReferenceAccess().getUnorderedGroup_7(), 6) ) {s = 9;}

                        else if ( LA362_0 == 163 && getUnorderedGroupHelper().canSelect(grammarAccess.getDtoReferenceAccess().getUnorderedGroup_7(), 7) ) {s = 10;}

                        else if ( LA362_0 == 118 && getUnorderedGroupHelper().canSelect(grammarAccess.getDtoReferenceAccess().getUnorderedGroup_7(), 8) ) {s = 11;}

                        else if ( LA362_0 == 67 && getUnorderedGroupHelper().canSelect(grammarAccess.getDtoReferenceAccess().getUnorderedGroup_7(), 9) ) {s = 12;}

                         
                        input.seek(index362_0);
                        if ( s>=0 ) return s;
                        break;
                    case 1 : 
                        int LA362_3 = input.LA(1);

                         
                        int index362_3 = input.index();
                        input.rewind();
                        s = -1;
                        if ( LA362_3 == 133 && getUnorderedGroupHelper().canSelect(grammarAccess.getDtoReferenceAccess().getUnorderedGroup_7(), 2) ) {s = 5;}

                        else if ( LA362_3 == 134 && getUnorderedGroupHelper().canSelect(grammarAccess.getDtoReferenceAccess().getUnorderedGroup_7(), 3) ) {s = 6;}

                        else if ( LA362_3 == 132 && getUnorderedGroupHelper().canSelect(grammarAccess.getDtoReferenceAccess().getUnorderedGroup_7(), 1) ) {s = 4;}

                         
                        input.seek(index362_3);
                        if ( s>=0 ) return s;
                        break;
            }
            NoViableAltException nvae =
                new NoViableAltException(getDescription(), 362, _s, input);
            error(nvae);
            throw nvae;
        }
    }
 

    public static final BitSet FOLLOW_1 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_2 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_3 = new BitSet(new long[]{0x08000002020C0012L});
    public static final BitSet FOLLOW_4 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_5 = new BitSet(new long[]{0x00000000000000C0L});
    public static final BitSet FOLLOW_6 = new BitSet(new long[]{0x0000000000000080L});
    public static final BitSet FOLLOW_7 = new BitSet(new long[]{0x0000000800D00140L});
    public static final BitSet FOLLOW_8 = new BitSet(new long[]{0x0000000000200000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000180L});
    public static final BitSet FOLLOW_9 = new BitSet(new long[]{0x0000000000200000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000060L});
    public static final BitSet FOLLOW_10 = new BitSet(new long[]{0x0000000000000040L});
    public static final BitSet FOLLOW_11 = new BitSet(new long[]{0x0000000801800140L});
    public static final BitSet FOLLOW_12 = new BitSet(new long[]{0x0000000800000140L});
    public static final BitSet FOLLOW_13 = new BitSet(new long[]{0x0000000002000000L});
    public static final BitSet FOLLOW_14 = new BitSet(new long[]{0x000000001C000082L});
    public static final BitSet FOLLOW_15 = new BitSet(new long[]{0x000000001D000082L});
    public static final BitSet FOLLOW_16 = new BitSet(new long[]{0x00800001E0100130L,0x0000000000000001L});
    public static final BitSet FOLLOW_17 = new BitSet(new long[]{0x0000000000200020L});
    public static final BitSet FOLLOW_18 = new BitSet(new long[]{0x0000000000200000L,0x0000000000000000L,0x0000000000000000L,0x0000000000001E00L});
    public static final BitSet FOLLOW_19 = new BitSet(new long[]{0x00800001E1100130L,0x0000000000000001L});
    public static final BitSet FOLLOW_20 = new BitSet(new long[]{0x0000000000200000L,0x0000000000000000L,0x0000000000000000L,0x0000000000600000L});
    public static final BitSet FOLLOW_21 = new BitSet(new long[]{0x0080000000000130L,0x0000000000000001L});
    public static final BitSet FOLLOW_22 = new BitSet(new long[]{0x0080000000000130L});
    public static final BitSet FOLLOW_23 = new BitSet(new long[]{0x0000000000000082L});
    public static final BitSet FOLLOW_24 = new BitSet(new long[]{0x0000000420000100L});
    public static final BitSet FOLLOW_25 = new BitSet(new long[]{0x0000000020100130L,0x0000060000000000L});
    public static final BitSet FOLLOW_26 = new BitSet(new long[]{0x0000000000200000L,0x0000000000000000L,0x0000000000000000L,0x000000000000E000L});
    public static final BitSet FOLLOW_27 = new BitSet(new long[]{0x0000000000000130L,0x0000060000000000L});
    public static final BitSet FOLLOW_28 = new BitSet(new long[]{0x0000000800000000L});
    public static final BitSet FOLLOW_29 = new BitSet(new long[]{0x0000001000000000L});
    public static final BitSet FOLLOW_30 = new BitSet(new long[]{0x0000002000000000L});
    public static final BitSet FOLLOW_31 = new BitSet(new long[]{0x0000004000000000L});
    public static final BitSet FOLLOW_32 = new BitSet(new long[]{0x0000010000000082L});
    public static final BitSet FOLLOW_33 = new BitSet(new long[]{0x0000008000000000L});
    public static final BitSet FOLLOW_34 = new BitSet(new long[]{0x0000000080000100L});
    public static final BitSet FOLLOW_35 = new BitSet(new long[]{0x0000000000000100L});
    public static final BitSet FOLLOW_36 = new BitSet(new long[]{0x0000020000000000L});
    public static final BitSet FOLLOW_37 = new BitSet(new long[]{0x0000040000000000L});
    public static final BitSet FOLLOW_38 = new BitSet(new long[]{0x0000100800000000L});
    public static final BitSet FOLLOW_39 = new BitSet(new long[]{0x0000080000000000L});
    public static final BitSet FOLLOW_40 = new BitSet(new long[]{0x0000100000000000L});
    public static final BitSet FOLLOW_41 = new BitSet(new long[]{0x0000080000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000006L});
    public static final BitSet FOLLOW_42 = new BitSet(new long[]{0x0000000001000000L});
    public static final BitSet FOLLOW_43 = new BitSet(new long[]{0x0000002001000000L});
    public static final BitSet FOLLOW_44 = new BitSet(new long[]{0x0000000800000040L});
    public static final BitSet FOLLOW_45 = new BitSet(new long[]{0x0000200000000000L});
    public static final BitSet FOLLOW_46 = new BitSet(new long[]{0x0000200000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000018L});
    public static final BitSet FOLLOW_47 = new BitSet(new long[]{0x0000400800000000L});
    public static final BitSet FOLLOW_48 = new BitSet(new long[]{0x0000400000000000L});
    public static final BitSet FOLLOW_49 = new BitSet(new long[]{0x0000800800000000L});
    public static final BitSet FOLLOW_50 = new BitSet(new long[]{0x0000082000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000006L});
    public static final BitSet FOLLOW_51 = new BitSet(new long[]{0x0000800000000000L});
    public static final BitSet FOLLOW_52 = new BitSet(new long[]{0x0000202000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000018L});
    public static final BitSet FOLLOW_53 = new BitSet(new long[]{0x0001000800000000L});
    public static final BitSet FOLLOW_54 = new BitSet(new long[]{0x0001000000000000L});
    public static final BitSet FOLLOW_55 = new BitSet(new long[]{0x0006000080000100L});
    public static final BitSet FOLLOW_56 = new BitSet(new long[]{0x0000000000200040L});
    public static final BitSet FOLLOW_57 = new BitSet(new long[]{0x0006000081000110L});
    public static final BitSet FOLLOW_58 = new BitSet(new long[]{0x0000000000200000L,0x0000000000000000L,0x0000000000000000L,0x00000000001F0000L});
    public static final BitSet FOLLOW_59 = new BitSet(new long[]{0x0008080000000000L});
    public static final BitSet FOLLOW_60 = new BitSet(new long[]{0x0008000000000000L});
    public static final BitSet FOLLOW_61 = new BitSet(new long[]{0x0010200000000000L});
    public static final BitSet FOLLOW_62 = new BitSet(new long[]{0x0010000000000000L});
    public static final BitSet FOLLOW_63 = new BitSet(new long[]{0x0020000800000000L});
    public static final BitSet FOLLOW_64 = new BitSet(new long[]{0x0020000000000000L});
    public static final BitSet FOLLOW_65 = new BitSet(new long[]{0x0040000800000000L});
    public static final BitSet FOLLOW_66 = new BitSet(new long[]{0x0040000000000000L});
    public static final BitSet FOLLOW_67 = new BitSet(new long[]{0x0080000000000020L});
    public static final BitSet FOLLOW_68 = new BitSet(new long[]{0x0080000000000000L});
    public static final BitSet FOLLOW_69 = new BitSet(new long[]{0x0700000140000130L,0x7200060000002440L,0x0000010000000006L});
    public static final BitSet FOLLOW_70 = new BitSet(new long[]{0x0700000141000130L,0x7200060000002440L,0x0000010000000006L});
    public static final BitSet FOLLOW_71 = new BitSet(new long[]{0x0000000000200000L,0x0000000000000000L,0x0000000000000000L,0x0000000003800000L});
    public static final BitSet FOLLOW_72 = new BitSet(new long[]{0x0000000000000130L,0x7200060000002440L,0x0000010000000006L});
    public static final BitSet FOLLOW_73 = new BitSet(new long[]{0xD000000000000100L});
    public static final BitSet FOLLOW_74 = new BitSet(new long[]{0x2000000000200000L});
    public static final BitSet FOLLOW_75 = new BitSet(new long[]{0x2000000000000000L});
    public static final BitSet FOLLOW_76 = new BitSet(new long[]{0xD000000001000120L});
    public static final BitSet FOLLOW_77 = new BitSet(new long[]{0xD000000001000100L});
    public static final BitSet FOLLOW_78 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000001L});
    public static final BitSet FOLLOW_79 = new BitSet(new long[]{0x0080000000000130L,0x720006000000244EL,0x0000010000000006L});
    public static final BitSet FOLLOW_80 = new BitSet(new long[]{0x0080000000000130L,0x720006000000244CL,0x0000010000000006L});
    public static final BitSet FOLLOW_81 = new BitSet(new long[]{0x0000000000200000L});
    public static final BitSet FOLLOW_82 = new BitSet(new long[]{0x0080000000000130L,0x7200060000002448L,0x0000010000000006L});
    public static final BitSet FOLLOW_83 = new BitSet(new long[]{0x0080000000000130L,0x7200060000002440L,0x0000010000000006L});
    public static final BitSet FOLLOW_84 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000030L});
    public static final BitSet FOLLOW_85 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000004L});
    public static final BitSet FOLLOW_86 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000040L});
    public static final BitSet FOLLOW_87 = new BitSet(new long[]{0x0000000000000560L,0x0000210000448388L,0xFFFFFC8000000000L,0x000007F004000000L});
    public static final BitSet FOLLOW_88 = new BitSet(new long[]{0x0000000000000560L,0x0000210000408000L,0xFFFFFC8000000000L,0x000007F004000000L});
    public static final BitSet FOLLOW_89 = new BitSet(new long[]{0x0000000000000560L,0x0000200000408000L,0xFFFFFC0000000000L,0x000007F004000000L});
    public static final BitSet FOLLOW_90 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000400L});
    public static final BitSet FOLLOW_91 = new BitSet(new long[]{0x0000000000000560L,0x0000210000009988L,0xFFFFFC8000000000L,0x000007F004000000L});
    public static final BitSet FOLLOW_92 = new BitSet(new long[]{0x0000000000000560L,0x0000210000008000L,0xFFFFFC8000000000L,0x000007F004000000L});
    public static final BitSet FOLLOW_93 = new BitSet(new long[]{0x0000000000000560L,0x0000200000008000L,0xFFFFFC0000000000L,0x000007F004000000L});
    public static final BitSet FOLLOW_94 = new BitSet(new long[]{0x0000000000000000L,0x0000000000002000L});
    public static final BitSet FOLLOW_95 = new BitSet(new long[]{0x0000000000000100L,0x0000010000074388L,0x0000008000000000L});
    public static final BitSet FOLLOW_96 = new BitSet(new long[]{0x0000000000000040L,0x0000000000008000L});
    public static final BitSet FOLLOW_97 = new BitSet(new long[]{0x0000000000000100L,0x0000000000070388L});
    public static final BitSet FOLLOW_98 = new BitSet(new long[]{0x0000000000000000L,0x0000000000080000L});
    public static final BitSet FOLLOW_99 = new BitSet(new long[]{0x0000000000000002L,0x0000000000100000L});
    public static final BitSet FOLLOW_100 = new BitSet(new long[]{0x0000000000000040L,0x0000000000088000L});
    public static final BitSet FOLLOW_101 = new BitSet(new long[]{0x0000000000000440L,0x0000200000408000L,0xFFFFFC0000000000L,0x000007F004000000L});
    public static final BitSet FOLLOW_102 = new BitSet(new long[]{0x0000000000000440L,0x0000000000408000L,0xFFFFFC0000000000L,0x000000F004000000L});
    public static final BitSet FOLLOW_103 = new BitSet(new long[]{0x0000000000000200L,0x0000000006A00008L});
    public static final BitSet FOLLOW_104 = new BitSet(new long[]{0x0000000001000460L,0x0000000001008000L,0xFFFFFC0000000000L,0x000000F004000000L});
    public static final BitSet FOLLOW_105 = new BitSet(new long[]{0x0000000001000000L,0x0000000001000000L});
    public static final BitSet FOLLOW_106 = new BitSet(new long[]{0x0000000000000460L,0x0000000000008000L,0xFFFFFC0000000000L,0x000000F004000000L});
    public static final BitSet FOLLOW_107 = new BitSet(new long[]{0x0000000000000200L,0x0000000006200008L});
    public static final BitSet FOLLOW_108 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
    public static final BitSet FOLLOW_109 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
    public static final BitSet FOLLOW_110 = new BitSet(new long[]{0x0000000000000440L,0x0000200000008000L,0xFFFFFC0000000000L,0x000007F004000000L});
    public static final BitSet FOLLOW_111 = new BitSet(new long[]{0x0000000000000440L,0x0000000000008000L,0xFFFFFC0000000000L,0x000000F004000000L});
    public static final BitSet FOLLOW_112 = new BitSet(new long[]{0x0000000000000200L,0x0000000016801008L,0x0000000000000000L,0x000000007C000000L});
    public static final BitSet FOLLOW_113 = new BitSet(new long[]{0x0000000000000200L,0x0000000016001008L,0x0000000000000000L,0x000000007C000000L});
    public static final BitSet FOLLOW_114 = new BitSet(new long[]{0x0000000000000200L,0x0000003FE6A00188L});
    public static final BitSet FOLLOW_115 = new BitSet(new long[]{0x0000000000000200L,0x0000003FE6200188L});
    public static final BitSet FOLLOW_116 = new BitSet(new long[]{0x0000000000000040L,0x0000004000000000L});
    public static final BitSet FOLLOW_117 = new BitSet(new long[]{0x0000000000000000L,0x0000008000000000L});
    public static final BitSet FOLLOW_118 = new BitSet(new long[]{0x0000000000000000L,0x0000000000008000L});
    public static final BitSet FOLLOW_119 = new BitSet(new long[]{0x0000000000000000L,0x0000010000000000L});
    public static final BitSet FOLLOW_120 = new BitSet(new long[]{0x0000000000000040L,0x0000000000008000L,0xFFFFFC0000000000L});
    public static final BitSet FOLLOW_121 = new BitSet(new long[]{0x0000000000000020L,0x0000060000000000L});
    public static final BitSet FOLLOW_122 = new BitSet(new long[]{0x0000000000000000L,0x0000060000000000L});
    public static final BitSet FOLLOW_123 = new BitSet(new long[]{0x0000000000000000L,0x0000040000000000L});
    public static final BitSet FOLLOW_124 = new BitSet(new long[]{0x0000000000000082L,0x0000180000000000L});
    public static final BitSet FOLLOW_125 = new BitSet(new long[]{0x0000000000000082L,0x0000100000000000L});
    public static final BitSet FOLLOW_126 = new BitSet(new long[]{0x0000000000001960L,0x81FFE00020000988L,0xFFFFFC4000000001L,0x000007F004000000L});
    public static final BitSet FOLLOW_127 = new BitSet(new long[]{0x0000000000000000L,0x0000400000000000L});
    public static final BitSet FOLLOW_128 = new BitSet(new long[]{0x0000000000000000L,0x0000800000000000L});
    public static final BitSet FOLLOW_129 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
    public static final BitSet FOLLOW_130 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000E00000000L});
    public static final BitSet FOLLOW_131 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000180000000L});
    public static final BitSet FOLLOW_132 = new BitSet(new long[]{0x0000000000001160L,0x8000200000000000L,0xFFFFFC4000000001L,0x000007F004000000L});
    public static final BitSet FOLLOW_133 = new BitSet(new long[]{0x0000000000000020L,0x0200020000000000L});
    public static final BitSet FOLLOW_134 = new BitSet(new long[]{0x0000000000000000L,0x0200020000000000L});
    public static final BitSet FOLLOW_135 = new BitSet(new long[]{0x0000000000000000L,0x0200000000000000L});
    public static final BitSet FOLLOW_136 = new BitSet(new long[]{0x0000000000001960L,0x8DFF600020000988L,0xFFFFFC4000000001L,0x000007F004000000L});
    public static final BitSet FOLLOW_137 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
    public static final BitSet FOLLOW_138 = new BitSet(new long[]{0x0000000000000000L,0x0800000000000000L});
    public static final BitSet FOLLOW_139 = new BitSet(new long[]{0x0000000000000020L,0x1000020000000000L});
    public static final BitSet FOLLOW_140 = new BitSet(new long[]{0x0000000000000000L,0x1000020000000000L});
    public static final BitSet FOLLOW_141 = new BitSet(new long[]{0x0000000000000000L,0x1000000000000000L});
    public static final BitSet FOLLOW_142 = new BitSet(new long[]{0x0000000000001960L,0x89FF200020000988L,0xFFFFFC4000000001L,0x000007F004000000L});
    public static final BitSet FOLLOW_143 = new BitSet(new long[]{0x0000000000000020L,0x2000020000000000L});
    public static final BitSet FOLLOW_144 = new BitSet(new long[]{0x0000000000000000L,0x2000020000000000L});
    public static final BitSet FOLLOW_145 = new BitSet(new long[]{0x0000000000000000L,0x2000000000000000L});
    public static final BitSet FOLLOW_146 = new BitSet(new long[]{0x0000000000000000L,0x4000000000000000L});
    public static final BitSet FOLLOW_147 = new BitSet(new long[]{0x0000000000001160L,0x8000200000000008L,0xFFFFFC0000000001L,0x000007F004000000L});
    public static final BitSet FOLLOW_148 = new BitSet(new long[]{0x0000000000001160L,0x8000200000000000L,0xFFFFFC0000000001L,0x000007F004000000L});
    public static final BitSet FOLLOW_149 = new BitSet(new long[]{0x0000000000000000L,0x8000000000000000L,0x0000000000000001L});
    public static final BitSet FOLLOW_150 = new BitSet(new long[]{0x0000000000000440L,0x0000220000408000L,0xFFFFFC0000000000L,0x000007F004000000L});
    public static final BitSet FOLLOW_151 = new BitSet(new long[]{0x0000000000000000L,0x0000000006800008L});
    public static final BitSet FOLLOW_152 = new BitSet(new long[]{0x0000000000000000L,0x0000000006000008L});
    public static final BitSet FOLLOW_153 = new BitSet(new long[]{0x0000000000000020L,0x0000020000000000L,0x0000000000000002L});
    public static final BitSet FOLLOW_154 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L,0x0000000000000002L});
    public static final BitSet FOLLOW_155 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
    public static final BitSet FOLLOW_156 = new BitSet(new long[]{0x0000000000000082L,0x0000080000000000L});
    public static final BitSet FOLLOW_157 = new BitSet(new long[]{0x0000000000001160L,0x0040200000000188L,0xFFFFFC0000000000L,0x000007F004000000L});
    public static final BitSet FOLLOW_158 = new BitSet(new long[]{0x0000000000001160L,0x0000200000000000L,0xFFFFFC0000000000L,0x000007F004000000L});
    public static final BitSet FOLLOW_159 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000004L});
    public static final BitSet FOLLOW_160 = new BitSet(new long[]{0x0000000000001960L,0x8400200000000188L,0xFFFFFC0000000001L,0x000007F004000000L});
    public static final BitSet FOLLOW_161 = new BitSet(new long[]{0x0000000000000040L,0x0000200000000000L,0xFFFFFC0000000000L,0x000007F004000000L});
    public static final BitSet FOLLOW_162 = new BitSet(new long[]{0x0000000000000040L,0x0000000000000000L,0xFFFFFC0000000000L,0x000000F004000000L});
    public static final BitSet FOLLOW_163 = new BitSet(new long[]{0x0000000000000040L,0x0000000000000000L,0xFFFFFC0000000000L});
    public static final BitSet FOLLOW_164 = new BitSet(new long[]{0x0000000000000802L,0x0040000004000008L,0x000000003FFFFFF8L});
    public static final BitSet FOLLOW_165 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000010L});
    public static final BitSet FOLLOW_166 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000020L});
    public static final BitSet FOLLOW_167 = new BitSet(new long[]{0x0000000000200802L,0x0040000004000008L,0x000000003FFFFFF8L});
    public static final BitSet FOLLOW_168 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000040L});
    public static final BitSet FOLLOW_169 = new BitSet(new long[]{0x0000000000001000L});
    public static final BitSet FOLLOW_170 = new BitSet(new long[]{0x0000000000000040L,0x0000200000008000L,0x0000000000000000L,0x000007F004000000L});
    public static final BitSet FOLLOW_171 = new BitSet(new long[]{0x0000000000000040L,0x0000000000008000L,0x0000000000000000L,0x000000F004000000L});
    public static final BitSet FOLLOW_172 = new BitSet(new long[]{0x0000000000002802L,0x0040000024000008L,0x0000003FD8880078L});
    public static final BitSet FOLLOW_173 = new BitSet(new long[]{0x0000000000202802L,0x0040000024000008L,0x0000003FD8880078L});
    public static final BitSet FOLLOW_174 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000100000000L});
    public static final BitSet FOLLOW_175 = new BitSet(new long[]{0x0000000000000040L,0x0000010000000000L});
    public static final BitSet FOLLOW_176 = new BitSet(new long[]{0x0000000000000802L,0x0040000004000008L,0x000000000FFFFF78L});
    public static final BitSet FOLLOW_177 = new BitSet(new long[]{0x0000000000200802L,0x0040000004000008L,0x000000000FFFFF78L});
    public static final BitSet FOLLOW_178 = new BitSet(new long[]{0x0000000000000802L,0x0040000004000008L,0x0000000808880078L});
    public static final BitSet FOLLOW_179 = new BitSet(new long[]{0x0000000000200802L,0x0040000004000008L,0x0000000808880078L});
    public static final BitSet FOLLOW_180 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000004000000000L});
    public static final BitSet FOLLOW_181 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000010000000000L});
    public static final BitSet FOLLOW_182 = new BitSet(new long[]{0x0000000000000060L,0x0000200000000008L,0xFFFFFE0000000000L});
    public static final BitSet FOLLOW_183 = new BitSet(new long[]{0x0000000001000100L,0x0000000004000000L});
    public static final BitSet FOLLOW_184 = new BitSet(new long[]{0x0000000000000002L,0x0000000004000000L,0x0000000000000008L});
    public static final BitSet FOLLOW_185 = new BitSet(new long[]{0x0000000000000002L,0x0000000004000000L});
    public static final BitSet FOLLOW_186 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
    public static final BitSet FOLLOW_187 = new BitSet(new long[]{0x0000000000004020L});
    public static final BitSet FOLLOW_188 = new BitSet(new long[]{0x0000000000000002L,0x0000000008000000L});
    public static final BitSet FOLLOW_189 = new BitSet(new long[]{0x0000010000000002L,0x0000000008000000L,0x0000000000000000L,0x0000000000000001L});
    public static final BitSet FOLLOW_190 = new BitSet(new long[]{0x0000000001000002L});

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy