<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>216122</bug_id>
          
          <creation_ts>2020-09-03 05:57:52 -0700</creation_ts>
          <short_desc>Consecutive requestAnimationFrame callbacks may be passed the same timestamp</short_desc>
          <delta_ts>2020-09-04 10:15:27 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Animations</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antoine Quint">graouts</reporter>
          <assigned_to name="Antoine Quint">graouts</assigned_to>
          <cc>cdumez</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>graouts</cc>
    
    <cc>kangil.han</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1685231</commentid>
    <comment_count>0</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2020-09-03 05:57:52 -0700</bug_when>
    <thetext>In some circumstances ScriptedAnimationController::serviceRequestAnimationFrameCallbacks() may be called more than once with the same timestamp which means that requestAnimationFrame() callbacks may end up being called twice for the same timestamp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685232</commentid>
    <comment_count>1</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2020-09-03 05:58:20 -0700</bug_when>
    <thetext>&lt;rdar://problem/68269445&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685234</commentid>
    <comment_count>2</comment_count>
      <attachid>407876</attachid>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2020-09-03 06:02:35 -0700</bug_when>
    <thetext>Created attachment 407876
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685236</commentid>
    <comment_count>3</comment_count>
      <attachid>407878</attachid>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2020-09-03 06:09:14 -0700</bug_when>
    <thetext>Created attachment 407878
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685289</commentid>
    <comment_count>4</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-09-03 09:31:10 -0700</bug_when>
    <thetext>Committed r266526: &lt;https://trac.webkit.org/changeset/266526&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 407878.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685320</commentid>
    <comment_count>5</comment_count>
      <attachid>407878</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-09-03 10:20:45 -0700</bug_when>
    <thetext>Comment on attachment 407878
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=407878&amp;action=review

&gt; Source/WebCore/dom/ScriptedAnimationController.cpp:101
&gt; +    return timestamp &lt;= m_lastAnimationFrameTimestamp || (isThrottledRelativeToPage() &amp;&amp; (timestamp - m_lastAnimationFrameTimestamp &lt; preferredScriptedAnimationInterval()));

How can this happen? timestamp should be always greater than m_lastAnimationFrameTimestamp. And assuming &quot;timestamp &lt; m_lastAnimationFrameTimestamp&quot; can happen seems wrong. And rescheduling for the next rAF in this case looks wrong also. We already passed the timestamp the current rAF callbacks should be processed. What is the point in delaying processing them to the next rAF timestamp?

So I assume to meant to check &quot;timestamp == m_lastAnimationFrameTimestamp&quot;. But this should not happen also. ScriptedAnimationController::serviceRequestAnimationFrameCallbacks() should be called only once for every document through Page::updateRendering(). If this happen either

1) we freezeNowTimestamp() more than we should. So multiple Page::updateRendering() get called with the same timestamp
2) or we call  ScriptedAnimationController::serviceRequestAnimationFrameCallbacks() multiple times from the same Page::updateRendering() while the timestamp is frozen.

And none of them should happen. So I would expect the bug is somewhere else unless I am confused. But the neither the bug description nor the ChangeLog explains the cause of this bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685579</commentid>
    <comment_count>6</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2020-09-04 01:01:06 -0700</bug_when>
    <thetext>(In reply to Said Abou-Hallawa from comment #5)
&gt; Comment on attachment 407878 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=407878&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/dom/ScriptedAnimationController.cpp:101
&gt; &gt; +    return timestamp &lt;= m_lastAnimationFrameTimestamp || (isThrottledRelativeToPage() &amp;&amp; (timestamp - m_lastAnimationFrameTimestamp &lt; preferredScriptedAnimationInterval()));
&gt; 
&gt; How can this happen?

I don&apos;t have the answer to this question yet, I&apos;m still investigating. 

&gt; timestamp should be always greater than
&gt; m_lastAnimationFrameTimestamp. And assuming &quot;timestamp &lt;
&gt; m_lastAnimationFrameTimestamp&quot; can happen seems wrong. And rescheduling for
&gt; the next rAF in this case looks wrong also. We already passed the timestamp
&gt; the current rAF callbacks should be processed. What is the point in delaying
&gt; processing them to the next rAF timestamp?

Triggering two rounds of callbacks with the same timestamp tripped up two WPT tests:

imported/w3c/web-platform-tests/css/css-animations/event-dispatch.tentative.html
imported/w3c/web-platform-tests/web-animations/interfaces/Animation/onremove.html

Those tests relied on the premise that a rAF callback being fired is indicative of &quot;update the rendering&quot; steps being ran.

&gt; So I assume to meant to check &quot;timestamp == m_lastAnimationFrameTimestamp&quot;.
&gt; But this should not happen also.
&gt; ScriptedAnimationController::serviceRequestAnimationFrameCallbacks() should
&gt; be called only once for every document through Page::updateRendering(). If
&gt; this happen either
&gt; 
&gt; 1) we freezeNowTimestamp() more than we should. So multiple
&gt; Page::updateRendering() get called with the same timestamp
&gt; 2) or we call 
&gt; ScriptedAnimationController::serviceRequestAnimationFrameCallbacks()
&gt; multiple times from the same Page::updateRendering() while the timestamp is
&gt; frozen.
&gt; 
&gt; And none of them should happen. So I would expect the bug is somewhere else
&gt; unless I am confused. But the neither the bug description nor the ChangeLog
&gt; explains the cause of this bug.

