<?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>171614</bug_id>
          
          <creation_ts>2017-05-03 13:16:05 -0700</creation_ts>
          <short_desc>When the image decoding thread makes a callOnMainThread(), ensure all the objects it needs are protected</short_desc>
          <delta_ts>2018-01-08 10:03:53 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Images</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=181391</see_also>
          <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="Said Abou-Hallawa">sabouhallawa</reporter>
          <assigned_to name="Said Abou-Hallawa">sabouhallawa</assigned_to>
          <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>ggaren</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>tobias.netzel</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1304198</commentid>
    <comment_count>0</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2017-05-03 13:16:05 -0700</bug_when>
    <thetext>This is the scenario of the crash:

1. The BitmapImage::draw() in the main thread requests decoding an image frame through ImageFrameCache::requestFrameAsyncDecodingAtIndex()
2. The decoding thread in ImageFrameCache::startAsyncDecodingQueue() starts decoding the image frame.
3. The main thread deletes the BitmapImage. This means the ImageFrameCache will be dereferenced but will not deleted since the decoding thread has a protecting copy.
4. The decoding thread still can proceed since all the data members are captured including the ImageFrameCache.
5. The decoding thread pushes a request on the main thread to cache the decoded frame.
6. The decoding thread terminates since ImageFrameCache::stopAsyncDecodingQueue() was called when the BitmapImage was deleted. ImageFrameCache is dereferenced the second time. And in this case, it is deleted.
7. The call on the main thread to ImageFrameCache::cacheFrameNativeImageAtIndex() is now acting on a deleted objet.

The fix is to protect this and protectedDecoder as well by making callOnMainThread() in the decoding thread capture them. We do the same thing for protectedQueue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1304200</commentid>
    <comment_count>1</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2017-05-03 13:16:43 -0700</bug_when>
    <thetext>&lt;rdar://problem/31538943&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1304211</commentid>
    <comment_count>2</comment_count>
      <attachid>308944</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2017-05-03 13:34:15 -0700</bug_when>
    <thetext>Created attachment 308944
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1304214</commentid>
    <comment_count>3</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-05-03 13:37:02 -0700</bug_when>
    <thetext>Attachment 308944 did not pass style-queue:


ERROR: Source/WebCore/ChangeLog:3:  Please consider whether the use of security-sensitive phrasing could help someone exploit WebKit: use after free  [changelog/unwantedsecurityterms] [3]
Total errors found: 1 in 2 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1304220</commentid>
    <comment_count>4</comment_count>
      <attachid>308944</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2017-05-03 13:48:21 -0700</bug_when>
    <thetext>Comment on attachment 308944
Patch

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

