<?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>76732</bug_id>
          
          <creation_ts>2012-01-20 13:15:48 -0800</creation_ts>
          <short_desc>[Chromium] Enable deferred canvas rendering in the skia port</short_desc>
          <delta_ts>2012-02-18 19:22:08 -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>Canvas</component>
          <version>528+ (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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Justin Novosad">junov</reporter>
          <assigned_to name="Justin Novosad">junov</assigned_to>
          <cc>bsalomon</cc>
    
    <cc>cc-bugs</cc>
    
    <cc>dglazkov</cc>
    
    <cc>efidler</cc>
    
    <cc>fishd</cc>
    
    <cc>jamesr</cc>
    
    <cc>jpetsovits</cc>
    
    <cc>mdelaney7</cc>
    
    <cc>reed</cc>
    
    <cc>senorblanco</cc>
    
    <cc>tomhudson</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>vangelis</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>539742</commentid>
    <comment_count>0</comment_count>
    <who name="Justin Novosad">junov</who>
    <bug_when>2012-01-20 13:15:48 -0800</bug_when>
    <thetext>Use class SkDeferredCanvas rather than SkCanvas in the skia port for ImageBuffer in order to take advantage of deferred rendering.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>539778</commentid>
    <comment_count>1</comment_count>
      <attachid>123376</attachid>
    <who name="Justin Novosad">junov</who>
    <bug_when>2012-01-20 14:07:17 -0800</bug_when>
    <thetext>Created attachment 123376
Integration of SkDeferredCanvas</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>539781</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-20 14:09:29 -0800</bug_when>
    <thetext>Please wait for approval from fishd@chromium.org before submitting because this patch contains changes to the Chromium public API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>539783</commentid>
    <comment_count>3</comment_count>
    <who name="Justin Novosad">junov</who>
    <bug_when>2012-01-20 14:12:40 -0800</bug_when>
    <thetext>Patch will fail cr-linux build, which is normal. Must wait for skia to roll past r3066 in chromium trunk in order to build successfully.  I will re-trigger EWS when the time is right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>539949</commentid>
    <comment_count>4</comment_count>
      <attachid>123376</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-20 17:19:42 -0800</bug_when>
    <thetext>Comment on attachment 123376
Integration of SkDeferredCanvas

Attachment 123376 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11297246</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540622</commentid>
    <comment_count>5</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2012-01-23 09:56:33 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Patch will fail cr-linux build, which is normal. Must wait for skia to roll past r3066 in chromium trunk in order to build successfully.  I will re-trigger EWS when the time is right.

I think you&apos;ll also need a roll of WebKit&apos;s chromium DEPS (in Source/WebKit/chromium/DEPS), to pick up the skia roll from Chrome.  You may have to do this yourself.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540653</commentid>
    <comment_count>6</comment_count>
      <attachid>123376</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2012-01-23 10:42:25 -0800</bug_when>
    <thetext>Comment on attachment 123376
Integration of SkDeferredCanvas

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

&gt; Source/WebKit/chromium/public/WebSettings.h:117
&gt; +    virtual void setDeferred2dCanvasEnabled(bool) = 0;

WebKit API change LGTM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541273</commentid>
    <comment_count>7</comment_count>
      <attachid>123718</attachid>
    <who name="Justin Novosad">junov</who>
    <bug_when>2012-01-24 05:44:09 -0800</bug_when>
    <thetext>Created attachment 123718
Same as previous patch.  Reposted to show green on EWS, now that DEPS have rolled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541512</commentid>
    <comment_count>8</comment_count>
      <attachid>123718</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-01-24 11:30:16 -0800</bug_when>
    <thetext>Comment on attachment 123718
Same as previous patch.  Reposted to show green on EWS, now that DEPS have rolled.

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

&gt; Source/WebCore/platform/graphics/ImageBuffer.h:64
&gt; +        AcceleratedAndDeferred,

why does this need to be a separate mode in cross-platform code? What bits of cross-platform code do you expect will have different behavior based on this flag?

if this is a skia-only setting then we should be able to hide it in skia-only code

&gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerChromium.cpp:138
&gt; +    if (m_flushCallback.get())
&gt; +        m_flushCallback-&gt;flushCallback();

we do the ganesh flush on the grContext in paintContentsIfDirty(). why is this different? do you need access to the GraphicsContext3D for this call? what thread do you expect this to be called on?

&gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerChromium.h:47
&gt; +    class FlushCallback {

&quot;flush&quot; is pretty ambiguous - what does this mean? when should it be called? at a glance, i&apos;d guess this has something to do with glFlush, but it definitely doesn&apos;t. Needs documentation at the very least

&gt; Source/WebCore/platform/graphics/skia/ImageBufferSkia.cpp:121
&gt; +AcceleratedDeviceContext AcceleratedDeviceContext::m_instance;

does this require a static initializer? those are no-nos</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541576</commentid>
    <comment_count>9</comment_count>
    <who name="Justin Novosad">junov</who>
    <bug_when>2012-01-24 12:51:53 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; &gt; Source/WebCore/platform/graphics/ImageBuffer.h:64
&gt; &gt; +        AcceleratedAndDeferred,
&gt; 
&gt; why does this need to be a separate mode in cross-platform code? What bits of cross-platform code do you expect will have different behavior based on this flag?
&gt; 
&gt; if this is a skia-only setting then we should be able to hide it in skia-only code

I don&apos;t disagree, but I can&apos;t think of a cleaner path to propagate the setting from WebCore::Settings down to ImageBufferSkia.cpp.  I may be be wrong, but I don&apos;t think it&apos;s allowed (or desirable) to create a direct dependency on WebCore/page/* from WebCore/platform/graphics/*

WebCore/html seemed like the right place to bridge the two, but that means going through the cross-platform interface.  Any better ideas?

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerChromium.cpp:138
&gt; &gt; +    if (m_flushCallback.get())
&gt; &gt; +        m_flushCallback-&gt;flushCallback();
&gt; 
&gt; we do the ganesh flush on the grContext in paintContentsIfDirty(). why is this different? 

This is not a simple glFlush. It is for flushing all pending draw operations that are sitting in the queue of the SkDeferredCanvas object.  Perhaps
I should rename it to executePendingDrawCommands, or something like that?

&gt; do you need access to the GraphicsContext3D for this call? 

Yes.

&gt; what thread do you expect this to be called on?

The same thread that is normally used for drawing to the canvas (the main thread).  If that is a problem with the threaded compositor, then I could disable deferred rendering when threaded compositing is enabled, until this problem is figured out.  Speaking of which, would it be legal to access CCProxy from ImageBufferSkia.cpp?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541688</commentid>
    <comment_count>10</comment_count>
      <attachid>123718</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2012-01-24 14:20:28 -0800</bug_when>
    <thetext>Comment on attachment 123718
Same as previous patch.  Reposted to show green on EWS, now that DEPS have rolled.

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerChromium.cpp:138
&gt;&gt; +        m_flushCallback-&gt;flushCallback();
&gt; 
&gt; we do the ganesh flush on the grContext in paintContentsIfDirty(). why is this different? do you need access to the GraphicsContext3D for this call? what thread do you expect this to be called on?

The rest of this function seems to be specific to the double-buffered case (the code below the iftests).  It would be good to move this to paintContentsIfDirty() if possible, partly for symmetry with the existing flushing, and partly because someone working on double-buffered case may not understand why this code is here.

Ideally, the callback could be added to GrContext::flush() in Skia instead, since it seems to be semantically related, and doesn&apos;t call into anything WebKit AFAICT (just SkDeferredCanvas stuff), so I think it could be entirely contained in Skia.

&gt;&gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerChromium.h:47
&gt;&gt; +    class FlushCallback {
&gt; 
&gt; &quot;flush&quot; is pretty ambiguous - what does this mean? when should it be called? at a glance, i&apos;d guess this has something to do with glFlush, but it definitely doesn&apos;t. Needs documentation at the very least

I agree that the naming could use work.  Since it&apos;s not really related to flushing from the Canvas2DLayerChromium&apos;s point-of-view, perhaps it should be called an UpdateCallback?  Or PaintCallback?  Or whatever Canvas2DLayerChromium is doing at that point, not what the callee is doing.

If it is possible to move it to GrContext::flush(), then the FlushCallback name makes sense.

&gt;&gt; Source/WebCore/platform/graphics/skia/ImageBufferSkia.cpp:121
&gt;&gt; +AcceleratedDeviceContext AcceleratedDeviceContext::m_instance;
&gt; 
&gt; does this require a static initializer? those are no-nos

If this really has to be a singleton (which I would avoid if possible), you might consider making it function-static in a static get() function, and just leaking it.  There&apos;s a macro for that someplace in WebKit, which I can&apos;t find right now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541716</commentid>
    <comment_count>11</comment_count>
      <attachid>123718</attachid>
    <who name="Brian Salomon">bsalomon</who>
    <bug_when>2012-01-24 14:41:53 -0800</bug_when>
    <thetext>Comment on attachment 123718
Same as previous patch.  Reposted to show green on EWS, now that DEPS have rolled.

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerChromium.h:47
&gt;&gt;&gt; +    class FlushCallback {
&gt;&gt; 
&gt;&gt; &quot;flush&quot; is pretty ambiguous - what does this mean? when should it be called? at a glance, i&apos;d guess this has something to do with glFlush, but it definitely doesn&apos;t. Needs documentation at the very least
&gt; 
&gt; I agree that the naming could use work.  Since it&apos;s not really related to flushing from the Canvas2DLayerChromium&apos;s point-of-view, perhaps it should be called an UpdateCallback?  Or PaintCallback?  Or whatever Canvas2DLayerChromium is doing at that point, not what the callee is doing.
&gt; 
&gt; If it is possible to move it to GrContext::flush(), then the FlushCallback name makes sense.

I don&apos;t think GrContext is quite the right place for this as GrContexts are shared by multiple devices/canvases and are unaware of their users.  We could consider a having a flush on canvas (and device) that would handle deferral as well as GrContext flush.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541747</commentid>
    <comment_count>12</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2012-01-24 15:08:20 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 123718 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=123718&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerChromium.h:47
&gt; &gt;&gt;&gt; +    class FlushCallback {
&gt; &gt;&gt; 
&gt; &gt;&gt; &quot;flush&quot; is pretty ambiguous - what does this mean? when should it be called? at a glance, i&apos;d guess this has something to do with glFlush, but it definitely doesn&apos;t. Needs documentation at the very least
&gt; &gt; 
&gt; &gt; I agree that the naming could use work.  Since it&apos;s not really related to flushing from the Canvas2DLayerChromium&apos;s point-of-view, perhaps it should be called an UpdateCallback?  Or PaintCallback?  Or whatever Canvas2DLayerChromium is doing at that point, not what the callee is doing.
&gt; &gt; 
&gt; &gt; If it is possible to move it to GrContext::flush(), then the FlushCallback name makes sense.
&gt; 
&gt; I don&apos;t think GrContext is quite the right place for this as GrContexts are shared by multiple devices/canvases and are unaware of their users.  We could consider a having a flush on canvas (and device) that would handle deferral as well as GrContext flush.

Yeah, we were thinking we&apos;d need a vector of callbacks on the GrContext.

I like the idea of a flush function on SkCanvas.  The problem with that is that Canvas2DLayerChromium doesn&apos;t currently know about its canvas, only the GraphicsContext3D (from which it gets the GrContext).  That could be changed, of course.  I think the first step is to move the callsite to paintContentsIfDirty, just to see if that timing works for Justin&apos;s purposes.  If it doesn&apos;t, there&apos;s no point in trying to move it to SkCanvas either.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541753</commentid>
    <comment_count>13</comment_count>
    <who name="Justin Novosad">junov</who>
    <bug_when>2012-01-24 15:11:43 -0800</bug_when>
    <thetext>(In reply to comment #11)
 
&gt; I don&apos;t think GrContext is quite the right place for this as GrContexts are shared by multiple devices/canvases and are unaware of their users.  We could consider a having a flush on canvas (and device) that would handle deferral as well as GrContext flush.

But that is not so awesome either because in the multiple canvas case each individual canvas-&gt;flush call would issue a new call GrContext::flush, which is unnecessary in most cases and could hurt performance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541759</commentid>
    <comment_count>14</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2012-01-24 15:17:21 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #11)
&gt; 
&gt; &gt; I don&apos;t think GrContext is quite the right place for this as GrContexts are shared by multiple devices/canvases and are unaware of their users.  We could consider a having a flush on canvas (and device) that would handle deferral as well as GrContext flush.
&gt; 
&gt; But that is not so awesome either because in the multiple canvas case each individual canvas-&gt;flush call would issue a new call GrContext::flush, which is unnecessary in most cases and could hurt performance.

I&apos;m not too worried about that, since:

A)  It&apos;s only called once per frame, and AFAIK it&apos;s a quick early-out if there&apos;s nothing to do (Brian can confirm).
B)  That&apos;s what happens today anyway (each Canvas2DLayerChromium calls GrContext::flush() on the shared context from paintContentsIfDirty()).

Thinking about it some more, the advantage of Brian&apos;s approach over a vector-of-callbacks on GrContext is that 
only the relevant SkDeferredCanvas would have its flush called, vs. all of them, which would be N^2 in the number of canvases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541964</commentid>
    <comment_count>15</comment_count>
    <who name="Brian Salomon">bsalomon</who>
    <bug_when>2012-01-24 19:27:19 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; (In reply to comment #13)
&gt; &gt; (In reply to comment #11)
&gt; &gt; 
&gt; &gt; &gt; I don&apos;t think GrContext is quite the right place for this as GrContexts are shared by multiple devices/canvases and are unaware of their users.  We could consider a having a flush on canvas (and device) that would handle deferral as well as GrContext flush.
&gt; &gt; 
&gt; &gt; But that is not so awesome either because in the multiple canvas case each individual canvas-&gt;flush call would issue a new call GrContext::flush, which is unnecessary in most cases and could hurt performance.
&gt; 
&gt; I&apos;m not too worried about that, since:
&gt; 
&gt; A)  It&apos;s only called once per frame, and AFAIK it&apos;s a quick early-out if there&apos;s nothing to do (Brian can confirm).

Redundant calls to flush should be pretty cheap. Today GrContext::flush is pretty dumb and flushes everything pending. It gets called internally quite a bit. In the future we could consider being smarter and determining the set of operations that have to be flushed for a particular target (backing a device). We aren&apos;t actually queuing much right now so the payoff wouldn&apos;t big, though, that&apos;s likely to change in the future.

&gt; B)  That&apos;s what happens today anyway (each Canvas2DLayerChromium calls GrContext::flush() on the shared context from paintContentsIfDirty()).
&gt; 
&gt; Thinking about it some more, the advantage of Brian&apos;s approach over a vector-of-callbacks on GrContext is that 
&gt; only the relevant SkDeferredCanvas would have its flush called, vs. all of them, which would be N^2 in the number of canvases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544225</commentid>
    <comment_count>16</comment_count>
      <attachid>124342</attachid>
    <who name="Justin Novosad">junov</who>
    <bug_when>2012-01-27 11:50:08 -0800</bug_when>
    <thetext>Created attachment 124342
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544232</commentid>
    <comment_count>17</comment_count>
    <who name="Justin Novosad">junov</who>
    <bug_when>2012-01-27 11:58:53 -0800</bug_when>
    <thetext>In the latest patch, I got rid of flush callback entirely by using an indirect path through SkCanvas to trigger the execution of deferred draw operations, and I was able to move it to Canvas2DLayerChromium::paintContentsIfDirty.  I have a plan to make that little bit of code clearer in the near future with this: http://code.google.com/p/skia/issues/detail?id=467

Unfortunately, I did not find a clean way to remove traces of the deferred canvas setting from cross-platform code.  I tried accessing the setting through GraphicsContext3DPrivate -&gt; WebViewImpl, but that did not work because the context spawned by SharedGraphicsContext3D does not have a HostWindow, so the reference to WebViewImpl is not set. :-(  Therefore, I left that bit as is.  Still open to suggestions though.  Also: once the feature is stabilized, I intend to remove all traces of the setting, so this is only temporary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546091</commentid>
    <comment_count>18</comment_count>
      <attachid>124342</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2012-01-31 08:40:08 -0800</bug_when>
    <thetext>Comment on attachment 124342
Patch

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

Thanks; this is much cleaner than the first rev.  This looks good to me (modulo a comment), but I&apos;ll wait for James to take a look before giving an r+.

&gt; Source/WebCore/html/HTMLCanvasElement.cpp:448
&gt; +#if USE(SKIA)

Thinking out loud:  should we use USE(SKIA) or PLATFORM(CHROMIUM) here?  There&apos;s precedent for both in this file, and this is a skia-only feature.  I suppose there might be some argument that a non-chromium port which uses Skia might want to use this feature, although they&apos;d probably require a bit of surgery in their platform/graphics/&lt;platform&gt; directory.  OTOH, since Chrome/Mac has switched, I guess the two defines are almost synonymous now, so it&apos;s kind of a moot point.

All that to say, I think I&apos;ve convinced myself that USE(SKIA) is fine.

&gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerChromium.cpp:122
&gt; +        m_canvas-&gt;getDevice()-&gt;accessRenderTarget(); // Triggers execution of pending draw operations

Please add a comment indicating that this is temporary, and will go away once we have a real SkCanvas::flush() (it&apos;s a little obscure).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546312</commentid>
    <comment_count>19</comment_count>
      <attachid>124342</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-01-31 11:48:26 -0800</bug_when>
    <thetext>Comment on attachment 124342
Patch

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

&gt; Source/WebCore/html/HTMLCanvasElement.cpp:484
&gt; +    RenderingMode renderingMode = shouldAccelerate(bufferSize) ? (shouldDefer() ? AcceleratedAndDeferred : Accelerated) : 

still not sold on this - deferred and accelerated are orthogonal bits.  I think it&apos;d be pretty handy to have a deferred-but-not-accelerated canvas, for instance.

&gt;&gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerChromium.cpp:122
&gt;&gt; +        m_canvas-&gt;getDevice()-&gt;accessRenderTarget(); // Triggers execution of pending draw operations
&gt; 
&gt; Please add a comment indicating that this is temporary, and will go away once we have a real SkCanvas::flush() (it&apos;s a little obscure).

also please end comments with a period

&gt; Source/WebCore/platform/graphics/skia/ImageBufferSkia.cpp:114
&gt; +        AcceleratedDeviceContext* deviceContext = new AcceleratedDeviceContext(context3D);
&gt; +        canvas = new SkDeferredCanvas(device, deviceContext);
&gt; +        deviceContext-&gt;unref();

do we have any smart pointer types in skia to avoid needing all these raw ptrs and manual unref()s?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546343</commentid>
    <comment_count>20</comment_count>
    <who name="Tom Hudson">tomhudson</who>
    <bug_when>2012-01-31 12:05:53 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; &gt; Source/WebCore/platform/graphics/skia/ImageBufferSkia.cpp:114
&gt; &gt; +        AcceleratedDeviceContext* deviceContext = new AcceleratedDeviceContext(context3D);
&gt; &gt; +        canvas = new SkDeferredCanvas(device, deviceContext);
&gt; &gt; +        deviceContext-&gt;unref();
&gt; 
&gt; do we have any smart pointer types in skia to avoid needing all these raw ptrs and manual unref()s?

No. (There is a RefPtr implementation, but it still requires some manual unref, and consensus on the Skia team is that it&apos;s a misfeature; it&apos;s only used in one body of code, and we don&apos;t want it spreading any farther.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546352</commentid>
    <comment_count>21</comment_count>
    <who name="Justin Novosad">junov</who>
    <bug_when>2012-01-31 12:16:50 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; (From update of attachment 124342 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=124342&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/html/HTMLCanvasElement.cpp:484
&gt; &gt; +    RenderingMode renderingMode = shouldAccelerate(bufferSize) ? (shouldDefer() ? AcceleratedAndDeferred : Accelerated) : 
&gt; 
&gt; still not sold on this - deferred and accelerated are orthogonal bits.  I think it&apos;d be pretty handy to have a deferred-but-not-accelerated canvas, for instance.

a) We could make this parameter a bitfield rather than an enum, but that will impact code for all platform ports.
b) The day someone needs a deferred-but-not-accelerated canvas, they can add that value to the enum.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546357</commentid>
    <comment_count>22</comment_count>
    <who name="Justin Novosad">junov</who>
    <bug_when>2012-01-31 12:19:48 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; (In reply to comment #19)
&gt; &gt; do we have any smart pointer types in skia to avoid needing all these raw ptrs and manual unref()s?
&gt; 
&gt; No. (There is a RefPtr implementation, but it still requires some manual unref, and consensus on the Skia team is that it&apos;s a misfeature; it&apos;s only used in one body of code, and we don&apos;t want it spreading any farther.)

There is also an auto unref helper class, but that feels unnecessary here. For objects newly allocated on the heap, unref after hand off is really the standard M.O. in skia code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546361</commentid>
    <comment_count>23</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-01-31 12:22:02 -0800</bug_when>
    <thetext>(In reply to comment #22)
&gt; (In reply to comment #20)
&gt; &gt; (In reply to comment #19)
&gt; &gt; &gt; do we have any smart pointer types in skia to avoid needing all these raw ptrs and manual unref()s?
&gt; &gt; 
&gt; &gt; No. (There is a RefPtr implementation, but it still requires some manual unref, and consensus on the Skia team is that it&apos;s a misfeature; it&apos;s only used in one body of code, and we don&apos;t want it spreading any farther.)
&gt; 
&gt; There is also an auto unref helper class, but that feels unnecessary here. For objects newly allocated on the heap, unref after hand off is really the standard M.O. in skia code.

I see.  It looks out of place in WebKit, which strongly prefers using smart pointer types / RAII wherever possible and explicit handoffs.  This makes it harder to understand skia binding code and harder to review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546366</commentid>
    <comment_count>24</comment_count>
    <who name="Justin Novosad">junov</who>
    <bug_when>2012-01-31 12:29:52 -0800</bug_when>
    <thetext>(In reply to comment #23)
&gt; (In reply to comment #22)
&gt; &gt; (In reply to comment #20)
&gt; &gt; &gt; (In reply to comment #19)
&gt; &gt; &gt; &gt; do we have any smart pointer types in skia to avoid needing all these raw ptrs and manual unref()s?
&gt; &gt; &gt; 
&gt; &gt; &gt; No. (There is a RefPtr implementation, but it still requires some manual unref, and consensus on the Skia team is that it&apos;s a misfeature; it&apos;s only used in one body of code, and we don&apos;t want it spreading any farther.)
&gt; &gt; 
&gt; &gt; There is also an auto unref helper class, but that feels unnecessary here. For objects newly allocated on the heap, unref after hand off is really the standard M.O. in skia code.
&gt; 
&gt; I see.  It looks out of place in WebKit, which strongly prefers using smart pointer types / RAII wherever possible and explicit handoffs.  This makes it harder to understand skia binding code and harder to review.

The skia API is designed so that objects of any type can be allocated either on the stack or the heap, or can be non-pointer class members, which is incompatible with RAII and smartpointers.  Basically, if you do not want an object to be auto-destroyed by an unref because it is a class member or it is on the stack, then you do not unref it after handoff, and the ref count should never go down to zero.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546376</commentid>
    <comment_count>25</comment_count>
      <attachid>124342</attachid>
    <who name="Matthew Delaney">mdelaney7</who>
    <bug_when>2012-01-31 12:38:40 -0800</bug_when>
    <thetext>Comment on attachment 124342
Patch

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

&gt; Source/WebCore/html/HTMLCanvasElement.h:136
&gt; +    bool shouldDefer() const;

Does this need to be public?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546391</commentid>
    <comment_count>26</comment_count>
    <who name="Brian Salomon">bsalomon</who>
    <bug_when>2012-01-31 12:50:03 -0800</bug_when>
    <thetext>(In reply to comment #23)
&gt; (In reply to comment #22)
&gt; &gt; (In reply to comment #20)
&gt; &gt; &gt; (In reply to comment #19)
&gt; &gt; &gt; &gt; do we have any smart pointer types in skia to avoid needing all these raw ptrs and manual unref()s?
&gt; &gt; &gt; 
&gt; &gt; &gt; No. (There is a RefPtr implementation, but it still requires some manual unref, and consensus on the Skia team is that it&apos;s a misfeature; it&apos;s only used in one body of code, and we don&apos;t want it spreading any farther.)
&gt; &gt; 
&gt; &gt; There is also an auto unref helper class, but that feels unnecessary here. For objects newly allocated on the heap, unref after hand off is really the standard M.O. in skia code.
&gt; 
&gt; I see.  It looks out of place in WebKit, which strongly prefers using smart pointer types / RAII wherever possible and explicit handoffs.  This makes it harder to understand skia binding code and harder to review.

In some places in the porting code the SkAutoTUnref class is used when allocating an object just before hand-off. It unrefs in the destructor. (e.g. createAcceleratedCanvas in ImageBufferSkia.cpp)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546509</commentid>
    <comment_count>27</comment_count>
    <who name="Justin Novosad">junov</who>
    <bug_when>2012-01-31 14:39:42 -0800</bug_when>
    <thetext>(In reply to comment #26)

&gt; In some places in the porting code the SkAutoTUnref class is used

Ok, sold.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546537</commentid>
    <comment_count>28</comment_count>
    <who name="Justin Novosad">junov</who>
    <bug_when>2012-01-31 15:07:40 -0800</bug_when>
    <thetext>In the latest patch I have addressed the following:

* Made HTMLCanvasElement::shouldDefer private, I also put it inside #if USE(SKIA)
* In ImageBuffer I separated the deferralMode from the renderingMode (separate enum). There is some new #if USE(SKIA) ugliness to avoid unnecessarily adding the new creation parameter to all the other ports, which do not care about it.
* Corrections to comments
* Used Semi-smart pointers to remove explicit unrefs in createAcceleratedCanvas (ImageBufferSkia.cpp)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546539</commentid>
    <comment_count>29</comment_count>
      <attachid>124831</attachid>
    <who name="Justin Novosad">junov</who>
    <bug_when>2012-01-31 15:08:24 -0800</bug_when>
    <thetext>Created attachment 124831
Response to review comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547089</commentid>
    <comment_count>30</comment_count>
      <attachid>124951</attachid>
    <who name="Justin Novosad">junov</who>
    <bug_when>2012-02-01 08:09:02 -0800</bug_when>
    <thetext>Created attachment 124951
Same as previous patch, resolved merge conflicts</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547257</commentid>
    <comment_count>31</comment_count>
      <attachid>124951</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2012-02-01 11:59:21 -0800</bug_when>
    <thetext>Comment on attachment 124951
Same as previous patch, resolved merge conflicts

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

&gt; Source/WebCore/platform/graphics/ImageBuffer.h:71
&gt; +#if USE(SKIA)

I really don&apos;t think peppering the header file with #if USE(SKIA) is a good idea.  We should add this as a default parameter everywhere, and just leave it unused on other ports.  (This is how the renderingMode was introduced, for example.)

&gt; Source/WebCore/platform/graphics/skia/ImageBufferSkia.cpp:91
&gt; +static SkCanvas* createAcceleratedCanvas(const IntSize&amp; size, ImageBufferData* data, DeferralMode deferralMode)

It&apos;s kind of a side-effect, but I like this a version lot better.  Separating out the deferral mode into its own enum means we only check the renderingMode in one place, which I think is clearer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547304</commentid>
    <comment_count>32</comment_count>
      <attachid>124995</attachid>
    <who name="Justin Novosad">junov</who>
    <bug_when>2012-02-01 12:51:51 -0800</bug_when>
    <thetext>Created attachment 124995
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547308</commentid>
    <comment_count>33</comment_count>
      <attachid>124995</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2012-02-01 12:57:07 -0800</bug_when>
    <thetext>Comment on attachment 124995
Patch

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

&gt; Source/WebCore/html/HTMLCanvasElement.cpp:485
&gt; +    RenderingMode renderingMode = shouldAccelerate(bufferSize) ? Accelerated : UnacceleratedNonPlatformBuffer;

I think this one should still be wrapped in an #if USE(SKIA) (unless other ports map UnacceleratedNonPlatformBuffer to Unaccelerated).

&gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerChromium.cpp:64
&gt; +    , m_canvas(0)

This isn&apos;t wrapped in #if USE(SKIA), but the declaration is.  It&apos;s your call, but at this point I&apos;d probably just remove #if USE(SKIA) everywhere in this file and in the header.  I don&apos;t think this class is much use without Skia anymore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547313</commentid>
    <comment_count>34</comment_count>
      <attachid>124998</attachid>
    <who name="Justin Novosad">junov</who>
    <bug_when>2012-02-01 13:09:00 -0800</bug_when>
    <thetext>Created attachment 124998
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547322</commentid>
    <comment_count>35</comment_count>
      <attachid>124998</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2012-02-01 13:21:50 -0800</bug_when>
    <thetext>Comment on attachment 124998
Patch

Looks good!  Thanks for all the fixes.  r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547402</commentid>
    <comment_count>36</comment_count>
      <attachid>124998</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-01 15:05:46 -0800</bug_when>
    <thetext>Comment on attachment 124998
Patch

Clearing flags on attachment: 124998

Committed r106500: &lt;http://trac.webkit.org/changeset/106500&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547403</commentid>
    <comment_count>37</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-01 15:05:53 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123376</attachid>
            <date>2012-01-20 14:07:17 -0800</date>
            <delta_ts>2012-01-24 05:44:05 -0800</delta_ts>
            <desc>Integration of SkDeferredCanvas</desc>
            <filename>bug-76732-20120120170716.patch</filename>
            <type>text/plain</type>
            <size>15463</size>
            <attacher name="Justin Novosad">junov</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNTU0MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQzIEBACisyMDEyLTAxLTIwICBKdXN0aW4g
Tm92b3NhZCAgPGp1bm92QGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1dIEVuYWJs
ZSBkZWZlcnJlZCBjYW52YXMgcmVuZGVyaW5nIGluIHRoZSBza2lhIHBvcnQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2NzMyCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzOiBjb3ZlcmVk
IGJ5IGV4aXN0aW5nIGNhbnZhcyBsYXlvdXQgdGVzdHMKKworICAgICAgICBBZGRpbmcgYSBuZXcg
c2V0dGluZyB0byBlbmFibGUgZGVmZXJyZWQgMmQgY2FudmFzIHJlbmRlcmluZy4KKyAgICAgICAg
QWRkZWQgc3VwcG9ydCBmb3IgZGVmZXJyZWQgMmQgY2FudmFzIHJlbmRlcmluZyBpbiBJbWFnZUJ1
ZmZlclNraWEKKyAgICAgICAgYW5kIENhbnZhczJETGF5ZXJDaHJvbWl1bSwgbW9zdGx5IHBsdW1i
aW5nLiBEZWZmZXJlZCByZW5kZXJpbmcKKyAgICAgICAgaW1wbGVtZW50YXRpb24gaXMgcHJvdmlk
ZWQgYnkgc2tpYSAoY2xhc3MgU2tEZWZlcnJlZENhbnZhcykuCisKKyAgICAgICAgKiBodG1sL0hU
TUxDYW52YXNFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50
OjpzaG91bGREZWZlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6Y3Jl
YXRlSW1hZ2VCdWZmZXIpOgorICAgICAgICAqIGh0bWwvSFRNTENhbnZhc0VsZW1lbnQuaDoKKyAg
ICAgICAgKiBwYWdlL1NldHRpbmdzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNldHRpbmdzOjpT
ZXR0aW5ncyk6CisgICAgICAgIChXZWJDb3JlOjpTZXR0aW5nczo6c2V0QWNjZWxlcmF0ZWQyZENh
bnZhc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2V0dGluZ3M6OnNldERlZmVycmVkMmRD
YW52YXNFbmFibGVkKToKKyAgICAgICAgKiBwYWdlL1NldHRpbmdzLmg6CisgICAgICAgIChXZWJD
b3JlOjpTZXR0aW5nczo6ZGVmZXJyZWQyZENhbnZhc0VuYWJsZWQpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNh
bnZhczJETGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyk6CisgICAgICAg
IChXZWJDb3JlOjpDYW52YXMyRExheWVyQ2hyb21pdW06OmNsZWFudXBSZXNvdXJjZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllckNocm9taXVtOjpzZXRGbHVzaENhbGxiYWNrKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21p
dW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5j
cHA6CisgICAgICAgIChzdGQ6OkRlZmVycmVkQ2FudmFzRmx1c2hDYWxsYmFjazo6RGVmZXJyZWRD
YW52YXNGbHVzaENhbGxiYWNrKToKKyAgICAgICAgKHN0ZDo6RGVmZXJyZWRDYW52YXNGbHVzaENh
bGxiYWNrOjpmbHVzaENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2VsZXJhdGVkRGV2
aWNlQ29udGV4dDo6cHJlcGFyZUZvckRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZWxlcmF0
ZWREZXZpY2VDb250ZXh0OjpmbHVzaCk6CisgICAgICAgIChXZWJDb3JlOjpBY2NlbGVyYXRlZERl
dmljZUNvbnRleHQ6OmdldEluc3RhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2VsZXJhdGVk
RGV2aWNlQ29udGV4dDo6Z2V0Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVBY2Nl
bGVyYXRlZENhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZm
ZXIpOgorCiAyMDEyLTAxLTIwICBNYXJjLUFuZHJlIERlY29zdGUgIDxtYWRAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIEFkZCBwcm9wZXIgb2Zmc2V0IHRvIHBvc2l0aW9uIHJpZ2h0IGNsaWNrIHRv
IHNpbXVsYXRlIGEgY29udGV4dCBtZW51IGludm9jYXRpb24uCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAkocmV2aXNpb24gMTA1NTI1KQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0
Myw2ICs0NDMsMjIgQEAgYm9vbCBIVE1MQ2FudmFzRWxlbWVudDo6c2hvdWxkQWNjZWxlcmF0ZQog
I2VuZGlmCiB9CiAKK2Jvb2wgSFRNTENhbnZhc0VsZW1lbnQ6OnNob3VsZERlZmVyKCkgY29uc3QK
K3sKKyNpZiBVU0UoU0tJQSkKKyAgICBpZiAobV9jb250ZXh0ICYmICFtX2NvbnRleHQtPmlzMmQo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gZG9j
dW1lbnQoKS0+c2V0dGluZ3MoKTsKKyAgICBpZiAoIXNldHRpbmdzIHx8ICFzZXR0aW5ncy0+ZGVm
ZXJyZWQyZENhbnZhc0VuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0
dXJuIHRydWU7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCiB2b2lkIEhU
TUxDYW52YXNFbGVtZW50OjpjcmVhdGVJbWFnZUJ1ZmZlcigpIGNvbnN0CiB7CiAgICAgQVNTRVJU
KCFtX2ltYWdlQnVmZmVyKTsKQEAgLTQ2NSw3ICs0ODEsNyBAQCB2b2lkIEhUTUxDYW52YXNFbGVt
ZW50OjpjcmVhdGVJbWFnZUJ1ZmZlCiAgICAgaWYgKCFidWZmZXJTaXplLndpZHRoKCkgfHwgIWJ1
ZmZlclNpemUuaGVpZ2h0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlbmRlcmluZ01vZGUg
cmVuZGVyaW5nTW9kZSA9IHNob3VsZEFjY2VsZXJhdGUoYnVmZmVyU2l6ZSkgPyBBY2NlbGVyYXRl
ZCA6IAorICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSA9IHNob3VsZEFjY2VsZXJhdGUo
YnVmZmVyU2l6ZSkgPyAoc2hvdWxkRGVmZXIoKSA/IEFjY2VsZXJhdGVkQW5kRGVmZXJyZWQgOiBB
Y2NlbGVyYXRlZCkgOiAKICNpZiBVU0UoU0tJQSkKICAgICAgICAgVW5hY2NlbGVyYXRlZE5vblBs
YXRmb3JtQnVmZmVyOwogI2Vsc2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZh
c0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNF
bGVtZW50LmgJKHJldmlzaW9uIDEwNTUyNSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENh
bnZhc0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTMzLDYgKzEzMyw3IEBAIHB1YmxpYzoK
ICAgICBib29sIGhhc0NyZWF0ZWRJbWFnZUJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1faGFzQ3Jl
YXRlZEltYWdlQnVmZmVyOyB9CiAKICAgICBib29sIHNob3VsZEFjY2VsZXJhdGUoY29uc3QgSW50
U2l6ZSYpIGNvbnN0OworICAgIGJvb2wgc2hvdWxkRGVmZXIoKSBjb25zdDsKIAogcHJpdmF0ZToK
ICAgICBIVE1MQ2FudmFzRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCShyZXZpc2lvbiAxMDU1MjUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkzLDYgKzE5
Myw3IEBAIFNldHRpbmdzOjpTZXR0aW5ncyhQYWdlKiBwYWdlKQogICAgICwgbV9wcml2aWxlZ2Vk
V2ViR0xFeHRlbnNpb25zRW5hYmxlZChmYWxzZSkKICAgICAsIG1fd2ViQXVkaW9FbmFibGVkKGZh
bHNlKQogICAgICwgbV9hY2NlbGVyYXRlZENhbnZhczJkRW5hYmxlZChmYWxzZSkKKyAgICAsIG1f
ZGVmZXJyZWRDYW52YXMyZEVuYWJsZWQoZmFsc2UpCiAgICAgLCBtX2xvYWREZWZlcnJpbmdFbmFi
bGVkKHRydWUpCiAgICAgLCBtX3RpbGVkQmFja2luZ1N0b3JlRW5hYmxlZChmYWxzZSkKICAgICAs
IG1fcGFnaW5hdGVEdXJpbmdMYXlvdXRFbmFibGVkKGZhbHNlKQpAQCAtODExLDYgKzgxMiwxMSBA
QCB2b2lkIFNldHRpbmdzOjpzZXRBY2NlbGVyYXRlZDJkQ2FudmFzRW5hCiAgICAgbV9hY2NlbGVy
YXRlZENhbnZhczJkRW5hYmxlZCA9IGVuYWJsZWQ7CiB9CiAKK3ZvaWQgU2V0dGluZ3M6OnNldERl
ZmVycmVkMmRDYW52YXNFbmFibGVkKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBtX2RlZmVycmVkQ2Fu
dmFzMmRFbmFibGVkID0gZW5hYmxlZDsKK30KKwogdm9pZCBTZXR0aW5nczo6c2V0TWluaW11bUFj
Y2VsZXJhdGVkMmRDYW52YXNTaXplKGludCBudW1QaXhlbHMpCiB7CiAgICAgbV9taW5pbXVtQWNj
ZWxlcmF0ZWQyZENhbnZhc1NpemUgPSBudW1QaXhlbHM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
YWdlL1NldHRpbmdzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5n
cy5oCShyZXZpc2lvbiAxMDU1MjUpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM2Myw2ICszNjMsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIHZvaWQgc2V0QWNjZWxlcmF0ZWQyZENhbnZhc0VuYWJsZWQoYm9vbCk7CiAgICAgICAg
IGJvb2wgYWNjZWxlcmF0ZWQyZENhbnZhc0VuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2FjY2Vs
ZXJhdGVkQ2FudmFzMmRFbmFibGVkOyB9CiAKKyAgICAgICAgdm9pZCBzZXREZWZlcnJlZDJkQ2Fu
dmFzRW5hYmxlZChib29sKTsKKyAgICAgICAgYm9vbCBkZWZlcnJlZDJkQ2FudmFzRW5hYmxlZCgp
IGNvbnN0IHsgcmV0dXJuIG1fZGVmZXJyZWRDYW52YXMyZEVuYWJsZWQ7IH0KKwogICAgICAgICAv
LyBOdW1iZXIgb2YgcGl4ZWxzIGJlbG93IHdoaWNoIDJEIGNhbnZhcyBpcyByZW5kZXJlZCBpbiBz
b2Z0d2FyZQogICAgICAgICAvLyBldmVuIGlmIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBpcyBlbmFi
bGVkLgogICAgICAgICAvLyBIYXJkd2FyZSBhY2NlbGVyYXRpb24gaXMgdXNlZnVsIGZvciBsYXJn
ZSBjYW52YXNlcyB3aGVyZSBpdCBjYW4gYXZvaWQgdGhlCkBAIC02MTYsNiArNjE5LDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIG1fcHJpdmlsZWdlZFdlYkdMRXh0ZW5zaW9u
c0VuYWJsZWQgOiAxOwogICAgICAgICBib29sIG1fd2ViQXVkaW9FbmFibGVkIDogMTsKICAgICAg
ICAgYm9vbCBtX2FjY2VsZXJhdGVkQ2FudmFzMmRFbmFibGVkIDogMTsKKyAgICAgICAgYm9vbCBt
X2RlZmVycmVkQ2FudmFzMmRFbmFibGVkIDogMTsKICAgICAgICAgYm9vbCBtX2xvYWREZWZlcnJp
bmdFbmFibGVkIDogMTsKICAgICAgICAgYm9vbCBtX3RpbGVkQmFja2luZ1N0b3JlRW5hYmxlZCA6
IDE7CiAgICAgICAgIGJvb2wgbV9wYWdpbmF0ZUR1cmluZ0xheW91dEVuYWJsZWQgOiAxOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCShy
ZXZpc2lvbiAxMDU1MjUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZUJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw4IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICBlbnVtIFJlbmRlcmluZ01vZGUgewogICAgICAgICBVbmFjY2VsZXJhdGVkLAog
ICAgICAgICBVbmFjY2VsZXJhdGVkTm9uUGxhdGZvcm1CdWZmZXIsIC8vIFVzZSBwbGFpbiBtZW1v
cnkgYWxsb2NhdGlvbiByYXRoZXIgdGhhbiBwbGF0Zm9ybSBBUEkgdG8gYWxsb2NhdGUgYmFja2lu
ZyBzdG9yZS4KLSAgICAgICAgQWNjZWxlcmF0ZWQKKyAgICAgICAgQWNjZWxlcmF0ZWQsCisgICAg
ICAgIEFjY2VsZXJhdGVkQW5kRGVmZXJyZWQsCiAgICAgfTsKICAgICAKICAgICBlbnVtIEJhY2tp
bmdTdG9yZUNvcHkgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uY3Bw
CShyZXZpc2lvbiAxMDU1MjUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMs
NiArMTMzLDkgQEAgdm9pZCBDYW52YXMyRExheWVyQ2hyb21pdW06OnNldFRleHR1cmVNYQogCiB2
b2lkIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFw
aGljc0NvbnRleHQzRCogY29udGV4dCwgQ0NUZXh0dXJlVXBkYXRlciYgdXBkYXRlcikKIHsKKyAg
ICBpZiAobV9mbHVzaENhbGxiYWNrLmdldCgpKQorICAgICAgICBtX2ZsdXNoQ2FsbGJhY2stPmZs
dXNoQ2FsbGJhY2soKTsKKwogICAgIGlmICghbV9iYWNrVGV4dHVyZUlkIHx8ICFtX2Zyb250VGV4
dHVyZSB8fCAhbV9mcm9udFRleHR1cmUtPmlzVmFsaWQobV9zaXplLCBHcmFwaGljc0NvbnRleHQz
RDo6UkdCQSkpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTcwLDYgKzE3MywxMSBAQCB2b2lkIENh
bnZhczJETGF5ZXJDaHJvbWl1bTo6Y2xlYW51cFJlc291CiAgICAgICAgIG1fZnJvbnRUZXh0dXJl
LmNsZWFyKCk7CiB9CiAKK3ZvaWQgQ2FudmFzMkRMYXllckNocm9taXVtOjpzZXRGbHVzaENhbGxi
YWNrKEZsdXNoQ2FsbGJhY2sqIGNiKQoreworICAgIG1fZmx1c2hDYWxsYmFjayA9IGFkb3B0UHRy
KGNiKTsKK30KKwogfQogCiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRM
YXllckNocm9taXVtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmgJKHJldmlzaW9uIDEwNTUyNSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5
ZXJDaHJvbWl1bS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCwxMSBAQCBjbGFzcyBHcmFw
aGljc0NvbnRleHQzRDsKIC8vIEEgbGF5ZXIgY29udGFpbmluZyBhbiBhY2NlbGVyYXRlZCAyZCBj
YW52YXMKIGNsYXNzIENhbnZhczJETGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBDYW52YXNMYXllckNo
cm9taXVtIHsKIHB1YmxpYzoKKyAgICBjbGFzcyBGbHVzaENhbGxiYWNrIHsKKyAgICBwdWJsaWM6
CisgICAgICAgIHZpcnR1YWwgdm9pZCBmbHVzaENhbGxiYWNrKCkgPSAwOworICAgIH07CisKICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxDYW52YXMyRExheWVyQ2hyb21pdW0+IGNyZWF0ZShHcmFwaGlj
c0NvbnRleHQzRCosIGNvbnN0IEludFNpemUmKTsKICAgICB2aXJ0dWFsIH5DYW52YXMyRExheWVy
Q2hyb21pdW0oKTsKIApAQCAtNjAsNiArNjUsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IHVucmVzZXJ2ZUNvbnRlbnRzVGV4dHVyZSgpOwogICAgIHZpcnR1YWwgdm9pZCBjbGVhbnVwUmVz
b3VyY2VzKCk7CiAKKyAgICB2b2lkIHNldEZsdXNoQ2FsbGJhY2soRmx1c2hDYWxsYmFjayopOwor
CiBwcml2YXRlOgogICAgIENhbnZhczJETGF5ZXJDaHJvbWl1bShHcmFwaGljc0NvbnRleHQzRCos
IGNvbnN0IEludFNpemUmKTsKIApAQCAtNzYsNiArODMsNyBAQCBwcml2YXRlOgogICAgIC8vIHN5
bmNocm9uaXplIGl0cyBkcmF3cyB3aXRoIHRoZSBjYW52YXMgdXBkYXRlcy4KICAgICBib29sIG1f
dXNlRG91YmxlQnVmZmVyaW5nOwogICAgIE93blB0cjxNYW5hZ2VkVGV4dHVyZT4gbV9mcm9udFRl
eHR1cmU7CisgICAgT3duUHRyPEZsdXNoQ2FsbGJhY2s+IG1fZmx1c2hDYWxsYmFjazsKIH07CiAK
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZm
ZXJTa2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAJKHJldmlzaW9uIDEwNTUyNSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDYsNiArNDYsNyBAQAogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEu
aCIKICNpbmNsdWRlICJTaGFyZWRHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIlNrQ29s
b3JQcml2LmgiCisjaW5jbHVkZSAiU2tEZWZlcnJlZENhbnZhcy5oIgogI2luY2x1ZGUgIlNrR3B1
RGV2aWNlLmgiCiAjaW5jbHVkZSAiU2tpYVV0aWxzLmgiCiAjaW5jbHVkZSAiV0VCUEltYWdlRW5j
b2Rlci5oIgpAQCAtNTQsNiArNTUsMjYgQEAKIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAorbmFt
ZXNwYWNlIHsKK2NsYXNzIERlZmVycmVkQ2FudmFzRmx1c2hDYWxsYmFjayA6IHB1YmxpYyBXZWJD
b3JlOjpDYW52YXMyRExheWVyQ2hyb21pdW06OkZsdXNoQ2FsbGJhY2sgeworcHVibGljOgorICAg
IERlZmVycmVkQ2FudmFzRmx1c2hDYWxsYmFjayhTa0RlZmVycmVkQ2FudmFzKiBjYW52YXMpCisg
ICAgeworICAgICAgICBtX2NhbnZhcyA9IGNhbnZhczsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgZmx1c2hDYWxsYmFjaygpCisgICAgeworICAgICAgICBTa0RlZmVycmVkQ2FudmFzOjpEZWZl
cnJlZERldmljZSogZGV2aWNlID0gbV9jYW52YXMtPmdldERlZmVycmVkRGV2aWNlKCk7CisgICAg
ICAgIGRldmljZS0+Zmx1c2hQZW5kaW5nKCk7CisgICAgICAgIGRldmljZS0+Zmx1c2hDb250ZXh0
KCk7CisgICAgfQorCitwcml2YXRlOgorICAgIFNrRGVmZXJyZWRDYW52YXMqIG1fY2FudmFzOwor
fTsKK30gLy8gdW5uYW1lZCBuYW1lc3BhY2UKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyBX
ZSBwYXNzIGEgdGVjaG5pY2FsbHktdW5pbml0aWFsaXplZCBjYW52YXMgdG8gdGhlIHBsYXRmb3Jt
IGNvbnRleHQgaGVyZSBzaW5jZQpAQCAtNjUsNyArODYsNDEgQEAgSW1hZ2VCdWZmZXJEYXRhOjpJ
bWFnZUJ1ZmZlckRhdGEoY29uc3QgSQogewogfQogCi1zdGF0aWMgU2tDYW52YXMqIGNyZWF0ZUFj
Y2VsZXJhdGVkQ2FudmFzKGNvbnN0IEludFNpemUmIHNpemUsIEltYWdlQnVmZmVyRGF0YSogZGF0
YSkKK2NsYXNzIEFjY2VsZXJhdGVkRGV2aWNlQ29udGV4dCA6IHB1YmxpYyBTa0RlZmVycmVkQ2Fu
dmFzOjpEZXZpY2VDb250ZXh0IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZUZv
ckRyYXcoKQorICAgIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQzRCA9IGdl
dENvbnRleHQoKTsKKyAgICAgICAgaWYgKGNvbnRleHQzRCkKKyAgICAgICAgICAgIGNvbnRleHQz
RC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGZsdXNo
KCkKKyAgICB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M0QgPSBnZXRDb250
ZXh0KCk7CisgICAgICAgIGlmIChjb250ZXh0M0QpCisgICAgICAgICAgICBjb250ZXh0M0QtPmZs
dXNoKCk7CisgICAgfQorCisgICAgc3RhdGljIEFjY2VsZXJhdGVkRGV2aWNlQ29udGV4dCogZ2V0
SW5zdGFuY2UoKQorICAgIHsKKyAgICAgICAgcmV0dXJuICZtX2luc3RhbmNlOworICAgIH0KK3By
aXZhdGU6CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGdldENvbnRleHQoKQorICAgIHsKKyAgICAg
ICAgaWYgKCFtX2NvbnRleHQpCisgICAgICAgICAgICBtX2NvbnRleHQgPSBTaGFyZWRHcmFwaGlj
c0NvbnRleHQzRDo6Z2V0KCk7CisgICAgICAgIHJldHVybiBtX2NvbnRleHQ7CisgICAgfQorCisg
ICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKKyAgICBzdGF0aWMgQWNjZWxlcmF0ZWRE
ZXZpY2VDb250ZXh0IG1faW5zdGFuY2U7Cit9OworCitBY2NlbGVyYXRlZERldmljZUNvbnRleHQg
QWNjZWxlcmF0ZWREZXZpY2VDb250ZXh0OjptX2luc3RhbmNlOworCitzdGF0aWMgU2tDYW52YXMq
IGNyZWF0ZUFjY2VsZXJhdGVkQ2FudmFzKGNvbnN0IEludFNpemUmIHNpemUsIEltYWdlQnVmZmVy
RGF0YSogZGF0YSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKQogewogICAgIEdyYXBoaWNz
Q29udGV4dDNEKiBjb250ZXh0M0QgPSBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6Z2V0KCk7CiAg
ICAgaWYgKCFjb250ZXh0M0QpCkBAIC04MywxMiArMTM4LDIxIEBAIHN0YXRpYyBTa0NhbnZhcyog
Y3JlYXRlQWNjZWxlcmF0ZWRDYW52YXMKICAgICBTa0F1dG9UVW5yZWY8R3JUZXh0dXJlPiB0ZXh0
dXJlKGdyLT5jcmVhdGVVbmNhY2hlZFRleHR1cmUoZGVzYywgMCwgMCkpOwogICAgIGlmICghdGV4
dHVyZS5nZXQoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgU2tDYW52YXMqIGNhbnZhcyA9IG5l
dyBTa0NhbnZhcygpOwotICAgIGNhbnZhcy0+c2V0RGV2aWNlKG5ldyBTa0dwdURldmljZShnciwg
dGV4dHVyZS5nZXQoKSkpLT51bnJlZigpOworICAgIFNrQ2FudmFzKiBjYW52YXM7CisgICAgU2tE
ZXZpY2UqIGRldmljZSA9IG5ldyBTa0dwdURldmljZShnciwgdGV4dHVyZS5nZXQoKSk7CisgICAg
aWYgKHJlbmRlcmluZ01vZGUgPT0gQWNjZWxlcmF0ZWRBbmREZWZlcnJlZCkKKyAgICAgICAgY2Fu
dmFzID0gbmV3IFNrRGVmZXJyZWRDYW52YXMoZGV2aWNlLCBBY2NlbGVyYXRlZERldmljZUNvbnRl
eHQ6OmdldEluc3RhbmNlKCkpOworICAgIGVsc2UKKyAgICAgICAgY2FudmFzID0gbmV3IFNrQ2Fu
dmFzKGRldmljZSk7CisgICAgZGV2aWNlLT51bnJlZigpOwogICAgIGRhdGEtPm1fcGxhdGZvcm1D
b250ZXh0LnNldEdyYXBoaWNzQ29udGV4dDNEKGNvbnRleHQzRCk7CiAjaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQogICAgIGRhdGEtPm1fcGxhdGZvcm1MYXllciA9IENhbnZhczJETGF5
ZXJDaHJvbWl1bTo6Y3JlYXRlKGNvbnRleHQzRCwgc2l6ZSk7CiAgICAgZGF0YS0+bV9wbGF0Zm9y
bUxheWVyLT5zZXRUZXh0dXJlSWQodGV4dHVyZS5nZXQoKS0+Z2V0VGV4dHVyZUhhbmRsZSgpKTsK
KyAgICBpZiAocmVuZGVyaW5nTW9kZSA9PSBBY2NlbGVyYXRlZEFuZERlZmVycmVkKSB7CisgICAg
ICAgIERlZmVycmVkQ2FudmFzRmx1c2hDYWxsYmFjayogZmx1c2hDQiA9IG5ldyBEZWZlcnJlZENh
bnZhc0ZsdXNoQ2FsbGJhY2soc3RhdGljX2Nhc3Q8U2tEZWZlcnJlZENhbnZhcyo+KGNhbnZhcykp
OworICAgICAgICBkYXRhLT5tX3BsYXRmb3JtTGF5ZXItPnNldEZsdXNoQ2FsbGJhY2soZmx1c2hD
Qik7CisgICAgfQogI2VuZGlmCiAgICAgcmV0dXJuIGNhbnZhczsKIH0KQEAgLTEwNiw4ICsxNzAs
OCBAQCBJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYKIHsKICAgICBPd25Q
dHI8U2tDYW52YXM+IGNhbnZhczsKIAotICAgIGlmIChyZW5kZXJpbmdNb2RlID09IEFjY2VsZXJh
dGVkKQotICAgICAgICBjYW52YXMgPSBhZG9wdFB0cihjcmVhdGVBY2NlbGVyYXRlZENhbnZhcyhz
aXplLCAmbV9kYXRhKSk7CisgICAgaWYgKHJlbmRlcmluZ01vZGUgPT0gQWNjZWxlcmF0ZWQgfHwg
cmVuZGVyaW5nTW9kZSA9PSBBY2NlbGVyYXRlZEFuZERlZmVycmVkKQorICAgICAgICBjYW52YXMg
PSBhZG9wdFB0cihjcmVhdGVBY2NlbGVyYXRlZENhbnZhcyhzaXplLCAmbV9kYXRhLCByZW5kZXJp
bmdNb2RlKSk7CiAgICAgZWxzZSBpZiAocmVuZGVyaW5nTW9kZSA9PSBVbmFjY2VsZXJhdGVkTm9u
UGxhdGZvcm1CdWZmZXIpCiAgICAgICAgIGNhbnZhcyA9IGFkb3B0UHRyKGNyZWF0ZU5vblBsYXRm
b3JtQ2FudmFzKHNpemUpKTsKIApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlz
aW9uIDEwNTU0MCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTItMDEtMjAgIEp1c3RpbiBOb3Zvc2FkICA8anVu
b3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtDaHJvbWl1bV0gRW5hYmxlIGRlZmVycmVkIGNh
bnZhcyByZW5kZXJpbmcgaW4gdGhlIHNraWEgcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY3MzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBBZGRpbmcgYSBuZXcgc2V0dGluZyBmb3IgZW5hYmxpbmcg
ZGVmZXJyZWQgMmQgY2FudmFzIHJlbmRlcmluZworCisgICAgICAgICogcHVibGljL1dlYlNldHRp
bmdzLmg6CisgICAgICAgICogc3JjL1dlYlNldHRpbmdzSW1wbC5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYlNldHRpbmdzSW1wbDo6c2V0RGVmZXJyZWQyZENhbnZhc0VuYWJsZWQpOgorICAgICAg
ICAqIHNyYy9XZWJTZXR0aW5nc0ltcGwuaDoKKwogMjAxMi0wMS0yMCAgU2FkcnVsIEhhYmliIENo
b3dkaHVyeSAgPHNhZHJ1bEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBSZXZl
cnQgYSBjb3VwbGUgb2YgY2hhbmdlcyBpbiBmaWxlYXBpLyB0aGF0IGJyZWFrIHRlc3RzIGluIGNo
cm9tZW9zLgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2V0dGluZ3Mu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTZXR0aW5n
cy5oCShyZXZpc2lvbiAxMDU1MjUpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9X
ZWJTZXR0aW5ncy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsNiArMTE0LDcgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgdm9pZCBzZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yUGx1Z2luc0VuYWJs
ZWQoYm9vbCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5n
Rm9yQW5pbWF0aW9uRW5hYmxlZChib29sKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldEFjY2Vs
ZXJhdGVkMmRDYW52YXNFbmFibGVkKGJvb2wpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RGVm
ZXJyZWQyZENhbnZhc0VuYWJsZWQoYm9vbCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQoYm9vbCkgID0gMDsKICAg
ICB2aXJ0dWFsIHZvaWQgc2V0TWluaW11bUFjY2VsZXJhdGVkMmRDYW52YXNTaXplKGludCkgPSAw
OwogICAgIHZpcnR1YWwgdm9pZCBzZXRBY2NlbGVyYXRlZEZpbHRlcnNFbmFibGVkKGJvb2wpID0g
MDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBs
LmNwcAkocmV2aXNpb24gMTA1NTI1KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
U2V0dGluZ3NJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY4LDYgKzM2OCwxMSBAQCB2b2lk
IFdlYlNldHRpbmdzSW1wbDo6c2V0QWNjZWxlcmF0ZWQyZENhCiAgICAgbV9zZXR0aW5ncy0+c2V0
QWNjZWxlcmF0ZWQyZENhbnZhc0VuYWJsZWQoZW5hYmxlZCk7CiB9CiAKK3ZvaWQgV2ViU2V0dGlu
Z3NJbXBsOjpzZXREZWZlcnJlZDJkQ2FudmFzRW5hYmxlZChib29sIGVuYWJsZWQpCit7CisgICAg
bV9zZXR0aW5ncy0+c2V0RGVmZXJyZWQyZENhbnZhc0VuYWJsZWQoZW5hYmxlZCk7Cit9CisKIHZv
aWQgV2ViU2V0dGluZ3NJbXBsOjpzZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3Np
dGlvbkVuYWJsZWQoYm9vbCBlbmFibGVkKQogewogICAgIG1fc2V0dGluZ3MtPnNldEFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9uRW5hYmxlZChlbmFibGVkKTsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5oCShyZXZpc2lvbiAx
MDU1MjUpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuaAko
d29ya2luZyBjb3B5KQpAQCAtMTA2LDYgKzEwNiw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZv
aWQgc2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckNhbnZhc0VuYWJsZWQoYm9vbCk7CiAgICAg
dmlydHVhbCB2b2lkIHNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JBbmltYXRpb25FbmFibGVk
KGJvb2wpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRBY2NlbGVyYXRlZDJkQ2FudmFzRW5hYmxlZChi
b29sKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RGVmZXJyZWQyZENhbnZhc0VuYWJsZWQoYm9vbCk7
CiAgICAgdmlydHVhbCB2b2lkIHNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0
aW9uRW5hYmxlZChib29sKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0TWluaW11bUFjY2VsZXJhdGVk
MmRDYW52YXNTaXplKGludCk7CiAgICAgdmlydHVhbCB2b2lkIHNldEFjY2VsZXJhdGVkRmlsdGVy
c0VuYWJsZWQoYm9vbCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123718</attachid>
            <date>2012-01-24 05:44:09 -0800</date>
            <delta_ts>2012-01-27 11:50:03 -0800</delta_ts>
            <desc>Same as previous patch.  Reposted to show green on EWS, now that DEPS have rolled.</desc>
            <filename>bug-76732-20120124084409.patch</filename>
            <type>text/plain</type>
            <size>15382</size>
            <attacher name="Justin Novosad">junov</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNTczMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQzIEBACisyMDEyLTAxLTI0ICBKdXN0aW4g
Tm92b3NhZCAgPGp1bm92QGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1dIEVuYWJs
ZSBkZWZlcnJlZCBjYW52YXMgcmVuZGVyaW5nIGluIHRoZSBza2lhIHBvcnQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2NzMyCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzOiBjb3ZlcmVk
IGJ5IGV4aXN0aW5nIGNhbnZhcyBsYXlvdXQgdGVzdHMKKworICAgICAgICBBZGRpbmcgYSBuZXcg
c2V0dGluZyB0byBlbmFibGUgZGVmZXJyZWQgMmQgY2FudmFzIHJlbmRlcmluZy4KKyAgICAgICAg
QWRkZWQgc3VwcG9ydCBmb3IgZGVmZXJyZWQgMmQgY2FudmFzIHJlbmRlcmluZyBpbiBJbWFnZUJ1
ZmZlclNraWEKKyAgICAgICAgYW5kIENhbnZhczJETGF5ZXJDaHJvbWl1bSwgbW9zdGx5IHBsdW1i
aW5nLiBEZWZmZXJlZCByZW5kZXJpbmcKKyAgICAgICAgaW1wbGVtZW50YXRpb24gaXMgcHJvdmlk
ZWQgYnkgc2tpYSAoY2xhc3MgU2tEZWZlcnJlZENhbnZhcykuCisKKyAgICAgICAgKiBodG1sL0hU
TUxDYW52YXNFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50
OjpzaG91bGREZWZlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6Y3Jl
YXRlSW1hZ2VCdWZmZXIpOgorICAgICAgICAqIGh0bWwvSFRNTENhbnZhc0VsZW1lbnQuaDoKKyAg
ICAgICAgKiBwYWdlL1NldHRpbmdzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNldHRpbmdzOjpT
ZXR0aW5ncyk6CisgICAgICAgIChXZWJDb3JlOjpTZXR0aW5nczo6c2V0QWNjZWxlcmF0ZWQyZENh
bnZhc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2V0dGluZ3M6OnNldERlZmVycmVkMmRD
YW52YXNFbmFibGVkKToKKyAgICAgICAgKiBwYWdlL1NldHRpbmdzLmg6CisgICAgICAgIChXZWJD
b3JlOjpTZXR0aW5nczo6ZGVmZXJyZWQyZENhbnZhc0VuYWJsZWQpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNh
bnZhczJETGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyk6CisgICAgICAg
IChXZWJDb3JlOjpDYW52YXMyRExheWVyQ2hyb21pdW06OmNsZWFudXBSZXNvdXJjZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllckNocm9taXVtOjpzZXRGbHVzaENhbGxiYWNrKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21p
dW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5j
cHA6CisgICAgICAgIChzdGQ6OkRlZmVycmVkQ2FudmFzRmx1c2hDYWxsYmFjazo6RGVmZXJyZWRD
YW52YXNGbHVzaENhbGxiYWNrKToKKyAgICAgICAgKHN0ZDo6RGVmZXJyZWRDYW52YXNGbHVzaENh
bGxiYWNrOjpmbHVzaENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2VsZXJhdGVkRGV2
aWNlQ29udGV4dDo6cHJlcGFyZUZvckRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZWxlcmF0
ZWREZXZpY2VDb250ZXh0OjpmbHVzaCk6CisgICAgICAgIChXZWJDb3JlOjpBY2NlbGVyYXRlZERl
dmljZUNvbnRleHQ6OmdldEluc3RhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2VsZXJhdGVk
RGV2aWNlQ29udGV4dDo6Z2V0Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVBY2Nl
bGVyYXRlZENhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZm
ZXIpOgorCiAyMDEyLTAxLTI0ICBBbmRyYXMgQmVjc2kgIDxhbmRyYXMuYmVjc2lAbm9raWEuY29t
PgogCiAgICAgICAgIFtRdF0gRml4IHRoZSBidWlsZCB3aXRoIHRoZSBuZXdlcyBRdDUgaGFzaGVz
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAkocmV2aXNp
b24gMTA1NzI5KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ0Myw2ICs0NDMsMjIgQEAgYm9vbCBIVE1MQ2FudmFzRWxlbWVu
dDo6c2hvdWxkQWNjZWxlcmF0ZQogI2VuZGlmCiB9CiAKK2Jvb2wgSFRNTENhbnZhc0VsZW1lbnQ6
OnNob3VsZERlZmVyKCkgY29uc3QKK3sKKyNpZiBVU0UoU0tJQSkKKyAgICBpZiAobV9jb250ZXh0
ICYmICFtX2NvbnRleHQtPmlzMmQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgU2V0
dGluZ3MqIHNldHRpbmdzID0gZG9jdW1lbnQoKS0+c2V0dGluZ3MoKTsKKyAgICBpZiAoIXNldHRp
bmdzIHx8ICFzZXR0aW5ncy0+ZGVmZXJyZWQyZENhbnZhc0VuYWJsZWQoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsK
KyNlbmRpZgorfQorCiB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVJbWFnZUJ1ZmZlcigp
IGNvbnN0CiB7CiAgICAgQVNTRVJUKCFtX2ltYWdlQnVmZmVyKTsKQEAgLTQ2NSw3ICs0ODEsNyBA
QCB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVJbWFnZUJ1ZmZlCiAgICAgaWYgKCFidWZm
ZXJTaXplLndpZHRoKCkgfHwgIWJ1ZmZlclNpemUuaGVpZ2h0KCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSA9IHNob3VsZEFjY2VsZXJhdGUoYnVm
ZmVyU2l6ZSkgPyBBY2NlbGVyYXRlZCA6IAorICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9k
ZSA9IHNob3VsZEFjY2VsZXJhdGUoYnVmZmVyU2l6ZSkgPyAoc2hvdWxkRGVmZXIoKSA/IEFjY2Vs
ZXJhdGVkQW5kRGVmZXJyZWQgOiBBY2NlbGVyYXRlZCkgOiAKICNpZiBVU0UoU0tJQSkKICAgICAg
ICAgVW5hY2NlbGVyYXRlZE5vblBsYXRmb3JtQnVmZmVyOwogI2Vsc2UKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmgJKHJldmlzaW9uIDEwNTcyOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTMz
LDYgKzEzMyw3IEBAIHB1YmxpYzoKICAgICBib29sIGhhc0NyZWF0ZWRJbWFnZUJ1ZmZlcigpIGNv
bnN0IHsgcmV0dXJuIG1faGFzQ3JlYXRlZEltYWdlQnVmZmVyOyB9CiAKICAgICBib29sIHNob3Vs
ZEFjY2VsZXJhdGUoY29uc3QgSW50U2l6ZSYpIGNvbnN0OworICAgIGJvb2wgc2hvdWxkRGVmZXIo
KSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBIVE1MQ2FudmFzRWxlbWVudChjb25zdCBRdWFsaWZp
ZWROYW1lJiwgRG9jdW1lbnQqKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3Mu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCShyZXZp
c2lvbiAxMDU3MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTkzLDYgKzE5Myw3IEBAIFNldHRpbmdzOjpTZXR0aW5ncyhQYWdlKiBwYWdl
KQogICAgICwgbV9wcml2aWxlZ2VkV2ViR0xFeHRlbnNpb25zRW5hYmxlZChmYWxzZSkKICAgICAs
IG1fd2ViQXVkaW9FbmFibGVkKGZhbHNlKQogICAgICwgbV9hY2NlbGVyYXRlZENhbnZhczJkRW5h
YmxlZChmYWxzZSkKKyAgICAsIG1fZGVmZXJyZWRDYW52YXMyZEVuYWJsZWQoZmFsc2UpCiAgICAg
LCBtX2xvYWREZWZlcnJpbmdFbmFibGVkKHRydWUpCiAgICAgLCBtX3RpbGVkQmFja2luZ1N0b3Jl
RW5hYmxlZChmYWxzZSkKICAgICAsIG1fcGFnaW5hdGVEdXJpbmdMYXlvdXRFbmFibGVkKGZhbHNl
KQpAQCAtODExLDYgKzgxMiwxMSBAQCB2b2lkIFNldHRpbmdzOjpzZXRBY2NlbGVyYXRlZDJkQ2Fu
dmFzRW5hCiAgICAgbV9hY2NlbGVyYXRlZENhbnZhczJkRW5hYmxlZCA9IGVuYWJsZWQ7CiB9CiAK
K3ZvaWQgU2V0dGluZ3M6OnNldERlZmVycmVkMmRDYW52YXNFbmFibGVkKGJvb2wgZW5hYmxlZCkK
K3sKKyAgICBtX2RlZmVycmVkQ2FudmFzMmRFbmFibGVkID0gZW5hYmxlZDsKK30KKwogdm9pZCBT
ZXR0aW5nczo6c2V0TWluaW11bUFjY2VsZXJhdGVkMmRDYW52YXNTaXplKGludCBudW1QaXhlbHMp
CiB7CiAgICAgbV9taW5pbXVtQWNjZWxlcmF0ZWQyZENhbnZhc1NpemUgPSBudW1QaXhlbHM7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5oCShyZXZpc2lvbiAxMDU3MjkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wYWdlL1NldHRpbmdzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2Myw2ICszNjMsOSBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgc2V0QWNjZWxlcmF0ZWQyZENhbnZhc0Vu
YWJsZWQoYm9vbCk7CiAgICAgICAgIGJvb2wgYWNjZWxlcmF0ZWQyZENhbnZhc0VuYWJsZWQoKSBj
b25zdCB7IHJldHVybiBtX2FjY2VsZXJhdGVkQ2FudmFzMmRFbmFibGVkOyB9CiAKKyAgICAgICAg
dm9pZCBzZXREZWZlcnJlZDJkQ2FudmFzRW5hYmxlZChib29sKTsKKyAgICAgICAgYm9vbCBkZWZl
cnJlZDJkQ2FudmFzRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVmZXJyZWRDYW52YXMyZEVu
YWJsZWQ7IH0KKwogICAgICAgICAvLyBOdW1iZXIgb2YgcGl4ZWxzIGJlbG93IHdoaWNoIDJEIGNh
bnZhcyBpcyByZW5kZXJlZCBpbiBzb2Z0d2FyZQogICAgICAgICAvLyBldmVuIGlmIGhhcmR3YXJl
IGFjY2VsZXJhdGlvbiBpcyBlbmFibGVkLgogICAgICAgICAvLyBIYXJkd2FyZSBhY2NlbGVyYXRp
b24gaXMgdXNlZnVsIGZvciBsYXJnZSBjYW52YXNlcyB3aGVyZSBpdCBjYW4gYXZvaWQgdGhlCkBA
IC02MTYsNiArNjE5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIG1fcHJp
dmlsZWdlZFdlYkdMRXh0ZW5zaW9uc0VuYWJsZWQgOiAxOwogICAgICAgICBib29sIG1fd2ViQXVk
aW9FbmFibGVkIDogMTsKICAgICAgICAgYm9vbCBtX2FjY2VsZXJhdGVkQ2FudmFzMmRFbmFibGVk
IDogMTsKKyAgICAgICAgYm9vbCBtX2RlZmVycmVkQ2FudmFzMmRFbmFibGVkIDogMTsKICAgICAg
ICAgYm9vbCBtX2xvYWREZWZlcnJpbmdFbmFibGVkIDogMTsKICAgICAgICAgYm9vbCBtX3RpbGVk
QmFja2luZ1N0b3JlRW5hYmxlZCA6IDE7CiAgICAgICAgIGJvb2wgbV9wYWdpbmF0ZUR1cmluZ0xh
eW91dEVuYWJsZWQgOiAxOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUJ1ZmZlci5oCShyZXZpc2lvbiAxMDU3MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2
MCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBlbnVtIFJlbmRlcmluZ01vZGUgewogICAg
ICAgICBVbmFjY2VsZXJhdGVkLAogICAgICAgICBVbmFjY2VsZXJhdGVkTm9uUGxhdGZvcm1CdWZm
ZXIsIC8vIFVzZSBwbGFpbiBtZW1vcnkgYWxsb2NhdGlvbiByYXRoZXIgdGhhbiBwbGF0Zm9ybSBB
UEkgdG8gYWxsb2NhdGUgYmFja2luZyBzdG9yZS4KLSAgICAgICAgQWNjZWxlcmF0ZWQKKyAgICAg
ICAgQWNjZWxlcmF0ZWQsCisgICAgICAgIEFjY2VsZXJhdGVkQW5kRGVmZXJyZWQsCiAgICAgfTsK
ICAgICAKICAgICBlbnVtIEJhY2tpbmdTdG9yZUNvcHkgewpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52
YXMyRExheWVyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiAxMDU3MjkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzQsNiArMTM0LDkgQEAgdm9pZCBDYW52YXMyRExheWVyQ2hyb21p
dW06OnNldFRleHR1cmVNYQogCiB2b2lkIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29t
cG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgQ0NUZXh0dXJlVXBk
YXRlciYgdXBkYXRlcikKIHsKKyAgICBpZiAobV9mbHVzaENhbGxiYWNrLmdldCgpKQorICAgICAg
ICBtX2ZsdXNoQ2FsbGJhY2stPmZsdXNoQ2FsbGJhY2soKTsKKwogICAgIGlmICghbV9iYWNrVGV4
dHVyZUlkIHx8ICFtX2Zyb250VGV4dHVyZSB8fCAhbV9mcm9udFRleHR1cmUtPmlzVmFsaWQobV9z
aXplLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSkpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTcx
LDYgKzE3NCwxMSBAQCB2b2lkIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6Y2xlYW51cFJlc291CiAg
ICAgICAgIG1fZnJvbnRUZXh0dXJlLmNsZWFyKCk7CiB9CiAKK3ZvaWQgQ2FudmFzMkRMYXllckNo
cm9taXVtOjpzZXRGbHVzaENhbGxiYWNrKEZsdXNoQ2FsbGJhY2sqIGNiKQoreworICAgIG1fZmx1
c2hDYWxsYmFjayA9IGFkb3B0UHRyKGNiKTsKK30KKwogfQogCiAjZW5kaWYgLy8gVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVt
LmgJKHJldmlzaW9uIDEwNTcyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2
ICs0NCwxMSBAQCBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKIC8vIEEgbGF5ZXIgY29udGFpbmlu
ZyBhbiBhY2NlbGVyYXRlZCAyZCBjYW52YXMKIGNsYXNzIENhbnZhczJETGF5ZXJDaHJvbWl1bSA6
IHB1YmxpYyBDYW52YXNMYXllckNocm9taXVtIHsKIHB1YmxpYzoKKyAgICBjbGFzcyBGbHVzaENh
bGxiYWNrIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgdm9pZCBmbHVzaENhbGxiYWNr
KCkgPSAwOworICAgIH07CisKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDYW52YXMyRExheWVyQ2hy
b21pdW0+IGNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCosIGNvbnN0IEludFNpemUmKTsKICAgICB2
aXJ0dWFsIH5DYW52YXMyRExheWVyQ2hyb21pdW0oKTsKIApAQCAtNjAsNiArNjUsOCBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCB2b2lkIHVucmVzZXJ2ZUNvbnRlbnRzVGV4dHVyZSgpOwogICAgIHZp
cnR1YWwgdm9pZCBjbGVhbnVwUmVzb3VyY2VzKCk7CiAKKyAgICB2b2lkIHNldEZsdXNoQ2FsbGJh
Y2soRmx1c2hDYWxsYmFjayopOworCiBwcml2YXRlOgogICAgIENhbnZhczJETGF5ZXJDaHJvbWl1
bShHcmFwaGljc0NvbnRleHQzRCosIGNvbnN0IEludFNpemUmKTsKIApAQCAtNzYsNiArODMsNyBA
QCBwcml2YXRlOgogICAgIC8vIHN5bmNocm9uaXplIGl0cyBkcmF3cyB3aXRoIHRoZSBjYW52YXMg
dXBkYXRlcy4KICAgICBib29sIG1fdXNlRG91YmxlQnVmZmVyaW5nOwogICAgIE93blB0cjxNYW5h
Z2VkVGV4dHVyZT4gbV9mcm9udFRleHR1cmU7CisgICAgT3duUHRyPEZsdXNoQ2FsbGJhY2s+IG1f
Zmx1c2hDYWxsYmFjazsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAJKHJldmlzaW9u
IDEwNTcyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VC
dWZmZXJTa2lhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsNyBAQAogI2luY2x1ZGUg
IlBsYXRmb3JtQ29udGV4dFNraWEuaCIKICNpbmNsdWRlICJTaGFyZWRHcmFwaGljc0NvbnRleHQz
RC5oIgogI2luY2x1ZGUgIlNrQ29sb3JQcml2LmgiCisjaW5jbHVkZSAiU2tEZWZlcnJlZENhbnZh
cy5oIgogI2luY2x1ZGUgIlNrR3B1RGV2aWNlLmgiCiAjaW5jbHVkZSAiU2tpYVV0aWxzLmgiCiAj
aW5jbHVkZSAiV0VCUEltYWdlRW5jb2Rlci5oIgpAQCAtNTQsNiArNTUsMjYgQEAKIAogdXNpbmcg
bmFtZXNwYWNlIHN0ZDsKIAorbmFtZXNwYWNlIHsKK2NsYXNzIERlZmVycmVkQ2FudmFzRmx1c2hD
YWxsYmFjayA6IHB1YmxpYyBXZWJDb3JlOjpDYW52YXMyRExheWVyQ2hyb21pdW06OkZsdXNoQ2Fs
bGJhY2sgeworcHVibGljOgorICAgIERlZmVycmVkQ2FudmFzRmx1c2hDYWxsYmFjayhTa0RlZmVy
cmVkQ2FudmFzKiBjYW52YXMpCisgICAgeworICAgICAgICBtX2NhbnZhcyA9IGNhbnZhczsKKyAg
ICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZmx1c2hDYWxsYmFjaygpCisgICAgeworICAgICAgICBT
a0RlZmVycmVkQ2FudmFzOjpEZWZlcnJlZERldmljZSogZGV2aWNlID0gbV9jYW52YXMtPmdldERl
ZmVycmVkRGV2aWNlKCk7CisgICAgICAgIGRldmljZS0+Zmx1c2hQZW5kaW5nKCk7CisgICAgICAg
IGRldmljZS0+Zmx1c2hDb250ZXh0KCk7CisgICAgfQorCitwcml2YXRlOgorICAgIFNrRGVmZXJy
ZWRDYW52YXMqIG1fY2FudmFzOworfTsKK30gLy8gdW5uYW1lZCBuYW1lc3BhY2UKKwogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiAvLyBXZSBwYXNzIGEgdGVjaG5pY2FsbHktdW5pbml0aWFsaXplZCBj
YW52YXMgdG8gdGhlIHBsYXRmb3JtIGNvbnRleHQgaGVyZSBzaW5jZQpAQCAtNjUsNyArODYsNDEg
QEAgSW1hZ2VCdWZmZXJEYXRhOjpJbWFnZUJ1ZmZlckRhdGEoY29uc3QgSQogewogfQogCi1zdGF0
aWMgU2tDYW52YXMqIGNyZWF0ZUFjY2VsZXJhdGVkQ2FudmFzKGNvbnN0IEludFNpemUmIHNpemUs
IEltYWdlQnVmZmVyRGF0YSogZGF0YSkKK2NsYXNzIEFjY2VsZXJhdGVkRGV2aWNlQ29udGV4dCA6
IHB1YmxpYyBTa0RlZmVycmVkQ2FudmFzOjpEZXZpY2VDb250ZXh0IHsKK3B1YmxpYzoKKyAgICB2
aXJ0dWFsIHZvaWQgcHJlcGFyZUZvckRyYXcoKQorICAgIHsKKyAgICAgICAgR3JhcGhpY3NDb250
ZXh0M0QqIGNvbnRleHQzRCA9IGdldENvbnRleHQoKTsKKyAgICAgICAgaWYgKGNvbnRleHQzRCkK
KyAgICAgICAgICAgIGNvbnRleHQzRC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgfQorCisg
ICAgdmlydHVhbCB2b2lkIGZsdXNoKCkKKyAgICB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dDNE
KiBjb250ZXh0M0QgPSBnZXRDb250ZXh0KCk7CisgICAgICAgIGlmIChjb250ZXh0M0QpCisgICAg
ICAgICAgICBjb250ZXh0M0QtPmZsdXNoKCk7CisgICAgfQorCisgICAgc3RhdGljIEFjY2VsZXJh
dGVkRGV2aWNlQ29udGV4dCogZ2V0SW5zdGFuY2UoKQorICAgIHsKKyAgICAgICAgcmV0dXJuICZt
X2luc3RhbmNlOworICAgIH0KK3ByaXZhdGU6CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGdldENv
bnRleHQoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2NvbnRleHQpCisgICAgICAgICAgICBtX2Nv
bnRleHQgPSBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6Z2V0KCk7CisgICAgICAgIHJldHVybiBt
X2NvbnRleHQ7CisgICAgfQorCisgICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKKyAg
ICBzdGF0aWMgQWNjZWxlcmF0ZWREZXZpY2VDb250ZXh0IG1faW5zdGFuY2U7Cit9OworCitBY2Nl
bGVyYXRlZERldmljZUNvbnRleHQgQWNjZWxlcmF0ZWREZXZpY2VDb250ZXh0OjptX2luc3RhbmNl
OworCitzdGF0aWMgU2tDYW52YXMqIGNyZWF0ZUFjY2VsZXJhdGVkQ2FudmFzKGNvbnN0IEludFNp
emUmIHNpemUsIEltYWdlQnVmZmVyRGF0YSogZGF0YSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdN
b2RlKQogewogICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M0QgPSBTaGFyZWRHcmFwaGlj
c0NvbnRleHQzRDo6Z2V0KCk7CiAgICAgaWYgKCFjb250ZXh0M0QpCkBAIC04MywxMiArMTM4LDIx
IEBAIHN0YXRpYyBTa0NhbnZhcyogY3JlYXRlQWNjZWxlcmF0ZWRDYW52YXMKICAgICBTa0F1dG9U
VW5yZWY8R3JUZXh0dXJlPiB0ZXh0dXJlKGdyLT5jcmVhdGVVbmNhY2hlZFRleHR1cmUoZGVzYywg
MCwgMCkpOwogICAgIGlmICghdGV4dHVyZS5nZXQoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
U2tDYW52YXMqIGNhbnZhcyA9IG5ldyBTa0NhbnZhcygpOwotICAgIGNhbnZhcy0+c2V0RGV2aWNl
KG5ldyBTa0dwdURldmljZShnciwgdGV4dHVyZS5nZXQoKSkpLT51bnJlZigpOworICAgIFNrQ2Fu
dmFzKiBjYW52YXM7CisgICAgU2tEZXZpY2UqIGRldmljZSA9IG5ldyBTa0dwdURldmljZShnciwg
dGV4dHVyZS5nZXQoKSk7CisgICAgaWYgKHJlbmRlcmluZ01vZGUgPT0gQWNjZWxlcmF0ZWRBbmRE
ZWZlcnJlZCkKKyAgICAgICAgY2FudmFzID0gbmV3IFNrRGVmZXJyZWRDYW52YXMoZGV2aWNlLCBB
Y2NlbGVyYXRlZERldmljZUNvbnRleHQ6OmdldEluc3RhbmNlKCkpOworICAgIGVsc2UKKyAgICAg
ICAgY2FudmFzID0gbmV3IFNrQ2FudmFzKGRldmljZSk7CisgICAgZGV2aWNlLT51bnJlZigpOwog
ICAgIGRhdGEtPm1fcGxhdGZvcm1Db250ZXh0LnNldEdyYXBoaWNzQ29udGV4dDNEKGNvbnRleHQz
RCk7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIGRhdGEtPm1fcGxhdGZv
cm1MYXllciA9IENhbnZhczJETGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKGNvbnRleHQzRCwgc2l6ZSk7
CiAgICAgZGF0YS0+bV9wbGF0Zm9ybUxheWVyLT5zZXRUZXh0dXJlSWQodGV4dHVyZS5nZXQoKS0+
Z2V0VGV4dHVyZUhhbmRsZSgpKTsKKyAgICBpZiAocmVuZGVyaW5nTW9kZSA9PSBBY2NlbGVyYXRl
ZEFuZERlZmVycmVkKSB7CisgICAgICAgIERlZmVycmVkQ2FudmFzRmx1c2hDYWxsYmFjayogZmx1
c2hDQiA9IG5ldyBEZWZlcnJlZENhbnZhc0ZsdXNoQ2FsbGJhY2soc3RhdGljX2Nhc3Q8U2tEZWZl
cnJlZENhbnZhcyo+KGNhbnZhcykpOworICAgICAgICBkYXRhLT5tX3BsYXRmb3JtTGF5ZXItPnNl
dEZsdXNoQ2FsbGJhY2soZmx1c2hDQik7CisgICAgfQogI2VuZGlmCiAgICAgcmV0dXJuIGNhbnZh
czsKIH0KQEAgLTEwNiw4ICsxNzAsOCBAQCBJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3Qg
SW50U2l6ZSYKIHsKICAgICBPd25QdHI8U2tDYW52YXM+IGNhbnZhczsKIAotICAgIGlmIChyZW5k
ZXJpbmdNb2RlID09IEFjY2VsZXJhdGVkKQotICAgICAgICBjYW52YXMgPSBhZG9wdFB0cihjcmVh
dGVBY2NlbGVyYXRlZENhbnZhcyhzaXplLCAmbV9kYXRhKSk7CisgICAgaWYgKHJlbmRlcmluZ01v
ZGUgPT0gQWNjZWxlcmF0ZWQgfHwgcmVuZGVyaW5nTW9kZSA9PSBBY2NlbGVyYXRlZEFuZERlZmVy
cmVkKQorICAgICAgICBjYW52YXMgPSBhZG9wdFB0cihjcmVhdGVBY2NlbGVyYXRlZENhbnZhcyhz
aXplLCAmbV9kYXRhLCByZW5kZXJpbmdNb2RlKSk7CiAgICAgZWxzZSBpZiAocmVuZGVyaW5nTW9k
ZSA9PSBVbmFjY2VsZXJhdGVkTm9uUGxhdGZvcm1CdWZmZXIpCiAgICAgICAgIGNhbnZhcyA9IGFk
b3B0UHRyKGNyZWF0ZU5vblBsYXRmb3JtQ2FudmFzKHNpemUpKTsKIApJbmRleDogU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNTczMykKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTItMDEtMjQg
IEp1c3RpbiBOb3Zvc2FkICA8anVub3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtDaHJvbWl1
bV0gRW5hYmxlIGRlZmVycmVkIGNhbnZhcyByZW5kZXJpbmcgaW4gdGhlIHNraWEgcG9ydAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY3MzIKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRpbmcgYSBuZXcg
c2V0dGluZyBmb3IgZW5hYmxpbmcgZGVmZXJyZWQgMmQgY2FudmFzIHJlbmRlcmluZworCisgICAg
ICAgICogcHVibGljL1dlYlNldHRpbmdzLmg6CisgICAgICAgICogc3JjL1dlYlNldHRpbmdzSW1w
bC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlNldHRpbmdzSW1wbDo6c2V0RGVmZXJyZWQyZENh
bnZhc0VuYWJsZWQpOgorICAgICAgICAqIHNyYy9XZWJTZXR0aW5nc0ltcGwuaDoKKwogMjAxMi0w
MS0yNCAgVmluY2VudCBTY2hlaWIgIDxzY2hlaWJAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtD
aHJvbWl1bV0gQWRkIFdlYktpdCBBUEkgZm9yIFBvaW50ZXIgTG9jawpJbmRleDogU291cmNlL1dl
YktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2V0dGluZ3MuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTZXR0aW5ncy5oCShyZXZpc2lvbiAxMDU3MjkpCisr
KyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTZXR0aW5ncy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTQsNiArMTE0LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nRm9yUGx1Z2luc0VuYWJsZWQoYm9vbCkgPSAwOwogICAgIHZpcnR1
YWwgdm9pZCBzZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yQW5pbWF0aW9uRW5hYmxlZChib29s
KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldEFjY2VsZXJhdGVkMmRDYW52YXNFbmFibGVkKGJv
b2wpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RGVmZXJyZWQyZENhbnZhc0VuYWJsZWQoYm9v
bCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRml4
ZWRQb3NpdGlvbkVuYWJsZWQoYm9vbCkgID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0TWluaW11
bUFjY2VsZXJhdGVkMmRDYW52YXNTaXplKGludCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRB
Y2NlbGVyYXRlZEZpbHRlcnNFbmFibGVkKGJvb2wpID0gMDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmNwcAkocmV2aXNpb24gMTA1NzI5KQor
KysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzY4LDYgKzM2OCwxMSBAQCB2b2lkIFdlYlNldHRpbmdzSW1wbDo6c2V0QWNj
ZWxlcmF0ZWQyZENhCiAgICAgbV9zZXR0aW5ncy0+c2V0QWNjZWxlcmF0ZWQyZENhbnZhc0VuYWJs
ZWQoZW5hYmxlZCk7CiB9CiAKK3ZvaWQgV2ViU2V0dGluZ3NJbXBsOjpzZXREZWZlcnJlZDJkQ2Fu
dmFzRW5hYmxlZChib29sIGVuYWJsZWQpCit7CisgICAgbV9zZXR0aW5ncy0+c2V0RGVmZXJyZWQy
ZENhbnZhc0VuYWJsZWQoZW5hYmxlZCk7Cit9CisKIHZvaWQgV2ViU2V0dGluZ3NJbXBsOjpzZXRB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQoYm9vbCBlbmFibGVk
KQogewogICAgIG1fc2V0dGluZ3MtPnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBv
c2l0aW9uRW5hYmxlZChlbmFibGVkKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYlNldHRpbmdzSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlNldHRpbmdzSW1wbC5oCShyZXZpc2lvbiAxMDU3MjkpCisrKyBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDYg
KzEwNiw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0QWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0ZvckNhbnZhc0VuYWJsZWQoYm9vbCk7CiAgICAgdmlydHVhbCB2b2lkIHNldEFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdGb3JBbmltYXRpb25FbmFibGVkKGJvb2wpOwogICAgIHZpcnR1YWwgdm9p
ZCBzZXRBY2NlbGVyYXRlZDJkQ2FudmFzRW5hYmxlZChib29sKTsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0RGVmZXJyZWQyZENhbnZhc0VuYWJsZWQoYm9vbCk7CiAgICAgdmlydHVhbCB2b2lkIHNldEFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9uRW5hYmxlZChib29sKTsKICAgICB2
aXJ0dWFsIHZvaWQgc2V0TWluaW11bUFjY2VsZXJhdGVkMmRDYW52YXNTaXplKGludCk7CiAgICAg
dmlydHVhbCB2b2lkIHNldEFjY2VsZXJhdGVkRmlsdGVyc0VuYWJsZWQoYm9vbCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124342</attachid>
            <date>2012-01-27 11:50:08 -0800</date>
            <delta_ts>2012-01-31 15:08:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76732-20120127145007.patch</filename>
            <type>text/plain</type>
            <size>14408</size>
            <attacher name="Justin Novosad">junov</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNjEzOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQwIEBACisyMDEyLTAxLTI3ICBKdXN0aW4g
Tm92b3NhZCAgPGp1bm92QGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1dIEVuYWJs
ZSBkZWZlcnJlZCBjYW52YXMgcmVuZGVyaW5nIGluIHRoZSBza2lhIHBvcnQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2NzMyCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzOiBjb3ZlcmVk
IGJ5IGV4aXN0aW5nIGNhbnZhcyBsYXlvdXQgdGVzdHMKKworICAgICAgICBBZGRpbmcgYSBuZXcg
c2V0dGluZyB0byBlbmFibGUgZGVmZXJyZWQgMmQgY2FudmFzIHJlbmRlcmluZy4KKyAgICAgICAg
QWRkZWQgc3VwcG9ydCBmb3IgZGVmZXJyZWQgMmQgY2FudmFzIHJlbmRlcmluZyBpbiBJbWFnZUJ1
ZmZlclNraWEKKyAgICAgICAgYW5kIENhbnZhczJETGF5ZXJDaHJvbWl1bSwgbW9zdGx5IHBsdW1i
aW5nLiBEZWZmZXJlZCByZW5kZXJpbmcKKyAgICAgICAgaW1wbGVtZW50YXRpb24gaXMgcHJvdmlk
ZWQgYnkgc2tpYSAoY2xhc3MgU2tEZWZlcnJlZENhbnZhcykuCisKKyAgICAgICAgKiBodG1sL0hU
TUxDYW52YXNFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50
OjpzaG91bGREZWZlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6Y3Jl
YXRlSW1hZ2VCdWZmZXIpOgorICAgICAgICAqIGh0bWwvSFRNTENhbnZhc0VsZW1lbnQuaDoKKyAg
ICAgICAgKiBwYWdlL1NldHRpbmdzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNldHRpbmdzOjpT
ZXR0aW5ncyk6CisgICAgICAgIChXZWJDb3JlOjpTZXR0aW5nczo6c2V0QWNjZWxlcmF0ZWQyZENh
bnZhc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2V0dGluZ3M6OnNldERlZmVycmVkMmRD
YW52YXNFbmFibGVkKToKKyAgICAgICAgKiBwYWdlL1NldHRpbmdzLmg6CisgICAgICAgIChXZWJD
b3JlOjpTZXR0aW5nczo6ZGVmZXJyZWQyZENhbnZhc0VuYWJsZWQpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNh
bnZhczJETGF5ZXJDaHJvbWl1bTo6Q2FudmFzMkRMYXllckNocm9taXVtKToKKyAgICAgICAgKFdl
YkNvcmU6OkNhbnZhczJETGF5ZXJDaHJvbWl1bTo6c2V0Q2FudmFzKToKKyAgICAgICAgKFdlYkNv
cmU6OkNhbnZhczJETGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c0lmRGlydHkpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2VsZXJhdGVkRGV2aWNlQ29udGV4dDo6QWNjZWxlcmF0ZWREZXZp
Y2VDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2VsZXJhdGVkRGV2aWNlQ29udGV4dDo6
cHJlcGFyZUZvckRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZWxlcmF0ZWREZXZpY2VDb250
ZXh0OjpmbHVzaCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVBY2NlbGVyYXRlZENhbnZhcyk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIpOgorCiAyMDEyLTAx
LTI3ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgV2hl
biB0aHJlYWRlZCBzY3JvbGxpbmcgaXMgZW5hYmxlZCBmb3IgYSBGcmFtZVZpZXcsIGFsd2F5cyBw
dXQgc2Nyb2xsYmFycyBpbiBsYXllcnMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENh
bnZhc0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENh
bnZhc0VsZW1lbnQuY3BwCShyZXZpc2lvbiAxMDU3MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxDYW52YXNFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQzLDYgKzQ0MywyMiBA
QCBib29sIEhUTUxDYW52YXNFbGVtZW50OjpzaG91bGRBY2NlbGVyYXRlCiAjZW5kaWYKIH0KIAor
Ym9vbCBIVE1MQ2FudmFzRWxlbWVudDo6c2hvdWxkRGVmZXIoKSBjb25zdAoreworI2lmIFVTRShT
S0lBKQorICAgIGlmIChtX2NvbnRleHQgJiYgIW1fY29udGV4dC0+aXMyZCgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1bWVudCgpLT5zZXR0
aW5ncygpOworICAgIGlmICghc2V0dGluZ3MgfHwgIXNldHRpbmdzLT5kZWZlcnJlZDJkQ2FudmFz
RW5hYmxlZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKKyNl
bHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKIHZvaWQgSFRNTENhbnZhc0VsZW1l
bnQ6OmNyZWF0ZUltYWdlQnVmZmVyKCkgY29uc3QKIHsKICAgICBBU1NFUlQoIW1faW1hZ2VCdWZm
ZXIpOwpAQCAtNDY1LDcgKzQ4MSw3IEBAIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUlt
YWdlQnVmZmUKICAgICBpZiAoIWJ1ZmZlclNpemUud2lkdGgoKSB8fCAhYnVmZmVyU2l6ZS5oZWln
aHQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2Rl
ID0gc2hvdWxkQWNjZWxlcmF0ZShidWZmZXJTaXplKSA/IEFjY2VsZXJhdGVkIDogCisgICAgUmVu
ZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlID0gc2hvdWxkQWNjZWxlcmF0ZShidWZmZXJTaXplKSA/
IChzaG91bGREZWZlcigpID8gQWNjZWxlcmF0ZWRBbmREZWZlcnJlZCA6IEFjY2VsZXJhdGVkKSA6
IAogI2lmIFVTRShTS0lBKQogICAgICAgICBVbmFjY2VsZXJhdGVkTm9uUGxhdGZvcm1CdWZmZXI7
CiAjZWxzZQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaAkocmV2
aXNpb24gMTA1NzI5KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsNiArMTMzLDcgQEAgcHVibGljOgogICAgIGJvb2wgaGFz
Q3JlYXRlZEltYWdlQnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9oYXNDcmVhdGVkSW1hZ2VCdWZm
ZXI7IH0KIAogICAgIGJvb2wgc2hvdWxkQWNjZWxlcmF0ZShjb25zdCBJbnRTaXplJikgY29uc3Q7
CisgICAgYm9vbCBzaG91bGREZWZlcigpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIEhUTUxDYW52
YXNFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGFnZS9TZXR0aW5ncy5jcHAJKHJldmlzaW9uIDEwNTcyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvU2V0dGluZ3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTMsNiArMTkzLDcgQEAgU2V0dGlu
Z3M6OlNldHRpbmdzKFBhZ2UqIHBhZ2UpCiAgICAgLCBtX3ByaXZpbGVnZWRXZWJHTEV4dGVuc2lv
bnNFbmFibGVkKGZhbHNlKQogICAgICwgbV93ZWJBdWRpb0VuYWJsZWQoZmFsc2UpCiAgICAgLCBt
X2FjY2VsZXJhdGVkQ2FudmFzMmRFbmFibGVkKGZhbHNlKQorICAgICwgbV9kZWZlcnJlZENhbnZh
czJkRW5hYmxlZChmYWxzZSkKICAgICAsIG1fbG9hZERlZmVycmluZ0VuYWJsZWQodHJ1ZSkKICAg
ICAsIG1fdGlsZWRCYWNraW5nU3RvcmVFbmFibGVkKGZhbHNlKQogICAgICwgbV9wYWdpbmF0ZUR1
cmluZ0xheW91dEVuYWJsZWQoZmFsc2UpCkBAIC04MTEsNiArODEyLDExIEBAIHZvaWQgU2V0dGlu
Z3M6OnNldEFjY2VsZXJhdGVkMmRDYW52YXNFbmEKICAgICBtX2FjY2VsZXJhdGVkQ2FudmFzMmRF
bmFibGVkID0gZW5hYmxlZDsKIH0KIAordm9pZCBTZXR0aW5nczo6c2V0RGVmZXJyZWQyZENhbnZh
c0VuYWJsZWQoYm9vbCBlbmFibGVkKQoreworICAgIG1fZGVmZXJyZWRDYW52YXMyZEVuYWJsZWQg
PSBlbmFibGVkOworfQorCiB2b2lkIFNldHRpbmdzOjpzZXRNaW5pbXVtQWNjZWxlcmF0ZWQyZENh
bnZhc1NpemUoaW50IG51bVBpeGVscykKIHsKICAgICBtX21pbmltdW1BY2NlbGVyYXRlZDJkQ2Fu
dmFzU2l6ZSA9IG51bVBpeGVsczsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3Mu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmgJKHJldmlzaW9u
IDEwNTcyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaAkod29ya2luZyBjb3B5
KQpAQCAtMzYzLDYgKzM2Myw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBz
ZXRBY2NlbGVyYXRlZDJkQ2FudmFzRW5hYmxlZChib29sKTsKICAgICAgICAgYm9vbCBhY2NlbGVy
YXRlZDJkQ2FudmFzRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fYWNjZWxlcmF0ZWRDYW52YXMy
ZEVuYWJsZWQ7IH0KIAorICAgICAgICB2b2lkIHNldERlZmVycmVkMmRDYW52YXNFbmFibGVkKGJv
b2wpOworICAgICAgICBib29sIGRlZmVycmVkMmRDYW52YXNFbmFibGVkKCkgY29uc3QgeyByZXR1
cm4gbV9kZWZlcnJlZENhbnZhczJkRW5hYmxlZDsgfQorCiAgICAgICAgIC8vIE51bWJlciBvZiBw
aXhlbHMgYmVsb3cgd2hpY2ggMkQgY2FudmFzIGlzIHJlbmRlcmVkIGluIHNvZnR3YXJlCiAgICAg
ICAgIC8vIGV2ZW4gaWYgaGFyZHdhcmUgYWNjZWxlcmF0aW9uIGlzIGVuYWJsZWQuCiAgICAgICAg
IC8vIEhhcmR3YXJlIGFjY2VsZXJhdGlvbiBpcyB1c2VmdWwgZm9yIGxhcmdlIGNhbnZhc2VzIHdo
ZXJlIGl0IGNhbiBhdm9pZCB0aGUKQEAgLTYxNiw2ICs2MTksNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIGJvb2wgbV9wcml2aWxlZ2VkV2ViR0xFeHRlbnNpb25zRW5hYmxlZCA6IDE7
CiAgICAgICAgIGJvb2wgbV93ZWJBdWRpb0VuYWJsZWQgOiAxOwogICAgICAgICBib29sIG1fYWNj
ZWxlcmF0ZWRDYW52YXMyZEVuYWJsZWQgOiAxOworICAgICAgICBib29sIG1fZGVmZXJyZWRDYW52
YXMyZEVuYWJsZWQgOiAxOwogICAgICAgICBib29sIG1fbG9hZERlZmVycmluZ0VuYWJsZWQgOiAx
OwogICAgICAgICBib29sIG1fdGlsZWRCYWNraW5nU3RvcmVFbmFibGVkIDogMTsKICAgICAgICAg
Ym9vbCBtX3BhZ2luYXRlRHVyaW5nTGF5b3V0RW5hYmxlZCA6IDE7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgJKHJldmlzaW9uIDEwNTcy
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGVu
dW0gUmVuZGVyaW5nTW9kZSB7CiAgICAgICAgIFVuYWNjZWxlcmF0ZWQsCiAgICAgICAgIFVuYWNj
ZWxlcmF0ZWROb25QbGF0Zm9ybUJ1ZmZlciwgLy8gVXNlIHBsYWluIG1lbW9yeSBhbGxvY2F0aW9u
IHJhdGhlciB0aGFuIHBsYXRmb3JtIEFQSSB0byBhbGxvY2F0ZSBiYWNraW5nIHN0b3JlLgotICAg
ICAgICBBY2NlbGVyYXRlZAorICAgICAgICBBY2NlbGVyYXRlZCwKKyAgICAgICAgQWNjZWxlcmF0
ZWRBbmREZWZlcnJlZCwKICAgICB9OwogICAgIAogICAgIGVudW0gQmFja2luZ1N0b3JlQ29weSB7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMy
RExheWVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDEw
NTcyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZh
czJETGF5ZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDggQEAKIAog
I2lmIFVTRShTS0lBKQogI2luY2x1ZGUgIkdyQ29udGV4dC5oIgorI2luY2x1ZGUgIlNrQ2FudmFz
LmgiCisjaW5jbHVkZSAiU2tEZXZpY2UuaCIKICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CkBAIC01OSw2ICs2MSw3IEBAIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6Q2FudmFzMkRMYXllckNo
cm8KICAgICAsIG1fYmFja1RleHR1cmVJZCgwKQogICAgICwgbV9mYm8oMCkKICAgICAsIG1fdXNl
RG91YmxlQnVmZmVyaW5nKENDUHJveHk6Omhhc0ltcGxUaHJlYWQoKSkKKyAgICAsIG1fY2FudmFz
KDApCiB7CiAgICAgaWYgKG1fdXNlRG91YmxlQnVmZmVyaW5nKQogICAgICAgICBHTEMobV9jb250
ZXh0LCBtX2ZibyA9IG1fY29udGV4dC0+Y3JlYXRlRnJhbWVidWZmZXIoKSk7CkBAIC05MSw2ICs5
NCwxMyBAQCBib29sIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50CiAgICAgICAg
ICYmIG1fY29udGV4dCAmJiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmdldEdyYXBoaWNz
UmVzZXRTdGF0dXNBUkIoKSA9PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1IpOwogfQogCisj
aWYgVVNFKFNLSUEpCit2b2lkIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6c2V0Q2FudmFzKFNrQ2Fu
dmFzKiBjYW52YXMpCit7CisgICAgbV9jYW52YXMgPSBjYW52YXM7Cit9CisjZW5kaWYKKwogdm9p
ZCBDYW52YXMyRExheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHNJZkRpcnR5KCkKIHsKICAgICBp
ZiAoIWRyYXdzQ29udGVudCgpKQpAQCAtMTA4LDYgKzExOCw5IEBAIHZvaWQgQ2FudmFzMkRMYXll
ckNocm9taXVtOjpwYWludENvbnRlbnQKICAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nl
c3MpOwogCiAjaWYgVVNFKFNLSUEpCisgICAgaWYgKG1fY2FudmFzKQorICAgICAgICBtX2NhbnZh
cy0+Z2V0RGV2aWNlKCktPmFjY2Vzc1JlbmRlclRhcmdldCgpOyAvLyBUcmlnZ2VycyBleGVjdXRp
b24gb2YgcGVuZGluZyBkcmF3IG9wZXJhdGlvbnMKKwogICAgIEdyQ29udGV4dCogZ3JDb250ZXh0
ID0gbV9jb250ZXh0LT5nckNvbnRleHQoKTsKICAgICBpZiAoZ3JDb250ZXh0KQogICAgICAgICBn
ckNvbnRleHQtPmZsdXNoKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0u
aAkocmV2aXNpb24gMTA1NzI5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYg
KzM3LDEwIEBACiAjaW5jbHVkZSAiQ2FudmFzTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIk1h
bmFnZWRUZXh0dXJlLmgiCiAKKyNpZiBVU0UoU0tJQSkKK2NsYXNzIFNrQ2FudmFzOworI2VuZGlm
CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CkBAIC02
MCw2ICs2NCwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHVucmVzZXJ2ZUNvbnRlbnRz
VGV4dHVyZSgpOwogICAgIHZpcnR1YWwgdm9pZCBjbGVhbnVwUmVzb3VyY2VzKCk7CiAKKyNpZiBV
U0UoU0tJQSkKKyAgICB2b2lkIHNldENhbnZhcyhTa0NhbnZhcyopOworI2VuZGlmCisKIHByaXZh
dGU6CiAgICAgQ2FudmFzMkRMYXllckNocm9taXVtKEdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3Qg
SW50U2l6ZSYpOwogCkBAIC03Niw2ICs4NCw5IEBAIHByaXZhdGU6CiAgICAgLy8gc3luY2hyb25p
emUgaXRzIGRyYXdzIHdpdGggdGhlIGNhbnZhcyB1cGRhdGVzLgogICAgIGJvb2wgbV91c2VEb3Vi
bGVCdWZmZXJpbmc7CiAgICAgT3duUHRyPE1hbmFnZWRUZXh0dXJlPiBtX2Zyb250VGV4dHVyZTsK
KyNpZiBVU0UoU0tJQSkKKyAgICBTa0NhbnZhcyogbV9jYW52YXM7CisjZW5kaWYKIH07CiAKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJT
a2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAJKHJldmlzaW9uIDEwNTcyOSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDYsNiArNDYsNyBAQAogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIK
ICNpbmNsdWRlICJTaGFyZWRHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIlNrQ29sb3JQ
cml2LmgiCisjaW5jbHVkZSAiU2tEZWZlcnJlZENhbnZhcy5oIgogI2luY2x1ZGUgIlNrR3B1RGV2
aWNlLmgiCiAjaW5jbHVkZSAiU2tpYVV0aWxzLmgiCiAjaW5jbHVkZSAiV0VCUEltYWdlRW5jb2Rl
ci5oIgpAQCAtNjUsNyArNjYsMjkgQEAgSW1hZ2VCdWZmZXJEYXRhOjpJbWFnZUJ1ZmZlckRhdGEo
Y29uc3QgSQogewogfQogCi1zdGF0aWMgU2tDYW52YXMqIGNyZWF0ZUFjY2VsZXJhdGVkQ2FudmFz
KGNvbnN0IEludFNpemUmIHNpemUsIEltYWdlQnVmZmVyRGF0YSogZGF0YSkKK2NsYXNzIEFjY2Vs
ZXJhdGVkRGV2aWNlQ29udGV4dCA6IHB1YmxpYyBTa0RlZmVycmVkQ2FudmFzOjpEZXZpY2VDb250
ZXh0IHsKK3B1YmxpYzoKKyAgICBBY2NlbGVyYXRlZERldmljZUNvbnRleHQoR3JhcGhpY3NDb250
ZXh0M0QqIGNvbnRleHQzRCkKKyAgICB7CisgICAgICAgIEFTU0VSVChjb250ZXh0M0QpOworICAg
ICAgICBtX2NvbnRleHQzRCA9IGNvbnRleHQzRDsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQg
cHJlcGFyZUZvckRyYXcoKQorICAgIHsKKyAgICAgICAgbV9jb250ZXh0M0QtPm1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBmbHVzaCgpCisgICAgeworICAg
ICAgICBtX2NvbnRleHQzRC0+Zmx1c2goKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgR3JhcGhp
Y3NDb250ZXh0M0QqIG1fY29udGV4dDNEOworfTsKKworc3RhdGljIFNrQ2FudmFzKiBjcmVhdGVB
Y2NlbGVyYXRlZENhbnZhcyhjb25zdCBJbnRTaXplJiBzaXplLCBJbWFnZUJ1ZmZlckRhdGEqIGRh
dGEsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSkKIHsKICAgICBHcmFwaGljc0NvbnRleHQz
RCogY29udGV4dDNEID0gU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmdldCgpOwogICAgIGlmICgh
Y29udGV4dDNEKQpAQCAtODMsMTIgKzEwNiwyMCBAQCBzdGF0aWMgU2tDYW52YXMqIGNyZWF0ZUFj
Y2VsZXJhdGVkQ2FudmFzCiAgICAgU2tBdXRvVFVucmVmPEdyVGV4dHVyZT4gdGV4dHVyZShnci0+
Y3JlYXRlVW5jYWNoZWRUZXh0dXJlKGRlc2MsIDAsIDApKTsKICAgICBpZiAoIXRleHR1cmUuZ2V0
KCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIFNrQ2FudmFzKiBjYW52YXMgPSBuZXcgU2tDYW52
YXMoKTsKLSAgICBjYW52YXMtPnNldERldmljZShuZXcgU2tHcHVEZXZpY2UoZ3IsIHRleHR1cmUu
Z2V0KCkpKS0+dW5yZWYoKTsKKyAgICBTa0NhbnZhcyogY2FudmFzOworICAgIFNrRGV2aWNlKiBk
ZXZpY2UgPSBuZXcgU2tHcHVEZXZpY2UoZ3IsIHRleHR1cmUuZ2V0KCkpOworICAgIGlmIChyZW5k
ZXJpbmdNb2RlID09IEFjY2VsZXJhdGVkQW5kRGVmZXJyZWQpIHsKKyAgICAgICAgQWNjZWxlcmF0
ZWREZXZpY2VDb250ZXh0KiBkZXZpY2VDb250ZXh0ID0gbmV3IEFjY2VsZXJhdGVkRGV2aWNlQ29u
dGV4dChjb250ZXh0M0QpOworICAgICAgICBjYW52YXMgPSBuZXcgU2tEZWZlcnJlZENhbnZhcyhk
ZXZpY2UsIGRldmljZUNvbnRleHQpOworICAgICAgICBkZXZpY2VDb250ZXh0LT51bnJlZigpOwor
ICAgIH0gZWxzZQorICAgICAgICBjYW52YXMgPSBuZXcgU2tDYW52YXMoZGV2aWNlKTsKKyAgICBk
ZXZpY2UtPnVucmVmKCk7CiAgICAgZGF0YS0+bV9wbGF0Zm9ybUNvbnRleHQuc2V0R3JhcGhpY3ND
b250ZXh0M0QoY29udGV4dDNEKTsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAg
ICAgZGF0YS0+bV9wbGF0Zm9ybUxheWVyID0gQ2FudmFzMkRMYXllckNocm9taXVtOjpjcmVhdGUo
Y29udGV4dDNELCBzaXplKTsKICAgICBkYXRhLT5tX3BsYXRmb3JtTGF5ZXItPnNldFRleHR1cmVJ
ZCh0ZXh0dXJlLmdldCgpLT5nZXRUZXh0dXJlSGFuZGxlKCkpOworICAgIGRhdGEtPm1fcGxhdGZv
cm1MYXllci0+c2V0Q2FudmFzKGNhbnZhcyk7CiAjZW5kaWYKICAgICByZXR1cm4gY2FudmFzOwog
fQpAQCAtMTA2LDggKzEzNyw4IEBAIEltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBJbnRT
aXplJgogewogICAgIE93blB0cjxTa0NhbnZhcz4gY2FudmFzOwogCi0gICAgaWYgKHJlbmRlcmlu
Z01vZGUgPT0gQWNjZWxlcmF0ZWQpCi0gICAgICAgIGNhbnZhcyA9IGFkb3B0UHRyKGNyZWF0ZUFj
Y2VsZXJhdGVkQ2FudmFzKHNpemUsICZtX2RhdGEpKTsKKyAgICBpZiAocmVuZGVyaW5nTW9kZSA9
PSBBY2NlbGVyYXRlZCB8fCByZW5kZXJpbmdNb2RlID09IEFjY2VsZXJhdGVkQW5kRGVmZXJyZWQp
CisgICAgICAgIGNhbnZhcyA9IGFkb3B0UHRyKGNyZWF0ZUFjY2VsZXJhdGVkQ2FudmFzKHNpemUs
ICZtX2RhdGEsIHJlbmRlcmluZ01vZGUpKTsKICAgICBlbHNlIGlmIChyZW5kZXJpbmdNb2RlID09
IFVuYWNjZWxlcmF0ZWROb25QbGF0Zm9ybUJ1ZmZlcikKICAgICAgICAgY2FudmFzID0gYWRvcHRQ
dHIoY3JlYXRlTm9uUGxhdGZvcm1DYW52YXMoc2l6ZSkpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwkocmV2aXNpb24gMTA2MTM5KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAxMi0wMS0yNyAgSnVz
dGluIE5vdm9zYWQgIDxqdW5vdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBF
bmFibGUgZGVmZXJyZWQgY2FudmFzIHJlbmRlcmluZyBpbiB0aGUgc2tpYSBwb3J0CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NjczMgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGluZyBhIG5ldyBzZXR0
aW5nIGZvciBlbmFibGluZyBkZWZlcnJlZCAyZCBjYW52YXMgcmVuZGVyaW5nCisKKyAgICAgICAg
KiBwdWJsaWMvV2ViU2V0dGluZ3MuaDoKKyAgICAgICAgKiBzcmMvV2ViU2V0dGluZ3NJbXBsLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViU2V0dGluZ3NJbXBsOjpzZXREZWZlcnJlZDJkQ2FudmFz
RW5hYmxlZCk6CisgICAgICAgICogc3JjL1dlYlNldHRpbmdzSW1wbC5oOgorCiAyMDEyLTAxLTI0
ICBWaW5jZW50IFNjaGVpYiAgPHNjaGVpYkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUG9pbnRl
ciBMb2NrOiBJbXBsZW1lbnQgcG9pbnRlciBpbnRlcmZhY2UKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYlNldHRpbmdzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViU2V0dGluZ3MuaAkocmV2aXNpb24gMTA1NzI5KQorKysgU291
cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2V0dGluZ3MuaAkod29ya2luZyBjb3B5KQpA
QCAtMTE0LDYgKzExNCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0QWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0ZvclBsdWdpbnNFbmFibGVkKGJvb2wpID0gMDsKICAgICB2aXJ0dWFsIHZv
aWQgc2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckFuaW1hdGlvbkVuYWJsZWQoYm9vbCkgPSAw
OwogICAgIHZpcnR1YWwgdm9pZCBzZXRBY2NlbGVyYXRlZDJkQ2FudmFzRW5hYmxlZChib29sKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIHNldERlZmVycmVkMmRDYW52YXNFbmFibGVkKGJvb2wpID0g
MDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9z
aXRpb25FbmFibGVkKGJvb2wpICA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldE1pbmltdW1BY2Nl
bGVyYXRlZDJkQ2FudmFzU2l6ZShpbnQpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0QWNjZWxl
cmF0ZWRGaWx0ZXJzRW5hYmxlZChib29sKSA9IDA7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5jcHAJKHJldmlzaW9uIDEwNTcyOSkKKysrIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM2OCw2ICszNjgsMTEgQEAgdm9pZCBXZWJTZXR0aW5nc0ltcGw6OnNldEFjY2VsZXJh
dGVkMmRDYQogICAgIG1fc2V0dGluZ3MtPnNldEFjY2VsZXJhdGVkMmRDYW52YXNFbmFibGVkKGVu
YWJsZWQpOwogfQogCit2b2lkIFdlYlNldHRpbmdzSW1wbDo6c2V0RGVmZXJyZWQyZENhbnZhc0Vu
YWJsZWQoYm9vbCBlbmFibGVkKQoreworICAgIG1fc2V0dGluZ3MtPnNldERlZmVycmVkMmRDYW52
YXNFbmFibGVkKGVuYWJsZWQpOworfQorCiB2b2lkIFdlYlNldHRpbmdzSW1wbDo6c2V0QWNjZWxl
cmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsK
ICAgICBtX3NldHRpbmdzLT5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlv
bkVuYWJsZWQoZW5hYmxlZCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJT
ZXR0aW5nc0ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJTZXR0aW5nc0ltcGwuaAkocmV2aXNpb24gMTA1NzI5KQorKysgU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw2ICsxMDYs
NyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdG
b3JDYW52YXNFbmFibGVkKGJvb2wpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRBY2NlbGVyYXRlZENv
bXBvc2l0aW5nRm9yQW5pbWF0aW9uRW5hYmxlZChib29sKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0
QWNjZWxlcmF0ZWQyZENhbnZhc0VuYWJsZWQoYm9vbCk7CisgICAgdmlydHVhbCB2b2lkIHNldERl
ZmVycmVkMmRDYW52YXNFbmFibGVkKGJvb2wpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRBY2NlbGVy
YXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQoYm9vbCk7CiAgICAgdmlydHVh
bCB2b2lkIHNldE1pbmltdW1BY2NlbGVyYXRlZDJkQ2FudmFzU2l6ZShpbnQpOwogICAgIHZpcnR1
YWwgdm9pZCBzZXRBY2NlbGVyYXRlZEZpbHRlcnNFbmFibGVkKGJvb2wpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124831</attachid>
            <date>2012-01-31 15:08:24 -0800</date>
            <delta_ts>2012-02-01 08:09:33 -0800</delta_ts>
            <desc>Response to review comments</desc>
            <filename>bug-76732-20120131180823.patch</filename>
            <type>text/plain</type>
            <size>16760</size>
            <attacher name="Justin Novosad">junov</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNjM5NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUwIEBACisyMDEyLTAxLTMxICBKdXN0aW4g
Tm92b3NhZCAgPGp1bm92QGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1dIEVuYWJs
ZSBkZWZlcnJlZCBjYW52YXMgcmVuZGVyaW5nIGluIHRoZSBza2lhIHBvcnQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2NzMyCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzOiBjb3ZlcmVk
IGJ5IGV4aXN0aW5nIGNhbnZhcyBsYXlvdXQgdGVzdHMKKworICAgICAgICBBZGRpbmcgYSBuZXcg
c2V0dGluZyB0byBlbmFibGUgZGVmZXJyZWQgMmQgY2FudmFzIHJlbmRlcmluZy4KKyAgICAgICAg
QWRkZWQgc3VwcG9ydCBmb3IgZGVmZXJyZWQgMmQgY2FudmFzIHJlbmRlcmluZyBpbiBJbWFnZUJ1
ZmZlclNraWEKKyAgICAgICAgYW5kIENhbnZhczJETGF5ZXJDaHJvbWl1bSwgbW9zdGx5IHBsdW1i
aW5nLiBEZWZmZXJlZCByZW5kZXJpbmcKKyAgICAgICAgaW1wbGVtZW50YXRpb24gaXMgcHJvdmlk
ZWQgYnkgc2tpYSAoY2xhc3MgU2tEZWZlcnJlZENhbnZhcykuCisKKyAgICAgICAgKiBodG1sL0hU
TUxDYW52YXNFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTENhbnZhc0VsZW1lbnQ6OnNob3VsZERlZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxDYW52YXNFbGVtZW50OjpjcmVhdGVJbWFnZUJ1ZmZlcik6CisgICAgICAgICogaHRtbC9IVE1M
Q2FudmFzRWxlbWVudC5oOgorICAgICAgICAoSFRNTENhbnZhc0VsZW1lbnQpOgorICAgICAgICAq
IHBhZ2UvU2V0dGluZ3MuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2V0dGluZ3M6OlNldHRpbmdz
KToKKyAgICAgICAgKFdlYkNvcmU6OlNldHRpbmdzOjpzZXRBY2NlbGVyYXRlZDJkQ2FudmFzRW5h
YmxlZCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlNldHRpbmdzOjpz
ZXREZWZlcnJlZDJkQ2FudmFzRW5hYmxlZCk6CisgICAgICAgICogcGFnZS9TZXR0aW5ncy5oOgor
ICAgICAgICAoU2V0dGluZ3MpOgorICAgICAgICAoV2ViQ29yZTo6U2V0dGluZ3M6OmRlZmVycmVk
MmRDYW52YXNFbmFibGVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ci5oOgorICAgICAgICAoSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXI6OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFz
MkRMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJDaHJv
bWl1bTo6Q2FudmFzMkRMYXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllckNocm9taXVtOjpzZXRDYW52YXMpOgorICAgICAgICAo
V2ViQ29yZTo6Q2FudmFzMkRMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVt
Lmg6CisgICAgICAgIChDYW52YXMyRExheWVyQ2hyb21pdW0pOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcDoKKyAgICAgICAgKEFjY2VsZXJhdGVk
RGV2aWNlQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpBY2NlbGVyYXRlZERldmljZUNvbnRl
eHQ6OkFjY2VsZXJhdGVkRGV2aWNlQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpBY2NlbGVy
YXRlZERldmljZUNvbnRleHQ6OnByZXBhcmVGb3JEcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2VsZXJhdGVkRGV2aWNlQ29udGV4dDo6Zmx1c2gpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpjcmVhdGVBY2NlbGVyYXRlZENhbnZhcyk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIpOgorCiAyMDEyLTAxLTMxICBBbmRlcnMgQ2FybHNz
b24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgUHV0IHRpbGVzIGluIGEgSGFzaE1h
cApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAJKHJldmlz
aW9uIDEwNjM2MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NDMsNiArNDQzLDIwIEBAIGJvb2wgSFRNTENhbnZhc0VsZW1l
bnQ6OnNob3VsZEFjY2VsZXJhdGUKICNlbmRpZgogfQogCisjaWYgVVNFKFNLSUEpCitib29sIEhU
TUxDYW52YXNFbGVtZW50OjpzaG91bGREZWZlcigpIGNvbnN0Cit7CisgICAgaWYgKG1fY29udGV4
dCAmJiAhbV9jb250ZXh0LT5pczJkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFNl
dHRpbmdzKiBzZXR0aW5ncyA9IGRvY3VtZW50KCktPnNldHRpbmdzKCk7CisgICAgaWYgKCFzZXR0
aW5ncyB8fCAhc2V0dGluZ3MtPmRlZmVycmVkMmRDYW52YXNFbmFibGVkKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQorI2VuZGlmCisKIHZvaWQgSFRNTENh
bnZhc0VsZW1lbnQ6OmNyZWF0ZUltYWdlQnVmZmVyKCkgY29uc3QKIHsKICAgICBBU1NFUlQoIW1f
aW1hZ2VCdWZmZXIpOwpAQCAtNDY1LDExICs0NzksMTMgQEAgdm9pZCBIVE1MQ2FudmFzRWxlbWVu
dDo6Y3JlYXRlSW1hZ2VCdWZmZQogICAgIGlmICghYnVmZmVyU2l6ZS53aWR0aCgpIHx8ICFidWZm
ZXJTaXplLmhlaWdodCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZW5kZXJpbmdNb2RlIHJl
bmRlcmluZ01vZGUgPSBzaG91bGRBY2NlbGVyYXRlKGJ1ZmZlclNpemUpID8gQWNjZWxlcmF0ZWQg
OiAKICNpZiBVU0UoU0tJQSkKLSAgICAgICAgVW5hY2NlbGVyYXRlZE5vblBsYXRmb3JtQnVmZmVy
OworICAgIERlZmVycmFsTW9kZSBkZWZlcnJhbE1vZGUgPSBzaG91bGREZWZlcigpID8gRGVmZXJy
ZWQgOiBOb25EZWZlcnJlZDsKKyAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUgPSBzaG91
bGRBY2NlbGVyYXRlKGJ1ZmZlclNpemUpID8gQWNjZWxlcmF0ZWQgOiBVbmFjY2VsZXJhdGVkTm9u
UGxhdGZvcm1CdWZmZXI7CisgICAgbV9pbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUo
YnVmZmVyU2l6ZSwgQ29sb3JTcGFjZURldmljZVJHQiwgcmVuZGVyaW5nTW9kZSwgZGVmZXJyYWxN
b2RlKTsKICNlbHNlCi0gICAgICAgIFVuYWNjZWxlcmF0ZWQ7CisgICAgUmVuZGVyaW5nTW9kZSBy
ZW5kZXJpbmdNb2RlID0gc2hvdWxkQWNjZWxlcmF0ZShidWZmZXJTaXplKSA/IEFjY2VsZXJhdGVk
IDogVW5hY2NlbGVyYXRlZDsKKyAgICBtX2ltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0
ZShidWZmZXJTaXplLCBDb2xvclNwYWNlRGV2aWNlUkdCLCByZW5kZXJpbmdNb2RlKTsKICNlbmRp
ZgogICAgIG1faW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGJ1ZmZlclNpemUsIENv
bG9yU3BhY2VEZXZpY2VSR0IsIHJlbmRlcmluZ01vZGUpOwogICAgIGlmICghbV9pbWFnZUJ1ZmZl
cikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmgJKHJldmlzaW9u
IDEwNjM2MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMTQ2LDYgKzE0NiwxMCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBzZXRT
dXJmYWNlU2l6ZShjb25zdCBJbnRTaXplJik7CiAKKyNpZiBVU0UoU0tJQSkKKyAgICBib29sIHNo
b3VsZERlZmVyKCkgY29uc3Q7CisjZW5kaWYKKwogICAgIEhhc2hTZXQ8Q2FudmFzT2JzZXJ2ZXIq
PiBtX29ic2VydmVyczsKIAogICAgIEludFNpemUgbV9zaXplOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGFnZS9TZXR0aW5ncy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9T
ZXR0aW5ncy5jcHAJKHJldmlzaW9uIDEwNjM2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0
dGluZ3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTMsNiArMTkzLDcgQEAgU2V0dGluZ3M6OlNl
dHRpbmdzKFBhZ2UqIHBhZ2UpCiAgICAgLCBtX3ByaXZpbGVnZWRXZWJHTEV4dGVuc2lvbnNFbmFi
bGVkKGZhbHNlKQogICAgICwgbV93ZWJBdWRpb0VuYWJsZWQoZmFsc2UpCiAgICAgLCBtX2FjY2Vs
ZXJhdGVkQ2FudmFzMmRFbmFibGVkKGZhbHNlKQorICAgICwgbV9kZWZlcnJlZENhbnZhczJkRW5h
YmxlZChmYWxzZSkKICAgICAsIG1fbG9hZERlZmVycmluZ0VuYWJsZWQodHJ1ZSkKICAgICAsIG1f
dGlsZWRCYWNraW5nU3RvcmVFbmFibGVkKGZhbHNlKQogICAgICwgbV9wYWdpbmF0ZUR1cmluZ0xh
eW91dEVuYWJsZWQoZmFsc2UpCkBAIC04MTcsNiArODE4LDExIEBAIHZvaWQgU2V0dGluZ3M6OnNl
dEFjY2VsZXJhdGVkMmRDYW52YXNFbmEKICAgICBtX2FjY2VsZXJhdGVkQ2FudmFzMmRFbmFibGVk
ID0gZW5hYmxlZDsKIH0KIAordm9pZCBTZXR0aW5nczo6c2V0RGVmZXJyZWQyZENhbnZhc0VuYWJs
ZWQoYm9vbCBlbmFibGVkKQoreworICAgIG1fZGVmZXJyZWRDYW52YXMyZEVuYWJsZWQgPSBlbmFi
bGVkOworfQorCiB2b2lkIFNldHRpbmdzOjpzZXRNaW5pbXVtQWNjZWxlcmF0ZWQyZENhbnZhc1Np
emUoaW50IG51bVBpeGVscykKIHsKICAgICBtX21pbmltdW1BY2NlbGVyYXRlZDJkQ2FudmFzU2l6
ZSA9IG51bVBpeGVsczsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmgJKHJldmlzaW9uIDEwNjM2
MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaAkod29ya2luZyBjb3B5KQpAQCAt
MzY2LDYgKzM2Niw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBzZXRBY2Nl
bGVyYXRlZDJkQ2FudmFzRW5hYmxlZChib29sKTsKICAgICAgICAgYm9vbCBhY2NlbGVyYXRlZDJk
Q2FudmFzRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fYWNjZWxlcmF0ZWRDYW52YXMyZEVuYWJs
ZWQ7IH0KIAorICAgICAgICB2b2lkIHNldERlZmVycmVkMmRDYW52YXNFbmFibGVkKGJvb2wpOwor
ICAgICAgICBib29sIGRlZmVycmVkMmRDYW52YXNFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9k
ZWZlcnJlZENhbnZhczJkRW5hYmxlZDsgfQorCiAgICAgICAgIC8vIE51bWJlciBvZiBwaXhlbHMg
YmVsb3cgd2hpY2ggMkQgY2FudmFzIGlzIHJlbmRlcmVkIGluIHNvZnR3YXJlCiAgICAgICAgIC8v
IGV2ZW4gaWYgaGFyZHdhcmUgYWNjZWxlcmF0aW9uIGlzIGVuYWJsZWQuCiAgICAgICAgIC8vIEhh
cmR3YXJlIGFjY2VsZXJhdGlvbiBpcyB1c2VmdWwgZm9yIGxhcmdlIGNhbnZhc2VzIHdoZXJlIGl0
IGNhbiBhdm9pZCB0aGUKQEAgLTYxOSw2ICs2MjIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIGJvb2wgbV9wcml2aWxlZ2VkV2ViR0xFeHRlbnNpb25zRW5hYmxlZCA6IDE7CiAgICAg
ICAgIGJvb2wgbV93ZWJBdWRpb0VuYWJsZWQgOiAxOwogICAgICAgICBib29sIG1fYWNjZWxlcmF0
ZWRDYW52YXMyZEVuYWJsZWQgOiAxOworICAgICAgICBib29sIG1fZGVmZXJyZWRDYW52YXMyZEVu
YWJsZWQgOiAxOwogICAgICAgICBib29sIG1fbG9hZERlZmVycmluZ0VuYWJsZWQgOiAxOwogICAg
ICAgICBib29sIG1fdGlsZWRCYWNraW5nU3RvcmVFbmFibGVkIDogMTsKICAgICAgICAgYm9vbCBt
X3BhZ2luYXRlRHVyaW5nTGF5b3V0RW5hYmxlZCA6IDE7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgJKHJldmlzaW9uIDEwNjM2MSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTY4LDE0ICs2OCwyOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIERv
bnRDb3B5QmFja2luZ1N0b3JlIC8vIFN1YnNlcXVlbnQgZHJhd3MgbWF5IGFmZmVjdCB0aGUgY29w
eS4KICAgICB9OwogCisjaWYgVVNFKFNLSUEpCisgICAgZW51bSBEZWZlcnJhbE1vZGUgeworICAg
ICAgICBOb25EZWZlcnJlZCwKKyAgICAgICAgRGVmZXJyZWQKKyAgICB9OworI2VuZGlmCisKICAg
ICBjbGFzcyBJbWFnZUJ1ZmZlciB7CiAgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdl
QnVmZmVyKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgcHVibGljOgogICAgICAgICAv
LyBXaWxsIHJldHVybiBhIG51bGwgcG9pbnRlciBvbiBhbGxvY2F0aW9uIGZhaWx1cmUuCisjaWYg
VVNFKFNLSUEpCisgICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPEltYWdlQnVmZmVyPiBjcmVhdGUo
Y29uc3QgSW50U2l6ZSYgc2l6ZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlID0gQ29sb3JTcGFjZURl
dmljZVJHQiwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlID0gVW5hY2NlbGVyYXRlZCwgRGVm
ZXJyYWxNb2RlIGRlZmVycmFsTW9kZSA9IE5vbkRlZmVycmVkKQorI2Vsc2UKICAgICAgICAgc3Rh
dGljIFBhc3NPd25QdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25zdCBJbnRTaXplJiBzaXplLCBD
b2xvclNwYWNlIGNvbG9yU3BhY2UgPSBDb2xvclNwYWNlRGV2aWNlUkdCLCBSZW5kZXJpbmdNb2Rl
IHJlbmRlcmluZ01vZGUgPSBVbmFjY2VsZXJhdGVkKQorI2VuZGlmCiAgICAgICAgIHsKICAgICAg
ICAgICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOworI2lmIFVTRShTS0lBKQorICAgICAgICAgICAg
T3duUHRyPEltYWdlQnVmZmVyPiBidWYgPSBhZG9wdFB0cihuZXcgSW1hZ2VCdWZmZXIoc2l6ZSwg
Y29sb3JTcGFjZSwgcmVuZGVyaW5nTW9kZSwgZGVmZXJyYWxNb2RlLCBzdWNjZXNzKSk7CisjZWxz
ZQogICAgICAgICAgICAgT3duUHRyPEltYWdlQnVmZmVyPiBidWYgPSBhZG9wdFB0cihuZXcgSW1h
Z2VCdWZmZXIoc2l6ZSwgY29sb3JTcGFjZSwgcmVuZGVyaW5nTW9kZSwgc3VjY2VzcykpOworI2Vu
ZGlmCiAgICAgICAgICAgICBpZiAoc3VjY2VzcykKICAgICAgICAgICAgICAgICByZXR1cm4gYnVm
LnJlbGVhc2UoKTsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMTQzLDcgKzE1OCwx
MSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgLy8gVGhpcyBjb25zdHJ1Y3RvciB3
aWxsIHBsYWNlIGl0cyBzdWNjZXNzIGludG8gdGhlIGdpdmVuIG91dC12YXJpYWJsZQogICAgICAg
ICAvLyBzbyB0aGF0IGNyZWF0ZSgpIGtub3dzIHdoZW4gaXQgc2hvdWxkIHJldHVybiBmYWlsdXJl
LgorI2lmIFVTRShTS0lBKQorICAgICAgICBJbWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJiwgQ29s
b3JTcGFjZSwgUmVuZGVyaW5nTW9kZSwgRGVmZXJyYWxNb2RlLCBib29sJiBzdWNjZXNzKTsKKyNl
bHNlCiAgICAgICAgIEltYWdlQnVmZmVyKGNvbnN0IEludFNpemUmLCBDb2xvclNwYWNlLCBSZW5k
ZXJpbmdNb2RlLCBib29sJiBzdWNjZXNzKTsKKyNlbmRpZgogICAgIH07CiAKICNpZiBVU0UoQ0cp
IHx8IFVTRShTS0lBKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uY3Bw
CShyZXZpc2lvbiAxMDYzNjEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2
ICs0Myw4IEBACiAKICNpZiBVU0UoU0tJQSkKICNpbmNsdWRlICJHckNvbnRleHQuaCIKKyNpbmNs
dWRlICJTa0NhbnZhcy5oIgorI2luY2x1ZGUgIlNrRGV2aWNlLmgiCiAjZW5kaWYKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpAQCAtNTksNiArNjEsNyBAQCBDYW52YXMyRExheWVyQ2hyb21pdW06OkNh
bnZhczJETGF5ZXJDaHJvCiAgICAgLCBtX2JhY2tUZXh0dXJlSWQoMCkKICAgICAsIG1fZmJvKDAp
CiAgICAgLCBtX3VzZURvdWJsZUJ1ZmZlcmluZyhDQ1Byb3h5OjpoYXNJbXBsVGhyZWFkKCkpCisg
ICAgLCBtX2NhbnZhcygwKQogewogICAgIGlmIChtX3VzZURvdWJsZUJ1ZmZlcmluZykKICAgICAg
ICAgR0xDKG1fY29udGV4dCwgbV9mYm8gPSBtX2NvbnRleHQtPmNyZWF0ZUZyYW1lYnVmZmVyKCkp
OwpAQCAtOTEsNiArOTQsMTMgQEAgYm9vbCBDYW52YXMyRExheWVyQ2hyb21pdW06OmRyYXdzQ29u
dGVudAogICAgICAgICAmJiBtX2NvbnRleHQgJiYgKG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygp
LT5nZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VS
Uk9SKTsKIH0KIAorI2lmIFVTRShTS0lBKQordm9pZCBDYW52YXMyRExheWVyQ2hyb21pdW06OnNl
dENhbnZhcyhTa0NhbnZhcyogY2FudmFzKQoreworICAgIG1fY2FudmFzID0gY2FudmFzOworfQor
I2VuZGlmCisKIHZvaWQgQ2FudmFzMkRMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0
eSgpCiB7CiAgICAgaWYgKCFkcmF3c0NvbnRlbnQoKSkKQEAgLTEwOCw2ICsxMTgsMTIgQEAgdm9p
ZCBDYW52YXMyRExheWVyQ2hyb21pdW06OnBhaW50Q29udGVudAogICAgIEFTU0VSVF9VTlVTRUQo
c3VjY2Vzcywgc3VjY2Vzcyk7CiAKICNpZiBVU0UoU0tJQSkKKyAgICAvLyBGSVhNRTogUmVwbGFj
ZSB0aGlzIGJsb2NrIG9mIHNraWEgY29kZSB3aXRoIG1fY2FudmFzLT5mbHVzaCwgd2hlbiB0aGF0
CisgICAgLy8gQVBJIGJlY29tZXMgYXZhaWxhYmxlLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NzQ2MworICAgIGlmIChtX2NhbnZhcykKKyAgICAgICAg
bV9jYW52YXMtPmdldERldmljZSgpLT5hY2Nlc3NSZW5kZXJUYXJnZXQoKTsgLy8gVHJpZ2dlcnMg
ZXhlY3V0aW9uIG9mIHBlbmRpbmcgZHJhdyBvcGVyYXRpb25zLgorCiAgICAgR3JDb250ZXh0KiBn
ckNvbnRleHQgPSBtX2NvbnRleHQtPmdyQ29udGV4dCgpOwogICAgIGlmIChnckNvbnRleHQpCiAg
ICAgICAgIGdyQ29udGV4dC0+Zmx1c2goKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJD
aHJvbWl1bS5oCShyZXZpc2lvbiAxMDYzNjEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uaAkod29ya2luZyBjb3B5KQpA
QCAtMzcsNiArMzcsMTAgQEAKICNpbmNsdWRlICJDYW52YXNMYXllckNocm9taXVtLmgiCiAjaW5j
bHVkZSAiTWFuYWdlZFRleHR1cmUuaCIKIAorI2lmIFVTRShTS0lBKQorY2xhc3MgU2tDYW52YXM7
CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBHcmFwaGljc0NvbnRleHQz
RDsKQEAgLTYwLDYgKzY0LDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgdW5yZXNlcnZl
Q29udGVudHNUZXh0dXJlKCk7CiAgICAgdmlydHVhbCB2b2lkIGNsZWFudXBSZXNvdXJjZXMoKTsK
IAorI2lmIFVTRShTS0lBKQorICAgIHZvaWQgc2V0Q2FudmFzKFNrQ2FudmFzKik7CisjZW5kaWYK
KwogcHJpdmF0ZToKICAgICBDYW52YXMyRExheWVyQ2hyb21pdW0oR3JhcGhpY3NDb250ZXh0M0Qq
LCBjb25zdCBJbnRTaXplJik7CiAKQEAgLTc2LDYgKzg0LDkgQEAgcHJpdmF0ZToKICAgICAvLyBz
eW5jaHJvbml6ZSBpdHMgZHJhd3Mgd2l0aCB0aGUgY2FudmFzIHVwZGF0ZXMuCiAgICAgYm9vbCBt
X3VzZURvdWJsZUJ1ZmZlcmluZzsKICAgICBPd25QdHI8TWFuYWdlZFRleHR1cmU+IG1fZnJvbnRU
ZXh0dXJlOworI2lmIFVTRShTS0lBKQorICAgIFNrQ2FudmFzKiBtX2NhbnZhczsKKyNlbmRpZgog
fTsKIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFn
ZUJ1ZmZlclNraWEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAkocmV2aXNpb24gMTA2MzYxKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0Niw3IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0
U2tpYS5oIgogI2luY2x1ZGUgIlNoYXJlZEdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAi
U2tDb2xvclByaXYuaCIKKyNpbmNsdWRlICJTa0RlZmVycmVkQ2FudmFzLmgiCiAjaW5jbHVkZSAi
U2tHcHVEZXZpY2UuaCIKICNpbmNsdWRlICJTa2lhVXRpbHMuaCIKICNpbmNsdWRlICJXRUJQSW1h
Z2VFbmNvZGVyLmgiCkBAIC02NSw3ICs2NiwyOSBAQCBJbWFnZUJ1ZmZlckRhdGE6OkltYWdlQnVm
ZmVyRGF0YShjb25zdCBJCiB7CiB9CiAKLXN0YXRpYyBTa0NhbnZhcyogY3JlYXRlQWNjZWxlcmF0
ZWRDYW52YXMoY29uc3QgSW50U2l6ZSYgc2l6ZSwgSW1hZ2VCdWZmZXJEYXRhKiBkYXRhKQorY2xh
c3MgQWNjZWxlcmF0ZWREZXZpY2VDb250ZXh0IDogcHVibGljIFNrRGVmZXJyZWRDYW52YXM6OkRl
dmljZUNvbnRleHQgeworcHVibGljOgorICAgIEFjY2VsZXJhdGVkRGV2aWNlQ29udGV4dChHcmFw
aGljc0NvbnRleHQzRCogY29udGV4dDNEKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGNvbnRleHQz
RCk7CisgICAgICAgIG1fY29udGV4dDNEID0gY29udGV4dDNEOworICAgIH0KKworICAgIHZpcnR1
YWwgdm9pZCBwcmVwYXJlRm9yRHJhdygpCisgICAgeworICAgICAgICBtX2NvbnRleHQzRC0+bWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGZsdXNoKCkKKyAg
ICB7CisgICAgICAgIG1fY29udGV4dDNELT5mbHVzaCgpOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBHcmFwaGljc0NvbnRleHQzRCogbV9jb250ZXh0M0Q7Cit9OworCitzdGF0aWMgU2tDYW52YXMq
IGNyZWF0ZUFjY2VsZXJhdGVkQ2FudmFzKGNvbnN0IEludFNpemUmIHNpemUsIEltYWdlQnVmZmVy
RGF0YSogZGF0YSwgRGVmZXJyYWxNb2RlIGRlZmVycmFsTW9kZSkKIHsKICAgICBHcmFwaGljc0Nv
bnRleHQzRCogY29udGV4dDNEID0gU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmdldCgpOwogICAg
IGlmICghY29udGV4dDNEKQpAQCAtODMsMTIgKzEwNiwxOCBAQCBzdGF0aWMgU2tDYW52YXMqIGNy
ZWF0ZUFjY2VsZXJhdGVkQ2FudmFzCiAgICAgU2tBdXRvVFVucmVmPEdyVGV4dHVyZT4gdGV4dHVy
ZShnci0+Y3JlYXRlVW5jYWNoZWRUZXh0dXJlKGRlc2MsIDAsIDApKTsKICAgICBpZiAoIXRleHR1
cmUuZ2V0KCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIFNrQ2FudmFzKiBjYW52YXMgPSBuZXcg
U2tDYW52YXMoKTsKLSAgICBjYW52YXMtPnNldERldmljZShuZXcgU2tHcHVEZXZpY2UoZ3IsIHRl
eHR1cmUuZ2V0KCkpKS0+dW5yZWYoKTsKKyAgICBTa0NhbnZhcyogY2FudmFzOworICAgIFNrQXV0
b1RVbnJlZjxTa0RldmljZT4gZGV2aWNlKG5ldyBTa0dwdURldmljZShnciwgdGV4dHVyZS5nZXQo
KSkpOworICAgIGlmIChkZWZlcnJhbE1vZGUgPT0gRGVmZXJyZWQpIHsKKyAgICAgICAgU2tBdXRv
VFVucmVmPEFjY2VsZXJhdGVkRGV2aWNlQ29udGV4dD4gZGV2aWNlQ29udGV4dChuZXcgQWNjZWxl
cmF0ZWREZXZpY2VDb250ZXh0KGNvbnRleHQzRCkpOworICAgICAgICBjYW52YXMgPSBuZXcgU2tE
ZWZlcnJlZENhbnZhcyhkZXZpY2UuZ2V0KCksIGRldmljZUNvbnRleHQuZ2V0KCkpOworICAgIH0g
ZWxzZQorICAgICAgICBjYW52YXMgPSBuZXcgU2tDYW52YXMoZGV2aWNlLmdldCgpKTsKICAgICBk
YXRhLT5tX3BsYXRmb3JtQ29udGV4dC5zZXRHcmFwaGljc0NvbnRleHQzRChjb250ZXh0M0QpOwog
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICBkYXRhLT5tX3BsYXRmb3JtTGF5
ZXIgPSBDYW52YXMyRExheWVyQ2hyb21pdW06OmNyZWF0ZShjb250ZXh0M0QsIHNpemUpOwogICAg
IGRhdGEtPm1fcGxhdGZvcm1MYXllci0+c2V0VGV4dHVyZUlkKHRleHR1cmUuZ2V0KCktPmdldFRl
eHR1cmVIYW5kbGUoKSk7CisgICAgZGF0YS0+bV9wbGF0Zm9ybUxheWVyLT5zZXRDYW52YXMoY2Fu
dmFzKTsKICNlbmRpZgogICAgIHJldHVybiBjYW52YXM7CiB9CkBAIC0xMDAsMTQgKzEyOSwxNCBA
QCBzdGF0aWMgU2tDYW52YXMqIGNyZWF0ZU5vblBsYXRmb3JtQ2FudmFzCiAgICAgcmV0dXJuIGNh
bnZhczsKIH0KIAotSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEludFNpemUmIHNpemUs
IENvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgYm9vbCYgc3VjY2VzcykK
K0ltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJiBzaXplLCBDb2xvclNwYWNl
LCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIERlZmVycmFsTW9kZSBkZWZlcnJhbE1vZGUs
IGJvb2wmIHN1Y2Nlc3MpCiAgICAgOiBtX2RhdGEoc2l6ZSkKICAgICAsIG1fc2l6ZShzaXplKQog
ewogICAgIE93blB0cjxTa0NhbnZhcz4gY2FudmFzOwogCiAgICAgaWYgKHJlbmRlcmluZ01vZGUg
PT0gQWNjZWxlcmF0ZWQpCi0gICAgICAgIGNhbnZhcyA9IGFkb3B0UHRyKGNyZWF0ZUFjY2VsZXJh
dGVkQ2FudmFzKHNpemUsICZtX2RhdGEpKTsKKyAgICAgICAgY2FudmFzID0gYWRvcHRQdHIoY3Jl
YXRlQWNjZWxlcmF0ZWRDYW52YXMoc2l6ZSwgJm1fZGF0YSwgZGVmZXJyYWxNb2RlKSk7CiAgICAg
ZWxzZSBpZiAocmVuZGVyaW5nTW9kZSA9PSBVbmFjY2VsZXJhdGVkTm9uUGxhdGZvcm1CdWZmZXIp
CiAgICAgICAgIGNhbnZhcyA9IGFkb3B0UHRyKGNyZWF0ZU5vblBsYXRmb3JtQ2FudmFzKHNpemUp
KTsKIApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNjM5NykKKysr
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTkgQEAKKzIwMTItMDEtMzEgIEp1c3RpbiBOb3Zvc2FkICA8anVub3ZAY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIFtDaHJvbWl1bV0gRW5hYmxlIGRlZmVycmVkIGNhbnZhcyByZW5kZXJpbmcg
aW4gdGhlIHNraWEgcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NzY3MzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBBZGRpbmcgYSBuZXcgc2V0dGluZyBmb3IgZW5hYmxpbmcgZGVmZXJyZWQgMmQgY2Fu
dmFzIHJlbmRlcmluZworCisgICAgICAgICogcHVibGljL1dlYlNldHRpbmdzLmg6CisgICAgICAg
ICogc3JjL1dlYlNldHRpbmdzSW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlNldHRpbmdz
SW1wbDo6c2V0RGVmZXJyZWQyZENhbnZhc0VuYWJsZWQpOgorICAgICAgICAoV2ViS2l0KToKKyAg
ICAgICAgKiBzcmMvV2ViU2V0dGluZ3NJbXBsLmg6CisgICAgICAgIChXZWJTZXR0aW5nc0ltcGwp
OgorCiAyMDEyLTAxLTMxICBGYWR5IFNhbXVlbCAgPGZzYW11ZWxAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFtDaHJvbWl1bV0gQ2hyb21lQ2xpZW50SW1wbDo6ZGlzcGF0Y2hWaWV3cG9ydFByb3Bl
cnRpZXNEaWRDaGFuZ2UgaXMgcmVwZWF0ZWRseSBjYWxsZWQgaW4gR29vZ2xlIE5ld3MKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNldHRpbmdzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2V0dGluZ3MuaAkocmV2aXNpb24g
MTA2MzYxKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2V0dGluZ3MuaAko
d29ya2luZyBjb3B5KQpAQCAtMTE1LDYgKzExNSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZv
aWQgc2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvclBsdWdpbnNFbmFibGVkKGJvb2wpID0gMDsK
ICAgICB2aXJ0dWFsIHZvaWQgc2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckFuaW1hdGlvbkVu
YWJsZWQoYm9vbCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRBY2NlbGVyYXRlZDJkQ2FudmFz
RW5hYmxlZChib29sKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldERlZmVycmVkMmRDYW52YXNF
bmFibGVkKGJvb2wpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0QWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkKGJvb2wpICA9IDA7CiAgICAgdmlydHVhbCB2b2lk
IHNldE1pbmltdW1BY2NlbGVyYXRlZDJkQ2FudmFzU2l6ZShpbnQpID0gMDsKICAgICB2aXJ0dWFs
IHZvaWQgc2V0QWNjZWxlcmF0ZWRGaWx0ZXJzRW5hYmxlZChib29sKSA9IDA7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5jcHAJKHJldmlzaW9u
IDEwNjM2MSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM3Myw2ICszNzMsMTEgQEAgdm9pZCBXZWJTZXR0aW5nc0lt
cGw6OnNldEFjY2VsZXJhdGVkMmRDYQogICAgIG1fc2V0dGluZ3MtPnNldEFjY2VsZXJhdGVkMmRD
YW52YXNFbmFibGVkKGVuYWJsZWQpOwogfQogCit2b2lkIFdlYlNldHRpbmdzSW1wbDo6c2V0RGVm
ZXJyZWQyZENhbnZhc0VuYWJsZWQoYm9vbCBlbmFibGVkKQoreworICAgIG1fc2V0dGluZ3MtPnNl
dERlZmVycmVkMmRDYW52YXNFbmFibGVkKGVuYWJsZWQpOworfQorCiB2b2lkIFdlYlNldHRpbmdz
SW1wbDo6c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkKGJv
b2wgZW5hYmxlZCkKIHsKICAgICBtX3NldHRpbmdzLT5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5n
Rm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQoZW5hYmxlZCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuaAkocmV2aXNpb24gMTA2MzYxKQorKysgU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEwNyw2ICsxMDcsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldEFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdGb3JDYW52YXNFbmFibGVkKGJvb2wpOwogICAgIHZpcnR1YWwgdm9pZCBz
ZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yQW5pbWF0aW9uRW5hYmxlZChib29sKTsKICAgICB2
aXJ0dWFsIHZvaWQgc2V0QWNjZWxlcmF0ZWQyZENhbnZhc0VuYWJsZWQoYm9vbCk7CisgICAgdmly
dHVhbCB2b2lkIHNldERlZmVycmVkMmRDYW52YXNFbmFibGVkKGJvb2wpOwogICAgIHZpcnR1YWwg
dm9pZCBzZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQoYm9v
bCk7CiAgICAgdmlydHVhbCB2b2lkIHNldE1pbmltdW1BY2NlbGVyYXRlZDJkQ2FudmFzU2l6ZShp
bnQpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRBY2NlbGVyYXRlZEZpbHRlcnNFbmFibGVkKGJvb2wp
Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124951</attachid>
            <date>2012-02-01 08:09:02 -0800</date>
            <delta_ts>2012-02-01 12:51:46 -0800</delta_ts>
            <desc>Same as previous patch, resolved merge conflicts</desc>
            <filename>bug-76732-20120201110902.patch</filename>
            <type>text/plain</type>
            <size>16806</size>
            <attacher name="Justin Novosad">junov</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNjQ2NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUwIEBACisyMDEyLTAyLTAxICBKdXN0aW4g
Tm92b3NhZCAgPGp1bm92QGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1dIEVuYWJs
ZSBkZWZlcnJlZCBjYW52YXMgcmVuZGVyaW5nIGluIHRoZSBza2lhIHBvcnQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2NzMyCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzOiBjb3ZlcmVk
IGJ5IGV4aXN0aW5nIGNhbnZhcyBsYXlvdXQgdGVzdHMKKworICAgICAgICBBZGRpbmcgYSBuZXcg
c2V0dGluZyB0byBlbmFibGUgZGVmZXJyZWQgMmQgY2FudmFzIHJlbmRlcmluZy4KKyAgICAgICAg
QWRkZWQgc3VwcG9ydCBmb3IgZGVmZXJyZWQgMmQgY2FudmFzIHJlbmRlcmluZyBpbiBJbWFnZUJ1
ZmZlclNraWEKKyAgICAgICAgYW5kIENhbnZhczJETGF5ZXJDaHJvbWl1bSwgbW9zdGx5IHBsdW1i
aW5nLiBEZWZmZXJlZCByZW5kZXJpbmcKKyAgICAgICAgaW1wbGVtZW50YXRpb24gaXMgcHJvdmlk
ZWQgYnkgc2tpYSAoY2xhc3MgU2tEZWZlcnJlZENhbnZhcykuCisKKyAgICAgICAgKiBodG1sL0hU
TUxDYW52YXNFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTENhbnZhc0VsZW1lbnQ6OnNob3VsZERlZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxDYW52YXNFbGVtZW50OjpjcmVhdGVJbWFnZUJ1ZmZlcik6CisgICAgICAgICogaHRtbC9IVE1M
Q2FudmFzRWxlbWVudC5oOgorICAgICAgICAoSFRNTENhbnZhc0VsZW1lbnQpOgorICAgICAgICAq
IHBhZ2UvU2V0dGluZ3MuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2V0dGluZ3M6OlNldHRpbmdz
KToKKyAgICAgICAgKFdlYkNvcmU6OlNldHRpbmdzOjpzZXRBY2NlbGVyYXRlZDJkQ2FudmFzRW5h
YmxlZCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlNldHRpbmdzOjpz
ZXREZWZlcnJlZDJkQ2FudmFzRW5hYmxlZCk6CisgICAgICAgICogcGFnZS9TZXR0aW5ncy5oOgor
ICAgICAgICAoU2V0dGluZ3MpOgorICAgICAgICAoV2ViQ29yZTo6U2V0dGluZ3M6OmRlZmVycmVk
MmRDYW52YXNFbmFibGVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ci5oOgorICAgICAgICAoSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXI6OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFz
MkRMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJDaHJv
bWl1bTo6Q2FudmFzMkRMYXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllckNocm9taXVtOjpzZXRDYW52YXMpOgorICAgICAgICAo
V2ViQ29yZTo6Q2FudmFzMkRMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVt
Lmg6CisgICAgICAgIChDYW52YXMyRExheWVyQ2hyb21pdW0pOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcDoKKyAgICAgICAgKEFjY2VsZXJhdGVk
RGV2aWNlQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpBY2NlbGVyYXRlZERldmljZUNvbnRl
eHQ6OkFjY2VsZXJhdGVkRGV2aWNlQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpBY2NlbGVy
YXRlZERldmljZUNvbnRleHQ6OnByZXBhcmVGb3JEcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2VsZXJhdGVkRGV2aWNlQ29udGV4dDo6Zmx1c2gpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpjcmVhdGVBY2NlbGVyYXRlZENhbnZhcyk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIpOgorCiAyMDEyLTAyLTAxICBTaGlueWEgS2F3YW5h
a2EgIDxzaGlueWFrQGdvb2dsZS5jb20+CiAKICAgICAgICAgQ29udGVudCBlbGVtZW50IHNob3Vs
ZCBiZSBhYmxlIHRvIGJlIGR5bmFtaWNhbGx5IGFkZGVkL3JlbW92ZWQvcmVwbGFjZWQgaW4gYSBz
aGFkb3cgdHJlZS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQu
Y3BwCShyZXZpc2lvbiAxMDY0NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQzLDYgKzQ0MywyMCBAQCBib29sIEhUTUxD
YW52YXNFbGVtZW50OjpzaG91bGRBY2NlbGVyYXRlCiAjZW5kaWYKIH0KIAorI2lmIFVTRShTS0lB
KQorYm9vbCBIVE1MQ2FudmFzRWxlbWVudDo6c2hvdWxkRGVmZXIoKSBjb25zdAoreworICAgIGlm
IChtX2NvbnRleHQgJiYgIW1fY29udGV4dC0+aXMyZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1bWVudCgpLT5zZXR0aW5ncygpOworICAg
IGlmICghc2V0dGluZ3MgfHwgIXNldHRpbmdzLT5kZWZlcnJlZDJkQ2FudmFzRW5hYmxlZCgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgorCiB2
b2lkIEhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVJbWFnZUJ1ZmZlcigpIGNvbnN0CiB7CiAgICAg
QVNTRVJUKCFtX2ltYWdlQnVmZmVyKTsKQEAgLTQ2NSwxMSArNDc5LDEzIEBAIHZvaWQgSFRNTENh
bnZhc0VsZW1lbnQ6OmNyZWF0ZUltYWdlQnVmZmUKICAgICBpZiAoIWJ1ZmZlclNpemUud2lkdGgo
KSB8fCAhYnVmZmVyU2l6ZS5oZWlnaHQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVy
aW5nTW9kZSByZW5kZXJpbmdNb2RlID0gc2hvdWxkQWNjZWxlcmF0ZShidWZmZXJTaXplKSA/IEFj
Y2VsZXJhdGVkIDogCiAjaWYgVVNFKFNLSUEpCi0gICAgICAgIFVuYWNjZWxlcmF0ZWROb25QbGF0
Zm9ybUJ1ZmZlcjsKKyAgICBEZWZlcnJhbE1vZGUgZGVmZXJyYWxNb2RlID0gc2hvdWxkRGVmZXIo
KSA/IERlZmVycmVkIDogTm9uRGVmZXJyZWQ7CisgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdN
b2RlID0gc2hvdWxkQWNjZWxlcmF0ZShidWZmZXJTaXplKSA/IEFjY2VsZXJhdGVkIDogVW5hY2Nl
bGVyYXRlZE5vblBsYXRmb3JtQnVmZmVyOworICAgIG1faW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZl
cjo6Y3JlYXRlKGJ1ZmZlclNpemUsIENvbG9yU3BhY2VEZXZpY2VSR0IsIHJlbmRlcmluZ01vZGUs
IGRlZmVycmFsTW9kZSk7CiAjZWxzZQotICAgICAgICBVbmFjY2VsZXJhdGVkOworICAgIFJlbmRl
cmluZ01vZGUgcmVuZGVyaW5nTW9kZSA9IHNob3VsZEFjY2VsZXJhdGUoYnVmZmVyU2l6ZSkgPyBB
Y2NlbGVyYXRlZCA6IFVuYWNjZWxlcmF0ZWQ7CisgICAgbV9pbWFnZUJ1ZmZlciA9IEltYWdlQnVm
ZmVyOjpjcmVhdGUoYnVmZmVyU2l6ZSwgQ29sb3JTcGFjZURldmljZVJHQiwgcmVuZGVyaW5nTW9k
ZSk7CiAjZW5kaWYKICAgICBtX2ltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShidWZm
ZXJTaXplLCBDb2xvclNwYWNlRGV2aWNlUkdCLCByZW5kZXJpbmdNb2RlKTsKICAgICBpZiAoIW1f
aW1hZ2VCdWZmZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5o
CShyZXZpc2lvbiAxMDY0NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVt
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTE0Niw2ICsxNDYsMTAgQEAgcHJpdmF0ZToKIAogICAg
IHZvaWQgc2V0U3VyZmFjZVNpemUoY29uc3QgSW50U2l6ZSYpOwogCisjaWYgVVNFKFNLSUEpCisg
ICAgYm9vbCBzaG91bGREZWZlcigpIGNvbnN0OworI2VuZGlmCisKICAgICBIYXNoU2V0PENhbnZh
c09ic2VydmVyKj4gbV9vYnNlcnZlcnM7CiAKICAgICBJbnRTaXplIG1fc2l6ZTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvU2V0dGluZ3MuY3BwCShyZXZpc2lvbiAxMDY0NjYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wYWdlL1NldHRpbmdzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkzLDYgKzE5Myw3IEBAIFNl
dHRpbmdzOjpTZXR0aW5ncyhQYWdlKiBwYWdlKQogICAgICwgbV9wcml2aWxlZ2VkV2ViR0xFeHRl
bnNpb25zRW5hYmxlZChmYWxzZSkKICAgICAsIG1fd2ViQXVkaW9FbmFibGVkKGZhbHNlKQogICAg
ICwgbV9hY2NlbGVyYXRlZENhbnZhczJkRW5hYmxlZChmYWxzZSkKKyAgICAsIG1fZGVmZXJyZWRD
YW52YXMyZEVuYWJsZWQoZmFsc2UpCiAgICAgLCBtX2xvYWREZWZlcnJpbmdFbmFibGVkKHRydWUp
CiAgICAgLCBtX3RpbGVkQmFja2luZ1N0b3JlRW5hYmxlZChmYWxzZSkKICAgICAsIG1fcGFnaW5h
dGVEdXJpbmdMYXlvdXRFbmFibGVkKGZhbHNlKQpAQCAtODE3LDYgKzgxOCwxMSBAQCB2b2lkIFNl
dHRpbmdzOjpzZXRBY2NlbGVyYXRlZDJkQ2FudmFzRW5hCiAgICAgbV9hY2NlbGVyYXRlZENhbnZh
czJkRW5hYmxlZCA9IGVuYWJsZWQ7CiB9CiAKK3ZvaWQgU2V0dGluZ3M6OnNldERlZmVycmVkMmRD
YW52YXNFbmFibGVkKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBtX2RlZmVycmVkQ2FudmFzMmRFbmFi
bGVkID0gZW5hYmxlZDsKK30KKwogdm9pZCBTZXR0aW5nczo6c2V0TWluaW11bUFjY2VsZXJhdGVk
MmRDYW52YXNTaXplKGludCBudW1QaXhlbHMpCiB7CiAgICAgbV9taW5pbXVtQWNjZWxlcmF0ZWQy
ZENhbnZhc1NpemUgPSBudW1QaXhlbHM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRp
bmdzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5oCShyZXZp
c2lvbiAxMDY0NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM2Niw2ICszNjYsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZv
aWQgc2V0QWNjZWxlcmF0ZWQyZENhbnZhc0VuYWJsZWQoYm9vbCk7CiAgICAgICAgIGJvb2wgYWNj
ZWxlcmF0ZWQyZENhbnZhc0VuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2FjY2VsZXJhdGVkQ2Fu
dmFzMmRFbmFibGVkOyB9CiAKKyAgICAgICAgdm9pZCBzZXREZWZlcnJlZDJkQ2FudmFzRW5hYmxl
ZChib29sKTsKKyAgICAgICAgYm9vbCBkZWZlcnJlZDJkQ2FudmFzRW5hYmxlZCgpIGNvbnN0IHsg
cmV0dXJuIG1fZGVmZXJyZWRDYW52YXMyZEVuYWJsZWQ7IH0KKwogICAgICAgICAvLyBOdW1iZXIg
b2YgcGl4ZWxzIGJlbG93IHdoaWNoIDJEIGNhbnZhcyBpcyByZW5kZXJlZCBpbiBzb2Z0d2FyZQog
ICAgICAgICAvLyBldmVuIGlmIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBpcyBlbmFibGVkLgogICAg
ICAgICAvLyBIYXJkd2FyZSBhY2NlbGVyYXRpb24gaXMgdXNlZnVsIGZvciBsYXJnZSBjYW52YXNl
cyB3aGVyZSBpdCBjYW4gYXZvaWQgdGhlCkBAIC02MTksNiArNjIyLDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICBib29sIG1fcHJpdmlsZWdlZFdlYkdMRXh0ZW5zaW9uc0VuYWJsZWQg
OiAxOwogICAgICAgICBib29sIG1fd2ViQXVkaW9FbmFibGVkIDogMTsKICAgICAgICAgYm9vbCBt
X2FjY2VsZXJhdGVkQ2FudmFzMmRFbmFibGVkIDogMTsKKyAgICAgICAgYm9vbCBtX2RlZmVycmVk
Q2FudmFzMmRFbmFibGVkIDogMTsKICAgICAgICAgYm9vbCBtX2xvYWREZWZlcnJpbmdFbmFibGVk
IDogMTsKICAgICAgICAgYm9vbCBtX3RpbGVkQmFja2luZ1N0b3JlRW5hYmxlZCA6IDE7CiAgICAg
ICAgIGJvb2wgbV9wYWdpbmF0ZUR1cmluZ0xheW91dEVuYWJsZWQgOiAxOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCShyZXZpc2lvbiAx
MDY0NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC02OCwxNCArNjgsMjkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICBEb250Q29weUJhY2tpbmdTdG9yZSAvLyBTdWJzZXF1ZW50IGRyYXdzIG1heSBhZmZl
Y3QgdGhlIGNvcHkuCiAgICAgfTsKIAorI2lmIFVTRShTS0lBKQorICAgIGVudW0gRGVmZXJyYWxN
b2RlIHsKKyAgICAgICAgTm9uRGVmZXJyZWQsCisgICAgICAgIERlZmVycmVkCisgICAgfTsKKyNl
bmRpZgorCiAgICAgY2xhc3MgSW1hZ2VCdWZmZXIgewogICAgICAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShJbWFnZUJ1ZmZlcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIHB1YmxpYzoK
ICAgICAgICAgLy8gV2lsbCByZXR1cm4gYSBudWxsIHBvaW50ZXIgb24gYWxsb2NhdGlvbiBmYWls
dXJlLgorI2lmIFVTRShTS0lBKQorICAgICAgICBzdGF0aWMgUGFzc093blB0cjxJbWFnZUJ1ZmZl
cj4gY3JlYXRlKGNvbnN0IEludFNpemUmIHNpemUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSA9IENv
bG9yU3BhY2VEZXZpY2VSR0IsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSA9IFVuYWNjZWxl
cmF0ZWQsIERlZmVycmFsTW9kZSBkZWZlcnJhbE1vZGUgPSBOb25EZWZlcnJlZCkKKyNlbHNlCiAg
ICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgSW50U2l6
ZSYgc2l6ZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlID0gQ29sb3JTcGFjZURldmljZVJHQiwgUmVu
ZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlID0gVW5hY2NlbGVyYXRlZCkKKyNlbmRpZgogICAgICAg
ICB7CiAgICAgICAgICAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKKyNpZiBVU0UoU0tJQSkKKyAg
ICAgICAgICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gYnVmID0gYWRvcHRQdHIobmV3IEltYWdlQnVm
ZmVyKHNpemUsIGNvbG9yU3BhY2UsIHJlbmRlcmluZ01vZGUsIGRlZmVycmFsTW9kZSwgc3VjY2Vz
cykpOworI2Vsc2UKICAgICAgICAgICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gYnVmID0gYWRvcHRQ
dHIobmV3IEltYWdlQnVmZmVyKHNpemUsIGNvbG9yU3BhY2UsIHJlbmRlcmluZ01vZGUsIHN1Y2Nl
c3MpKTsKKyNlbmRpZgogICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGJ1Zi5yZWxlYXNlKCk7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTE0
Myw3ICsxNTgsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIC8vIFRoaXMgY29u
c3RydWN0b3Igd2lsbCBwbGFjZSBpdHMgc3VjY2VzcyBpbnRvIHRoZSBnaXZlbiBvdXQtdmFyaWFi
bGUKICAgICAgICAgLy8gc28gdGhhdCBjcmVhdGUoKSBrbm93cyB3aGVuIGl0IHNob3VsZCByZXR1
cm4gZmFpbHVyZS4KKyNpZiBVU0UoU0tJQSkKKyAgICAgICAgSW1hZ2VCdWZmZXIoY29uc3QgSW50
U2l6ZSYsIENvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUsIERlZmVycmFsTW9kZSwgYm9vbCYgc3Vj
Y2Vzcyk7CisjZWxzZQogICAgICAgICBJbWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJiwgQ29sb3JT
cGFjZSwgUmVuZGVyaW5nTW9kZSwgYm9vbCYgc3VjY2Vzcyk7CisjZW5kaWYKICAgICB9OwogCiAj
aWYgVVNFKENHKSB8fCBVU0UoU0tJQSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNo
cm9taXVtLmNwcAkocmV2aXNpb24gMTA2NDY2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDMsNiArNDMsOCBAQAogCiAjaWYgVVNFKFNLSUEpCiAjaW5jbHVkZSAiR3JDb250ZXh0
LmgiCisjaW5jbHVkZSAiU2tDYW52YXMuaCIKKyNpbmNsdWRlICJTa0RldmljZS5oIgogI2VuZGlm
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTU5LDYgKzYxLDcgQEAgQ2FudmFzMkRMYXllckNo
cm9taXVtOjpDYW52YXMyRExheWVyQ2hybwogICAgICwgbV9iYWNrVGV4dHVyZUlkKDApCiAgICAg
LCBtX2ZibygwKQogICAgICwgbV91c2VEb3VibGVCdWZmZXJpbmcoQ0NQcm94eTo6aGFzSW1wbFRo
cmVhZCgpKQorICAgICwgbV9jYW52YXMoMCkKIHsKICAgICBpZiAobV91c2VEb3VibGVCdWZmZXJp
bmcpCiAgICAgICAgIEdMQyhtX2NvbnRleHQsIG1fZmJvID0gbV9jb250ZXh0LT5jcmVhdGVGcmFt
ZWJ1ZmZlcigpKTsKQEAgLTkxLDYgKzk0LDEzIEBAIGJvb2wgQ2FudmFzMkRMYXllckNocm9taXVt
OjpkcmF3c0NvbnRlbnQKICAgICAgICAgJiYgbV9jb250ZXh0ICYmIChtX2NvbnRleHQtPmdldEV4
dGVuc2lvbnMoKS0+Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpID09IEdyYXBoaWNzQ29udGV4
dDNEOjpOT19FUlJPUik7CiB9CiAKKyNpZiBVU0UoU0tJQSkKK3ZvaWQgQ2FudmFzMkRMYXllckNo
cm9taXVtOjpzZXRDYW52YXMoU2tDYW52YXMqIGNhbnZhcykKK3sKKyAgICBtX2NhbnZhcyA9IGNh
bnZhczsKK30KKyNlbmRpZgorCiB2b2lkIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250
ZW50c0lmRGlydHkoY29uc3QgUmVnaW9uJiAvKiBvY2NsdWRlZFNjcmVlblNwYWNlICovKQogewog
ICAgIGlmICghZHJhd3NDb250ZW50KCkpCkBAIC0xMDgsNiArMTE4LDEyIEBAIHZvaWQgQ2FudmFz
MkRMYXllckNocm9taXVtOjpwYWludENvbnRlbnQKICAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3Ms
IHN1Y2Nlc3MpOwogCiAjaWYgVVNFKFNLSUEpCisgICAgLy8gRklYTUU6IFJlcGxhY2UgdGhpcyBi
bG9jayBvZiBza2lhIGNvZGUgd2l0aCBtX2NhbnZhcy0+Zmx1c2gsIHdoZW4gdGhhdAorICAgIC8v
IEFQSSBiZWNvbWVzIGF2YWlsYWJsZS4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9Nzc0NjMKKyAgICBpZiAobV9jYW52YXMpCisgICAgICAgIG1fY2FudmFz
LT5nZXREZXZpY2UoKS0+YWNjZXNzUmVuZGVyVGFyZ2V0KCk7IC8vIFRyaWdnZXJzIGV4ZWN1dGlv
biBvZiBwZW5kaW5nIGRyYXcgb3BlcmF0aW9ucy4KKwogICAgIEdyQ29udGV4dCogZ3JDb250ZXh0
ID0gbV9jb250ZXh0LT5nckNvbnRleHQoKTsKICAgICBpZiAoZ3JDb250ZXh0KQogICAgICAgICBn
ckNvbnRleHQtPmZsdXNoKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0u
aAkocmV2aXNpb24gMTA2NDY2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYg
KzM3LDEwIEBACiAjaW5jbHVkZSAiQ2FudmFzTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIk1h
bmFnZWRUZXh0dXJlLmgiCiAKKyNpZiBVU0UoU0tJQSkKK2NsYXNzIFNrQ2FudmFzOworI2VuZGlm
CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CkBAIC02
MSw2ICs2NSwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHVucmVzZXJ2ZUNvbnRlbnRz
VGV4dHVyZSgpOwogICAgIHZpcnR1YWwgdm9pZCBjbGVhbnVwUmVzb3VyY2VzKCk7CiAKKyNpZiBV
U0UoU0tJQSkKKyAgICB2b2lkIHNldENhbnZhcyhTa0NhbnZhcyopOworI2VuZGlmCisKIHByaXZh
dGU6CiAgICAgQ2FudmFzMkRMYXllckNocm9taXVtKEdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3Qg
SW50U2l6ZSYpOwogCkBAIC03Nyw2ICs4NSw5IEBAIHByaXZhdGU6CiAgICAgLy8gc3luY2hyb25p
emUgaXRzIGRyYXdzIHdpdGggdGhlIGNhbnZhcyB1cGRhdGVzLgogICAgIGJvb2wgbV91c2VEb3Vi
bGVCdWZmZXJpbmc7CiAgICAgT3duUHRyPE1hbmFnZWRUZXh0dXJlPiBtX2Zyb250VGV4dHVyZTsK
KyNpZiBVU0UoU0tJQSkKKyAgICBTa0NhbnZhcyogbV9jYW52YXM7CisjZW5kaWYKIH07CiAKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJT
a2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAJKHJldmlzaW9uIDEwNjQ2NikKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDYsNiArNDYsNyBAQAogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIK
ICNpbmNsdWRlICJTaGFyZWRHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIlNrQ29sb3JQ
cml2LmgiCisjaW5jbHVkZSAiU2tEZWZlcnJlZENhbnZhcy5oIgogI2luY2x1ZGUgIlNrR3B1RGV2
aWNlLmgiCiAjaW5jbHVkZSAiU2tpYVV0aWxzLmgiCiAjaW5jbHVkZSAiV0VCUEltYWdlRW5jb2Rl
ci5oIgpAQCAtNjUsNyArNjYsMjkgQEAgSW1hZ2VCdWZmZXJEYXRhOjpJbWFnZUJ1ZmZlckRhdGEo
Y29uc3QgSQogewogfQogCi1zdGF0aWMgU2tDYW52YXMqIGNyZWF0ZUFjY2VsZXJhdGVkQ2FudmFz
KGNvbnN0IEludFNpemUmIHNpemUsIEltYWdlQnVmZmVyRGF0YSogZGF0YSkKK2NsYXNzIEFjY2Vs
ZXJhdGVkRGV2aWNlQ29udGV4dCA6IHB1YmxpYyBTa0RlZmVycmVkQ2FudmFzOjpEZXZpY2VDb250
ZXh0IHsKK3B1YmxpYzoKKyAgICBBY2NlbGVyYXRlZERldmljZUNvbnRleHQoR3JhcGhpY3NDb250
ZXh0M0QqIGNvbnRleHQzRCkKKyAgICB7CisgICAgICAgIEFTU0VSVChjb250ZXh0M0QpOworICAg
ICAgICBtX2NvbnRleHQzRCA9IGNvbnRleHQzRDsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQg
cHJlcGFyZUZvckRyYXcoKQorICAgIHsKKyAgICAgICAgbV9jb250ZXh0M0QtPm1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBmbHVzaCgpCisgICAgeworICAg
ICAgICBtX2NvbnRleHQzRC0+Zmx1c2goKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgR3JhcGhp
Y3NDb250ZXh0M0QqIG1fY29udGV4dDNEOworfTsKKworc3RhdGljIFNrQ2FudmFzKiBjcmVhdGVB
Y2NlbGVyYXRlZENhbnZhcyhjb25zdCBJbnRTaXplJiBzaXplLCBJbWFnZUJ1ZmZlckRhdGEqIGRh
dGEsIERlZmVycmFsTW9kZSBkZWZlcnJhbE1vZGUpCiB7CiAgICAgR3JhcGhpY3NDb250ZXh0M0Qq
IGNvbnRleHQzRCA9IFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpnZXQoKTsKICAgICBpZiAoIWNv
bnRleHQzRCkKQEAgLTgzLDEyICsxMDYsMTggQEAgc3RhdGljIFNrQ2FudmFzKiBjcmVhdGVBY2Nl
bGVyYXRlZENhbnZhcwogICAgIFNrQXV0b1RVbnJlZjxHclRleHR1cmU+IHRleHR1cmUoZ3ItPmNy
ZWF0ZVVuY2FjaGVkVGV4dHVyZShkZXNjLCAwLCAwKSk7CiAgICAgaWYgKCF0ZXh0dXJlLmdldCgp
KQogICAgICAgICByZXR1cm4gMDsKLSAgICBTa0NhbnZhcyogY2FudmFzID0gbmV3IFNrQ2FudmFz
KCk7Ci0gICAgY2FudmFzLT5zZXREZXZpY2UobmV3IFNrR3B1RGV2aWNlKGdyLCB0ZXh0dXJlLmdl
dCgpKSktPnVucmVmKCk7CisgICAgU2tDYW52YXMqIGNhbnZhczsKKyAgICBTa0F1dG9UVW5yZWY8
U2tEZXZpY2U+IGRldmljZShuZXcgU2tHcHVEZXZpY2UoZ3IsIHRleHR1cmUuZ2V0KCkpKTsKKyAg
ICBpZiAoZGVmZXJyYWxNb2RlID09IERlZmVycmVkKSB7CisgICAgICAgIFNrQXV0b1RVbnJlZjxB
Y2NlbGVyYXRlZERldmljZUNvbnRleHQ+IGRldmljZUNvbnRleHQobmV3IEFjY2VsZXJhdGVkRGV2
aWNlQ29udGV4dChjb250ZXh0M0QpKTsKKyAgICAgICAgY2FudmFzID0gbmV3IFNrRGVmZXJyZWRD
YW52YXMoZGV2aWNlLmdldCgpLCBkZXZpY2VDb250ZXh0LmdldCgpKTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgY2FudmFzID0gbmV3IFNrQ2FudmFzKGRldmljZS5nZXQoKSk7CiAgICAgZGF0YS0+bV9w
bGF0Zm9ybUNvbnRleHQuc2V0R3JhcGhpY3NDb250ZXh0M0QoY29udGV4dDNEKTsKICNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgZGF0YS0+bV9wbGF0Zm9ybUxheWVyID0gQ2Fu
dmFzMkRMYXllckNocm9taXVtOjpjcmVhdGUoY29udGV4dDNELCBzaXplKTsKICAgICBkYXRhLT5t
X3BsYXRmb3JtTGF5ZXItPnNldFRleHR1cmVJZCh0ZXh0dXJlLmdldCgpLT5nZXRUZXh0dXJlSGFu
ZGxlKCkpOworICAgIGRhdGEtPm1fcGxhdGZvcm1MYXllci0+c2V0Q2FudmFzKGNhbnZhcyk7CiAj
ZW5kaWYKICAgICByZXR1cm4gY2FudmFzOwogfQpAQCAtMTAwLDE0ICsxMjksMTQgQEAgc3RhdGlj
IFNrQ2FudmFzKiBjcmVhdGVOb25QbGF0Zm9ybUNhbnZhcwogICAgIHJldHVybiBjYW52YXM7CiB9
CiAKLUltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJiBzaXplLCBDb2xvclNw
YWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGJvb2wmIHN1Y2Nlc3MpCitJbWFnZUJ1
ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSwgQ29sb3JTcGFjZSwgUmVuZGVy
aW5nTW9kZSByZW5kZXJpbmdNb2RlLCBEZWZlcnJhbE1vZGUgZGVmZXJyYWxNb2RlLCBib29sJiBz
dWNjZXNzKQogICAgIDogbV9kYXRhKHNpemUpCiAgICAgLCBtX3NpemUoc2l6ZSkKIHsKICAgICBP
d25QdHI8U2tDYW52YXM+IGNhbnZhczsKIAogICAgIGlmIChyZW5kZXJpbmdNb2RlID09IEFjY2Vs
ZXJhdGVkKQotICAgICAgICBjYW52YXMgPSBhZG9wdFB0cihjcmVhdGVBY2NlbGVyYXRlZENhbnZh
cyhzaXplLCAmbV9kYXRhKSk7CisgICAgICAgIGNhbnZhcyA9IGFkb3B0UHRyKGNyZWF0ZUFjY2Vs
ZXJhdGVkQ2FudmFzKHNpemUsICZtX2RhdGEsIGRlZmVycmFsTW9kZSkpOwogICAgIGVsc2UgaWYg
KHJlbmRlcmluZ01vZGUgPT0gVW5hY2NlbGVyYXRlZE5vblBsYXRmb3JtQnVmZmVyKQogICAgICAg
ICBjYW52YXMgPSBhZG9wdFB0cihjcmVhdGVOb25QbGF0Zm9ybUNhbnZhcyhzaXplKSk7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiAxMDY0NjYpCisrKyBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBA
CisyMDEyLTAyLTAxICBKdXN0aW4gTm92b3NhZCAgPGp1bm92QGNocm9taXVtLm9yZz4KKworICAg
ICAgICBbQ2hyb21pdW1dIEVuYWJsZSBkZWZlcnJlZCBjYW52YXMgcmVuZGVyaW5nIGluIHRoZSBz
a2lhIHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTc2NzMyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QWRkaW5nIGEgbmV3IHNldHRpbmcgZm9yIGVuYWJsaW5nIGRlZmVycmVkIDJkIGNhbnZhcyByZW5k
ZXJpbmcKKworICAgICAgICAqIHB1YmxpYy9XZWJTZXR0aW5ncy5oOgorICAgICAgICAqIHNyYy9X
ZWJTZXR0aW5nc0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJTZXR0aW5nc0ltcGw6OnNl
dERlZmVycmVkMmRDYW52YXNFbmFibGVkKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgICog
c3JjL1dlYlNldHRpbmdzSW1wbC5oOgorICAgICAgICAoV2ViU2V0dGluZ3NJbXBsKToKKwogMjAx
Mi0wMi0wMSAgS2VudCBUYW11cmEgIDx0a2VudEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW0No
cm9taXVtXSBEaXNhYmxlIFdlYkZyYW1lVGVzdC5GaW5kSW5QYWdlCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTZXR0aW5ncy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNldHRpbmdzLmgJKHJldmlzaW9uIDEwNjQ2NikKKysr
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNldHRpbmdzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTExNSw2ICsxMTUsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldEFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdGb3JQbHVnaW5zRW5hYmxlZChib29sKSA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIHNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JBbmltYXRpb25FbmFibGVkKGJvb2wp
ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0QWNjZWxlcmF0ZWQyZENhbnZhc0VuYWJsZWQoYm9v
bCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXREZWZlcnJlZDJkQ2FudmFzRW5hYmxlZChib29s
KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGaXhl
ZFBvc2l0aW9uRW5hYmxlZChib29sKSAgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRNaW5pbXVt
QWNjZWxlcmF0ZWQyZENhbnZhc1NpemUoaW50KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldEFj
Y2VsZXJhdGVkRmlsdGVyc0VuYWJsZWQoYm9vbCkgPSAwOwpJbmRleDogU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuY3BwCShyZXZpc2lvbiAxMDY0NjYpCisr
KyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNzMsNiArMzczLDExIEBAIHZvaWQgV2ViU2V0dGluZ3NJbXBsOjpzZXRBY2Nl
bGVyYXRlZDJkQ2EKICAgICBtX3NldHRpbmdzLT5zZXRBY2NlbGVyYXRlZDJkQ2FudmFzRW5hYmxl
ZChlbmFibGVkKTsKIH0KIAordm9pZCBXZWJTZXR0aW5nc0ltcGw6OnNldERlZmVycmVkMmRDYW52
YXNFbmFibGVkKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBtX3NldHRpbmdzLT5zZXREZWZlcnJlZDJk
Q2FudmFzRW5hYmxlZChlbmFibGVkKTsKK30KKwogdm9pZCBXZWJTZXR0aW5nc0ltcGw6OnNldEFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9uRW5hYmxlZChib29sIGVuYWJsZWQp
CiB7CiAgICAgbV9zZXR0aW5ncy0+c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9z
aXRpb25FbmFibGVkKGVuYWJsZWQpOwpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViU2V0dGluZ3NJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViU2V0dGluZ3NJbXBsLmgJKHJldmlzaW9uIDEwNjQ2NikKKysrIFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsNiAr
MTA3LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRBY2NlbGVyYXRlZENvbXBvc2l0
aW5nRm9yQ2FudmFzRW5hYmxlZChib29sKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0QWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0ZvckFuaW1hdGlvbkVuYWJsZWQoYm9vbCk7CiAgICAgdmlydHVhbCB2b2lk
IHNldEFjY2VsZXJhdGVkMmRDYW52YXNFbmFibGVkKGJvb2wpOworICAgIHZpcnR1YWwgdm9pZCBz
ZXREZWZlcnJlZDJkQ2FudmFzRW5hYmxlZChib29sKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0QWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkKGJvb2wpOwogICAgIHZp
cnR1YWwgdm9pZCBzZXRNaW5pbXVtQWNjZWxlcmF0ZWQyZENhbnZhc1NpemUoaW50KTsKICAgICB2
aXJ0dWFsIHZvaWQgc2V0QWNjZWxlcmF0ZWRGaWx0ZXJzRW5hYmxlZChib29sKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124995</attachid>
            <date>2012-02-01 12:51:51 -0800</date>
            <delta_ts>2012-02-01 13:08:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76732-20120201155151.patch</filename>
            <type>text/plain</type>
            <size>20245</size>
            <attacher name="Justin Novosad">junov</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNjQ4NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYwIEBACisyMDEyLTAyLTAxICBKdXN0aW4g
Tm92b3NhZCAgPGp1bm92QGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1dIEVuYWJs
ZSBkZWZlcnJlZCBjYW52YXMgcmVuZGVyaW5nIGluIHRoZSBza2lhIHBvcnQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2NzMyCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzOiBjb3ZlcmVk
IGJ5IGV4aXN0aW5nIGNhbnZhcyBsYXlvdXQgdGVzdHMKKworICAgICAgICBBZGRpbmcgYSBuZXcg
c2V0dGluZyB0byBlbmFibGUgZGVmZXJyZWQgMmQgY2FudmFzIHJlbmRlcmluZy4KKyAgICAgICAg
QWRkZWQgc3VwcG9ydCBmb3IgZGVmZXJyZWQgMmQgY2FudmFzIHJlbmRlcmluZyBpbiBJbWFnZUJ1
ZmZlclNraWEKKyAgICAgICAgYW5kIENhbnZhczJETGF5ZXJDaHJvbWl1bSwgbW9zdGx5IHBsdW1i
aW5nLiBEZWZmZXJlZCByZW5kZXJpbmcKKyAgICAgICAgaW1wbGVtZW50YXRpb24gaXMgcHJvdmlk
ZWQgYnkgc2tpYSAoY2xhc3MgU2tEZWZlcnJlZENhbnZhcykuCisKKyAgICAgICAgKiBodG1sL0hU
TUxDYW52YXNFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50
OjpzaG91bGREZWZlcik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxDYW52YXNFbGVtZW50OjpjcmVhdGVJbWFnZUJ1ZmZlcik6CisgICAgICAgICogaHRtbC9IVE1M
Q2FudmFzRWxlbWVudC5oOgorICAgICAgICAoSFRNTENhbnZhc0VsZW1lbnQpOgorICAgICAgICAq
IHBhZ2UvU2V0dGluZ3MuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2V0dGluZ3M6OlNldHRpbmdz
KToKKyAgICAgICAgKFdlYkNvcmU6OlNldHRpbmdzOjpzZXRBY2NlbGVyYXRlZDJkQ2FudmFzRW5h
YmxlZCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlNldHRpbmdzOjpz
ZXREZWZlcnJlZDJkQ2FudmFzRW5hYmxlZCk6CisgICAgICAgICogcGFnZS9TZXR0aW5ncy5oOgor
ICAgICAgICAoU2V0dGluZ3MpOgorICAgICAgICAoV2ViQ29yZTo6U2V0dGluZ3M6OmRlZmVycmVk
MmRDYW52YXNFbmFibGVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ci5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAgIChJ
bWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZm
ZXJDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllckNocm9taXVtOjpDYW52YXMyRExheWVyQ2hyb21pdW0p
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyQ2hy
b21pdW06OnNldENhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyQ2hyb21p
dW06OnBhaW50Q29udGVudHNJZkRpcnR5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKENhbnZhczJETGF5ZXJD
aHJvbWl1bSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJRdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcDoKKyAgICAgICAg
KEFjY2VsZXJhdGVkRGV2aWNlQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpBY2NlbGVyYXRl
ZERldmljZUNvbnRleHQ6OkFjY2VsZXJhdGVkRGV2aWNlQ29udGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpBY2NlbGVyYXRlZERldmljZUNvbnRleHQ6OnByZXBhcmVGb3JEcmF3KToKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2VsZXJhdGVkRGV2aWNlQ29udGV4dDo6Zmx1c2gpOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVBY2NlbGVyYXRlZENhbnZhcyk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbmNlL0ltYWdlQnVmZmVyV2luQ0UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy93eC9JbWFnZUJ1ZmZlcld4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpJ
bWFnZUJ1ZmZlcik6CisKIDIwMTItMDItMDEgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFw
cGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCShyZXZpc2lvbiAxMDY0ODQpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDQzLDYgKzQ0MywyMiBAQCBib29sIEhUTUxDYW52YXNFbGVtZW50OjpzaG91bGRBY2Nl
bGVyYXRlCiAjZW5kaWYKIH0KIAorYm9vbCBIVE1MQ2FudmFzRWxlbWVudDo6c2hvdWxkRGVmZXIo
KSBjb25zdAoreworI2lmIFVTRShTS0lBKQorICAgIGlmIChtX2NvbnRleHQgJiYgIW1fY29udGV4
dC0+aXMyZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBTZXR0aW5ncyogc2V0dGlu
Z3MgPSBkb2N1bWVudCgpLT5zZXR0aW5ncygpOworICAgIGlmICghc2V0dGluZ3MgfHwgIXNldHRp
bmdzLT5kZWZlcnJlZDJkQ2FudmFzRW5hYmxlZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICByZXR1cm4gdHJ1ZTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisK
IHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUltYWdlQnVmZmVyKCkgY29uc3QKIHsKICAg
ICBBU1NFUlQoIW1faW1hZ2VCdWZmZXIpOwpAQCAtNDY1LDEzICs0ODEsOSBAQCB2b2lkIEhUTUxD
YW52YXNFbGVtZW50OjpjcmVhdGVJbWFnZUJ1ZmZlCiAgICAgaWYgKCFidWZmZXJTaXplLndpZHRo
KCkgfHwgIWJ1ZmZlclNpemUuaGVpZ2h0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlbmRl
cmluZ01vZGUgcmVuZGVyaW5nTW9kZSA9IHNob3VsZEFjY2VsZXJhdGUoYnVmZmVyU2l6ZSkgPyBB
Y2NlbGVyYXRlZCA6IAotI2lmIFVTRShTS0lBKQotICAgICAgICBVbmFjY2VsZXJhdGVkTm9uUGxh
dGZvcm1CdWZmZXI7Ci0jZWxzZQotICAgICAgICBVbmFjY2VsZXJhdGVkOwotI2VuZGlmCi0gICAg
bV9pbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoYnVmZmVyU2l6ZSwgQ29sb3JTcGFj
ZURldmljZVJHQiwgcmVuZGVyaW5nTW9kZSk7CisgICAgRGVmZXJyYWxNb2RlIGRlZmVycmFsTW9k
ZSA9IHNob3VsZERlZmVyKCkgPyBEZWZlcnJlZCA6IE5vbkRlZmVycmVkOworICAgIFJlbmRlcmlu
Z01vZGUgcmVuZGVyaW5nTW9kZSA9IHNob3VsZEFjY2VsZXJhdGUoYnVmZmVyU2l6ZSkgPyBBY2Nl
bGVyYXRlZCA6IFVuYWNjZWxlcmF0ZWROb25QbGF0Zm9ybUJ1ZmZlcjsKKyAgICBtX2ltYWdlQnVm
ZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShidWZmZXJTaXplLCBDb2xvclNwYWNlRGV2aWNlUkdC
LCByZW5kZXJpbmdNb2RlLCBkZWZlcnJhbE1vZGUpOwogICAgIGlmICghbV9pbWFnZUJ1ZmZlcikK
ICAgICAgICAgcmV0dXJuOwogICAgIG1faW1hZ2VCdWZmZXItPmNvbnRleHQoKS0+c2NhbGUoRmxv
YXRTaXplKGJ1ZmZlclNpemUud2lkdGgoKSAvIGxvZ2ljYWxTaXplLndpZHRoKCksIGJ1ZmZlclNp
emUuaGVpZ2h0KCkgLyBsb2dpY2FsU2l6ZS5oZWlnaHQoKSkpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaAkocmV2aXNpb24gMTA2NDg0KQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDYsNiAr
MTQ2LDggQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgc2V0U3VyZmFjZVNpemUoY29uc3QgSW50U2l6
ZSYpOwogCisgICAgYm9vbCBzaG91bGREZWZlcigpIGNvbnN0OworCiAgICAgSGFzaFNldDxDYW52
YXNPYnNlcnZlcio+IG1fb2JzZXJ2ZXJzOwogCiAgICAgSW50U2l6ZSBtX3NpemU7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wYWdlL1NldHRpbmdzLmNwcAkocmV2aXNpb24gMTA2NDg0KQorKysgU291cmNlL1dlYkNv
cmUvcGFnZS9TZXR0aW5ncy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Myw2ICsxOTMsNyBAQCBT
ZXR0aW5nczo6U2V0dGluZ3MoUGFnZSogcGFnZSkKICAgICAsIG1fcHJpdmlsZWdlZFdlYkdMRXh0
ZW5zaW9uc0VuYWJsZWQoZmFsc2UpCiAgICAgLCBtX3dlYkF1ZGlvRW5hYmxlZChmYWxzZSkKICAg
ICAsIG1fYWNjZWxlcmF0ZWRDYW52YXMyZEVuYWJsZWQoZmFsc2UpCisgICAgLCBtX2RlZmVycmVk
Q2FudmFzMmRFbmFibGVkKGZhbHNlKQogICAgICwgbV9sb2FkRGVmZXJyaW5nRW5hYmxlZCh0cnVl
KQogICAgICwgbV90aWxlZEJhY2tpbmdTdG9yZUVuYWJsZWQoZmFsc2UpCiAgICAgLCBtX3BhZ2lu
YXRlRHVyaW5nTGF5b3V0RW5hYmxlZChmYWxzZSkKQEAgLTgxNyw2ICs4MTgsMTEgQEAgdm9pZCBT
ZXR0aW5nczo6c2V0QWNjZWxlcmF0ZWQyZENhbnZhc0VuYQogICAgIG1fYWNjZWxlcmF0ZWRDYW52
YXMyZEVuYWJsZWQgPSBlbmFibGVkOwogfQogCit2b2lkIFNldHRpbmdzOjpzZXREZWZlcnJlZDJk
Q2FudmFzRW5hYmxlZChib29sIGVuYWJsZWQpCit7CisgICAgbV9kZWZlcnJlZENhbnZhczJkRW5h
YmxlZCA9IGVuYWJsZWQ7Cit9CisKIHZvaWQgU2V0dGluZ3M6OnNldE1pbmltdW1BY2NlbGVyYXRl
ZDJkQ2FudmFzU2l6ZShpbnQgbnVtUGl4ZWxzKQogewogICAgIG1fbWluaW11bUFjY2VsZXJhdGVk
MmRDYW52YXNTaXplID0gbnVtUGl4ZWxzOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0
aW5ncy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaAkocmV2
aXNpb24gMTA2NDg0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNjYsNiArMzY2LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2
b2lkIHNldEFjY2VsZXJhdGVkMmRDYW52YXNFbmFibGVkKGJvb2wpOwogICAgICAgICBib29sIGFj
Y2VsZXJhdGVkMmRDYW52YXNFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9hY2NlbGVyYXRlZENh
bnZhczJkRW5hYmxlZDsgfQogCisgICAgICAgIHZvaWQgc2V0RGVmZXJyZWQyZENhbnZhc0VuYWJs
ZWQoYm9vbCk7CisgICAgICAgIGJvb2wgZGVmZXJyZWQyZENhbnZhc0VuYWJsZWQoKSBjb25zdCB7
IHJldHVybiBtX2RlZmVycmVkQ2FudmFzMmRFbmFibGVkOyB9CisKICAgICAgICAgLy8gTnVtYmVy
IG9mIHBpeGVscyBiZWxvdyB3aGljaCAyRCBjYW52YXMgaXMgcmVuZGVyZWQgaW4gc29mdHdhcmUK
ICAgICAgICAgLy8gZXZlbiBpZiBoYXJkd2FyZSBhY2NlbGVyYXRpb24gaXMgZW5hYmxlZC4KICAg
ICAgICAgLy8gSGFyZHdhcmUgYWNjZWxlcmF0aW9uIGlzIHVzZWZ1bCBmb3IgbGFyZ2UgY2FudmFz
ZXMgd2hlcmUgaXQgY2FuIGF2b2lkIHRoZQpAQCAtNjE5LDYgKzYyMiw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgYm9vbCBtX3ByaXZpbGVnZWRXZWJHTEV4dGVuc2lvbnNFbmFibGVk
IDogMTsKICAgICAgICAgYm9vbCBtX3dlYkF1ZGlvRW5hYmxlZCA6IDE7CiAgICAgICAgIGJvb2wg
bV9hY2NlbGVyYXRlZENhbnZhczJkRW5hYmxlZCA6IDE7CisgICAgICAgIGJvb2wgbV9kZWZlcnJl
ZENhbnZhczJkRW5hYmxlZCA6IDE7CiAgICAgICAgIGJvb2wgbV9sb2FkRGVmZXJyaW5nRW5hYmxl
ZCA6IDE7CiAgICAgICAgIGJvb2wgbV90aWxlZEJhY2tpbmdTdG9yZUVuYWJsZWQgOiAxOwogICAg
ICAgICBib29sIG1fcGFnaW5hdGVEdXJpbmdMYXlvdXRFbmFibGVkIDogMTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAkocmV2aXNpb24g
MTA2NDg0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtNjgsMTQgKzY4LDE5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgRG9udENvcHlCYWNraW5nU3RvcmUgLy8gU3Vic2VxdWVudCBkcmF3cyBtYXkgYWZm
ZWN0IHRoZSBjb3B5LgogICAgIH07CiAKKyAgICBlbnVtIERlZmVycmFsTW9kZSB7CisgICAgICAg
IE5vbkRlZmVycmVkLAorICAgICAgICBEZWZlcnJlZAorICAgIH07CisKICAgICBjbGFzcyBJbWFn
ZUJ1ZmZlciB7CiAgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdlQnVmZmVyKTsgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgcHVibGljOgogICAgICAgICAvLyBXaWxsIHJldHVy
biBhIG51bGwgcG9pbnRlciBvbiBhbGxvY2F0aW9uIGZhaWx1cmUuCi0gICAgICAgIHN0YXRpYyBQ
YXNzT3duUHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgQ29sb3JT
cGFjZSBjb2xvclNwYWNlID0gQ29sb3JTcGFjZURldmljZVJHQiwgUmVuZGVyaW5nTW9kZSByZW5k
ZXJpbmdNb2RlID0gVW5hY2NlbGVyYXRlZCkKKyAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8SW1h
Z2VCdWZmZXI+IGNyZWF0ZShjb25zdCBJbnRTaXplJiBzaXplLCBDb2xvclNwYWNlIGNvbG9yU3Bh
Y2UgPSBDb2xvclNwYWNlRGV2aWNlUkdCLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUgPSBV
bmFjY2VsZXJhdGVkLCBEZWZlcnJhbE1vZGUgZGVmZXJyYWxNb2RlID0gTm9uRGVmZXJyZWQpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwotICAgICAgICAgICAg
T3duUHRyPEltYWdlQnVmZmVyPiBidWYgPSBhZG9wdFB0cihuZXcgSW1hZ2VCdWZmZXIoc2l6ZSwg
Y29sb3JTcGFjZSwgcmVuZGVyaW5nTW9kZSwgc3VjY2VzcykpOworICAgICAgICAgICAgT3duUHRy
PEltYWdlQnVmZmVyPiBidWYgPSBhZG9wdFB0cihuZXcgSW1hZ2VCdWZmZXIoc2l6ZSwgY29sb3JT
cGFjZSwgcmVuZGVyaW5nTW9kZSwgZGVmZXJyYWxNb2RlLCBzdWNjZXNzKSk7CiAgICAgICAgICAg
ICBpZiAoc3VjY2VzcykKICAgICAgICAgICAgICAgICByZXR1cm4gYnVmLnJlbGVhc2UoKTsKICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMTQzLDcgKzE0OCw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogICAgICAgICAvLyBUaGlzIGNvbnN0cnVjdG9yIHdpbGwgcGxhY2UgaXRzIHN1
Y2Nlc3MgaW50byB0aGUgZ2l2ZW4gb3V0LXZhcmlhYmxlCiAgICAgICAgIC8vIHNvIHRoYXQgY3Jl
YXRlKCkga25vd3Mgd2hlbiBpdCBzaG91bGQgcmV0dXJuIGZhaWx1cmUuCi0gICAgICAgIEltYWdl
QnVmZmVyKGNvbnN0IEludFNpemUmLCBDb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlLCBib29sJiBz
dWNjZXNzKTsKKyAgICAgICAgSW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYsIENvbG9yU3BhY2Us
IFJlbmRlcmluZ01vZGUsIERlZmVycmFsTW9kZSwgYm9vbCYgc3VjY2Vzcyk7CiAgICAgfTsKIAog
I2lmIFVTRShDRykgfHwgVVNFKFNLSUEpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcAkocmV2
aXNpb24gMTA2NDg0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
SW1hZ2VCdWZmZXJDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAgSW1h
Z2VCdWZmZXJEYXRhOjpJbWFnZUJ1ZmZlckRhdGEoY29uc3QgSQogewogfQogCi1JbWFnZUJ1ZmZl
cjo6SW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSwgQ29sb3JTcGFjZSwgUmVuZGVyaW5n
TW9kZSwgYm9vbCYgc3VjY2VzcykKK0ltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBJbnRT
aXplJiBzaXplLCBDb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlLCBEZWZlcnJhbE1vZGUsIGJvb2wm
IHN1Y2Nlc3MpCiAgICAgOiBtX2RhdGEoc2l6ZSkKICAgICAsIG1fc2l6ZShzaXplKQogewpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJDRy5jcHAJKHJldmlzaW9uIDEwNjQ4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsNyAr
MTA3LDcgQEAgc3RhdGljIHZvaWQgcmVsZWFzZUltYWdlRGF0YSh2b2lkKiwgY29ucwogICAgIGZh
c3RGcmVlKGNvbnN0X2Nhc3Q8dm9pZCo+KGRhdGEpKTsKIH0KIAotSW1hZ2VCdWZmZXI6OkltYWdl
QnVmZmVyKGNvbnN0IEludFNpemUmIHNpemUsIENvbG9yU3BhY2UgaW1hZ2VDb2xvclNwYWNlLCBS
ZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGJvb2wmIHN1Y2Nlc3MpCitJbWFnZUJ1ZmZlcjo6
SW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSwgQ29sb3JTcGFjZSBpbWFnZUNvbG9yU3Bh
Y2UsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgRGVmZXJyYWxNb2RlLCBib29sJiBzdWNj
ZXNzKQogICAgIDogbV9kYXRhKHNpemUpCiAgICAgLCBtX3NpemUoc2l6ZSkKIHsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJv
bWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcAkocmV2aXNpb24gMTA2NDg0KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNo
cm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOCBAQAogCiAjaWYgVVNFKFNL
SUEpCiAjaW5jbHVkZSAiR3JDb250ZXh0LmgiCisjaW5jbHVkZSAiU2tDYW52YXMuaCIKKyNpbmNs
dWRlICJTa0RldmljZS5oIgogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTU5LDYg
KzYxLDcgQEAgQ2FudmFzMkRMYXllckNocm9taXVtOjpDYW52YXMyRExheWVyQ2hybwogICAgICwg
bV9iYWNrVGV4dHVyZUlkKDApCiAgICAgLCBtX2ZibygwKQogICAgICwgbV91c2VEb3VibGVCdWZm
ZXJpbmcoQ0NQcm94eTo6aGFzSW1wbFRocmVhZCgpKQorICAgICwgbV9jYW52YXMoMCkKIHsKICAg
ICBpZiAobV91c2VEb3VibGVCdWZmZXJpbmcpCiAgICAgICAgIEdMQyhtX2NvbnRleHQsIG1fZmJv
ID0gbV9jb250ZXh0LT5jcmVhdGVGcmFtZWJ1ZmZlcigpKTsKQEAgLTkxLDYgKzk0LDEzIEBAIGJv
b2wgQ2FudmFzMkRMYXllckNocm9taXVtOjpkcmF3c0NvbnRlbnQKICAgICAgICAgJiYgbV9jb250
ZXh0ICYmIChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+Z2V0R3JhcGhpY3NSZXNldFN0YXR1
c0FSQigpID09IEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUik7CiB9CiAKKyNpZiBVU0UoU0tJ
QSkKK3ZvaWQgQ2FudmFzMkRMYXllckNocm9taXVtOjpzZXRDYW52YXMoU2tDYW52YXMqIGNhbnZh
cykKK3sKKyAgICBtX2NhbnZhcyA9IGNhbnZhczsKK30KKyNlbmRpZgorCiB2b2lkIENhbnZhczJE
TGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c0lmRGlydHkoY29uc3QgUmVnaW9uJiAvKiBvY2Ns
dWRlZFNjcmVlblNwYWNlICovKQogewogICAgIGlmICghZHJhd3NDb250ZW50KCkpCkBAIC0xMDgs
NiArMTE4LDEyIEBAIHZvaWQgQ2FudmFzMkRMYXllckNocm9taXVtOjpwYWludENvbnRlbnQKICAg
ICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOwogCiAjaWYgVVNFKFNLSUEpCisgICAg
Ly8gRklYTUU6IFJlcGxhY2UgdGhpcyBibG9jayBvZiBza2lhIGNvZGUgd2l0aCBtX2NhbnZhcy0+
Zmx1c2gsIHdoZW4gdGhhdAorICAgIC8vIEFQSSBiZWNvbWVzIGF2YWlsYWJsZS4KKyAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzc0NjMKKyAgICBpZiAobV9j
YW52YXMpCisgICAgICAgIG1fY2FudmFzLT5nZXREZXZpY2UoKS0+YWNjZXNzUmVuZGVyVGFyZ2V0
KCk7IC8vIFRyaWdnZXJzIGV4ZWN1dGlvbiBvZiBwZW5kaW5nIGRyYXcgb3BlcmF0aW9ucy4KKwog
ICAgIEdyQ29udGV4dCogZ3JDb250ZXh0ID0gbV9jb250ZXh0LT5nckNvbnRleHQoKTsKICAgICBp
ZiAoZ3JDb250ZXh0KQogICAgICAgICBnckNvbnRleHQtPmZsdXNoKCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9DYW52YXMyRExheWVyQ2hyb21pdW0uaAkocmV2aXNpb24gMTA2NDg0KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDEwIEBACiAjaW5jbHVkZSAiQ2FudmFzTGF5ZXJD
aHJvbWl1bS5oIgogI2luY2x1ZGUgIk1hbmFnZWRUZXh0dXJlLmgiCiAKKyNpZiBVU0UoU0tJQSkK
K2NsYXNzIFNrQ2FudmFzOworI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
R3JhcGhpY3NDb250ZXh0M0Q7CkBAIC02MSw2ICs2NSwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB2b2lkIHVucmVzZXJ2ZUNvbnRlbnRzVGV4dHVyZSgpOwogICAgIHZpcnR1YWwgdm9pZCBjbGVh
bnVwUmVzb3VyY2VzKCk7CiAKKyNpZiBVU0UoU0tJQSkKKyAgICB2b2lkIHNldENhbnZhcyhTa0Nh
bnZhcyopOworI2VuZGlmCisKIHByaXZhdGU6CiAgICAgQ2FudmFzMkRMYXllckNocm9taXVtKEdy
YXBoaWNzQ29udGV4dDNEKiwgY29uc3QgSW50U2l6ZSYpOwogCkBAIC03Nyw2ICs4NSw5IEBAIHBy
aXZhdGU6CiAgICAgLy8gc3luY2hyb25pemUgaXRzIGRyYXdzIHdpdGggdGhlIGNhbnZhcyB1cGRh
dGVzLgogICAgIGJvb2wgbV91c2VEb3VibGVCdWZmZXJpbmc7CiAgICAgT3duUHRyPE1hbmFnZWRU
ZXh0dXJlPiBtX2Zyb250VGV4dHVyZTsKKyNpZiBVU0UoU0tJQSkKKyAgICBTa0NhbnZhcyogbV9j
YW52YXM7CisjZW5kaWYKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3F0L0ltYWdlQnVmZmVyUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlQnVmZmVyUXQuY3BwCShyZXZpc2lvbiAxMDY0ODQp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZlclF0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtOTQsNyArOTQsNyBAQCBRSW1hZ2UgSW1hZ2VCdWZmZXJEYXRh
Ojp0b1FJbWFnZSgpIGNvbnN0CiAgICAgcmV0dXJuIGltYWdlOwogfQogCi1JbWFnZUJ1ZmZlcjo6
SW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSwgQ29sb3JTcGFjZSwgUmVuZGVyaW5nTW9k
ZSwgYm9vbCYgc3VjY2VzcykKK0ltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBJbnRTaXpl
JiBzaXplLCBDb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlLCBEZWZlcnJhbE1vZGUsIGJvb2wmIHN1
Y2Nlc3MpCiAgICAgOiBtX2RhdGEoc2l6ZSkKICAgICAsIG1fc2l6ZShzaXplKQogewpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1h
Z2VCdWZmZXJTa2lhLmNwcAkocmV2aXNpb24gMTA2NDg0KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00Niw2ICs0Niw3IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgogI2luY2x1
ZGUgIlNoYXJlZEdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiU2tDb2xvclByaXYuaCIK
KyNpbmNsdWRlICJTa0RlZmVycmVkQ2FudmFzLmgiCiAjaW5jbHVkZSAiU2tHcHVEZXZpY2UuaCIK
ICNpbmNsdWRlICJTa2lhVXRpbHMuaCIKICNpbmNsdWRlICJXRUJQSW1hZ2VFbmNvZGVyLmgiCkBA
IC02NSw3ICs2NiwyOSBAQCBJbWFnZUJ1ZmZlckRhdGE6OkltYWdlQnVmZmVyRGF0YShjb25zdCBJ
CiB7CiB9CiAKLXN0YXRpYyBTa0NhbnZhcyogY3JlYXRlQWNjZWxlcmF0ZWRDYW52YXMoY29uc3Qg
SW50U2l6ZSYgc2l6ZSwgSW1hZ2VCdWZmZXJEYXRhKiBkYXRhKQorY2xhc3MgQWNjZWxlcmF0ZWRE
ZXZpY2VDb250ZXh0IDogcHVibGljIFNrRGVmZXJyZWRDYW52YXM6OkRldmljZUNvbnRleHQgewor
cHVibGljOgorICAgIEFjY2VsZXJhdGVkRGV2aWNlQ29udGV4dChHcmFwaGljc0NvbnRleHQzRCog
Y29udGV4dDNEKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGNvbnRleHQzRCk7CisgICAgICAgIG1f
Y29udGV4dDNEID0gY29udGV4dDNEOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJl
Rm9yRHJhdygpCisgICAgeworICAgICAgICBtX2NvbnRleHQzRC0+bWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGZsdXNoKCkKKyAgICB7CisgICAgICAgIG1f
Y29udGV4dDNELT5mbHVzaCgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBHcmFwaGljc0NvbnRl
eHQzRCogbV9jb250ZXh0M0Q7Cit9OworCitzdGF0aWMgU2tDYW52YXMqIGNyZWF0ZUFjY2VsZXJh
dGVkQ2FudmFzKGNvbnN0IEludFNpemUmIHNpemUsIEltYWdlQnVmZmVyRGF0YSogZGF0YSwgRGVm
ZXJyYWxNb2RlIGRlZmVycmFsTW9kZSkKIHsKICAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4
dDNEID0gU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmdldCgpOwogICAgIGlmICghY29udGV4dDNE
KQpAQCAtODMsMTIgKzEwNiwxOCBAQCBzdGF0aWMgU2tDYW52YXMqIGNyZWF0ZUFjY2VsZXJhdGVk
Q2FudmFzCiAgICAgU2tBdXRvVFVucmVmPEdyVGV4dHVyZT4gdGV4dHVyZShnci0+Y3JlYXRlVW5j
YWNoZWRUZXh0dXJlKGRlc2MsIDAsIDApKTsKICAgICBpZiAoIXRleHR1cmUuZ2V0KCkpCiAgICAg
ICAgIHJldHVybiAwOwotICAgIFNrQ2FudmFzKiBjYW52YXMgPSBuZXcgU2tDYW52YXMoKTsKLSAg
ICBjYW52YXMtPnNldERldmljZShuZXcgU2tHcHVEZXZpY2UoZ3IsIHRleHR1cmUuZ2V0KCkpKS0+
dW5yZWYoKTsKKyAgICBTa0NhbnZhcyogY2FudmFzOworICAgIFNrQXV0b1RVbnJlZjxTa0Rldmlj
ZT4gZGV2aWNlKG5ldyBTa0dwdURldmljZShnciwgdGV4dHVyZS5nZXQoKSkpOworICAgIGlmIChk
ZWZlcnJhbE1vZGUgPT0gRGVmZXJyZWQpIHsKKyAgICAgICAgU2tBdXRvVFVucmVmPEFjY2VsZXJh
dGVkRGV2aWNlQ29udGV4dD4gZGV2aWNlQ29udGV4dChuZXcgQWNjZWxlcmF0ZWREZXZpY2VDb250
ZXh0KGNvbnRleHQzRCkpOworICAgICAgICBjYW52YXMgPSBuZXcgU2tEZWZlcnJlZENhbnZhcyhk
ZXZpY2UuZ2V0KCksIGRldmljZUNvbnRleHQuZ2V0KCkpOworICAgIH0gZWxzZQorICAgICAgICBj
YW52YXMgPSBuZXcgU2tDYW52YXMoZGV2aWNlLmdldCgpKTsKICAgICBkYXRhLT5tX3BsYXRmb3Jt
Q29udGV4dC5zZXRHcmFwaGljc0NvbnRleHQzRChjb250ZXh0M0QpOwogI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKICAgICBkYXRhLT5tX3BsYXRmb3JtTGF5ZXIgPSBDYW52YXMyRExh
eWVyQ2hyb21pdW06OmNyZWF0ZShjb250ZXh0M0QsIHNpemUpOwogICAgIGRhdGEtPm1fcGxhdGZv
cm1MYXllci0+c2V0VGV4dHVyZUlkKHRleHR1cmUuZ2V0KCktPmdldFRleHR1cmVIYW5kbGUoKSk7
CisgICAgZGF0YS0+bV9wbGF0Zm9ybUxheWVyLT5zZXRDYW52YXMoY2FudmFzKTsKICNlbmRpZgog
ICAgIHJldHVybiBjYW52YXM7CiB9CkBAIC0xMDAsMTQgKzEyOSwxNCBAQCBzdGF0aWMgU2tDYW52
YXMqIGNyZWF0ZU5vblBsYXRmb3JtQ2FudmFzCiAgICAgcmV0dXJuIGNhbnZhczsKIH0KIAotSW1h
Z2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEludFNpemUmIHNpemUsIENvbG9yU3BhY2UsIFJl
bmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgYm9vbCYgc3VjY2VzcykKK0ltYWdlQnVmZmVyOjpJ
bWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJiBzaXplLCBDb2xvclNwYWNlLCBSZW5kZXJpbmdNb2Rl
IHJlbmRlcmluZ01vZGUsIERlZmVycmFsTW9kZSBkZWZlcnJhbE1vZGUsIGJvb2wmIHN1Y2Nlc3Mp
CiAgICAgOiBtX2RhdGEoc2l6ZSkKICAgICAsIG1fc2l6ZShzaXplKQogewogICAgIE93blB0cjxT
a0NhbnZhcz4gY2FudmFzOwogCiAgICAgaWYgKHJlbmRlcmluZ01vZGUgPT0gQWNjZWxlcmF0ZWQp
Ci0gICAgICAgIGNhbnZhcyA9IGFkb3B0UHRyKGNyZWF0ZUFjY2VsZXJhdGVkQ2FudmFzKHNpemUs
ICZtX2RhdGEpKTsKKyAgICAgICAgY2FudmFzID0gYWRvcHRQdHIoY3JlYXRlQWNjZWxlcmF0ZWRD
YW52YXMoc2l6ZSwgJm1fZGF0YSwgZGVmZXJyYWxNb2RlKSk7CiAgICAgZWxzZSBpZiAocmVuZGVy
aW5nTW9kZSA9PSBVbmFjY2VsZXJhdGVkTm9uUGxhdGZvcm1CdWZmZXIpCiAgICAgICAgIGNhbnZh
cyA9IGFkb3B0UHRyKGNyZWF0ZU5vblBsYXRmb3JtQ2FudmFzKHNpemUpKTsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VCdWZmZXJXaW5DRS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1h
Z2VCdWZmZXJXaW5DRS5jcHAJKHJldmlzaW9uIDEwNjQ4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ltYWdlQnVmZmVyV2luQ0UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03Miw3ICs3Miw3IEBAIEltYWdlQnVmZmVyRGF0YTo6SW1hZ2VCdWZmZXJEYXRhKGNvbnN0
IEkKICAgICBtX2JpdG1hcC0+c2V0SGFzQWxwaGEodHJ1ZSk7CiB9CiAKLUltYWdlQnVmZmVyOjpJ
bWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJiBzaXplLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFJl
bmRlcmluZ01vZGUsIGJvb2wmIHN1Y2Nlc3MpCitJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29u
c3QgSW50U2l6ZSYgc2l6ZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlLCBE
ZWZlcnJhbE1vZGUsIGJvb2wmIHN1Y2Nlc3MpCiAgICAgOiBtX2RhdGEoc2l6ZSkKICAgICAsIG1f
c2l6ZShzaXplKQogewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gv
SW1hZ2VCdWZmZXJXeC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd3gvSW1hZ2VCdWZmZXJXeC5jcHAJKHJldmlzaW9uIDEwNjQ4NCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlQnVmZmVyV3guY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIEltYWdlQnVmZmVyRGF0YTo6SW1hZ2VCdWZmZXJEYXRh
KGNvbnN0IEkKIHsKIH0KIAotSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEludFNpemUm
LCBDb2xvclNwYWNlIGltYWdlQ29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSwgYm9vbCYgc3VjY2Vz
cykgOiAKK0ltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJiwgQ29sb3JTcGFj
ZSBpbWFnZUNvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUsIERlZmVycmFsTW9kZSwgYm9vbCYgc3Vj
Y2VzcykgOiAKICAgICBtX2RhdGEoSW50U2l6ZSgpKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7
CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gMTA2NDg1KQorKysgU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwx
OSBAQAorMjAxMi0wMi0wMSAgSnVzdGluIE5vdm9zYWQgIDxqdW5vdkBjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgW0Nocm9taXVtXSBFbmFibGUgZGVmZXJyZWQgY2FudmFzIHJlbmRlcmluZyBpbiB0
aGUgc2tpYSBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD03NjczMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9t
aXVtLmNwcAorCisgICAgICAgICogcHVibGljL1dlYlNldHRpbmdzLmg6CisgICAgICAgICogc3Jj
L1dlYlNldHRpbmdzSW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlNldHRpbmdzSW1wbDo6
c2V0RGVmZXJyZWQyZENhbnZhc0VuYWJsZWQpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAg
KiBzcmMvV2ViU2V0dGluZ3NJbXBsLmg6CisgICAgICAgIChXZWJTZXR0aW5nc0ltcGwpOgorCiAy
MDEyLTAyLTAxICBEaXJrIFByYW5rZSAgPGRwcmFua2VAY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFRlc3RXZWJLaXRBUEkgaXNuJ3QgYmVpbmcgYnVpbHQgb24gY2hyb21pdW0gYm90cyBhbnkgbW9y
ZQpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2V0dGluZ3MuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTZXR0aW5ncy5oCShy
ZXZpc2lvbiAxMDY0ODQpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTZXR0
aW5ncy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsNiArMTE1LDcgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgdm9pZCBzZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yUGx1Z2luc0VuYWJsZWQoYm9v
bCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yQW5p
bWF0aW9uRW5hYmxlZChib29sKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldEFjY2VsZXJhdGVk
MmRDYW52YXNFbmFibGVkKGJvb2wpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RGVmZXJyZWQy
ZENhbnZhc0VuYWJsZWQoYm9vbCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQoYm9vbCkgID0gMDsKICAgICB2aXJ0
dWFsIHZvaWQgc2V0TWluaW11bUFjY2VsZXJhdGVkMmRDYW52YXNTaXplKGludCkgPSAwOwogICAg
IHZpcnR1YWwgdm9pZCBzZXRBY2NlbGVyYXRlZEZpbHRlcnNFbmFibGVkKGJvb2wpID0gMDsKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmNwcAko
cmV2aXNpb24gMTA2NDg0KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGlu
Z3NJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzczLDYgKzM3MywxMSBAQCB2b2lkIFdlYlNl
dHRpbmdzSW1wbDo6c2V0QWNjZWxlcmF0ZWQyZENhCiAgICAgbV9zZXR0aW5ncy0+c2V0QWNjZWxl
cmF0ZWQyZENhbnZhc0VuYWJsZWQoZW5hYmxlZCk7CiB9CiAKK3ZvaWQgV2ViU2V0dGluZ3NJbXBs
OjpzZXREZWZlcnJlZDJkQ2FudmFzRW5hYmxlZChib29sIGVuYWJsZWQpCit7CisgICAgbV9zZXR0
aW5ncy0+c2V0RGVmZXJyZWQyZENhbnZhc0VuYWJsZWQoZW5hYmxlZCk7Cit9CisKIHZvaWQgV2Vi
U2V0dGluZ3NJbXBsOjpzZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVu
YWJsZWQoYm9vbCBlbmFibGVkKQogewogICAgIG1fc2V0dGluZ3MtPnNldEFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9uRW5hYmxlZChlbmFibGVkKTsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5oCShyZXZpc2lvbiAxMDY0ODQp
CisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTA3LDYgKzEwNyw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckNhbnZhc0VuYWJsZWQoYm9vbCk7CiAgICAgdmlydHVh
bCB2b2lkIHNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JBbmltYXRpb25FbmFibGVkKGJvb2wp
OwogICAgIHZpcnR1YWwgdm9pZCBzZXRBY2NlbGVyYXRlZDJkQ2FudmFzRW5hYmxlZChib29sKTsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0RGVmZXJyZWQyZENhbnZhc0VuYWJsZWQoYm9vbCk7CiAgICAg
dmlydHVhbCB2b2lkIHNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9uRW5h
YmxlZChib29sKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0TWluaW11bUFjY2VsZXJhdGVkMmRDYW52
YXNTaXplKGludCk7CiAgICAgdmlydHVhbCB2b2lkIHNldEFjY2VsZXJhdGVkRmlsdGVyc0VuYWJs
ZWQoYm9vbCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124998</attachid>
            <date>2012-02-01 13:09:00 -0800</date>
            <delta_ts>2012-02-01 15:05:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76732-20120201160859.patch</filename>
            <type>text/plain</type>
            <size>20015</size>
            <attacher name="Justin Novosad">junov</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNjQ4NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYwIEBACisyMDEyLTAyLTAxICBKdXN0aW4g
Tm92b3NhZCAgPGp1bm92QGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1dIEVuYWJs
ZSBkZWZlcnJlZCBjYW52YXMgcmVuZGVyaW5nIGluIHRoZSBza2lhIHBvcnQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2NzMyCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzOiBjb3ZlcmVk
IGJ5IGV4aXN0aW5nIGNhbnZhcyBsYXlvdXQgdGVzdHMKKworICAgICAgICBBZGRpbmcgYSBuZXcg
c2V0dGluZyB0byBlbmFibGUgZGVmZXJyZWQgMmQgY2FudmFzIHJlbmRlcmluZy4KKyAgICAgICAg
QWRkZWQgc3VwcG9ydCBmb3IgZGVmZXJyZWQgMmQgY2FudmFzIHJlbmRlcmluZyBpbiBJbWFnZUJ1
ZmZlclNraWEKKyAgICAgICAgYW5kIENhbnZhczJETGF5ZXJDaHJvbWl1bSwgbW9zdGx5IHBsdW1i
aW5nLiBEZWZmZXJlZCByZW5kZXJpbmcKKyAgICAgICAgaW1wbGVtZW50YXRpb24gaXMgcHJvdmlk
ZWQgYnkgc2tpYSAoY2xhc3MgU2tEZWZlcnJlZENhbnZhcykuCisKKyAgICAgICAgKiBodG1sL0hU
TUxDYW52YXNFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50
OjpzaG91bGREZWZlcik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxDYW52YXNFbGVtZW50OjpjcmVhdGVJbWFnZUJ1ZmZlcik6CisgICAgICAgICogaHRtbC9IVE1M
Q2FudmFzRWxlbWVudC5oOgorICAgICAgICAoSFRNTENhbnZhc0VsZW1lbnQpOgorICAgICAgICAq
IHBhZ2UvU2V0dGluZ3MuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2V0dGluZ3M6OlNldHRpbmdz
KToKKyAgICAgICAgKFdlYkNvcmU6OlNldHRpbmdzOjpzZXRBY2NlbGVyYXRlZDJkQ2FudmFzRW5h
YmxlZCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlNldHRpbmdzOjpz
ZXREZWZlcnJlZDJkQ2FudmFzRW5hYmxlZCk6CisgICAgICAgICogcGFnZS9TZXR0aW5ncy5oOgor
ICAgICAgICAoU2V0dGluZ3MpOgorICAgICAgICAoV2ViQ29yZTo6U2V0dGluZ3M6OmRlZmVycmVk
MmRDYW52YXNFbmFibGVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ci5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAgIChJ
bWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZm
ZXJDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllckNocm9taXVtOjpDYW52YXMyRExheWVyQ2hyb21pdW0p
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyQ2hy
b21pdW06OnNldENhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyQ2hyb21p
dW06OnBhaW50Q29udGVudHNJZkRpcnR5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKENhbnZhczJETGF5ZXJD
aHJvbWl1bSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJRdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcDoKKyAgICAgICAg
KEFjY2VsZXJhdGVkRGV2aWNlQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpBY2NlbGVyYXRl
ZERldmljZUNvbnRleHQ6OkFjY2VsZXJhdGVkRGV2aWNlQ29udGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpBY2NlbGVyYXRlZERldmljZUNvbnRleHQ6OnByZXBhcmVGb3JEcmF3KToKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2VsZXJhdGVkRGV2aWNlQ29udGV4dDo6Zmx1c2gpOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVBY2NlbGVyYXRlZENhbnZhcyk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbmNlL0ltYWdlQnVmZmVyV2luQ0UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy93eC9JbWFnZUJ1ZmZlcld4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpJ
bWFnZUJ1ZmZlcik6CisKIDIwMTItMDItMDEgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFw
cGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCShyZXZpc2lvbiAxMDY0ODQpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDQzLDYgKzQ0MywyMiBAQCBib29sIEhUTUxDYW52YXNFbGVtZW50OjpzaG91bGRBY2Nl
bGVyYXRlCiAjZW5kaWYKIH0KIAorYm9vbCBIVE1MQ2FudmFzRWxlbWVudDo6c2hvdWxkRGVmZXIo
KSBjb25zdAoreworI2lmIFVTRShTS0lBKQorICAgIGlmIChtX2NvbnRleHQgJiYgIW1fY29udGV4
dC0+aXMyZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBTZXR0aW5ncyogc2V0dGlu
Z3MgPSBkb2N1bWVudCgpLT5zZXR0aW5ncygpOworICAgIGlmICghc2V0dGluZ3MgfHwgIXNldHRp
bmdzLT5kZWZlcnJlZDJkQ2FudmFzRW5hYmxlZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICByZXR1cm4gdHJ1ZTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisK
IHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUltYWdlQnVmZmVyKCkgY29uc3QKIHsKICAg
ICBBU1NFUlQoIW1faW1hZ2VCdWZmZXIpOwpAQCAtNDcxLDcgKzQ4Nyw4IEBAIHZvaWQgSFRNTENh
bnZhc0VsZW1lbnQ6OmNyZWF0ZUltYWdlQnVmZmUKICNlbHNlCiAgICAgICAgIFVuYWNjZWxlcmF0
ZWQ7CiAjZW5kaWYKLSAgICBtX2ltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShidWZm
ZXJTaXplLCBDb2xvclNwYWNlRGV2aWNlUkdCLCByZW5kZXJpbmdNb2RlKTsKKyAgICBEZWZlcnJh
bE1vZGUgZGVmZXJyYWxNb2RlID0gc2hvdWxkRGVmZXIoKSA/IERlZmVycmVkIDogTm9uRGVmZXJy
ZWQ7CisgICAgbV9pbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoYnVmZmVyU2l6ZSwg
Q29sb3JTcGFjZURldmljZVJHQiwgcmVuZGVyaW5nTW9kZSwgZGVmZXJyYWxNb2RlKTsKICAgICBp
ZiAoIW1faW1hZ2VCdWZmZXIpCiAgICAgICAgIHJldHVybjsKICAgICBtX2ltYWdlQnVmZmVyLT5j
b250ZXh0KCktPnNjYWxlKEZsb2F0U2l6ZShidWZmZXJTaXplLndpZHRoKCkgLyBsb2dpY2FsU2l6
ZS53aWR0aCgpLCBidWZmZXJTaXplLmhlaWdodCgpIC8gbG9naWNhbFNpemUuaGVpZ2h0KCkpKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmgJKHJldmlzaW9uIDEw
NjQ4NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTQ2LDYgKzE0Niw4IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHNldFN1cmZh
Y2VTaXplKGNvbnN0IEludFNpemUmKTsKIAorICAgIGJvb2wgc2hvdWxkRGVmZXIoKSBjb25zdDsK
KwogICAgIEhhc2hTZXQ8Q2FudmFzT2JzZXJ2ZXIqPiBtX29ic2VydmVyczsKIAogICAgIEludFNp
emUgbV9zaXplOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAJKHJldmlzaW9uIDEwNjQ4
NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xOTMsNiArMTkzLDcgQEAgU2V0dGluZ3M6OlNldHRpbmdzKFBhZ2UqIHBhZ2UpCiAgICAgLCBt
X3ByaXZpbGVnZWRXZWJHTEV4dGVuc2lvbnNFbmFibGVkKGZhbHNlKQogICAgICwgbV93ZWJBdWRp
b0VuYWJsZWQoZmFsc2UpCiAgICAgLCBtX2FjY2VsZXJhdGVkQ2FudmFzMmRFbmFibGVkKGZhbHNl
KQorICAgICwgbV9kZWZlcnJlZENhbnZhczJkRW5hYmxlZChmYWxzZSkKICAgICAsIG1fbG9hZERl
ZmVycmluZ0VuYWJsZWQodHJ1ZSkKICAgICAsIG1fdGlsZWRCYWNraW5nU3RvcmVFbmFibGVkKGZh
bHNlKQogICAgICwgbV9wYWdpbmF0ZUR1cmluZ0xheW91dEVuYWJsZWQoZmFsc2UpCkBAIC04MTcs
NiArODE4LDExIEBAIHZvaWQgU2V0dGluZ3M6OnNldEFjY2VsZXJhdGVkMmRDYW52YXNFbmEKICAg
ICBtX2FjY2VsZXJhdGVkQ2FudmFzMmRFbmFibGVkID0gZW5hYmxlZDsKIH0KIAordm9pZCBTZXR0
aW5nczo6c2V0RGVmZXJyZWQyZENhbnZhc0VuYWJsZWQoYm9vbCBlbmFibGVkKQoreworICAgIG1f
ZGVmZXJyZWRDYW52YXMyZEVuYWJsZWQgPSBlbmFibGVkOworfQorCiB2b2lkIFNldHRpbmdzOjpz
ZXRNaW5pbXVtQWNjZWxlcmF0ZWQyZENhbnZhc1NpemUoaW50IG51bVBpeGVscykKIHsKICAgICBt
X21pbmltdW1BY2NlbGVyYXRlZDJkQ2FudmFzU2l6ZSA9IG51bVBpeGVsczsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
YWdlL1NldHRpbmdzLmgJKHJldmlzaW9uIDEwNjQ4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
U2V0dGluZ3MuaAkod29ya2luZyBjb3B5KQpAQCAtMzY2LDYgKzM2Niw5IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgdm9pZCBzZXRBY2NlbGVyYXRlZDJkQ2FudmFzRW5hYmxlZChib29s
KTsKICAgICAgICAgYm9vbCBhY2NlbGVyYXRlZDJkQ2FudmFzRW5hYmxlZCgpIGNvbnN0IHsgcmV0
dXJuIG1fYWNjZWxlcmF0ZWRDYW52YXMyZEVuYWJsZWQ7IH0KIAorICAgICAgICB2b2lkIHNldERl
ZmVycmVkMmRDYW52YXNFbmFibGVkKGJvb2wpOworICAgICAgICBib29sIGRlZmVycmVkMmRDYW52
YXNFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9kZWZlcnJlZENhbnZhczJkRW5hYmxlZDsgfQor
CiAgICAgICAgIC8vIE51bWJlciBvZiBwaXhlbHMgYmVsb3cgd2hpY2ggMkQgY2FudmFzIGlzIHJl
bmRlcmVkIGluIHNvZnR3YXJlCiAgICAgICAgIC8vIGV2ZW4gaWYgaGFyZHdhcmUgYWNjZWxlcmF0
aW9uIGlzIGVuYWJsZWQuCiAgICAgICAgIC8vIEhhcmR3YXJlIGFjY2VsZXJhdGlvbiBpcyB1c2Vm
dWwgZm9yIGxhcmdlIGNhbnZhc2VzIHdoZXJlIGl0IGNhbiBhdm9pZCB0aGUKQEAgLTYxOSw2ICs2
MjIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgbV9wcml2aWxlZ2VkV2Vi
R0xFeHRlbnNpb25zRW5hYmxlZCA6IDE7CiAgICAgICAgIGJvb2wgbV93ZWJBdWRpb0VuYWJsZWQg
OiAxOwogICAgICAgICBib29sIG1fYWNjZWxlcmF0ZWRDYW52YXMyZEVuYWJsZWQgOiAxOworICAg
ICAgICBib29sIG1fZGVmZXJyZWRDYW52YXMyZEVuYWJsZWQgOiAxOwogICAgICAgICBib29sIG1f
bG9hZERlZmVycmluZ0VuYWJsZWQgOiAxOwogICAgICAgICBib29sIG1fdGlsZWRCYWNraW5nU3Rv
cmVFbmFibGVkIDogMTsKICAgICAgICAgYm9vbCBtX3BhZ2luYXRlRHVyaW5nTGF5b3V0RW5hYmxl
ZCA6IDE7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyLmgJKHJldmlzaW9uIDEwNjQ4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDE0ICs2OCwxOSBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIERvbnRDb3B5QmFja2luZ1N0b3JlIC8vIFN1YnNl
cXVlbnQgZHJhd3MgbWF5IGFmZmVjdCB0aGUgY29weS4KICAgICB9OwogCisgICAgZW51bSBEZWZl
cnJhbE1vZGUgeworICAgICAgICBOb25EZWZlcnJlZCwKKyAgICAgICAgRGVmZXJyZWQKKyAgICB9
OworCiAgICAgY2xhc3MgSW1hZ2VCdWZmZXIgewogICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShJbWFnZUJ1ZmZlcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIHB1YmxpYzoKICAg
ICAgICAgLy8gV2lsbCByZXR1cm4gYSBudWxsIHBvaW50ZXIgb24gYWxsb2NhdGlvbiBmYWlsdXJl
LgotICAgICAgICBzdGF0aWMgUGFzc093blB0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IElu
dFNpemUmIHNpemUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSA9IENvbG9yU3BhY2VEZXZpY2VSR0Is
IFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSA9IFVuYWNjZWxlcmF0ZWQpCisgICAgICAgIHN0
YXRpYyBQYXNzT3duUHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgSW50U2l6ZSYgc2l6ZSwg
Q29sb3JTcGFjZSBjb2xvclNwYWNlID0gQ29sb3JTcGFjZURldmljZVJHQiwgUmVuZGVyaW5nTW9k
ZSByZW5kZXJpbmdNb2RlID0gVW5hY2NlbGVyYXRlZCwgRGVmZXJyYWxNb2RlIGRlZmVycmFsTW9k
ZSA9IE5vbkRlZmVycmVkKQogICAgICAgICB7CiAgICAgICAgICAgICBib29sIHN1Y2Nlc3MgPSBm
YWxzZTsKLSAgICAgICAgICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gYnVmID0gYWRvcHRQdHIobmV3
IEltYWdlQnVmZmVyKHNpemUsIGNvbG9yU3BhY2UsIHJlbmRlcmluZ01vZGUsIHN1Y2Nlc3MpKTsK
KyAgICAgICAgICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gYnVmID0gYWRvcHRQdHIobmV3IEltYWdl
QnVmZmVyKHNpemUsIGNvbG9yU3BhY2UsIHJlbmRlcmluZ01vZGUsIGRlZmVycmFsTW9kZSwgc3Vj
Y2VzcykpOwogICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IGJ1Zi5yZWxlYXNlKCk7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTE0Myw3ICsx
NDgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgLy8gVGhpcyBjb25zdHJ1Y3Rv
ciB3aWxsIHBsYWNlIGl0cyBzdWNjZXNzIGludG8gdGhlIGdpdmVuIG91dC12YXJpYWJsZQogICAg
ICAgICAvLyBzbyB0aGF0IGNyZWF0ZSgpIGtub3dzIHdoZW4gaXQgc2hvdWxkIHJldHVybiBmYWls
dXJlLgotICAgICAgICBJbWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJiwgQ29sb3JTcGFjZSwgUmVu
ZGVyaW5nTW9kZSwgYm9vbCYgc3VjY2Vzcyk7CisgICAgICAgIEltYWdlQnVmZmVyKGNvbnN0IElu
dFNpemUmLCBDb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlLCBEZWZlcnJhbE1vZGUsIGJvb2wmIHN1
Y2Nlc3MpOwogICAgIH07CiAKICNpZiBVU0UoQ0cpIHx8IFVTRShTS0lBKQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VC
dWZmZXJDYWlyby5jcHAJKHJldmlzaW9uIDEwNjQ4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01NCw3ICs1NCw3IEBAIEltYWdlQnVmZmVyRGF0YTo6SW1hZ2VCdWZmZXJEYXRhKGNvbnN0IEkK
IHsKIH0KIAotSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEludFNpemUmIHNpemUsIENv
bG9yU3BhY2UsIFJlbmRlcmluZ01vZGUsIGJvb2wmIHN1Y2Nlc3MpCitJbWFnZUJ1ZmZlcjo6SW1h
Z2VCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSwgQ29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSwg
RGVmZXJyYWxNb2RlLCBib29sJiBzdWNjZXNzKQogICAgIDogbV9kYXRhKHNpemUpCiAgICAgLCBt
X3NpemUoc2l6ZSkKIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCShyZXZpc2lvbiAxMDY0ODQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTA3LDcgKzEwNyw3IEBAIHN0YXRpYyB2b2lkIHJlbGVhc2VJbWFnZURhdGEo
dm9pZCosIGNvbnMKICAgICBmYXN0RnJlZShjb25zdF9jYXN0PHZvaWQqPihkYXRhKSk7CiB9CiAK
LUltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJiBzaXplLCBDb2xvclNwYWNl
IGltYWdlQ29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBib29sJiBzdWNj
ZXNzKQorSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEludFNpemUmIHNpemUsIENvbG9y
U3BhY2UgaW1hZ2VDb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIERlZmVy
cmFsTW9kZSwgYm9vbCYgc3VjY2VzcykKICAgICA6IG1fZGF0YShzaXplKQogICAgICwgbV9zaXpl
KHNpemUpCiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9DYW52YXMyRExheWVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHAJKHJl
dmlzaW9uIDEwNjQ4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDkgKzQx
LDkgQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkxheWVyUmVu
ZGVyZXJDaHJvbWl1bS5oIiAvLyBGb3IgdGhlIEdMQygpIG1hY3JvCiAKLSNpZiBVU0UoU0tJQSkK
ICNpbmNsdWRlICJHckNvbnRleHQuaCIKLSNlbmRpZgorI2luY2x1ZGUgIlNrQ2FudmFzLmgiCisj
aW5jbHVkZSAiU2tEZXZpY2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01OSw2ICs1
OSw3IEBAIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6Q2FudmFzMkRMYXllckNocm8KICAgICAsIG1f
YmFja1RleHR1cmVJZCgwKQogICAgICwgbV9mYm8oMCkKICAgICAsIG1fdXNlRG91YmxlQnVmZmVy
aW5nKENDUHJveHk6Omhhc0ltcGxUaHJlYWQoKSkKKyAgICAsIG1fY2FudmFzKDApCiB7CiAgICAg
aWYgKG1fdXNlRG91YmxlQnVmZmVyaW5nKQogICAgICAgICBHTEMobV9jb250ZXh0LCBtX2ZibyA9
IG1fY29udGV4dC0+Y3JlYXRlRnJhbWVidWZmZXIoKSk7CkBAIC05MSw2ICs5MiwxMSBAQCBib29s
IENhbnZhczJETGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50CiAgICAgICAgICYmIG1fY29udGV4
dCAmJiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmdldEdyYXBoaWNzUmVzZXRTdGF0dXNB
UkIoKSA9PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1IpOwogfQogCit2b2lkIENhbnZhczJE
TGF5ZXJDaHJvbWl1bTo6c2V0Q2FudmFzKFNrQ2FudmFzKiBjYW52YXMpCit7CisgICAgbV9jYW52
YXMgPSBjYW52YXM7Cit9CisKIHZvaWQgQ2FudmFzMkRMYXllckNocm9taXVtOjpwYWludENvbnRl
bnRzSWZEaXJ0eShjb25zdCBSZWdpb24mIC8qIG9jY2x1ZGVkU2NyZWVuU3BhY2UgKi8pCiB7CiAg
ICAgaWYgKCFkcmF3c0NvbnRlbnQoKSkKQEAgLTEwNywxMSArMTEzLDE1IEBAIHZvaWQgQ2FudmFz
MkRMYXllckNocm9taXVtOjpwYWludENvbnRlbnQKICAgICBib29sIHN1Y2Nlc3MgPSBtX2NvbnRl
eHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIEFTU0VSVF9VTlVTRUQoc3VjY2Vzcywgc3Vj
Y2Vzcyk7CiAKLSNpZiBVU0UoU0tJQSkKKyAgICAvLyBGSVhNRTogUmVwbGFjZSB0aGlzIGJsb2Nr
IG9mIHNraWEgY29kZSB3aXRoIG1fY2FudmFzLT5mbHVzaCwgd2hlbiB0aGF0CisgICAgLy8gQVBJ
IGJlY29tZXMgYXZhaWxhYmxlLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD03NzQ2MworICAgIGlmIChtX2NhbnZhcykKKyAgICAgICAgbV9jYW52YXMtPmdl
dERldmljZSgpLT5hY2Nlc3NSZW5kZXJUYXJnZXQoKTsgLy8gVHJpZ2dlcnMgZXhlY3V0aW9uIG9m
IHBlbmRpbmcgZHJhdyBvcGVyYXRpb25zLgorCiAgICAgR3JDb250ZXh0KiBnckNvbnRleHQgPSBt
X2NvbnRleHQtPmdyQ29udGV4dCgpOwogICAgIGlmIChnckNvbnRleHQpCiAgICAgICAgIGdyQ29u
dGV4dC0+Zmx1c2goKTsKLSNlbmRpZgogCiAgICAgbV9jb250ZXh0LT5mbHVzaCgpOwogfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXll
ckNocm9taXVtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmgJKHJldmlzaW9uIDEwNjQ4NCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJD
aHJvbWl1bS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw4IEBACiAjaW5jbHVkZSAiQ2Fu
dmFzTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIk1hbmFnZWRUZXh0dXJlLmgiCiAKK2NsYXNz
IFNrQ2FudmFzOworCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEdyYXBoaWNzQ29udGV4
dDNEOwpAQCAtNjEsNiArNjMsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHVucmVzZXJ2
ZUNvbnRlbnRzVGV4dHVyZSgpOwogICAgIHZpcnR1YWwgdm9pZCBjbGVhbnVwUmVzb3VyY2VzKCk7
CiAKKyAgICB2b2lkIHNldENhbnZhcyhTa0NhbnZhcyopOworCiBwcml2YXRlOgogICAgIENhbnZh
czJETGF5ZXJDaHJvbWl1bShHcmFwaGljc0NvbnRleHQzRCosIGNvbnN0IEludFNpemUmKTsKIApA
QCAtNzcsNiArODEsNyBAQCBwcml2YXRlOgogICAgIC8vIHN5bmNocm9uaXplIGl0cyBkcmF3cyB3
aXRoIHRoZSBjYW52YXMgdXBkYXRlcy4KICAgICBib29sIG1fdXNlRG91YmxlQnVmZmVyaW5nOwog
ICAgIE93blB0cjxNYW5hZ2VkVGV4dHVyZT4gbV9mcm9udFRleHR1cmU7CisgICAgU2tDYW52YXMq
IG1fY2FudmFzOwogfTsKIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvSW1hZ2VCdWZmZXJRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJRdC5jcHAJKHJldmlzaW9uIDEwNjQ4NCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlQnVmZmVyUXQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC05NCw3ICs5NCw3IEBAIFFJbWFnZSBJbWFnZUJ1ZmZlckRhdGE6OnRv
UUltYWdlKCkgY29uc3QKICAgICByZXR1cm4gaW1hZ2U7CiB9CiAKLUltYWdlQnVmZmVyOjpJbWFn
ZUJ1ZmZlcihjb25zdCBJbnRTaXplJiBzaXplLCBDb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlLCBi
b29sJiBzdWNjZXNzKQorSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEludFNpemUmIHNp
emUsIENvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUsIERlZmVycmFsTW9kZSwgYm9vbCYgc3VjY2Vz
cykKICAgICA6IG1fZGF0YShzaXplKQogICAgICwgbV9zaXplKHNpemUpCiB7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1
ZmZlclNraWEuY3BwCShyZXZpc2lvbiAxMDY0ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2
LDYgKzQ2LDcgQEAKICNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCiAjaW5jbHVkZSAi
U2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJTa0NvbG9yUHJpdi5oIgorI2lu
Y2x1ZGUgIlNrRGVmZXJyZWRDYW52YXMuaCIKICNpbmNsdWRlICJTa0dwdURldmljZS5oIgogI2lu
Y2x1ZGUgIlNraWFVdGlscy5oIgogI2luY2x1ZGUgIldFQlBJbWFnZUVuY29kZXIuaCIKQEAgLTY1
LDcgKzY2LDI5IEBAIEltYWdlQnVmZmVyRGF0YTo6SW1hZ2VCdWZmZXJEYXRhKGNvbnN0IEkKIHsK
IH0KIAotc3RhdGljIFNrQ2FudmFzKiBjcmVhdGVBY2NlbGVyYXRlZENhbnZhcyhjb25zdCBJbnRT
aXplJiBzaXplLCBJbWFnZUJ1ZmZlckRhdGEqIGRhdGEpCitjbGFzcyBBY2NlbGVyYXRlZERldmlj
ZUNvbnRleHQgOiBwdWJsaWMgU2tEZWZlcnJlZENhbnZhczo6RGV2aWNlQ29udGV4dCB7CitwdWJs
aWM6CisgICAgQWNjZWxlcmF0ZWREZXZpY2VDb250ZXh0KEdyYXBoaWNzQ29udGV4dDNEKiBjb250
ZXh0M0QpCisgICAgeworICAgICAgICBBU1NFUlQoY29udGV4dDNEKTsKKyAgICAgICAgbV9jb250
ZXh0M0QgPSBjb250ZXh0M0Q7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHByZXBhcmVGb3JE
cmF3KCkKKyAgICB7CisgICAgICAgIG1fY29udGV4dDNELT5tYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZmx1c2goKQorICAgIHsKKyAgICAgICAgbV9jb250
ZXh0M0QtPmZsdXNoKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIEdyYXBoaWNzQ29udGV4dDNE
KiBtX2NvbnRleHQzRDsKK307CisKK3N0YXRpYyBTa0NhbnZhcyogY3JlYXRlQWNjZWxlcmF0ZWRD
YW52YXMoY29uc3QgSW50U2l6ZSYgc2l6ZSwgSW1hZ2VCdWZmZXJEYXRhKiBkYXRhLCBEZWZlcnJh
bE1vZGUgZGVmZXJyYWxNb2RlKQogewogICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M0Qg
PSBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6Z2V0KCk7CiAgICAgaWYgKCFjb250ZXh0M0QpCkBA
IC04MywxMiArMTA2LDE4IEBAIHN0YXRpYyBTa0NhbnZhcyogY3JlYXRlQWNjZWxlcmF0ZWRDYW52
YXMKICAgICBTa0F1dG9UVW5yZWY8R3JUZXh0dXJlPiB0ZXh0dXJlKGdyLT5jcmVhdGVVbmNhY2hl
ZFRleHR1cmUoZGVzYywgMCwgMCkpOwogICAgIGlmICghdGV4dHVyZS5nZXQoKSkKICAgICAgICAg
cmV0dXJuIDA7Ci0gICAgU2tDYW52YXMqIGNhbnZhcyA9IG5ldyBTa0NhbnZhcygpOwotICAgIGNh
bnZhcy0+c2V0RGV2aWNlKG5ldyBTa0dwdURldmljZShnciwgdGV4dHVyZS5nZXQoKSkpLT51bnJl
ZigpOworICAgIFNrQ2FudmFzKiBjYW52YXM7CisgICAgU2tBdXRvVFVucmVmPFNrRGV2aWNlPiBk
ZXZpY2UobmV3IFNrR3B1RGV2aWNlKGdyLCB0ZXh0dXJlLmdldCgpKSk7CisgICAgaWYgKGRlZmVy
cmFsTW9kZSA9PSBEZWZlcnJlZCkgeworICAgICAgICBTa0F1dG9UVW5yZWY8QWNjZWxlcmF0ZWRE
ZXZpY2VDb250ZXh0PiBkZXZpY2VDb250ZXh0KG5ldyBBY2NlbGVyYXRlZERldmljZUNvbnRleHQo
Y29udGV4dDNEKSk7CisgICAgICAgIGNhbnZhcyA9IG5ldyBTa0RlZmVycmVkQ2FudmFzKGRldmlj
ZS5nZXQoKSwgZGV2aWNlQ29udGV4dC5nZXQoKSk7CisgICAgfSBlbHNlCisgICAgICAgIGNhbnZh
cyA9IG5ldyBTa0NhbnZhcyhkZXZpY2UuZ2V0KCkpOwogICAgIGRhdGEtPm1fcGxhdGZvcm1Db250
ZXh0LnNldEdyYXBoaWNzQ29udGV4dDNEKGNvbnRleHQzRCk7CiAjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQogICAgIGRhdGEtPm1fcGxhdGZvcm1MYXllciA9IENhbnZhczJETGF5ZXJD
aHJvbWl1bTo6Y3JlYXRlKGNvbnRleHQzRCwgc2l6ZSk7CiAgICAgZGF0YS0+bV9wbGF0Zm9ybUxh
eWVyLT5zZXRUZXh0dXJlSWQodGV4dHVyZS5nZXQoKS0+Z2V0VGV4dHVyZUhhbmRsZSgpKTsKKyAg
ICBkYXRhLT5tX3BsYXRmb3JtTGF5ZXItPnNldENhbnZhcyhjYW52YXMpOwogI2VuZGlmCiAgICAg
cmV0dXJuIGNhbnZhczsKIH0KQEAgLTEwMCwxNCArMTI5LDE0IEBAIHN0YXRpYyBTa0NhbnZhcyog
Y3JlYXRlTm9uUGxhdGZvcm1DYW52YXMKICAgICByZXR1cm4gY2FudmFzOwogfQogCi1JbWFnZUJ1
ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSwgQ29sb3JTcGFjZSwgUmVuZGVy
aW5nTW9kZSByZW5kZXJpbmdNb2RlLCBib29sJiBzdWNjZXNzKQorSW1hZ2VCdWZmZXI6OkltYWdl
QnVmZmVyKGNvbnN0IEludFNpemUmIHNpemUsIENvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUgcmVu
ZGVyaW5nTW9kZSwgRGVmZXJyYWxNb2RlIGRlZmVycmFsTW9kZSwgYm9vbCYgc3VjY2VzcykKICAg
ICA6IG1fZGF0YShzaXplKQogICAgICwgbV9zaXplKHNpemUpCiB7CiAgICAgT3duUHRyPFNrQ2Fu
dmFzPiBjYW52YXM7CiAKICAgICBpZiAocmVuZGVyaW5nTW9kZSA9PSBBY2NlbGVyYXRlZCkKLSAg
ICAgICAgY2FudmFzID0gYWRvcHRQdHIoY3JlYXRlQWNjZWxlcmF0ZWRDYW52YXMoc2l6ZSwgJm1f
ZGF0YSkpOworICAgICAgICBjYW52YXMgPSBhZG9wdFB0cihjcmVhdGVBY2NlbGVyYXRlZENhbnZh
cyhzaXplLCAmbV9kYXRhLCBkZWZlcnJhbE1vZGUpKTsKICAgICBlbHNlIGlmIChyZW5kZXJpbmdN
b2RlID09IFVuYWNjZWxlcmF0ZWROb25QbGF0Zm9ybUJ1ZmZlcikKICAgICAgICAgY2FudmFzID0g
YWRvcHRQdHIoY3JlYXRlTm9uUGxhdGZvcm1DYW52YXMoc2l6ZSkpOwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9JbWFnZUJ1ZmZlcldpbkNFLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9JbWFnZUJ1
ZmZlcldpbkNFLmNwcAkocmV2aXNpb24gMTA2NDg0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VCdWZmZXJXaW5DRS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTcyLDcgKzcyLDcgQEAgSW1hZ2VCdWZmZXJEYXRhOjpJbWFnZUJ1ZmZlckRhdGEoY29uc3QgSQog
ICAgIG1fYml0bWFwLT5zZXRIYXNBbHBoYSh0cnVlKTsKIH0KIAotSW1hZ2VCdWZmZXI6OkltYWdl
QnVmZmVyKGNvbnN0IEludFNpemUmIHNpemUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgUmVuZGVy
aW5nTW9kZSwgYm9vbCYgc3VjY2VzcykKK0ltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBJ
bnRTaXplJiBzaXplLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUsIERlZmVy
cmFsTW9kZSwgYm9vbCYgc3VjY2VzcykKICAgICA6IG1fZGF0YShzaXplKQogICAgICwgbV9zaXpl
KHNpemUpCiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9JbWFn
ZUJ1ZmZlcld4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93eC9JbWFnZUJ1ZmZlcld4LmNwcAkocmV2aXNpb24gMTA2NDg0KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VCdWZmZXJXeC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM3LDcgKzM3LDcgQEAgSW1hZ2VCdWZmZXJEYXRhOjpJbWFnZUJ1ZmZlckRhdGEoY29u
c3QgSQogewogfQogCi1JbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYsIENv
bG9yU3BhY2UgaW1hZ2VDb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlLCBib29sJiBzdWNjZXNzKSA6
IAorSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEludFNpemUmLCBDb2xvclNwYWNlIGlt
YWdlQ29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSwgRGVmZXJyYWxNb2RlLCBib29sJiBzdWNjZXNz
KSA6IAogICAgIG1fZGF0YShJbnRTaXplKCkpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiAxMDY0ODUpCisrKyBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBA
CisyMDEyLTAyLTAxICBKdXN0aW4gTm92b3NhZCAgPGp1bm92QGNocm9taXVtLm9yZz4KKworICAg
ICAgICBbQ2hyb21pdW1dIEVuYWJsZSBkZWZlcnJlZCBjYW52YXMgcmVuZGVyaW5nIGluIHRoZSBz
a2lhIHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTc2NzMyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QWRkaW5nIGEgbmV3IHNldHRpbmcgZm9yIGVuYWJsaW5nIGRlZmVycmVkIDJkIGNhbnZhcyByZW5k
ZXJpbmcKKworICAgICAgICAqIHB1YmxpYy9XZWJTZXR0aW5ncy5oOgorICAgICAgICAqIHNyYy9X
ZWJTZXR0aW5nc0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJTZXR0aW5nc0ltcGw6OnNl
dERlZmVycmVkMmRDYW52YXNFbmFibGVkKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgICog
c3JjL1dlYlNldHRpbmdzSW1wbC5oOgorICAgICAgICAoV2ViU2V0dGluZ3NJbXBsKToKKwogMjAx
Mi0wMi0wMSAgRGlyayBQcmFua2UgIDxkcHJhbmtlQGNocm9taXVtLm9yZz4KIAogICAgICAgICBU
ZXN0V2ViS2l0QVBJIGlzbid0IGJlaW5nIGJ1aWx0IG9uIGNocm9taXVtIGJvdHMgYW55IG1vcmUK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNldHRpbmdzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2V0dGluZ3MuaAkocmV2
aXNpb24gMTA2NDg0KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2V0dGlu
Z3MuaAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDYgKzExNSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgc2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvclBsdWdpbnNFbmFibGVkKGJvb2wp
ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckFuaW1h
dGlvbkVuYWJsZWQoYm9vbCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRBY2NlbGVyYXRlZDJk
Q2FudmFzRW5hYmxlZChib29sKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldERlZmVycmVkMmRD
YW52YXNFbmFibGVkKGJvb2wpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0QWNjZWxlcmF0ZWRD
b21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkKGJvb2wpICA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIHNldE1pbmltdW1BY2NlbGVyYXRlZDJkQ2FudmFzU2l6ZShpbnQpID0gMDsKICAgICB2
aXJ0dWFsIHZvaWQgc2V0QWNjZWxlcmF0ZWRGaWx0ZXJzRW5hYmxlZChib29sKSA9IDA7CkluZGV4
OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5jcHAJKHJl
dmlzaW9uIDEwNjQ4NCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdz
SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3Myw2ICszNzMsMTEgQEAgdm9pZCBXZWJTZXR0
aW5nc0ltcGw6OnNldEFjY2VsZXJhdGVkMmRDYQogICAgIG1fc2V0dGluZ3MtPnNldEFjY2VsZXJh
dGVkMmRDYW52YXNFbmFibGVkKGVuYWJsZWQpOwogfQogCit2b2lkIFdlYlNldHRpbmdzSW1wbDo6
c2V0RGVmZXJyZWQyZENhbnZhc0VuYWJsZWQoYm9vbCBlbmFibGVkKQoreworICAgIG1fc2V0dGlu
Z3MtPnNldERlZmVycmVkMmRDYW52YXNFbmFibGVkKGVuYWJsZWQpOworfQorCiB2b2lkIFdlYlNl
dHRpbmdzSW1wbDo6c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFi
bGVkKGJvb2wgZW5hYmxlZCkKIHsKICAgICBtX3NldHRpbmdzLT5zZXRBY2NlbGVyYXRlZENvbXBv
c2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQoZW5hYmxlZCk7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuaAkocmV2aXNpb24gMTA2NDg0KQor
KysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNyw2ICsxMDcsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldEFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JDYW52YXNFbmFibGVkKGJvb2wpOwogICAgIHZpcnR1YWwg
dm9pZCBzZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yQW5pbWF0aW9uRW5hYmxlZChib29sKTsK
ICAgICB2aXJ0dWFsIHZvaWQgc2V0QWNjZWxlcmF0ZWQyZENhbnZhc0VuYWJsZWQoYm9vbCk7Cisg
ICAgdmlydHVhbCB2b2lkIHNldERlZmVycmVkMmRDYW52YXNFbmFibGVkKGJvb2wpOwogICAgIHZp
cnR1YWwgdm9pZCBzZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJs
ZWQoYm9vbCk7CiAgICAgdmlydHVhbCB2b2lkIHNldE1pbmltdW1BY2NlbGVyYXRlZDJkQ2FudmFz
U2l6ZShpbnQpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRBY2NlbGVyYXRlZEZpbHRlcnNFbmFibGVk
KGJvb2wpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>