Yes, I am investigating this still. However the codechange felt like a way to stabilize tests and address an obviously incorrect behavior while we look for the real culprit.

Once that&apos;s done, we can change this to ASSERT(timestamp &gt; m_lastAnimationFrameTimestamp).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685582</commentid>
    <comment_count>7</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2020-09-04 01:21:21 -0700</bug_when>
    <thetext>(In reply to Said Abou-Hallawa from comment #5)
&gt; 1) we freezeNowTimestamp() more than we should. So multiple
&gt; Page::updateRendering() get called with the same timestamp

This is not happening, the unfrozen timestamp returned by document.domWindow()-&gt;performance().now() is the same.

&gt; 2) or we call 
&gt; ScriptedAnimationController::serviceRequestAnimationFrameCallbacks()
&gt; multiple times from the same Page::updateRendering() while the timestamp is
&gt; frozen.

That is not happening either, m_renderingUpdateCount is increasing between calls to ScriptedAnimationController::serviceRequestAnimationFrameCallbacks() with the same timestamp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685590</commentid>
    <comment_count>8</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2020-09-04 02:35:07 -0700</bug_when>
    <thetext>Added some logging, here&apos;s a sequence of calls that eventually leads to a case where timestamp == m_lastAnimationFrameTimestamp.

02:26:37.313047-0700 TiledCoreAnimationDrawingArea::updateRenderingRunLoopCallback()
02:26:37.313127-0700 [0x10dcdcb00] Page::updateRendering(), updates = 0
02:26:37.313313-0700 [page 0x10dcdcb00, document 0x10dbe5780] now  = 4.000000s, updates = 0

02:26:37.327353-0700 TiledCoreAnimationDrawingArea::updateRenderingRunLoopCallback()
02:26:37.327383-0700 [0x10dcdcb00] Page::updateRendering(), updates = 1
02:26:37.327564-0700 [page 0x10dcdcb00, document 0x10dbe5780] now  = 18.000000s, updates = 1

02:26:37.327940-0700 TiledCoreAnimationDrawingArea::updateRenderingRunLoopCallback()
02:26:37.327960-0700 [0x10dcdcb00] Page::updateRendering(), updates = 2
02:26:37.327974-0700 [page 0x10dcdcb00, document 0x10dbe5780] now  = 19.000000s, updates = 2

02:26:37.333055-0700 TiledCoreAnimationDrawingArea::updateRenderingRunLoopCallback()
02:26:37.333077-0700 [0x10dcdcb00] Page::updateRendering(), updates = 3
02:26:37.333098-0700 [page 0x10dcdcb00, document 0x10dbe5780] now  = 24.000000s, updates = 3

02:26:37.352863-0700 TiledCoreAnimationDrawingArea::updateRenderingRunLoopCallback()
02:26:37.352893-0700 [0x10dcdcb00] Page::updateRendering(), updates = 4
02:26:37.352932-0700 [page 0x10dcdcb00, document 0x10dbe6430] now  = 17.000000s, updates = 4
02:26:37.352948-0700 serviceRequestAnimationFrameCallbacks(), timestamp = 0.017000s, m_lastAnimationFrameTimestamp = 0.000000s

02:26:37.353653-0700 TiledCoreAnimationDrawingArea::updateRenderingRunLoopCallback()
02:26:37.353676-0700 [0x10dcdcb00] Page::updateRendering(), updates = 5
02:26:37.353693-0700 [page 0x10dcdcb00, document 0x10dbe6430] now  = 17.000000s, updates = 5
02:26:37.353708-0700 serviceRequestAnimationFrameCallbacks(), timestamp = 0.017000s, m_lastAnimationFrameTimestamp = 0.017000s

