Introduce ruleInput parameter to call macro

Accessing the rule input allows to track dependencies
necessary for correctly updating the feedback.
This commit is contained in:
Fedor Isakov 2022-05-09 17:02:12 +02:00
parent a6f56d4193
commit b6c190c35c
3 changed files with 258 additions and 17 deletions

View File

@ -10305,7 +10305,12 @@
</node>
</node>
<node concept="liA8E" id="5itBwM7X0P0" role="2OqNvi">
<ref role="37wK5l" to="i348:5itBwM7V_fy" resolve="callMacro" />
<ref role="37wK5l" to="i348:1VeWL_e3Rvy" resolve="callMacro" />
<node concept="10Nm6u" id="1VeWL_e4aBL" role="37wK5m">
<node concept="1sPUBX" id="1VeWL_e4aBM" role="lGtFl">
<ref role="v9R2y" node="2LxIQen0ctm" resolve="implicit_rule_input_reference" />
</node>
</node>
<node concept="2YIFZM" id="5itBwM7X0UU" role="37wK5m">
<ref role="1Pybhc" to="w1kc:~SNodePointer" resolve="SNodePointer" />
<ref role="37wK5l" to="w1kc:~SNodePointer.deserialize(java.lang.String)" resolve="deserialize" />
@ -13687,10 +13692,13 @@
<property role="TrG5h" value="_Call" />
<node concept="2tJIrI" id="5itBwM5E2K3" role="jymVt" />
<node concept="312cEu" id="5itBwM5JjhA" role="jymVt">
<property role="2bfB8j" value="true" />
<property role="TrG5h" value="Token" />
<node concept="2tJIrI" id="5itBwM5TipI" role="jymVt" />
<node concept="3clFbW" id="5itBwM5TmEO" role="jymVt">
<node concept="37vLTG" id="1VeWL_e4lSS" role="3clF46">
<property role="TrG5h" value="ruleInput" />
<node concept="3Tqbb2" id="1VeWL_e4lST" role="1tU5fm" />
</node>
<node concept="37vLTG" id="5itBwM60U_p" role="3clF46">
<property role="TrG5h" value="session" />
<node concept="3uibUv" id="5itBwM60VoO" role="1tU5fm">
@ -13700,6 +13708,19 @@
<node concept="3cqZAl" id="5itBwM5TmEQ" role="3clF45" />
<node concept="3Tmbuc" id="5itBwM7aGHV" role="1B3o_S" />
<node concept="3clFbS" id="5itBwM5TmES" role="3clF47">
<node concept="3clFbF" id="1VeWL_e4s0F" role="3cqZAp">
<node concept="37vLTI" id="1VeWL_e4s0G" role="3clFbG">
<node concept="37vLTw" id="1VeWL_e4s0H" role="37vLTx">
<ref role="3cqZAo" node="1VeWL_e4lSS" resolve="ruleInput" />
</node>
<node concept="2OqwBi" id="1VeWL_e4s0I" role="37vLTJ">
<node concept="Xjq3P" id="1VeWL_e4s0J" role="2Oq$k0" />
<node concept="2OwXpG" id="1VeWL_e4s0K" role="2OqNvi">
<ref role="2Oxat5" node="1VeWL_e4gSz" resolve="ruleInput" />
</node>
</node>
</node>
</node>
<node concept="3clFbF" id="5itBwM60WcR" role="3cqZAp">
<node concept="37vLTI" id="5itBwM60WTA" role="3clFbG">
<node concept="37vLTw" id="5itBwM60Xmr" role="37vLTx">
@ -14145,6 +14166,22 @@
</node>
</node>
</node>
<node concept="2tJIrI" id="1VeWL_e4vT6" role="jymVt" />
<node concept="3clFb_" id="1VeWL_e4uhv" role="jymVt">
<property role="TrG5h" value="token" />
<node concept="3Tmbuc" id="1VeWL_e4uhx" role="1B3o_S" />
<node concept="3clFbS" id="1VeWL_e4uhy" role="3clF47">
<node concept="3clFbF" id="1VeWL_e4uhz" role="3cqZAp">
<node concept="Xjq3P" id="1VeWL_e4uh$" role="3clFbG" />
</node>
</node>
<node concept="2ZBi8u" id="1VeWL_e4uh_" role="lGtFl">
<ref role="2rW$FS" node="C1f6iElasQ" resolve="macro_token_method" />
</node>
<node concept="3uibUv" id="1VeWL_e4OC5" role="3clF45">
<ref role="3uigEE" node="5itBwM5JjhA" resolve="Token" />
</node>
</node>
<node concept="2tJIrI" id="5itBwM5TiN4" role="jymVt" />
<node concept="312cEg" id="5itBwM5SoMw" role="jymVt">
<property role="TrG5h" value="session" />
@ -14230,7 +14267,14 @@
<ref role="v9R2y" node="452KZTbxEFE" resolve="contextName_field_declaration" />
</node>
</node>
<node concept="2tJIrI" id="5itBwM5TiN7" role="jymVt" />
<node concept="312cEg" id="1VeWL_e4gSz" role="jymVt">
<property role="TrG5h" value="ruleInput" />
<node concept="3Tmbuc" id="1VeWL_e4gS$" role="1B3o_S" />
<node concept="3Tqbb2" id="1VeWL_e4gS_" role="1tU5fm" />
<node concept="2ZBi8u" id="1VeWL_e4gSA" role="lGtFl">
<ref role="2rW$FS" node="At0yqLVlmo" resolve="macro_ruleInputNode_field" />
</node>
</node>
<node concept="3Tm1VV" id="5itBwM5JjhB" role="1B3o_S" />
<node concept="3uibUv" id="5itBwM8aqrA" role="EKbjA">
<ref role="3uigEE" to="i348:5itBwM86qnn" resolve="CallMacroTemplate.Token" />
@ -14344,6 +14388,10 @@
</node>
<node concept="3clFb_" id="5itBwM7fU2s" role="jymVt">
<property role="TrG5h" value="createToken" />
<node concept="37vLTG" id="1VeWL_ePxDA" role="3clF46">
<property role="TrG5h" value="ruleInput" />
<node concept="3Tqbb2" id="1VeWL_ePywI" role="1tU5fm" />
</node>
<node concept="37vLTG" id="5itBwM7fU2t" role="3clF46">
<property role="TrG5h" value="session" />
<node concept="3uibUv" id="5itBwM7fU2u" role="1tU5fm">
@ -14359,6 +14407,9 @@
<node concept="2ShNRf" id="5itBwM639v7" role="3clFbG">
<node concept="1pGfFk" id="5itBwM63b0f" role="2ShVmc">
<ref role="37wK5l" node="5itBwM5TmEO" resolve="__MacroTable._Call.Token" />
<node concept="37vLTw" id="1VeWL_eP$pL" role="37wK5m">
<ref role="3cqZAo" node="1VeWL_ePxDA" resolve="ruleInput" />
</node>
<node concept="37vLTw" id="5itBwM7ibY0" role="37wK5m">
<ref role="3cqZAo" node="5itBwM7fU2t" resolve="session" />
</node>
@ -18464,6 +18515,35 @@
</node>
</node>
</node>
<node concept="1W57fq" id="1VeWL_eCprb" role="lGtFl">
<node concept="3IZrLx" id="1VeWL_eCprc" role="3IZSJc">
<node concept="3clFbS" id="1VeWL_eCprd" role="2VODD2">
<node concept="3clFbF" id="1VeWL_eCpPT" role="3cqZAp">
<node concept="2OqwBi" id="1VeWL_eCr4$" role="3clFbG">
<node concept="2OqwBi" id="1VeWL_eCqeu" role="2Oq$k0">
<node concept="2OqwBi" id="1VeWL_eCpPV" role="2Oq$k0">
<node concept="30H73N" id="1VeWL_eCpPW" role="2Oq$k0" />
<node concept="2Xjw5R" id="1VeWL_eCpPX" role="2OqNvi">
<node concept="1xMEDy" id="1VeWL_eCpPY" role="1xVPHs">
<node concept="chp4Y" id="1VeWL_eCpPZ" role="ri$Ld">
<ref role="cht4Q" to="wq2x:36tQV5AmIsf" resolve="RuleTemplate" />
</node>
</node>
</node>
</node>
<node concept="3TrEf2" id="1VeWL_eCqNI" role="2OqNvi">
<ref role="3Tt5mk" to="wq2x:36tQV5AmIsx" resolve="input" />
</node>
</node>
<node concept="3x8VRR" id="1VeWL_eCrnb" role="2OqNvi" />
</node>
</node>
</node>
</node>
<node concept="gft3U" id="1VeWL_eCpCS" role="UU_$l">
<node concept="10Nm6u" id="1VeWL_eCpGK" role="gfFT$" />
</node>
</node>
</node>
</node>
</node>
@ -18487,7 +18567,7 @@
<node concept="2Xjw5R" id="C1f6iEkTqD" role="2OqNvi">
<node concept="1xMEDy" id="C1f6iEkTqE" role="1xVPHs">
<node concept="chp4Y" id="C1f6iEkTO5" role="ri$Ld">
<ref role="cht4Q" to="wq2x:5itBwM65AQ4" resolve="ExpandMacroTemplate" />
<ref role="cht4Q" to="wq2x:5itBwM56wgT" resolve="MacroTemplate" />
</node>
</node>
</node>
@ -18537,7 +18617,7 @@
<node concept="2Xjw5R" id="C1f6iEkTr5" role="2OqNvi">
<node concept="1xMEDy" id="C1f6iEkTr6" role="1xVPHs">
<node concept="chp4Y" id="C1f6iElfiZ" role="ri$Ld">
<ref role="cht4Q" to="wq2x:5itBwM65AQ4" resolve="ExpandMacroTemplate" />
<ref role="cht4Q" to="wq2x:5itBwM56wgT" resolve="MacroTemplate" />
</node>
</node>
</node>
@ -18567,7 +18647,7 @@
<node concept="2Xjw5R" id="C1f6iEkTrj" role="2OqNvi">
<node concept="1xMEDy" id="C1f6iEkTrk" role="1xVPHs">
<node concept="chp4Y" id="C1f6iEldjo" role="ri$Ld">
<ref role="cht4Q" to="wq2x:5itBwM65AQ4" resolve="ExpandMacroTemplate" />
<ref role="cht4Q" to="wq2x:5itBwM56wgT" resolve="MacroTemplate" />
</node>
</node>
</node>

