Optimize RuleTemplateIndex: cache matching rules per concept.

This commit is contained in:
Fedor Isakov 2020-08-20 12:26:53 +02:00
parent 38e34b4431
commit 4cf9821bc2
1 changed files with 272 additions and 245 deletions

View File

@ -1414,11 +1414,11 @@
<property role="TrG5h" value="node" />
<node concept="3Tqbb2" id="12yN8Dyv_JV" role="1tU5fm" />
</node>
<node concept="A3Dl8" id="6fdr4UgfxqC" role="3clF45">
<node concept="3uibUv" id="1ffsG7c4ezn" role="A3Ik2">
<node concept="3vKaQO" id="7gMIJIyo$IU" role="3clF45">
<node concept="3uibUv" id="7gMIJIyo$IW" role="3O5elw">
<ref role="3uigEE" to="i348:1ffsG7bUbCM" resolve="AbstractRuleTemplate" />
<node concept="3qUE_q" id="7XdbJdyRKIf" role="11_B2D">
<node concept="3uibUv" id="7XdbJdyRMGp" role="3qUE_r">
<node concept="3qUE_q" id="7gMIJIyo$IX" role="11_B2D">
<node concept="3uibUv" id="7gMIJIyo$IY" role="3qUE_r">
<ref role="3uigEE" to="i348:2RRx4MZ6_68" resolve="RuleTemplate.Token" />
</node>
</node>
@ -1426,248 +1426,274 @@
</node>
<node concept="3Tm1VV" id="6fdr4UgfuGn" role="1B3o_S" />
<node concept="3clFbS" id="6fdr4UgfuGo" role="3clF47">
<node concept="3cpWs8" id="12yN8DyvAUh" role="3cqZAp">
<node concept="3cpWsn" id="12yN8DyvAUk" role="3cpWs9">
<property role="TrG5h" value="result" />
<node concept="_YKpA" id="12yN8DyvAUd" role="1tU5fm">
<node concept="3uibUv" id="6tPOoeTaEit" role="_ZDj9">
<node concept="3cpWs8" id="7gMIJIyn$42" role="3cqZAp">
<node concept="3cpWsn" id="7gMIJIyn$43" role="3cpWs9">
<property role="TrG5h" value="allMatching" />
<node concept="3vKaQO" id="7gMIJIyn$3J" role="1tU5fm">
<node concept="3uibUv" id="7gMIJIyn$3Q" role="3O5elw">
<ref role="3uigEE" to="i348:1ffsG7bUbCM" resolve="AbstractRuleTemplate" />
<node concept="3qUE_q" id="6tPOoeTaEiu" role="11_B2D">
<node concept="3uibUv" id="6tPOoeTaEiv" role="3qUE_r">
<ref role="3uigEE" to="i348:2RRx4MZ6_68" resolve="RuleTemplate.Token" />
</node>
</node>
<node concept="3qTvmN" id="7gMIJIyn$3R" role="11_B2D" />
</node>
</node>
<node concept="2ShNRf" id="12yN8DyvD8g" role="33vP2m">
<node concept="Tc6Ow" id="12yN8DyvD72" role="2ShVmc">
<node concept="3uibUv" id="6tPOoeTaGDL" role="HW$YZ">
<ref role="3uigEE" to="i348:1ffsG7bUbCM" resolve="AbstractRuleTemplate" />
<node concept="3qUE_q" id="6tPOoeTaGDM" role="11_B2D">
<node concept="3uibUv" id="6tPOoeTaGDN" role="3qUE_r">
<ref role="3uigEE" to="i348:2RRx4MZ6_68" resolve="RuleTemplate.Token" />
<node concept="3EllGN" id="7gMIJIyn$44" role="33vP2m">
<node concept="2OqwBi" id="7gMIJIyn$45" role="3ElVtu">
<node concept="37vLTw" id="7gMIJIyn$46" role="2Oq$k0">
<ref role="3cqZAo" node="12yN8DyvzeF" resolve="node" />
</node>
<node concept="2yIwOk" id="7gMIJIyn$47" role="2OqNvi" />
</node>
<node concept="37vLTw" id="7gMIJIyn$48" role="3ElQJh">
<ref role="3cqZAo" node="7gMIJIynsDv" resolve="concept2matching" />
</node>
</node>
</node>
</node>
<node concept="3clFbJ" id="7gMIJIynBzj" role="3cqZAp">
<node concept="3clFbS" id="7gMIJIynBzl" role="3clFbx">
<node concept="3clFbF" id="7gMIJIynHFT" role="3cqZAp">
<node concept="37vLTI" id="7gMIJIynJiD" role="3clFbG">
<node concept="1eOMI4" id="7gMIJIynJB6" role="37vLTx">
<node concept="37vLTI" id="7gMIJIynJDW" role="1eOMHV">
<node concept="2ShNRf" id="7gMIJIynJDX" role="37vLTx">
<node concept="Tc6Ow" id="7gMIJIynJDY" role="2ShVmc">
<node concept="3uibUv" id="7gMIJIynJDZ" role="HW$YZ">
<ref role="3uigEE" to="i348:1ffsG7bUbCM" resolve="AbstractRuleTemplate" />
<node concept="3qTvmN" id="7gMIJIynJE0" role="11_B2D" />
</node>
</node>
</node>
<node concept="37vLTw" id="7gMIJIynJE1" role="37vLTJ">
<ref role="3cqZAo" node="7gMIJIyn$43" resolve="allMatching" />
</node>
</node>
</node>
</node>
</node>
</node>
</node>
<node concept="3clFbH" id="12yN8DyvIhk" role="3cqZAp" />
<node concept="3cpWs8" id="YGS68MZTt3" role="3cqZAp">
<node concept="3cpWsn" id="YGS68MZTt4" role="3cpWs9">
<property role="TrG5h" value="allConcepts" />
<node concept="_YKpA" id="YGS68MZTsU" role="1tU5fm">
<node concept="3bZ5Sz" id="YGS68MZTsX" role="_ZDj9" />
</node>
<node concept="2OqwBi" id="YGS68MZTt5" role="33vP2m">
<node concept="2OqwBi" id="YGS68MZTt6" role="2Oq$k0">
<node concept="37vLTw" id="YGS68MZTt7" role="2Oq$k0">
<ref role="3cqZAo" node="12yN8DyvzeF" resolve="node" />
<node concept="3EllGN" id="7gMIJIynIbs" role="37vLTJ">
<node concept="2OqwBi" id="7gMIJIynIwS" role="3ElVtu">
<node concept="37vLTw" id="7gMIJIynIkA" role="2Oq$k0">
<ref role="3cqZAo" node="12yN8DyvzeF" resolve="node" />
</node>
<node concept="2yIwOk" id="7gMIJIynIH$" role="2OqNvi" />
</node>
<node concept="37vLTw" id="7gMIJIynHFR" role="3ElQJh">
<ref role="3cqZAo" node="7gMIJIynsDv" resolve="concept2matching" />
</node>
</node>
<node concept="2yIwOk" id="YGS68MZTt8" role="2OqNvi" />
</node>
<node concept="3oJPKh" id="YGS68MZTt9" role="2OqNvi">
<node concept="1xIGOp" id="YGS68MZTta" role="1xVPHs" />
</node>
</node>
</node>
</node>
<node concept="3clFbH" id="YGS68MZRMA" role="3cqZAp" />
<node concept="3SKdUt" id="12yN8Dywh_Q" role="3cqZAp">
<node concept="1PaTwC" id="589APehYxO0" role="1aUNEU">
<node concept="3oM_SD" id="589APehYxO1" role="1PaTwD">
<property role="3oM_SC" value="assuming" />
</node>
<node concept="3oM_SD" id="589APehYxO2" role="1PaTwD">
<property role="3oM_SC" value="the" />
</node>
<node concept="3oM_SD" id="589APehYxO3" role="1PaTwD">
<property role="3oM_SC" value="list" />
</node>
<node concept="3oM_SD" id="589APehYxO4" role="1PaTwD">
<property role="3oM_SC" value="is" />
</node>
<node concept="3oM_SD" id="589APehYxO5" role="1PaTwD">
<property role="3oM_SC" value="sorted" />
</node>
<node concept="3oM_SD" id="589APehYxO6" role="1PaTwD">
<property role="3oM_SC" value="from" />
</node>
<node concept="3oM_SD" id="589APehYxO7" role="1PaTwD">
<property role="3oM_SC" value="most" />
</node>
<node concept="3oM_SD" id="589APehYxO8" role="1PaTwD">
<property role="3oM_SC" value="specific" />
</node>
<node concept="3oM_SD" id="589APehYxO9" role="1PaTwD">
<property role="3oM_SC" value="to" />
</node>
<node concept="3oM_SD" id="589APehYxOa" role="1PaTwD">
<property role="3oM_SC" value="most" />
</node>
<node concept="3oM_SD" id="589APehYxOb" role="1PaTwD">
<property role="3oM_SC" value="abstract" />
</node>
</node>
</node>
<node concept="3SKdUt" id="tIwzd1HIKH" role="3cqZAp">
<node concept="1PaTwC" id="589APehYxOc" role="1aUNEU">
<node concept="3oM_SD" id="589APehYxOd" role="1PaTwD">
<property role="3oM_SC" value="TODO:" />
</node>
<node concept="3oM_SD" id="589APehYxOe" role="1PaTwD">
<property role="3oM_SC" value="check" />
</node>
<node concept="3oM_SD" id="589APehYxOf" role="1PaTwD">
<property role="3oM_SC" value="the" />
</node>
<node concept="3oM_SD" id="589APehYxOg" role="1PaTwD">
<property role="3oM_SC" value="above" />
</node>
<node concept="3oM_SD" id="589APehYxOh" role="1PaTwD">
<property role="3oM_SC" value="assumption" />
</node>
</node>
</node>
<node concept="1Dw8fO" id="12yN8Dywu8N" role="3cqZAp">
<node concept="3cpWsn" id="12yN8Dywu8Q" role="1Duv9x">
<property role="TrG5h" value="cptIdx" />
<node concept="10Oyi0" id="12yN8Dywu8U" role="1tU5fm" />
<node concept="3cmrfG" id="12yN8Dywu8V" role="33vP2m">
<property role="3cmrfH" value="0" />
</node>
</node>
<node concept="3eOVzh" id="12yN8Dywu8W" role="1Dwp0S">
<node concept="37vLTw" id="12yN8Dywu8Z" role="3uHU7B">
<ref role="3cqZAo" node="12yN8Dywu8Q" resolve="cptIdx" />
</node>
<node concept="2OqwBi" id="12yN8Dywug9" role="3uHU7w">
<node concept="34oBXx" id="12yN8Dywuge" role="2OqNvi" />
<node concept="37vLTw" id="12yN8Dywugg" role="2Oq$k0">
<ref role="3cqZAo" node="YGS68MZTt4" resolve="allConcepts" />
<node concept="3clFbH" id="7gMIJIynBzk" role="3cqZAp" />
<node concept="3cpWs8" id="YGS68MZTt3" role="3cqZAp">
<node concept="3cpWsn" id="YGS68MZTt4" role="3cpWs9">
<property role="TrG5h" value="allConcepts" />
<node concept="_YKpA" id="YGS68MZTsU" role="1tU5fm">
<node concept="3bZ5Sz" id="YGS68MZTsX" role="_ZDj9" />
</node>
<node concept="2OqwBi" id="YGS68MZTt5" role="33vP2m">
<node concept="2OqwBi" id="YGS68MZTt6" role="2Oq$k0">
<node concept="37vLTw" id="YGS68MZTt7" role="2Oq$k0">
<ref role="3cqZAo" node="12yN8DyvzeF" resolve="node" />
</node>
<node concept="2yIwOk" id="YGS68MZTt8" role="2OqNvi" />
</node>
<node concept="3oJPKh" id="YGS68MZTt9" role="2OqNvi">
<node concept="1xIGOp" id="YGS68MZTta" role="1xVPHs" />
</node>
</node>
</node>
</node>
</node>
<node concept="3uNrnE" id="12yN8Dywugh" role="1Dwrff">
<node concept="37vLTw" id="12yN8Dywugj" role="2$L3a6">
<ref role="3cqZAo" node="12yN8Dywu8Q" resolve="cptIdx" />
<node concept="3SKdUt" id="12yN8Dywh_Q" role="3cqZAp">
<node concept="1PaTwC" id="589APehYxO0" role="1aUNEU">
<node concept="3oM_SD" id="589APehYxO1" role="1PaTwD">
<property role="3oM_SC" value="assuming" />
</node>
<node concept="3oM_SD" id="589APehYxO2" role="1PaTwD">
<property role="3oM_SC" value="the" />
</node>
<node concept="3oM_SD" id="589APehYxO3" role="1PaTwD">
<property role="3oM_SC" value="list" />
</node>
<node concept="3oM_SD" id="589APehYxO4" role="1PaTwD">
<property role="3oM_SC" value="is" />
</node>
<node concept="3oM_SD" id="589APehYxO5" role="1PaTwD">
<property role="3oM_SC" value="sorted" />
</node>
<node concept="3oM_SD" id="589APehYxO6" role="1PaTwD">
<property role="3oM_SC" value="from" />
</node>
<node concept="3oM_SD" id="589APehYxO7" role="1PaTwD">
<property role="3oM_SC" value="most" />
</node>
<node concept="3oM_SD" id="589APehYxO8" role="1PaTwD">
<property role="3oM_SC" value="specific" />
</node>
<node concept="3oM_SD" id="589APehYxO9" role="1PaTwD">
<property role="3oM_SC" value="to" />
</node>
<node concept="3oM_SD" id="589APehYxOa" role="1PaTwD">
<property role="3oM_SC" value="most" />
</node>
<node concept="3oM_SD" id="589APehYxOb" role="1PaTwD">
<property role="3oM_SC" value="abstract" />
</node>
</node>
</node>
</node>
<node concept="3clFbS" id="12yN8Dywi36" role="2LFqv$">
<node concept="3cpWs8" id="12yN8Dywugk" role="3cqZAp">
<node concept="3cpWsn" id="12yN8Dywugn" role="3cpWs9">
<property role="TrG5h" value="cpt" />
<node concept="3bZ5Sz" id="YGS68MZVBF" role="1tU5fm" />
<node concept="1y4W85" id="12yN8Dywul8" role="33vP2m">
<node concept="37vLTw" id="12yN8Dywulb" role="1y566C">
<node concept="3SKdUt" id="tIwzd1HIKH" role="3cqZAp">
<node concept="1PaTwC" id="589APehYxOc" role="1aUNEU">
<node concept="3oM_SD" id="589APehYxOd" role="1PaTwD">
<property role="3oM_SC" value="TODO:" />
</node>
<node concept="3oM_SD" id="589APehYxOe" role="1PaTwD">
<property role="3oM_SC" value="check" />
</node>
<node concept="3oM_SD" id="589APehYxOf" role="1PaTwD">
<property role="3oM_SC" value="the" />
</node>
<node concept="3oM_SD" id="589APehYxOg" role="1PaTwD">
<property role="3oM_SC" value="above" />
</node>
<node concept="3oM_SD" id="589APehYxOh" role="1PaTwD">
<property role="3oM_SC" value="assumption" />
</node>
</node>
</node>
<node concept="1Dw8fO" id="12yN8Dywu8N" role="3cqZAp">
<node concept="3cpWsn" id="12yN8Dywu8Q" role="1Duv9x">
<property role="TrG5h" value="cptIdx" />
<node concept="10Oyi0" id="12yN8Dywu8U" role="1tU5fm" />
<node concept="3cmrfG" id="12yN8Dywu8V" role="33vP2m">
<property role="3cmrfH" value="0" />
</node>
</node>
<node concept="3eOVzh" id="12yN8Dywu8W" role="1Dwp0S">
<node concept="37vLTw" id="12yN8Dywu8Z" role="3uHU7B">
<ref role="3cqZAo" node="12yN8Dywu8Q" resolve="cptIdx" />
</node>
<node concept="2OqwBi" id="12yN8Dywug9" role="3uHU7w">
<node concept="34oBXx" id="12yN8Dywuge" role="2OqNvi" />
<node concept="37vLTw" id="12yN8Dywugg" role="2Oq$k0">
<ref role="3cqZAo" node="YGS68MZTt4" resolve="allConcepts" />
</node>
<node concept="37vLTw" id="12yN8Dywugp" role="1y58nS">
<ref role="3cqZAo" node="12yN8Dywu8Q" resolve="cptIdx" />
</node>
</node>
</node>
</node>
<node concept="3clFbH" id="12yN8DywsEn" role="3cqZAp" />
<node concept="3clFbJ" id="12yN8Dyw79t" role="3cqZAp">
<node concept="3clFbS" id="12yN8Dyw79w" role="3clFbx">
<node concept="3cpWs8" id="12yN8DywoJ8" role="3cqZAp">
<node concept="3cpWsn" id="12yN8DywoJ9" role="3cpWs9">
<property role="TrG5h" value="matching" />
<node concept="3vKaQO" id="12yN8DyD$_b" role="1tU5fm">
<node concept="3uibUv" id="7XdbJdyRSmQ" role="3O5elw">
<ref role="3uigEE" to="i348:1ffsG7bUbCM" resolve="AbstractRuleTemplate" />
<node concept="3qUE_q" id="7XdbJdyRSmR" role="11_B2D">
<node concept="3uibUv" id="7XdbJdyRSmS" role="3qUE_r">
<ref role="3uigEE" to="i348:2RRx4MZ6_68" resolve="RuleTemplate.Token" />
<node concept="3uNrnE" id="12yN8Dywugh" role="1Dwrff">
<node concept="37vLTw" id="12yN8Dywugj" role="2$L3a6">
<ref role="3cqZAo" node="12yN8Dywu8Q" resolve="cptIdx" />
</node>
</node>
<node concept="3clFbS" id="12yN8Dywi36" role="2LFqv$">
<node concept="3cpWs8" id="12yN8Dywugk" role="3cqZAp">
<node concept="3cpWsn" id="12yN8Dywugn" role="3cpWs9">
<property role="TrG5h" value="cpt" />
<node concept="3bZ5Sz" id="YGS68MZVBF" role="1tU5fm" />
<node concept="1y4W85" id="12yN8Dywul8" role="33vP2m">
<node concept="37vLTw" id="12yN8Dywulb" role="1y566C">
<ref role="3cqZAo" node="YGS68MZTt4" resolve="allConcepts" />
</node>
<node concept="37vLTw" id="12yN8Dywugp" role="1y58nS">
<ref role="3cqZAo" node="12yN8Dywu8Q" resolve="cptIdx" />
</node>
</node>
</node>
</node>
<node concept="3clFbH" id="12yN8DywsEn" role="3cqZAp" />
<node concept="3clFbJ" id="12yN8Dyw79t" role="3cqZAp">
<node concept="3clFbS" id="12yN8Dyw79w" role="3clFbx">
<node concept="3cpWs8" id="12yN8DywoJ8" role="3cqZAp">
<node concept="3cpWsn" id="12yN8DywoJ9" role="3cpWs9">
<property role="TrG5h" value="matching" />
<node concept="3vKaQO" id="12yN8DyD$_b" role="1tU5fm">
<node concept="3uibUv" id="7XdbJdyRSmQ" role="3O5elw">
<ref role="3uigEE" to="i348:1ffsG7bUbCM" resolve="AbstractRuleTemplate" />
<node concept="3qTvmN" id="7gMIJIymZpv" role="11_B2D" />
</node>
</node>
<node concept="3EllGN" id="12yN8DywoJa" role="33vP2m">
<node concept="37vLTw" id="12yN8Dywulc" role="3ElVtu">
<ref role="3cqZAo" node="12yN8Dywugn" resolve="cpt" />
</node>
<node concept="37vLTw" id="12yN8DywoJc" role="3ElQJh">
<ref role="3cqZAo" node="12yN8DyvDfi" resolve="concept2ruleTemplates" />
</node>
</node>
</node>
</node>
<node concept="3EllGN" id="12yN8DywoJa" role="33vP2m">
<node concept="37vLTw" id="12yN8Dywulc" role="3ElVtu">
<ref role="3cqZAo" node="12yN8Dywugn" resolve="cpt" />
</node>
<node concept="37vLTw" id="12yN8DywoJc" role="3ElQJh">
<ref role="3cqZAo" node="12yN8DyvDfi" resolve="concept2ruleTemplates" />
</node>
</node>
</node>
</node>
<node concept="3clFbH" id="12yN8Dywsy6" role="3cqZAp" />
<node concept="1DcWWT" id="12yN8DyDOdI" role="3cqZAp">
<node concept="3clFbS" id="12yN8DyDOdJ" role="2LFqv$">
<node concept="3clFbJ" id="12yN8DyDPmt" role="3cqZAp">
<node concept="3clFbS" id="12yN8DyDPmw" role="3clFbx">
<node concept="3clFbF" id="7XdbJdyJJ2a" role="3cqZAp">
<node concept="2OqwBi" id="7XdbJdyJJ2b" role="3clFbG">
<node concept="37vLTw" id="7XdbJdyJJ2c" role="2Oq$k0">
<ref role="3cqZAo" node="12yN8DyvAUk" resolve="result" />
<node concept="3clFbH" id="12yN8Dywsy6" role="3cqZAp" />
<node concept="1DcWWT" id="12yN8DyDOdI" role="3cqZAp">
<node concept="3clFbS" id="12yN8DyDOdJ" role="2LFqv$">
<node concept="3clFbJ" id="12yN8DyDPmt" role="3cqZAp">
<node concept="3clFbS" id="12yN8DyDPmw" role="3clFbx">
<node concept="3clFbF" id="7gMIJIynM8q" role="3cqZAp">
<node concept="2OqwBi" id="7gMIJIynMHG" role="3clFbG">
<node concept="37vLTw" id="7gMIJIynM8o" role="2Oq$k0">
<ref role="3cqZAo" node="7gMIJIyn$43" resolve="allMatching" />
</node>
<node concept="TSZUe" id="7gMIJIynNem" role="2OqNvi">
<node concept="37vLTw" id="7gMIJIynNhb" role="25WWJ7">
<ref role="3cqZAo" node="12yN8DyDOdM" resolve="tpl" />
</node>
</node>
</node>
</node>
<node concept="TSZUe" id="7XdbJdyJJ2d" role="2OqNvi">
<node concept="37vLTw" id="7XdbJdyJN8d" role="25WWJ7">
<ref role="3cqZAo" node="12yN8DyDOdM" resolve="tpl" />
</node>
<node concept="22lmx$" id="7XdbJdyJKV2" role="3clFbw">
<node concept="3clFbC" id="7XdbJdyJKCF" role="3uHU7B">
<node concept="37vLTw" id="12yN8DyDPny" role="3uHU7B">
<ref role="3cqZAo" node="12yN8Dywu8Q" resolve="cptIdx" />
</node>
<node concept="3cmrfG" id="12yN8DyDPNL" role="3uHU7w">
<property role="3cmrfH" value="0" />
</node>
</node>
<node concept="3fqX7Q" id="7XdbJdyJLha" role="3uHU7w">
<node concept="2OqwBi" id="7XdbJdyJLhc" role="3fr31v">
<node concept="liA8E" id="7XdbJdyJLhe" role="2OqNvi">
<ref role="37wK5l" to="i348:7XdbJdz3PF6" resolve="isExactMatch" />
</node>
<node concept="37vLTw" id="6tPOoeTaKuA" role="2Oq$k0">
<ref role="3cqZAo" node="12yN8DyDOdM" resolve="tpl" />
</node>
</node>
</node>
</node>
</node>
</node>
<node concept="22lmx$" id="7XdbJdyJKV2" role="3clFbw">
<node concept="3clFbC" id="7XdbJdyJKCF" role="3uHU7B">
<node concept="37vLTw" id="12yN8DyDPny" role="3uHU7B">
<ref role="3cqZAo" node="12yN8Dywu8Q" resolve="cptIdx" />
</node>
<node concept="3cmrfG" id="12yN8DyDPNL" role="3uHU7w">
<property role="3cmrfH" value="0" />
</node>
</node>
<node concept="3fqX7Q" id="7XdbJdyJLha" role="3uHU7w">
<node concept="2OqwBi" id="7XdbJdyJLhc" role="3fr31v">
<node concept="liA8E" id="7XdbJdyJLhe" role="2OqNvi">
<ref role="37wK5l" to="i348:7XdbJdz3PF6" resolve="isExactMatch" />
</node>
<node concept="37vLTw" id="6tPOoeTaKuA" role="2Oq$k0">
<ref role="3cqZAo" node="12yN8DyDOdM" resolve="tpl" />
</node>
</node>
<node concept="3cpWsn" id="12yN8DyDOdM" role="1Duv9x">
<property role="TrG5h" value="tpl" />
<node concept="3uibUv" id="6tPOoeTaJl8" role="1tU5fm">
<ref role="3uigEE" to="i348:1ffsG7bUbCM" resolve="AbstractRuleTemplate" />
<node concept="3qTvmN" id="7gMIJIyn0Eu" role="11_B2D" />
</node>
</node>
<node concept="37vLTw" id="12yN8DyDOdR" role="1DdaDG">
<ref role="3cqZAo" node="12yN8DywoJ9" resolve="matching" />
</node>
</node>
</node>
<node concept="3cpWsn" id="12yN8DyDOdM" role="1Duv9x">
<property role="TrG5h" value="tpl" />
<node concept="3uibUv" id="6tPOoeTaJl8" role="1tU5fm">
<ref role="3uigEE" to="i348:1ffsG7bUbCM" resolve="AbstractRuleTemplate" />
<node concept="3qUE_q" id="6tPOoeTaJl9" role="11_B2D">
<node concept="3uibUv" id="6tPOoeTaJla" role="3qUE_r">
<ref role="3uigEE" to="i348:2RRx4MZ6_68" resolve="RuleTemplate.Token" />
</node>
<node concept="2OqwBi" id="12yN8DywaUF" role="3clFbw">
<node concept="37vLTw" id="12yN8Dyw7ap" role="2Oq$k0">
<ref role="3cqZAo" node="12yN8DyvDfi" resolve="concept2ruleTemplates" />
</node>
<node concept="2Nt0df" id="12yN8Dywmhb" role="2OqNvi">
<node concept="37vLTw" id="12yN8Dywuld" role="38cxEo">
<ref role="3cqZAo" node="12yN8Dywugn" resolve="cpt" />
</node>
</node>
</node>
<node concept="37vLTw" id="12yN8DyDOdR" role="1DdaDG">
<ref role="3cqZAo" node="12yN8DywoJ9" resolve="matching" />
</node>
</node>
</node>
<node concept="2OqwBi" id="12yN8DywaUF" role="3clFbw">
<node concept="37vLTw" id="12yN8Dyw7ap" role="2Oq$k0">
<ref role="3cqZAo" node="12yN8DyvDfi" resolve="concept2ruleTemplates" />
</node>
<node concept="2Nt0df" id="12yN8Dywmhb" role="2OqNvi">
<node concept="37vLTw" id="12yN8Dywuld" role="38cxEo">
<ref role="3cqZAo" node="12yN8Dywugn" resolve="cpt" />
</node>
</node>
</node>
</node>
</node>
<node concept="3clFbC" id="7gMIJIynDAh" role="3clFbw">
<node concept="10Nm6u" id="7gMIJIynDVw" role="3uHU7w" />
<node concept="37vLTw" id="7gMIJIynCZI" role="3uHU7B">
<ref role="3cqZAo" node="7gMIJIyn$43" resolve="allMatching" />
</node>
</node>
</node>
<node concept="3clFbH" id="tIwzd1KAYA" role="3cqZAp" />
<node concept="3cpWs6" id="12yN8DyDYJd" role="3cqZAp">
<node concept="37vLTw" id="12yN8DyDYJe" role="3cqZAk">
<ref role="3cqZAo" node="12yN8DyvAUk" resolve="result" />
<node concept="37vLTw" id="7gMIJIyo2Xy" role="3cqZAk">
<ref role="3cqZAo" node="7gMIJIyn$43" resolve="allMatching" />
</node>
</node>
</node>
@ -2021,21 +2047,17 @@
<node concept="3clFbH" id="4MqhgXUlY8K" role="3cqZAp" />
<node concept="3cpWs8" id="4MqhgXUaPfU" role="3cqZAp">
<node concept="3cpWsn" id="4MqhgXUaPfV" role="3cpWs9">
<property role="TrG5h" value="stageTemplate" />
<property role="TrG5h" value="templates" />
<node concept="3vKaQO" id="4MqhgXUaPfW" role="1tU5fm">
<node concept="3uibUv" id="7XdbJdySsFg" role="3O5elw">
<ref role="3uigEE" to="i348:1ffsG7bUbCM" resolve="AbstractRuleTemplate" />
<node concept="3qUE_q" id="7XdbJdySsFh" role="11_B2D">
<node concept="3uibUv" id="7XdbJdySsFi" role="3qUE_r">
<ref role="3uigEE" to="i348:2RRx4MZ6_68" resolve="RuleTemplate.Token" />
</node>
</node>
<node concept="3qTvmN" id="7gMIJIymQUa" role="11_B2D" />
</node>
</node>
<node concept="3EllGN" id="4MqhgXUaPfY" role="33vP2m">
<node concept="2OqwBi" id="4MqhgXUaPfZ" role="3ElVtu">
<node concept="37vLTw" id="4MqhgXUaPg0" role="2Oq$k0">
<ref role="3cqZAo" node="4MqhgXUaONz" resolve="ruleTemplate" />
<ref role="3cqZAo" node="4MqhgXUaONz" resolve="tpl" />
</node>
<node concept="liA8E" id="4MqhgXUaPg1" role="2OqNvi">
<ref role="37wK5l" to="i348:1ffsG7bWxkw" resolve="applicableConcept" />
@ -2057,23 +2079,19 @@
<node concept="Tc6Ow" id="4MqhgXUaPga" role="2ShVmc">
<node concept="3uibUv" id="6tPOoeTaAOM" role="HW$YZ">
<ref role="3uigEE" to="i348:1ffsG7bUbCM" resolve="AbstractRuleTemplate" />
<node concept="3qUE_q" id="6tPOoeTaAON" role="11_B2D">
<node concept="3uibUv" id="6tPOoeTaAOO" role="3qUE_r">
<ref role="3uigEE" to="i348:2RRx4MZ6_68" resolve="RuleTemplate.Token" />
</node>
</node>
<node concept="3qTvmN" id="7gMIJIymRiH" role="11_B2D" />
</node>
</node>
</node>
<node concept="37vLTw" id="4MqhgXUaPgc" role="37vLTJ">
<ref role="3cqZAo" node="4MqhgXUaPfV" resolve="stageTemplate" />
<ref role="3cqZAo" node="4MqhgXUaPfV" resolve="templates" />
</node>
</node>
</node>
<node concept="3EllGN" id="4MqhgXUaPgd" role="37vLTJ">
<node concept="2OqwBi" id="4MqhgXUaPge" role="3ElVtu">
<node concept="37vLTw" id="4MqhgXUaPgf" role="2Oq$k0">
<ref role="3cqZAo" node="4MqhgXUaONz" resolve="ruleTemplate" />
<ref role="3cqZAo" node="4MqhgXUaONz" resolve="tpl" />
</node>
<node concept="liA8E" id="4MqhgXUaPgg" role="2OqNvi">
<ref role="37wK5l" to="i348:1ffsG7bWxkw" resolve="applicableConcept" />
@ -2089,7 +2107,7 @@
<node concept="3clFbC" id="4MqhgXUaPgi" role="3clFbw">
<node concept="10Nm6u" id="4MqhgXUaPgj" role="3uHU7w" />
<node concept="37vLTw" id="4MqhgXUaPgk" role="3uHU7B">
<ref role="3cqZAo" node="4MqhgXUaPfV" resolve="stageTemplate" />
<ref role="3cqZAo" node="4MqhgXUaPfV" resolve="templates" />
</node>
</node>
</node>
@ -2113,21 +2131,17 @@
<node concept="3clFbF" id="4MqhgXUaPgl" role="3cqZAp">
<node concept="2OqwBi" id="4MqhgXUaPgm" role="3clFbG">
<node concept="37vLTw" id="4MqhgXUaPgn" role="2Oq$k0">
<ref role="3cqZAo" node="4MqhgXUaPfV" resolve="stageTemplate" />
<ref role="3cqZAo" node="4MqhgXUaPfV" resolve="templates" />
</node>
<node concept="TSZUe" id="4MqhgXUaPgo" role="2OqNvi">
<node concept="1eOMI4" id="3IIf9OAyh5v" role="25WWJ7">
<node concept="10QFUN" id="3IIf9OAyh5w" role="1eOMHV">
<node concept="37vLTw" id="3IIf9OAyh5u" role="10QFUP">
<ref role="3cqZAo" node="4MqhgXUaONz" resolve="ruleTemplate" />
<node concept="37vLTw" id="7gMIJIynaMB" role="10QFUP">
<ref role="3cqZAo" node="4MqhgXUaONz" resolve="tpl" />
</node>
<node concept="3uibUv" id="3IIf9OAyhfn" role="10QFUM">
<ref role="3uigEE" to="i348:1ffsG7bUbCM" resolve="AbstractRuleTemplate" />
<node concept="3qUE_q" id="3IIf9OAyXlP" role="11_B2D">
<node concept="3uibUv" id="3IIf9OAyXlQ" role="3qUE_r">
<ref role="3uigEE" to="i348:2RRx4MZ6_68" resolve="RuleTemplate.Token" />
</node>
</node>
<node concept="3qTvmN" id="7gMIJIynaSL" role="11_B2D" />
</node>
</node>
</node>
@ -2136,14 +2150,10 @@
</node>
</node>
<node concept="3cpWsn" id="4MqhgXUaONz" role="1Duv9x">
<property role="TrG5h" value="ruleTemplate" />
<property role="TrG5h" value="tpl" />
<node concept="3uibUv" id="7XdbJdySBO1" role="1tU5fm">
<ref role="3uigEE" to="i348:1ffsG7bW_V4" resolve="RuleTemplate" />
<node concept="3qUE_q" id="7XdbJdySBO2" role="11_B2D">
<node concept="3uibUv" id="7XdbJdySBO3" role="3qUE_r">
<ref role="3uigEE" to="i348:2RRx4MZ6_68" resolve="RuleTemplate.Token" />
</node>
</node>
<node concept="3qTvmN" id="7gMIJIymP7P" role="11_B2D" />
</node>
</node>
<node concept="2OqwBi" id="4MqhgXUaONC" role="1DdaDG">
@ -2177,11 +2187,7 @@
<node concept="3vKaQO" id="12yN8DyDzne" role="3rvSg0">
<node concept="3uibUv" id="7XdbJdyRSXd" role="3O5elw">
<ref role="3uigEE" to="i348:1ffsG7bUbCM" resolve="AbstractRuleTemplate" />
<node concept="3qUE_q" id="7XdbJdyRSXe" role="11_B2D">
<node concept="3uibUv" id="7XdbJdyRSXf" role="3qUE_r">
<ref role="3uigEE" to="i348:2RRx4MZ6_68" resolve="RuleTemplate.Token" />
</node>
</node>
<node concept="3qTvmN" id="7gMIJIymJOx" role="11_B2D" />
</node>
</node>
</node>
@ -2191,11 +2197,32 @@
<node concept="3vKaQO" id="429xoypKEop" role="3rHtpV">
<node concept="3uibUv" id="6tPOoeTa_2l" role="3O5elw">
<ref role="3uigEE" to="i348:1ffsG7bUbCM" resolve="AbstractRuleTemplate" />
<node concept="3qUE_q" id="6tPOoeTa_2m" role="11_B2D">
<node concept="3uibUv" id="6tPOoeTa_2n" role="3qUE_r">
<ref role="3uigEE" to="i348:2RRx4MZ6_68" resolve="RuleTemplate.Token" />
</node>
</node>
<node concept="3qTvmN" id="7gMIJIymMCO" role="11_B2D" />
</node>
</node>
</node>
</node>
</node>
<node concept="2tJIrI" id="7gMIJIynum8" role="jymVt" />
<node concept="312cEg" id="7gMIJIynsDv" role="jymVt">
<property role="TrG5h" value="concept2matching" />
<node concept="3Tm6S6" id="7gMIJIynsDw" role="1B3o_S" />
<node concept="3rvAFt" id="7gMIJIynsDx" role="1tU5fm">
<node concept="3bZ5Sz" id="7gMIJIynsDy" role="3rvQeY" />
<node concept="3vKaQO" id="7gMIJIynsDz" role="3rvSg0">
<node concept="3uibUv" id="7gMIJIynsD$" role="3O5elw">
<ref role="3uigEE" to="i348:1ffsG7bUbCM" resolve="AbstractRuleTemplate" />
<node concept="3qTvmN" id="7gMIJIynsD_" role="11_B2D" />
</node>
</node>
</node>
<node concept="2ShNRf" id="7gMIJIynsDA" role="33vP2m">
<node concept="3rGOSV" id="7gMIJIynsDB" role="2ShVmc">
<node concept="3bZ5Sz" id="7gMIJIynsDC" role="3rHrn6" />
<node concept="3vKaQO" id="7gMIJIynsDD" role="3rHtpV">
<node concept="3uibUv" id="7gMIJIynsDE" role="3O5elw">
<ref role="3uigEE" to="i348:1ffsG7bUbCM" resolve="AbstractRuleTemplate" />
<node concept="3qTvmN" id="7gMIJIynsDF" role="11_B2D" />
</node>
</node>
</node>