All the calls come from TiledCoreAnimationDrawingArea::updateRenderingRunLoopCallback() and the two consecutive calls to that function come within 0.79ms (02:26:37.352863 and 02:26:37.353653) explaining why performance.now() returns the same value since I expect it&apos;s not expected to have more than 1ms-accuracy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685722</commentid>
    <comment_count>9</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-09-04 10:00:04 -0700</bug_when>
    <thetext>Okay I see.

RenderingUpdateScheduler can schedule a renderingUpdate at the next DisplayRefreshMonitor interval. This ensures there is a least 16ms between two consecutive renderingUpdates.

But RenderingUpdateScheduler also can schedule an immediate renderingUpdate which asks for a renderingUpdate at the next run-loop. See RenderingUpdateScheduler::scheduleRenderingUpdate().

So it seems what is happening with the flaky tests is we schedule an immediate renderingUpdate which is fast enough to hit the same timestamp we used in the previous renderingUpdate.

So I think the patch is okay. But maybe the right thing to do is to ensure rAF is served after at least 16ms

bool ScriptedAnimationController::shouldRescheduleRequestAnimationFrame(ReducedResolutionSeconds timestamp) const
{
&lt;&lt;    return timestamp &lt;= m_lastAnimationFrameTimestamp || (isThrottledRelativeToPage() &amp;&amp; (timestamp - m_lastAnimationFrameTimestamp &lt; preferredScriptedAnimationInterval()));
&gt;&gt;    return timestamp - m_lastAnimationFrameTimestamp &lt; preferredScriptedAnimationInterval());
}

I think, if the difference between timestamp and m_lastAnimationFrameTimestamp is 1ms for example, rAF should not be served. The reason for adding the immediate renderingUpdate scheduling is in some cases we want to update the page urgently and we can not wait for the next DisplayRefreshMonitor interval. But I think rAF never needs to be served in this case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685732</commentid>
    <comment_count>10</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2020-09-04 10:15:27 -0700</bug_when>
    <thetext>(In reply to Said Abou-Hallawa from comment #9)
&gt; Okay I see.
&gt; 
&gt; RenderingUpdateScheduler can schedule a renderingUpdate at the next
&gt; DisplayRefreshMonitor interval. This ensures there is a least 16ms between
&gt; two consecutive renderingUpdates.
&gt; 
&gt; But RenderingUpdateScheduler also can schedule an immediate renderingUpdate
&gt; which asks for a renderingUpdate at the next run-loop. See
&gt; RenderingUpdateScheduler::scheduleRenderingUpdate().
&gt; 
&gt; So it seems what is happening with the flaky tests is we schedule an
&gt; immediate renderingUpdate which is fast enough to hit the same timestamp we
&gt; used in the previous renderingUpdate.
&gt; 
&gt; So I think the patch is okay. But maybe the right thing to do is to ensure
&gt; rAF is served after at least 16ms
&gt; 
&gt; bool
&gt; ScriptedAnimationController::
&gt; shouldRescheduleRequestAnimationFrame(ReducedResolutionSeconds timestamp)
&gt; const
&gt; {
&gt; &lt;&lt;    return timestamp &lt;= m_lastAnimationFrameTimestamp ||
&gt; (isThrottledRelativeToPage() &amp;&amp; (timestamp - m_lastAnimationFrameTimestamp &lt;
&gt; preferredScriptedAnimationInterval()));
&gt; &gt;&gt;    return timestamp - m_lastAnimationFrameTimestamp &lt; preferredScriptedAnimationInterval());
&gt; }
&gt; 
&gt; I think, if the difference between timestamp and
&gt; m_lastAnimationFrameTimestamp is 1ms for example, rAF should not be served.
&gt; The reason for adding the immediate renderingUpdate scheduling is in some
&gt; cases we want to update the page urgently and we can not wait for the next
&gt; DisplayRefreshMonitor interval. But I think rAF never needs to be served in
&gt; this case.

I think we need to consider the other steps under Page::updateRendering(). This patch addressed requestAnimationFrame() callbacks but updating animations is another step that likely shouldn’t be performed until the next “real” frame. I guess we need to distinguish between the work required internally to update the rendering and what is Web-observable.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407876</attachid>
            <date>2020-09-03 06:02:35 -0700</date>
            <delta_ts>2020-09-03 06:09:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216122-20200903150234.patch</filename>
            <type>text/plain</type>
            <size>4233</size>
            <attacher name="Antoine Quint">graouts</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2Mzg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2ExZWU1Njg3ODkxYTZk