View File

@ -11802,13 +11802,69 @@
</node>
</node>
<node concept="3clFbS" id="5itBwM7VEv2" role="3clF47">
<node concept="3clFbF" id="1VeWL_e58dz" role="3cqZAp">
<node concept="1rXfSq" id="1VeWL_e58dy" role="3clFbG">
<ref role="37wK5l" node="1VeWL_e4YPc" resolve="callMacro" />
<node concept="10Nm6u" id="1VeWL_e59MB" role="37wK5m" />
<node concept="37vLTw" id="1VeWL_e5b_h" role="37wK5m">
<ref role="3cqZAo" node="5itBwM7VEuQ" resolve="callMacroTemplateRef" />
</node>
<node concept="37vLTw" id="1VeWL_e5dnO" role="37wK5m">
<ref role="3cqZAo" node="5itBwM7VEuS" resolve="proc" />
</node>
</node>
</node>
</node>
<node concept="2AHcQZ" id="5itBwM7VEv3" role="2AJF6D">
<ref role="2AI5Lk" to="wyt6:~Override" resolve="Override" />
</node>
</node>
<node concept="2tJIrI" id="5itBwM7VFqM" role="jymVt" />
<node concept="3Tm1VV" id="7DvO2M9IiOz" role="1B3o_S" />
<node concept="3clFb_" id="1VeWL_e4YPc" role="jymVt">
<property role="TrG5h" value="callMacro" />
<node concept="37vLTG" id="1VeWL_e4YPd" role="3clF46">
<property role="TrG5h" value="ruleInput" />
<node concept="3Tqbb2" id="1VeWL_e4YPe" role="1tU5fm" />
</node>
<node concept="37vLTG" id="1VeWL_e4YPf" role="3clF46">
<property role="TrG5h" value="callMacroTemplateRef" />
<node concept="3uibUv" id="1VeWL_e4YPg" role="1tU5fm">
<ref role="3uigEE" to="mhbf:~SNodeReference" resolve="SNodeReference" />
</node>
</node>
<node concept="37vLTG" id="1VeWL_e4YPh" role="3clF46">
<property role="TrG5h" value="proc" />
<node concept="3uibUv" id="1VeWL_e4YPi" role="1tU5fm">
<ref role="3uigEE" to="82uw:~Function" resolve="Function" />
<node concept="3qUtgH" id="1VeWL_e4YPj" role="11_B2D">
<node concept="16syzq" id="1VeWL_e4YPk" role="3qUvdb">
<ref role="16sUi3" node="1VeWL_e4YPp" resolve="T" />
</node>
</node>
<node concept="3uibUv" id="1VeWL_e4YPl" role="11_B2D">
<ref role="3uigEE" to="i348:7eGEHDlc$ap" resolve="RuleBuilder" />
</node>
</node>
</node>
<node concept="3uibUv" id="1VeWL_e4YPm" role="3clF45">
<ref role="3uigEE" to="i348:7eGEHDlc$ap" resolve="RuleBuilder" />
</node>
<node concept="3Tm1VV" id="1VeWL_e4YPn" role="1B3o_S" />
<node concept="16euLQ" id="1VeWL_e4YPp" role="16eVyc">
<property role="TrG5h" value="T" />
<node concept="3uibUv" id="1VeWL_e4YPq" role="3ztrMU">
<ref role="3uigEE" to="i348:5itBwM86qnn" resolve="Token" />
</node>
</node>
<node concept="3clFbS" id="1VeWL_e4YPr" role="3clF47">
<node concept="3cpWs8" id="5itBwM7W$4z" role="3cqZAp">
<node concept="3cpWsn" id="5itBwM7W$4$" role="3cpWs9">
<property role="TrG5h" value="tpl" />
<node concept="3uibUv" id="5itBwM7W$4_" role="1tU5fm">
<ref role="3uigEE" to="i348:5itBwM7auSJ" resolve="CallMacroTemplate" />
<node concept="16syzq" id="5itBwM7W$4A" role="11_B2D">
<ref role="16sUi3" node="5itBwM7VEv0" resolve="T" />
<ref role="16sUi3" node="1VeWL_e4YPp" resolve="T" />
</node>
</node>
<node concept="2OqwBi" id="5itBwM7W$4B" role="33vP2m">
@ -11823,10 +11879,10 @@
<node concept="liA8E" id="5itBwM7W$4D" role="2OqNvi">
<ref role="37wK5l" to="hano:5itBwM7WF$n" resolve="callMacroTemplate" />
<node concept="37vLTw" id="5itBwM7WBEk" role="37wK5m">
<ref role="3cqZAo" node="5itBwM7VEuQ" resolve="callMacroTemplateRef" />
<ref role="3cqZAo" node="1VeWL_e4YPf" resolve="callMacroTemplateRef" />
</node>
<node concept="16syzq" id="5itBwM7W$4H" role="3PaCim">
<ref role="16sUi3" node="5itBwM7VEv0" resolve="T" />
<ref role="16sUi3" node="1VeWL_e4YPp" resolve="T" />
</node>
</node>
</node>
@ -11838,14 +11894,17 @@
<node concept="3cpWsn" id="5itBwM7W$4L" role="3cpWs9">
<property role="TrG5h" value="tok" />
<node concept="16syzq" id="5itBwM7W$4M" role="1tU5fm">
<ref role="16sUi3" node="5itBwM7VEv0" resolve="T" />
<ref role="16sUi3" node="1VeWL_e4YPp" resolve="T" />
</node>
<node concept="2OqwBi" id="5itBwM7W$4N" role="33vP2m">
<node concept="37vLTw" id="5itBwM7W$4O" role="2Oq$k0">
<ref role="3cqZAo" node="5itBwM7W$4$" resolve="tpl" />
</node>
<node concept="liA8E" id="5itBwM7W$4P" role="2OqNvi">
<ref role="37wK5l" to="i348:5ynGfcflmnm" resolve="createToken" />
<ref role="37wK5l" to="i348:1VeWL_ePsIw" resolve="createToken" />
<node concept="37vLTw" id="1VeWL_ePryi" role="37wK5m">
<ref role="3cqZAo" node="1VeWL_e4YPd" resolve="ruleInput" />
</node>
<node concept="Xjq3P" id="5itBwM7W$4R" role="37wK5m" />
</node>
</node>
@ -11854,7 +11913,7 @@
<node concept="3cpWs6" id="5itBwM7W$4S" role="3cqZAp">
<node concept="2OqwBi" id="5itBwM7W$4T" role="3cqZAk">
<node concept="37vLTw" id="5itBwM7W$4U" role="2Oq$k0">
<ref role="3cqZAo" node="5itBwM7VEuS" resolve="proc" />
<ref role="3cqZAo" node="1VeWL_e4YPh" resolve="proc" />
</node>
<node concept="liA8E" id="5itBwM7W$4V" role="2OqNvi">
<ref role="37wK5l" to="82uw:~Function.apply(java.lang.Object)" resolve="apply" />
@ -11884,12 +11943,11 @@
</node>
</node>
</node>
<node concept="2AHcQZ" id="5itBwM7VEv3" role="2AJF6D">
<ref role="2AI5Lk" to="wyt6:~Override" resolve="Override" />
<node concept="2AHcQZ" id="1VeWL_e4YPs" role="2AJF6D">
<ref role="2AI5Lk" to="wyt6:~Override" />
</node>
</node>
<node concept="2tJIrI" id="5itBwM7VFqM" role="jymVt" />
<node concept="3Tm1VV" id="7DvO2M9IiOz" role="1B3o_S" />
<node concept="2tJIrI" id="1VeWL_e50EC" role="jymVt" />
<node concept="312cEg" id="7DvO2Ma0klb" role="jymVt">
<property role="TrG5h" value="ruleProcessingSession" />
<node concept="3Tm6S6" id="7DvO2Ma0klc" role="1B3o_S" />