&gt; Source/WebCore/platform/graphics/ImageFrameCache.cpp:295
&gt; +            callOnMainThread([this, protectedThis = protectedThis.copyRef(), protectedQueue = protectedQueue.copyRef(), protectedDecoder = protectedDecoder.copyRef(), nativeImage, frameRequest] () mutable {

Why not just pass a  RefPtr&lt;ImageFrameCache&gt; protectedThis(this) to the callOnMainThread?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1304230</commentid>
    <comment_count>5</comment_count>
      <attachid>308944</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2017-05-03 14:04:28 -0700</bug_when>
    <thetext>Comment on attachment 308944
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/ImageFrameCache.cpp:295
&gt;&gt; +            callOnMainThread([this, protectedThis = protectedThis.copyRef(), protectedQueue = protectedQueue.copyRef(), protectedDecoder = protectedDecoder.copyRef(), nativeImage, frameRequest] () mutable {
&gt; 
&gt; Why not just pass a  RefPtr&lt;ImageFrameCache&gt; protectedThis(this) to the callOnMainThread?

Because m_decodingQueue can be set to nullptr in ImageFrameCache::stopAsyncDecodingQueue() and m_decoder can be changed to another ImageDecoder in ImageFrameCache::setDecoder(). So protecting ImageFrameCache does not protect the members which the decoding thread starts with.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1308119</commentid>
    <comment_count>6</comment_count>
      <attachid>309959</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2017-05-12 15:51:10 -0700</bug_when>
    <thetext>Created attachment 309959
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1308130</commentid>
    <comment_count>7</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2017-05-12 16:05:39 -0700</bug_when>
    <thetext>The difference between the two patches is the second one makes all the pointers, which are protected by the decoding thread, be ThreadSafeRefCounted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1309281</commentid>
    <comment_count>8</comment_count>
      <attachid>309959</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2017-05-16 14:13:10 -0700</bug_when>
    <thetext>Comment on attachment 309959
Patch

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

&gt; Source/WebCore/ChangeLog:8
&gt; +        The asynchronous image decoding was design to not block the main thread if

Typo:  &quot;design&quot; =&gt; &quot;designed&quot;

&gt; Source/WebCore/ChangeLog:18
&gt; +        This might lead to two kinds of crashes:
&gt; +        1. A SIG fault inside the ImageDecoder trying to access one of its member
&gt; +        2. A SIG fault inside the ImageFrameCache trying to access one of its frames

Instead of &quot;SIG fault&quot; I&apos;d use &quot;segfault&quot; (or SIGSEGV).

&gt; Source/WebCore/platform/graphics/ImageFrameCache.cpp:298
&gt;              // Update the cached frames on the main thread to avoid updating the MemoryCache from a different thread.
&gt; -            callOnMainThread([this, protectedQueue = protectedQueue.copyRef(), nativeImage, frameRequest] () mutable {
&gt; +            callOnMainThread([this, protectedThis = protectedThis.copyRef(), protectedQueue = protectedQueue.copyRef(), protectedDecoder = protectedDecoder.copyRef(), nativeImage, frameRequest] () mutable {
&gt;                  // The queue may be closed if after we got the frame NativeImage, stopAsyncDecodingQueue() was called
&gt;                  if (protectedQueue.ptr() == m_decodingQueue) {
&gt;                      ASSERT(m_frameCommitQueue.first() == frameRequest);

I don&apos;t think adding the protectedThings to the lambda is enough.  You need to actually use them in the code inside the lambda, maybe something like this (UNTESTED):

                // The queue may be closed if after we got the frame NativeImage, stopAsyncDecodingQueue() was called
                if (protectedQueue.ptr() == protectedThis-&gt;m_decodingQueue) {
                    ASSERT(protectedThis-&gt;m_frameCommitQueue.first() == frameRequest);
                    protectedThis-&gt;m_frameCommitQueue.removeFirst();
                    protectedThis-&gt;cacheNativeImageAtIndexAsync(WTFMove(nativeImage), frameRequest.index, frameRequest.subsamplingLevel, frameRequest.decodingOptions, frameRequest.decodingStatus);
                } else
                    LOG(Images, &quot;ImageFrameCache::%s - %p - url: %s [frame %ld will not cached]&quot;, __FUNCTION__, protectedThis, sourceURL().string().utf8().data(), frameRequest.index);

Where is protectedDecoder used here?  If it&apos;s not called by this block of code, it probably isn&apos;t needed.  If it is called from this block of code, it may need to be passed through (via function arguments) to where it&apos;s used.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1309352</commentid>
    <comment_count>9</comment_count>
      <attachid>310311</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2017-05-16 15:53:53 -0700</bug_when>
    <thetext>Created attachment 310311
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1309360</commentid>
    <comment_count>10</comment_count>
      <attachid>309959</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2017-05-16 16:07:11 -0700</bug_when>
    <thetext>Comment on attachment 309959
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:8
&gt;&gt; +        The asynchronous image decoding was design to not block the main thread if
&gt; 
&gt; Typo:  &quot;design&quot; =&gt; &quot;designed&quot;

Fixed.

&gt;&gt; Source/WebCore/ChangeLog:18
&gt;&gt; +        2. A SIG fault inside the ImageFrameCache trying to access one of its frames
&gt; 
&gt; Instead of &quot;SIG fault&quot; I&apos;d use &quot;segfault&quot; (or SIGSEGV).

segfault was used.

&gt;&gt; Source/WebCore/platform/graphics/ImageFrameCache.cpp:298
&gt;&gt;                      ASSERT(m_frameCommitQueue.first() == frameRequest);
&gt; 
&gt; I don&apos;t think adding the protectedThings to the lambda is enough.  You need to actually use them in the code inside the lambda, maybe something like this (UNTESTED):
&gt; 
&gt;                 // The queue may be closed if after we got the frame NativeImage, stopAsyncDecodingQueue() was called
&gt;                 if (protectedQueue.ptr() == protectedThis-&gt;m_decodingQueue) {
&gt;                     ASSERT(protectedThis-&gt;m_frameCommitQueue.first() == frameRequest);
&gt;                     protectedThis-&gt;m_frameCommitQueue.removeFirst();
&gt;                     protectedThis-&gt;cacheNativeImageAtIndexAsync(WTFMove(nativeImage), frameRequest.index, frameRequest.subsamplingLevel, frameRequest.decodingOptions, frameRequest.decodingStatus);
&gt;                 } else
&gt;                     LOG(Images, &quot;ImageFrameCache::%s - %p - url: %s [frame %ld will not cached]&quot;, __FUNCTION__, protectedThis, sourceURL().string().utf8().data(), frameRequest.index);
&gt; 
&gt; Where is protectedDecoder used here?  If it&apos;s not called by this block of code, it probably isn&apos;t needed.  If it is called from this block of code, it may need to be passed through (via function arguments) to where it&apos;s used.

You are right. I changed the code above to be like what you suggested. The decoder is used in cacheMetadataAtIndex() which is called from cacheNativeImageAtIndex() which is called from cacheNativeImageAtIndexAsync().

Instead of passing protectedDecoder all the way from this lambda function to cacheMetadataAtIndex(), I changed the above if-statment to be

if (protectedQueue.ptr() == protectedThis-&gt;m_decodingQueue &amp;&amp; protectedDecoder.ptr() == protectedThis-&gt;m_decoder)

Adding protectedDecoder.ptr() == protectedThis-&gt;m_decoder ensures that, the decoder we start the thread with is the one we are going to use in cacheMetadataAtIndex(). This check is safe since this code runs on the main thread and m_decoder can be changed only from the main thread. When the decoder changes in ImageFrameCache::setDecoder() the decoding thread stops which means that decoding the current frame on the decoding thread and caching its metadata on the main thread is not needed and can be thrown away.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1309549</commentid>
    <comment_count>11</comment_count>
      <attachid>310311</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2017-05-17 04:20:28 -0700</bug_when>
    <thetext>Comment on attachment 310311
Patch

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

r=me with two fixes for removing &apos;this&apos; from the lambda.

&gt; Source/WebCore/platform/graphics/ImageFrameCache.cpp:298
&gt; +            callOnMainThread([this, protectedThis = protectedThis.copyRef(), protectedQueue = protectedQueue.copyRef(), protectedDecoder = protectedDecoder.copyRef(), nativeImage, frameRequest] () mutable {

Don&apos;t need to capture &apos;this&apos; since you have &apos;protectedThis&apos;.  (See below.)

&gt; Source/WebCore/platform/graphics/ImageFrameCache.cpp:299
&gt;                  // The queue may be closed if after we got the frame NativeImage, stopAsyncDecodingQueue() was called

Nit:  Period at end of comment.

&gt; Source/WebCore/platform/graphics/ImageFrameCache.cpp:305
&gt; +                    LOG(Images, &quot;ImageFrameCache::%s - %p - url: %s [frame %ld will not cached]&quot;, __FUNCTION__, this, protectedThis-&gt;sourceURL().string().utf8().data(), frameRequest.index);

Replace &apos;this&apos; with &apos;protectedThis-&gt;get()&apos; here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1309660</commentid>
    <comment_count>12</comment_count>
      <attachid>310408</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2017-05-17 10:14:22 -0700</bug_when>
    <thetext>Created attachment 310408
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1309663</commentid>
    <comment_count>13</comment_count>
      <attachid>310311</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2017-05-17 10:18:39 -0700</bug_when>
    <thetext>Comment on attachment 310311
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/ImageFrameCache.cpp:298
&gt;&gt; +            callOnMainThread([this, protectedThis = protectedThis.copyRef(), protectedQueue = protectedQueue.copyRef(), protectedDecoder = protectedDecoder.copyRef(), nativeImage, frameRequest] () mutable {
&gt; 
&gt; Don&apos;t need to capture &apos;this&apos; since you have &apos;protectedThis&apos;.  (See below.)

Yes this is correct. I removed capturing &apos;this&apos; from the decoding thread and from the lambda of the callOnMainThread(). This will ensure we only use &apos;protectedThis&apos; in both of them.

&gt;&gt; Source/WebCore/platform/graphics/ImageFrameCache.cpp:299
&gt;&gt;                  // The queue may be closed if after we got the frame NativeImage, stopAsyncDecodingQueue() was called
&gt; 
&gt; Nit:  Period at end of comment.

Fixed.

&gt;&gt; Source/WebCore/platform/graphics/ImageFrameCache.cpp:305
&gt;&gt; +                    LOG(Images, &quot;ImageFrameCache::%s - %p - url: %s [frame %ld will not cached]&quot;, __FUNCTION__, this, protectedThis-&gt;sourceURL().string().utf8().data(), frameRequest.index);
&gt; 
&gt; Replace &apos;this&apos; with &apos;protectedThis-&gt;get()&apos; here.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1309722</commentid>
    <comment_count>14</comment_count>
      <attachid>310408</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2017-05-17 11:56:47 -0700</bug_when>
    <thetext>Comment on attachment 310408
Patch

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

r=me if there are no issues with the WTFMove(nativeImage) inside the callOnMainThread().

&gt; Source/WebCore/platform/graphics/ImageFrameCache.cpp:303
&gt; +            callOnMainThread([protectedThis = protectedThis.copyRef(), protectedQueue = protectedQueue.copyRef(), protectedDecoder = protectedDecoder.copyRef(), nativeImage, frameRequest] () mutable {
&gt; +                // The queue may have been closed if after we got the frame NativeImage, stopAsyncDecodingQueue() was called.
&gt; +                if (protectedQueue.ptr() == protectedThis-&gt;m_decodingQueue &amp;&amp; protectedDecoder.ptr() == protectedThis-&gt;m_decoder) {
&gt; +                    ASSERT(protectedThis-&gt;m_frameCommitQueue.first() == frameRequest);
&gt; +                    protectedThis-&gt;m_frameCommitQueue.removeFirst();
&gt; +                    protectedThis-&gt;cacheNativeImageAtIndexAsync(WTFMove(nativeImage), frameRequest.index, frameRequest.subsamplingLevel, frameRequest.decodingOptions, frameRequest.decodingStatus);

Is there a difference between using WTFMove(nativeImage) in the lambda (line 298) versus in the cacheNativeImageAtIndexAsync() call (line 303)?

I don&apos;t know WTFMove() well enough to reason about that, but everything else looks good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1309754</commentid>
    <comment_count>15</comment_count>
      <attachid>310430</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2017-05-17 12:51:09 -0700</bug_when>
    <thetext>Created attachment 310430
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1309760</commentid>
    <comment_count>16</comment_count>
      <attachid>310430</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2017-05-17 12:58:50 -0700</bug_when>
    <thetext>Comment on attachment 310430
Patch

r=me  Looks good!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1309773</commentid>
    <comment_count>17</comment_count>
      <attachid>310408</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2017-05-17 13:28:21 -0700</bug_when>
    <thetext>Comment on attachment 310408
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/ImageFrameCache.cpp:303
&gt;&gt; +                    protectedThis-&gt;cacheNativeImageAtIndexAsync(WTFMove(nativeImage), frameRequest.index, frameRequest.subsamplingLevel, frameRequest.decodingOptions, frameRequest.decodingStatus);
&gt; 
&gt; Is there a difference between using WTFMove(nativeImage) in the lambda (line 298) versus in the cacheNativeImageAtIndexAsync() call (line 303)?
&gt; 
&gt; I don&apos;t know WTFMove() well enough to reason about that, but everything else looks good.

This is a good point. Actually using WTFMove(nativeImage) is better. Given that the retain_count of nativeImage = 1 before callOnMainThread(), here is the difference:

-- For callOnMainThread([..., nativeImage, ...]() { ... }); the compiler generates the following implicit calls:
  - The copy constructor RetainPtr(PtrType ptr) is called which will call CFRetain(). So retain_count of nativeImage = 2.
  - The move constructor RetainPtr(RetainPtr&amp;&amp; o) is called to move the copied object to the argument object. So no change in retain_count.
  - After callOnMainThread() finishes, the destructor ~RetainPtr() is called for copied object. But nothing happens since this object was moved.
  - When the loop finishes, nativeImage goes out of scope so the destructor ~RetainPtr() is called for nativeImage which will call CFRelease(). So retain_count of nativeImage = 1.
  - The retain_count of nativeImage = 1 when the lambda function is dispatched. When calling cacheNativeImageAtIndexAsync(), nativeImage will be moved .nativeImage will be moved again when it is cached in the ImageFrame.

-- For callOnMainThread([..., nativeImage = WTFMove(nativeImage), ...]() { ... }); the compilerr generates the following implicit calls:
  - The move constructor RetainPtr(RetainPtr&amp;&amp; o) is called to move nativeImage. So retain_count of nativeImage = 1.
  - The move constructor RetainPtr(RetainPtr&amp;&amp; o) is called to move the first moved object to the argument object. So no change in retain_count.
  - After callOnMainThread() finishes, the destructor ~RetainPtr() is called for the first moved object. But nothing happens to retain_count since the object was moved.
  - When the loop finishes, nativeImage goes out of scope so the destructor ~RetainPtr() is called for nativeImage But nothing happens because it was moved.
  - The retain_count of nativeImage = 1 when the lambda function is dispatched. When calling cacheNativeImageAtIndexAsync(), nativeImage will be moved. nativeImage will be moved again when it is cached in the ImageFrame.

So using WTFMove() will make nativeImage be passed without any ref counting churns.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1309802</commentid>
    <comment_count>18</comment_count>
      <attachid>310430</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-05-17 13:58:46 -0700</bug_when>
    <thetext>Comment on attachment 310430
Patch

Clearing flags on attachment: 310430

Committed r216998: &lt;http://trac.webkit.org/changeset/216998&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1309803</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-05-17 13:58:48 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386482</commentid>
    <comment_count>20</comment_count>
      <attachid>310430</attachid>
    <who name="Tobias Netzel">tobias.netzel</who>
    <bug_when>2018-01-06 04:24:20 -0800</bug_when>
    <thetext>Comment on attachment 310430
Patch

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

&gt; Source/WebCore/platform/graphics/ImageFrameCache.cpp:309
&gt; -        while (m_frameRequestQueue.dequeue(frameRequest)) {
&gt; +        while (protectedThis-&gt;m_frameRequestQueue.dequeue(frameRequest)) {
&gt;              TraceScope tracingScope(AsyncImageDecodeStart, AsyncImageDecodeEnd);
&gt;  
&gt;              // Get the frame NativeImage on the decoding thread.
&gt;              NativeImagePtr nativeImage = protectedDecoder-&gt;createFrameImageAtIndex(frameRequest.index, frameRequest.subsamplingLevel, frameRequest.decodingOptions);
&gt;              if (nativeImage)
&gt; -                LOG(Images, &quot;ImageFrameCache::%s - %p - url: %s [frame %ld has been decoded]&quot;, __FUNCTION__, this, sourceURL().string().utf8().data(), frameRequest.index);
&gt; -            else
&gt; -                LOG(Images, &quot;ImageFrameCache::%s - %p - url: %s [decoding for frame %ld has failed]&quot;, __FUNCTION__, this, sourceURL().string().utf8().data(), frameRequest.index);
&gt; +                LOG(Images, &quot;ImageFrameCache::%s - %p - url: %s [frame %ld has been decoded]&quot;, __FUNCTION__, protectedThis.ptr(), protectedThis-&gt;sourceURL().string().utf8().data(), frameRequest.index);
&gt; +            else {
&gt; +                LOG(Images, &quot;ImageFrameCache::%s - %p - url: %s [decoding for frame %ld has failed]&quot;, __FUNCTION__, protectedThis.ptr(), protectedThis-&gt;sourceURL().string().utf8().data(), frameRequest.index);
&gt; +                continue;
&gt; +            }
&gt;  
&gt;              // Update the cached frames on the main thread to avoid updating the MemoryCache from a different thread.
&gt; -            callOnMainThread([this, protectedQueue = protectedQueue.copyRef(), nativeImage, frameRequest] () mutable {
&gt; -                // The queue may be closed if after we got the frame NativeImage, stopAsyncDecodingQueue() was called
&gt; -                if (protectedQueue.ptr() == m_decodingQueue) {
&gt; -                    ASSERT(m_frameCommitQueue.first() == frameRequest);
&gt; -                    m_frameCommitQueue.removeFirst();
&gt; -                    cacheNativeImageAtIndexAsync(WTFMove(nativeImage), frameRequest.index, frameRequest.subsamplingLevel, frameRequest.decodingOptions, frameRequest.decodingStatus);
&gt; +            callOnMainThread([protectedThis = protectedThis.copyRef(), protectedQueue = protectedQueue.copyRef(), protectedDecoder = protectedDecoder.copyRef(), nativeImage = WTFMove(nativeImage), frameRequest] () mutable {
&gt; +                // The queue may have been closed if after we got the frame NativeImage, stopAsyncDecodingQueue() was called.
&gt; +                if (protectedQueue.ptr() == protectedThis-&gt;m_decodingQueue &amp;&amp; protectedDecoder.ptr() == protectedThis-&gt;m_decoder) {
&gt; +                    ASSERT(protectedThis-&gt;m_frameCommitQueue.first() == frameRequest);
&gt; +                    protectedThis-&gt;m_frameCommitQueue.removeFirst();
&gt; +                    protectedThis-&gt;cacheNativeImageAtIndexAsync(WTFMove(nativeImage), frameRequest.index, frameRequest.subsamplingLevel, frameRequest.decodingOptions, frameRequest.decodingStatus);
&gt;                  } else
&gt; -                    LOG(Images, &quot;ImageFrameCache::%s - %p - url: %s [frame %ld will not cached]&quot;, __FUNCTION__, this, sourceURL().string().utf8().data(), frameRequest.index);
&gt; +                    LOG(Images, &quot;ImageFrameCache::%s - %p - url: %s [frame %ld will not cached]&quot;, __FUNCTION__, protectedThis.ptr(), protectedThis-&gt;sourceURL().string().utf8().data(), frameRequest.index);
&gt;              });
&gt;          }

Continuing the loop in line 296 causes the assertion in line 303 to fail in my port of WebKit where nativeImage can be null sometimes.
I think you have to remove the request from m_frameCommitQueue when continuing the loop here - at least that made it work correctly for me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386516</commentid>
    <comment_count>21</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2018-01-06 14:07:08 -0800</bug_when>
    <thetext>(In reply to Tobias Netzel from comment #20)
&gt; Comment on attachment 310430 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=310430&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ImageFrameCache.cpp:309
&gt; &gt; -        while (m_frameRequestQueue.dequeue(frameRequest)) {
&gt; &gt; +        while (protectedThis-&gt;m_frameRequestQueue.dequeue(frameRequest)) {
&gt; &gt;              TraceScope tracingScope(AsyncImageDecodeStart, AsyncImageDecodeEnd);
&gt; &gt;  
&gt; &gt;              // Get the frame NativeImage on the decoding thread.
&gt; &gt;              NativeImagePtr nativeImage = protectedDecoder-&gt;createFrameImageAtIndex(frameRequest.index, frameRequest.subsamplingLevel, frameRequest.decodingOptions);
&gt; &gt;              if (nativeImage)
&gt; &gt; -                LOG(Images, &quot;ImageFrameCache::%s - %p - url: %s [frame %ld has been decoded]&quot;, __FUNCTION__, this, sourceURL().string().utf8().data(), frameRequest.index);
&gt; &gt; -            else
&gt; &gt; -                LOG(Images, &quot;ImageFrameCache::%s - %p - url: %s [decoding for frame %ld has failed]&quot;, __FUNCTION__, this, sourceURL().string().utf8().data(), frameRequest.index);
&gt; &gt; +                LOG(Images, &quot;ImageFrameCache::%s - %p - url: %s [frame %ld has been decoded]&quot;, __FUNCTION__, protectedThis.ptr(), protectedThis-&gt;sourceURL().string().utf8().data(), frameRequest.index);
&gt; &gt; +            else {
&gt; &gt; +                LOG(Images, &quot;ImageFrameCache::%s - %p - url: %s [decoding for frame %ld has failed]&quot;, __FUNCTION__, protectedThis.ptr(), protectedThis-&gt;sourceURL().string().utf8().data(), frameRequest.index);
&gt; &gt; +                continue;
&gt; &gt; +            }
&gt; &gt;  
&gt; &gt;              // Update the cached frames on the main thread to avoid updating the MemoryCache from a different thread.
&gt; &gt; -            callOnMainThread([this, protectedQueue = protectedQueue.copyRef(), nativeImage, frameRequest] () mutable {
&gt; &gt; -                // The queue may be closed if after we got the frame NativeImage, stopAsyncDecodingQueue() was called
&gt; &gt; -                if (protectedQueue.ptr() == m_decodingQueue) {
&gt; &gt; -                    ASSERT(m_frameCommitQueue.first() == frameRequest);
&gt; &gt; -                    m_frameCommitQueue.removeFirst();
&gt; &gt; -                    cacheNativeImageAtIndexAsync(WTFMove(nativeImage), frameRequest.index, frameRequest.subsamplingLevel, frameRequest.decodingOptions, frameRequest.decodingStatus);
&gt; &gt; +            callOnMainThread([protectedThis = protectedThis.copyRef(), protectedQueue = protectedQueue.copyRef(), protectedDecoder = protectedDecoder.copyRef(), nativeImage = WTFMove(nativeImage), frameRequest] () mutable {
&gt; &gt; +                // The queue may have been closed if after we got the frame NativeImage, stopAsyncDecodingQueue() was called.
&gt; &gt; +                if (protectedQueue.ptr() == protectedThis-&gt;m_decodingQueue &amp;&amp; protectedDecoder.ptr() == protectedThis-&gt;m_decoder) {
&gt; &gt; +                    ASSERT(protectedThis-&gt;m_frameCommitQueue.first() == frameRequest);
&gt; &gt; +                    protectedThis-&gt;m_frameCommitQueue.removeFirst();
&gt; &gt; +                    protectedThis-&gt;cacheNativeImageAtIndexAsync(WTFMove(nativeImage), frameRequest.index, frameRequest.subsamplingLevel, frameRequest.decodingOptions, frameRequest.decodingStatus);
&gt; &gt;                  } else
&gt; &gt; -                    LOG(Images, &quot;ImageFrameCache::%s - %p - url: %s [frame %ld will not cached]&quot;, __FUNCTION__, this, sourceURL().string().utf8().data(), frameRequest.index);
&gt; &gt; +                    LOG(Images, &quot;ImageFrameCache::%s - %p - url: %s [frame %ld will not cached]&quot;, __FUNCTION__, protectedThis.ptr(), protectedThis-&gt;sourceURL().string().utf8().data(), frameRequest.index);
&gt; &gt;              });
&gt; &gt;          }
&gt; 
&gt; Continuing the loop in line 296 causes the assertion in line 303 to fail in
&gt; my port of WebKit where nativeImage can be null sometimes.
&gt; I think you have to remove the request from m_frameCommitQueue when
&gt; continuing the loop here - at least that made it work correctly for me.

Can you file a new bug for this issue, Tobias?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386780</commentid>
    <comment_count>22</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2018-01-08 10:03:28 -0800</bug_when>
    <thetext>https://bugs.webkit.org/show_bug.cgi?id=181391 was filed to address https://bugs.webkit.org/show_bug.cgi?id=171614#c20</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>308944</attachid>
            <date>2017-05-03 13:34:15 -0700</date>
            <delta_ts>2017-05-12 15:51:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171614-20170503133414.patch</filename>
            <type>text/plain</type>
            <size>2530</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxNjEzNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDE3LTA1LTAzICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIGFmdGVy
IGZyZWUgaW4gSW1hZ2VGcmFtZUNhY2hlOjpjYWNoZUFzeW5jRnJhbWVOYXRpdmVJbWFnZUF0SW5k
ZXgoKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcx
NjE0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUHJv
dGVjdCB0aGUgSW1hZ2VGcmFtZUNhY2hlIGFuZCBpdHMgSW1hZ2VEZWNvZGVyIHdoZW4gdGhlIGRl
Y29kaW5nIHRocmVhZAorICAgICAgICBwdXNoZXMgaXRzIGNhbGxPbk1haW5UaHJlYWQoKS4gV2hl
biB0aGUgYm9keSBvZiB0aGUgY2FsbE9uTWFpblRocmVhZCgpCisgICAgICAgIGlzIGV4ZWN1dGVk
IGl0IGV4cGVjdHMgYSB2YWxpZCBJbWFnZUZyYW1lQ2FjaGUgYW5kIGEgdmFsaWQgSW1hZ2VEZWNv
ZGVyCisgICAgICAgIGV2ZW4gaWYgdGhlIGNvbnRhaW5lciBCaXRtYXBJbWFnZSBpcyBkZWxldGVk
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZUNhY2hlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVDYWNoZTo6c3RhcnRBc3luY0RlY29kaW5nUXVldWUp
OgorCiAyMDE3LTA1LTAzICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5j
b20+CiAKICAgICAgICAgQXN5bmMgaW1hZ2UgZGVjb2Rpbmcgc2hvdWxkIGJlIGRpc2FibGVkIGZv
ciBzbmFwc2hvdHMsIHByaW50aW5nIGFuZCBwcmV2aWV3CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVDYWNoZS5jcHAJKHJldmlzaW9u
IDIxNjEzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVD
YWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5MiwxMCArMjkyLDExIEBAIHZvaWQgSW1hZ2VG
cmFtZUNhY2hlOjpzdGFydEFzeW5jRGVjb2RpbmcKICAgICAgICAgICAgICAgICBMT0coSW1hZ2Vz
LCAiSW1hZ2VGcmFtZUNhY2hlOjolcyAtICVwIC0gdXJsOiAlcyBbZGVjb2RpbmcgZm9yIGZyYW1l
ICVsZCBoYXMgZmFpbGVkXSIsIF9fRlVOQ1RJT05fXywgdGhpcywgc291cmNlVVJMKCkuc3RyaW5n
KCkudXRmOCgpLmRhdGEoKSwgZnJhbWVSZXF1ZXN0LmluZGV4KTsKIAogICAgICAgICAgICAgLy8g
VXBkYXRlIHRoZSBjYWNoZWQgZnJhbWVzIG9uIHRoZSBtYWluIHRocmVhZCB0byBhdm9pZCB1cGRh
dGluZyB0aGUgTWVtb3J5Q2FjaGUgZnJvbSBhIGRpZmZlcmVudCB0aHJlYWQuCi0gICAgICAgICAg
ICBjYWxsT25NYWluVGhyZWFkKFt0aGlzLCBwcm90ZWN0ZWRRdWV1ZSA9IHByb3RlY3RlZFF1ZXVl
LmNvcHlSZWYoKSwgbmF0aXZlSW1hZ2UsIGZyYW1lUmVxdWVzdF0gKCkgbXV0YWJsZSB7CisgICAg
ICAgICAgICBjYWxsT25NYWluVGhyZWFkKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gcHJvdGVjdGVk
VGhpcy5jb3B5UmVmKCksIHByb3RlY3RlZFF1ZXVlID0gcHJvdGVjdGVkUXVldWUuY29weVJlZigp
LCBwcm90ZWN0ZWREZWNvZGVyID0gcHJvdGVjdGVkRGVjb2Rlci5jb3B5UmVmKCksIG5hdGl2ZUlt
YWdlLCBmcmFtZVJlcXVlc3RdICgpIG11dGFibGUgewogICAgICAgICAgICAgICAgIC8vIFRoZSBx
dWV1ZSBtYXkgYmUgY2xvc2VkIGlmIGFmdGVyIHdlIGdvdCB0aGUgZnJhbWUgTmF0aXZlSW1hZ2Us
IHN0b3BBc3luY0RlY29kaW5nUXVldWUoKSB3YXMgY2FsbGVkCiAgICAgICAgICAgICAgICAgaWYg
KHByb3RlY3RlZFF1ZXVlLnB0cigpID09IG1fZGVjb2RpbmdRdWV1ZSkgewogICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQobV9mcmFtZUNvbW1pdFF1ZXVlLmZpcnN0KCkgPT0gZnJhbWVSZXF1ZXN0
KTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1fZGVjb2RlciA9PSBwcm90ZWN0ZWREZWNv
ZGVyLnB0cigpKTsKICAgICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbW1pdFF1ZXVlLnJlbW92
ZUZpcnN0KCk7CiAgICAgICAgICAgICAgICAgICAgIGNhY2hlQXN5bmNGcmFtZU5hdGl2ZUltYWdl
QXRJbmRleChXVEZNb3ZlKG5hdGl2ZUltYWdlKSwgZnJhbWVSZXF1ZXN0LmluZGV4LCBmcmFtZVJl
cXVlc3Quc3Vic2FtcGxpbmdMZXZlbCwgZnJhbWVSZXF1ZXN0LmRlY29kaW5nT3B0aW9ucyk7CiAg
ICAgICAgICAgICAgICAgfSBlbHNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>309959</attachid>
            <date>2017-05-12 15:51:10 -0700</date>
            <delta_ts>2017-05-16 15:53:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171614-20170512155124.patch</filename>
            <type>text/plain</type>
            <size>5726</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxNjc5NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMzIEBACisyMDE3LTA1LTEyICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgV2hlbiB0aGUg
aW1hZ2UgZGVjb2RpbmcgdGhyZWFkIG1ha2VzIGEgY2FsbE9uTWFpblRocmVhZCgpLCBlbnN1cmUg
YWxsIHRoZSBvYmplY3RzIGl0IG5lZWRzIGFyZSBwcm90ZWN0ZWQKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MTYxNAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBhc3luY2hyb25vdXMgaW1hZ2UgZGVj
b2Rpbmcgd2FzIGRlc2lnbiB0byBub3QgYmxvY2sgdGhlIG1haW4gdGhyZWFkIGlmCisgICAgICAg
IHRoZSBpbWFnZSBpcyBkZWxldGVkLiBUbyBhY2hpZXZlIHRoYXQgd2UgYWxsb3cgZGVjb2Rpbmcg
dGhlIGN1cnJlbnQgZnJhbWUKKyAgICAgICAgZXZlbiBpZiBpdCBpcyBub3QgZ29pbmcgdG8gYmUg
dXNlZCBhZnRlciBjbG9zaW5nIHRoZSBkZWNvZGluZyBxdWV1ZS4gV2UgCisgICAgICAgIHByb3Rl
Y3QgYWxsIHRoZSBvYmplY3RzIHdoaWNoIHRoZSBkZWNvZGluZyB0aHJlYWQgdXNlcy4gQnV0IHdo
ZW4gYSBmcmFtZQorICAgICAgICBmaW5pc2hlcyBkZWNvZGluZyB0aGUgbmF0aXZlIGltYWdlIGZy
YW1lIGlzIGNhY2hlZCBvbiB0aGUgbWFpbiB0aHJlYWQuIE5vdAorICAgICAgICBhbGwgb2YgdGhl
IG9iamVjdHMgYXJlIHByb3RlY3RlZCB3aGVuIHRoZSBjYWxsT25NYWluVGhyZWFkKCkgaXMgZGlz
cGF0Y2hlZC4KKyAgICAgICAgVGhlIEltYWdlRnJhbWVDYWNoZSBhbmQgdGhlIEltYWdlRGVjb2Rl
ciBvYmplY3RzIGFyZSBub3QgcHJvdGVjdGVkLgorCisgICAgICAgIFRoaXMgbWlnaHQgbGVhZCB0
byB0d28ga2luZHMgb2YgY3Jhc2hlczoKKyAgICAgICAgMS4gQSBTSUcgZmF1bHQgaW5zaWRlIHRo
ZSBJbWFnZURlY29kZXIgdHJ5aW5nIHRvIGFjY2VzcyBvbmUgb2YgaXRzIG1lbWJlcgorICAgICAg
ICAyLiBBIFNJRyBmYXVsdCBpbnNpZGUgdGhlIEltYWdlRnJhbWVDYWNoZSB0cnlpbmcgdG8gYWNj
ZXNzIG9uZSBvZiBpdHMgZnJhbWVzCisKKyAgICAgICAgVGhlIGZpeCBpcyB0byBwcm90ZWN0IHRo
ZSBJbWFnZUZyYW1lQ2FjaGUgYW5kIHRoZSBJbWFnZURlY29kZXIgd2hlbiB0aGUKKyAgICAgICAg
ZGVjb2RpbmcgdGhyZWFkIG1ha2VzIGEgY2FsbE9uTWFpblRocmVhZCgpLiBBbHNvIHN3aXRjaCBh
bGwgdGhlIHBvaW50ZXJzCisgICAgICAgIHRoZSBkZWNvZGluZyB0aHJlYWRzIHByb3RlY3QgdG8g
YmUgVGhyZWFkU2FmZVJlZkNvdW50ZWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUZyYW1lQ2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUNhY2hlOjpz
dGFydEFzeW5jRGVjb2RpbmdRdWV1ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VGcmFtZUNhY2hlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNv
ZGVyQ0cuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VEZWNvZGVyRGly
ZWN0MkQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIu
aDoKKwogMjAxNy0wNS0xMiAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAg
ICAgIFtpT1MgV0sxXSBEbyBub3QgdHJ5IHRvIGxheW91dCBhIHN1YmZyYW1lIGlmIGl0cyBkb2N1
bWVudCBoYXMgbm90IGJlZW4gY29uc3RydWN0ZWQgeWV0LgpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZUNhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lQ2FjaGUuY3BwCShyZXZpc2lv
biAyMTY0NzEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1l
Q2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTIsNyArMjkyLDcgQEAgdm9pZCBJbWFnZUZy
YW1lQ2FjaGU6OnN0YXJ0QXN5bmNEZWNvZGluZwogICAgICAgICAgICAgICAgIExPRyhJbWFnZXMs
ICJJbWFnZUZyYW1lQ2FjaGU6OiVzIC0gJXAgLSB1cmw6ICVzIFtkZWNvZGluZyBmb3IgZnJhbWUg
JWxkIGhhcyBmYWlsZWRdIiwgX19GVU5DVElPTl9fLCB0aGlzLCBzb3VyY2VVUkwoKS5zdHJpbmco
KS51dGY4KCkuZGF0YSgpLCBmcmFtZVJlcXVlc3QuaW5kZXgpOwogCiAgICAgICAgICAgICAvLyBV
cGRhdGUgdGhlIGNhY2hlZCBmcmFtZXMgb24gdGhlIG1haW4gdGhyZWFkIHRvIGF2b2lkIHVwZGF0
aW5nIHRoZSBNZW1vcnlDYWNoZSBmcm9tIGEgZGlmZmVyZW50IHRocmVhZC4KLSAgICAgICAgICAg
IGNhbGxPbk1haW5UaHJlYWQoW3RoaXMsIHByb3RlY3RlZFF1ZXVlID0gcHJvdGVjdGVkUXVldWUu
Y29weVJlZigpLCBuYXRpdmVJbWFnZSwgZnJhbWVSZXF1ZXN0XSAoKSBtdXRhYmxlIHsKKyAgICAg
ICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBwcm90ZWN0ZWRU
aGlzLmNvcHlSZWYoKSwgcHJvdGVjdGVkUXVldWUgPSBwcm90ZWN0ZWRRdWV1ZS5jb3B5UmVmKCks
IHByb3RlY3RlZERlY29kZXIgPSBwcm90ZWN0ZWREZWNvZGVyLmNvcHlSZWYoKSwgbmF0aXZlSW1h
Z2UsIGZyYW1lUmVxdWVzdF0gKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICAgICAgLy8gVGhlIHF1
ZXVlIG1heSBiZSBjbG9zZWQgaWYgYWZ0ZXIgd2UgZ290IHRoZSBmcmFtZSBOYXRpdmVJbWFnZSwg
c3RvcEFzeW5jRGVjb2RpbmdRdWV1ZSgpIHdhcyBjYWxsZWQKICAgICAgICAgICAgICAgICBpZiAo
cHJvdGVjdGVkUXVldWUucHRyKCkgPT0gbV9kZWNvZGluZ1F1ZXVlKSB7CiAgICAgICAgICAgICAg
ICAgICAgIEFTU0VSVChtX2ZyYW1lQ29tbWl0UXVldWUuZmlyc3QoKSA9PSBmcmFtZVJlcXVlc3Qp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZUNhY2hl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VG
cmFtZUNhY2hlLmgJKHJldmlzaW9uIDIxNjQ3MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlRnJhbWVDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3
IEBAIGNsYXNzIEltYWdlOwogY2xhc3MgSW1hZ2VEZWNvZGVyOwogY2xhc3MgVVJMOwogCi1jbGFz
cyBJbWFnZUZyYW1lQ2FjaGUgOiBwdWJsaWMgUmVmQ291bnRlZDxJbWFnZUZyYW1lQ2FjaGU+IHsK
K2NsYXNzIEltYWdlRnJhbWVDYWNoZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxJbWFn
ZUZyYW1lQ2FjaGU+IHsKICAgICBmcmllbmQgY2xhc3MgSW1hZ2VTb3VyY2U7CiBwdWJsaWM6CiAg
ICAgc3RhdGljIFJlZjxJbWFnZUZyYW1lQ2FjaGU+IGNyZWF0ZShJbWFnZSogaW1hZ2UpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZURlY29kZXJDRy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVj
b2RlckNHLmgJKHJldmlzaW9uIDIxNjQ3MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlRGVjb2RlckNHLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcg
QEAgdHlwZWRlZiBjb25zdCBzdHJ1Y3QgX19DRkRhdGEqIENGRGF0YVJlZgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLWNsYXNzIEltYWdlRGVjb2RlciA6IHB1YmxpYyBSZWZDb3VudGVkPEltYWdl
RGVjb2Rlcj4geworY2xhc3MgSW1hZ2VEZWNvZGVyIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3Vu
dGVkPEltYWdlRGVjb2Rlcj4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGlj
OgogICAgIEltYWdlRGVjb2Rlcihjb25zdCBVUkwmIHNvdXJjZVVSTCwgQWxwaGFPcHRpb24sIEdh
bW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9JbWFnZURlY29kZXJEaXJlY3QyRC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZURlY29kZXJEaXJlY3QyRC5oCShy
ZXZpc2lvbiAyMTY0NzEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
SW1hZ2VEZWNvZGVyRGlyZWN0MkQuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBp
bnRlcmZhY2UgSVdJQ0ltYWdpbmdGYWN0b3J5OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNs
YXNzIEltYWdlRGVjb2RlciA6IHB1YmxpYyBSZWZDb3VudGVkPEltYWdlRGVjb2Rlcj4geworY2xh
c3MgSW1hZ2VEZWNvZGVyIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEltYWdlRGVjb2Rl
cj4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIEltYWdlRGVj
b2RlcigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1h
Z2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgJKHJldmlzaW9uIDIxNjQ3MSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC00OSw3ICs0OSw3IEBAIGNsYXNzIFVSTDsKIC8vIEVOQUJMRShJTUFHRV9ERUNPREVSX0RP
V05fU0FNUExJTkcpIGFsbG93cyBpbWFnZSBkZWNvZGVycyB0byBkb3duc2FtcGxlCiAvLyBhdCBk
ZWNvZGUgdGltZS4gSW1hZ2UgZGVjb2RlcnMgd2lsbCBkb3duc2FtcGxlIGFueSBpbWFnZXMgbGFy
Z2VyIHRoYW4KIC8vIHxtX21heE51bVBpeGVsc3wuIEZJWE1FOiBOb3QgeWV0IHN1cHBvcnRlZCBi
eSBhbGwgZGVjb2RlcnMuCi1jbGFzcyBJbWFnZURlY29kZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxJ
bWFnZURlY29kZXI+IHsKK2NsYXNzIEltYWdlRGVjb2RlciA6IHB1YmxpYyBUaHJlYWRTYWZlUmVm
Q291bnRlZDxJbWFnZURlY29kZXI+IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbWFnZURl
Y29kZXIpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBJbWFnZURlY29k
ZXIoQWxwaGFPcHRpb24gYWxwaGFPcHRpb24sIEdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uIGdh
bW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>310311</attachid>
            <date>2017-05-16 15:53:53 -0700</date>
            <delta_ts>2017-05-17 10:14:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171614-20170516155352.patch</filename>
            <type>text/plain</type>
            <size>7237</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE2OTQ3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmQxMTcxY2RiNTM0Mzdl
OGU5YzExMjY1OTk4Y2JiMmYxZDE3ZDkyNi4uNmQwYmFjNGFhNWM3NWVmMTQxMTkxMjEyYmQ0MTU2
OWVhNmNlODFmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDE3LTA1LTE2ICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgV2hlbiB0
aGUgaW1hZ2UgZGVjb2RpbmcgdGhyZWFkIG1ha2VzIGEgY2FsbE9uTWFpblRocmVhZCgpLCBlbnN1
cmUgYWxsIHRoZSBvYmplY3RzIGl0IG5lZWRzIGFyZSBwcm90ZWN0ZWQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MTYxNAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBhc3luY2hyb25vdXMgaW1hZ2Ug
ZGVjb2Rpbmcgd2FzIGRlc2lnbmVkIHRvIG5vdCBibG9jayB0aGUgbWFpbiB0aHJlYWQgaWYKKyAg
ICAgICAgdGhlIGltYWdlIGlzIGRlbGV0ZWQuIFRvIGFjaGlldmUgdGhhdCB3ZSBhbGxvdyBkZWNv
ZGluZyB0aGUgY3VycmVudCBmcmFtZQorICAgICAgICBldmVuIGlmIGl0IGlzIG5vdCBnb2luZyB0
byBiZSB1c2VkIGFmdGVyIGNsb3NpbmcgdGhlIGRlY29kaW5nIHF1ZXVlLiBXZSAKKyAgICAgICAg
cHJvdGVjdCBhbGwgdGhlIG9iamVjdHMgd2hpY2ggdGhlIGRlY29kaW5nIHRocmVhZCB1c2VzLiBC
dXQgd2hlbiBhIGZyYW1lCisgICAgICAgIGZpbmlzaGVzIGRlY29kaW5nIHRoZSBuYXRpdmUgaW1h
Z2UgZnJhbWUgaXMgY2FjaGVkIG9uIHRoZSBtYWluIHRocmVhZC4gTm90CisgICAgICAgIGFsbCBv
ZiB0aGUgb2JqZWN0cyBhcmUgcHJvdGVjdGVkIHdoZW4gdGhlIGNhbGxPbk1haW5UaHJlYWQoKSBp
cyBkaXNwYXRjaGVkLgorICAgICAgICBUaGUgSW1hZ2VGcmFtZUNhY2hlIGFuZCB0aGUgSW1hZ2VE
ZWNvZGVyIG9iamVjdHMgYXJlIG5vdCBwcm90ZWN0ZWQuCisKKyAgICAgICAgVGhpcyBtaWdodCBs
ZWFkIHRvIHR3byBraW5kcyBvZiBjcmFzaGVzOgorICAgICAgICAxLiBBIHNlZ2ZhdWx0IGluc2lk
ZSB0aGUgSW1hZ2VEZWNvZGVyIHRyeWluZyB0byBhY2Nlc3Mgb25lIG9mIGl0cyBtZW1iZXIKKyAg
ICAgICAgMi4gQSBzZWdmYXVsdCBpbnNpZGUgdGhlIEltYWdlRnJhbWVDYWNoZSB0cnlpbmcgdG8g
YWNjZXNzIG9uZSBvZiBpdHMgZnJhbWVzCisKKyAgICAgICAgVGhlIGZpeCBpcyB0byBwcm90ZWN0
IHRoZSBJbWFnZUZyYW1lQ2FjaGUgYW5kIHRoZSBJbWFnZURlY29kZXIgd2hlbiB0aGUKKyAgICAg
ICAgZGVjb2RpbmcgdGhyZWFkIG1ha2VzIGEgY2FsbE9uTWFpblRocmVhZCgpLiBBbHNvIHN3aXRj
aCBhbGwgdGhlIHBvaW50ZXJzCisgICAgICAgIHRoZSBkZWNvZGluZyB0aHJlYWRzIHByb3RlY3Qg
dG8gYmUgVGhyZWFkU2FmZVJlZkNvdW50ZWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUZyYW1lQ2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUNhY2hl
OjpzdGFydEFzeW5jRGVjb2RpbmdRdWV1ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VGcmFtZUNhY2hlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VE
ZWNvZGVyQ0cuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VEZWNvZGVy
RGlyZWN0MkQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29k
ZXIuaDoKKwogMjAxNy0wNS0xNiAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAK
ICAgICAgICAgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlIHNob3VsZCBzdXBwb3J0IHNpbmtX
YW50cyBmb3Igcm90YXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlRnJhbWVDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUZyYW1lQ2FjaGUuY3BwCmluZGV4IGJlMjRiYThkY2E2NWU1M2YyNTliOWUxMjc4
NGQzZjQ5ZDk1NWQwZDguLjgzOWQzMGY5OGRiYTU4ZDhjMGNhYmQ5MDI5YzRiMGE4NjUwN2E5MTMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVD
YWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFt
ZUNhY2hlLmNwcApAQCAtMjk1LDE0ICsyOTUsMTQgQEAgdm9pZCBJbWFnZUZyYW1lQ2FjaGU6OnN0
YXJ0QXN5bmNEZWNvZGluZ1F1ZXVlKCkKICAgICAgICAgICAgICAgICBMT0coSW1hZ2VzLCAiSW1h
Z2VGcmFtZUNhY2hlOjolcyAtICVwIC0gdXJsOiAlcyBbZGVjb2RpbmcgZm9yIGZyYW1lICVsZCBo
YXMgZmFpbGVkXSIsIF9fRlVOQ1RJT05fXywgdGhpcywgc291cmNlVVJMKCkuc3RyaW5nKCkudXRm
OCgpLmRhdGEoKSwgZnJhbWVSZXF1ZXN0LmluZGV4KTsKIAogICAgICAgICAgICAgLy8gVXBkYXRl
IHRoZSBjYWNoZWQgZnJhbWVzIG9uIHRoZSBtYWluIHRocmVhZCB0byBhdm9pZCB1cGRhdGluZyB0
aGUgTWVtb3J5Q2FjaGUgZnJvbSBhIGRpZmZlcmVudCB0aHJlYWQuCi0gICAgICAgICAgICBjYWxs
T25NYWluVGhyZWFkKFt0aGlzLCBwcm90ZWN0ZWRRdWV1ZSA9IHByb3RlY3RlZFF1ZXVlLmNvcHlS
ZWYoKSwgbmF0aXZlSW1hZ2UsIGZyYW1lUmVxdWVzdF0gKCkgbXV0YWJsZSB7CisgICAgICAgICAg
ICBjYWxsT25NYWluVGhyZWFkKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gcHJvdGVjdGVkVGhpcy5j
b3B5UmVmKCksIHByb3RlY3RlZFF1ZXVlID0gcHJvdGVjdGVkUXVldWUuY29weVJlZigpLCBwcm90
ZWN0ZWREZWNvZGVyID0gcHJvdGVjdGVkRGVjb2Rlci5jb3B5UmVmKCksIG5hdGl2ZUltYWdlLCBm
cmFtZVJlcXVlc3RdICgpIG11dGFibGUgewogICAgICAgICAgICAgICAgIC8vIFRoZSBxdWV1ZSBt
YXkgYmUgY2xvc2VkIGlmIGFmdGVyIHdlIGdvdCB0aGUgZnJhbWUgTmF0aXZlSW1hZ2UsIHN0b3BB
c3luY0RlY29kaW5nUXVldWUoKSB3YXMgY2FsbGVkCi0gICAgICAgICAgICAgICAgaWYgKHByb3Rl
Y3RlZFF1ZXVlLnB0cigpID09IG1fZGVjb2RpbmdRdWV1ZSkgewotICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQobV9mcmFtZUNvbW1pdFF1ZXVlLmZpcnN0KCkgPT0gZnJhbWVSZXF1ZXN0KTsKLSAg
ICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbW1pdFF1ZXVlLnJlbW92ZUZpcnN0KCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGNhY2hlTmF0aXZlSW1hZ2VBdEluZGV4QXN5bmMoV1RGTW92ZShuYXRp
dmVJbWFnZSksIGZyYW1lUmVxdWVzdC5pbmRleCwgZnJhbWVSZXF1ZXN0LnN1YnNhbXBsaW5nTGV2
ZWwsIGZyYW1lUmVxdWVzdC5kZWNvZGluZ09wdGlvbnMsIGZyYW1lUmVxdWVzdC5kZWNvZGluZ1N0
YXR1cyk7CisgICAgICAgICAgICAgICAgaWYgKHByb3RlY3RlZFF1ZXVlLnB0cigpID09IHByb3Rl
Y3RlZFRoaXMtPm1fZGVjb2RpbmdRdWV1ZSAmJiBwcm90ZWN0ZWREZWNvZGVyLnB0cigpID09IHBy
b3RlY3RlZFRoaXMtPm1fZGVjb2RlcikgeworICAgICAgICAgICAgICAgICAgICBBU1NFUlQocHJv
dGVjdGVkVGhpcy0+bV9mcmFtZUNvbW1pdFF1ZXVlLmZpcnN0KCkgPT0gZnJhbWVSZXF1ZXN0KTsK
KyAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+bV9mcmFtZUNvbW1pdFF1ZXVlLnJl
bW92ZUZpcnN0KCk7CisgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZFRoaXMtPmNhY2hlTmF0
aXZlSW1hZ2VBdEluZGV4QXN5bmMoV1RGTW92ZShuYXRpdmVJbWFnZSksIGZyYW1lUmVxdWVzdC5p
bmRleCwgZnJhbWVSZXF1ZXN0LnN1YnNhbXBsaW5nTGV2ZWwsIGZyYW1lUmVxdWVzdC5kZWNvZGlu
Z09wdGlvbnMsIGZyYW1lUmVxdWVzdC5kZWNvZGluZ1N0YXR1cyk7CiAgICAgICAgICAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIExPRyhJbWFnZXMsICJJbWFnZUZyYW1lQ2FjaGU6
OiVzIC0gJXAgLSB1cmw6ICVzIFtmcmFtZSAlbGQgd2lsbCBub3QgY2FjaGVkXSIsIF9fRlVOQ1RJ
T05fXywgdGhpcywgc291cmNlVVJMKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgZnJhbWVSZXF1
ZXN0LmluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgTE9HKEltYWdlcywgIkltYWdlRnJhbWVD
YWNoZTo6JXMgLSAlcCAtIHVybDogJXMgW2ZyYW1lICVsZCB3aWxsIG5vdCBjYWNoZWRdIiwgX19G
VU5DVElPTl9fLCB0aGlzLCBwcm90ZWN0ZWRUaGlzLT5zb3VyY2VVUkwoKS5zdHJpbmcoKS51dGY4
KCkuZGF0YSgpLCBmcmFtZVJlcXVlc3QuaW5kZXgpOwogICAgICAgICAgICAgfSk7CiAgICAgICAg
IH0KICAgICB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlRnJhbWVDYWNoZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VGcmFtZUNhY2hlLmgKaW5kZXggNTJkMzYwMzNkY2FkZTk4YjVlZDg0ZDYwY2I0NzE4NmUzMzJh
NjIyMS4uYzcxOGFmOTMxMDM5NTFlYzYxNjAyN2FhMGVhMDgzYmM3YTkxODM5YiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZUNhY2hlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZUNhY2hlLmgKQEAg
LTQxLDcgKzQxLDcgQEAgY2xhc3MgSW1hZ2U7CiBjbGFzcyBJbWFnZURlY29kZXI7CiBjbGFzcyBV
Ukw7CiAKLWNsYXNzIEltYWdlRnJhbWVDYWNoZSA6IHB1YmxpYyBSZWZDb3VudGVkPEltYWdlRnJh
bWVDYWNoZT4geworY2xhc3MgSW1hZ2VGcmFtZUNhY2hlIDogcHVibGljIFRocmVhZFNhZmVSZWZD
b3VudGVkPEltYWdlRnJhbWVDYWNoZT4gewogICAgIGZyaWVuZCBjbGFzcyBJbWFnZVNvdXJjZTsK
IHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPEltYWdlRnJhbWVDYWNoZT4gY3JlYXRlKEltYWdlKiBp
bWFnZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlRGVjb2RlckNHLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZURlY29kZXJDRy5oCmluZGV4IGM4ZGRiNmRkNWNiYjhhYTI1M2U0ZmEzOGE0OWY2ZDU2N2EzNzJk
MWMuLjEyODNjMTYwOGQxMGM5OTQ1OTRiNDJhZWI5YmNlOGI5ZDczNThiNTIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2RlckNHLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVyQ0cuaApA
QCAtMzUsNyArMzUsNyBAQCB0eXBlZGVmIGNvbnN0IHN0cnVjdCBfX0NGRGF0YSogQ0ZEYXRhUmVm
OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEltYWdlRGVjb2RlciA6IHB1YmxpYyBS
ZWZDb3VudGVkPEltYWdlRGVjb2Rlcj4geworY2xhc3MgSW1hZ2VEZWNvZGVyIDogcHVibGljIFRo
cmVhZFNhZmVSZWZDb3VudGVkPEltYWdlRGVjb2Rlcj4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwogcHVibGljOgogICAgIEltYWdlRGVjb2Rlcihjb25zdCBVUkwmIHNvdXJjZVVSTCwg
QWxwaGFPcHRpb24sIEdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZURlY29kZXJEaXJlY3QyRC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGVjb2RlckRpcmVj
dDJELmgKaW5kZXggYmY1ZWU0NjE4NGZjM2M0ZDRhZGJmNTE1YTZmZGQ0ZjhkYmY2OTNmMC4uNjQz
NmMwNjk0YmI0MjlhZDRlMTQ5YTEwYTIzNGIwMzIxYzVhMjZhZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGVjb2RlckRpcmVjdDJELmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGVjb2RlckRpcmVj
dDJELmgKQEAgLTM2LDcgKzM2LDcgQEAgaW50ZXJmYWNlIElXSUNJbWFnaW5nRmFjdG9yeTsKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBJbWFnZURlY29kZXIgOiBwdWJsaWMgUmVmQ291
bnRlZDxJbWFnZURlY29kZXI+IHsKK2NsYXNzIEltYWdlRGVjb2RlciA6IHB1YmxpYyBUaHJlYWRT
YWZlUmVmQ291bnRlZDxJbWFnZURlY29kZXI+IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKIHB1YmxpYzoKICAgICBJbWFnZURlY29kZXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgKaW5kZXggMTNkOGQwYjA2
ZmJkODQwZDcxY2NmNTVhZDU2YzU0OWUwM2Y2ZDhlMC4uZjViYWRhODM2Y2JlNmNkZjNlMTgwODE5
NGU5ZGY4MDQ5ZDVhMzIwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgKQEAgLTQ5LDcgKzQ5LDcgQEAgY2xhc3MgVVJM
OwogLy8gRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykgYWxsb3dzIGltYWdlIGRl
Y29kZXJzIHRvIGRvd25zYW1wbGUKIC8vIGF0IGRlY29kZSB0aW1lLiBJbWFnZSBkZWNvZGVycyB3
aWxsIGRvd25zYW1wbGUgYW55IGltYWdlcyBsYXJnZXIgdGhhbgogLy8gfG1fbWF4TnVtUGl4ZWxz
fC4gRklYTUU6IE5vdCB5ZXQgc3VwcG9ydGVkIGJ5IGFsbCBkZWNvZGVycy4KLWNsYXNzIEltYWdl
RGVjb2RlciA6IHB1YmxpYyBSZWZDb3VudGVkPEltYWdlRGVjb2Rlcj4geworY2xhc3MgSW1hZ2VE
ZWNvZGVyIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEltYWdlRGVjb2Rlcj4gewogICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdlRGVjb2Rlcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwogcHVibGljOgogICAgIEltYWdlRGVjb2RlcihBbHBoYU9wdGlvbiBhbHBoYU9wdGlvbiwg
R2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24gZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>310408</attachid>
            <date>2017-05-17 10:14:22 -0700</date>
            <delta_ts>2017-05-17 12:51:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171614-20170517101422.patch</filename>
            <type>text/plain</type>
            <size>9023</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE2OTQ3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmQxMTcxY2RiNTM0Mzdl
OGU5YzExMjY1OTk4Y2JiMmYxZDE3ZDkyNi4uNGI4Yjg1YjBkYmM1YzVjNGZkMGNiYzk5NGJlNjM5
MmEzMWYyYTQ0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDE3LTA1LTE2ICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgV2hlbiB0
aGUgaW1hZ2UgZGVjb2RpbmcgdGhyZWFkIG1ha2VzIGEgY2FsbE9uTWFpblRocmVhZCgpLCBlbnN1
cmUgYWxsIHRoZSBvYmplY3RzIGl0IG5lZWRzIGFyZSBwcm90ZWN0ZWQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MTYxNAorCisgICAgICAgIFJldmll
d2VkIGJ5IERhdmlkIEtpbHplci4KKworICAgICAgICBUaGUgYXN5bmNocm9ub3VzIGltYWdlIGRl
Y29kaW5nIHdhcyBkZXNpZ25lZCB0byBub3QgYmxvY2sgdGhlIG1haW4gdGhyZWFkIGlmCisgICAg
ICAgIHRoZSBpbWFnZSBpcyBkZWxldGVkLiBUbyBhY2hpZXZlIHRoYXQgd2UgYWxsb3cgZGVjb2Rp
bmcgdGhlIGN1cnJlbnQgZnJhbWUKKyAgICAgICAgZXZlbiBpZiBpdCBpcyBub3QgZ29pbmcgdG8g
YmUgdXNlZCBhZnRlciBjbG9zaW5nIHRoZSBkZWNvZGluZyBxdWV1ZS4gV2UgCisgICAgICAgIHBy
b3RlY3QgYWxsIHRoZSBvYmplY3RzIHdoaWNoIHRoZSBkZWNvZGluZyB0aHJlYWQgdXNlcy4gQnV0
IHdoZW4gYSBmcmFtZQorICAgICAgICBmaW5pc2hlcyBkZWNvZGluZyB0aGUgbmF0aXZlIGltYWdl
IGZyYW1lIGlzIGNhY2hlZCBvbiB0aGUgbWFpbiB0aHJlYWQuIE5vdAorICAgICAgICBhbGwgb2Yg
dGhlIG9iamVjdHMgYXJlIHByb3RlY3RlZCB3aGVuIHRoZSBjYWxsT25NYWluVGhyZWFkKCkgaXMg
ZGlzcGF0Y2hlZC4KKyAgICAgICAgVGhlIEltYWdlRnJhbWVDYWNoZSBhbmQgdGhlIEltYWdlRGVj
b2RlciBvYmplY3RzIGFyZSBub3QgcHJvdGVjdGVkLgorCisgICAgICAgIFRoaXMgbWlnaHQgbGVh
ZCB0byB0d28ga2luZHMgb2YgY3Jhc2hlczoKKyAgICAgICAgMS4gQSBzZWdmYXVsdCBpbnNpZGUg
dGhlIEltYWdlRGVjb2RlciB0cnlpbmcgdG8gYWNjZXNzIG9uZSBvZiBpdHMgbWVtYmVyCisgICAg
ICAgIDIuIEEgc2VnZmF1bHQgaW5zaWRlIHRoZSBJbWFnZUZyYW1lQ2FjaGUgdHJ5aW5nIHRvIGFj
Y2VzcyBvbmUgb2YgaXRzIGZyYW1lcworCisgICAgICAgIFRoZSBmaXggaXMgdG8gcHJvdGVjdCB0
aGUgSW1hZ2VGcmFtZUNhY2hlIGFuZCB0aGUgSW1hZ2VEZWNvZGVyIHdoZW4gdGhlCisgICAgICAg
IGRlY29kaW5nIHRocmVhZCBtYWtlcyBhIGNhbGxPbk1haW5UaHJlYWQoKS4gQWxzbyBzd2l0Y2gg
YWxsIHRoZSBwb2ludGVycworICAgICAgICB0aGUgZGVjb2RpbmcgdGhyZWFkcyBwcm90ZWN0IHRv
IGJlIFRocmVhZFNhZmVSZWZDb3VudGVkLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VGcmFtZUNhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVDYWNoZTo6
c3RhcnRBc3luY0RlY29kaW5nUXVldWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlRnJhbWVDYWNoZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVj
b2RlckNHLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGVjb2RlckRp
cmVjdDJELmg6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVy
Lmg6CisKIDIwMTctMDUtMTYgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAg
ICAgICAgIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZSBzaG91bGQgc3VwcG9ydCBzaW5rV2Fu
dHMgZm9yIHJvdGF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUZyYW1lQ2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VGcmFtZUNhY2hlLmNwcAppbmRleCBiZTI0YmE4ZGNhNjVlNTNmMjU5YjllMTI3ODRk
M2Y0OWQ5NTVkMGQ4Li4yNmIxODJmNGMxNWE0OGE3M2Y1ZDM5MGNlYTgxNjI0MWUwZjY1OTM4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lQ2Fj
aGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVD
YWNoZS5jcHAKQEAgLTI4MSwyOCArMjgxLDI4IEBAIHZvaWQgSW1hZ2VGcmFtZUNhY2hlOjpzdGFy
dEFzeW5jRGVjb2RpbmdRdWV1ZSgpCiAgICAgUmVmPEltYWdlRGVjb2Rlcj4gcHJvdGVjdGVkRGVj
b2RlciA9IFJlZjxJbWFnZURlY29kZXI+KCptX2RlY29kZXIpOwogCiAgICAgLy8gV2UgbmVlZCB0
byBwcm90ZWN0IHRoaXMsIG1fZGVjb2RpbmdRdWV1ZSBhbmQgbV9kZWNvZGVyIGZyb20gYmVpbmcg
ZGVsZXRlZCB3aGlsZSB3ZSBhcmUgaW4gdGhlIGRlY29kaW5nIGxvb3AuCi0gICAgZGVjb2RpbmdR
dWV1ZSgpLT5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVk
VGhpcyksIHByb3RlY3RlZFF1ZXVlID0gV1RGTW92ZShwcm90ZWN0ZWRRdWV1ZSksIHByb3RlY3Rl
ZERlY29kZXIgPSBXVEZNb3ZlKHByb3RlY3RlZERlY29kZXIpXSB7CisgICAgZGVjb2RpbmdRdWV1
ZSgpLT5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyksIHBy
b3RlY3RlZFF1ZXVlID0gV1RGTW92ZShwcm90ZWN0ZWRRdWV1ZSksIHByb3RlY3RlZERlY29kZXIg
PSBXVEZNb3ZlKHByb3RlY3RlZERlY29kZXIpXSB7CiAgICAgICAgIEltYWdlRnJhbWVSZXF1ZXN0
IGZyYW1lUmVxdWVzdDsKIAotICAgICAgICB3aGlsZSAobV9mcmFtZVJlcXVlc3RRdWV1ZS5kZXF1
ZXVlKGZyYW1lUmVxdWVzdCkpIHsKKyAgICAgICAgd2hpbGUgKHByb3RlY3RlZFRoaXMtPm1fZnJh
bWVSZXF1ZXN0UXVldWUuZGVxdWV1ZShmcmFtZVJlcXVlc3QpKSB7CiAgICAgICAgICAgICBUcmFj
ZVNjb3BlIHRyYWNpbmdTY29wZShBc3luY0ltYWdlRGVjb2RlU3RhcnQsIEFzeW5jSW1hZ2VEZWNv
ZGVFbmQpOwogCiAgICAgICAgICAgICAvLyBHZXQgdGhlIGZyYW1lIE5hdGl2ZUltYWdlIG9uIHRo
ZSBkZWNvZGluZyB0aHJlYWQuCiAgICAgICAgICAgICBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFn
ZSA9IHByb3RlY3RlZERlY29kZXItPmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KGZyYW1lUmVxdWVz
dC5pbmRleCwgZnJhbWVSZXF1ZXN0LnN1YnNhbXBsaW5nTGV2ZWwsIGZyYW1lUmVxdWVzdC5kZWNv
ZGluZ09wdGlvbnMpOwogICAgICAgICAgICAgaWYgKG5hdGl2ZUltYWdlKQotICAgICAgICAgICAg
ICAgIExPRyhJbWFnZXMsICJJbWFnZUZyYW1lQ2FjaGU6OiVzIC0gJXAgLSB1cmw6ICVzIFtmcmFt
ZSAlbGQgaGFzIGJlZW4gZGVjb2RlZF0iLCBfX0ZVTkNUSU9OX18sIHRoaXMsIHNvdXJjZVVSTCgp
LnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGZyYW1lUmVxdWVzdC5pbmRleCk7CisgICAgICAgICAg
ICAgICAgTE9HKEltYWdlcywgIkltYWdlRnJhbWVDYWNoZTo6JXMgLSAlcCAtIHVybDogJXMgW2Zy
YW1lICVsZCBoYXMgYmVlbiBkZWNvZGVkXSIsIF9fRlVOQ1RJT05fXywgcHJvdGVjdGVkVGhpcy5w
dHIoKSwgcHJvdGVjdGVkVGhpcy0+c291cmNlVVJMKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwg
ZnJhbWVSZXF1ZXN0LmluZGV4KTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBM
T0coSW1hZ2VzLCAiSW1hZ2VGcmFtZUNhY2hlOjolcyAtICVwIC0gdXJsOiAlcyBbZGVjb2Rpbmcg
Zm9yIGZyYW1lICVsZCBoYXMgZmFpbGVkXSIsIF9fRlVOQ1RJT05fXywgdGhpcywgc291cmNlVVJM
KCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgZnJhbWVSZXF1ZXN0LmluZGV4KTsKKyAgICAgICAg
ICAgICAgICBMT0coSW1hZ2VzLCAiSW1hZ2VGcmFtZUNhY2hlOjolcyAtICVwIC0gdXJsOiAlcyBb
ZGVjb2RpbmcgZm9yIGZyYW1lICVsZCBoYXMgZmFpbGVkXSIsIF9fRlVOQ1RJT05fXywgcHJvdGVj
dGVkVGhpcy5wdHIoKSwgcHJvdGVjdGVkVGhpcy0+c291cmNlVVJMKCkuc3RyaW5nKCkudXRmOCgp
LmRhdGEoKSwgZnJhbWVSZXF1ZXN0LmluZGV4KTsKIAogICAgICAgICAgICAgLy8gVXBkYXRlIHRo
ZSBjYWNoZWQgZnJhbWVzIG9uIHRoZSBtYWluIHRocmVhZCB0byBhdm9pZCB1cGRhdGluZyB0aGUg
TWVtb3J5Q2FjaGUgZnJvbSBhIGRpZmZlcmVudCB0aHJlYWQuCi0gICAgICAgICAgICBjYWxsT25N
YWluVGhyZWFkKFt0aGlzLCBwcm90ZWN0ZWRRdWV1ZSA9IHByb3RlY3RlZFF1ZXVlLmNvcHlSZWYo
KSwgbmF0aXZlSW1hZ2UsIGZyYW1lUmVxdWVzdF0gKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICAg
ICAgLy8gVGhlIHF1ZXVlIG1heSBiZSBjbG9zZWQgaWYgYWZ0ZXIgd2UgZ290IHRoZSBmcmFtZSBO
YXRpdmVJbWFnZSwgc3RvcEFzeW5jRGVjb2RpbmdRdWV1ZSgpIHdhcyBjYWxsZWQKLSAgICAgICAg
ICAgICAgICBpZiAocHJvdGVjdGVkUXVldWUucHRyKCkgPT0gbV9kZWNvZGluZ1F1ZXVlKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIEFTU0VSVChtX2ZyYW1lQ29tbWl0UXVldWUuZmlyc3QoKSA9PSBm
cmFtZVJlcXVlc3QpOwotICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29tbWl0UXVldWUucmVt
b3ZlRmlyc3QoKTsKLSAgICAgICAgICAgICAgICAgICAgY2FjaGVOYXRpdmVJbWFnZUF0SW5kZXhB
c3luYyhXVEZNb3ZlKG5hdGl2ZUltYWdlKSwgZnJhbWVSZXF1ZXN0LmluZGV4LCBmcmFtZVJlcXVl
c3Quc3Vic2FtcGxpbmdMZXZlbCwgZnJhbWVSZXF1ZXN0LmRlY29kaW5nT3B0aW9ucywgZnJhbWVS
ZXF1ZXN0LmRlY29kaW5nU3RhdHVzKTsKKyAgICAgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3By
b3RlY3RlZFRoaXMgPSBwcm90ZWN0ZWRUaGlzLmNvcHlSZWYoKSwgcHJvdGVjdGVkUXVldWUgPSBw
cm90ZWN0ZWRRdWV1ZS5jb3B5UmVmKCksIHByb3RlY3RlZERlY29kZXIgPSBwcm90ZWN0ZWREZWNv
ZGVyLmNvcHlSZWYoKSwgbmF0aXZlSW1hZ2UsIGZyYW1lUmVxdWVzdF0gKCkgbXV0YWJsZSB7Cisg
ICAgICAgICAgICAgICAgLy8gVGhlIHF1ZXVlIG1heSBoYXZlIGJlZW4gY2xvc2VkIGlmIGFmdGVy
IHdlIGdvdCB0aGUgZnJhbWUgTmF0aXZlSW1hZ2UsIHN0b3BBc3luY0RlY29kaW5nUXVldWUoKSB3
YXMgY2FsbGVkLgorICAgICAgICAgICAgICAgIGlmIChwcm90ZWN0ZWRRdWV1ZS5wdHIoKSA9PSBw
cm90ZWN0ZWRUaGlzLT5tX2RlY29kaW5nUXVldWUgJiYgcHJvdGVjdGVkRGVjb2Rlci5wdHIoKSA9
PSBwcm90ZWN0ZWRUaGlzLT5tX2RlY29kZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KHByb3RlY3RlZFRoaXMtPm1fZnJhbWVDb21taXRRdWV1ZS5maXJzdCgpID09IGZyYW1lUmVxdWVz
dCk7CisgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZFRoaXMtPm1fZnJhbWVDb21taXRRdWV1
ZS5yZW1vdmVGaXJzdCgpOworICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5jYWNo
ZU5hdGl2ZUltYWdlQXRJbmRleEFzeW5jKFdURk1vdmUobmF0aXZlSW1hZ2UpLCBmcmFtZVJlcXVl
c3QuaW5kZXgsIGZyYW1lUmVxdWVzdC5zdWJzYW1wbGluZ0xldmVsLCBmcmFtZVJlcXVlc3QuZGVj
b2RpbmdPcHRpb25zLCBmcmFtZVJlcXVlc3QuZGVjb2RpbmdTdGF0dXMpOwogICAgICAgICAgICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBMT0coSW1hZ2VzLCAiSW1hZ2VGcmFtZUNh
Y2hlOjolcyAtICVwIC0gdXJsOiAlcyBbZnJhbWUgJWxkIHdpbGwgbm90IGNhY2hlZF0iLCBfX0ZV
TkNUSU9OX18sIHRoaXMsIHNvdXJjZVVSTCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGZyYW1l
UmVxdWVzdC5pbmRleCk7CisgICAgICAgICAgICAgICAgICAgIExPRyhJbWFnZXMsICJJbWFnZUZy
YW1lQ2FjaGU6OiVzIC0gJXAgLSB1cmw6ICVzIFtmcmFtZSAlbGQgd2lsbCBub3QgY2FjaGVkXSIs
IF9fRlVOQ1RJT05fXywgcHJvdGVjdGVkVGhpcy5wdHIoKSwgcHJvdGVjdGVkVGhpcy0+c291cmNl
VVJMKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgZnJhbWVSZXF1ZXN0LmluZGV4KTsKICAgICAg
ICAgICAgIH0pOwogICAgICAgICB9CiAgICAgfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lQ2FjaGUuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVDYWNoZS5oCmluZGV4IDUyZDM2MDMzZGNhZGU5OGI1
ZWQ4NGQ2MGNiNDcxODZlMzMyYTYyMjEuLmM3MThhZjkzMTAzOTUxZWM2MTYwMjdhYTBlYTA4M2Jj
N2E5MTgzOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlRnJhbWVDYWNoZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlRnJhbWVDYWNoZS5oCkBAIC00MSw3ICs0MSw3IEBAIGNsYXNzIEltYWdlOwogY2xhc3MgSW1h
Z2VEZWNvZGVyOwogY2xhc3MgVVJMOwogCi1jbGFzcyBJbWFnZUZyYW1lQ2FjaGUgOiBwdWJsaWMg
UmVmQ291bnRlZDxJbWFnZUZyYW1lQ2FjaGU+IHsKK2NsYXNzIEltYWdlRnJhbWVDYWNoZSA6IHB1
YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxJbWFnZUZyYW1lQ2FjaGU+IHsKICAgICBmcmllbmQg
Y2xhc3MgSW1hZ2VTb3VyY2U7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxJbWFnZUZyYW1lQ2Fj
aGU+IGNyZWF0ZShJbWFnZSogaW1hZ2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZURlY29kZXJDRy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVyQ0cuaAppbmRleCBjOGRkYjZkZDVjYmI4YWEyNTNl
NGZhMzhhNDlmNmQ1NjdhMzcyZDFjLi4xMjgzYzE2MDhkMTBjOTk0NTk0YjQyYWViOWJjZThiOWQ3
MzU4YjUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZURlY29kZXJDRy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlRGVjb2RlckNHLmgKQEAgLTM1LDcgKzM1LDcgQEAgdHlwZWRlZiBjb25zdCBzdHJ1Y3Qg
X19DRkRhdGEqIENGRGF0YVJlZjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBJbWFn
ZURlY29kZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxJbWFnZURlY29kZXI+IHsKK2NsYXNzIEltYWdl
RGVjb2RlciA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxJbWFnZURlY29kZXI+IHsKICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBJbWFnZURlY29kZXIoY29u
c3QgVVJMJiBzb3VyY2VVUkwsIEFscGhhT3B0aW9uLCBHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlv
bik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1h
Z2VEZWNvZGVyRGlyZWN0MkQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9JbWFnZURlY29kZXJEaXJlY3QyRC5oCmluZGV4IGJmNWVlNDYxODRmYzNjNGQ0YWRiZjUxNWE2
ZmRkNGY4ZGJmNjkzZjAuLjY0MzZjMDY5NGJiNDI5YWQ0ZTE0OWExMGEyMzRiMDMyMWM1YTI2YWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZURl
Y29kZXJEaXJlY3QyRC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9JbWFnZURlY29kZXJEaXJlY3QyRC5oCkBAIC0zNiw3ICszNiw3IEBAIGludGVyZmFjZSBJV0lD
SW1hZ2luZ0ZhY3Rvcnk7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgSW1hZ2VEZWNv
ZGVyIDogcHVibGljIFJlZkNvdW50ZWQ8SW1hZ2VEZWNvZGVyPiB7CitjbGFzcyBJbWFnZURlY29k
ZXIgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SW1hZ2VEZWNvZGVyPiB7CiAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgSW1hZ2VEZWNvZGVyKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29k
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rl
ci5oCmluZGV4IDEzZDhkMGIwNmZiZDg0MGQ3MWNjZjU1YWQ1NmM1NDllMDNmNmQ4ZTAuLmY1YmFk
YTgzNmNiZTZjZGYzZTE4MDgxOTRlOWRmODA0OWQ1YTMyMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCkBAIC00OSw3
ICs0OSw3IEBAIGNsYXNzIFVSTDsKIC8vIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJ
TkcpIGFsbG93cyBpbWFnZSBkZWNvZGVycyB0byBkb3duc2FtcGxlCiAvLyBhdCBkZWNvZGUgdGlt
ZS4gSW1hZ2UgZGVjb2RlcnMgd2lsbCBkb3duc2FtcGxlIGFueSBpbWFnZXMgbGFyZ2VyIHRoYW4K
IC8vIHxtX21heE51bVBpeGVsc3wuIEZJWE1FOiBOb3QgeWV0IHN1cHBvcnRlZCBieSBhbGwgZGVj
b2RlcnMuCi1jbGFzcyBJbWFnZURlY29kZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxJbWFnZURlY29k
ZXI+IHsKK2NsYXNzIEltYWdlRGVjb2RlciA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxJ
bWFnZURlY29kZXI+IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbWFnZURlY29kZXIpOyBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBJbWFnZURlY29kZXIoQWxwaGFP
cHRpb24gYWxwaGFPcHRpb24sIEdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uIGdhbW1hQW5kQ29s
b3JQcm9maWxlT3B0aW9uKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>310430</attachid>
            <date>2017-05-17 12:51:09 -0700</date>
            <delta_ts>2017-05-17 13:58:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171614-20170517125109.patch</filename>
            <type>text/plain</type>
            <size>9108</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE2OTQ3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmQxMTcxY2RiNTM0Mzdl
OGU5YzExMjY1OTk4Y2JiMmYxZDE3ZDkyNi4uNGI4Yjg1YjBkYmM1YzVjNGZkMGNiYzk5NGJlNjM5
MmEzMWYyYTQ0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDE3LTA1LTE2ICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgV2hlbiB0
aGUgaW1hZ2UgZGVjb2RpbmcgdGhyZWFkIG1ha2VzIGEgY2FsbE9uTWFpblRocmVhZCgpLCBlbnN1
cmUgYWxsIHRoZSBvYmplY3RzIGl0IG5lZWRzIGFyZSBwcm90ZWN0ZWQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MTYxNAorCisgICAgICAgIFJldmll
d2VkIGJ5IERhdmlkIEtpbHplci4KKworICAgICAgICBUaGUgYXN5bmNocm9ub3VzIGltYWdlIGRl
Y29kaW5nIHdhcyBkZXNpZ25lZCB0byBub3QgYmxvY2sgdGhlIG1haW4gdGhyZWFkIGlmCisgICAg
ICAgIHRoZSBpbWFnZSBpcyBkZWxldGVkLiBUbyBhY2hpZXZlIHRoYXQgd2UgYWxsb3cgZGVjb2Rp
bmcgdGhlIGN1cnJlbnQgZnJhbWUKKyAgICAgICAgZXZlbiBpZiBpdCBpcyBub3QgZ29pbmcgdG8g
YmUgdXNlZCBhZnRlciBjbG9zaW5nIHRoZSBkZWNvZGluZyBxdWV1ZS4gV2UgCisgICAgICAgIHBy
b3RlY3QgYWxsIHRoZSBvYmplY3RzIHdoaWNoIHRoZSBkZWNvZGluZyB0aHJlYWQgdXNlcy4gQnV0
IHdoZW4gYSBmcmFtZQorICAgICAgICBmaW5pc2hlcyBkZWNvZGluZyB0aGUgbmF0aXZlIGltYWdl
IGZyYW1lIGlzIGNhY2hlZCBvbiB0aGUgbWFpbiB0aHJlYWQuIE5vdAorICAgICAgICBhbGwgb2Yg
dGhlIG9iamVjdHMgYXJlIHByb3RlY3RlZCB3aGVuIHRoZSBjYWxsT25NYWluVGhyZWFkKCkgaXMg
ZGlzcGF0Y2hlZC4KKyAgICAgICAgVGhlIEltYWdlRnJhbWVDYWNoZSBhbmQgdGhlIEltYWdlRGVj
b2RlciBvYmplY3RzIGFyZSBub3QgcHJvdGVjdGVkLgorCisgICAgICAgIFRoaXMgbWlnaHQgbGVh
ZCB0byB0d28ga2luZHMgb2YgY3Jhc2hlczoKKyAgICAgICAgMS4gQSBzZWdmYXVsdCBpbnNpZGUg
dGhlIEltYWdlRGVjb2RlciB0cnlpbmcgdG8gYWNjZXNzIG9uZSBvZiBpdHMgbWVtYmVyCisgICAg
ICAgIDIuIEEgc2VnZmF1bHQgaW5zaWRlIHRoZSBJbWFnZUZyYW1lQ2FjaGUgdHJ5aW5nIHRvIGFj
Y2VzcyBvbmUgb2YgaXRzIGZyYW1lcworCisgICAgICAgIFRoZSBmaXggaXMgdG8gcHJvdGVjdCB0
aGUgSW1hZ2VGcmFtZUNhY2hlIGFuZCB0aGUgSW1hZ2VEZWNvZGVyIHdoZW4gdGhlCisgICAgICAg
IGRlY29kaW5nIHRocmVhZCBtYWtlcyBhIGNhbGxPbk1haW5UaHJlYWQoKS4gQWxzbyBzd2l0Y2gg
YWxsIHRoZSBwb2ludGVycworICAgICAgICB0aGUgZGVjb2RpbmcgdGhyZWFkcyBwcm90ZWN0IHRv
IGJlIFRocmVhZFNhZmVSZWZDb3VudGVkLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VGcmFtZUNhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVDYWNoZTo6
c3RhcnRBc3luY0RlY29kaW5nUXVldWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlRnJhbWVDYWNoZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVj
b2RlckNHLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGVjb2RlckRp
cmVjdDJELmg6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVy
Lmg6CisKIDIwMTctMDUtMTYgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAg
ICAgICAgIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZSBzaG91bGQgc3VwcG9ydCBzaW5rV2Fu
dHMgZm9yIHJvdGF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUZyYW1lQ2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VGcmFtZUNhY2hlLmNwcAppbmRleCBiZTI0YmE4ZGNhNjVlNTNmMjU5YjllMTI3ODRk
M2Y0OWQ5NTVkMGQ4Li5kZDQ5NDBmOThlMWQxMzQ4Yzg4OTgyMGI5ZWUxNzViOTIxZmEzYTI5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lQ2Fj
aGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVD
YWNoZS5jcHAKQEAgLTI4MSwyOCArMjgxLDMwIEBAIHZvaWQgSW1hZ2VGcmFtZUNhY2hlOjpzdGFy
dEFzeW5jRGVjb2RpbmdRdWV1ZSgpCiAgICAgUmVmPEltYWdlRGVjb2Rlcj4gcHJvdGVjdGVkRGVj
b2RlciA9IFJlZjxJbWFnZURlY29kZXI+KCptX2RlY29kZXIpOwogCiAgICAgLy8gV2UgbmVlZCB0
byBwcm90ZWN0IHRoaXMsIG1fZGVjb2RpbmdRdWV1ZSBhbmQgbV9kZWNvZGVyIGZyb20gYmVpbmcg
ZGVsZXRlZCB3aGlsZSB3ZSBhcmUgaW4gdGhlIGRlY29kaW5nIGxvb3AuCi0gICAgZGVjb2RpbmdR
dWV1ZSgpLT5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVk
VGhpcyksIHByb3RlY3RlZFF1ZXVlID0gV1RGTW92ZShwcm90ZWN0ZWRRdWV1ZSksIHByb3RlY3Rl
ZERlY29kZXIgPSBXVEZNb3ZlKHByb3RlY3RlZERlY29kZXIpXSB7CisgICAgZGVjb2RpbmdRdWV1
ZSgpLT5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyksIHBy
b3RlY3RlZFF1ZXVlID0gV1RGTW92ZShwcm90ZWN0ZWRRdWV1ZSksIHByb3RlY3RlZERlY29kZXIg
PSBXVEZNb3ZlKHByb3RlY3RlZERlY29kZXIpXSB7CiAgICAgICAgIEltYWdlRnJhbWVSZXF1ZXN0
IGZyYW1lUmVxdWVzdDsKIAotICAgICAgICB3aGlsZSAobV9mcmFtZVJlcXVlc3RRdWV1ZS5kZXF1
ZXVlKGZyYW1lUmVxdWVzdCkpIHsKKyAgICAgICAgd2hpbGUgKHByb3RlY3RlZFRoaXMtPm1fZnJh
bWVSZXF1ZXN0UXVldWUuZGVxdWV1ZShmcmFtZVJlcXVlc3QpKSB7CiAgICAgICAgICAgICBUcmFj
ZVNjb3BlIHRyYWNpbmdTY29wZShBc3luY0ltYWdlRGVjb2RlU3RhcnQsIEFzeW5jSW1hZ2VEZWNv
ZGVFbmQpOwogCiAgICAgICAgICAgICAvLyBHZXQgdGhlIGZyYW1lIE5hdGl2ZUltYWdlIG9uIHRo
ZSBkZWNvZGluZyB0aHJlYWQuCiAgICAgICAgICAgICBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFn
ZSA9IHByb3RlY3RlZERlY29kZXItPmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KGZyYW1lUmVxdWVz
dC5pbmRleCwgZnJhbWVSZXF1ZXN0LnN1YnNhbXBsaW5nTGV2ZWwsIGZyYW1lUmVxdWVzdC5kZWNv
ZGluZ09wdGlvbnMpOwogICAgICAgICAgICAgaWYgKG5hdGl2ZUltYWdlKQotICAgICAgICAgICAg
ICAgIExPRyhJbWFnZXMsICJJbWFnZUZyYW1lQ2FjaGU6OiVzIC0gJXAgLSB1cmw6ICVzIFtmcmFt
ZSAlbGQgaGFzIGJlZW4gZGVjb2RlZF0iLCBfX0ZVTkNUSU9OX18sIHRoaXMsIHNvdXJjZVVSTCgp
LnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGZyYW1lUmVxdWVzdC5pbmRleCk7Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgTE9HKEltYWdlcywgIkltYWdlRnJhbWVDYWNoZTo6JXMg
LSAlcCAtIHVybDogJXMgW2RlY29kaW5nIGZvciBmcmFtZSAlbGQgaGFzIGZhaWxlZF0iLCBfX0ZV
TkNUSU9OX18sIHRoaXMsIHNvdXJjZVVSTCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGZyYW1l
UmVxdWVzdC5pbmRleCk7CisgICAgICAgICAgICAgICAgTE9HKEltYWdlcywgIkltYWdlRnJhbWVD
YWNoZTo6JXMgLSAlcCAtIHVybDogJXMgW2ZyYW1lICVsZCBoYXMgYmVlbiBkZWNvZGVkXSIsIF9f
RlVOQ1RJT05fXywgcHJvdGVjdGVkVGhpcy5wdHIoKSwgcHJvdGVjdGVkVGhpcy0+c291cmNlVVJM
KCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgZnJhbWVSZXF1ZXN0LmluZGV4KTsKKyAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgIExPRyhJbWFnZXMsICJJbWFnZUZyYW1lQ2FjaGU6
OiVzIC0gJXAgLSB1cmw6ICVzIFtkZWNvZGluZyBmb3IgZnJhbWUgJWxkIGhhcyBmYWlsZWRdIiwg
X19GVU5DVElPTl9fLCBwcm90ZWN0ZWRUaGlzLnB0cigpLCBwcm90ZWN0ZWRUaGlzLT5zb3VyY2VV
UkwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBmcmFtZVJlcXVlc3QuaW5kZXgpOworICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBVcGRh
dGUgdGhlIGNhY2hlZCBmcmFtZXMgb24gdGhlIG1haW4gdGhyZWFkIHRvIGF2b2lkIHVwZGF0aW5n
IHRoZSBNZW1vcnlDYWNoZSBmcm9tIGEgZGlmZmVyZW50IHRocmVhZC4KLSAgICAgICAgICAgIGNh
bGxPbk1haW5UaHJlYWQoW3RoaXMsIHByb3RlY3RlZFF1ZXVlID0gcHJvdGVjdGVkUXVldWUuY29w
eVJlZigpLCBuYXRpdmVJbWFnZSwgZnJhbWVSZXF1ZXN0XSAoKSBtdXRhYmxlIHsKLSAgICAgICAg
ICAgICAgICAvLyBUaGUgcXVldWUgbWF5IGJlIGNsb3NlZCBpZiBhZnRlciB3ZSBnb3QgdGhlIGZy
YW1lIE5hdGl2ZUltYWdlLCBzdG9wQXN5bmNEZWNvZGluZ1F1ZXVlKCkgd2FzIGNhbGxlZAotICAg
ICAgICAgICAgICAgIGlmIChwcm90ZWN0ZWRRdWV1ZS5wdHIoKSA9PSBtX2RlY29kaW5nUXVldWUp
IHsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1fZnJhbWVDb21taXRRdWV1ZS5maXJzdCgp
ID09IGZyYW1lUmVxdWVzdCk7Ci0gICAgICAgICAgICAgICAgICAgIG1fZnJhbWVDb21taXRRdWV1
ZS5yZW1vdmVGaXJzdCgpOwotICAgICAgICAgICAgICAgICAgICBjYWNoZU5hdGl2ZUltYWdlQXRJ
bmRleEFzeW5jKFdURk1vdmUobmF0aXZlSW1hZ2UpLCBmcmFtZVJlcXVlc3QuaW5kZXgsIGZyYW1l
UmVxdWVzdC5zdWJzYW1wbGluZ0xldmVsLCBmcmFtZVJlcXVlc3QuZGVjb2RpbmdPcHRpb25zLCBm
cmFtZVJlcXVlc3QuZGVjb2RpbmdTdGF0dXMpOworICAgICAgICAgICAgY2FsbE9uTWFpblRocmVh
ZChbcHJvdGVjdGVkVGhpcyA9IHByb3RlY3RlZFRoaXMuY29weVJlZigpLCBwcm90ZWN0ZWRRdWV1
ZSA9IHByb3RlY3RlZFF1ZXVlLmNvcHlSZWYoKSwgcHJvdGVjdGVkRGVjb2RlciA9IHByb3RlY3Rl
ZERlY29kZXIuY29weVJlZigpLCBuYXRpdmVJbWFnZSA9IFdURk1vdmUobmF0aXZlSW1hZ2UpLCBm
cmFtZVJlcXVlc3RdICgpIG11dGFibGUgeworICAgICAgICAgICAgICAgIC8vIFRoZSBxdWV1ZSBt
YXkgaGF2ZSBiZWVuIGNsb3NlZCBpZiBhZnRlciB3ZSBnb3QgdGhlIGZyYW1lIE5hdGl2ZUltYWdl
LCBzdG9wQXN5bmNEZWNvZGluZ1F1ZXVlKCkgd2FzIGNhbGxlZC4KKyAgICAgICAgICAgICAgICBp
ZiAocHJvdGVjdGVkUXVldWUucHRyKCkgPT0gcHJvdGVjdGVkVGhpcy0+bV9kZWNvZGluZ1F1ZXVl
ICYmIHByb3RlY3RlZERlY29kZXIucHRyKCkgPT0gcHJvdGVjdGVkVGhpcy0+bV9kZWNvZGVyKSB7
CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChwcm90ZWN0ZWRUaGlzLT5tX2ZyYW1lQ29tbWl0
UXVldWUuZmlyc3QoKSA9PSBmcmFtZVJlcXVlc3QpOworICAgICAgICAgICAgICAgICAgICBwcm90
ZWN0ZWRUaGlzLT5tX2ZyYW1lQ29tbWl0UXVldWUucmVtb3ZlRmlyc3QoKTsKKyAgICAgICAgICAg
ICAgICAgICAgcHJvdGVjdGVkVGhpcy0+Y2FjaGVOYXRpdmVJbWFnZUF0SW5kZXhBc3luYyhXVEZN
b3ZlKG5hdGl2ZUltYWdlKSwgZnJhbWVSZXF1ZXN0LmluZGV4LCBmcmFtZVJlcXVlc3Quc3Vic2Ft
cGxpbmdMZXZlbCwgZnJhbWVSZXF1ZXN0LmRlY29kaW5nT3B0aW9ucywgZnJhbWVSZXF1ZXN0LmRl
Y29kaW5nU3RhdHVzKTsKICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgTE9HKEltYWdlcywgIkltYWdlRnJhbWVDYWNoZTo6JXMgLSAlcCAtIHVybDogJXMgW2ZyYW1l
ICVsZCB3aWxsIG5vdCBjYWNoZWRdIiwgX19GVU5DVElPTl9fLCB0aGlzLCBzb3VyY2VVUkwoKS5z
dHJpbmcoKS51dGY4KCkuZGF0YSgpLCBmcmFtZVJlcXVlc3QuaW5kZXgpOworICAgICAgICAgICAg
ICAgICAgICBMT0coSW1hZ2VzLCAiSW1hZ2VGcmFtZUNhY2hlOjolcyAtICVwIC0gdXJsOiAlcyBb
ZnJhbWUgJWxkIHdpbGwgbm90IGNhY2hlZF0iLCBfX0ZVTkNUSU9OX18sIHByb3RlY3RlZFRoaXMu
cHRyKCksIHByb3RlY3RlZFRoaXMtPnNvdXJjZVVSTCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCks
IGZyYW1lUmVxdWVzdC5pbmRleCk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfQogICAgIH0p
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFt
ZUNhY2hlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lQ2Fj
aGUuaAppbmRleCA1MmQzNjAzM2RjYWRlOThiNWVkODRkNjBjYjQ3MTg2ZTMzMmE2MjIxLi5jNzE4
YWY5MzEwMzk1MWVjNjE2MDI3YWEwZWEwODNiYzdhOTE4MzliIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lQ2FjaGUuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lQ2FjaGUuaApAQCAtNDEsNyArNDEs
NyBAQCBjbGFzcyBJbWFnZTsKIGNsYXNzIEltYWdlRGVjb2RlcjsKIGNsYXNzIFVSTDsKIAotY2xh
c3MgSW1hZ2VGcmFtZUNhY2hlIDogcHVibGljIFJlZkNvdW50ZWQ8SW1hZ2VGcmFtZUNhY2hlPiB7
CitjbGFzcyBJbWFnZUZyYW1lQ2FjaGUgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SW1h
Z2VGcmFtZUNhY2hlPiB7CiAgICAgZnJpZW5kIGNsYXNzIEltYWdlU291cmNlOwogcHVibGljOgog
ICAgIHN0YXRpYyBSZWY8SW1hZ2VGcmFtZUNhY2hlPiBjcmVhdGUoSW1hZ2UqIGltYWdlKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVy
Q0cuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2RlckNH
LmgKaW5kZXggYzhkZGI2ZGQ1Y2JiOGFhMjUzZTRmYTM4YTQ5ZjZkNTY3YTM3MmQxYy4uMTI4M2Mx
NjA4ZDEwYzk5NDU5NGI0MmFlYjliY2U4YjlkNzM1OGI1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVyQ0cuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZURlY29kZXJDRy5oCkBAIC0zNSw3ICsz
NSw3IEBAIHR5cGVkZWYgY29uc3Qgc3RydWN0IF9fQ0ZEYXRhKiBDRkRhdGFSZWY7CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgSW1hZ2VEZWNvZGVyIDogcHVibGljIFJlZkNvdW50ZWQ8
SW1hZ2VEZWNvZGVyPiB7CitjbGFzcyBJbWFnZURlY29kZXIgOiBwdWJsaWMgVGhyZWFkU2FmZVJl
ZkNvdW50ZWQ8SW1hZ2VEZWNvZGVyPiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBw
dWJsaWM6CiAgICAgSW1hZ2VEZWNvZGVyKGNvbnN0IFVSTCYgc291cmNlVVJMLCBBbHBoYU9wdGlv
biwgR2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGVjb2RlckRpcmVjdDJELmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VEZWNvZGVyRGlyZWN0MkQuaAppbmRl
eCBiZjVlZTQ2MTg0ZmMzYzRkNGFkYmY1MTVhNmZkZDRmOGRiZjY5M2YwLi42NDM2YzA2OTRiYjQy
OWFkNGUxNDlhMTBhMjM0YjAzMjFjNWEyNmFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VEZWNvZGVyRGlyZWN0MkQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VEZWNvZGVyRGlyZWN0MkQuaApAQCAt
MzYsNyArMzYsNyBAQCBpbnRlcmZhY2UgSVdJQ0ltYWdpbmdGYWN0b3J5OwogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLWNsYXNzIEltYWdlRGVjb2RlciA6IHB1YmxpYyBSZWZDb3VudGVkPEltYWdl
RGVjb2Rlcj4geworY2xhc3MgSW1hZ2VEZWNvZGVyIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3Vu
dGVkPEltYWdlRGVjb2Rlcj4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGlj
OgogICAgIEltYWdlRGVjb2RlcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAppbmRleCAxM2Q4ZDBiMDZmYmQ4NDBkNzFj
Y2Y1NWFkNTZjNTQ5ZTAzZjZkOGUwLi5mNWJhZGE4MzZjYmU2Y2RmM2UxODA4MTk0ZTlkZjgwNDlk
NWEzMjBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9JbWFnZURlY29kZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9JbWFnZURlY29kZXIuaApAQCAtNDksNyArNDksNyBAQCBjbGFzcyBVUkw7CiAvLyBFTkFC
TEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKSBhbGxvd3MgaW1hZ2UgZGVjb2RlcnMgdG8g
ZG93bnNhbXBsZQogLy8gYXQgZGVjb2RlIHRpbWUuIEltYWdlIGRlY29kZXJzIHdpbGwgZG93bnNh
bXBsZSBhbnkgaW1hZ2VzIGxhcmdlciB0aGFuCiAvLyB8bV9tYXhOdW1QaXhlbHN8LiBGSVhNRTog
Tm90IHlldCBzdXBwb3J0ZWQgYnkgYWxsIGRlY29kZXJzLgotY2xhc3MgSW1hZ2VEZWNvZGVyIDog
cHVibGljIFJlZkNvdW50ZWQ8SW1hZ2VEZWNvZGVyPiB7CitjbGFzcyBJbWFnZURlY29kZXIgOiBw
dWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SW1hZ2VEZWNvZGVyPiB7CiAgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoSW1hZ2VEZWNvZGVyKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJs
aWM6CiAgICAgSW1hZ2VEZWNvZGVyKEFscGhhT3B0aW9uIGFscGhhT3B0aW9uLCBHYW1tYUFuZENv
bG9yUHJvZmlsZU9wdGlvbiBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbikK
</data>

          </attachment>
      

    </bug>

</bugzilla>