ZDNkZTIxZWMxYWExN2E1NDIyMDAyNTExMi4uNWIyNTBmNDdiNDM0ODU3MDI3MDBiZmIyZDU3YmJh
ODU3OWI5NWUzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDIwLTA5LTAzICBBbnRv
aW5lIFF1aW50ICA8Z3Jhb3V0c0B3ZWJraXQub3JnPgorCisgICAgICAgIENvbnNlY3V0aXZlIHJl
cXVlc3RBbmltYXRpb25GcmFtZSBjYWxsYmFja3MgbWF5IGJlIHBhc3NlZCB0aGUgc2FtZSB0aW1l
c3RhbXAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIx
NjEyMgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNjgyNjk0NDU+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdDogZmFzdC9hbmltYXRpb24vcmVx
dWVzdC1hbmltYXRpb24tZnJhbWUtdW5pcXVlLXRpbWVzdGFtcC5odG1sCisKKyAgICAgICAgRW5z
dXJlIHRoYXQgdGhlIHBhZ2Ugb25seSBzZWVzIGluY3JlYXNpbmcgdGltZXN0YW1wcyBpbiByZXF1
ZXN0QW5pbWF0aW9uRnJhbWUoKSBjYWxsYmFja3MuCisKKyAgICAgICAgKiBkb20vU2NyaXB0ZWRB
bmltYXRpb25Db250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdGVkQW5pbWF0
aW9uQ29udHJvbGxlcjo6c2hvdWxkUmVzY2hlZHVsZVJlcXVlc3RBbmltYXRpb25GcmFtZSBjb25z
dCk6CisKIDIwMjAtMDgtMzEgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAg
ICAgIE1pc3NpbmcgZXhjZXB0aW9uIGNoZWNrIHdoaWxlIGhhbmRsaW5nIHRoZSBvbmJlZm9yZXVu
bG9hZCBldmVudC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRlZEFuaW1h
dGlvbkNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdGVkQW5pbWF0aW9u
Q29udHJvbGxlci5jcHAKaW5kZXggYTZmZjU1NWFmZjcyMjkzNTVhM2FmZjIyMTA3NThlYzg1NDM5
OTNiMi4uZjE1NGE0ZWUwOWU3OWIwNzU3NDY1N2M2OGVmODU2ZWE5ZGEwMmUzMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKQEAg
LTk4LDcgKzk4LDcgQEAgYm9vbCBTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXI6OmlzVGhyb3R0
bGVkUmVsYXRpdmVUb1BhZ2UoKSBjb25zdAogCiBib29sIFNjcmlwdGVkQW5pbWF0aW9uQ29udHJv
bGxlcjo6c2hvdWxkUmVzY2hlZHVsZVJlcXVlc3RBbmltYXRpb25GcmFtZShSZWR1Y2VkUmVzb2x1
dGlvblNlY29uZHMgdGltZXN0YW1wKSBjb25zdAogewotICAgIHJldHVybiBpc1Rocm90dGxlZFJl
bGF0aXZlVG9QYWdlKCkgJiYgKHRpbWVzdGFtcCAtIG1fbGFzdEFuaW1hdGlvbkZyYW1lVGltZXN0
YW1wIDwgcHJlZmVycmVkU2NyaXB0ZWRBbmltYXRpb25JbnRlcnZhbCgpKTsKKyAgICByZXR1cm4g
dGltZXN0YW1wIDw9IG1fbGFzdEFuaW1hdGlvbkZyYW1lVGltZXN0YW1wIHx8IChpc1Rocm90dGxl
ZFJlbGF0aXZlVG9QYWdlKCkgJiYgKHRpbWVzdGFtcCAtIG1fbGFzdEFuaW1hdGlvbkZyYW1lVGlt
ZXN0YW1wIDwgcHJlZmVycmVkU2NyaXB0ZWRBbmltYXRpb25JbnRlcnZhbCgpKSk7CiB9CiAKIFNj
cmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcjo6Q2FsbGJhY2tJZCBTY3JpcHRlZEFuaW1hdGlvbkNv
bnRyb2xsZXI6OnJlZ2lzdGVyQ2FsbGJhY2soUmVmPFJlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxi
YWNrPiYmIGNhbGxiYWNrKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGVmYWVmODI0M2M0MTM5ZWE4ZGRmZmVlOGRjNmYwN2E0
NzI5MDg0ZTMuLjVjOTk0Y2MzZTEyYmVkMWI4NmVkOWQ1ZmY5ZjkzZjU5ZTkyY2MzMDQgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxNyBAQAorMjAyMC0wOS0wMyAgQW50b2luZSBRdWludCAgPGdyYW91dHNAd2Vi
a2l0Lm9yZz4KKworICAgICAgICBDb25zZWN1dGl2ZSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgY2Fs
bGJhY2tzIG1heSBiZSBwYXNzZWQgdGhlIHNhbWUgdGltZXN0YW1wCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTYxMjIKKyAgICAgICAgPHJkYXI6Ly9w
cm9ibGVtLzY4MjY5NDQ1PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEFkZCBhIHRlc3QgdGhhdCB0d28gc3Vic2VxdWVudCBhbmltYXRpb24gZnJhbWVz
IGFzIGlkZW50aWZpZWQgdmlhIHJlcXVlc3RBbmltYXRpb25GcmFtZSgpIGNhbGxiYWNrcworICAg
ICAgICBhcmUgcHJvdmlkZWQgaW5jcmVhc2luZyB0aW1lc3RhbXBzLgorCisgICAgICAgICogZmFz
dC9hbmltYXRpb24vcmVxdWVzdC1hbmltYXRpb24tZnJhbWUtdW5pcXVlLXRpbWVzdGFtcC1leHBl
Y3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvYW5pbWF0aW9uL3JlcXVlc3QtYW5pbWF0
aW9uLWZyYW1lLXVuaXF1ZS10aW1lc3RhbXAuaHRtbDogQWRkZWQuCisKIDIwMjAtMDgtMzEgIENv
bW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3
ZWQsIHJldmVydGluZyByMjY2Mzc4IGFuZCByMjY2MzgxLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvZmFzdC9hbmltYXRpb24vcmVxdWVzdC1hbmltYXRpb24tZnJhbWUtdW5pcXVlLXRpbWVzdGFt
cC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2FuaW1hdGlvbi9yZXF1ZXN0LWFuaW1h
dGlvbi1mcmFtZS11bmlxdWUtdGltZXN0YW1wLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZTU4
YzE1Njg1OTQzZDUyZjhmMDNmNWRiYTI1Y2RjOTRhMDRiZDkyCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvZmFzdC9hbmltYXRpb24vcmVxdWVzdC1hbmltYXRpb24tZnJhbWUtdW5pcXVl
LXRpbWVzdGFtcC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwzIEBACisKK1BBU1MgVGltZXN0YW1w
cyBvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKSBjYWxsYmFja3MgaW5jcmVhc2UuIAorCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2FuaW1hdGlvbi9yZXF1ZXN0LWFuaW1hdGlvbi1mcmFt
ZS11bmlxdWUtdGltZXN0YW1wLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2FuaW1hdGlvbi9yZXF1
ZXN0LWFuaW1hdGlvbi1mcmFtZS11bmlxdWUtdGltZXN0YW1wLmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjJm
NDI5NTE2NTEyODI5MDI5MDJjMzczMzU0YmU0OTg0ZTJkZDA0NgotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2Zhc3QvYW5pbWF0aW9uL3JlcXVlc3QtYW5pbWF0aW9uLWZyYW1lLXVuaXF1
ZS10aW1lc3RhbXAuaHRtbApAQCAtMCwwICsxLDE2IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1s
PgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQu
anMiPjwvc2NyaXB0PgorPHNjcmlwdD4KKworcHJvbWlzZV90ZXN0KGFzeW5jIHQgPT4geworCWxl
dCBmaXJzdEZyYW1lVGltZXN0YW1wID0gYXdhaXQgbmV3IFByb21pc2UocmVxdWVzdEFuaW1hdGlv
bkZyYW1lKTsKKwlsZXQgc2Vjb25kRnJhbWVUaW1lc3RhbXAgPSBhd2FpdCBuZXcgUHJvbWlzZShy
ZXF1ZXN0QW5pbWF0aW9uRnJhbWUpOworCWFzc2VydF9ncmVhdGVyX3RoYW4oc2Vjb25kRnJhbWVU
aW1lc3RhbXAsIGZpcnN0RnJhbWVUaW1lc3RhbXApOworfSwgIlRpbWVzdGFtcHMgb2YgcmVxdWVz
dEFuaW1hdGlvbkZyYW1lKCkgY2FsbGJhY2tzIGluY3JlYXNlLiIpOworCis8L3NjcmlwdD4KKzwv
Ym9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407878</attachid>
            <date>2020-09-03 06:09:14 -0700</date>
            <delta_ts>2020-09-03 09:31:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216122-20200903150913.patch</filename>
            <type>text/plain</type>
            <size>6170</size>
            <attacher name="Antoine Quint">graouts</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2Mzg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2ExZWU1Njg3ODkxYTZk
