<p>laforge <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/21177">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Jenkins Builder: Verified
  fixeria: Looks good to me, but someone else must approve
  laforge: Looks good to me, approved

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">pcu: Introduce test TC_multiplex_dl_gprs_egprs<br><br>Change-Id: I1b6b1042f25888407f48865de220c8af7451a7f0<br>---<br>M pcu/PCU_Tests.ttcn<br>1 file changed, 171 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/pcu/PCU_Tests.ttcn b/pcu/PCU_Tests.ttcn</span><br><span>index 565e633..834498a 100644</span><br><span>--- a/pcu/PCU_Tests.ttcn</span><br><span>+++ b/pcu/PCU_Tests.ttcn</span><br><span>@@ -3047,6 +3047,176 @@</span><br><span>         f_shutdown(__BFILE__, __LINE__, final := true);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* Verify concurrent PDCH use of EGPRS and GPRS (EGPRS dl rlcmac blk is</span><br><span style="color: hsl(120, 100%, 40%);">+ * downgraded to CS1-4 so that GPRS can read the USF).</span><br><span style="color: hsl(120, 100%, 40%);">+ * See 3GPP TS 44.060 5.2.4a "Multiplexing of GPRS, EGPRS and EGPRS2 capable mobile stations"</span><br><span style="color: hsl(120, 100%, 40%);">+  */</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_multiplex_dl_gprs_egprs() runs on RAW_PCU_Test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+     var PCUIF_info_ind info_ind;</span><br><span style="color: hsl(120, 100%, 40%);">+  const integer num_ms := 2; /* 2 MS, first one is GPRS-only, second one is EGPRS */</span><br><span style="color: hsl(120, 100%, 40%);">+    var PollFnCtx pollctx;</span><br><span style="color: hsl(120, 100%, 40%);">+        var MSRadioAccessCapabilityV ms_racap;</span><br><span style="color: hsl(120, 100%, 40%);">+        var uint32_t sched_fn, dl_fn, ack_fn;</span><br><span style="color: hsl(120, 100%, 40%);">+ var octetstring data := f_rnd_octstring(10);</span><br><span style="color: hsl(120, 100%, 40%);">+  var RlcmacDlBlock dl_block;</span><br><span style="color: hsl(120, 100%, 40%);">+   var integer tx_data_remain := 5;</span><br><span style="color: hsl(120, 100%, 40%);">+      var integer tgt_ms;</span><br><span style="color: hsl(120, 100%, 40%);">+   var integer ms_gprs_usf_count[num_ms] := { 0, 0 };</span><br><span style="color: hsl(120, 100%, 40%);">+    var integer ms_egprs_usf_count[num_ms] := { 0, 0 };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Initialize NS/BSSGP side */</span><br><span style="color: hsl(120, 100%, 40%);">+        f_init_bssgp();</span><br><span style="color: hsl(120, 100%, 40%);">+       /* Initialize GPRS MS side */</span><br><span style="color: hsl(120, 100%, 40%);">+ f_init_gprs_ms(num_ms);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     info_ind := valueof(ts_PCUIF_INFO_default);</span><br><span style="color: hsl(120, 100%, 40%);">+   /* Only use 1 PDCH to make sure both end up in the same slot: */</span><br><span style="color: hsl(120, 100%, 40%);">+      f_PCUIF_ver_INFO_PDCHMask_set(info_ind, '00000001'B, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+      f_PCUIF_ver_INFO_PDCHMask_set(info_ind, '00000000'B, (1 .. 7));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     /* Initialize the PCU interface abstraction */</span><br><span style="color: hsl(120, 100%, 40%);">+        f_init_raw(testcasename(), info_ind);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* Set Initial MCS > 4 and maintain it non-variable to simplify test */</span><br><span style="color: hsl(120, 100%, 40%);">+    g_mcs_initial_dl := 5;</span><br><span style="color: hsl(120, 100%, 40%);">+        g_mcs_max_dl := 5;</span><br><span style="color: hsl(120, 100%, 40%);">+    f_pcuvty_set_allowed_cs_mcs();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      /* Establish BSSGP connection to the PCU */</span><br><span style="color: hsl(120, 100%, 40%);">+   f_bssgp_establish();</span><br><span style="color: hsl(120, 100%, 40%);">+  f_multi_ms_bssgp_register();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        var MultislotCap_GPRS mscap_gprs := {</span><br><span style="color: hsl(120, 100%, 40%);">+         gprsmultislotclass := '00011'B,</span><br><span style="color: hsl(120, 100%, 40%);">+               gprsextendeddynalloccap := '0'B</span><br><span style="color: hsl(120, 100%, 40%);">+       };</span><br><span style="color: hsl(120, 100%, 40%);">+    var MultislotCap_EGPRS mscap_egprs := {</span><br><span style="color: hsl(120, 100%, 40%);">+               egprsmultislotclass := '00011'B,</span><br><span style="color: hsl(120, 100%, 40%);">+              egprsextendeddynalloccap := '0'B</span><br><span style="color: hsl(120, 100%, 40%);">+      };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  /* Establish UL TBF for MS0 (GPRS-only) */</span><br><span style="color: hsl(120, 100%, 40%);">+    ms_racap := { valueof(ts_RaCapRec('0001'B /* E-GSM */, mscap_gprs, omit)) };</span><br><span style="color: hsl(120, 100%, 40%);">+  pollctx := f_ms_establish_ul_tbf_2phase_access(g_ms[0], ts_RlcMacUlCtrl_PKT_RES_REQ(g_ms[0].tlli, ms_racap));</span><br><span style="color: hsl(120, 100%, 40%);">+ if (not match(g_ms[0].ul_tbf.tx_cs_mcs, cs_gprs_any)) {</span><br><span style="color: hsl(120, 100%, 40%);">+               setverdict(fail, "Wrong CS_MCS ", g_ms[0].ul_tbf.tx_cs_mcs, " received vs exp ", cs_gprs_any);</span><br><span style="color: hsl(120, 100%, 40%);">+            f_shutdown(__BFILE__, __LINE__);</span><br><span style="color: hsl(120, 100%, 40%);">+      }</span><br><span style="color: hsl(120, 100%, 40%);">+     /* Pkt Uplink Assignment above sets poll+rrbp requesting PACKET CONTROL ACK */</span><br><span style="color: hsl(120, 100%, 40%);">+        f_ms_tx_ul_block(g_ms[0], ts_RLCMAC_CTRL_ACK(g_ms[0].tlli), pollctx.fn, nr := pollctx.tstrxbts);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    /* Establish UL TBF for MS1 (EGPRS) */</span><br><span style="color: hsl(120, 100%, 40%);">+        ms_racap := { valueof(ts_RaCapRec('0001'B /* E-GSM */, mscap_gprs, mscap_egprs)) };</span><br><span style="color: hsl(120, 100%, 40%);">+   pollctx := f_ms_establish_ul_tbf_2phase_access(g_ms[1], ts_RlcMacUlCtrl_PKT_RES_REQ(g_ms[1].tlli, ms_racap));</span><br><span style="color: hsl(120, 100%, 40%);">+ if (not match(g_ms[1].ul_tbf.tx_cs_mcs, mcs_egprs_any)) {</span><br><span style="color: hsl(120, 100%, 40%);">+             setverdict(fail, "Wrong CS_MCS ", g_ms[1].ul_tbf.tx_cs_mcs, " received vs exp ", mcs_egprs_any);</span><br><span style="color: hsl(120, 100%, 40%);">+          f_shutdown(__BFILE__, __LINE__);</span><br><span style="color: hsl(120, 100%, 40%);">+      }</span><br><span style="color: hsl(120, 100%, 40%);">+     /* Pkt Uplink Assignment above sets poll+rrbp requesting PACKET CONTROL ACK */</span><br><span style="color: hsl(120, 100%, 40%);">+        f_ms_tx_ul_block(g_ms[1], ts_RLCMAC_CTRL_ACK(g_ms[1].tlli), pollctx.fn, nr := pollctx.tstrxbts);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    /* Now SGSN sends some DL data to MS0, PCU will assign a GPRS DL TBF on PACCH */</span><br><span style="color: hsl(120, 100%, 40%);">+      BSSGP[0].send(ts_BSSGP_DL_UD(g_ms[0].tlli, data));</span><br><span style="color: hsl(120, 100%, 40%);">+    f_sleep(0.1);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_ms_rx_pkt_ass_pacch(g_ms[0], sched_fn, tr_RLCMAC_DL_PACKET_ASS);</span><br><span style="color: hsl(120, 100%, 40%);">+    /* DL Ass sets poll+rrbp requesting PACKET CONTROL ACK */</span><br><span style="color: hsl(120, 100%, 40%);">+     f_ms_tx_ul_block(g_ms[0], ts_RLCMAC_CTRL_ACK(g_ms[0].tlli), sched_fn);</span><br><span style="color: hsl(120, 100%, 40%);">+        /* After acking the dl assignment, dl tbf goes into FLOW state and PCU will provide DL data when BTS asks for it */</span><br><span style="color: hsl(120, 100%, 40%);">+   f_rx_rlcmac_dl_block_exp_data(dl_block, dl_fn, data, 0, cs_gprs_any);</span><br><span style="color: hsl(120, 100%, 40%);">+ /* ACK the DL block */</span><br><span style="color: hsl(120, 100%, 40%);">+        f_dltbf_ack_block(g_ms[0].dl_tbf, dl_block, '0'B);</span><br><span style="color: hsl(120, 100%, 40%);">+    f_ms_tx_ul_block(g_ms[0], f_dltbf_ts_RLCMAC_DL_ACK_NACK(g_ms[0].dl_tbf, false),</span><br><span style="color: hsl(120, 100%, 40%);">+                        f_dl_block_ack_fn(dl_block, dl_fn));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* Now SGSN sends some DL data to MS1, PCU will assign a EGPRS DL TBF on PACCH */</span><br><span style="color: hsl(120, 100%, 40%);">+     BSSGP[0].send(ts_BSSGP_DL_UD(g_ms[1].tlli, data));</span><br><span style="color: hsl(120, 100%, 40%);">+    f_sleep(0.1);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_ms_rx_pkt_ass_pacch(g_ms[1], sched_fn, tr_RLCMAC_DL_PACKET_ASS);</span><br><span style="color: hsl(120, 100%, 40%);">+    /* DL Ass sets poll+rrbp requesting PACKET CONTROL ACK */</span><br><span style="color: hsl(120, 100%, 40%);">+     f_ms_tx_ul_block(g_ms[1], ts_RLCMAC_CTRL_ACK(g_ms[1].tlli), sched_fn);</span><br><span style="color: hsl(120, 100%, 40%);">+        /* After acking the dl assignment, dl tbf goes into FLOW state and PCU will provide DL data when BTS asks for it */</span><br><span style="color: hsl(120, 100%, 40%);">+   f_rx_rlcmac_dl_block_exp_data(dl_block, dl_fn, data, 0, mcs_egprs_any);</span><br><span style="color: hsl(120, 100%, 40%);">+       /* ACK the DL block */</span><br><span style="color: hsl(120, 100%, 40%);">+        f_dltbf_ack_block(g_ms[1].dl_tbf, dl_block, '0'B);</span><br><span style="color: hsl(120, 100%, 40%);">+    f_ms_tx_ul_block(g_ms[1], f_dltbf_ts_RLCMAC_DL_ACK_NACK(g_ms[1].dl_tbf, true),</span><br><span style="color: hsl(120, 100%, 40%);">+                         f_dl_block_ack_fn(dl_block, dl_fn));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       data := f_rnd_octstring(1400);</span><br><span style="color: hsl(120, 100%, 40%);">+        BSSGP[0].send(ts_BSSGP_DL_UD(g_ms[0].tlli, data));</span><br><span style="color: hsl(120, 100%, 40%);">+    BSSGP[0].send(ts_BSSGP_DL_UD(g_ms[1].tlli, data));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  for (var integer i := 0; i < 800; i := i + 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+            f_rx_rlcmac_dl_block(dl_block, dl_fn);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+              if (match(dl_block, tr_RLCMAC_DUMMY_CTRL)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                  /* No more data to receive, done */</span><br><span style="color: hsl(120, 100%, 40%);">+                   break;</span><br><span style="color: hsl(120, 100%, 40%);">+                }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+           if (ischosen(dl_block.ctrl)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                        setverdict(fail, "Unexpected DL CTRL block ", dl_block);</span><br><span style="color: hsl(120, 100%, 40%);">+                    f_shutdown(__BFILE__, __LINE__);</span><br><span style="color: hsl(120, 100%, 40%);">+              } else if (ischosen(dl_block.data_egprs)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                   if (not match(dl_block.data_egprs.mac_hdr.tfi, g_ms[1].dl_tbf.tfi)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                         setverdict(fail, "EGPRS DL DATA not matching EGPRS MS TFI (", g_ms[1].dl_tbf.tfi, "): ", dl_block.data_egprs.mac_hdr.tfi);</span><br><span style="color: hsl(120, 100%, 40%);">+                                f_shutdown(__BFILE__, __LINE__);</span><br><span style="color: hsl(120, 100%, 40%);">+                      }</span><br><span style="color: hsl(120, 100%, 40%);">+                     tgt_ms := 1;</span><br><span style="color: hsl(120, 100%, 40%);">+                  if (match(dl_block.data_egprs.mac_hdr.usf, g_ms[0].ul_tbf.usf[7])) {</span><br><span style="color: hsl(120, 100%, 40%);">+                          if (dl_block.data_egprs.mcs > MCS_4) {</span><br><span style="color: hsl(120, 100%, 40%);">+                                     setverdict(fail, "Signalling USF ", dl_block.data_egprs.mac_hdr.usf, " for GPRS-only MS using MCS > 4: ", dl_block);</span><br><span style="color: hsl(120, 100%, 40%);">+                                   f_shutdown(__BFILE__, __LINE__);</span><br><span style="color: hsl(120, 100%, 40%);">+                              }</span><br><span style="color: hsl(120, 100%, 40%);">+                             ms_egprs_usf_count[0] := ms_egprs_usf_count[0] + 1;</span><br><span style="color: hsl(120, 100%, 40%);">+                   } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                              if (dl_block.data_egprs.mcs <= MCS_4) {</span><br><span style="color: hsl(120, 100%, 40%);">+                                    setverdict(fail, "Using too-low MCS for EGPRS MS: ", dl_block.data_egprs.mcs);</span><br><span style="color: hsl(120, 100%, 40%);">+                                      f_shutdown(__BFILE__, __LINE__);</span><br><span style="color: hsl(120, 100%, 40%);">+                              }</span><br><span style="color: hsl(120, 100%, 40%);">+                             if (match(dl_block.data_egprs.mac_hdr.usf, g_ms[1].ul_tbf.usf[7])) {</span><br><span style="color: hsl(120, 100%, 40%);">+                                  ms_egprs_usf_count[1] := ms_egprs_usf_count[1] + 1;</span><br><span style="color: hsl(120, 100%, 40%);">+                           }</span><br><span style="color: hsl(120, 100%, 40%);">+                     }</span><br><span style="color: hsl(120, 100%, 40%);">+             } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      if (not match(dl_block.data.mac_hdr.hdr_ext.tfi, g_ms[0].dl_tbf.tfi)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                               setverdict(fail, "GPRS DL DATA not matching GPRS MS TFI (", g_ms[0].dl_tbf.tfi, "): ", dl_block.data.mac_hdr.hdr_ext.tfi);</span><br><span style="color: hsl(120, 100%, 40%);">+                                f_shutdown(__BFILE__, __LINE__);</span><br><span style="color: hsl(120, 100%, 40%);">+                      }</span><br><span style="color: hsl(120, 100%, 40%);">+                     tgt_ms := 0;</span><br><span style="color: hsl(120, 100%, 40%);">+                  if (match(dl_block.data.mac_hdr.mac_hdr.usf, g_ms[0].ul_tbf.usf[7])) {</span><br><span style="color: hsl(120, 100%, 40%);">+                                ms_gprs_usf_count[0] := ms_gprs_usf_count[0] + 1;</span><br><span style="color: hsl(120, 100%, 40%);">+                     } else if (match(dl_block.data.mac_hdr.mac_hdr.usf, g_ms[1].ul_tbf.usf[7])) {</span><br><span style="color: hsl(120, 100%, 40%);">+                         ms_gprs_usf_count[1] := ms_gprs_usf_count[1] + 1;</span><br><span style="color: hsl(120, 100%, 40%);">+                     }</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+           /* Keep Ack/Nack description updated */</span><br><span style="color: hsl(120, 100%, 40%);">+               f_dltbf_ack_block(g_ms[tgt_ms].dl_tbf, dl_block);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+           /* TDMA frame number on which we are supposed to send the ACK */</span><br><span style="color: hsl(120, 100%, 40%);">+              if (f_dl_block_rrbp_valid(dl_block)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                        ack_fn := f_dl_block_ack_fn(dl_block, dl_fn);</span><br><span style="color: hsl(120, 100%, 40%);">+                 f_ms_tx_ul_block(g_ms[tgt_ms], f_dltbf_ts_RLCMAC_DL_ACK_NACK(g_ms[tgt_ms].dl_tbf, ischosen(dl_block.data_egprs)), ack_fn);</span><br><span style="color: hsl(120, 100%, 40%);">+                    if (tx_data_remain != 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+                            /* Submit more data from time to time to keep the TBF ongoing */</span><br><span style="color: hsl(120, 100%, 40%);">+                              BSSGP[0].send(ts_BSSGP_DL_UD(g_ms[0].tlli, data));</span><br><span style="color: hsl(120, 100%, 40%);">+                            BSSGP[0].send(ts_BSSGP_DL_UD(g_ms[1].tlli, data));</span><br><span style="color: hsl(120, 100%, 40%);">+                            tx_data_remain := tx_data_remain - 1;</span><br><span style="color: hsl(120, 100%, 40%);">+                 }</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   log("results: ms_gprs_usf_count=", ms_gprs_usf_count, " / ms_egprs_usf_count=", ms_egprs_usf_count);</span><br><span style="color: hsl(120, 100%, 40%);">+      if (ms_gprs_usf_count[0] == 0 or ms_gprs_usf_count[1] == 0 or</span><br><span style="color: hsl(120, 100%, 40%);">+     ms_egprs_usf_count[0] == 0 or ms_egprs_usf_count[1] == 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+                   setverdict(fail, "USF thresholds not met!");</span><br><span style="color: hsl(120, 100%, 40%);">+                f_shutdown(__BFILE__, __LINE__);</span><br><span style="color: hsl(120, 100%, 40%);">+  }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   f_shutdown(__BFILE__, __LINE__, final := true);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> private function f_TC_paging_cs_multi_ms(template (value) TsTrxBtsNum nr,</span><br><span>                                   boolean exp_imsi, boolean exp_tmsi)</span><br><span> runs on RAW_PCU_Test_CT {</span><br><span>@@ -3273,6 +3443,7 @@</span><br><span>            execute( TC_dl_multislot_tbf_ms_class_from_2phase() );</span><br><span>               execute( TC_ul_multislot_tbf_ms_class_from_2phase() );</span><br><span>       }</span><br><span style="color: hsl(120, 100%, 40%);">+     execute( TC_multiplex_dl_gprs_egprs() );</span><br><span> </span><br><span>         execute( TC_pcuif_info_ind_subsequent() );</span><br><span> }</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/21177">change 21177</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/21177"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-ttcn3-hacks </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I1b6b1042f25888407f48865de220c8af7451a7f0 </div>
<div style="display:none"> Gerrit-Change-Number: 21177 </div>
<div style="display:none"> Gerrit-PatchSet: 3 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: fixeria <vyanitskiy@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: lynxis lazus <lynxis@fe80.eu> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>