View File

@ -147,6 +147,9 @@
<property id="1176718929932" name="isFinal" index="3TUv4t" />
<child id="1068431790190" name="initializer" index="33vP2m" />
</concept>
<concept id="1513279640923991009" name="jetbrains.mps.baseLanguage.structure.IGenericClassCreator" flags="ng" index="366HgL">
<property id="1513279640906337053" name="inferTypeParams" index="373rjd" />
</concept>
<concept id="1109279763828" name="jetbrains.mps.baseLanguage.structure.TypeVariableDeclaration" flags="ng" index="16euLQ">
<child id="1214996921760" name="bound" index="3ztrMU" />
</concept>
@ -2642,6 +2645,55 @@
<ref role="3uigEE" node="5itBwM86qnn" resolve="CallMacroTemplate.Token" />
</node>
</node>
<node concept="2AHcQZ" id="1VeWL_e41aj" role="2AJF6D">
<ref role="2AI5Lk" to="wyt6:~Deprecated" />
<node concept="2B6LJw" id="1VeWL_e44V9" role="2B76xF">
<ref role="2B6OnR" to="wyt6:~Deprecated.forRemoval()" resolve="forRemoval" />
<node concept="3clFbT" id="1VeWL_e44Yn" role="2B70Vg">
<property role="3clFbU" value="true" />
</node>
</node>
</node>
</node>
<node concept="2tJIrI" id="1VeWL_e3V_9" role="jymVt" />
<node concept="3clFb_" id="1VeWL_e3Rvy" role="jymVt">
<property role="TrG5h" value="callMacro" />
<property role="1EzhhJ" value="true" />
<node concept="37vLTG" id="1VeWL_e44YA" role="3clF46">
<property role="TrG5h" value="ruleInput" />
<node concept="3Tqbb2" id="1VeWL_e46z_" role="1tU5fm" />
</node>
<node concept="37vLTG" id="1VeWL_e3Rvz" role="3clF46">
<property role="TrG5h" value="callMacroTemplateRef" />
<node concept="3uibUv" id="1VeWL_e3Rv$" role="1tU5fm">
<ref role="3uigEE" to="mhbf:~SNodeReference" resolve="SNodeReference" />
</node>
</node>
<node concept="37vLTG" id="1VeWL_e3Rv_" role="3clF46">
<property role="TrG5h" value="proc" />
<node concept="3uibUv" id="1VeWL_e3RvA" role="1tU5fm">
<ref role="3uigEE" to="82uw:~Function" resolve="Function" />
<node concept="3qUtgH" id="1VeWL_e3RvB" role="11_B2D">
<node concept="16syzq" id="1VeWL_e3RvC" role="3qUvdb">
<ref role="16sUi3" node="1VeWL_e3RvH" resolve="T" />
</node>
</node>
<node concept="3uibUv" id="1VeWL_e3RvD" role="11_B2D">
<ref role="3uigEE" node="7eGEHDlc$ap" resolve="RuleBuilder" />
</node>
</node>
</node>
<node concept="3uibUv" id="1VeWL_e3RvE" role="3clF45">
<ref role="3uigEE" node="7eGEHDlc$ap" resolve="RuleBuilder" />
</node>
<node concept="3Tm1VV" id="1VeWL_e3RvF" role="1B3o_S" />
<node concept="3clFbS" id="1VeWL_e3RvG" role="3clF47" />
<node concept="16euLQ" id="1VeWL_e3RvH" role="16eVyc">
<property role="TrG5h" value="T" />
<node concept="3uibUv" id="1VeWL_e3RvI" role="3ztrMU">
<ref role="3uigEE" node="5itBwM86qnn" resolve="Token" />
</node>
</node>
</node>
<node concept="2tJIrI" id="5itBwM7VoD8" role="jymVt" />
<node concept="3clFb_" id="61G6TdBpSf1" role="jymVt">
@ -7927,7 +7979,58 @@
<ref role="16sUi3" node="5itBwM7awuy" resolve="T" />
</node>
<node concept="3Tm1VV" id="5ynGfcflmnp" role="1B3o_S" />
<node concept="3clFbS" id="5ynGfcflmnq" role="3clF47" />
<node concept="3clFbS" id="5ynGfcflmnq" role="3clF47">
<node concept="YS8fn" id="1VeWL_f9r6F" role="3cqZAp">
<node concept="2ShNRf" id="1VeWL_f9r9w" role="YScLw">
<node concept="1pGfFk" id="1VeWL_f9sUv" role="2ShVmc">
<property role="373rjd" value="true" />
<ref role="37wK5l" to="wyt6:~UnsupportedOperationException.&lt;init&gt;(java.lang.String)" resolve="UnsupportedOperationException" />
<node concept="Xl_RD" id="1VeWL_f9t7_" role="37wK5m">
<property role="Xl_RC" value="obsolete method" />
</node>
</node>
</node>
</node>
</node>
<node concept="2JFqV2" id="1VeWL_ePsGF" role="2frcjj" />
<node concept="2AHcQZ" id="1VeWL_f9we9" role="2AJF6D">
<ref role="2AI5Lk" to="wyt6:~Deprecated" />
<node concept="2B6LJw" id="1VeWL_f9wpn" role="2B76xF">
<ref role="2B6OnR" to="wyt6:~Deprecated.forRemoval()" resolve="forRemoval" />
<node concept="3clFbT" id="1VeWL_f9wr6" role="2B70Vg">
<property role="3clFbU" value="true" />
</node>
</node>
</node>
</node>
<node concept="2tJIrI" id="1VeWL_ePsH3" role="jymVt" />
<node concept="3clFb_" id="1VeWL_ePsIw" role="jymVt">
<property role="TrG5h" value="createToken" />
<node concept="37vLTG" id="1VeWL_ePv$0" role="3clF46">
<property role="TrG5h" value="ruleInput" />
<node concept="3Tqbb2" id="1VeWL_ePv_K" role="1tU5fm" />
</node>
<node concept="37vLTG" id="1VeWL_ePsO7" role="3clF46">
<property role="TrG5h" value="session" />
<node concept="3uibUv" id="1VeWL_ePsQ1" role="1tU5fm">
<ref role="3uigEE" node="18kNIl1vDPZ" resolve="TemplateApplicationSession" />
</node>
</node>
<node concept="16syzq" id="1VeWL_ePsKD" role="3clF45">
<ref role="16sUi3" node="5itBwM7awuy" resolve="T" />
</node>
<node concept="3Tm1VV" id="1VeWL_ePsIz" role="1B3o_S" />
<node concept="3clFbS" id="1VeWL_ePsI$" role="3clF47">
<node concept="3clFbF" id="1VeWL_f9qUp" role="3cqZAp">
<node concept="1rXfSq" id="1VeWL_f9qUq" role="3clFbG">
<ref role="37wK5l" node="5ynGfcflmnm" resolve="createToken" />
<node concept="37vLTw" id="1VeWL_f9qUs" role="37wK5m">
<ref role="3cqZAo" node="1VeWL_ePsO7" resolve="session" />
</node>
</node>
</node>
</node>
<node concept="2JFqV2" id="1VeWL_f9qMm" role="2frcjj" />
</node>
<node concept="2tJIrI" id="5itBwM7cJ7C" role="jymVt" />
<node concept="3Tm1VV" id="5itBwM7auSK" role="1B3o_S" />