ZDNkZTIxZWMxYWExN2E1NDIyMDAyNTExMi4uNWIyNTBmNDdiNDM0ODU3MDI3MDBiZmIyZDU3YmJh
ODU3OWI5NWUzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDIwLTA5LTAzICBBbnRv
aW5lIFF1aW50ICA8Z3Jhb3V0c0B3ZWJraXQub3JnPgorCisgICAgICAgIENvbnNlY3V0aXZlIHJl
cXVlc3RBbmltYXRpb25GcmFtZSBjYWxsYmFja3MgbWF5IGJlIHBhc3NlZCB0aGUgc2FtZSB0aW1l
c3RhbXAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIx
NjEyMgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNjgyNjk0NDU+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdDogZmFzdC9hbmltYXRpb24vcmVx
dWVzdC1hbmltYXRpb24tZnJhbWUtdW5pcXVlLXRpbWVzdGFtcC5odG1sCisKKyAgICAgICAgRW5z
dXJlIHRoYXQgdGhlIHBhZ2Ugb25seSBzZWVzIGluY3JlYXNpbmcgdGltZXN0YW1wcyBpbiByZXF1
ZXN0QW5pbWF0aW9uRnJhbWUoKSBjYWxsYmFja3MuCisKKyAgICAgICAgKiBkb20vU2NyaXB0ZWRB
bmltYXRpb25Db250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdGVkQW5pbWF0
aW9uQ29udHJvbGxlcjo6c2hvdWxkUmVzY2hlZHVsZVJlcXVlc3RBbmltYXRpb25GcmFtZSBjb25z
dCk6CisKIDIwMjAtMDgtMzEgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAg
ICAgIE1pc3NpbmcgZXhjZXB0aW9uIGNoZWNrIHdoaWxlIGhhbmRsaW5nIHRoZSBvbmJlZm9yZXVu
bG9hZCBldmVudC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRlZEFuaW1h
dGlvbkNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdGVkQW5pbWF0aW9u
Q29udHJvbGxlci5jcHAKaW5kZXggYTZmZjU1NWFmZjcyMjkzNTVhM2FmZjIyMTA3NThlYzg1NDM5
OTNiMi4uZjE1NGE0ZWUwOWU3OWIwNzU3NDY1N2M2OGVmODU2ZWE5ZGEwMmUzMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKQEAg
LTk4LDcgKzk4LDcgQEAgYm9vbCBTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXI6OmlzVGhyb3R0
bGVkUmVsYXRpdmVUb1BhZ2UoKSBjb25zdAogCiBib29sIFNjcmlwdGVkQW5pbWF0aW9uQ29udHJv
bGxlcjo6c2hvdWxkUmVzY2hlZHVsZVJlcXVlc3RBbmltYXRpb25GcmFtZShSZWR1Y2VkUmVzb2x1
dGlvblNlY29uZHMgdGltZXN0YW1wKSBjb25zdAogewotICAgIHJldHVybiBpc1Rocm90dGxlZFJl
bGF0aXZlVG9QYWdlKCkgJiYgKHRpbWVzdGFtcCAtIG1fbGFzdEFuaW1hdGlvbkZyYW1lVGltZXN0
YW1wIDwgcHJlZmVycmVkU2NyaXB0ZWRBbmltYXRpb25JbnRlcnZhbCgpKTsKKyAgICByZXR1cm4g
dGltZXN0YW1wIDw9IG1fbGFzdEFuaW1hdGlvbkZyYW1lVGltZXN0YW1wIHx8IChpc1Rocm90dGxl
ZFJlbGF0aXZlVG9QYWdlKCkgJiYgKHRpbWVzdGFtcCAtIG1fbGFzdEFuaW1hdGlvbkZyYW1lVGlt
ZXN0YW1wIDwgcHJlZmVycmVkU2NyaXB0ZWRBbmltYXRpb25JbnRlcnZhbCgpKSk7CiB9CiAKIFNj
cmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcjo6Q2FsbGJhY2tJZCBTY3JpcHRlZEFuaW1hdGlvbkNv
bnRyb2xsZXI6OnJlZ2lzdGVyQ2FsbGJhY2soUmVmPFJlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxi
YWNrPiYmIGNhbGxiYWNrKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGVmYWVmODI0M2M0MTM5ZWE4ZGRmZmVlOGRjNmYwN2E0
NzI5MDg0ZTMuLjBmZmM4OTZlNDEyNTNmYmJjM2QwNTk5ZmEzZDg2MzA1ZGNlNDExM2UgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwyMCBAQAorMjAyMC0wOS0wMyAgQW50b2luZSBRdWludCAgPGdyYW91dHNAd2Vi
a2l0Lm9yZz4KKworICAgICAgICBDb25zZWN1dGl2ZSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgY2Fs
bGJhY2tzIG1heSBiZSBwYXNzZWQgdGhlIHNhbWUgdGltZXN0YW1wCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTYxMjIKKyAgICAgICAgPHJkYXI6Ly9w
cm9ibGVtLzY4MjY5NDQ1PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEFkZCBhIHRlc3QgdGhhdCB0d28gc3Vic2VxdWVudCBhbmltYXRpb24gZnJhbWVz
IGFzIGlkZW50aWZpZWQgdmlhIHJlcXVlc3RBbmltYXRpb25GcmFtZSgpIGNhbGxiYWNrcworICAg
ICAgICBhcmUgcHJvdmlkZWQgaW5jcmVhc2luZyB0aW1lc3RhbXBzLgorCisgICAgICAgIEFsc28g
cmVtb3ZpbmcgZmxha3kgZXhwZWN0YXRpb24gZm9yIHR3byBXUFQgYW5pbWF0aW9ucyB0ZXN0cyB3
aGljaCBwYXNzIHJlbGlhYmx5IGFmdGVyIHRoaXMgZml4LiAKKworICAgICAgICAqIGZhc3QvYW5p
bWF0aW9uL3JlcXVlc3QtYW5pbWF0aW9uLWZyYW1lLXVuaXF1ZS10aW1lc3RhbXAtZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2FuaW1hdGlvbi9yZXF1ZXN0LWFuaW1hdGlvbi1m
cmFtZS11bmlxdWUtdGltZXN0YW1wLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21h
Yy13azIvVGVzdEV4cGVjdGF0aW9uczoKKwogMjAyMC0wOC0zMSAgQ29tbWl0IFF1ZXVlICA8Y29t
bWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcmV2ZXJ0aW5nIHIy
NjYzNzggYW5kIHIyNjYzODEuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2FuaW1hdGlv
bi9yZXF1ZXN0LWFuaW1hdGlvbi1mcmFtZS11bmlxdWUtdGltZXN0YW1wLWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL2Zhc3QvYW5pbWF0aW9uL3JlcXVlc3QtYW5pbWF0aW9uLWZyYW1lLXVuaXF1
ZS10aW1lc3RhbXAtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVlNThjMTU2ODU5NDNkNTJmOGYw
M2Y1ZGJhMjVjZGM5NGEwNGJkOTIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0
L2FuaW1hdGlvbi9yZXF1ZXN0LWFuaW1hdGlvbi1mcmFtZS11bmlxdWUtdGltZXN0YW1wLWV4cGVj
dGVkLnR4dApAQCAtMCwwICsxLDMgQEAKKworUEFTUyBUaW1lc3RhbXBzIG9mIHJlcXVlc3RBbmlt
YXRpb25GcmFtZSgpIGNhbGxiYWNrcyBpbmNyZWFzZS4gCisKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2Zhc3QvYW5pbWF0aW9uL3JlcXVlc3QtYW5pbWF0aW9uLWZyYW1lLXVuaXF1ZS10aW1lc3Rh
bXAuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvYW5pbWF0aW9uL3JlcXVlc3QtYW5pbWF0aW9uLWZy
YW1lLXVuaXF1ZS10aW1lc3RhbXAuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MmY0Mjk1MTY1MTI4MjkwMjkw
MmMzNzMzNTRiZTQ5ODRlMmRkMDQ2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFz
dC9hbmltYXRpb24vcmVxdWVzdC1hbmltYXRpb24tZnJhbWUtdW5pcXVlLXRpbWVzdGFtcC5odG1s
CkBAIC0wLDAgKzEsMTYgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8Ym9keT4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9Ii4uLy4uL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0PgorCitwcm9taXNlX3Rlc3QoYXN5bmMgdCA9PiB7CisJbGV0IGZpcnN0RnJhbWVUaW1l
c3RhbXAgPSBhd2FpdCBuZXcgUHJvbWlzZShyZXF1ZXN0QW5pbWF0aW9uRnJhbWUpOworCWxldCBz
ZWNvbmRGcmFtZVRpbWVzdGFtcCA9IGF3YWl0IG5ldyBQcm9taXNlKHJlcXVlc3RBbmltYXRpb25G
cmFtZSk7CisJYXNzZXJ0X2dyZWF0ZXJfdGhhbihzZWNvbmRGcmFtZVRpbWVzdGFtcCwgZmlyc3RG
cmFtZVRpbWVzdGFtcCk7Cit9LCAiVGltZXN0YW1wcyBvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUo
KSBjYWxsYmFja3MgaW5jcmVhc2UuIik7CisKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMi9UZXN0RXhwZWN0YXRpb25z
IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMi9UZXN0RXhwZWN0YXRpb25zCmluZGV4IGZj
Y2YyOTg3OWViYzYwNmU5YWJiZTliOWY2MmJhNTg4NjQ2MzZhN2QuLmIzYTg5MjZhNmYxMWJkYjMw
Y2UyMjUxYzQ0NTEzM2RhMzI3MDUxM2YgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3Jt
L21hYy13azIvVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMt
d2syL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTEyNTAsOSArMTI1MCw2IEBAIHdlYmtpdC5vcmcvYi8x
Nzk3OTYgaHR0cC90ZXN0cy9jYWNoZS9kaXNrLWNhY2hlL2Rpc2stY2FjaGUtdmFsaWRhdGlvbi1i
YWNrLW5hdmlnCiBbIGFybTY0IF0gaW5zcGVjdG9yL2NhbnZhcy9tZW1vcnkuaHRtbCBbIEZhaWx1
cmUgXQogWyBhcm02NCBdIG1lZGlhL3ZpZGVvLWNhbnZhcy1jcmVhdGVQYXR0ZXJuLmh0bWwgWyBG
YWlsdXJlIF0KIAotIyByZGFyOi8vNjY3OTg3NTEgKFJFR1JFU1NJT04gKDIwQTIzMjFhLTIwQTIz
MjdhKTogaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLWFuaW1hdGlvbnMv
ZXZlbnQtZGlzcGF0Y2gudGVudGF0aXZlLmh0bWwgaXMgYSBmbGFreSBmYWlsdXJlKQotWyBhcm02
NCBdIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy1hbmltYXRpb25zL2V2
ZW50LWRpc3BhdGNoLnRlbnRhdGl2ZS5odG1sIFsgUGFzcyBGYWlsdXJlIF0KLQogIyByZGFyOi8v
NjY4MDYwNTkgKFJFR1JFU1NJT04gKDIwQTIzMjFhLTIwQTIzNDhiKTogNCBmYXN0IGhpZHBpIHRl
c3RzIGFyZSBhIGZsYWt5IGltYWdlIGZhaWx1cmUpCiBbIGFybTY0IF0gZmFzdC9mbGV4Ym94L2hp
ZHBpLXNpbXBsZS1saW5lLWxheW91dC13aXRoLWZsZXhib3gtYW5kLXRyYW5zaXRpb24uaHRtbCBb
IEltYWdlT25seUZhaWx1cmUgXQogWyBhcm02NCBdIGZhc3QvZm9ybXMvaGlkcGktZmllbGRzZXQt
b24tc3VicGl4ZWwtcG9zaXRpb24td2hlbi1sZWdlbmQtaXMtcHJlc2VudC5odG1sIFsgSW1hZ2VP
bmx5RmFpbHVyZSBdCkBAIC0xMjYyLDkgKzEyNTksNiBAQCB3ZWJraXQub3JnL2IvMTc5Nzk2IGh0
dHAvdGVzdHMvY2FjaGUvZGlzay1jYWNoZS9kaXNrLWNhY2hlLXZhbGlkYXRpb24tYmFjay1uYXZp
ZwogIyByZGFyOi8vNjY4MDc1NTQKIFsgYXJtNjQgXSBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL2Nzcy9jc3MtdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1iYXNlLXJlc3BvbnNlLTAwMi5o
dG1sICBbIEZhaWx1cmUgXQogCi0jIHJkYXI6Ly82NjgwODIyOCAoUkVHUkVTU0lPTiAoMjBBMjMy
MWEtMjBBMjM0OGIpOiBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYi1hbmltYXRp
b25zL2ludGVyZmFjZXMvQW5pbWF0aW9uL29ucmVtb3ZlLmh0bWwgaXMgYSBmbGFreSBmYWlsdXJl
KQotWyBhcm02NCBdIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2ViLWFuaW1hdGlv
bnMvaW50ZXJmYWNlcy9BbmltYXRpb24vb25yZW1vdmUuaHRtbCBbIEZhaWx1cmUgXQotCiB3ZWJr
aXQub3JnL2IvMjE1NTgxIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL1JU
Q1J0cFJlY2VpdmVyLWdldFN0YXRzLmh0dHBzLmh0bWwgWyBQYXNzIEZhaWx1cmUgXQogCiB3ZWJr
aXQub3JnL2IvMjE1NjA2IHdlYmdwdS93aGxzbC9kby13aGlsZS1sb29wLWJyZWFrLmh0bWwgWyBQ
YXNzIEZhaWx1cmUgXQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>