<?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>72686</bug_id>
          
          <creation_ts>2011-11-17 20:34:08 -0800</creation_ts>
          <short_desc>[chromium] Need to prepaint tiles in TiledLayerChromium</short_desc>
          <delta_ts>2011-12-17 12:09:50 -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>New Bugs</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>
          <dependson>73711</dependson>
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Eric Penner">epenner</reporter>
          <assigned_to name="Eric Penner">epenner</assigned_to>
          <cc>cc-bugs</cc>
    
    <cc>dglazkov</cc>
    
    <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>reveman</cc>
    
    <cc>vangelis</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>505453</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Penner">epenner</who>
    <bug_when>2011-11-17 20:34:08 -0800</bug_when>
    <thetext>Need to prepaint tiles in TileLayerChomium</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>505454</commentid>
    <comment_count>1</comment_count>
      <attachid>115730</attachid>
    <who name="Eric Penner">epenner</who>
    <bug_when>2011-11-17 20:37:05 -0800</bug_when>
    <thetext>Created attachment 115730
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>505465</commentid>
    <comment_count>2</comment_count>
      <attachid>115730</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-17 21:18:39 -0800</bug_when>
    <thetext>Comment on attachment 115730
Patch

Attachment 115730 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10477475</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>505512</commentid>
    <comment_count>3</comment_count>
      <attachid>115730</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-11-17 22:40:40 -0800</bug_when>
    <thetext>Comment on attachment 115730
Patch

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

Looks like you&apos;re going to need Enne&apos;s review on this one, since it touches the tiler system only.

I totally buy that we can make this all work behind the setNeedsCommit blanket, and am psyched to see it running.

Dont forget to get some unit tests for the things you touched, too, when you&apos;ve got buy off from enne on the approach.

&gt; Source/WebCore/platform/graphics/chromium/ContentLayerChromium.cpp:113
&gt; +    // TODO: Prepaint rect currently just pads the visible rect by one tile.

s/TODO/FIXME</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>505988</commentid>
    <comment_count>4</comment_count>
      <attachid>115730</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-11-18 13:04:26 -0800</bug_when>
    <thetext>Comment on attachment 115730
Patch

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

&gt; Source/WebCore/ChangeLog:3
&gt; +        Need to prepaint tiles in TileLayerChomium

In WebKit, if you&apos;re only touching Chromium code, you should prefix the bug title with [chromium] so that other ports know they can ignore it.

&gt; Source/WebCore/ChangeLog:8
&gt; +        No new tests. (OOPS!)

This should really get some unit tests.  See Source/WebKit/chromium/tests/.

&gt; Source/WebCore/platform/graphics/chromium/ContentLayerChromium.cpp:115
&gt; +    prepaintRect.inflate(256); // TODO: use tile size or other metric

You should just expose this from TiledLayerChromium if you need it, but I kind of think TiledLayerChromium should be responsible for the expansion.

&gt; Source/WebCore/platform/graphics/chromium/ContentLayerChromium.cpp:129
&gt; +    if (visibleDirty) {
&gt; +        prepareToUpdate(layerRect);

I think this conditional will interact poorly with texture reservation.  You need to prepareToUpdate with the visible rect always, even if it&apos;s not dirty.  That&apos;s the mechanism through which all the visible textures get reserved.  So, maybe it would make sense to either have prepareToUpdate have a return value or maybe just inquire directly with m_paintRect.isEmpty() about whether anything has been painted and is pending upload.

On the subject of texture reservation, I think we need a second pass through the tree, parallel to CCLayerTreeHost::paintLayerContents, where we give each layer a chance to prepaint.  In that step, a layer should reserving non-dirty tiles with valid textures that already exist (maybe anything within +/- one viewport of the current viewport, clamped to content bounds).  Then, start calculating what else to prepaint using something similar to this mechanism.

If you paint + prepaint in the same step, you are prioritizing the prepainted textures over textures from later layers that are actually on screen.  Worse, those layers will flicker as texture pressure changes based on prepainting.  If you don&apos;t reserve all the prepainted tiles that you have ahead of time, in cases where you&apos;re near the memory limit you might needlessly do work to prepaint extra tiles each frame, only to evict some other prepainted tiles.  If you do reserve, then texture allocation will fail, and you can early out, as we do now.

&gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp:348
&gt; +              return m_tiler-&gt;tileIndicesToContentRect(left, i, right, i);

It feels a little cumbersome to go from content rect -&gt; indices -&gt; content rect -&gt; indices.

Here&apos;s a refactoring suggestion that might make this code cleaner.  You might want to consider breaking &quot;void prepareToUpdate(contentRect)&quot; into &quot; bool prepareToUpdate(contentRect)&quot; and &quot;bool prepareToUpdate(indices)&quot;.  The painting function already does the check for missing/dirty tiles, so that would eliminate the containsMissingTiles and containsDirtyTiles functions.  You could simply say &quot;try painting these indices&quot; and if that fails to find anything to paint you could iterate through different sets of indices until you find something valid.

&gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp:358
&gt; +    // Exactly the same as above but includes dirty tiles.

I don&apos;t think there&apos;s any difference between missing and dirty tiles from the perspective of prepaint.  There&apos;s really just valid and invalid content.  As soon as you commit a new frame, any tiles that are dirty but not updated might as well be missing, because we can&apos;t display them without displaying potentially incorrect content from a previous frame.  (We incorrectly do this now; jamesr is in the middle of fixing this.)

It&apos;d be fairly complex to track whether or not a missing tile could be uploaded or not without also not updating a dirty tile--you&apos;d need to track which frame the invalidations happened so that the old dirty tile contents weren&apos;t out of date with the new contents you drew in the missing tile.  I&apos;m not convinced it&apos;s worth the complexity.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>506098</commentid>
    <comment_count>5</comment_count>
      <attachid>115730</attachid>
    <who name="Eric Penner">epenner</who>
    <bug_when>2011-11-18 15:03:36 -0800</bug_when>
    <thetext>Comment on attachment 115730
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/ContentLayerChromium.cpp:129
&gt;&gt; +        prepareToUpdate(layerRect);
&gt; 
&gt; I think this conditional will interact poorly with texture reservation.  You need to prepareToUpdate with the visible rect always, even if it&apos;s not dirty.  That&apos;s the mechanism through which all the visible textures get reserved.  So, maybe it would make sense to either have prepareToUpdate have a return value or maybe just inquire directly with m_paintRect.isEmpty() about whether anything has been painted and is pending upload.
&gt; 
&gt; On the subject of texture reservation, I think we need a second pass through the tree, parallel to CCLayerTreeHost::paintLayerContents, where we give each layer a chance to prepaint.  In that step, a layer should reserving non-dirty tiles with valid textures that already exist (maybe anything within +/- one viewport of the current viewport, clamped to content bounds).  Then, start calculating what else to prepaint using something similar to this mechanism.
&gt; 
&gt; If you paint + prepaint in the same step, you are prioritizing the prepainted textures over textures from later layers that are actually on screen.  Worse, those layers will flicker as texture pressure changes based on prepainting.  If you don&apos;t reserve all the prepainted tiles that you have ahead of time, in cases where you&apos;re near the memory limit you might needlessly do work to prepaint extra tiles each frame, only to evict some other prepainted tiles.  If you do reserve, then texture allocation will fail, and you can early out, as we do now.

Thanks for the info! I had some of these issues in the back of my head but this clarifies everything. It looks like we need the current paintLayerContents pass which will reserve all crucial tiles, followed by another pass for pre-painting that can fail separately from the visible pass. 

In the second pass, when should we actually pre-paint? Would it be acceptable for pre-painting to be a no-op if there was a visible paint in the first pass? With a setNeedsCommit to defer the prepainting until later?  Also, do you agree with expanding the the pre-paint by one row/column at a time with setNeedsCommit in-between?

&gt;&gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp:348
&gt;&gt; +              return m_tiler-&gt;tileIndicesToContentRect(left, i, right, i);
&gt; 
&gt; It feels a little cumbersome to go from content rect -&gt; indices -&gt; content rect -&gt; indices.
&gt; 
&gt; Here&apos;s a refactoring suggestion that might make this code cleaner.  You might want to consider breaking &quot;void prepareToUpdate(contentRect)&quot; into &quot; bool prepareToUpdate(contentRect)&quot; and &quot;bool prepareToUpdate(indices)&quot;.  The painting function already does the check for missing/dirty tiles, so that would eliminate the containsMissingTiles and containsDirtyTiles functions.  You could simply say &quot;try painting these indices&quot; and if that fails to find anything to paint you could iterate through different sets of indices until you find something valid.

Agreed on the back and forth conversions. I was going to break up that function into two versions, but I hadn&apos;t thought of using it as the detector as well. 

Regarding reserving tiles, It sounds like that would also help with reserving pre-paint tiles, since it would slowly reserve tiles in order of importance.

&gt;&gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp:358
&gt;&gt; +    // Exactly the same as above but includes dirty tiles.
&gt; 
&gt; I don&apos;t think there&apos;s any difference between missing and dirty tiles from the perspective of prepaint.  There&apos;s really just valid and invalid content.  As soon as you commit a new frame, any tiles that are dirty but not updated might as well be missing, because we can&apos;t display them without displaying potentially incorrect content from a previous frame.  (We incorrectly do this now; jamesr is in the middle of fixing this.)
&gt; 
&gt; It&apos;d be fairly complex to track whether or not a missing tile could be uploaded or not without also not updating a dirty tile--you&apos;d need to track which frame the invalidations happened so that the old dirty tile contents weren&apos;t out of date with the new contents you drew in the missing tile.  I&apos;m not convinced it&apos;s worth the complexity.

I thought there might be a valid distinction between tiles that already have something something valid uploaded from a previous frame as opposed to an uninitialized texture or checkerboard. I thought worst case there would be a seam between the newly painted tiles and the old dirty tiles (until the dirty tiles get painted). Do you think it would be worse than that? 

In any event, that is secondary to the other suggested changes, so I&apos;ll leave it for later (if it even becomes an issue).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>506177</commentid>
    <comment_count>6</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-11-18 16:17:29 -0800</bug_when>
    <thetext>(In reply to comment #5)

&gt; In the second pass, when should we actually pre-paint? Would it be acceptable for pre-painting to be a no-op if there was a visible paint in the first pass? With a setNeedsCommit to defer the prepainting until later?  Also, do you agree with expanding the the pre-paint by one row/column at a time with setNeedsCommit in-between?

Yeah, as a first pass, each layer could locally decide if it wanted to do prepainting.  And, it could always call setNeedsCommit unless it knew it was done prepainting.  And, if we&apos;re at the texture limit, then we can just not request a commit until a commit gets kicked off by WebKit or from the compositor thread due to scrolling.

Prepainting one new row or column at a time seems like a reasonable heuristic.  If there&apos;s nothing else going on, the commit will be fast and we can prepaint more.

&gt; Regarding reserving tiles, It sounds like that would also help with reserving pre-paint tiles, since it would slowly reserve tiles in order of importance.

Hrm.  The other thing is that reserving a tile means that it will be allowed to persist until the next frame, even over the soft reclamation limit.  We have two reclamation limits, one soft (which we&apos;ll fill up and not every bother going below) and one hard (which we&apos;ll never go above, but will temporarily go above if they&apos;re a lot visible at once).  If we reserve with the same mechanism, then we will always end up filling up towards the hard limit rather than the soft one.  And, even worse, the LRU mechanism in the texture manager will consider the prepainted tiles as a higher priority for eviction than on-screen tiles if we hit the upper limit, because they&apos;re the last thing reserved in the frame.

So, after some thought, I&apos;m also wondering if we need a texture manager change here too to get desirable behavior.  :(

Just as a quick sketch of how this change could look: the texture manager needs to have a set (of two, for now?) LRU queues of different priorities.  When reserving in the texture manager, you&apos;ll need to pass an appropriate priority level so that the texture goes in the right queue.  Reserving texture can also change its priority (such as a prepainted tile becoming visible). When reducing texture memory in the texture memory (either to reserve something or during the evict stage), you should pull from the lower priority queue first until that&apos;s empty.  Reserving a lower priority texture should never reserve over the soft limit, whereas a high priority texture can.  That&apos;ll keep the texture limit sitting around the soft limit on average.

I don&apos;t mean to pile on an extra change here, but I&apos;m not sure how else to make sure that we&apos;re not needlessly painting (i.e. still informing the texture manager about textures in use so we know when to stop prepainting because of texture limits) but also not interfere with normal texture operation (evicting things in the wrong LRU order with respect to least-recently-visible).

&gt; I thought there might be a valid distinction between tiles that already have something something valid uploaded from a previous frame as opposed to an uninitialized texture or checkerboard. I thought worst case there would be a seam between the newly painted tiles and the old dirty tiles (until the dirty tiles get painted). Do you think it would be worse than that? 

Yeah, that worst case is exactly the problem.  So, if a tile&apos;s dirty, we&apos;d prefer to checkerboard over showing that seam.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507900</commentid>
    <comment_count>7</comment_count>
      <attachid>116306</attachid>
    <who name="Eric Penner">epenner</who>
    <bug_when>2011-11-22 18:42:23 -0800</bug_when>
    <thetext>Created attachment 116306
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507911</commentid>
    <comment_count>8</comment_count>
      <attachid>116308</attachid>
    <who name="Eric Penner">epenner</who>
    <bug_when>2011-11-22 19:39:23 -0800</bug_when>
    <thetext>Created attachment 116308
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507939</commentid>
    <comment_count>9</comment_count>
      <attachid>116316</attachid>
    <who name="Eric Penner">epenner</who>
    <bug_when>2011-11-22 22:14:41 -0800</bug_when>
    <thetext>Created attachment 116316
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508457</commentid>
    <comment_count>10</comment_count>
      <attachid>116442</attachid>
    <who name="Eric Penner">epenner</who>
    <bug_when>2011-11-23 15:21:14 -0800</bug_when>
    <thetext>Created attachment 116442
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508965</commentid>
    <comment_count>11</comment_count>
      <attachid>116562</attachid>
    <who name="Eric Penner">epenner</who>
    <bug_when>2011-11-24 22:36:52 -0800</bug_when>
    <thetext>Created attachment 116562
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510267</commentid>
    <comment_count>12</comment_count>
      <attachid>116562</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-11-28 15:27:31 -0800</bug_when>
    <thetext>Comment on attachment 116562
Patch

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

This is looking a lot better.  Thanks for all the changes.

I&apos;m still worried about the TextureManager-related concerns that I brought up above.  For example, ManagedTexture::isValid (called via needsIdlePaint) touches the LRU queue, which will put offscreen textures behind onscreen textures regarding eviction.

&gt; Source/WebCore/ChangeLog:8
&gt; +        No new tests. (OOPS!)

I&apos;d love to see some unit tests for this.  If you need any pointers about where to look, what to mock out, or where to start, I&apos;m happy to help.

&gt; Source/WebCore/platform/graphics/chromium/LayerChromium.h:164
&gt; +    virtual void paintContentsIfDirty(bool idlePaint) { }

I know you&apos;re trying to reuse the layer iterating code in CCLayerTreeHost, but it&apos;s awkward to pass a boolean for custom behavior here.  reveman has a patch out that makes iterating through layers less painful, and I think it&apos;ll be cleaner to just have separate paintContentsIfDirty(void) and idlePaintContentsIfDirty(void) functions.  See: https://bugs.webkit.org/attachment.cgi?id=116293

&gt; Source/WebCore/platform/graphics/chromium/TextureManager.cpp:42
&gt; +size_t TextureManager::reclaimLimitBytes(const IntSize&amp; viewportSize)
&gt;  {
&gt; +    // FIXME: Choose a limit based on viewport size.

I think any adjusting of texture limits based on viewport size should be done in a separate patch.  jamesr did something similar here: https://bugs.webkit.org/show_bug.cgi?id=72202

&gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp:426
&gt; +    idlePaintContentRect.inflate(idlePaintPaddingWidth);

I don&apos;t think idlePaintPaddingWidth should explicitly be the viewport size, because that won&apos;t make any sense for tiled non-root layers.

The contentRect here is the part of the layer that&apos;s visible.  For the root layer, this will always be the clip layer, which is sized to the viewport.  For iframes, the contentRect will (most often, unless it&apos;s clipped by some other masking layer or is partially offscreen) be the size of its clip rect as well, which is the portion of it that will be visible.  I think it&apos;d be sufficient to use contentRect as an approximation for the viewport size.

&gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp:439
&gt; +    int l1, t1, r1, b1, l2, t2, r2, b2;

style nit: Abbreviations are frowned upon in WebKit.  Maybe visibleLeft or contentLeft vs. offscreenLeft or prepaintLeft?

&gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp:447
&gt; +    while ((l1 &gt; l2 || t1 &gt; t2 || r1 &lt; r2 || b1 &lt; b2) &amp;&amp; !m_skipsIdlePaint) {
&gt; +        if (b1 &lt; b2) {
&gt; +            ++b1;
&gt; +            prepareToUpdateTiles(true, l1, b1, r1, b1);
&gt; +            if (!m_paintRect.isEmpty() || m_skipsIdlePaint)
&gt; +                break;

m_skipsIdlePaint seems kind of misnamed.  It&apos;s more &quot;idle painting ran out of memory&quot;, and it&apos;s possible that we still painted a few tiles and that it wasn&apos;t skipped at all.  Could you just return a boolean from prepareToUpdateTiles about whether painting occurred or not, rather than setting a flag?

&gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp:477
&gt; +    IntRect idlePaintContentRect = contentRect;
&gt; +    idlePaintContentRect.inflate(idlePaintPaddingWidth);
&gt; +    idlePaintContentRect.intersect(IntRect(IntPoint::zero(), contentBounds()));

If you&apos;re going to duplicate this logic, it should probably be its own function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511158</commentid>
    <comment_count>13</comment_count>
      <attachid>116562</attachid>
    <who name="Eric Penner">epenner</who>
    <bug_when>2011-11-29 15:32:25 -0800</bug_when>
    <thetext>Comment on attachment 116562
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:8
&gt;&gt; +        No new tests. (OOPS!)
&gt; 
&gt; I&apos;d love to see some unit tests for this.  If you need any pointers about where to look, what to mock out, or where to start, I&apos;m happy to help.

I found them and saw the existing tests. I&apos;ll ping you on how to quick iterate on them.

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerChromium.h:164
&gt;&gt; +    virtual void paintContentsIfDirty(bool idlePaint) { }
&gt; 
&gt; I know you&apos;re trying to reuse the layer iterating code in CCLayerTreeHost, but it&apos;s awkward to pass a boolean for custom behavior here.  reveman has a patch out that makes iterating through layers less painful, and I think it&apos;ll be cleaner to just have separate paintContentsIfDirty(void) and idlePaintContentsIfDirty(void) functions.  See: https://bugs.webkit.org/attachment.cgi?id=116293

Yeah I had that initially but changed it to reduce code. I&apos;ll change it back.

&gt;&gt; Source/WebCore/platform/graphics/chromium/TextureManager.cpp:42
&gt;&gt; +    // FIXME: Choose a limit based on viewport size.
&gt; 
&gt; I think any adjusting of texture limits based on viewport size should be done in a separate patch.  jamesr did something similar here: https://bugs.webkit.org/show_bug.cgi?id=72202

Okay I will remove it from this patch.

&gt;&gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp:426
&gt;&gt; +    idlePaintContentRect.inflate(idlePaintPaddingWidth);
&gt; 
&gt; I don&apos;t think idlePaintPaddingWidth should explicitly be the viewport size, because that won&apos;t make any sense for tiled non-root layers.
&gt; 
&gt; The contentRect here is the part of the layer that&apos;s visible.  For the root layer, this will always be the clip layer, which is sized to the viewport.  For iframes, the contentRect will (most often, unless it&apos;s clipped by some other masking layer or is partially offscreen) be the size of its clip rect as well, which is the portion of it that will be visible.  I think it&apos;d be sufficient to use contentRect as an approximation for the viewport size.

Good point. However, with a single tile of padding the effects on memory management are minimal, so possibly memory priority could be dealt with in another patch this way. I tried to resolve the memory priority issue in this patch but I found it difficult since there are a few conflicting problems:

- Memory priority taken from visible tiles due to LRU (as you mentioned)
- Layers that idle paint earlier can evict later layers&apos; pre-painted tiles.
- Endless paint thrashing can occur if we don&apos;t protect existing pre-paint tiles before trying to reserve new ones (eg. we could thrash between two layers, or between top/bottom within one layer). 

I think I&apos;ve got a decent solution for all of the above, but using a small padding with high priority gets around the issue for now.

&gt;&gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp:439
&gt;&gt; +    int l1, t1, r1, b1, l2, t2, r2, b2;
&gt; 
&gt; style nit: Abbreviations are frowned upon in WebKit.  Maybe visibleLeft or contentLeft vs. offscreenLeft or prepaintLeft?

I was thinking they could viewed as iterators (like &apos;i&apos; in a for loop). I will change to left, top, right, bottom, prepaintLeft, etc.

&gt;&gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp:447
&gt;&gt; +                break;
&gt; 
&gt; m_skipsIdlePaint seems kind of misnamed.  It&apos;s more &quot;idle painting ran out of memory&quot;, and it&apos;s possible that we still painted a few tiles and that it wasn&apos;t skipped at all.  Could you just return a boolean from prepareToUpdateTiles about whether painting occurred or not, rather than setting a flag?

I did that briefly, but needsIdlePaint needs to know about out-of-memory so we don&apos;t keep calling setNeedsCommit. I&apos;m thinking:
a.) Maybe we should indeed skip the paint if part of the row/column can&apos;t be painted in full (I can reset the paintrect etc.)
b.) I can just rename it to needsIdlePaint.

&gt;&gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp:477
&gt;&gt; +    idlePaintContentRect.intersect(IntRect(IntPoint::zero(), contentBounds()));
&gt; 
&gt; If you&apos;re going to duplicate this logic, it should probably be its own function.

I&apos;ll add a function that takes contentRect since this will be needed in other places.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511221</commentid>
    <comment_count>14</comment_count>
      <attachid>116562</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-11-29 16:53:13 -0800</bug_when>
    <thetext>Comment on attachment 116562
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp:426
&gt;&gt;&gt; +    idlePaintContentRect.inflate(idlePaintPaddingWidth);
&gt;&gt; 
&gt;&gt; I don&apos;t think idlePaintPaddingWidth should explicitly be the viewport size, because that won&apos;t make any sense for tiled non-root layers.
&gt;&gt; 
&gt;&gt; The contentRect here is the part of the layer that&apos;s visible.  For the root layer, this will always be the clip layer, which is sized to the viewport.  For iframes, the contentRect will (most often, unless it&apos;s clipped by some other masking layer or is partially offscreen) be the size of its clip rect as well, which is the portion of it that will be visible.  I think it&apos;d be sufficient to use contentRect as an approximation for the viewport size.
&gt; 
&gt; Good point. However, with a single tile of padding the effects on memory management are minimal, so possibly memory priority could be dealt with in another patch this way. I tried to resolve the memory priority issue in this patch but I found it difficult since there are a few conflicting problems:
&gt; 
&gt; - Memory priority taken from visible tiles due to LRU (as you mentioned)
&gt; - Layers that idle paint earlier can evict later layers&apos; pre-painted tiles.
&gt; - Endless paint thrashing can occur if we don&apos;t protect existing pre-paint tiles before trying to reserve new ones (eg. we could thrash between two layers, or between top/bottom within one layer). 
&gt; 
&gt; I think I&apos;ve got a decent solution for all of the above, but using a small padding with high priority gets around the issue for now.

I&apos;d be curious to hear what the eventual solution is.

In the short term, you should at least use m_tiler-&gt;tileSize() instead of defaultSize for idlePaintPaddingWidth.  Having a prepainted apron of even a single tile would still be a giant win for scrolling.

&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp:447
&gt;&gt;&gt; +                break;
&gt;&gt; 
&gt;&gt; m_skipsIdlePaint seems kind of misnamed.  It&apos;s more &quot;idle painting ran out of memory&quot;, and it&apos;s possible that we still painted a few tiles and that it wasn&apos;t skipped at all.  Could you just return a boolean from prepareToUpdateTiles about whether painting occurred or not, rather than setting a flag?
&gt; 
&gt; I did that briefly, but needsIdlePaint needs to know about out-of-memory so we don&apos;t keep calling setNeedsCommit. I&apos;m thinking:
&gt; a.) Maybe we should indeed skip the paint if part of the row/column can&apos;t be painted in full (I can reset the paintrect etc.)
&gt; b.) I can just rename it to needsIdlePaint.

TiledLayerChromium::updateCompositorResources already asserts that all the textures that the paint rect intersects are reserved, so I think it&apos;s reasonable to not set the paint rect and just bail out if you can&apos;t reserve a whole row or column.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512259</commentid>
    <comment_count>15</comment_count>
      <attachid>117302</attachid>
    <who name="Eric Penner">epenner</who>
    <bug_when>2011-11-30 17:05:36 -0800</bug_when>
    <thetext>Created attachment 117302
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512275</commentid>
    <comment_count>16</comment_count>
      <attachid>117302</attachid>
    <who name="Eric Penner">epenner</who>
    <bug_when>2011-11-30 17:18:42 -0800</bug_when>
    <thetext>Comment on attachment 117302
Patch

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

&gt; Source/WebCore/ChangeLog:8
&gt; +        No new tests. (OOPS!)

This now has a new TiledLayerChromiumTest and modifies CCLayerTreeHostTest. Should I modify this change log myself?

&gt; Source/WebCore/platform/graphics/chromium/TextureManager.cpp:-109
&gt; -    ASSERT(!m_textures.get(token).isProtected);

I remove this because we can call ::reserve() twice on the visible textures, which calls protectTexture. We reserve visible textures again when we update the expanded pre-paint area. 
I don&apos;t believe it should be a failure call protectTexture twice. Checking if it is protected first is just as expensive, and redundant in most use cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512309</commentid>
    <comment_count>17</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-11-30 18:25:51 -0800</bug_when>
    <thetext>Yes, you need to modify the ChangeLog or an svn presubmit hook will reject your change. Ideally you would reference the tests in the ChangeLog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512312</commentid>
    <comment_count>18</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-11-30 18:30:10 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; (From update of attachment 117302 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=117302&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:8
&gt; &gt; +        No new tests. (OOPS!)
&gt; 
&gt; This now has a new TiledLayerChromiumTest and modifies CCLayerTreeHostTest. Should I modify this change log myself?

Welcome to the wonderful world of ChangeLogs.  :(

I tend to just rerun prepare-ChangeLog and merge my previous changes with the new filelist.  There could probably be a smarter tool to be better about this, but nobody&apos;s written it yet.

&gt; &gt; Source/WebCore/platform/graphics/chromium/TextureManager.cpp:-109
&gt; &gt; -    ASSERT(!m_textures.get(token).isProtected);
&gt; 
&gt; I remove this because we can call ::reserve() twice on the visible textures, which calls protectTexture. We reserve visible textures again when we update the expanded pre-paint area. 
&gt; I don&apos;t believe it should be a failure call protectTexture twice. Checking if it is protected first is just as expensive, and redundant in most use cases.

That seems totally reasonable to me, at least.  This made a lot more sense back in the day when we didn&apos;t just bulk unreserve all contents textures and we were trying to make sure that every reserved texture got unreserved first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512327</commentid>
    <comment_count>19</comment_count>
      <attachid>117302</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-11-30 18:48:08 -0800</bug_when>
    <thetext>Comment on attachment 117302
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:340
&gt; +    paintLayerContents(m_updateList, false /* idle */);
&gt; +    // The second (idle) paint will be a no-op in layers where painting already occured above.
&gt; +    paintLayerContents(m_updateList, true /* idle */);

we would normally use a two-state enum for the idle flag rather than a bool to make the callsite more readable</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512374</commentid>
    <comment_count>20</comment_count>
      <attachid>117314</attachid>
    <who name="Eric Penner">epenner</who>
    <bug_when>2011-11-30 19:45:52 -0800</bug_when>
    <thetext>Created attachment 117314
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512381</commentid>
    <comment_count>21</comment_count>
      <attachid>117316</attachid>
    <who name="Eric Penner">epenner</who>
    <bug_when>2011-11-30 19:59:04 -0800</bug_when>
    <thetext>Created attachment 117316
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512882</commentid>
    <comment_count>22</comment_count>
      <attachid>117316</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-12-01 10:29:05 -0800</bug_when>
    <thetext>Comment on attachment 117316
Patch

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

Nice testing.  This is getting closer.

The biggest things missing in this patch are the TextureManager changes I described above.  In particular, non-visible tiles should be handled differently with respect to LRU.  Also, (in my opinion) we should only reserve textures for idle prepainting up to the reclaim limit.  Otherwise, we&apos;ll paint all the way up to the hard maximum limit and have no room for render surfaces.

&gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp:355
&gt; +                m_skipsIdlePaint = true;

What happened to the idea of removing m_skipsIdlePaint and setting the paint rect to empty here? If you don&apos;t set the paint rect to empty here, you&apos;re going to get an assert in updateCompositorResources if you&apos;ve painted any tiles.

On that note, can you add a test that involves idle painting hitting the memory limit?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:404
&gt; +            // Primary paint could have set opacity to zero. Skip idle paint.
&gt; +            if (paintType == PaintIdle &amp;&amp; !layer-&gt;opacity())
&gt; +                continue;

Can I ask you to not add this extra complexity to tree traversal? Layers becoming transparent during painting are very much an infrequent edge case. This sort of conditional during the idle painting tree traversal will not jive with reveman&apos;s patch that adds a ForEachCompositorResource-style iterator. Given the current heuristic of not idle painting when we&apos;ve already painted a layer, this should be caught at the TiledLayerChromium level anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513048</commentid>
    <comment_count>23</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-12-01 13:30:11 -0800</bug_when>
    <thetext>What&apos;s the reason this pre-painting is currently controlled from within the TiledLayerChromium class?

I&apos;m asking because when I think of pre-painting of tiles I make these two assumptions:

1. We eventually want the impl thread to distinguish between regular tiles and pre-paint tiles so that it can prioritize them differently.
2. The impl thread will be much better at predicting what tiles to pre-render.

Isn&apos;t that correct? Based on those assumptions it seem like this pre-rendering is best driven from CCThreadProxy and the TiledLayerChromium implementation being unaware if it&apos;s rendering regular or pre-render tiles.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513071</commentid>
    <comment_count>24</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-01 13:55:12 -0800</bug_when>
    <thetext>(In reply to comment #23)
&gt; What&apos;s the reason this pre-painting is currently controlled from within the TiledLayerChromium class?
&gt; 
&gt; I&apos;m asking because when I think of pre-painting of tiles I make these two assumptions:
&gt; 
&gt; 1. We eventually want the impl thread to distinguish between regular tiles and pre-paint tiles so that it can prioritize them differently.

I don&apos;t think this is correct - the impl thread does not do any sort of &apos;prioritization&apos; of tiles today. All eviction and painting decisions are made on the main thread.

&gt; 2. The impl thread will be much better at predicting what tiles to pre-render.

I disagree here as well, the impl thread might be better at prediction how much to pre-render but it can&apos;t make accurate decisions on a tile or even on a layer basis since the layer tree may change between commits.

&gt; 
&gt; Isn&apos;t that correct? Based on those assumptions it seem like this pre-rendering is best driven from CCThreadProxy and the TiledLayerChromium implementation being unaware if it&apos;s rendering regular or pre-render tiles.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513072</commentid>
    <comment_count>25</comment_count>
      <attachid>117316</attachid>
    <who name="Eric Penner">epenner</who>
    <bug_when>2011-12-01 13:55:13 -0800</bug_when>
    <thetext>Comment on attachment 117316
Patch

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

Thanks for all the feedback! Regarding the texture manager changes, if possible I&apos;d really like to leave that for another CL.  I had some changes in one of my early patches, but it wasn&apos;t quite sufficient to resolve all of the issues that arise from a large idle painting regions. 

As an outline of what I think would be needed:
- Reserving/Protecting needs two modes (fail at hard memory limit, or fail at soft memory limit).
- Memory priority could be handled a few ways. We could have two protected modes (not-protected, soft-protected, strong-protected), where we evict in that order. Or potentially we could get rid of the LRU all together and evaluate an explicit priority every frame (eg. distance from view).
- We need to reserve incrementally in order to be fair to all layers. This could be done with multiple passes of pre-painting, where we widen the pre-paint area by one tile at each iteration.

&gt;&gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp:355
&gt;&gt; +                m_skipsIdlePaint = true;
&gt; 
&gt; What happened to the idea of removing m_skipsIdlePaint and setting the paint rect to empty here? If you don&apos;t set the paint rect to empty here, you&apos;re going to get an assert in updateCompositorResources if you&apos;ve painted any tiles.
&gt; 
&gt; On that note, can you add a test that involves idle painting hitting the memory limit?

Sorry, I misunderstood and thought you were okay with it.

The empty paint-rect isn&apos;t sufficient to replace m_skipsIdlePaint. We need to detect if we are done idle painting in needsIdlePaint(). The function would always return true for an empty paint-rect, resulting in infinite SetNeedsCommit calls. m_skipsIdlePaint clarifies that we don&apos;t need to paint anymore, even though there is plenty of dirty tiles remaining outside the current paint rect. 

Also, note that we don&apos;t set m_requestedUpdateRect or m_paintRect if we return early from this function. This will result in early exit from updateCompositorResources on the first line.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:404
&gt;&gt; +                continue;
&gt; 
&gt; Can I ask you to not add this extra complexity to tree traversal? Layers becoming transparent during painting are very much an infrequent edge case. This sort of conditional during the idle painting tree traversal will not jive with reveman&apos;s patch that adds a ForEachCompositorResource-style iterator. Given the current heuristic of not idle painting when we&apos;ve already painted a layer, this should be caught at the TiledLayerChromium level anyway.

I&apos;m all for that. This was to prevent an assert in a unit test as I recall. I&apos;ll remove and see if it still hit that assert.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513083</commentid>
    <comment_count>26</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-12-01 14:06:15 -0800</bug_when>
    <thetext>(In reply to comment #23)
&gt; What&apos;s the reason this pre-painting is currently controlled from within the TiledLayerChromium class?
&gt; 
&gt; I&apos;m asking because when I think of pre-painting of tiles I make these two assumptions:
&gt; 
&gt; 1. We eventually want the impl thread to distinguish between regular tiles and pre-paint tiles so that it can prioritize them differently.

I&apos;ve been thinking about this in a slightly different way.  The impl side needs to distinguish between visible tiles and non-visible tiles, not between regular and pre-paint.

The use case I&apos;m thinking of is that if the impl side scrolls, a pre-painted tile may become a visible tile and should have a higher priority for upload than a regular tile that&apos;s now offscreen.  In other words, the main thread hands over content, and the impl side decides how best to use that content based on the current state of the world.

&gt; 2. The impl thread will be much better at predicting what tiles to pre-render.

I think both threads have an equivalent state of the world with respect to prerendering prediction.  They know scroll history on a per layer basis.  They can sync over animation data once scroll gestures are hooked up to that and know where layers will scroll in the future.  I&apos;ve been seeing them as equivalent.  Am I missing something that makes the impl thread have a much more up-to-date view?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513091</commentid>
    <comment_count>27</comment_count>
    <who name="Eric Penner">epenner</who>
    <bug_when>2011-12-01 14:12:17 -0800</bug_when>
    <thetext>(In reply to comment #24)

I&apos;d also argue we can&apos;t really do anything from the impl thread since we can&apos;t paint anything from there. We might know sooner that we need to pre-paint, but we can&apos;t do anything with that information until webkit is ready to paint something. 

Regarding predictive painting, currently it just stupidly favors top/bottom, but potentially we could pass it a hint to tell it what direction to favor etc. This could come from the scroll direction/velocity. 

&gt; (In reply to comment #23)
&gt; &gt; What&apos;s the reason this pre-painting is currently controlled from within the TiledLayerChromium class?
&gt; &gt; 
&gt; &gt; I&apos;m asking because when I think of pre-painting of tiles I make these two assumptions:
&gt; &gt; 
&gt; &gt; 1. We eventually want the impl thread to distinguish between regular tiles and pre-paint tiles so that it can prioritize them differently.
&gt; 
&gt; I don&apos;t think this is correct - the impl thread does not do any sort of &apos;prioritization&apos; of tiles today. All eviction and painting decisions are made on the main thread.
&gt; 
&gt; &gt; 2. The impl thread will be much better at predicting what tiles to pre-render.
&gt; 
&gt; I disagree here as well, the impl thread might be better at prediction how much to pre-render but it can&apos;t make accurate decisions on a tile or even on a layer basis since the layer tree may change between commits.
&gt; 
&gt; &gt; 
&gt; &gt; Isn&apos;t that correct? Based on those assumptions it seem like this pre-rendering is best driven from CCThreadProxy and the TiledLayerChromium implementation being unaware if it&apos;s rendering regular or pre-render tiles.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513096</commentid>
    <comment_count>28</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-12-01 14:16:28 -0800</bug_when>
    <thetext>(In reply to comment #24)
&gt; (In reply to comment #23)
&gt; &gt; What&apos;s the reason this pre-painting is currently controlled from within the TiledLayerChromium class?
&gt; &gt; 
&gt; &gt; I&apos;m asking because when I think of pre-painting of tiles I make these two assumptions:
&gt; &gt; 
&gt; &gt; 1. We eventually want the impl thread to distinguish between regular tiles and pre-paint tiles so that it can prioritize them differently.
&gt; 
&gt; I don&apos;t think this is correct - the impl thread does not do any sort of &apos;prioritization&apos; of tiles today. All eviction and painting decisions are made on the main thread.

Yes, today it doesn&apos;t but I was thinking of what we want in the future. Wouldn&apos;t it be very useful for the impl thread to know if an upload is for a pre-rendering tile or for a tile that is visible after commit?

&gt; 
&gt; &gt; 2. The impl thread will be much better at predicting what tiles to pre-render.
&gt; 
&gt; I disagree here as well, the impl thread might be better at prediction how much to pre-render but it can&apos;t make accurate decisions on a tile or even on a layer basis since the layer tree may change between commits.

Yes, it can&apos;t make accurate decisions. But does that also mean that the predictions it can make are not at all useful for deciding what tiles to pre-render?

I&apos;m not trying to push this in a different direction or anything. Just trying to figure out in what way my assumptions are wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513138</commentid>
    <comment_count>29</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-12-01 14:44:04 -0800</bug_when>
    <thetext>(In reply to comment #26)
&gt; (In reply to comment #23)
&gt; &gt; What&apos;s the reason this pre-painting is currently controlled from within the TiledLayerChromium class?
&gt; &gt; 
&gt; &gt; I&apos;m asking because when I think of pre-painting of tiles I make these two assumptions:
&gt; &gt; 
&gt; &gt; 1. We eventually want the impl thread to distinguish between regular tiles and pre-paint tiles so that it can prioritize them differently.
&gt; 
&gt; I&apos;ve been thinking about this in a slightly different way.  The impl side needs to distinguish between visible tiles and non-visible tiles, not between regular and pre-paint.

Yes, I&apos;m with you on that. FYI, with my paint-in-parallel-with-upload patch what&apos;s visible and not is unknown to the impl thread when the new uploads start taking place.

&gt; 
&gt; The use case I&apos;m thinking of is that if the impl side scrolls, a pre-painted tile may become a visible tile and should have a higher priority for upload than a regular tile that&apos;s now offscreen.  In other words, the main thread hands over content, and the impl side decides how best to use that content based on the current state of the world.

Sounds good. Painting a few extra tiles which we don&apos;t know if they will be visible or not is starting to make sense to me know. I guess the hard part is deciding which ones to paint.

&gt; 
&gt; &gt; 2. The impl thread will be much better at predicting what tiles to pre-render.
&gt; 
&gt; I think both threads have an equivalent state of the world with respect to prerendering prediction.  They know scroll history on a per layer basis.  They can sync over animation data once scroll gestures are hooked up to that and know where layers will scroll in the future.  I&apos;ve been seeing them as equivalent.  Am I missing something that makes the impl thread have a much more up-to-date view?

I was thinking of information about whatever smooth scrolling animations that could be taking place on the impl thread side. You know this stuff much better than me so if think the impl thread doesn&apos;t have much to offer in form of pre-render prediction, neither do I :) That also makes things much easier.

One last question about this patch. I haven&apos;t looked at the details of this patch yet but did you guys consider re-factoring the layer painting so that we could use the exact same code path for painting pre-render tiles as regular tiles. Maybe by replacing setVisibleRect with setRenderRect? In what ways do the pre-render tiles need to be treated differently than regular tiles within TiledLayerChromium?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513153</commentid>
    <comment_count>30</comment_count>
    <who name="Eric Penner">epenner</who>
    <bug_when>2011-12-01 14:52:11 -0800</bug_when>
    <thetext>(In reply to comment #29)
&gt; (In reply to comment #26)
&gt; &gt; (In reply to comment #23)
&gt; &gt; &gt; What&apos;s the reason this pre-painting is currently controlled from within the TiledLayerChromium class?
&gt; &gt; &gt; 
&gt; &gt; &gt; I&apos;m asking because when I think of pre-painting of tiles I make these two assumptions:
&gt; &gt; &gt; 
&gt; &gt; &gt; 1. We eventually want the impl thread to distinguish between regular tiles and pre-paint tiles so that it can prioritize them differently.
&gt; &gt; 
&gt; &gt; I&apos;ve been thinking about this in a slightly different way.  The impl side needs to distinguish between visible tiles and non-visible tiles, not between regular and pre-paint.
&gt; 
&gt; Yes, I&apos;m with you on that. FYI, with my paint-in-parallel-with-upload patch what&apos;s visible and not is unknown to the impl thread when the new uploads start taking place.
&gt; 
&gt; &gt; 
&gt; &gt; The use case I&apos;m thinking of is that if the impl side scrolls, a pre-painted tile may become a visible tile and should have a higher priority for upload than a regular tile that&apos;s now offscreen.  In other words, the main thread hands over content, and the impl side decides how best to use that content based on the current state of the world.
&gt; 
&gt; Sounds good. Painting a few extra tiles which we don&apos;t know if they will be visible or not is starting to make sense to me know. I guess the hard part is deciding which ones to paint.
&gt; 
&gt; &gt; 
&gt; &gt; &gt; 2. The impl thread will be much better at predicting what tiles to pre-render.
&gt; &gt; 
&gt; &gt; I think both threads have an equivalent state of the world with respect to prerendering prediction.  They know scroll history on a per layer basis.  They can sync over animation data once scroll gestures are hooked up to that and know where layers will scroll in the future.  I&apos;ve been seeing them as equivalent.  Am I missing something that makes the impl thread have a much more up-to-date view?
&gt; 
&gt; I was thinking of information about whatever smooth scrolling animations that could be taking place on the impl thread side. You know this stuff much better than me so if think the impl thread doesn&apos;t have much to offer in form of pre-render prediction, neither do I :) That also makes things much easier.
&gt; 
&gt; One last question about this patch. I haven&apos;t looked at the details of this patch yet but did you guys consider re-factoring the layer painting so that we could use the exact same code path for painting pre-render tiles as regular tiles. Maybe by replacing setVisibleRect with setRenderRect? In what ways do the pre-render tiles need to be treated differently than regular tiles within TiledLayerChromium?

Externally it could look the same, but internally pre-painting uses a lot of extra logic to decide what to paint. Whereas the visible paint just paints the entire visible dirty area, pre-painting tries to avoid massive paints (eg from a diagonal scroll), and does the painting over the course of several commits.  This way if the state changes during any of the idle commits it can bail out and start over with the highest priority pre-painting on the next commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513160</commentid>
    <comment_count>31</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-12-01 15:00:30 -0800</bug_when>
    <thetext>(In reply to comment #27)
&gt; (In reply to comment #24)
&gt; 
&gt; I&apos;d also argue we can&apos;t really do anything from the impl thread since we can&apos;t paint anything from there. We might know sooner that we need to pre-paint, but we can&apos;t do anything with that information until webkit is ready to paint something. 

My question was, are we not interested in passing this information from the impl thread to the main thread and use it for predicting tiles to pre-render. I guess the answer is no.

&gt; 
&gt; Regarding predictive painting, currently it just stupidly favors top/bottom, but potentially we could pass it a hint to tell it what direction to favor etc. This could come from the scroll direction/velocity. 

Yes, this is exactly what I was referring to. This kind of hint (which I&apos;m now convinced wouldn&apos;t be coming from the impl thread) is coming from somewhere. It&apos;s a hint that is used for a paint pass. It doesn&apos;t seem to me like something that belong as part of the Layer. Which is why I&apos;m wondering if the area to pre-paint shouldn&apos;t be controlled from somewhere else than inside the TileLayerChromium implementation itself.

&gt; 
&gt; &gt; (In reply to comment #23)
&gt; &gt; &gt; What&apos;s the reason this pre-painting is currently controlled from within the TiledLayerChromium class?
&gt; &gt; &gt; 
&gt; &gt; &gt; I&apos;m asking because when I think of pre-painting of tiles I make these two assumptions:
&gt; &gt; &gt; 
&gt; &gt; &gt; 1. We eventually want the impl thread to distinguish between regular tiles and pre-paint tiles so that it can prioritize them differently.
&gt; &gt; 
&gt; &gt; I don&apos;t think this is correct - the impl thread does not do any sort of &apos;prioritization&apos; of tiles today. All eviction and painting decisions are made on the main thread.
&gt; &gt; 
&gt; &gt; &gt; 2. The impl thread will be much better at predicting what tiles to pre-render.
&gt; &gt; 
&gt; &gt; I disagree here as well, the impl thread might be better at prediction how much to pre-render but it can&apos;t make accurate decisions on a tile or even on a layer basis since the layer tree may change between commits.
&gt; &gt; 
&gt; &gt; &gt; 
&gt; &gt; &gt; Isn&apos;t that correct? Based on those assumptions it seem like this pre-rendering is best driven from CCThreadProxy and the TiledLayerChromium implementation being unaware if it&apos;s rendering regular or pre-render tiles.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513166</commentid>
    <comment_count>32</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-12-01 15:06:47 -0800</bug_when>
    <thetext>(In reply to comment #30)
&gt; (In reply to comment #29)
&gt; &gt; (In reply to comment #26)
&gt; &gt; &gt; (In reply to comment #23)
&gt; &gt; &gt; &gt; What&apos;s the reason this pre-painting is currently controlled from within the TiledLayerChromium class?
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; I&apos;m asking because when I think of pre-painting of tiles I make these two assumptions:
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; 1. We eventually want the impl thread to distinguish between regular tiles and pre-paint tiles so that it can prioritize them differently.
&gt; &gt; &gt; 
&gt; &gt; &gt; I&apos;ve been thinking about this in a slightly different way.  The impl side needs to distinguish between visible tiles and non-visible tiles, not between regular and pre-paint.
&gt; &gt; 
&gt; &gt; Yes, I&apos;m with you on that. FYI, with my paint-in-parallel-with-upload patch what&apos;s visible and not is unknown to the impl thread when the new uploads start taking place.
&gt; &gt; 
&gt; &gt; &gt; 
&gt; &gt; &gt; The use case I&apos;m thinking of is that if the impl side scrolls, a pre-painted tile may become a visible tile and should have a higher priority for upload than a regular tile that&apos;s now offscreen.  In other words, the main thread hands over content, and the impl side decides how best to use that content based on the current state of the world.
&gt; &gt; 
&gt; &gt; Sounds good. Painting a few extra tiles which we don&apos;t know if they will be visible or not is starting to make sense to me know. I guess the hard part is deciding which ones to paint.
&gt; &gt; 
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; 2. The impl thread will be much better at predicting what tiles to pre-render.
&gt; &gt; &gt; 
&gt; &gt; &gt; I think both threads have an equivalent state of the world with respect to prerendering prediction.  They know scroll history on a per layer basis.  They can sync over animation data once scroll gestures are hooked up to that and know where layers will scroll in the future.  I&apos;ve been seeing them as equivalent.  Am I missing something that makes the impl thread have a much more up-to-date view?
&gt; &gt; 
&gt; &gt; I was thinking of information about whatever smooth scrolling animations that could be taking place on the impl thread side. You know this stuff much better than me so if think the impl thread doesn&apos;t have much to offer in form of pre-render prediction, neither do I :) That also makes things much easier.
&gt; &gt; 
&gt; &gt; One last question about this patch. I haven&apos;t looked at the details of this patch yet but did you guys consider re-factoring the layer painting so that we could use the exact same code path for painting pre-render tiles as regular tiles. Maybe by replacing setVisibleRect with setRenderRect? In what ways do the pre-render tiles need to be treated differently than regular tiles within TiledLayerChromium?
&gt; 
&gt; Externally it could look the same, but internally pre-painting uses a lot of extra logic to decide what to paint. Whereas the visible paint just paints the entire visible dirty area, pre-painting tries to avoid massive paints (eg from a diagonal scroll), and does the painting over the course of several commits.  This way if the state changes during any of the idle commits it can bail out and start over with the highest priority pre-painting on the next commit.

I wondering if we couldn&apos;t make it look the same internally, and instead look different externally instead of the other way around. Basically have all this extra logic be outside the layer implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513175</commentid>
    <comment_count>33</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-12-01 15:12:40 -0800</bug_when>
    <thetext>(In reply to comment #25)
&gt; (From update of attachment 117316 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=117316&amp;action=review
&gt; 
&gt; Thanks for all the feedback! Regarding the texture manager changes, if possible I&apos;d really like to leave that for another CL.

Thinking out loud--given that we only reserve a single-tile apron around the viewport, we&apos;re not going to go too far over the soft reclamation limit.  I&apos;m not that happy with the LRU behavior this causes, but maybe it&apos;s ok to evict previously visible content to make scrolling faster. We probably need a larger discussion about what sort of LRU behavior the texture manager needs.

I&apos;d been thinking that it was necessary to have those texture manager changes first, but I think I&apos;ve convinced myself that this could land first.

&gt; &gt;&gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp:355
&gt; &gt;&gt; +                m_skipsIdlePaint = true;
&gt; &gt; 
&gt; &gt; What happened to the idea of removing m_skipsIdlePaint and setting the paint rect to empty here? If you don&apos;t set the paint rect to empty here, you&apos;re going to get an assert in updateCompositorResources if you&apos;ve painted any tiles.
&gt; &gt; 
&gt; &gt; On that note, can you add a test that involves idle painting hitting the memory limit?
&gt; 
&gt; Sorry, I misunderstood and thought you were okay with it.
&gt; 
&gt; The empty paint-rect isn&apos;t sufficient to replace m_skipsIdlePaint. We need to detect if we are done idle painting in needsIdlePaint(). The function would always return true for an empty paint-rect, resulting in infinite SetNeedsCommit calls. m_skipsIdlePaint clarifies that we don&apos;t need to paint anymore, even though there is plenty of dirty tiles remaining outside the current paint rect. 

Ok, sure--sorry for bringing this quibble back up.  Using the flag is fine as-is, although I&apos;d still love a test where we hit the texture limit and stop idle painting so that nobody breaks this in the future.  :)

&gt; Also, note that we don&apos;t set m_requestedUpdateRect or m_paintRect if we return early from this function. This will result in early exit from updateCompositorResources on the first line.

Oh, quite right.  Sorry for my misunderstanding.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513195</commentid>
    <comment_count>34</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-12-01 15:29:03 -0800</bug_when>
    <thetext>(In reply to comment #31)
&gt; (In reply to comment #27)

&gt; &gt; Regarding predictive painting, currently it just stupidly favors top/bottom, but potentially we could pass it a hint to tell it what direction to favor etc. This could come from the scroll direction/velocity. 
&gt; 
&gt; Yes, this is exactly what I was referring to. This kind of hint (which I&apos;m now convinced wouldn&apos;t be coming from the impl thread) is coming from somewhere. It&apos;s a hint that is used for a paint pass. It doesn&apos;t seem to me like something that belong as part of the Layer. Which is why I&apos;m wondering if the area to pre-paint shouldn&apos;t be controlled from somewhere else than inside the TileLayerChromium implementation itself.

It&apos;s a hint that the layer could calculate itself, I think.  It knows historical scroll positions.  It could be aware of how it&apos;s being animated, but that system doesn&apos;t exist yet so I&apos;m just making that up.

(In reply to comment #32)
&gt; (In reply to comment #30)
&gt; &gt; Externally it could look the same, but internally pre-painting uses a lot of extra logic to decide what to paint. Whereas the visible paint just paints the entire visible dirty area, pre-painting tries to avoid massive paints (eg from a diagonal scroll), and does the painting over the course of several commits.  This way if the state changes during any of the idle commits it can bail out and start over with the highest priority pre-painting on the next commit.
&gt; 
&gt; I wondering if we couldn&apos;t make it look the same internally, and instead look different externally instead of the other way around. Basically have all this extra logic be outside the layer implementation.

I would like to do it this way, but a prerequisite is making painting into an SkPicture the default path.  That way we don&apos;t have to pay the rasterization costs for a very large paint rect.

However, getting prepainting in the codebase to make scrolling faster is a more immediate priority.  I didn&apos;t want to require writing a paint aggregator to handle multiple paint regions that we&apos;d just throw away when we moved to your SkPicture-based painting as the default.  So, to solve this in the short term, prepainting only happens when other painting hasn&apos;t happened (which the layer knows about) and prepainting only paints a row or column (to prevent large regions of unneeded rasterization).

I think my future view of prepainting (insert handwaving here) is that something else would hand the layer a visible rect and a prepaint rect.  The union of these could be painted into an SkPicture.  Then the layer itself could selectively decide which of these to rasterize, based on proximity to the visible rect and whether or not tiles are valid or not and maybe also based on some scheduling decision of how much rasterization to do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513200</commentid>
    <comment_count>35</comment_count>
      <attachid>117316</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-01 15:34:07 -0800</bug_when>
    <thetext>Comment on attachment 117316
Patch

This looks good to me. It looks like Enne had one more outstanding comment that you were intending to follow up on. Also, this patch didn&apos;t apply cleanly on to ToT on the cr-linux EWS bot, so I suspect it doesn&apos;t apply to ToT currently.

Eric - can you address that last comment and upload a new patch that&apos;s rebaselined to ToT so the bots can verify it?  Then I think we&apos;re ready to land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513221</commentid>
    <comment_count>36</comment_count>
    <who name="Eric Penner">epenner</who>
    <bug_when>2011-12-01 16:00:08 -0800</bug_when>
    <thetext>(In reply to comment #34)
&gt; (In reply to comment #31)
&gt; &gt; (In reply to comment #27)
&gt; 
&gt; &gt; &gt; Regarding predictive painting, currently it just stupidly favors top/bottom, but potentially we could pass it a hint to tell it what direction to favor etc. This could come from the scroll direction/velocity. 
&gt; &gt; 
&gt; &gt; Yes, this is exactly what I was referring to. This kind of hint (which I&apos;m now convinced wouldn&apos;t be coming from the impl thread) is coming from somewhere. It&apos;s a hint that is used for a paint pass. It doesn&apos;t seem to me like something that belong as part of the Layer. Which is why I&apos;m wondering if the area to pre-paint shouldn&apos;t be controlled from somewhere else than inside the TileLayerChromium implementation itself.
&gt; 
&gt; It&apos;s a hint that the layer could calculate itself, I think.  It knows historical scroll positions.  It could be aware of how it&apos;s being animated, but that system doesn&apos;t exist yet so I&apos;m just making that up.
&gt; 

On a related note, I initially planned on setting the pre-paint rect from somewhere outside TiledLayerChromium, but it wasn&apos;t necessary yet because it could be trivially calculated internally. Also, as Enne mentioned, without the SkPicture solution we still need most of the code internally to chop up the paint etc.

Also, if we improve the texture manager, pre-painting prediction can stay dead simple by just expanding to fill the entire memory reclaim limit, with no external hints required, as there would be lots of pre-painted padding for scrolling.

&gt; (In reply to comment #32)
&gt; &gt; (In reply to comment #30)
&gt; &gt; &gt; Externally it could look the same, but internally pre-painting uses a lot of extra logic to decide what to paint. Whereas the visible paint just paints the entire visible dirty area, pre-painting tries to avoid massive paints (eg from a diagonal scroll), and does the painting over the course of several commits.  This way if the state changes during any of the idle commits it can bail out and start over with the highest priority pre-painting on the next commit.
&gt; &gt; 
&gt; &gt; I wondering if we couldn&apos;t make it look the same internally, and instead look different externally instead of the other way around. Basically have all this extra logic be outside the layer implementation.
&gt; 
&gt; I would like to do it this way, but a prerequisite is making painting into an SkPicture the default path.  That way we don&apos;t have to pay the rasterization costs for a very large paint rect.
&gt; 
&gt; However, getting prepainting in the codebase to make scrolling faster is a more immediate priority.  I didn&apos;t want to require writing a paint aggregator to handle multiple paint regions that we&apos;d just throw away when we moved to your SkPicture-based painting as the default.  So, to solve this in the short term, prepainting only happens when other painting hasn&apos;t happened (which the layer knows about) and prepainting only paints a row or column (to prevent large regions of unneeded rasterization).
&gt; 
&gt; I think my future view of prepainting (insert handwaving here) is that something else would hand the layer a visible rect and a prepaint rect.  The union of these could be painted into an SkPicture.  Then the layer itself could selectively decide which of these to rasterize, based on proximity to the visible rect and whether or not tiles are valid or not and maybe also based on some scheduling decision of how much rasterization to do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513224</commentid>
    <comment_count>37</comment_count>
    <who name="Eric Penner">epenner</who>
    <bug_when>2011-12-01 16:01:14 -0800</bug_when>
    <thetext>(In reply to comment #35)
&gt; (From update of attachment 117316 [details])
&gt; This looks good to me. It looks like Enne had one more outstanding comment that you were intending to follow up on. Also, this patch didn&apos;t apply cleanly on to ToT on the cr-linux EWS bot, so I suspect it doesn&apos;t apply to ToT currently.
&gt; 
&gt; Eric - can you address that last comment and upload a new patch that&apos;s rebaselined to ToT so the bots can verify it?  Then I think we&apos;re ready to land.

Will upload shortly. Should I rebase off of webkit master? Or is the gclient branch okay?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513227</commentid>
    <comment_count>38</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-01 16:03:16 -0800</bug_when>
    <thetext>master</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513233</commentid>
    <comment_count>39</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-12-01 16:09:07 -0800</bug_when>
    <thetext>(In reply to comment #34)
&gt; (In reply to comment #31)
&gt; &gt; (In reply to comment #27)
&gt; 
&gt; &gt; &gt; Regarding predictive painting, currently it just stupidly favors top/bottom, but potentially we could pass it a hint to tell it what direction to favor etc. This could come from the scroll direction/velocity. 
&gt; &gt; 
&gt; &gt; Yes, this is exactly what I was referring to. This kind of hint (which I&apos;m now convinced wouldn&apos;t be coming from the impl thread) is coming from somewhere. It&apos;s a hint that is used for a paint pass. It doesn&apos;t seem to me like something that belong as part of the Layer. Which is why I&apos;m wondering if the area to pre-paint shouldn&apos;t be controlled from somewhere else than inside the TileLayerChromium implementation itself.
&gt; 
&gt; It&apos;s a hint that the layer could calculate itself, I think.  It knows historical scroll positions.  It could be aware of how it&apos;s being animated, but that system doesn&apos;t exist yet so I&apos;m just making that up.

Ok, for some reason I felt like this system and these calculations would not belong in the layer itself. But I guess that was mainly based on the false assumption that we would be using information provided by the impl thread.

&gt; 
&gt; (In reply to comment #32)
&gt; &gt; (In reply to comment #30)
&gt; &gt; &gt; Externally it could look the same, but internally pre-painting uses a lot of extra logic to decide what to paint. Whereas the visible paint just paints the entire visible dirty area, pre-painting tries to avoid massive paints (eg from a diagonal scroll), and does the painting over the course of several commits.  This way if the state changes during any of the idle commits it can bail out and start over with the highest priority pre-painting on the next commit.
&gt; &gt; 
&gt; &gt; I wondering if we couldn&apos;t make it look the same internally, and instead look different externally instead of the other way around. Basically have all this extra logic be outside the layer implementation.
&gt; 
&gt; I would like to do it this way, but a prerequisite is making painting into an SkPicture the default path.  That way we don&apos;t have to pay the rasterization costs for a very large paint rect.
&gt; 
&gt; However, getting prepainting in the codebase to make scrolling faster is a more immediate priority.  I didn&apos;t want to require writing a paint aggregator to handle multiple paint regions that we&apos;d just throw away when we moved to your SkPicture-based painting as the default.  So, to solve this in the short term, prepainting only happens when other painting hasn&apos;t happened (which the layer knows about) and prepainting only paints a row or column (to prevent large regions of unneeded rasterization).

Ah, OK. Sounds like we have the same design in mind for the long term. Didn&apos;t know this was such an immediate priority. The per-tile painting definitely simplifies all this.

&gt; 
&gt; I think my future view of prepainting (insert handwaving here) is that something else would hand the layer a visible rect and a prepaint rect.  The union of these could be painted into an SkPicture.  Then the layer itself could selectively decide which of these to rasterize, based on proximity to the visible rect and whether or not tiles are valid or not and maybe also based on some scheduling decision of how much rasterization to do.

Sounds good. This is very much along the lines of how I imagined it would work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513268</commentid>
    <comment_count>40</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-12-01 16:47:34 -0800</bug_when>
    <thetext>(In reply to comment #39)

&gt; Ah, OK. Sounds like we have the same design in mind for the long term. Didn&apos;t know this was such an immediate priority. The per-tile painting definitely simplifies all this.

Oh, good.  I&apos;m glad we&apos;re on the same page.

Regarding timing: Making per-tile painting the default requires getting Skia-on-Mac to stick and fixing some Skia bugs in SkPicture at least.  Even then, we&apos;ll probably want to live with both texture uploaders for a while so that we can safely turn it off if it kicks up too much dust.  I think there is general agreement for making per-tile painting the default path and ditching the current default texture uploader as soon as possible, though.

So, going down that path is probably a ways out, and I think we need prepainting for faster scrolling before that.  We&apos;ve needed it for a while now, honestly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513329</commentid>
    <comment_count>41</comment_count>
      <attachid>117316</attachid>
    <who name="Eric Penner">epenner</who>
    <bug_when>2011-12-01 17:33:23 -0800</bug_when>
    <thetext>Comment on attachment 117316
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:406
&gt;              ASSERT(layer-&gt;opacity());

I just remembered, this is the ASSERT that was occurring during unit tests. The unit test specifically sets opacity to zero during paint. Then for idle paint, this ASSERT is triggered.  I will remove this ASSERT with the above conditional.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513398</commentid>
    <comment_count>42</comment_count>
      <attachid>117543</attachid>
    <who name="Eric Penner">epenner</who>
    <bug_when>2011-12-01 19:18:20 -0800</bug_when>
    <thetext>Created attachment 117543
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514023</commentid>
    <comment_count>43</comment_count>
      <attachid>117543</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-12-02 12:48:47 -0800</bug_when>
    <thetext>Comment on attachment 117543
Patch

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

Thanks for the extra test.  :)

&gt; Source/WebCore/ChangeLog:6
&gt; +        Reviewed by: enne@google.com

Whoa, there.  I&apos;m not a WebKit reviewer. This should say &quot;Reviewed by NOBODY (OOPS!).&quot; When somebody flips the R+ bit on the patch and the commit queue lands it, it will update the ChangeLog automagically.

&gt; Source/WebKit/chromium/ChangeLog:6
&gt; +        Reviewed by: enne@google.com

Same here.

&gt; Source/WebCore/platform/graphics/chromium/ContentLayerChromium.cpp:122
&gt; +    if (needsIdlePaint(layerRect))
&gt; +        setNeedsCommit();

I did some manual testing of this patch, and I believe this is incorrect.  setNeedsCommit needs to be set after the commit has begun in updateCompositorResources, not during paint.  This is a no-op as written.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514026</commentid>
    <comment_count>44</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-12-02 12:50:48 -0800</bug_when>
    <thetext>(In reply to comment #43)

&gt; &gt; Source/WebCore/platform/graphics/chromium/ContentLayerChromium.cpp:122
&gt; &gt; +    if (needsIdlePaint(layerRect))
&gt; &gt; +        setNeedsCommit();
&gt; 
&gt; I did some manual testing of this patch, and I believe this is incorrect.  setNeedsCommit needs to be set after the commit has begun in updateCompositorResources, not during paint.  This is a no-op as written.

If you want to write a test for this behavior, CCLayerTreeHostTest (kind of misnamed, it&apos;s really a proxy test) would be a good place for it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514052</commentid>
    <comment_count>45</comment_count>
    <who name="Eric Penner">epenner</who>
    <bug_when>2011-12-02 13:12:44 -0800</bug_when>
    <thetext>(In reply to comment #43)
&gt; (From update of attachment 117543 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=117543&amp;action=review
&gt; 
&gt; Thanks for the extra test.  :)
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:6
&gt; &gt; +        Reviewed by: enne@google.com
&gt; 
&gt; Whoa, there.  I&apos;m not a WebKit reviewer. This should say &quot;Reviewed by NOBODY (OOPS!).&quot; When somebody flips the R+ bit on the patch and the commit queue lands it, it will update the ChangeLog automagically.
&gt; 
&gt; &gt; Source/WebKit/chromium/ChangeLog:6
&gt; &gt; +        Reviewed by: enne@google.com
&gt; 
&gt; Same here.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/ContentLayerChromium.cpp:122
&gt; &gt; +    if (needsIdlePaint(layerRect))
&gt; &gt; +        setNeedsCommit();
&gt; 
&gt; I did some manual testing of this patch, and I believe this is incorrect.  setNeedsCommit needs to be set after the commit has begun in updateCompositorResources, not during paint.  This is a no-op as written.

I gave that some thought (if the needs-commit call was late enough), but for me it was consistently pre-painting when I expected (I could tell via logging). Do you think that is just lucky and something else is triggering the additional commits?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514062</commentid>
    <comment_count>46</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-12-02 13:27:27 -0800</bug_when>
    <thetext>(In reply to comment #45)

&gt; &gt; &gt; Source/WebCore/platform/graphics/chromium/ContentLayerChromium.cpp:122
&gt; &gt; &gt; +    if (needsIdlePaint(layerRect))
&gt; &gt; &gt; +        setNeedsCommit();
&gt; &gt; 
&gt; &gt; I did some manual testing of this patch, and I believe this is incorrect.  setNeedsCommit needs to be set after the commit has begun in updateCompositorResources, not during paint.  This is a no-op as written.
&gt; 
&gt; I gave that some thought (if the needs-commit call was late enough), but for me it was consistently pre-painting when I expected (I could tell via logging). Do you think that is just lucky and something else is triggering the additional commits?

I was logging with the threaded compositor enabled and didn&apos;t see any idle painting occurring except via commits triggered via scrolling.  I would have expected to see several idle paints in a row without any scrolling-related commits, but that didn&apos;t seem to occur.  It&apos;s possible I&apos;m mistaken, or that there&apos;s a bug somewhere else?  I&apos;ll take another look.

A test case would make me more confident that this worked as expected, especially if it ran against both proxies.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514124</commentid>
    <comment_count>47</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-12-02 14:06:43 -0800</bug_when>
    <thetext>(In reply to comment #46)

&gt; I was logging with the threaded compositor enabled and didn&apos;t see any idle painting occurring except via commits triggered via scrolling.

Ok.  I&apos;ve convinced myself that setNeedsCommit is in the right place, but there&apos;s another bug that prevents it from working properly.

TiledLayerChromium::setNeedsCommit is implemented by LayerChromium::setNeedsCommit.  It calls CCLayerDelegate::notifySyncRequired.  This forwards to GraphicsLayerChromium::notifySyncRequired, which calls GraphicLayerClient::notifySyncRequired.  This forwards to NonCompositedContentHost::notifySyncRequired, which is a no-op.  Sad trombone noise.

Non-root GraphicsLayers have a RenderLayerCompositor as their client, which can talk to the chrome client, which can call WebViewImpl::setRootLayerNeedsDisplay, and then call CCLayerTreeHost::setNeedsCommit.

NonCompositedContentHost::notifySyncRequired somehow needs to forward to CCLayerTreeHost::setNeedsCommit, but I&apos;m not sure how best to connect those pieces.  Maybe jamesr has a thought?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514176</commentid>
    <comment_count>48</comment_count>
    <who name="Eric Penner">epenner</who>
    <bug_when>2011-12-02 14:45:28 -0800</bug_when>
    <thetext>(In reply to comment #47)
&gt; (In reply to comment #46)
&gt; 
&gt; &gt; I was logging with the threaded compositor enabled and didn&apos;t see any idle painting occurring except via commits triggered via scrolling.
&gt; 
&gt; Ok.  I&apos;ve convinced myself that setNeedsCommit is in the right place, but there&apos;s another bug that prevents it from working properly.
&gt; 
&gt; TiledLayerChromium::setNeedsCommit is implemented by LayerChromium::setNeedsCommit.  It calls CCLayerDelegate::notifySyncRequired.  This forwards to GraphicsLayerChromium::notifySyncRequired, which calls GraphicLayerClient::notifySyncRequired.  This forwards to NonCompositedContentHost::notifySyncRequired, which is a no-op.  Sad trombone noise.
&gt; 
&gt; Non-root GraphicsLayers have a RenderLayerCompositor as their client, which can talk to the chrome client, which can call WebViewImpl::setRootLayerNeedsDisplay, and then call CCLayerTreeHost::setNeedsCommit.
&gt; 
&gt; NonCompositedContentHost::notifySyncRequired somehow needs to forward to CCLayerTreeHost::setNeedsCommit, but I&apos;m not sure how best to connect those pieces.  Maybe jamesr has a thought?

In my testing it was doing what we expect. I think on &quot;my machine&quot; something is masking this bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514192</commentid>
    <comment_count>49</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-02 14:52:05 -0800</bug_when>
    <thetext>(In reply to comment #47)
&gt; (In reply to comment #46)
&gt; 
&gt; &gt; I was logging with the threaded compositor enabled and didn&apos;t see any idle painting occurring except via commits triggered via scrolling.
&gt; 
&gt; Ok.  I&apos;ve convinced myself that setNeedsCommit is in the right place, but there&apos;s another bug that prevents it from working properly.
&gt; 
&gt; TiledLayerChromium::setNeedsCommit is implemented by LayerChromium::setNeedsCommit.  It calls CCLayerDelegate::notifySyncRequired.  This forwards to GraphicsLayerChromium::notifySyncRequired, which calls GraphicLayerClient::notifySyncRequired.  This forwards to NonCompositedContentHost::notifySyncRequired, which is a no-op.  Sad trombone noise.
&gt; 
&gt; Non-root GraphicsLayers have a RenderLayerCompositor as their client, which can talk to the chrome client, which can call WebViewImpl::setRootLayerNeedsDisplay, and then call CCLayerTreeHost::setNeedsCommit.
&gt; 
&gt; NonCompositedContentHost::notifySyncRequired somehow needs to forward to CCLayerTreeHost::setNeedsCommit, but I&apos;m not sure how best to connect those pieces.  Maybe jamesr has a thought?


Ooohh, this is fun and new and exciting :). So historically the only change on the NonCompositedContentHost&apos;s stuff that would trigger a new frame is invalidation, which is routed to WebViewImpl which kicks a new frame.  If we want to trigger a commit without any paint damage being done we&apos;ll need to wire up a new notification path. I don&apos;t think this is too difficult - we just need to wire up a path from NCCH to CCLTH.

Maybe this goes on the painter interface?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514213</commentid>
    <comment_count>50</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-12-02 15:09:32 -0800</bug_when>
    <thetext>(In reply to comment #49)
&gt; (In reply to comment #47)
&gt; &gt; (In reply to comment #46)
&gt; &gt; 
&gt; &gt; &gt; I was logging with the threaded compositor enabled and didn&apos;t see any idle painting occurring except via commits triggered via scrolling.
&gt; &gt; 
&gt; &gt; Ok.  I&apos;ve convinced myself that setNeedsCommit is in the right place, but there&apos;s another bug that prevents it from working properly.
&gt; &gt; 
&gt; &gt; TiledLayerChromium::setNeedsCommit is implemented by LayerChromium::setNeedsCommit.  It calls CCLayerDelegate::notifySyncRequired.  This forwards to GraphicsLayerChromium::notifySyncRequired, which calls GraphicLayerClient::notifySyncRequired.  This forwards to NonCompositedContentHost::notifySyncRequired, which is a no-op.  Sad trombone noise.
&gt; &gt; 
&gt; &gt; Non-root GraphicsLayers have a RenderLayerCompositor as their client, which can talk to the chrome client, which can call WebViewImpl::setRootLayerNeedsDisplay, and then call CCLayerTreeHost::setNeedsCommit.
&gt; &gt; 
&gt; &gt; NonCompositedContentHost::notifySyncRequired somehow needs to forward to CCLayerTreeHost::setNeedsCommit, but I&apos;m not sure how best to connect those pieces.  Maybe jamesr has a thought?
&gt; 
&gt; 
&gt; Ooohh, this is fun and new and exciting :). So historically the only change on the NonCompositedContentHost&apos;s stuff that would trigger a new frame is invalidation, which is routed to WebViewImpl which kicks a new frame.  If we want to trigger a commit without any paint damage being done we&apos;ll need to wire up a new notification path. I don&apos;t think this is too difficult - we just need to wire up a path from NCCH to CCLTH.

What about having LayerChromium just tell LTH that it needs a commit directly? Ignoring the zoom transform stuff in WVI (which I think we can reroute), I don&apos;t think any work gets done along that path.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515422</commentid>
    <comment_count>51</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-12-05 14:54:13 -0800</bug_when>
    <thetext>Once bug 73711 lands, this patch will start causing assertions in DumpRenderTree.  The reason is painting will cause more idle painting to be scheduled and WebViewHost::paintInvalidatedRegion only allows this to happen 3 times before asserting that something is amiss.

You can repro this by building DumpRenderTree in debug and running &quot;new-run-webkit-tests --debug --chromium compositing&quot;.

I&apos;m not convinced that we should adjust the limits in the test, but we could just modify prepainting to not occur during the compositeAndReadback path.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517549</commentid>
    <comment_count>52</comment_count>
      <attachid>118421</attachid>
    <who name="Eric Penner">epenner</who>
    <bug_when>2011-12-08 10:50:05 -0800</bug_when>
    <thetext>Created attachment 118421
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517555</commentid>
    <comment_count>53</comment_count>
    <who name="Eric Penner">epenner</who>
    <bug_when>2011-12-08 10:51:41 -0800</bug_when>
    <thetext>This patch fixes the DumpRenderTree issue but I have only changed CCSingleThreadProxy. I will change CCThreadProxy too, but I wanted to get feedback if this is what you had in mind.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517627</commentid>
    <comment_count>54</comment_count>
      <attachid>118436</attachid>
    <who name="Eric Penner">epenner</who>
    <bug_when>2011-12-08 11:49:26 -0800</bug_when>
    <thetext>Created attachment 118436
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517664</commentid>
    <comment_count>55</comment_count>
      <attachid>118436</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-08 12:13:22 -0800</bug_when>
    <thetext>Comment on attachment 118436
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:217
&gt; +    commitIfNeeded(true);

we use 2-value enums for this instead of bools because it&apos;s impossible to guess what &apos;true&apos; or &apos;false&apos; mean when looking at the callsite alone.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp:301
&gt; +    m_mainThreadProxy-&gt;postTask(createBeginFrameAndCommitTaskOnImplThread(true));

same comment here re. enum vs bool. what does &apos;true&apos; mean here? I can&apos;t tell without looking up the definition of cBFACTOIT</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517690</commentid>
    <comment_count>56</comment_count>
    <who name="Eric Penner">epenner</who>
    <bug_when>2011-12-08 12:33:17 -0800</bug_when>
    <thetext>(In reply to comment #55)
&gt; (From update of attachment 118436 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=118436&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:217
&gt; &gt; +    commitIfNeeded(true);
&gt; 
&gt; we use 2-value enums for this instead of bools because it&apos;s impossible to guess what &apos;true&apos; or &apos;false&apos; mean when looking at the callsite alone.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp:301
&gt; &gt; +    m_mainThreadProxy-&gt;postTask(createBeginFrameAndCommitTaskOnImplThread(true));
&gt; 
&gt; same comment here re. enum vs bool. what does &apos;true&apos; mean here? I can&apos;t tell without looking up the definition of cBFACTOIT

I will fix that to use an enum if I keep it that way. I&apos;m also not a huge fan of needing the triggerIdlePaints parameter in the Proxy at all, so I&apos;ve been trying to find a way to contain it in CCLayerTreeHost.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517726</commentid>
    <comment_count>57</comment_count>
      <attachid>118457</attachid>
    <who name="Eric Penner">epenner</who>
    <bug_when>2011-12-08 13:19:11 -0800</bug_when>
    <thetext>Created attachment 118457
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517743</commentid>
    <comment_count>58</comment_count>
    <who name="Eric Penner">epenner</who>
    <bug_when>2011-12-08 13:36:14 -0800</bug_when>
    <thetext>I think this addresses everything (and much more simple than the last patch). 

I don&apos;t have a test to insure the pre-painting setNeedsCommit is indeed triggering a new commit, but I believe this is covered by this new test that insures setNeedsCommit is working:
https://bugs.webkit.org/show_bug.cgi?id=73711
checkNonCompositedContentPropertyChangeCausesCommit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518489</commentid>
    <comment_count>59</comment_count>
      <attachid>118457</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-12-09 14:07:58 -0800</bug_when>
    <thetext>Comment on attachment 118457
Patch

This looks pretty reasonable to me.  James, do you have more thoughts?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518730</commentid>
    <comment_count>60</comment_count>
      <attachid>118457</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-09 18:42:08 -0800</bug_when>
    <thetext>Comment on attachment 118457
Patch

This does seem pretty reasonable. I need to take a more careful pass before officially setting the review flag, will hopefully get to that this weekend.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518735</commentid>
    <comment_count>61</comment_count>
      <attachid>118678</attachid>
    <who name="Eric Penner">epenner</who>
    <bug_when>2011-12-09 18:52:58 -0800</bug_when>
    <thetext>Created attachment 118678
Minor_Tweak_Plus_Rebase</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519874</commentid>
    <comment_count>62</comment_count>
      <attachid>118678</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-12 22:46:04 -0800</bug_when>
    <thetext>Comment on attachment 118678
Minor_Tweak_Plus_Rebase

Looks like a good start. R=me. Would you mind writing up the expected behavior of this somewhere? I believe I understand it today but I will probably forget soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521454</commentid>
    <comment_count>63</comment_count>
    <who name="Eric Penner">epenner</who>
    <bug_when>2011-12-14 16:40:34 -0800</bug_when>
    <thetext>I&apos;ll write up a description in Google docs if that is okay. 

I just realized there is a potential bug with this CL in out of memory situations. I haven&apos;t reproduced it, but in theory it seems possible:

When almost out of memory, a fullscreen layer could evict some old pre-painted tiles (they aren&apos;t yet protected), but then run out of memory itself, returning the tiles to be used by pre-painting again.  This could result in endless commits.

Two solutions would be:
1.) Don&apos;t return memory when a visible layer runs out of memory
2.) Use my next CL in which pre-painting fails at a lower memory threshold. 

I can&apos;t really think of a unit test for this since it requires such specific circumstances. 

(In reply to comment #62)
&gt; (From update of attachment 118678 [details])
&gt; Looks like a good start. R=me. Would you mind writing up the expected behavior of this somewhere? I believe I understand it today but I will probably forget soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522370</commentid>
    <comment_count>64</comment_count>
      <attachid>119526</attachid>
    <who name="Eric Penner">epenner</who>
    <bug_when>2011-12-15 17:16:28 -0800</bug_when>
    <thetext>Created attachment 119526
Set memory limit for prepainting</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522452</commentid>
    <comment_count>65</comment_count>
      <attachid>119542</attachid>
    <who name="Eric Penner">epenner</who>
    <bug_when>2011-12-15 19:24:12 -0800</bug_when>
    <thetext>Created attachment 119542
Added fix from 74471 and fixed unit tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522463</commentid>
    <comment_count>66</comment_count>
      <attachid>119545</attachid>
    <who name="Eric Penner">epenner</who>
    <bug_when>2011-12-15 19:48:20 -0800</bug_when>
    <thetext>Created attachment 119545
Rebasing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522562</commentid>
    <comment_count>67</comment_count>
      <attachid>119545</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-15 23:10:25 -0800</bug_when>
    <thetext>Comment on attachment 119545
Rebasing

Patch looks good, but the EWS bots say this doesn&apos;t apply to ToT. I probably gave you these merge conflicts. Sorry!

Would you mind rebasing+uploading again so the bots can land it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522839</commentid>
    <comment_count>68</comment_count>
    <who name="Eric Penner">epenner</who>
    <bug_when>2011-12-16 10:42:35 -0800</bug_when>
    <thetext>(In reply to comment #67)
&gt; (From update of attachment 119545 [details])
&gt; Patch looks good, but the EWS bots say this doesn&apos;t apply to ToT. I probably gave you these merge conflicts. Sorry!
&gt; 
&gt; Would you mind rebasing+uploading again so the bots can land it?

No prob, I&apos;ll rebase again now. I&apos;m also curious if you know a better workflow for this. Last night I noticed it failed, but doing &apos;gclient sync&apos; and &apos;sync-webkit-git.py&apos; didn&apos;t pull the new changes (in either gclient or master branch).  So I did a &apos;git pull --rebase origin master&apos; which did pull the new changes, but then webkit-patch upload pulled all the new changes into my patch!  Do you know what how to update the &quot;base&quot; used by webkit-patch upload?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522845</commentid>
    <comment_count>69</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-16 10:55:23 -0800</bug_when>
    <thetext>(In reply to comment #68)
&gt; (In reply to comment #67)
&gt; &gt; (From update of attachment 119545 [details] [details])
&gt; &gt; Patch looks good, but the EWS bots say this doesn&apos;t apply to ToT. I probably gave you these merge conflicts. Sorry!
&gt; &gt; 
&gt; &gt; Would you mind rebasing+uploading again so the bots can land it?
&gt; 
&gt; No prob, I&apos;ll rebase again now. I&apos;m also curious if you know a better workflow for this. Last night I noticed it failed, but doing &apos;gclient sync&apos; and &apos;sync-webkit-git.py&apos; didn&apos;t pull the new changes (in either gclient or master branch).  So I did a &apos;git pull --rebase origin master&apos; which did pull the new changes, but then webkit-patch upload pulled all the new changes into my patch!  Do you know what how to update the &quot;base&quot; used by webkit-patch upload?

webkit-patch tries to figure out the best base using git merge-base against your svn remote, if it&apos;s set, or refs/remotes/origin/master. You can always override it by providing a -g to webkit-patch upload (for example webkit-patch upload -g origin/master..HEAD)

My workflow is to have my &apos;origin&apos; remote point to git://git.webkit.org/WebKit.git, keep a local branch &apos;master&apos; that always refers to refs/heads/master without any local changes, and then to update a feature branch I pull to master and then merge master into my branch (or rebase the branch on top of master, if you prefer rebase to merge).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522848</commentid>
    <comment_count>70</comment_count>
    <who name="Eric Penner">epenner</who>
    <bug_when>2011-12-16 11:07:19 -0800</bug_when>
    <thetext>(In reply to comment #69)
&gt; (In reply to comment #68)
&gt; &gt; (In reply to comment #67)
&gt; &gt; &gt; (From update of attachment 119545 [details] [details] [details])
&gt; &gt; &gt; Patch looks good, but the EWS bots say this doesn&apos;t apply to ToT. I probably gave you these merge conflicts. Sorry!
&gt; &gt; &gt; 
&gt; &gt; &gt; Would you mind rebasing+uploading again so the bots can land it?
&gt; &gt; 
&gt; &gt; No prob, I&apos;ll rebase again now. I&apos;m also curious if you know a better workflow for this. Last night I noticed it failed, but doing &apos;gclient sync&apos; and &apos;sync-webkit-git.py&apos; didn&apos;t pull the new changes (in either gclient or master branch).  So I did a &apos;git pull --rebase origin master&apos; which did pull the new changes, but then webkit-patch upload pulled all the new changes into my patch!  Do you know what how to update the &quot;base&quot; used by webkit-patch upload?
&gt; 
&gt; webkit-patch tries to figure out the best base using git merge-base against your svn remote, if it&apos;s set, or refs/remotes/origin/master. You can always override it by providing a -g to webkit-patch upload (for example webkit-patch upload -g origin/master..HEAD)
&gt; 
&gt; My workflow is to have my &apos;origin&apos; remote point to git://git.webkit.org/WebKit.git, keep a local branch &apos;master&apos; that always refers to refs/heads/master without any local changes, and then to update a feature branch I pull to master and then merge master into my branch (or rebase the branch on top of master, if you prefer rebase to merge).

Thanks, I&apos;ve got the same origin... It appears to work after doing a plain &quot;git fetch&quot; followed by git rebase origin/master, as opposed to my other method (git pull --rebase origin master). I bet my other method wasn&apos;t updating the refs/remotes/origin/master.  Will be uploaded in a sec here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522855</commentid>
    <comment_count>71</comment_count>
      <attachid>119637</attachid>
    <who name="Eric Penner">epenner</who>
    <bug_when>2011-12-16 11:12:28 -0800</bug_when>
    <thetext>Created attachment 119637
rebasing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522992</commentid>
    <comment_count>72</comment_count>
    <who name="Eric Penner">epenner</who>
    <bug_when>2011-12-16 13:42:33 -0800</bug_when>
    <thetext>All green. Ready to go?

(In reply to comment #71)
&gt; Created an attachment (id=119637) [details]
&gt; rebasing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522997</commentid>
    <comment_count>73</comment_count>
      <attachid>119637</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-16 13:48:06 -0800</bug_when>
    <thetext>Comment on attachment 119637
rebasing

Yes! Flags flipped, bot should pick it up and land within a few hours.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522999</commentid>
    <comment_count>74</comment_count>
      <attachid>119637</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-16 13:50:36 -0800</bug_when>
    <thetext>Comment on attachment 119637
rebasing

Rejecting attachment 119637 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 1

ERROR: /mnt/git/webkit-commit-queue/Source/WebCore/ChangeLog neither lists a valid reviewer nor contains the string &quot;Unreviewed&quot; or &quot;Rubber stamp&quot; (case insensitive).

Full output: http://queues.webkit.org/results/10900816</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523003</commentid>
    <comment_count>75</comment_count>
      <attachid>119637</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-16 13:54:15 -0800</bug_when>
    <thetext>Comment on attachment 119637
rebasing

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

Ah, nope - the ChangeLog formatting is off and the script is very pick about it.

&gt; Source/WebCore/ChangeLog:6
&gt; +        No new tests. (OOPS!)

You need to remove this line and describe the tests (naming the gtest covering this is good) - this (OOPS!) will fail an svn presubmit hook

You also need to have the &quot;Reviewed by NOBODY (OOPS!).&quot; line still in here. A script will replace this with &quot;Reviewed by James Robinson.&quot; since I set the review+ flag.

&gt; Source/WebCore/ChangeLog:9
&gt; +This patch pre-paints a one tile border around the visible tiles when
&gt; +no other visible painting occurs, and when memory is available.

this should be intended</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523008</commentid>
    <comment_count>76</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-16 13:58:46 -0800</bug_when>
    <thetext>(In reply to comment #75)
&gt; this should be intended

s/intended/indented/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523009</commentid>
    <comment_count>77</comment_count>
      <attachid>119637</attachid>
    <who name="Eric Penner">epenner</who>
    <bug_when>2011-12-16 13:59:02 -0800</bug_when>
    <thetext>Comment on attachment 119637
rebasing

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

&gt;&gt; Source/WebCore/ChangeLog:6
&gt;&gt; +        No new tests. (OOPS!)
&gt; 
&gt; You need to remove this line and describe the tests (naming the gtest covering this is good) - this (OOPS!) will fail an svn presubmit hook
&gt; 
&gt; You also need to have the &quot;Reviewed by NOBODY (OOPS!).&quot; line still in here. A script will replace this with &quot;Reviewed by James Robinson.&quot; since I set the review+ flag.

Arg. The one time I forgot!  Removing.

&gt;&gt; Source/WebCore/ChangeLog:9
&gt;&gt; +no other visible painting occurs, and when memory is available.
&gt; 
&gt; this should be intended

done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523014</commentid>
    <comment_count>78</comment_count>
      <attachid>119666</attachid>
    <who name="Eric Penner">epenner</who>
    <bug_when>2011-12-16 14:04:45 -0800</bug_when>
    <thetext>Created attachment 119666
Removing oops and indenting</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523016</commentid>
    <comment_count>79</comment_count>
      <attachid>119666</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-16 14:07:59 -0800</bug_when>
    <thetext>Comment on attachment 119666
Removing oops and indenting

fingers crossed...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523150</commentid>
    <comment_count>80</comment_count>
      <attachid>119666</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-16 16:27:49 -0800</bug_when>
    <thetext>Comment on attachment 119666
Removing oops and indenting

Clearing flags on attachment: 119666

Committed r103129: &lt;http://trac.webkit.org/changeset/103129&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523151</commentid>
    <comment_count>81</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-16 16:27:59 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523341</commentid>
    <comment_count>82</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-12-17 12:09:50 -0800</bug_when>
    <thetext>Committed r103154: &lt;http://trac.webkit.org/changeset/103154&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>115730</attachid>
            <date>2011-11-17 20:37:05 -0800</date>
            <delta_ts>2011-11-22 18:42:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72686-20111117203704.patch</filename>
            <type>text/plain</type>
            <size>10711</size>
            <attacher name="Eric Penner">epenner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTk4NDAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBjNjUxMmMyYjQ5ZmE0NWVm
MDZmNjA0ZThjNDJhMWMyNDUwZjJmN2Q0Li5lYzlhMWYzNGJhNzA5NjkxOTllOTYwYjJhNmVmNDJj
MDlmNmY3YWU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTEtMTEtMTcgIEVyaWMg
UGVubmVyICA8ZXBlbm5lckBnb29nbGUuY29tPgorCisgICAgICAgIE5lZWQgdG8gcHJlcGFpbnQg
dGlsZXMgaW4gVGlsZUxheWVyQ2hvbWl1bQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzI2ODYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMuIChPT1BTISkKKworICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6Y29udGFpbnNNaXNzaW5n
VGlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjpjb250YWluc0Rp
cnR5VGlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjpjYWxjdWxh
dGVPcHRpbWFsUHJlcGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVt
OjpwcmVwYXJlVG9VcGRhdGVQcmVwYWludCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRpbGluZ0RhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRpbGluZ0RhdGE6OnRpbGVJbmRpY2VzVG9Db250ZW50UmVjdCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRpbGluZ0RhdGEuaDoKKwogMjAx
MS0xMS0xMCAgTmlrb2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AcmltLmNvbT4KIAogICAg
ICAgICBEZXBsb3kgU1ZHTGVuZ3RoQ29udGV4dCBpbiBtb3JlIHBsYWNlcwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hy
b21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29u
dGVudExheWVyQ2hyb21pdW0uY3BwCmluZGV4IGRiMGFlNDY5OWU3ODk2OTJmNTFjNDBiOGNkZTc2
NDg0ZmQxYzRhYTguLjNlYTQ0NWYyNGRjNTk0MTdjM2Y1NjhjODlmYmQ5OGFjZTY4ZGNhNTEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRl
bnRMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTExMCw4ICsxMTAsMzUgQEAg
dm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c0lmRGlydHkoKQogICAgIGlm
ICghZHJhd3NDb250ZW50KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHByZXBhcmVUb1VwZGF0
ZShsYXllclJlY3QpOwotICAgIHJlc2V0TmVlZHNEaXNwbGF5KCk7CisgICAgLy8gVE9ETzogUHJl
cGFpbnQgcmVjdCBjdXJyZW50bHkganVzdCBwYWRzIHRoZSB2aXNpYmxlIHJlY3QgYnkgb25lIHRp
bGUuCisgICAgSW50UmVjdCBwcmVwYWludFJlY3QgPSBsYXllclJlY3Q7CisgICAgcHJlcGFpbnRS
ZWN0LmluZmxhdGUoMjU2KTsgLy8gVE9ETzogdXNlIHRpbGUgc2l6ZSBvciBvdGhlciBtZXRyaWMK
KyAgICBwcmVwYWludFJlY3QuaW50ZXJzZWN0KEludFJlY3QoSW50UG9pbnQoKSwgY29udGVudEJv
dW5kcygpKSk7CisKKyAgICAvLyBUaGVyZSBhcmUgYSBmZXcgcHJpb3JpdGllcyBmb3IgcGFpbnRp
bmc6CisgICAgLy8gMS4pIERpcnR5IHZpc2libGUgY29udGVudAorICAgIC8vIDIuKSBEaXJ0eSBw
cmUtcGFpbnRlZCBjb250ZW50CisgICAgLy8gV2UgY291bGQgYWRkIGV2ZW4gaGlnaGVyIHByaW9y
aXRpZXMgZm9yOgorICAgIC8vIDEuKSBNaXNzaW5nIHZpc2libGUgdGlsZXMKKyAgICAvLyAyLikg
TWlzc2luZyBwcmUtcGFpbnRlZCB0aWxlcworCisgICAgYm9vbCB2aXNpYmxlRGlydHkgID0gY29u
dGFpbnNEaXJ0eVRpbGVzKGxheWVyUmVjdCk7CisgICAgYm9vbCBwcmVwYWludERpcnR5ID0gY29u
dGFpbnNEaXJ0eVRpbGVzKHByZXBhaW50UmVjdCk7CisKKyAgICBpZiAodmlzaWJsZURpcnR5KSB7
CisgICAgICAgIHByZXBhcmVUb1VwZGF0ZShsYXllclJlY3QpOworICAgICAgICByZXNldE5lZWRz
RGlzcGxheSgpOworICAgICAgICBpZiAoIWxheWVyUmVjdC5jb250YWlucyhwcmVwYWludFJlY3Qp
ICYmIHByZXBhaW50RGlydHkpCisgICAgICAgICAgICBzZXROZWVkc0NvbW1pdCgpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHByZXBhaW50RGlydHkpIHsKKyAgICAgICAgYm9v
bCBzdGlsbE5lZWRzUGFpbnQgPSBwcmVwYXJlVG9VcGRhdGVQcmVwYWludChwcmVwYWludFJlY3Qs
IFByZXBhaW50RGlydHlUaWxlcyk7CisgICAgICAgIGlmIChzdGlsbE5lZWRzUGFpbnQpCisgICAg
ICAgICAgICBzZXROZWVkc0NvbW1pdCgpOworICAgICAgICByZXR1cm47CisgICAgfQogfQogCiBi
b29sIENvbnRlbnRMYXllckNocm9taXVtOjpkcmF3c0NvbnRlbnQoKSBjb25zdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNo
cm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Rp
bGVkTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggYmQxZjM2Njc3MTczZDJkYzllZDRkNzliMDM2ZGI3
Yjc4NGE2MjEyMi4uYjFhZDA3ZGNhMDBhZTBiMTYwNTk3ODBiNDY4MDJmMDQyZGQzNzkxNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRM
YXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCkBAIC0yOTEsNiArMjkxLDg5IEBAIHZvaWQg
VGlsZWRMYXllckNocm9taXVtOjppbnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0JiBjb250ZW50
UmVjdCkKICAgICB9CiB9CiAKK2Jvb2wgVGlsZWRMYXllckNocm9taXVtOjpjb250YWluc01pc3Np
bmdUaWxlcyhpbnQgbGVmdCwgaW50IHRvcCwgaW50IHJpZ2h0LCBpbnQgYm90dG9tKQoreworICAg
IGZvciAoaW50IGogPSB0b3A7IGogPD0gYm90dG9tOyArK2opIHsKKyAgICAgICAgZm9yIChpbnQg
aSA9IGxlZnQ7IGkgPD0gcmlnaHQ7ICsraSkgeworICAgICAgICAgICAgVXBkYXRhYmxlVGlsZSog
dGlsZSA9IHRpbGVBdChpLCBqKTsKKyAgICAgICAgICAgIGlmICghdGlsZSB8fCAhdGlsZS0+bWFu
YWdlZFRleHR1cmUoKS0+aXNWYWxpZChtX3RpbGVyLT50aWxlU2l6ZSgpLCBtX3RleHR1cmVGb3Jt
YXQpKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorICAg
IHJldHVybiBmYWxzZTsKK30KKworYm9vbCBUaWxlZExheWVyQ2hyb21pdW06OmNvbnRhaW5zTWlz
c2luZ1RpbGVzKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQoreworICAgIGludCBsZWZ0LCB0
b3AsIHJpZ2h0LCBib3R0b207CisgICAgbV90aWxlci0+Y29udGVudFJlY3RUb1RpbGVJbmRpY2Vz
KGNvbnRlbnRSZWN0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworICAgIHJldHVybiBjb250
YWluc01pc3NpbmdUaWxlcyhsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworfQorCitib29sIFRp
bGVkTGF5ZXJDaHJvbWl1bTo6Y29udGFpbnNEaXJ0eVRpbGVzKGludCBsZWZ0LCBpbnQgdG9wLCBp
bnQgcmlnaHQsIGludCBib3R0b20pCit7CisgICAgZm9yIChpbnQgaiA9IHRvcDsgaiA8PSBib3R0
b207ICsraikgeworICAgICAgICBmb3IgKGludCBpID0gbGVmdDsgaSA8PSByaWdodDsgKytpKSB7
CisgICAgICAgICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0gdGlsZUF0KGksIGopOworICAgICAg
ICAgICAgaWYgKCF0aWxlIHx8ICF0aWxlLT5tYW5hZ2VkVGV4dHVyZSgpLT5pc1ZhbGlkKG1fdGls
ZXItPnRpbGVTaXplKCksIG1fdGV4dHVyZUZvcm1hdCkgfHwgdGlsZS0+ZGlydHkoKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK2Jvb2wgVGlsZWRMYXllckNocm9taXVtOjpjb250YWluc0RpcnR5VGlsZXMoY29u
c3QgSW50UmVjdCYgY29udGVudFJlY3QpCit7CisgICAgaW50IGxlZnQsIHRvcCwgcmlnaHQsIGJv
dHRvbTsKKyAgICBtX3RpbGVyLT5jb250ZW50UmVjdFRvVGlsZUluZGljZXMoY29udGVudFJlY3Qs
IGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CisgICAgcmV0dXJuIGNvbnRhaW5zRGlydHlUaWxl
cyhsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworfQorCisKK0ludFJlY3QgVGlsZWRMYXllckNo
cm9taXVtOjpjYWxjdWxhdGVPcHRpbWFsUHJlcGFpbnQoY29uc3QgSW50UmVjdCYgY29udGVudFJl
Y3QsIFByZXBhaW50VHlwZSB0eXBlKQoreworICAgIGludCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0
b207CisgICAgbV90aWxlci0+Y29udGVudFJlY3RUb1RpbGVJbmRpY2VzKGNvbnRlbnRSZWN0LCBs
ZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworCisgICAgaW50IHZpc2libGVMZWZ0LCB2aXNpYmxl
VG9wLCB2aXNpYmxlUmlnaHQsIHZpc2libGVCb3R0b207CisgICAgbV90aWxlci0+Y29udGVudFJl
Y3RUb1RpbGVJbmRpY2VzKHZpc2libGVMYXllclJlY3QoKSwgdmlzaWJsZUxlZnQsIHZpc2libGVU
b3AsIHZpc2libGVSaWdodCwgdmlzaWJsZUJvdHRvbSk7CisKKyAgICAvLyBGaW5kIHRoZSBmaXJz
dCByb3cvY29sdW1uIHRoYXQgZG9lc24ndCBvdmVybGFwIHRoZSB2aXNpYmxlIHJlY3QKKyAgICAv
LyBhbmQgY29udGFpbnMgbWlzc2luZyB0aWxlcworICAgIGlmICh0eXBlID09IFByZXBhaW50TWlz
c2luZ1RpbGVzKSB7CisgICAgICBmb3IgKGludCBpID0gdG9wOyBpIDw9IGJvdHRvbTsgKytpKSB7
CisgICAgICAgICAgaWYgKGkgPj0gdmlzaWJsZVRvcCAmJiBpIDw9IHZpc2libGVCb3R0b20pCisg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgIGlmIChjb250YWluc01pc3NpbmdUaWxl
cyhsZWZ0LCBpLCByaWdodCwgaSkpCisgICAgICAgICAgICAgIHJldHVybiBtX3RpbGVyLT50aWxl
SW5kaWNlc1RvQ29udGVudFJlY3QobGVmdCwgaSwgcmlnaHQsIGkpOworICAgICAgfQorICAgICAg
Zm9yIChpbnQgaSA9IGxlZnQ7IGkgPD0gcmlnaHQ7ICsraSkgeworICAgICAgICAgIGlmIChpID49
IHZpc2libGVMZWZ0ICYmIGkgPD0gdmlzaWJsZVJpZ2h0KQorICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICBpZiAoY29udGFpbnNNaXNzaW5nVGlsZXMoaSwgdG9wLCBpLCBib3R0b20p
KQorICAgICAgICAgICAgICByZXR1cm4gbV90aWxlci0+dGlsZUluZGljZXNUb0NvbnRlbnRSZWN0
KGksIHRvcCwgaSwgYm90dG9tKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICAvLyBFeGFjdGx5IHRo
ZSBzYW1lIGFzIGFib3ZlIGJ1dCBpbmNsdWRlcyBkaXJ0eSB0aWxlcy4KKyAgICBpZiAodHlwZSA9
PSBQcmVwYWludERpcnR5VGlsZXMpIHsKKyAgICAgIGZvciAoaW50IGkgPSB0b3A7IGkgPD0gYm90
dG9tOyArK2kpIHsKKyAgICAgICAgICBpZiAoaSA+PSB2aXNpYmxlVG9wICYmIGkgPD0gdmlzaWJs
ZUJvdHRvbSkKKyAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgaWYgKGNvbnRhaW5z
RGlydHlUaWxlcyhsZWZ0LCBpLCByaWdodCwgaSkpCisgICAgICAgICAgICAgIHJldHVybiBtX3Rp
bGVyLT50aWxlSW5kaWNlc1RvQ29udGVudFJlY3QobGVmdCwgaSwgcmlnaHQsIGkpOworICAgICAg
fQorICAgICAgZm9yIChpbnQgaSA9IGxlZnQ7IGkgPD0gcmlnaHQ7ICsraSkgeworICAgICAgICAg
IGlmIChpID49IHZpc2libGVMZWZ0ICYmIGkgPD0gdmlzaWJsZVJpZ2h0KQorICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICBpZiAoY29udGFpbnNEaXJ0eVRpbGVzKGksIHRvcCwgaSwg
Ym90dG9tKSkKKyAgICAgICAgICAgICAgcmV0dXJuIG1fdGlsZXItPnRpbGVJbmRpY2VzVG9Db250
ZW50UmVjdChpLCB0b3AsIGksIGJvdHRvbSk7CisgICAgICB9CisgICAgfQorCisgICAgcmV0dXJu
IEludFJlY3QoKTsKK30KKwogdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnByb3RlY3RWaXNpYmxl
VGlsZVRleHR1cmVzKCkKIHsKICAgICBwcm90ZWN0VGlsZVRleHR1cmVzKEludFJlY3QoSW50UG9p
bnQ6Onplcm8oKSwgY29udGVudEJvdW5kcygpKSk7CkBAIC0zMTUsNiArMzk4LDE1IEBAIHZvaWQg
VGlsZWRMYXllckNocm9taXVtOjpwcm90ZWN0VGlsZVRleHR1cmVzKGNvbnN0IEludFJlY3QmIGNv
bnRlbnRSZWN0KQogICAgIH0KIH0KIAorYm9vbCBUaWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVU
b1VwZGF0ZVByZXBhaW50KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBQcmVwYWludFR5cGUg
dHlwZSkKK3sKKyAgICBtX3RpbGVyLT5ncm93TGF5ZXJUb0NvbnRhaW4oY29udGVudFJlY3QpOwor
ICAgIEludFJlY3QgcHJlUGFpbnRSZWN0ID0gY2FsY3VsYXRlT3B0aW1hbFByZXBhaW50KGNvbnRl
bnRSZWN0LCB0eXBlKTsKKyAgICBwcmVwYXJlVG9VcGRhdGUocHJlUGFpbnRSZWN0KTsKKyAgICBy
ZXR1cm4gIXByZVBhaW50UmVjdC5pc0VtcHR5KCk7Cit9CisKKwogdm9pZCBUaWxlZExheWVyQ2hy
b21pdW06OnByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKIHsKICAg
ICBBU1NFUlQobV90aWxlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDVkYWYw
ZjAxOTQ3YTk5NDdjZDIzNWY1NWZiNzM5NTllNDQ3YjFmNTYuLjQ0ZjYyMWIyYTcwZmY4NDJmOTUx
NTg0ZTExMDlmNzFlNDliZTAwYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oCkBAIC02
OCw2ICs2OCwxNSBAQCBwcm90ZWN0ZWQ6CiAgICAgLy8gUHJlcGFyZSBkYXRhIG5lZWRlZCB0byB1
cGRhdGUgdGV4dHVyZXMgdGhhdCBpbnRlcnNlY3Qgd2l0aCBjb250ZW50UmVjdC4KICAgICB2b2lk
IHByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCk7CiAKKyAgICAvLyBT
YW1lIGFzIHByZXBhcmVUb1VwZGF0ZSwgYnV0IHJlbmRlcnMgc21hbGwgb3B0aW1hbCBzaXplZCBy
ZWN0cworICAgIC8vIHRoYXQgZG9uJ3QgaW50ZXJzZWN0IHRoZSB2aXNpYmxlIHJlY3QuIFJldHVy
bnMgdHJ1ZSBpZiBtb3JlCisgICAgLy8gcGFpbnRpbmcgaXMgc3RpbGwgcmVxdWlyZWQuCisgICAg
ZW51bSBQcmVwYWludFR5cGUgeyBQcmVwYWludE1pc3NpbmdUaWxlcywgUHJlcGFpbnREaXJ0eVRp
bGVzIH07CisgICAgYm9vbCBwcmVwYXJlVG9VcGRhdGVQcmVwYWludChjb25zdCBJbnRSZWN0JiBj
b250ZW50UmVjdCwgUHJlcGFpbnRUeXBlKTsKKworICAgIGJvb2wgY29udGFpbnNNaXNzaW5nVGls
ZXMoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpOworICAgIGJvb2wgY29udGFpbnNEaXJ0eVRp
bGVzKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KTsKKwogICAgIHZpcnR1YWwgdm9pZCBwcm90
ZWN0VmlzaWJsZVRpbGVUZXh0dXJlcygpOwogCiBwcml2YXRlOgpAQCAtNzgsNiArODcsMTAgQEAg
cHJpdmF0ZToKICAgICB2b2lkIGNyZWF0ZVRpbGVySWZOZWVkZWQoKTsKICAgICB2b2lkIHNldFRp
bGluZ09wdGlvbihUaWxpbmdPcHRpb24pOwogCisgICAgSW50UmVjdCBjYWxjdWxhdGVPcHRpbWFs
UHJlcGFpbnQoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIFByZXBhaW50VHlwZSk7CisgICAg
Ym9vbCBjb250YWluc01pc3NpbmdUaWxlcyhpbnQgbGVmdCwgaW50IHRvcCwgaW50IHJpZ2h0LCBp
bnQgYm90dG9tKTsKKyAgICBib29sIGNvbnRhaW5zRGlydHlUaWxlcyhpbnQgbGVmdCwgaW50IHRv
cCwgaW50IHJpZ2h0LCBpbnQgYm90dG9tKTsKKwogICAgIFVwZGF0YWJsZVRpbGUqIHRpbGVBdChp
bnQsIGludCkgY29uc3Q7CiAgICAgVXBkYXRhYmxlVGlsZSogY3JlYXRlVGlsZShpbnQsIGludCk7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUaWxpbmdEYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUaWxpbmdEYXRhLmNwcAppbmRleCBjNTQyYjdkNDI2Yjcx
NGRkM2U5MzAyNjZmZDI5ODA0ZjdjNzUzYWQxLi40NTZlMDdkN2RlYWFkYTFkMGUxZDcyNWFlM2Yx
YzFhYTRhOWU3YmY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVGlsaW5nRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRpbGluZ0RhdGEuY3BwCkBAIC0x
MDAsNiArMTAwLDE1IEBAIHZvaWQgQ0NMYXllclRpbGluZ0RhdGE6OmNvbnRlbnRSZWN0VG9UaWxl
SW5kaWNlcyhjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgaW50CiAgICAgYm90dG9tID0gbV90
aWxpbmdEYXRhLnRpbGVZSW5kZXhGcm9tU3JjQ29vcmQobGF5ZXJSZWN0Lm1heFkoKSAtIDEpOwog
fQogCitJbnRSZWN0IENDTGF5ZXJUaWxpbmdEYXRhOjp0aWxlSW5kaWNlc1RvQ29udGVudFJlY3Qo
aW50IGxlZnQsIGludCB0b3AsIGludCByaWdodCwgaW50IGJvdHRvbSkgY29uc3QKK3sKKyAgICBp
bnQgeDEgPSBtX3RpbGluZ0RhdGEudGlsZVBvc2l0aW9uWChsZWZ0KTsKKyAgICBpbnQgeTEgPSBt
X3RpbGluZ0RhdGEudGlsZVBvc2l0aW9uWSh0b3ApOworICAgIGludCB4MiA9IG1fdGlsaW5nRGF0
YS50aWxlUG9zaXRpb25YKHJpZ2h0KSArIG1fdGlsaW5nRGF0YS50aWxlU2l6ZVgocmlnaHQpOwor
ICAgIGludCB5MiA9IG1fdGlsaW5nRGF0YS50aWxlUG9zaXRpb25ZKGJvdHRvbSkgKyBtX3RpbGlu
Z0RhdGEudGlsZVNpemVZKGJvdHRvbSk7CisgICAgcmV0dXJuIGxheWVyUmVjdFRvQ29udGVudFJl
Y3QoSW50UmVjdCh4MSwgeTEsIHgyLXgxLCB5Mi15MSkpOworfQorCiBJbnRSZWN0IENDTGF5ZXJU
aWxpbmdEYXRhOjpjb250ZW50UmVjdFRvTGF5ZXJSZWN0KGNvbnN0IEludFJlY3QmIGNvbnRlbnRS
ZWN0KSBjb25zdAogewogICAgIEludFBvaW50IHBvcyhjb250ZW50UmVjdC54KCkgLSBtX2xheWVy
UG9zaXRpb24ueCgpLCBjb250ZW50UmVjdC55KCkgLSBtX2xheWVyUG9zaXRpb24ueSgpKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUaWxpbmdEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVGlsaW5nRGF0YS5oCmluZGV4IGQxMmVhNzA2YjNlNjFiMzI4MDU5YmJm
MWY5ZDA0M2Q4NjNlMTRkNWUuLjhlMjRhNDk2YTBlMzFkYmFlNWNkY2E5YmI5OWViNjQ2NzhiZDQx
OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUaWxpbmdEYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRpbGluZ0RhdGEuaApAQCAtOTgsNiArOTgsNyBAQCBw
dWJsaWM6CiAgICAgLy8gR3JvdyBsYXllciBzaXplIHRvIGNvbnRhaW4gdGhpcyByZWN0YW5nbGUu
CiAgICAgdm9pZCBncm93TGF5ZXJUb0NvbnRhaW4oY29uc3QgSW50UmVjdCYgY29udGVudFJlY3Qp
OwogICAgIHZvaWQgY29udGVudFJlY3RUb1RpbGVJbmRpY2VzKGNvbnN0IEludFJlY3QmIGNvbnRl
bnRSZWN0LCBpbnQgJmxlZnQsIGludCAmdG9wLCBpbnQgJnJpZ2h0LCBpbnQgJmJvdHRvbSkgY29u
c3Q7CisgICAgSW50UmVjdCB0aWxlSW5kaWNlc1RvQ29udGVudFJlY3QoaW50IGxlZnQsIGludCB0
b3AsIGludCByaWdodCwgaW50IGJvdHRvbSkgY29uc3Q7CiAgICAgSW50UmVjdCBjb250ZW50UmVj
dFRvTGF5ZXJSZWN0KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KSBjb25zdDsKICAgICBJbnRS
ZWN0IGxheWVyUmVjdFRvQ29udGVudFJlY3QoY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0KSBjb25z
dDsKICAgICBJbnRSZWN0IHRpbGVDb250ZW50UmVjdChjb25zdCBUaWxlKikgY29uc3Q7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116306</attachid>
            <date>2011-11-22 18:42:23 -0800</date>
            <delta_ts>2011-11-22 19:39:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72686-20111122184222.patch</filename>
            <type>text/plain</type>
            <size>33525</size>
            <attacher name="Eric Penner">epenner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTk4NDAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBjNjUxMmMyYjQ5ZmE0NWVm
MDZmNjA0ZThjNDJhMWMyNDUwZjJmN2Q0Li40MmFkMDNjNWJhNTE2MmZmNWI1MGY2NWM5OTQ4Mjc1
N2IwNGVkYzU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTEtMTEtMTcgIEVyaWMg
UGVubmVyICA8ZXBlbm5lckBnb29nbGUuY29tPgorCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiAoT09QUyEpCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c0lmRGly
dHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJv
bWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OmNvbnRhaW5z
TWlzc2luZ1RpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6Y29u
dGFpbnNEaXJ0eVRpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6
Y2FsY3VsYXRlT3B0aW1hbFByZXBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJD
aHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlUHJlcGFpbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUaWxpbmdEYXRhLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJUaWxpbmdEYXRhOjp0aWxlSW5kaWNlc1RvQ29udGVudFJlY3QpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUaWxpbmdEYXRhLmg6
CisKIDIwMTEtMTEtMTAgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJtYW5uQHJpbS5jb20+
CiAKICAgICAgICAgRGVwbG95IFNWR0xlbmd0aENvbnRleHQgaW4gbW9yZSBwbGFjZXMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRM
YXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcAppbmRleCBkYjBhZTQ2OTllNzg5NjkyZjUxYzQw
YjhjZGU3NjQ4NGZkMWM0YWE4Li5jNDdkNzNjOTA4ZjA3ZTJmMmQzNzdiZmU1YmU2MDExNDQ2NWI2
NDU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCkBAIC0xMTQsNiArMTE0
LDIwIEBAIHZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHNJZkRpcnR5KCkK
ICAgICByZXNldE5lZWRzRGlzcGxheSgpOwogfQogCit2b2lkIENvbnRlbnRMYXllckNocm9taXVt
OjppZGxlUGFpbnRDb250ZW50c0lmRGlydHkoKQoreworICAgIGlmICghZHJhd3NDb250ZW50KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCA9IHZpc2li
bGVMYXllclJlY3QoKTsKKyAgICBpZiAobGF5ZXJSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgcHJlcGFyZVRvVXBkYXRlSWRsZShsYXllclJlY3QpOworICAgIGlmIChuZWVk
c0lkbGVQYWludChsYXllclJlY3QpKQorICAgICAgICBzZXROZWVkc0NvbW1pdCgpOworfQorCiBi
b29sIENvbnRlbnRMYXllckNocm9taXVtOjpkcmF3c0NvbnRlbnQoKSBjb25zdAogewogICAgIHJl
dHVybiBtX2RlbGVnYXRlICYmIG1fZGVsZWdhdGUtPmRyYXdzQ29udGVudCgpICYmIFRpbGVkTGF5
ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0u
aAppbmRleCBiODM0ZTY3NmJkNjM0NDVhYTQ1M2IzNjVlZWUyODAyNDBmMzgwOWMxLi4wYzU3NGI1
ZGZkYzBhNTcxYjgxMWJlMDM5NzY0YWM3NWIxYzJlM2VlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXll
ckNocm9taXVtLmgKQEAgLTUwLDYgKzUwLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfkNvbnRl
bnRMYXllckNocm9taXVtKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50c0lmRGly
dHkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgaWRsZVBhaW50Q29udGVudHNJZkRpcnR5KCk7CiAKIHBy
b3RlY3RlZDoKICAgICBleHBsaWNpdCBDb250ZW50TGF5ZXJDaHJvbWl1bShDQ0xheWVyRGVsZWdh
dGUqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyQ2hyb21pdW0uaAppbmRleCA3NDdkYzk4NjljZjEwYjYyZjMwZTliZjA5YWYy
Mjc5ODY2NGQzNDI0Li44YmE4NDUxNWUxYzFiOTlmMzZkMzk3ZjQ3YWZmZDI1ODE4ZWIyMzE0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
ckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJDaHJvbWl1bS5oCkBAIC0xNTgsNiArMTU4LDcgQEAgcHVibGljOgogICAgIC8vIFRo
ZXNlIG1ldGhvZHMgdHlwaWNhbGx5IG5lZWQgdG8gYmUgb3ZlcndyaXR0ZW4gYnkgZGVyaXZlZCBj
bGFzc2VzLgogICAgIHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQogICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzSWZEaXJ0eSgpIHsgfQorICAg
IHZpcnR1YWwgdm9pZCBpZGxlUGFpbnRDb250ZW50c0lmRGlydHkoKSB7IH0KICAgICB2aXJ0dWFs
IHZvaWQgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCosIENDVGV4
dHVyZVVwZGF0ZXImKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0SXNNYXNrKGJvb2wpIHsgfQog
ICAgIHZpcnR1YWwgdm9pZCB1bnJlc2VydmVDb250ZW50c1RleHR1cmUoKSB7IH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCmluZGV4IDY1NmEyODZlOGY3YzMxMTVlZTZiOWJm
MDAzNmJhYTdkYTk3MjdkY2MuLjVjOWRmYjY1ZjBiZTkwMTljYzBiOTc5MjM1YmJmMmQ4MjgxNDRj
MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApAQCAtMjg4LDEzICsy
ODgsMTQgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMoKQogICAgICAg
ICByZXR1cm47CiAKICAgICBzaXplX3QgY29udGVudHNNZW1vcnlVc2VCeXRlcyA9IG1fY29udGVu
dHNUZXh0dXJlQWxsb2NhdG9yLT5jdXJyZW50TWVtb3J5VXNlQnl0ZXMoKTsKLSAgICBtX3JlbmRl
clN1cmZhY2VUZXh0dXJlTWFuYWdlci0+c2V0TWVtb3J5TGltaXRCeXRlcyhUZXh0dXJlTWFuYWdl
cjo6aGlnaExpbWl0Qnl0ZXMoKSAtIGNvbnRlbnRzTWVtb3J5VXNlQnl0ZXMpOworICAgIHNpemVf
dCBoYXJkTGltaXRCeXRlcyA9IHN0ZDo6bWF4PHNpemVfdD4oMCwgVGV4dHVyZU1hbmFnZXI6Omhp
Z2hMaW1pdEJ5dGVzKCkgLSBjb250ZW50c01lbW9yeVVzZUJ5dGVzKTsKKyAgICBzaXplX3QgcmVj
bGFpbUxpbWl0Qnl0ZXMgPSBzdGQ6Om1heDxzaXplX3Q+KDAsIFRleHR1cmVNYW5hZ2VyOjpyZWNs
YWltTGltaXRCeXRlcyh2aWV3cG9ydFNpemUoKSkgLSBjb250ZW50c01lbW9yeVVzZUJ5dGVzKTsK
KyAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+c2V0SGFyZE1lbW9yeUxpbWl0Qnl0
ZXMoaGFyZExpbWl0Qnl0ZXMpOworICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyLT5z
ZXRTb2Z0TWVtb3J5TGltaXRCeXRlcyhyZWNsYWltTGltaXRCeXRlcyk7CisKICAgICBkcmF3TGF5
ZXJzSW50ZXJuYWwoKTsKIAotICAgIGlmIChUZXh0dXJlTWFuYWdlcjo6cmVjbGFpbUxpbWl0Qnl0
ZXMoKSA+IGNvbnRlbnRzTWVtb3J5VXNlQnl0ZXMpCi0gICAgICAgIG1fcmVuZGVyU3VyZmFjZVRl
eHR1cmVNYW5hZ2VyLT5yZWR1Y2VNZW1vcnlUb0xpbWl0KFRleHR1cmVNYW5hZ2VyOjpyZWNsYWlt
TGltaXRCeXRlcygpIC0gY29udGVudHNNZW1vcnlVc2VCeXRlcyk7Ci0gICAgZWxzZQotICAgICAg
ICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+cmVkdWNlTWVtb3J5VG9MaW1pdCgwKTsK
KyAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+cmVkdWNlTWVtb3J5VG9MaW1pdChy
ZWNsYWltTGltaXRCeXRlcyk7CiAgICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXItPmRl
bGV0ZUV2aWN0ZWRUZXh0dXJlcyhtX3JlbmRlclN1cmZhY2VUZXh0dXJlQWxsb2NhdG9yLmdldCgp
KTsKIAogICAgIGlmIChzZXR0aW5ncygpLmNvbXBvc2l0ZU9mZnNjcmVlbikKQEAgLTY2Myw3ICs2
NjQsNyBAQCBib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZVNoYXJlZE9iamVj
dHMoKQogCiAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5mbHVzaCgpKTsKIAot
ICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyID0gVGV4dHVyZU1hbmFnZXI6OmNyZWF0
ZShUZXh0dXJlTWFuYWdlcjo6aGlnaExpbWl0Qnl0ZXMoKSwgbV9jYXBhYmlsaXRpZXMubWF4VGV4
dHVyZVNpemUpOworICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyID0gVGV4dHVyZU1h
bmFnZXI6OmNyZWF0ZShUZXh0dXJlTWFuYWdlcjo6aGlnaExpbWl0Qnl0ZXMoKSwgVGV4dHVyZU1h
bmFnZXI6OnJlY2xhaW1MaW1pdEJ5dGVzKHZpZXdwb3J0U2l6ZSgpKSwgbV9jYXBhYmlsaXRpZXMu
bWF4VGV4dHVyZVNpemUpOwogICAgIG1fY29udGVudHNUZXh0dXJlQWxsb2NhdG9yID0gVHJhY2tp
bmdUZXh0dXJlQWxsb2NhdG9yOjpjcmVhdGUobV9jb250ZXh0LmdldCgpKTsKICAgICBtX3JlbmRl
clN1cmZhY2VUZXh0dXJlQWxsb2NhdG9yID0gVHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yOjpjcmVh
dGUobV9jb250ZXh0LmdldCgpKTsKICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL01hbmFnZWRUZXh0dXJlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL01hbmFnZWRUZXh0dXJl
LmNwcAppbmRleCA1YmJmZjZhNDNlNWIwMzhiM2JmMzMyN2ZiZDNkMWU1MTQzYjdmMWRlLi4yMjZj
YmRhOGQyN2Y1NWFiZDgzMGI2MTA2NTAyMzRjNzNhNTMzMGIzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9NYW5hZ2VkVGV4dHVyZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTWFuYWdlZFRleHR1
cmUuY3BwCkBAIC01NCw2ICs1NCwxNiBAQCBib29sIE1hbmFnZWRUZXh0dXJlOjppc1ZhbGlkKGNv
bnN0IEludFNpemUmIHNpemUsIHVuc2lnbmVkIGZvcm1hdCkKIAogYm9vbCBNYW5hZ2VkVGV4dHVy
ZTo6cmVzZXJ2ZShjb25zdCBJbnRTaXplJiBzaXplLCB1bnNpZ25lZCBmb3JtYXQpCiB7CisgICAg
cmV0dXJuIHJlc2VydmVUb0xpbWl0QXRQcmlvcml0eShzaXplLCBmb3JtYXQsIFRleHR1cmVNYW5h
Z2VyOjpIYXJkTWVtb3J5TGltaXQsIFRleHR1cmVNYW5hZ2VyOjpIaWdoVGV4dHVyZVByaW9yaXR5
KTsKK30KKworYm9vbCBNYW5hZ2VkVGV4dHVyZTo6cmVzZXJ2ZVNvZnQoY29uc3QgSW50U2l6ZSYg
c2l6ZSwgdW5zaWduZWQgZm9ybWF0KQoreworICAgIHJldHVybiByZXNlcnZlVG9MaW1pdEF0UHJp
b3JpdHkoc2l6ZSwgZm9ybWF0LCBUZXh0dXJlTWFuYWdlcjo6U29mdE1lbW9yeUxpbWl0LCBUZXh0
dXJlTWFuYWdlcjo6TG93VGV4dHVyZVByaW9yaXR5KTsKK30KKworYm9vbCBNYW5hZ2VkVGV4dHVy
ZTo6cmVzZXJ2ZVRvTGltaXRBdFByaW9yaXR5KGNvbnN0IEludFNpemUmIHNpemUsIHVuc2lnbmVk
IGZvcm1hdCwgVGV4dHVyZU1hbmFnZXI6Ok1lbW9yeUxpbWl0IGxpbWl0LCBUZXh0dXJlTWFuYWdl
cjo6VGV4dHVyZVByaW9yaXR5IHByaW9yaXR5KQorewogICAgIGlmICghbV90b2tlbikKICAgICAg
ICAgbV90b2tlbiA9IG1fdGV4dHVyZU1hbmFnZXItPmdldFRva2VuKCk7CiAKQEAgLTYyLDcgKzcy
LDcgQEAgYm9vbCBNYW5hZ2VkVGV4dHVyZTo6cmVzZXJ2ZShjb25zdCBJbnRTaXplJiBzaXplLCB1
bnNpZ25lZCBmb3JtYXQpCiAgICAgICAgIG1fdGV4dHVyZU1hbmFnZXItPnByb3RlY3RUZXh0dXJl
KG1fdG9rZW4pOwogICAgIGVsc2UgewogICAgICAgICBtX3RleHR1cmVJZCA9IDA7Ci0gICAgICAg
IHJlc2VydmVkID0gbV90ZXh0dXJlTWFuYWdlci0+cmVxdWVzdFRleHR1cmUobV90b2tlbiwgc2l6
ZSwgZm9ybWF0KTsKKyAgICAgICAgcmVzZXJ2ZWQgPSBtX3RleHR1cmVNYW5hZ2VyLT5yZXF1ZXN0
VGV4dHVyZShtX3Rva2VuLCBzaXplLCBmb3JtYXQsIGxpbWl0LCBwcmlvcml0eSk7CiAgICAgICAg
IGlmIChyZXNlcnZlZCkgewogICAgICAgICAgICAgbV9zaXplID0gc2l6ZTsKICAgICAgICAgICAg
IG1fZm9ybWF0ID0gZm9ybWF0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTWFuYWdlZFRleHR1cmUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL01hbmFnZWRUZXh0dXJlLmgKaW5kZXggNGQ0MzgwOTU5NTM0
MGY1ZDczM2Q1Njc5MjkxYTkyMDY0YzdiMWFlNS4uZDVjYmQ4ZGViZDIwZjg5ZDQ0OTI2ZDk3ZjI0
MzAzZDQwOGYzYjBmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTWFuYWdlZFRleHR1cmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9NYW5hZ2VkVGV4dHVyZS5oCkBAIC00OCw2ICs0OCw4IEBAIHB1
YmxpYzoKIAogICAgIGJvb2wgaXNWYWxpZChjb25zdCBJbnRTaXplJiwgdW5zaWduZWQgZm9ybWF0
KTsKICAgICBib29sIHJlc2VydmUoY29uc3QgSW50U2l6ZSYsIHVuc2lnbmVkIGZvcm1hdCk7Cisg
ICAgYm9vbCByZXNlcnZlU29mdChjb25zdCBJbnRTaXplJiwgdW5zaWduZWQgZm9ybWF0KTsKKyAg
ICBib29sIHJlc2VydmVUb0xpbWl0QXRQcmlvcml0eShjb25zdCBJbnRTaXplJiwgdW5zaWduZWQg
Zm9ybWF0LCBUZXh0dXJlTWFuYWdlcjo6TWVtb3J5TGltaXQsIFRleHR1cmVNYW5hZ2VyOjpUZXh0
dXJlUHJpb3JpdHkpOwogICAgIHZvaWQgdW5yZXNlcnZlKCk7CiAgICAgYm9vbCBpc1Jlc2VydmVk
KCkKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9UZXh0dXJlTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5jcHAKaW5kZXggYzYwMGQ5ZTY0OTFkN2QxZTc1
NzIyMjE0ZTMxOWRhN2YwYzE4ODRjZS4uN2E1MjdjOTA1NWZjOThlODMxZDgxMjExOTMxMTFlMDU3
MDAyMDIzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vVGV4dHVyZU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmNwcApAQCAtMzcsMTMgKzM3LDE1IEBAIHNp
emVfdCBUZXh0dXJlTWFuYWdlcjo6aGlnaExpbWl0Qnl0ZXMoKQogICAgIHJldHVybiAxMjggKiAx
MDI0ICogMTAyNDsKIH0KIAotc2l6ZV90IFRleHR1cmVNYW5hZ2VyOjpyZWNsYWltTGltaXRCeXRl
cygpCitzaXplX3QgVGV4dHVyZU1hbmFnZXI6OnJlY2xhaW1MaW1pdEJ5dGVzKGNvbnN0IEludFNp
emUmIHZpZXdwb3J0U2l6ZSkKIHsKKyAgICAvLyBGSVhNRTogQ2hvb3NlIGEgbGltaXQgYmFzZWQg
b24gdmlld3BvcnQgc2l6ZS4KICAgICByZXR1cm4gNjQgKiAxMDI0ICogMTAyNDsKIH0KIAotc2l6
ZV90IFRleHR1cmVNYW5hZ2VyOjpsb3dMaW1pdEJ5dGVzKCkKK3NpemVfdCBUZXh0dXJlTWFuYWdl
cjo6bG93TGltaXRCeXRlcyhjb25zdCBJbnRTaXplJiB2aWV3cG9ydCkKIHsKKyAgICAvLyBGSVhN
RTogQ2hvb3NlIGEgbGltaXQgYmFzZWQgb24gdmlld3BvcnQgc2l6ZS4KICAgICByZXR1cm4gMyAq
IDEwMjQgKiAxMDI0OwogfQogCkBAIC02MCwxOSArNjIsMjUgQEAgc2l6ZV90IFRleHR1cmVNYW5h
Z2VyOjptZW1vcnlVc2VCeXRlcyhjb25zdCBJbnRTaXplJiBzaXplLCBHQzNEZW51bSB0ZXh0dXJl
Rm9ybWEKIH0KIAogCi1UZXh0dXJlTWFuYWdlcjo6VGV4dHVyZU1hbmFnZXIoc2l6ZV90IG1lbW9y
eUxpbWl0Qnl0ZXMsIGludCBtYXhUZXh0dXJlU2l6ZSkKLSAgICA6IG1fbWVtb3J5TGltaXRCeXRl
cyhtZW1vcnlMaW1pdEJ5dGVzKQorVGV4dHVyZU1hbmFnZXI6OlRleHR1cmVNYW5hZ2VyKHNpemVf
dCBoYXJkTWVtb3J5TGltaXRCeXRlcywgc2l6ZV90IHNvZnRNZW1vcnlMaW1pdEJ5dGVzLCBpbnQg
bWF4VGV4dHVyZVNpemUpCisgICAgOiBtX2hhcmRNZW1vcnlMaW1pdEJ5dGVzKGhhcmRNZW1vcnlM
aW1pdEJ5dGVzKQorICAgICwgbV9zb2Z0TWVtb3J5TGltaXRCeXRlcyhzb2Z0TWVtb3J5TGltaXRC
eXRlcykKICAgICAsIG1fbWVtb3J5VXNlQnl0ZXMoMCkKICAgICAsIG1fbWF4VGV4dHVyZVNpemUo
bWF4VGV4dHVyZVNpemUpCiAgICAgLCBtX25leHRUb2tlbigxKQogewogfQogCi12b2lkIFRleHR1
cmVNYW5hZ2VyOjpzZXRNZW1vcnlMaW1pdEJ5dGVzKHNpemVfdCBtZW1vcnlMaW1pdEJ5dGVzKQor
dm9pZCBUZXh0dXJlTWFuYWdlcjo6c2V0SGFyZE1lbW9yeUxpbWl0Qnl0ZXMoc2l6ZV90IG1lbW9y
eUxpbWl0Qnl0ZXMpCiB7CiAgICAgcmVkdWNlTWVtb3J5VG9MaW1pdChtZW1vcnlMaW1pdEJ5dGVz
KTsKICAgICBBU1NFUlQoY3VycmVudE1lbW9yeVVzZUJ5dGVzKCkgPCBtZW1vcnlMaW1pdEJ5dGVz
KTsKLSAgICBtX21lbW9yeUxpbWl0Qnl0ZXMgPSBtZW1vcnlMaW1pdEJ5dGVzOworICAgIG1faGFy
ZE1lbW9yeUxpbWl0Qnl0ZXMgPSBtZW1vcnlMaW1pdEJ5dGVzOworfQorCit2b2lkIFRleHR1cmVN
YW5hZ2VyOjpzZXRTb2Z0TWVtb3J5TGltaXRCeXRlcyhzaXplX3QgbWVtb3J5TGltaXRCeXRlcykK
K3sKKyAgICBtX3NvZnRNZW1vcnlMaW1pdEJ5dGVzID0gbWVtb3J5TGltaXRCeXRlczsKIH0KIAog
VGV4dHVyZVRva2VuIFRleHR1cmVNYW5hZ2VyOjpnZXRUb2tlbigpCkBAIC0xNDgsOSArMTU2LDE0
IEBAIHZvaWQgVGV4dHVyZU1hbmFnZXI6OmFkZFRleHR1cmUoVGV4dHVyZVRva2VuIHRva2VuLCBU
ZXh0dXJlSW5mbyBpbmZvKQogewogICAgIEFTU0VSVCghbV90ZXh0dXJlTFJVU2V0LmNvbnRhaW5z
KHRva2VuKSk7CiAgICAgQVNTRVJUKCFtX3RleHR1cmVzLmNvbnRhaW5zKHRva2VuKSk7CisgICAg
QVNTRVJUKGluZm8ucHJpb3JpdHkgPT0gSGlnaFRleHR1cmVQcmlvcml0eSB8fCBpbmZvLnByaW9y
aXR5ID09IExvd1RleHR1cmVQcmlvcml0eSk7CisKICAgICBtX21lbW9yeVVzZUJ5dGVzICs9IG1l
bW9yeVVzZUJ5dGVzKGluZm8uc2l6ZSwgaW5mby5mb3JtYXQpOwogICAgIG1fdGV4dHVyZXMuc2V0
KHRva2VuLCBpbmZvKTsKLSAgICBtX3RleHR1cmVMUlVTZXQuYWRkKHRva2VuKTsKKyAgICBpZiAo
aW5mby5wcmlvcml0eSA9PSBIaWdoVGV4dHVyZVByaW9yaXR5KQorICAgICAgICBtX3RleHR1cmVM
UlVTZXQuYWRkKHRva2VuKTsKKyAgICBlbHNlCisgICAgICAgIG1fdGV4dHVyZUxSVVNldC5pbnNl
cnRCZWZvcmUobV90ZXh0dXJlTFJVU2V0LmJlZ2luKCksIHRva2VuKTsKIH0KIAogdm9pZCBUZXh0
dXJlTWFuYWdlcjo6ZGVsZXRlRXZpY3RlZFRleHR1cmVzKFRleHR1cmVBbGxvY2F0b3IqIGFsbG9j
YXRvcikKQEAgLTIwOCwxMSArMjIxLDE2IEBAIHVuc2lnbmVkIFRleHR1cmVNYW5hZ2VyOjphbGxv
Y2F0ZVRleHR1cmUoVGV4dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yLCBUZXh0dXJlVG9rCiAgICAg
cmV0dXJuIHRleHR1cmVJZDsKIH0KIAotYm9vbCBUZXh0dXJlTWFuYWdlcjo6cmVxdWVzdFRleHR1
cmUoVGV4dHVyZVRva2VuIHRva2VuLCBJbnRTaXplIHNpemUsIHVuc2lnbmVkIGZvcm1hdCkKK2Jv
b2wgVGV4dHVyZU1hbmFnZXI6OnJlcXVlc3RUZXh0dXJlKFRleHR1cmVUb2tlbiB0b2tlbiwgSW50
U2l6ZSBzaXplLCB1bnNpZ25lZCBmb3JtYXQsIE1lbW9yeUxpbWl0IG1lbW9yeUxpbWl0LCBUZXh0
dXJlUHJpb3JpdHkgcHJpb3JpdHkpCiB7CiAgICAgaWYgKHNpemUud2lkdGgoKSA+IG1fbWF4VGV4
dHVyZVNpemUgfHwgc2l6ZS5oZWlnaHQoKSA+IG1fbWF4VGV4dHVyZVNpemUpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAorICAgIEFTU0VSVChtZW1vcnlMaW1pdCA9PSBIYXJkTWVtb3J5TGltaXQg
fHwgbWVtb3J5TGltaXQgPT0gU29mdE1lbW9yeUxpbWl0KTsKKyAgICBBU1NFUlQocHJpb3JpdHkg
PT0gSGlnaFRleHR1cmVQcmlvcml0eSB8fCBwcmlvcml0eSA9PSBMb3dUZXh0dXJlUHJpb3JpdHkp
OworCisgICAgc2l6ZV90IG1lbW9yeUxpbWl0Qnl0ZXMgPSAobWVtb3J5TGltaXQgPT0gSGFyZE1l
bW9yeUxpbWl0KSA/IG1faGFyZE1lbW9yeUxpbWl0Qnl0ZXM6bV9zb2Z0TWVtb3J5TGltaXRCeXRl
czsKKwogICAgIFRleHR1cmVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90ZXh0dXJlcy5maW5kKHRva2Vu
KTsKICAgICBpZiAoaXQgIT0gbV90ZXh0dXJlcy5lbmQoKSkgewogICAgICAgICBBU1NFUlQoaXQt
PnNlY29uZC5zaXplICE9IHNpemUgfHwgaXQtPnNlY29uZC5mb3JtYXQgIT0gZm9ybWF0KTsKQEAg
LTIyMCwxMSArMjM4LDExIEBAIGJvb2wgVGV4dHVyZU1hbmFnZXI6OnJlcXVlc3RUZXh0dXJlKFRl
eHR1cmVUb2tlbiB0b2tlbiwgSW50U2l6ZSBzaXplLCB1bnNpZ25lZCBmCiAgICAgfQogCiAgICAg
c2l6ZV90IG1lbW9yeVJlcXVpcmVkQnl0ZXMgPSBtZW1vcnlVc2VCeXRlcyhzaXplLCBmb3JtYXQp
OwotICAgIGlmIChtZW1vcnlSZXF1aXJlZEJ5dGVzID4gbV9tZW1vcnlMaW1pdEJ5dGVzKQorICAg
IGlmIChtZW1vcnlSZXF1aXJlZEJ5dGVzID4gbWVtb3J5TGltaXRCeXRlcykKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgcmVkdWNlTWVtb3J5VG9MaW1pdChtX21lbW9yeUxpbWl0Qnl0ZXMg
LSBtZW1vcnlSZXF1aXJlZEJ5dGVzKTsKLSAgICBpZiAobV9tZW1vcnlVc2VCeXRlcyArIG1lbW9y
eVJlcXVpcmVkQnl0ZXMgPiBtX21lbW9yeUxpbWl0Qnl0ZXMpCisgICAgcmVkdWNlTWVtb3J5VG9M
aW1pdChtZW1vcnlMaW1pdEJ5dGVzIC0gbWVtb3J5UmVxdWlyZWRCeXRlcyk7CisgICAgaWYgKG1f
bWVtb3J5VXNlQnl0ZXMgKyBtZW1vcnlSZXF1aXJlZEJ5dGVzID4gbV9oYXJkTWVtb3J5TGltaXRC
eXRlcykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgVGV4dHVyZUluZm8gaW5mbzsKQEAg
LTIzMiw2ICsyNTAsNyBAQCBib29sIFRleHR1cmVNYW5hZ2VyOjpyZXF1ZXN0VGV4dHVyZShUZXh0
dXJlVG9rZW4gdG9rZW4sIEludFNpemUgc2l6ZSwgdW5zaWduZWQgZgogICAgIGluZm8uZm9ybWF0
ID0gZm9ybWF0OwogICAgIGluZm8udGV4dHVyZUlkID0gMDsKICAgICBpbmZvLmlzUHJvdGVjdGVk
ID0gdHJ1ZTsKKyAgICBpbmZvLnByaW9yaXR5ID0gcHJpb3JpdHk7CiAjaWZuZGVmIE5ERUJVRwog
ICAgIGluZm8uYWxsb2NhdG9yID0gMDsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmgKaW5kZXgg
ZjMyN2I0Y2ZjZDFiMTBkYWU3ZGFkNjM0NjA0ZjY3MzliNTIwZjIwOC4uYTcxOWRiNmIzMWNhMmZk
NzMyMzBlYjM5YWRjZDk5YmMyMWQ2ZmIyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5oCkBAIC00OSwy
NyArNDksMzAgQEAgcHJvdGVjdGVkOgogY2xhc3MgVGV4dHVyZU1hbmFnZXIgewogICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKFRleHR1cmVNYW5hZ2VyKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFz
c093blB0cjxUZXh0dXJlTWFuYWdlcj4gY3JlYXRlKHNpemVfdCBtZW1vcnlMaW1pdEJ5dGVzLCBp
bnQgbWF4VGV4dHVyZVNpemUpCisgICAgc3RhdGljIFBhc3NPd25QdHI8VGV4dHVyZU1hbmFnZXI+
IGNyZWF0ZShzaXplX3QgaGFyZE1lbW9yeUxpbWl0Qnl0ZXMsIHNpemVfdCBzb2Z0TWVtb3J5TGlt
aXRCeXRlcywgaW50IG1heFRleHR1cmVTaXplKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0
UHRyKG5ldyBUZXh0dXJlTWFuYWdlcihtZW1vcnlMaW1pdEJ5dGVzLCBtYXhUZXh0dXJlU2l6ZSkp
OworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFRleHR1cmVNYW5hZ2VyKGhhcmRNZW1vcnlM
aW1pdEJ5dGVzLCBzb2Z0TWVtb3J5TGltaXRCeXRlcywgbWF4VGV4dHVyZVNpemUpKTsKICAgICB9
CiAKICAgICAvLyBBYnNvbHV0ZSBtYXhpbXVtIGxpbWl0IGZvciB0ZXh0dXJlIGFsbG9jYXRpb25z
IGZvciB0aGlzIGluc3RhbmNlLgogICAgIHN0YXRpYyBzaXplX3QgaGlnaExpbWl0Qnl0ZXMoKTsK
LSAgICAvLyBQcmVmZXJyZWQgdGV4dHVyZSBzaXplIGxpbWl0LiBDYW4gYmUgZXhjZWVkZWQgaWYg
bmVlZGVkLgotICAgIHN0YXRpYyBzaXplX3QgcmVjbGFpbUxpbWl0Qnl0ZXMoKTsKKyAgICAvLyBQ
cmVmZXJyZWQgdGV4dHVyZSBzaXplIGxpbWl0IGdpdmVuIHRoZSB2aWV3cG9ydCBzaXplLgorICAg
IHN0YXRpYyBzaXplX3QgcmVjbGFpbUxpbWl0Qnl0ZXMoY29uc3QgSW50U2l6ZSYgdmlld3BvcnRT
aXplKTsKICAgICAvLyBUaGUgbWF4aW11bSB0ZXh0dXJlIG1lbW9yeSB1c2FnZSB3aGVuIGFza2Vk
IHRvIHJlbGVhc2UgdGV4dHVyZXMuCi0gICAgc3RhdGljIHNpemVfdCBsb3dMaW1pdEJ5dGVzKCk7
CisgICAgc3RhdGljIHNpemVfdCBsb3dMaW1pdEJ5dGVzKGNvbnN0IEludFNpemUmIHZpZXdwb3J0
KTsKIAogICAgIHN0YXRpYyBzaXplX3QgbWVtb3J5VXNlQnl0ZXMoY29uc3QgSW50U2l6ZSYsIEdD
M0RlbnVtIGZvcm1hdCk7CiAKLSAgICB2b2lkIHNldE1lbW9yeUxpbWl0Qnl0ZXMoc2l6ZV90KTsK
KyAgICB2b2lkIHNldEhhcmRNZW1vcnlMaW1pdEJ5dGVzKHNpemVfdCk7CisgICAgdm9pZCBzZXRT
b2Z0TWVtb3J5TGltaXRCeXRlcyhzaXplX3QpOwogCiAgICAgVGV4dHVyZVRva2VuIGdldFRva2Vu
KCk7CiAgICAgdm9pZCByZWxlYXNlVG9rZW4oVGV4dHVyZVRva2VuKTsKICAgICBib29sIGhhc1Rl
eHR1cmUoVGV4dHVyZVRva2VuKTsKIAotICAgIGJvb2wgcmVxdWVzdFRleHR1cmUoVGV4dHVyZVRv
a2VuLCBJbnRTaXplLCBHQzNEZW51bSB0ZXh0dXJlRm9ybWF0KTsKKyAgICBlbnVtIE1lbW9yeUxp
bWl0IHsgSGFyZE1lbW9yeUxpbWl0LCBTb2Z0TWVtb3J5TGltaXQgfTsKKyAgICBlbnVtIFRleHR1
cmVQcmlvcml0eSB7IEhpZ2hUZXh0dXJlUHJpb3JpdHksIExvd1RleHR1cmVQcmlvcml0eSB9Owor
ICAgIGJvb2wgcmVxdWVzdFRleHR1cmUoVGV4dHVyZVRva2VuLCBJbnRTaXplLCBHQzNEZW51bSB0
ZXh0dXJlRm9ybWF0LCBNZW1vcnlMaW1pdCwgVGV4dHVyZVByaW9yaXR5KTsKIAogICAgIHZvaWQg
cHJvdGVjdFRleHR1cmUoVGV4dHVyZVRva2VuKTsKICAgICB2b2lkIHVucHJvdGVjdFRleHR1cmUo
VGV4dHVyZVRva2VuKTsKQEAgLTg1LDEzICs4OCwxNCBAQCBwdWJsaWM6CiAgICAgc2l6ZV90IGN1
cnJlbnRNZW1vcnlVc2VCeXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fbWVtb3J5VXNlQnl0ZXM7IH0K
IAogcHJpdmF0ZToKLSAgICBUZXh0dXJlTWFuYWdlcihzaXplX3QgbWVtb3J5TGltaXRCeXRlcywg
aW50IG1heFRleHR1cmVTaXplKTsKKyAgICBUZXh0dXJlTWFuYWdlcihzaXplX3QgaGFyZE1lbW9y
eUxpbWl0Qnl0ZXMsIHNpemVfdCBzb2Z0TWVtb3J5TGltaXRCeXRlcywgaW50IG1heFRleHR1cmVT
aXplKTsKIAogICAgIHN0cnVjdCBUZXh0dXJlSW5mbyB7CiAgICAgICAgIEludFNpemUgc2l6ZTsK
ICAgICAgICAgR0MzRGVudW0gZm9ybWF0OwogICAgICAgICB1bnNpZ25lZCB0ZXh0dXJlSWQ7CiAg
ICAgICAgIGJvb2wgaXNQcm90ZWN0ZWQ7CisgICAgICAgIFRleHR1cmVQcmlvcml0eSBwcmlvcml0
eTsKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgIFRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRvcjsK
ICNlbmRpZgpAQCAtMTA0LDcgKzEwOCw4IEBAIHByaXZhdGU6CiAgICAgVGV4dHVyZU1hcCBtX3Rl
eHR1cmVzOwogICAgIExpc3RIYXNoU2V0PFRleHR1cmVUb2tlbj4gbV90ZXh0dXJlTFJVU2V0Owog
Ci0gICAgc2l6ZV90IG1fbWVtb3J5TGltaXRCeXRlczsKKyAgICBzaXplX3QgbV9oYXJkTWVtb3J5
TGltaXRCeXRlczsKKyAgICBzaXplX3QgbV9zb2Z0TWVtb3J5TGltaXRCeXRlczsKICAgICBzaXpl
X3QgbV9tZW1vcnlVc2VCeXRlczsKICAgICBpbnQgbV9tYXhUZXh0dXJlU2l6ZTsKICAgICBUZXh0
dXJlVG9rZW4gbV9uZXh0VG9rZW47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcAppbmRl
eCBiZDFmMzY2NzcxNzNkMmRjOWVkNGQ3OWIwMzZkYjdiNzg0YTYyMTIyLi43Zjk3MzMzN2FlNGRk
ZmRhY2NjZWM3ZGFmYjM5ZDVhM2E2MjAzN2U3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1
bS5jcHAKQEAgLTQ0LDYgKzQ0LDkgQEAgc3RhdGljIGludCBtYXhVbnRpbGVkU2l6ZSA9IDUxMjsK
IC8vIFdoZW4gdGlsaW5nIGlzIGVuYWJsZWQsIHVzZSB0aWxlcyBvZiB0aGlzIGRpbWVuc2lvbiBz
cXVhcmVkLgogc3RhdGljIGludCBkZWZhdWx0VGlsZVNpemUgPSAyNTY7CiAKKy8vIEZJWE1FOiBQ
cm9iYWJseSB3YW50IHRvIHNldCB0aGlzIGJhc2VkIG9uIHRoZSB2aWV3cG9ydC4KK3N0YXRpYyBp
bnQgaWRsZVBhaW50UGFkZGluZ1dpZHRoID0gZGVmYXVsdFRpbGVTaXplOworCiB1c2luZyBuYW1l
c3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC03Miw2ICs3NSw3IEBAIFRpbGVk
TGF5ZXJDaHJvbWl1bTo6VGlsZWRMYXllckNocm9taXVtKENDTGF5ZXJEZWxlZ2F0ZSogZGVsZWdh
dGUpCiAgICAgLCBtX3RpbGluZ09wdGlvbihBdXRvVGlsZSkKICAgICAsIG1fdGV4dHVyZUZvcm1h
dChHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNKQogICAgICwgbV9za2lwc0RyYXcoZmFs
c2UpCisgICAgLCBtX3Jlc2VydmVGYWlsZWQoZmFsc2UpCiAgICAgLCBtX3RleHR1cmVPcmllbnRh
dGlvbihMYXllclRleHR1cmVVcGRhdGVyOjpJbnZhbGlkT3JpZW50YXRpb24pCiAgICAgLCBtX3Nh
bXBsZWRUZXhlbEZvcm1hdChMYXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXRJ
bnZhbGlkKQogewpAQCAtOTIsNyArOTYsNyBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6Y2xl
YW51cFJlc291cmNlcygpCiAKICAgICBtX3RpbGVyLmNsZWFyKCk7CiAgICAgbV9wYWludFJlY3Qg
PSBJbnRSZWN0KCk7Ci0gICAgbV9yZXF1ZXN0ZWRVcGRhdGVSZWN0ID0gSW50UmVjdCgpOworICAg
IG1fcmVxdWVzdGVkVXBkYXRlVGlsZXNSZWN0ID0gSW50UmVjdCgpOwogfQogCiB2b2lkIFRpbGVk
TGF5ZXJDaHJvbWl1bTo6dXBkYXRlVGlsZVNpemVBbmRUaWxpbmdPcHRpb24oKQpAQCAtMTU3LDEx
ICsxNjEsMTMgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnNldExheWVyVHJlZUhvc3QoQ0NM
YXllclRyZWVIb3N0KiBob3N0KQogdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBv
c2l0b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIENDVGV4dHVyZVVwZGF0
ZXImIHVwZGF0ZXIpCiB7CiAgICAgLy8gUGFpbnRpbmcgY291bGQgY2F1c2UgY29tcG9zaXRpbmcg
dG8gZ2V0IHR1cm5lZCBvZmYsIHdoaWNoIG1heSBjYXVzZSB0aGUgdGlsZXIgdG8gYmVjb21lIGlu
dmFsaWRhdGVkIG1pZC11cGRhdGUuCi0gICAgaWYgKG1fc2tpcHNEcmF3IHx8IG1fcmVxdWVzdGVk
VXBkYXRlUmVjdC5pc0VtcHR5KCkgfHwgIW1fdGlsZXItPm51bVRpbGVzKCkpCisgICAgaWYgKG1f
c2tpcHNEcmF3IHx8IG1fcmVxdWVzdGVkVXBkYXRlVGlsZXNSZWN0LmlzRW1wdHkoKSB8fCAhbV90
aWxlci0+bnVtVGlsZXMoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaW50IGxlZnQsIHRvcCwg
cmlnaHQsIGJvdHRvbTsKLSAgICBtX3RpbGVyLT5jb250ZW50UmVjdFRvVGlsZUluZGljZXMobV9y
ZXF1ZXN0ZWRVcGRhdGVSZWN0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworICAgIGludCBs
ZWZ0ID0gbV9yZXF1ZXN0ZWRVcGRhdGVUaWxlc1JlY3QueCgpOworICAgIGludCB0b3AgPSBtX3Jl
cXVlc3RlZFVwZGF0ZVRpbGVzUmVjdC55KCk7CisgICAgaW50IHJpZ2h0ID0gbV9yZXF1ZXN0ZWRV
cGRhdGVUaWxlc1JlY3QubWF4WCgpLTE7CisgICAgaW50IGJvdHRvbSA9IG1fcmVxdWVzdGVkVXBk
YXRlVGlsZXNSZWN0Lm1heFkoKS0xOwogICAgIGZvciAoaW50IGogPSB0b3A7IGogPD0gYm90dG9t
OyArK2opIHsKICAgICAgICAgZm9yIChpbnQgaSA9IGxlZnQ7IGkgPD0gcmlnaHQ7ICsraSkgewog
ICAgICAgICAgICAgVXBkYXRhYmxlVGlsZSogdGlsZSA9IHRpbGVBdChpLCBqKTsKQEAgLTMxNSwy
OSArMzIxLDExIEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpwcm90ZWN0VGlsZVRleHR1cmVz
KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQogICAgIH0KIH0KIAotdm9pZCBUaWxlZExheWVy
Q2hyb21pdW06OnByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKK3Zv
aWQgVGlsZWRMYXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGVUaWxlcyhib29sIGlkbGUsIGlu
dCBsZWZ0LCBpbnQgdG9wLCBpbnQgcmlnaHQsIGludCBib3R0b20pCiB7Ci0gICAgQVNTRVJUKG1f
dGlsZXIpOwotCi0gICAgbV9za2lwc0RyYXcgPSBmYWxzZTsKLQotICAgIGlmIChjb250ZW50UmVj
dC5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9yZXF1ZXN0ZWRVcGRhdGVSZWN0ID0gSW50UmVjdCgp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV90aWxlci0+Z3Jvd0xheWVyVG9Db250
YWluKGNvbnRlbnRSZWN0KTsKLQotICAgIGlmICghbV90aWxlci0+bnVtVGlsZXMoKSkgewotICAg
ICAgICBtX3JlcXVlc3RlZFVwZGF0ZVJlY3QgPSBJbnRSZWN0KCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KICAgICAvLyBDcmVhdGUgdGlsZXMgYXMgbmVlZGVkLCBleHBhbmRpbmcgYSBkaXJ0
eSByZWN0IHRvIGNvbnRhaW4gYWxsCiAgICAgLy8gdGhlIGRpcnR5IHJlZ2lvbnMgY3VycmVudGx5
IGJlaW5nIGRyYXduLgogICAgIEludFJlY3QgZGlydHlMYXllclJlY3Q7Ci0gICAgaW50IGxlZnQs
IHRvcCwgcmlnaHQsIGJvdHRvbTsKLSAgICBtX3RpbGVyLT5jb250ZW50UmVjdFRvVGlsZUluZGlj
ZXMoY29udGVudFJlY3QsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CiAgICAgZm9yIChpbnQg
aiA9IHRvcDsgaiA8PSBib3R0b207ICsraikgewogICAgICAgICBmb3IgKGludCBpID0gbGVmdDsg
aSA8PSByaWdodDsgKytpKSB7CiAgICAgICAgICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0gdGls
ZUF0KGksIGopOwpAQCAtMzQ3LDIxICszMzUsMjIgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06
OnByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKICAgICAgICAgICAg
IGlmICghdGlsZS0+bWFuYWdlZFRleHR1cmUoKS0+aXNWYWxpZChtX3RpbGVyLT50aWxlU2l6ZSgp
LCBtX3RleHR1cmVGb3JtYXQpKQogICAgICAgICAgICAgICAgIHRpbGUtPm1fZGlydHlMYXllclJl
Y3QgPSBtX3RpbGVyLT50aWxlTGF5ZXJSZWN0KHRpbGUpOwogCi0gICAgICAgICAgICBpZiAoIXRp
bGUtPm1hbmFnZWRUZXh0dXJlKCktPnJlc2VydmUobV90aWxlci0+dGlsZVNpemUoKSwgbV90ZXh0
dXJlRm9ybWF0KSkgeworICAgICAgICAgICAgaWYgKCFpZGxlICYmICF0aWxlLT5tYW5hZ2VkVGV4
dHVyZSgpLT5yZXNlcnZlKG1fdGlsZXItPnRpbGVTaXplKCksIG1fdGV4dHVyZUZvcm1hdCkpIHsK
ICAgICAgICAgICAgICAgICBtX3NraXBzRHJhdyA9IHRydWU7CisgICAgICAgICAgICAgICAgbV9y
ZXNlcnZlRmFpbGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBjbGVhbnVwUmVzb3VyY2VzKCk7
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBp
ZiAoaWRsZSAmJiAhdGlsZS0+bWFuYWdlZFRleHR1cmUoKS0+cmVzZXJ2ZVNvZnQobV90aWxlci0+
dGlsZVNpemUoKSwgbV90ZXh0dXJlRm9ybWF0KSkgeworICAgICAgICAgICAgICAgIG1fcmVzZXJ2
ZUZhaWxlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
CiAgICAgICAgICAgICBkaXJ0eUxheWVyUmVjdC51bml0ZSh0aWxlLT5tX2RpcnR5TGF5ZXJSZWN0
KTsKICAgICAgICAgfQogICAgIH0KIAotICAgIC8vIER1ZSB0byBib3JkZXJzLCB3aGVuIHRoZSBw
YWludCByZWN0IGlzIGV4dGVuZGVkIHRvIHRpbGUgYm91bmRhcmllcywgaXQKLSAgICAvLyBtYXkg
ZW5kIHVwIG92ZXJsYXBwaW5nIG1vcmUgdGlsZXMgdGhhbiB0aGUgb3JpZ2luYWwgY29udGVudCBy
ZWN0LiBSZWNvcmQKLSAgICAvLyB0aGF0IG9yaWdpbmFsIHJlY3Qgc28gd2UgZG9uJ3QgdXBsb2Fk
IG1vcmUgdGlsZXMgdGhhbiBuZWNlc3NhcnkuCi0gICAgbV9yZXF1ZXN0ZWRVcGRhdGVSZWN0ID0g
Y29udGVudFJlY3Q7Ci0KICAgICBtX3BhaW50UmVjdCA9IG1fdGlsZXItPmxheWVyUmVjdFRvQ29u
dGVudFJlY3QoZGlydHlMYXllclJlY3QpOwogICAgIGlmIChkaXJ0eUxheWVyUmVjdC5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTM3Myw3ICszNjIsNiBAQCB2b2lkIFRpbGVkTGF5ZXJD
aHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQogICAg
IFJlZlB0cjxMYXllclRleHR1cmVVcGRhdGVyPiBwcm90ZWN0b3IodGV4dHVyZVVwZGF0ZXIoKSk7
CiAgICAgdGV4dHVyZVVwZGF0ZXIoKS0+cHJlcGFyZVRvVXBkYXRlKG1fcGFpbnRSZWN0LCBtX3Rp
bGVyLT50aWxlU2l6ZSgpLCBtX3RpbGVyLT5oYXNCb3JkZXJUZXhlbHMoKSk7CiAKLSAgICBtX3Rp
bGVyLT5jb250ZW50UmVjdFRvVGlsZUluZGljZXMobV9yZXF1ZXN0ZWRVcGRhdGVSZWN0LCBsZWZ0
LCB0b3AsIHJpZ2h0LCBib3R0b20pOwogICAgIGZvciAoaW50IGogPSB0b3A7IGogPD0gYm90dG9t
OyArK2opIHsKICAgICAgICAgZm9yIChpbnQgaSA9IGxlZnQ7IGkgPD0gcmlnaHQ7ICsraSkgewog
ICAgICAgICAgICAgVXBkYXRhYmxlVGlsZSogdGlsZSA9IHRpbGVBdChpLCBqKTsKQEAgLTM5OSw1
ICszODcsMTE1IEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGUoY29u
c3QgSW50UmVjdCYgY29udGVudFJlY3QpCiAgICAgfQogfQogCisKK3ZvaWQgVGlsZWRMYXllckNo
cm9taXVtOjpwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCit7Cisg
ICAgQVNTRVJUKG1fdGlsZXIpOworCisgICAgbV9za2lwc0RyYXcgPSBmYWxzZTsKKworICAgIG1f
cmVxdWVzdGVkVXBkYXRlVGlsZXNSZWN0ID0gSW50UmVjdCgpOworICAgIG1fcGFpbnRSZWN0ID0g
SW50UmVjdCgpOworCisgICAgaWYgKGNvbnRlbnRSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgbV90aWxlci0+Z3Jvd0xheWVyVG9Db250YWluKGNvbnRlbnRSZWN0KTsKKwor
ICAgIGlmICghbV90aWxlci0+bnVtVGlsZXMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50
IGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbTsKKyAgICBtX3RpbGVyLT5jb250ZW50UmVjdFRvVGls
ZUluZGljZXMoY29udGVudFJlY3QsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CisKKyAgICBw
cmVwYXJlVG9VcGRhdGVUaWxlcyhmYWxzZSwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKKwor
ICAgIC8vIER1ZSB0byBib3JkZXJzLCB3aGVuIHRoZSBwYWludCByZWN0IGlzIGV4dGVuZGVkIHRv
IHRpbGUgYm91bmRhcmllcywgaXQKKyAgICAvLyBtYXkgZW5kIHVwIG92ZXJsYXBwaW5nIG1vcmUg
dGlsZXMgdGhhbiB0aGUgb3JpZ2luYWwgY29udGVudCByZWN0LiBSZWNvcmQKKyAgICAvLyB0aGUg
b3JpZ2luYWwgdGlsZXMgc28gd2UgZG9uJ3QgdXBsb2FkIG1vcmUgdGlsZXMgdGhhbiBuZWNlc3Nh
cnkuCisgICAgaWYgKCFtX3BhaW50UmVjdC5pc0VtcHR5KCkpCisgICAgICAgIG1fcmVxdWVzdGVk
VXBkYXRlVGlsZXNSZWN0ID0gSW50UmVjdChsZWZ0LCB0b3AsIHJpZ2h0LWxlZnQrMSwgYm90dG9t
LXRvcCsxKTsKK30KKwordm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVUb1VwZGF0ZUlk
bGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCit7CisgICAgQVNTRVJUKG1fdGlsZXIpOwor
CisgICAgbV9yZXNlcnZlRmFpbGVkID0gZmFsc2U7CisKKyAgICAvLyBBYm9ydCBpZiB3ZSBoYXZl
IGFscmVhZHkgcHJlcGFyZWQgYSBwYWludC4KKyAgICBpZiAoIW1fcGFpbnRSZWN0LmlzRW1wdHko
KSB8fCAhbV9yZXF1ZXN0ZWRVcGRhdGVUaWxlc1JlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBJbnRSZWN0IGlkbGVQYWludENvbnRlbnRSZWN0ID0gY29udGVudFJlY3Q7Cisg
ICAgaWRsZVBhaW50Q29udGVudFJlY3QuaW5mbGF0ZShpZGxlUGFpbnRQYWRkaW5nV2lkdGgpOyAK
KyAgICBpZGxlUGFpbnRDb250ZW50UmVjdC5pbnRlcnNlY3QoSW50UmVjdChJbnRQb2ludDo6emVy
bygpLCBjb250ZW50Qm91bmRzKCkpKTsKKworICAgIG1fdGlsZXItPmdyb3dMYXllclRvQ29udGFp
bihpZGxlUGFpbnRDb250ZW50UmVjdCk7CisKKyAgICBpZiAoIW1fdGlsZXItPm51bVRpbGVzKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIC8vIEV4cGFuZCBvdXR3YXJkcyB1bnRpbCB3ZSBmaW5k
IGEgZGlydHkgcm93IG9yIGNvbHVtbiB0byB1cGRhdGUuCisgICAgaW50IGwxLCB0MSwgcjEsIGIx
LCBsMiwgdDIsIHIyLCBiMjsKKyAgICBtX3RpbGVyLT5jb250ZW50UmVjdFRvVGlsZUluZGljZXMo
Y29udGVudFJlY3QsIGwxLCB0MSwgcjEsIGIxKTsKKyAgICBtX3RpbGVyLT5jb250ZW50UmVjdFRv
VGlsZUluZGljZXMoaWRsZVBhaW50Q29udGVudFJlY3QsIGwyLCB0MiwgcjIsIGIyKTsKKyAgICB3
aGlsZSAoKGwxID4gbDIgfHwgdDEgPiB0MiB8fCByMSA8IHIyIHx8IGIxIDwgYjIpICYmICFtX3Jl
c2VydmVGYWlsZWQpIHsKKyAgICAgICAgaWYgKHQxID4gdDIpIHsKKyAgICAgICAgICAgIC0tdDE7
CisgICAgICAgICAgICBwcmVwYXJlVG9VcGRhdGVUaWxlcyh0cnVlLCBsMSwgdDEsIHIxLCB0MSk7
CisgICAgICAgICAgICBpZiAoIW1fcGFpbnRSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoYjEgPCBiMikgeworICAgICAgICAgICAg
KytiMTsKKyAgICAgICAgICAgIHByZXBhcmVUb1VwZGF0ZVRpbGVzKHRydWUsIGwxLCBiMSwgcjEs
IGIxKTsKKyAgICAgICAgICAgIGlmICghbV9wYWludFJlY3QuaXNFbXB0eSgpKQorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChsMSA+IGwyKSB7CisgICAgICAg
ICAgICAtLWwxOworICAgICAgICAgICAgcHJlcGFyZVRvVXBkYXRlVGlsZXModHJ1ZSwgbDEsIHQx
LCBsMSwgYjEpOworICAgICAgICAgICAgaWYgKCFtX3BhaW50UmVjdC5pc0VtcHR5KCkpCisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHIxIDwgcjIpIHsKKyAg
ICAgICAgICAgICsrcjE7CisgICAgICAgICAgICBwcmVwYXJlVG9VcGRhdGVUaWxlcyh0cnVlLCBy
MSwgdDEsIHIxLCBiMSk7CisgICAgICAgICAgICBpZiAoIW1fcGFpbnRSZWN0LmlzRW1wdHkoKSkK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgIAorICAgIC8vIER1
ZSB0byBib3JkZXJzLCB3aGVuIHRoZSBwYWludCByZWN0IGlzIGV4dGVuZGVkIHRvIHRpbGUgYm91
bmRhcmllcywgaXQKKyAgICAvLyBtYXkgZW5kIHVwIG92ZXJsYXBwaW5nIG1vcmUgdGlsZXMgdGhh
biB0aGUgb3JpZ2luYWwgY29udGVudCByZWN0LiBSZWNvcmQKKyAgICAvLyB0aGUgb3JpZ2luYWwg
dGlsZXMgc28gd2UgZG9uJ3QgdXBsb2FkIG1vcmUgdGlsZXMgdGhhbiBuZWNlc3NhcnkuCisgICAg
aWYgKCFtX3BhaW50UmVjdC5pc0VtcHR5KCkpCisgICAgICAgIG1fcmVxdWVzdGVkVXBkYXRlVGls
ZXNSZWN0ID0gSW50UmVjdChsMSwgdDEsIHIxLWwxKzEsIGIxLXQxKzEpOworfQorCitib29sIFRp
bGVkTGF5ZXJDaHJvbWl1bTo6bmVlZHNJZGxlUGFpbnQoY29uc3QgSW50UmVjdCYgY29udGVudFJl
Y3QpCit7CisgICAgaWYgKG1fc2tpcHNEcmF3IHx8IG1fcmVzZXJ2ZUZhaWxlZCkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgSW50UmVjdCBpZGxlUGFpbnRDb250ZW50UmVjdCA9IGNvbnRl
bnRSZWN0OworICAgIGlkbGVQYWludENvbnRlbnRSZWN0LmluZmxhdGUoaWRsZVBhaW50UGFkZGlu
Z1dpZHRoKTsgCisgICAgaWRsZVBhaW50Q29udGVudFJlY3QuaW50ZXJzZWN0KEludFJlY3QoSW50
UG9pbnQ6Onplcm8oKSwgY29udGVudEJvdW5kcygpKSk7CisKKyAgICBpbnQgbGVmdCwgdG9wLCBy
aWdodCwgYm90dG9tOworICAgIG1fdGlsZXItPmNvbnRlbnRSZWN0VG9UaWxlSW5kaWNlcyhpZGxl
UGFpbnRDb250ZW50UmVjdCwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKKyAgICBmb3IgKGlu
dCBqID0gdG9wOyBqIDw9IGJvdHRvbTsgKytqKSB7CisgICAgICAgIGZvciAoaW50IGkgPSBsZWZ0
OyBpIDw9IHJpZ2h0OyArK2kpIHsKKyAgICAgICAgICAgIGlmIChtX3JlcXVlc3RlZFVwZGF0ZVRp
bGVzUmVjdC5jb250YWlucyhJbnRQb2ludChpLCBqKSkpCisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0gdGlsZUF0KGksIGopOworICAg
ICAgICAgICAgaWYgKCF0aWxlIHx8ICF0aWxlLT5tYW5hZ2VkVGV4dHVyZSgpLT5pc1ZhbGlkKG1f
dGlsZXItPnRpbGVTaXplKCksIG1fdGV4dHVyZUZvcm1hdCkgfHwgdGlsZS0+ZGlydHkoKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKIH0KICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxl
ZExheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDVkYWYwZjAxOTQ3YTk5NDdjZDIzNWY1NWZi
NzM5NTllNDQ3YjFmNTYuLjY0MTZlYmE0ZDJjNDkzYjJkNjY5N2Q0OTg0ZTcwYjQ2NWQzY2E2ZmUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Rp
bGVkTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oCkBAIC02NSw5ICs2NSwxNiBAQCBwcm90ZWN0
ZWQ6CiAKICAgICAvLyBTZXQgaW52YWxpZGF0aW9ucyB0byBiZSBwb3RlbnRpYWxseSByZXBhaW50
ZWQgZHVyaW5nIHVwZGF0ZSgpLgogICAgIHZvaWQgaW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVj
dCYgY29udGVudFJlY3QpOworCiAgICAgLy8gUHJlcGFyZSBkYXRhIG5lZWRlZCB0byB1cGRhdGUg
dGV4dHVyZXMgdGhhdCBpbnRlcnNlY3Qgd2l0aCBjb250ZW50UmVjdC4KICAgICB2b2lkIHByZXBh
cmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCk7CiAKKyAgICAvLyBTYW1lIGFz
IGFib3ZlLCBidXQgdGhpcyB3aWxsIHRyeSB0byBwYWludCBhZGRpdGlvbmFsIHN1cnJvdW5kaW5n
IGNvbnRlbnQgaWYgaWRsZS4KKyAgICB2b2lkIHByZXBhcmVUb1VwZGF0ZUlkbGUoY29uc3QgSW50
UmVjdCYgY29udGVudFJlY3QpOworCisgICAgLy8gQWZ0ZXIgcHJlcGFyaW5nIGFuIHVwZGF0ZSwg
cmV0dXJucyB0cnVlIGlmIG1vcmUgcHJlLXBhaW50aW5nIGlzIG5lZWRlZC4KKyAgICBib29sIG5l
ZWRzSWRsZVBhaW50KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KTsKKwogICAgIHZpcnR1YWwg
dm9pZCBwcm90ZWN0VmlzaWJsZVRpbGVUZXh0dXJlcygpOwogCiBwcml2YXRlOgpAQCAtNzcsNiAr
ODQsOCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBjcmVhdGVUaWxlcklmTmVlZGVkKCk7CiAgICAg
dm9pZCBzZXRUaWxpbmdPcHRpb24oVGlsaW5nT3B0aW9uKTsKKyAKKyAgICB2b2lkIHByZXBhcmVU
b1VwZGF0ZVRpbGVzKGJvb2wgaWRsZSwgaW50IGxlZnQsIGludCB0b3AsIGludCByaWdodCwgaW50
IGJvdHRvbSk7CiAKICAgICBVcGRhdGFibGVUaWxlKiB0aWxlQXQoaW50LCBpbnQpIGNvbnN0Owog
ICAgIFVwZGF0YWJsZVRpbGUqIGNyZWF0ZVRpbGUoaW50LCBpbnQpOwpAQCAtODQsNyArOTMsOCBA
QCBwcml2YXRlOgogICAgIFRleHR1cmVNYW5hZ2VyKiB0ZXh0dXJlTWFuYWdlcigpIGNvbnN0Owog
CiAgICAgLy8gVGVtcG9yYXJ5IHN0YXRlIGhlbGQgYmV0d2VlbiBwcmVwYXJlVG9VcGRhdGUoKSBh
bmQgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcygpLgotICAgIEludFJlY3QgbV9yZXF1ZXN0ZWRV
cGRhdGVSZWN0OworICAgIEludFJlY3QgbV9yZXF1ZXN0ZWRVcGRhdGVUaWxlc1JlY3Q7CisKICAg
ICAvLyBTdGF0ZSBoZWxkIGJldHdlZW4gcHJlcGFyZVRvVXBkYXRlKCkgYW5kIHB1c2hQcm9wZXJ0
aWVzVG8oKS4gVGhpcyByZXByZXNlbnRzIHRoZSBhcmVhCiAgICAgLy8gb2YgdGhlIGxheWVyIHRo
YXQgaXMgYWN0dWFsbHkgcmUtcGFpbnRlZCBieSBXZWJLaXQuCiAgICAgSW50UmVjdCBtX3BhaW50
UmVjdDsKQEAgLTkyLDYgKzEwMiw3IEBAIHByaXZhdGU6CiAgICAgVGlsaW5nT3B0aW9uIG1fdGls
aW5nT3B0aW9uOwogICAgIEdDM0RlbnVtIG1fdGV4dHVyZUZvcm1hdDsKICAgICBib29sIG1fc2tp
cHNEcmF3OworICAgIGJvb2wgbV9yZXNlcnZlRmFpbGVkOwogICAgIExheWVyVGV4dHVyZVVwZGF0
ZXI6Ok9yaWVudGF0aW9uIG1fdGV4dHVyZU9yaWVudGF0aW9uOwogICAgIExheWVyVGV4dHVyZVVw
ZGF0ZXI6OlNhbXBsZWRUZXhlbEZvcm1hdCBtX3NhbXBsZWRUZXhlbEZvcm1hdDsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggNGYyYzFmYjYyNjRlZTdjM2E5ZTYxNzUzN2Ew
Mjg5ODJmOGFiMzNmZS4uZDBhMzM1NGQwYzBlMGIxM2Y5MzExYTFhYzg3NjM4YWRiY2NhYjMyMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCkBAIC04NSw3ICs4NSw3IEBAIGJvb2wg
Q0NMYXllclRyZWVIb3N0Ojppbml0aWFsaXplKCkKICAgICAvLyBVcGRhdGUgbV9zZXR0aW5ncyBi
YXNlZCBvbiBjYXBhYmlsaXRpZXMgdGhhdCB3ZSBnb3QgYmFjayBmcm9tIHRoZSByZW5kZXJlci4K
ICAgICBtX3NldHRpbmdzLmFjY2VsZXJhdGVQYWludGluZyA9IG1fcHJveHktPmxheWVyUmVuZGVy
ZXJDYXBhYmlsaXRpZXMoKS51c2luZ0FjY2VsZXJhdGVkUGFpbnRpbmc7CiAKLSAgICBtX2NvbnRl
bnRzVGV4dHVyZU1hbmFnZXIgPSBUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKFRleHR1cmVNYW5hZ2Vy
OjpoaWdoTGltaXRCeXRlcygpLCBtX3Byb3h5LT5sYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCku
bWF4VGV4dHVyZVNpemUpOworICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdlciA9IFRleHR1cmVN
YW5hZ2VyOjpjcmVhdGUoVGV4dHVyZU1hbmFnZXI6OmhpZ2hMaW1pdEJ5dGVzKCksIFRleHR1cmVN
YW5hZ2VyOjpyZWNsYWltTGltaXRCeXRlcyh2aWV3cG9ydFNpemUoKSksIG1fcHJveHktPmxheWVy
UmVuZGVyZXJDYXBhYmlsaXRpZXMoKS5tYXhUZXh0dXJlU2l6ZSk7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKQEAgLTExNyw3ICsxMTcsOSBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6YmVnaW5Db21t
aXRPbkltcGxUaHJlYWQoQ0NMYXllclRyZWVIb3N0SW1wbCogaG9zdEltcGwpCiAgICAgQVNTRVJU
KENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKICAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVI
b3N0Ojpjb21taXRUbyIsIHRoaXMsIDApOwogCi0gICAgY29udGVudHNUZXh0dXJlTWFuYWdlcigp
LT5yZWR1Y2VNZW1vcnlUb0xpbWl0KFRleHR1cmVNYW5hZ2VyOjpyZWNsYWltTGltaXRCeXRlcygp
KTsKKyAgICBzaXplX3QgcmVjbGFpbUxpbWl0ID0gVGV4dHVyZU1hbmFnZXI6OnJlY2xhaW1MaW1p
dEJ5dGVzKHZpZXdwb3J0U2l6ZSgpKTsKKyAgICBjb250ZW50c1RleHR1cmVNYW5hZ2VyKCktPnNl
dFNvZnRNZW1vcnlMaW1pdEJ5dGVzKHJlY2xhaW1MaW1pdCk7CisgICAgY29udGVudHNUZXh0dXJl
TWFuYWdlcigpLT5yZWR1Y2VNZW1vcnlUb0xpbWl0KHJlY2xhaW1MaW1pdCk7CiAgICAgY29udGVu
dHNUZXh0dXJlTWFuYWdlcigpLT5kZWxldGVFdmljdGVkVGV4dHVyZXMoaG9zdEltcGwtPmNvbnRl
bnRzVGV4dHVyZUFsbG9jYXRvcigpKTsKIH0KIApAQCAtMjU1LDcgKzI1Nyw3IEBAIHZvaWQgQ0NM
YXllclRyZWVIb3N0OjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKIAogICAgIG1fdmlzaWJsZSA9
IHZpc2libGU7CiAgICAgaWYgKCF2aXNpYmxlKSB7Ci0gICAgICAgIG1fY29udGVudHNUZXh0dXJl
TWFuYWdlci0+cmVkdWNlTWVtb3J5VG9MaW1pdChUZXh0dXJlTWFuYWdlcjo6bG93TGltaXRCeXRl
cygpKTsKKyAgICAgICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT5yZWR1Y2VNZW1vcnlUb0xp
bWl0KFRleHR1cmVNYW5hZ2VyOjpsb3dMaW1pdEJ5dGVzKHZpZXdwb3J0U2l6ZSgpKSk7CiAgICAg
ICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+dW5wcm90ZWN0QWxsVGV4dHVyZXMoKTsKICAg
ICB9CiAKQEAgLTI2OCw3ICsyNzAsOSBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c2V0VmlzaWJs
ZShib29sIHZpc2libGUpCiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6ZGlkQmVjb21lSW52aXNpYmxl
T25JbXBsVGhyZWFkKENDTGF5ZXJUcmVlSG9zdEltcGwqIGhvc3RJbXBsKQogewogICAgIEFTU0VS
VChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7Ci0gICAgY29udGVudHNUZXh0dXJlTWFuYWdlcigp
LT5yZWR1Y2VNZW1vcnlUb0xpbWl0KFRleHR1cmVNYW5hZ2VyOjpyZWNsYWltTGltaXRCeXRlcygp
KTsKKyAgICBzaXplX3QgcmVjbGFpbUxpbWl0ID0gVGV4dHVyZU1hbmFnZXI6OnJlY2xhaW1MaW1p
dEJ5dGVzKHZpZXdwb3J0U2l6ZSgpKTsKKyAgICBjb250ZW50c1RleHR1cmVNYW5hZ2VyKCktPnNl
dFNvZnRNZW1vcnlMaW1pdEJ5dGVzKHJlY2xhaW1MaW1pdCk7CisgICAgY29udGVudHNUZXh0dXJl
TWFuYWdlcigpLT5yZWR1Y2VNZW1vcnlUb0xpbWl0KHJlY2xhaW1MaW1pdCk7CiAgICAgY29udGVu
dHNUZXh0dXJlTWFuYWdlcigpLT5kZWxldGVFdmljdGVkVGV4dHVyZXMoaG9zdEltcGwtPmNvbnRl
bnRzVGV4dHVyZUFsbG9jYXRvcigpKTsKIH0KIApAQCAtMzMyLDE4ICszMzYsMjMgQEAgdm9pZCBD
Q0xheWVyVHJlZUhvc3Q6OnVwZGF0ZUxheWVycyhMYXllckNocm9taXVtKiByb290TGF5ZXIpCiAg
ICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRW
aXNpYmlsaXR5KHJvb3RMYXllciwgcm9vdExheWVyLCBtX3pvb21BbmltYXRvclRyYW5zZm9ybSwg
bV96b29tQW5pbWF0b3JUcmFuc2Zvcm0sIG1fdXBkYXRlTGlzdCwgcm9vdFJlbmRlclN1cmZhY2Ut
PmxheWVyTGlzdCgpLCBsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkubWF4VGV4dHVyZVNpemUp
OwogICAgIH0KIAotICAgIHBhaW50TGF5ZXJDb250ZW50cyhtX3VwZGF0ZUxpc3QpOworICAgIHBh
aW50TGF5ZXJDb250ZW50cyhtX3VwZGF0ZUxpc3QsIGZhbHNlIC8qIGlkbGUgKi8pOworICAgIC8v
IFRoZSBzZWNvbmQgKGlkbGUpIHBhaW50IHdpbGwgYmUgYSBuby1vcCBpbiBsYXllcnMgd2hlcmUg
cGFpbnRpbmcgYWxyZWFkeSBvY2N1cmVkIGFib3ZlLgorICAgIHBhaW50TGF5ZXJDb250ZW50cyht
X3VwZGF0ZUxpc3QsIHRydWUgLyogaWRsZSAqLyk7CiB9CiAKLXN0YXRpYyB2b2lkIHBhaW50Q29u
dGVudHNJZkRpcnR5KExheWVyQ2hyb21pdW0qIGxheWVyLCBjb25zdCBJbnRSZWN0JiB2aXNpYmxl
TGF5ZXJSZWN0KQorc3RhdGljIHZvaWQgcGFpbnRDb250ZW50c0lmRGlydHkoTGF5ZXJDaHJvbWl1
bSogbGF5ZXIsIGNvbnN0IEludFJlY3QmIHZpc2libGVMYXllclJlY3QsIGJvb2wgaWRsZSkKIHsK
ICAgICBpZiAobGF5ZXItPmRyYXdzQ29udGVudCgpKSB7CiAgICAgICAgIGxheWVyLT5zZXRWaXNp
YmxlTGF5ZXJSZWN0KHZpc2libGVMYXllclJlY3QpOwotICAgICAgICBsYXllci0+cGFpbnRDb250
ZW50c0lmRGlydHkoKTsKKyAgICAgICAgaWYgKCFpZGxlKQorICAgICAgICAgICAgbGF5ZXItPnBh
aW50Q29udGVudHNJZkRpcnR5KCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxheWVyLT5p
ZGxlUGFpbnRDb250ZW50c0lmRGlydHkoKTsKICAgICB9CiB9CiAKLXZvaWQgQ0NMYXllclRyZWVI
b3N0OjpwYWludE1hc2tBbmRSZXBsaWNhRm9yUmVuZGVyU3VyZmFjZShMYXllckNocm9taXVtKiBy
ZW5kZXJTdXJmYWNlTGF5ZXIpCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6cGFpbnRNYXNrQW5kUmVw
bGljYUZvclJlbmRlclN1cmZhY2UoTGF5ZXJDaHJvbWl1bSogcmVuZGVyU3VyZmFjZUxheWVyLCBi
b29sIGlkbGUpCiB7CiAgICAgLy8gTm90ZTogTWFza3MgYW5kIHJlcGxpY2FzIG9ubHkgZXhpc3Qg
Zm9yIGxheWVycyB0aGF0IG93biByZW5kZXIgc3VyZmFjZXMuIElmIHdlIHJlYWNoIHRoaXMgcG9p
bnQKICAgICAvLyBpbiBjb2RlLCB3ZSBhbHJlYWR5IGtub3cgdGhhdCBhdCBsZWFzdCBzb21ldGhp
bmcgd2lsbCBiZSBkcmF3biBpbnRvIHRoaXMgcmVuZGVyIHN1cmZhY2UsIHNvIHRoZQpAQCAtMzUx
LDcgKzM2MCw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpwYWludE1hc2tBbmRSZXBsaWNhRm9y
UmVuZGVyU3VyZmFjZShMYXllckNocm9taXVtKiByZW5kZXJTCiAKICAgICBpZiAocmVuZGVyU3Vy
ZmFjZUxheWVyLT5tYXNrTGF5ZXIoKSkgewogICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXItPm1h
c2tMYXllcigpLT5zZXRMYXllclRyZWVIb3N0KHRoaXMpOwotICAgICAgICBwYWludENvbnRlbnRz
SWZEaXJ0eShyZW5kZXJTdXJmYWNlTGF5ZXItPm1hc2tMYXllcigpLCBJbnRSZWN0KEludFBvaW50
KCksIHJlbmRlclN1cmZhY2VMYXllci0+Y29udGVudEJvdW5kcygpKSk7CisgICAgICAgIHBhaW50
Q29udGVudHNJZkRpcnR5KHJlbmRlclN1cmZhY2VMYXllci0+bWFza0xheWVyKCksIEludFJlY3Qo
SW50UG9pbnQoKSwgcmVuZGVyU3VyZmFjZUxheWVyLT5jb250ZW50Qm91bmRzKCkpLCBpZGxlKTsK
ICAgICB9CiAKICAgICBMYXllckNocm9taXVtKiByZXBsaWNhTGF5ZXIgPSByZW5kZXJTdXJmYWNl
TGF5ZXItPnJlcGxpY2FMYXllcigpOwpAQCAtMzYwLDE2ICszNjksMTYgQEAgdm9pZCBDQ0xheWVy
VHJlZUhvc3Q6OnBhaW50TWFza0FuZFJlcGxpY2FGb3JSZW5kZXJTdXJmYWNlKExheWVyQ2hyb21p
dW0qIHJlbmRlclMKICAgICAgICAgSW50UmVjdCB2aXNpYmxlTGF5ZXJSZWN0ID0gQ0NMYXllclRy
ZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlTGF5ZXJSZWN0PExheWVyQ2hyb21pdW0+KHJl
bmRlclN1cmZhY2VMYXllcik7CiAKICAgICAgICAgcmVwbGljYUxheWVyLT5zZXRMYXllclRyZWVI
b3N0KHRoaXMpOwotICAgICAgICBwYWludENvbnRlbnRzSWZEaXJ0eShyZXBsaWNhTGF5ZXIsIHZp
c2libGVMYXllclJlY3QpOworICAgICAgICBwYWludENvbnRlbnRzSWZEaXJ0eShyZXBsaWNhTGF5
ZXIsIHZpc2libGVMYXllclJlY3QsIGlkbGUpOwogCiAgICAgICAgIGlmIChyZXBsaWNhTGF5ZXIt
Pm1hc2tMYXllcigpKSB7CiAgICAgICAgICAgICByZXBsaWNhTGF5ZXItPm1hc2tMYXllcigpLT5z
ZXRMYXllclRyZWVIb3N0KHRoaXMpOwotICAgICAgICAgICAgcGFpbnRDb250ZW50c0lmRGlydHko
cmVwbGljYUxheWVyLT5tYXNrTGF5ZXIoKSwgSW50UmVjdChJbnRQb2ludCgpLCByZXBsaWNhTGF5
ZXItPm1hc2tMYXllcigpLT5jb250ZW50Qm91bmRzKCkpKTsKKyAgICAgICAgICAgIHBhaW50Q29u
dGVudHNJZkRpcnR5KHJlcGxpY2FMYXllci0+bWFza0xheWVyKCksIEludFJlY3QoSW50UG9pbnQo
KSwgcmVwbGljYUxheWVyLT5tYXNrTGF5ZXIoKS0+Y29udGVudEJvdW5kcygpKSwgaWRsZSk7CiAg
ICAgICAgIH0KICAgICB9CiB9CiAKLXZvaWQgQ0NMYXllclRyZWVIb3N0OjpwYWludExheWVyQ29u
dGVudHMoY29uc3QgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KQordm9pZCBDQ0xh
eWVyVHJlZUhvc3Q6OnBhaW50TGF5ZXJDb250ZW50cyhjb25zdCBMYXllckxpc3QmIHJlbmRlclN1
cmZhY2VMYXllckxpc3QsIGJvb2wgaWRsZSkKIHsKICAgICBmb3IgKGludCBzdXJmYWNlSW5kZXgg
PSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSAtIDE7IHN1cmZhY2VJbmRleCA+PSAwIDsg
LS1zdXJmYWNlSW5kZXgpIHsKICAgICAgICAgTGF5ZXJDaHJvbWl1bSogcmVuZGVyU3VyZmFjZUxh
eWVyID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdFtzdXJmYWNlSW5kZXhdLmdldCgpOwpAQCAtMzg1
LDcgKzM5NCw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpwYWludExheWVyQ29udGVudHMoY29u
c3QgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0CiAgICAgICAgICAgICBjb250aW51
ZTsKIAogICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXItPnNldExheWVyVHJlZUhvc3QodGhpcyk7
Ci0gICAgICAgIHBhaW50TWFza0FuZFJlcGxpY2FGb3JSZW5kZXJTdXJmYWNlKHJlbmRlclN1cmZh
Y2VMYXllcik7CisgICAgICAgIHBhaW50TWFza0FuZFJlcGxpY2FGb3JSZW5kZXJTdXJmYWNlKHJl
bmRlclN1cmZhY2VMYXllciwgaWRsZSk7CiAKICAgICAgICAgY29uc3QgTGF5ZXJMaXN0JiBsYXll
ckxpc3QgPSByZW5kZXJTdXJmYWNlLT5sYXllckxpc3QoKTsKICAgICAgICAgQVNTRVJUKGxheWVy
TGlzdC5zaXplKCkpOwpAQCAtNDA0LDcgKzQxMyw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0Ojpw
YWludExheWVyQ29udGVudHMoY29uc3QgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEludFJlY3QgdmlzaWJsZUxheWVyUmVjdCA9IEND
TGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUxheWVyUmVjdDxMYXllckNocm9t
aXVtPihsYXllcik7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHBhaW50Q29udGVudHNJZkRp
cnR5KGxheWVyLCB2aXNpYmxlTGF5ZXJSZWN0KTsKKyAgICAgICAgICAgIHBhaW50Q29udGVudHNJ
ZkRpcnR5KGxheWVyLCB2aXNpYmxlTGF5ZXJSZWN0LCBpZGxlKTsKICAgICAgICAgfQogICAgIH0K
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKaW5kZXggNzUxOTU0NWUxNzUwNGI2YTI0Y2Mx
YTc0Mjg5NmE2ODFhNzUyNzk0ZS4uYTVkM2UyMzg3NDNjYTJkMjczMzBlMjA5ZmVlMjg5Yzg5MTcy
MzhlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKQEAgLTE4NSw4ICsxODUsOCBAQCBw
cm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxMYXllckNocm9t
aXVtPiA+IExheWVyTGlzdDsKIAotICAgIHZvaWQgcGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExh
eWVyTGlzdCYpOwotICAgIHZvaWQgcGFpbnRNYXNrQW5kUmVwbGljYUZvclJlbmRlclN1cmZhY2Uo
TGF5ZXJDaHJvbWl1bSopOworICAgIHZvaWQgcGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExheWVy
TGlzdCYsIGJvb2wgaWRsZVBhaW50KTsKKyAgICB2b2lkIHBhaW50TWFza0FuZFJlcGxpY2FGb3JS
ZW5kZXJTdXJmYWNlKExheWVyQ2hyb21pdW0qLCBib29sIGlkbGVQYWludCk7CiAKICAgICB2b2lk
IHVwZGF0ZUxheWVycyhMYXllckNocm9taXVtKik7CiAgICAgdm9pZCB1cGRhdGVDb21wb3NpdG9y
UmVzb3VyY2VzKExheWVyQ2hyb21pdW0qLCBHcmFwaGljc0NvbnRleHQzRCosIENDVGV4dHVyZVVw
ZGF0ZXImKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116308</attachid>
            <date>2011-11-22 19:39:23 -0800</date>
            <delta_ts>2011-11-22 22:14:36 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72686-20111122193922.patch</filename>
            <type>text/plain</type>
            <size>33525</size>
            <attacher name="Eric Penner">epenner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTk4NDAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBjNjUxMmMyYjQ5ZmE0NWVm
MDZmNjA0ZThjNDJhMWMyNDUwZjJmN2Q0Li40MmFkMDNjNWJhNTE2MmZmNWI1MGY2NWM5OTQ4Mjc1
N2IwNGVkYzU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTEtMTEtMTcgIEVyaWMg
UGVubmVyICA8ZXBlbm5lckBnb29nbGUuY29tPgorCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiAoT09QUyEpCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c0lmRGly
dHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJv
bWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OmNvbnRhaW5z
TWlzc2luZ1RpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6Y29u
dGFpbnNEaXJ0eVRpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6
Y2FsY3VsYXRlT3B0aW1hbFByZXBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJD
aHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlUHJlcGFpbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUaWxpbmdEYXRhLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJUaWxpbmdEYXRhOjp0aWxlSW5kaWNlc1RvQ29udGVudFJlY3QpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUaWxpbmdEYXRhLmg6
CisKIDIwMTEtMTEtMTAgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJtYW5uQHJpbS5jb20+
CiAKICAgICAgICAgRGVwbG95IFNWR0xlbmd0aENvbnRleHQgaW4gbW9yZSBwbGFjZXMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRM
YXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcAppbmRleCBkYjBhZTQ2OTllNzg5NjkyZjUxYzQw
YjhjZGU3NjQ4NGZkMWM0YWE4Li5jNDdkNzNjOTA4ZjA3ZTJmMmQzNzdiZmU1YmU2MDExNDQ2NWI2
NDU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCkBAIC0xMTQsNiArMTE0
LDIwIEBAIHZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHNJZkRpcnR5KCkK
ICAgICByZXNldE5lZWRzRGlzcGxheSgpOwogfQogCit2b2lkIENvbnRlbnRMYXllckNocm9taXVt
OjppZGxlUGFpbnRDb250ZW50c0lmRGlydHkoKQoreworICAgIGlmICghZHJhd3NDb250ZW50KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCA9IHZpc2li
bGVMYXllclJlY3QoKTsKKyAgICBpZiAobGF5ZXJSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgcHJlcGFyZVRvVXBkYXRlSWRsZShsYXllclJlY3QpOworICAgIGlmIChuZWVk
c0lkbGVQYWludChsYXllclJlY3QpKQorICAgICAgICBzZXROZWVkc0NvbW1pdCgpOworfQorCiBi
b29sIENvbnRlbnRMYXllckNocm9taXVtOjpkcmF3c0NvbnRlbnQoKSBjb25zdAogewogICAgIHJl
dHVybiBtX2RlbGVnYXRlICYmIG1fZGVsZWdhdGUtPmRyYXdzQ29udGVudCgpICYmIFRpbGVkTGF5
ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0u
aAppbmRleCBiODM0ZTY3NmJkNjM0NDVhYTQ1M2IzNjVlZWUyODAyNDBmMzgwOWMxLi4wYzU3NGI1
ZGZkYzBhNTcxYjgxMWJlMDM5NzY0YWM3NWIxYzJlM2VlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXll
ckNocm9taXVtLmgKQEAgLTUwLDYgKzUwLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfkNvbnRl
bnRMYXllckNocm9taXVtKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50c0lmRGly
dHkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgaWRsZVBhaW50Q29udGVudHNJZkRpcnR5KCk7CiAKIHBy
b3RlY3RlZDoKICAgICBleHBsaWNpdCBDb250ZW50TGF5ZXJDaHJvbWl1bShDQ0xheWVyRGVsZWdh
dGUqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyQ2hyb21pdW0uaAppbmRleCA3NDdkYzk4NjljZjEwYjYyZjMwZTliZjA5YWYy
Mjc5ODY2NGQzNDI0Li44YmE4NDUxNWUxYzFiOTlmMzZkMzk3ZjQ3YWZmZDI1ODE4ZWIyMzE0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
ckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJDaHJvbWl1bS5oCkBAIC0xNTgsNiArMTU4LDcgQEAgcHVibGljOgogICAgIC8vIFRo
ZXNlIG1ldGhvZHMgdHlwaWNhbGx5IG5lZWQgdG8gYmUgb3ZlcndyaXR0ZW4gYnkgZGVyaXZlZCBj
bGFzc2VzLgogICAgIHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQogICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzSWZEaXJ0eSgpIHsgfQorICAg
IHZpcnR1YWwgdm9pZCBpZGxlUGFpbnRDb250ZW50c0lmRGlydHkoKSB7IH0KICAgICB2aXJ0dWFs
IHZvaWQgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCosIENDVGV4
dHVyZVVwZGF0ZXImKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0SXNNYXNrKGJvb2wpIHsgfQog
ICAgIHZpcnR1YWwgdm9pZCB1bnJlc2VydmVDb250ZW50c1RleHR1cmUoKSB7IH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCmluZGV4IDY1NmEyODZlOGY3YzMxMTVlZTZiOWJm
MDAzNmJhYTdkYTk3MjdkY2MuLjVjOWRmYjY1ZjBiZTkwMTljYzBiOTc5MjM1YmJmMmQ4MjgxNDRj
MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApAQCAtMjg4LDEzICsy
ODgsMTQgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMoKQogICAgICAg
ICByZXR1cm47CiAKICAgICBzaXplX3QgY29udGVudHNNZW1vcnlVc2VCeXRlcyA9IG1fY29udGVu
dHNUZXh0dXJlQWxsb2NhdG9yLT5jdXJyZW50TWVtb3J5VXNlQnl0ZXMoKTsKLSAgICBtX3JlbmRl
clN1cmZhY2VUZXh0dXJlTWFuYWdlci0+c2V0TWVtb3J5TGltaXRCeXRlcyhUZXh0dXJlTWFuYWdl
cjo6aGlnaExpbWl0Qnl0ZXMoKSAtIGNvbnRlbnRzTWVtb3J5VXNlQnl0ZXMpOworICAgIHNpemVf
dCBoYXJkTGltaXRCeXRlcyA9IHN0ZDo6bWF4PHNpemVfdD4oMCwgVGV4dHVyZU1hbmFnZXI6Omhp
Z2hMaW1pdEJ5dGVzKCkgLSBjb250ZW50c01lbW9yeVVzZUJ5dGVzKTsKKyAgICBzaXplX3QgcmVj
bGFpbUxpbWl0Qnl0ZXMgPSBzdGQ6Om1heDxzaXplX3Q+KDAsIFRleHR1cmVNYW5hZ2VyOjpyZWNs
YWltTGltaXRCeXRlcyh2aWV3cG9ydFNpemUoKSkgLSBjb250ZW50c01lbW9yeVVzZUJ5dGVzKTsK
KyAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+c2V0SGFyZE1lbW9yeUxpbWl0Qnl0
ZXMoaGFyZExpbWl0Qnl0ZXMpOworICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyLT5z
ZXRTb2Z0TWVtb3J5TGltaXRCeXRlcyhyZWNsYWltTGltaXRCeXRlcyk7CisKICAgICBkcmF3TGF5
ZXJzSW50ZXJuYWwoKTsKIAotICAgIGlmIChUZXh0dXJlTWFuYWdlcjo6cmVjbGFpbUxpbWl0Qnl0
ZXMoKSA+IGNvbnRlbnRzTWVtb3J5VXNlQnl0ZXMpCi0gICAgICAgIG1fcmVuZGVyU3VyZmFjZVRl
eHR1cmVNYW5hZ2VyLT5yZWR1Y2VNZW1vcnlUb0xpbWl0KFRleHR1cmVNYW5hZ2VyOjpyZWNsYWlt
TGltaXRCeXRlcygpIC0gY29udGVudHNNZW1vcnlVc2VCeXRlcyk7Ci0gICAgZWxzZQotICAgICAg
ICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+cmVkdWNlTWVtb3J5VG9MaW1pdCgwKTsK
KyAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+cmVkdWNlTWVtb3J5VG9MaW1pdChy
ZWNsYWltTGltaXRCeXRlcyk7CiAgICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXItPmRl
bGV0ZUV2aWN0ZWRUZXh0dXJlcyhtX3JlbmRlclN1cmZhY2VUZXh0dXJlQWxsb2NhdG9yLmdldCgp
KTsKIAogICAgIGlmIChzZXR0aW5ncygpLmNvbXBvc2l0ZU9mZnNjcmVlbikKQEAgLTY2Myw3ICs2
NjQsNyBAQCBib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZVNoYXJlZE9iamVj
dHMoKQogCiAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5mbHVzaCgpKTsKIAot
ICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyID0gVGV4dHVyZU1hbmFnZXI6OmNyZWF0
ZShUZXh0dXJlTWFuYWdlcjo6aGlnaExpbWl0Qnl0ZXMoKSwgbV9jYXBhYmlsaXRpZXMubWF4VGV4
dHVyZVNpemUpOworICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyID0gVGV4dHVyZU1h
bmFnZXI6OmNyZWF0ZShUZXh0dXJlTWFuYWdlcjo6aGlnaExpbWl0Qnl0ZXMoKSwgVGV4dHVyZU1h
bmFnZXI6OnJlY2xhaW1MaW1pdEJ5dGVzKHZpZXdwb3J0U2l6ZSgpKSwgbV9jYXBhYmlsaXRpZXMu
bWF4VGV4dHVyZVNpemUpOwogICAgIG1fY29udGVudHNUZXh0dXJlQWxsb2NhdG9yID0gVHJhY2tp
bmdUZXh0dXJlQWxsb2NhdG9yOjpjcmVhdGUobV9jb250ZXh0LmdldCgpKTsKICAgICBtX3JlbmRl
clN1cmZhY2VUZXh0dXJlQWxsb2NhdG9yID0gVHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yOjpjcmVh
dGUobV9jb250ZXh0LmdldCgpKTsKICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL01hbmFnZWRUZXh0dXJlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL01hbmFnZWRUZXh0dXJl
LmNwcAppbmRleCA1YmJmZjZhNDNlNWIwMzhiM2JmMzMyN2ZiZDNkMWU1MTQzYjdmMWRlLi4yMjZj
YmRhOGQyN2Y1NWFiZDgzMGI2MTA2NTAyMzRjNzNhNTMzMGIzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9NYW5hZ2VkVGV4dHVyZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTWFuYWdlZFRleHR1
cmUuY3BwCkBAIC01NCw2ICs1NCwxNiBAQCBib29sIE1hbmFnZWRUZXh0dXJlOjppc1ZhbGlkKGNv
bnN0IEludFNpemUmIHNpemUsIHVuc2lnbmVkIGZvcm1hdCkKIAogYm9vbCBNYW5hZ2VkVGV4dHVy
ZTo6cmVzZXJ2ZShjb25zdCBJbnRTaXplJiBzaXplLCB1bnNpZ25lZCBmb3JtYXQpCiB7CisgICAg
cmV0dXJuIHJlc2VydmVUb0xpbWl0QXRQcmlvcml0eShzaXplLCBmb3JtYXQsIFRleHR1cmVNYW5h
Z2VyOjpIYXJkTWVtb3J5TGltaXQsIFRleHR1cmVNYW5hZ2VyOjpIaWdoVGV4dHVyZVByaW9yaXR5
KTsKK30KKworYm9vbCBNYW5hZ2VkVGV4dHVyZTo6cmVzZXJ2ZVNvZnQoY29uc3QgSW50U2l6ZSYg
c2l6ZSwgdW5zaWduZWQgZm9ybWF0KQoreworICAgIHJldHVybiByZXNlcnZlVG9MaW1pdEF0UHJp
b3JpdHkoc2l6ZSwgZm9ybWF0LCBUZXh0dXJlTWFuYWdlcjo6U29mdE1lbW9yeUxpbWl0LCBUZXh0
dXJlTWFuYWdlcjo6TG93VGV4dHVyZVByaW9yaXR5KTsKK30KKworYm9vbCBNYW5hZ2VkVGV4dHVy
ZTo6cmVzZXJ2ZVRvTGltaXRBdFByaW9yaXR5KGNvbnN0IEludFNpemUmIHNpemUsIHVuc2lnbmVk
IGZvcm1hdCwgVGV4dHVyZU1hbmFnZXI6Ok1lbW9yeUxpbWl0IGxpbWl0LCBUZXh0dXJlTWFuYWdl
cjo6VGV4dHVyZVByaW9yaXR5IHByaW9yaXR5KQorewogICAgIGlmICghbV90b2tlbikKICAgICAg
ICAgbV90b2tlbiA9IG1fdGV4dHVyZU1hbmFnZXItPmdldFRva2VuKCk7CiAKQEAgLTYyLDcgKzcy
LDcgQEAgYm9vbCBNYW5hZ2VkVGV4dHVyZTo6cmVzZXJ2ZShjb25zdCBJbnRTaXplJiBzaXplLCB1
bnNpZ25lZCBmb3JtYXQpCiAgICAgICAgIG1fdGV4dHVyZU1hbmFnZXItPnByb3RlY3RUZXh0dXJl
KG1fdG9rZW4pOwogICAgIGVsc2UgewogICAgICAgICBtX3RleHR1cmVJZCA9IDA7Ci0gICAgICAg
IHJlc2VydmVkID0gbV90ZXh0dXJlTWFuYWdlci0+cmVxdWVzdFRleHR1cmUobV90b2tlbiwgc2l6
ZSwgZm9ybWF0KTsKKyAgICAgICAgcmVzZXJ2ZWQgPSBtX3RleHR1cmVNYW5hZ2VyLT5yZXF1ZXN0
VGV4dHVyZShtX3Rva2VuLCBzaXplLCBmb3JtYXQsIGxpbWl0LCBwcmlvcml0eSk7CiAgICAgICAg
IGlmIChyZXNlcnZlZCkgewogICAgICAgICAgICAgbV9zaXplID0gc2l6ZTsKICAgICAgICAgICAg
IG1fZm9ybWF0ID0gZm9ybWF0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTWFuYWdlZFRleHR1cmUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL01hbmFnZWRUZXh0dXJlLmgKaW5kZXggNGQ0MzgwOTU5NTM0
MGY1ZDczM2Q1Njc5MjkxYTkyMDY0YzdiMWFlNS4uZDVjYmQ4ZGViZDIwZjg5ZDQ0OTI2ZDk3ZjI0
MzAzZDQwOGYzYjBmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTWFuYWdlZFRleHR1cmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9NYW5hZ2VkVGV4dHVyZS5oCkBAIC00OCw2ICs0OCw4IEBAIHB1
YmxpYzoKIAogICAgIGJvb2wgaXNWYWxpZChjb25zdCBJbnRTaXplJiwgdW5zaWduZWQgZm9ybWF0
KTsKICAgICBib29sIHJlc2VydmUoY29uc3QgSW50U2l6ZSYsIHVuc2lnbmVkIGZvcm1hdCk7Cisg
ICAgYm9vbCByZXNlcnZlU29mdChjb25zdCBJbnRTaXplJiwgdW5zaWduZWQgZm9ybWF0KTsKKyAg
ICBib29sIHJlc2VydmVUb0xpbWl0QXRQcmlvcml0eShjb25zdCBJbnRTaXplJiwgdW5zaWduZWQg
Zm9ybWF0LCBUZXh0dXJlTWFuYWdlcjo6TWVtb3J5TGltaXQsIFRleHR1cmVNYW5hZ2VyOjpUZXh0
dXJlUHJpb3JpdHkpOwogICAgIHZvaWQgdW5yZXNlcnZlKCk7CiAgICAgYm9vbCBpc1Jlc2VydmVk
KCkKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9UZXh0dXJlTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5jcHAKaW5kZXggYzYwMGQ5ZTY0OTFkN2QxZTc1
NzIyMjE0ZTMxOWRhN2YwYzE4ODRjZS4uN2E1MjdjOTA1NWZjOThlODMxZDgxMjExOTMxMTFlMDU3
MDAyMDIzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vVGV4dHVyZU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmNwcApAQCAtMzcsMTMgKzM3LDE1IEBAIHNp
emVfdCBUZXh0dXJlTWFuYWdlcjo6aGlnaExpbWl0Qnl0ZXMoKQogICAgIHJldHVybiAxMjggKiAx
MDI0ICogMTAyNDsKIH0KIAotc2l6ZV90IFRleHR1cmVNYW5hZ2VyOjpyZWNsYWltTGltaXRCeXRl
cygpCitzaXplX3QgVGV4dHVyZU1hbmFnZXI6OnJlY2xhaW1MaW1pdEJ5dGVzKGNvbnN0IEludFNp
emUmIHZpZXdwb3J0U2l6ZSkKIHsKKyAgICAvLyBGSVhNRTogQ2hvb3NlIGEgbGltaXQgYmFzZWQg
b24gdmlld3BvcnQgc2l6ZS4KICAgICByZXR1cm4gNjQgKiAxMDI0ICogMTAyNDsKIH0KIAotc2l6
ZV90IFRleHR1cmVNYW5hZ2VyOjpsb3dMaW1pdEJ5dGVzKCkKK3NpemVfdCBUZXh0dXJlTWFuYWdl
cjo6bG93TGltaXRCeXRlcyhjb25zdCBJbnRTaXplJiB2aWV3cG9ydCkKIHsKKyAgICAvLyBGSVhN
RTogQ2hvb3NlIGEgbGltaXQgYmFzZWQgb24gdmlld3BvcnQgc2l6ZS4KICAgICByZXR1cm4gMyAq
IDEwMjQgKiAxMDI0OwogfQogCkBAIC02MCwxOSArNjIsMjUgQEAgc2l6ZV90IFRleHR1cmVNYW5h
Z2VyOjptZW1vcnlVc2VCeXRlcyhjb25zdCBJbnRTaXplJiBzaXplLCBHQzNEZW51bSB0ZXh0dXJl
Rm9ybWEKIH0KIAogCi1UZXh0dXJlTWFuYWdlcjo6VGV4dHVyZU1hbmFnZXIoc2l6ZV90IG1lbW9y
eUxpbWl0Qnl0ZXMsIGludCBtYXhUZXh0dXJlU2l6ZSkKLSAgICA6IG1fbWVtb3J5TGltaXRCeXRl
cyhtZW1vcnlMaW1pdEJ5dGVzKQorVGV4dHVyZU1hbmFnZXI6OlRleHR1cmVNYW5hZ2VyKHNpemVf
dCBoYXJkTWVtb3J5TGltaXRCeXRlcywgc2l6ZV90IHNvZnRNZW1vcnlMaW1pdEJ5dGVzLCBpbnQg
bWF4VGV4dHVyZVNpemUpCisgICAgOiBtX2hhcmRNZW1vcnlMaW1pdEJ5dGVzKGhhcmRNZW1vcnlM
aW1pdEJ5dGVzKQorICAgICwgbV9zb2Z0TWVtb3J5TGltaXRCeXRlcyhzb2Z0TWVtb3J5TGltaXRC
eXRlcykKICAgICAsIG1fbWVtb3J5VXNlQnl0ZXMoMCkKICAgICAsIG1fbWF4VGV4dHVyZVNpemUo
bWF4VGV4dHVyZVNpemUpCiAgICAgLCBtX25leHRUb2tlbigxKQogewogfQogCi12b2lkIFRleHR1
cmVNYW5hZ2VyOjpzZXRNZW1vcnlMaW1pdEJ5dGVzKHNpemVfdCBtZW1vcnlMaW1pdEJ5dGVzKQor
dm9pZCBUZXh0dXJlTWFuYWdlcjo6c2V0SGFyZE1lbW9yeUxpbWl0Qnl0ZXMoc2l6ZV90IG1lbW9y
eUxpbWl0Qnl0ZXMpCiB7CiAgICAgcmVkdWNlTWVtb3J5VG9MaW1pdChtZW1vcnlMaW1pdEJ5dGVz
KTsKICAgICBBU1NFUlQoY3VycmVudE1lbW9yeVVzZUJ5dGVzKCkgPCBtZW1vcnlMaW1pdEJ5dGVz
KTsKLSAgICBtX21lbW9yeUxpbWl0Qnl0ZXMgPSBtZW1vcnlMaW1pdEJ5dGVzOworICAgIG1faGFy
ZE1lbW9yeUxpbWl0Qnl0ZXMgPSBtZW1vcnlMaW1pdEJ5dGVzOworfQorCit2b2lkIFRleHR1cmVN
YW5hZ2VyOjpzZXRTb2Z0TWVtb3J5TGltaXRCeXRlcyhzaXplX3QgbWVtb3J5TGltaXRCeXRlcykK
K3sKKyAgICBtX3NvZnRNZW1vcnlMaW1pdEJ5dGVzID0gbWVtb3J5TGltaXRCeXRlczsKIH0KIAog
VGV4dHVyZVRva2VuIFRleHR1cmVNYW5hZ2VyOjpnZXRUb2tlbigpCkBAIC0xNDgsOSArMTU2LDE0
IEBAIHZvaWQgVGV4dHVyZU1hbmFnZXI6OmFkZFRleHR1cmUoVGV4dHVyZVRva2VuIHRva2VuLCBU
ZXh0dXJlSW5mbyBpbmZvKQogewogICAgIEFTU0VSVCghbV90ZXh0dXJlTFJVU2V0LmNvbnRhaW5z
KHRva2VuKSk7CiAgICAgQVNTRVJUKCFtX3RleHR1cmVzLmNvbnRhaW5zKHRva2VuKSk7CisgICAg
QVNTRVJUKGluZm8ucHJpb3JpdHkgPT0gSGlnaFRleHR1cmVQcmlvcml0eSB8fCBpbmZvLnByaW9y
aXR5ID09IExvd1RleHR1cmVQcmlvcml0eSk7CisKICAgICBtX21lbW9yeVVzZUJ5dGVzICs9IG1l
bW9yeVVzZUJ5dGVzKGluZm8uc2l6ZSwgaW5mby5mb3JtYXQpOwogICAgIG1fdGV4dHVyZXMuc2V0
KHRva2VuLCBpbmZvKTsKLSAgICBtX3RleHR1cmVMUlVTZXQuYWRkKHRva2VuKTsKKyAgICBpZiAo
aW5mby5wcmlvcml0eSA9PSBIaWdoVGV4dHVyZVByaW9yaXR5KQorICAgICAgICBtX3RleHR1cmVM
UlVTZXQuYWRkKHRva2VuKTsKKyAgICBlbHNlCisgICAgICAgIG1fdGV4dHVyZUxSVVNldC5pbnNl
cnRCZWZvcmUobV90ZXh0dXJlTFJVU2V0LmJlZ2luKCksIHRva2VuKTsKIH0KIAogdm9pZCBUZXh0
dXJlTWFuYWdlcjo6ZGVsZXRlRXZpY3RlZFRleHR1cmVzKFRleHR1cmVBbGxvY2F0b3IqIGFsbG9j
YXRvcikKQEAgLTIwOCwxMSArMjIxLDE2IEBAIHVuc2lnbmVkIFRleHR1cmVNYW5hZ2VyOjphbGxv
Y2F0ZVRleHR1cmUoVGV4dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yLCBUZXh0dXJlVG9rCiAgICAg
cmV0dXJuIHRleHR1cmVJZDsKIH0KIAotYm9vbCBUZXh0dXJlTWFuYWdlcjo6cmVxdWVzdFRleHR1
cmUoVGV4dHVyZVRva2VuIHRva2VuLCBJbnRTaXplIHNpemUsIHVuc2lnbmVkIGZvcm1hdCkKK2Jv
b2wgVGV4dHVyZU1hbmFnZXI6OnJlcXVlc3RUZXh0dXJlKFRleHR1cmVUb2tlbiB0b2tlbiwgSW50
U2l6ZSBzaXplLCB1bnNpZ25lZCBmb3JtYXQsIE1lbW9yeUxpbWl0IG1lbW9yeUxpbWl0LCBUZXh0
dXJlUHJpb3JpdHkgcHJpb3JpdHkpCiB7CiAgICAgaWYgKHNpemUud2lkdGgoKSA+IG1fbWF4VGV4
dHVyZVNpemUgfHwgc2l6ZS5oZWlnaHQoKSA+IG1fbWF4VGV4dHVyZVNpemUpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAorICAgIEFTU0VSVChtZW1vcnlMaW1pdCA9PSBIYXJkTWVtb3J5TGltaXQg
fHwgbWVtb3J5TGltaXQgPT0gU29mdE1lbW9yeUxpbWl0KTsKKyAgICBBU1NFUlQocHJpb3JpdHkg
PT0gSGlnaFRleHR1cmVQcmlvcml0eSB8fCBwcmlvcml0eSA9PSBMb3dUZXh0dXJlUHJpb3JpdHkp
OworCisgICAgc2l6ZV90IG1lbW9yeUxpbWl0Qnl0ZXMgPSAobWVtb3J5TGltaXQgPT0gSGFyZE1l
bW9yeUxpbWl0KSA/IG1faGFyZE1lbW9yeUxpbWl0Qnl0ZXM6bV9zb2Z0TWVtb3J5TGltaXRCeXRl
czsKKwogICAgIFRleHR1cmVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90ZXh0dXJlcy5maW5kKHRva2Vu
KTsKICAgICBpZiAoaXQgIT0gbV90ZXh0dXJlcy5lbmQoKSkgewogICAgICAgICBBU1NFUlQoaXQt
PnNlY29uZC5zaXplICE9IHNpemUgfHwgaXQtPnNlY29uZC5mb3JtYXQgIT0gZm9ybWF0KTsKQEAg
LTIyMCwxMSArMjM4LDExIEBAIGJvb2wgVGV4dHVyZU1hbmFnZXI6OnJlcXVlc3RUZXh0dXJlKFRl
eHR1cmVUb2tlbiB0b2tlbiwgSW50U2l6ZSBzaXplLCB1bnNpZ25lZCBmCiAgICAgfQogCiAgICAg
c2l6ZV90IG1lbW9yeVJlcXVpcmVkQnl0ZXMgPSBtZW1vcnlVc2VCeXRlcyhzaXplLCBmb3JtYXQp
OwotICAgIGlmIChtZW1vcnlSZXF1aXJlZEJ5dGVzID4gbV9tZW1vcnlMaW1pdEJ5dGVzKQorICAg
IGlmIChtZW1vcnlSZXF1aXJlZEJ5dGVzID4gbWVtb3J5TGltaXRCeXRlcykKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgcmVkdWNlTWVtb3J5VG9MaW1pdChtX21lbW9yeUxpbWl0Qnl0ZXMg
LSBtZW1vcnlSZXF1aXJlZEJ5dGVzKTsKLSAgICBpZiAobV9tZW1vcnlVc2VCeXRlcyArIG1lbW9y
eVJlcXVpcmVkQnl0ZXMgPiBtX21lbW9yeUxpbWl0Qnl0ZXMpCisgICAgcmVkdWNlTWVtb3J5VG9M
aW1pdChtZW1vcnlMaW1pdEJ5dGVzIC0gbWVtb3J5UmVxdWlyZWRCeXRlcyk7CisgICAgaWYgKG1f
bWVtb3J5VXNlQnl0ZXMgKyBtZW1vcnlSZXF1aXJlZEJ5dGVzID4gbV9oYXJkTWVtb3J5TGltaXRC
eXRlcykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgVGV4dHVyZUluZm8gaW5mbzsKQEAg
LTIzMiw2ICsyNTAsNyBAQCBib29sIFRleHR1cmVNYW5hZ2VyOjpyZXF1ZXN0VGV4dHVyZShUZXh0
dXJlVG9rZW4gdG9rZW4sIEludFNpemUgc2l6ZSwgdW5zaWduZWQgZgogICAgIGluZm8uZm9ybWF0
ID0gZm9ybWF0OwogICAgIGluZm8udGV4dHVyZUlkID0gMDsKICAgICBpbmZvLmlzUHJvdGVjdGVk
ID0gdHJ1ZTsKKyAgICBpbmZvLnByaW9yaXR5ID0gcHJpb3JpdHk7CiAjaWZuZGVmIE5ERUJVRwog
ICAgIGluZm8uYWxsb2NhdG9yID0gMDsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmgKaW5kZXgg
ZjMyN2I0Y2ZjZDFiMTBkYWU3ZGFkNjM0NjA0ZjY3MzliNTIwZjIwOC4uYTcxOWRiNmIzMWNhMmZk
NzMyMzBlYjM5YWRjZDk5YmMyMWQ2ZmIyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5oCkBAIC00OSwy
NyArNDksMzAgQEAgcHJvdGVjdGVkOgogY2xhc3MgVGV4dHVyZU1hbmFnZXIgewogICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKFRleHR1cmVNYW5hZ2VyKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFz
c093blB0cjxUZXh0dXJlTWFuYWdlcj4gY3JlYXRlKHNpemVfdCBtZW1vcnlMaW1pdEJ5dGVzLCBp
bnQgbWF4VGV4dHVyZVNpemUpCisgICAgc3RhdGljIFBhc3NPd25QdHI8VGV4dHVyZU1hbmFnZXI+
IGNyZWF0ZShzaXplX3QgaGFyZE1lbW9yeUxpbWl0Qnl0ZXMsIHNpemVfdCBzb2Z0TWVtb3J5TGlt
aXRCeXRlcywgaW50IG1heFRleHR1cmVTaXplKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0
UHRyKG5ldyBUZXh0dXJlTWFuYWdlcihtZW1vcnlMaW1pdEJ5dGVzLCBtYXhUZXh0dXJlU2l6ZSkp
OworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFRleHR1cmVNYW5hZ2VyKGhhcmRNZW1vcnlM
aW1pdEJ5dGVzLCBzb2Z0TWVtb3J5TGltaXRCeXRlcywgbWF4VGV4dHVyZVNpemUpKTsKICAgICB9
CiAKICAgICAvLyBBYnNvbHV0ZSBtYXhpbXVtIGxpbWl0IGZvciB0ZXh0dXJlIGFsbG9jYXRpb25z
IGZvciB0aGlzIGluc3RhbmNlLgogICAgIHN0YXRpYyBzaXplX3QgaGlnaExpbWl0Qnl0ZXMoKTsK
LSAgICAvLyBQcmVmZXJyZWQgdGV4dHVyZSBzaXplIGxpbWl0LiBDYW4gYmUgZXhjZWVkZWQgaWYg
bmVlZGVkLgotICAgIHN0YXRpYyBzaXplX3QgcmVjbGFpbUxpbWl0Qnl0ZXMoKTsKKyAgICAvLyBQ
cmVmZXJyZWQgdGV4dHVyZSBzaXplIGxpbWl0IGdpdmVuIHRoZSB2aWV3cG9ydCBzaXplLgorICAg
IHN0YXRpYyBzaXplX3QgcmVjbGFpbUxpbWl0Qnl0ZXMoY29uc3QgSW50U2l6ZSYgdmlld3BvcnRT
aXplKTsKICAgICAvLyBUaGUgbWF4aW11bSB0ZXh0dXJlIG1lbW9yeSB1c2FnZSB3aGVuIGFza2Vk
IHRvIHJlbGVhc2UgdGV4dHVyZXMuCi0gICAgc3RhdGljIHNpemVfdCBsb3dMaW1pdEJ5dGVzKCk7
CisgICAgc3RhdGljIHNpemVfdCBsb3dMaW1pdEJ5dGVzKGNvbnN0IEludFNpemUmIHZpZXdwb3J0
KTsKIAogICAgIHN0YXRpYyBzaXplX3QgbWVtb3J5VXNlQnl0ZXMoY29uc3QgSW50U2l6ZSYsIEdD
M0RlbnVtIGZvcm1hdCk7CiAKLSAgICB2b2lkIHNldE1lbW9yeUxpbWl0Qnl0ZXMoc2l6ZV90KTsK
KyAgICB2b2lkIHNldEhhcmRNZW1vcnlMaW1pdEJ5dGVzKHNpemVfdCk7CisgICAgdm9pZCBzZXRT
b2Z0TWVtb3J5TGltaXRCeXRlcyhzaXplX3QpOwogCiAgICAgVGV4dHVyZVRva2VuIGdldFRva2Vu
KCk7CiAgICAgdm9pZCByZWxlYXNlVG9rZW4oVGV4dHVyZVRva2VuKTsKICAgICBib29sIGhhc1Rl
eHR1cmUoVGV4dHVyZVRva2VuKTsKIAotICAgIGJvb2wgcmVxdWVzdFRleHR1cmUoVGV4dHVyZVRv
a2VuLCBJbnRTaXplLCBHQzNEZW51bSB0ZXh0dXJlRm9ybWF0KTsKKyAgICBlbnVtIE1lbW9yeUxp
bWl0IHsgSGFyZE1lbW9yeUxpbWl0LCBTb2Z0TWVtb3J5TGltaXQgfTsKKyAgICBlbnVtIFRleHR1
cmVQcmlvcml0eSB7IEhpZ2hUZXh0dXJlUHJpb3JpdHksIExvd1RleHR1cmVQcmlvcml0eSB9Owor
ICAgIGJvb2wgcmVxdWVzdFRleHR1cmUoVGV4dHVyZVRva2VuLCBJbnRTaXplLCBHQzNEZW51bSB0
ZXh0dXJlRm9ybWF0LCBNZW1vcnlMaW1pdCwgVGV4dHVyZVByaW9yaXR5KTsKIAogICAgIHZvaWQg
cHJvdGVjdFRleHR1cmUoVGV4dHVyZVRva2VuKTsKICAgICB2b2lkIHVucHJvdGVjdFRleHR1cmUo
VGV4dHVyZVRva2VuKTsKQEAgLTg1LDEzICs4OCwxNCBAQCBwdWJsaWM6CiAgICAgc2l6ZV90IGN1
cnJlbnRNZW1vcnlVc2VCeXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fbWVtb3J5VXNlQnl0ZXM7IH0K
IAogcHJpdmF0ZToKLSAgICBUZXh0dXJlTWFuYWdlcihzaXplX3QgbWVtb3J5TGltaXRCeXRlcywg
aW50IG1heFRleHR1cmVTaXplKTsKKyAgICBUZXh0dXJlTWFuYWdlcihzaXplX3QgaGFyZE1lbW9y
eUxpbWl0Qnl0ZXMsIHNpemVfdCBzb2Z0TWVtb3J5TGltaXRCeXRlcywgaW50IG1heFRleHR1cmVT
aXplKTsKIAogICAgIHN0cnVjdCBUZXh0dXJlSW5mbyB7CiAgICAgICAgIEludFNpemUgc2l6ZTsK
ICAgICAgICAgR0MzRGVudW0gZm9ybWF0OwogICAgICAgICB1bnNpZ25lZCB0ZXh0dXJlSWQ7CiAg
ICAgICAgIGJvb2wgaXNQcm90ZWN0ZWQ7CisgICAgICAgIFRleHR1cmVQcmlvcml0eSBwcmlvcml0
eTsKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgIFRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRvcjsK
ICNlbmRpZgpAQCAtMTA0LDcgKzEwOCw4IEBAIHByaXZhdGU6CiAgICAgVGV4dHVyZU1hcCBtX3Rl
eHR1cmVzOwogICAgIExpc3RIYXNoU2V0PFRleHR1cmVUb2tlbj4gbV90ZXh0dXJlTFJVU2V0Owog
Ci0gICAgc2l6ZV90IG1fbWVtb3J5TGltaXRCeXRlczsKKyAgICBzaXplX3QgbV9oYXJkTWVtb3J5
TGltaXRCeXRlczsKKyAgICBzaXplX3QgbV9zb2Z0TWVtb3J5TGltaXRCeXRlczsKICAgICBzaXpl
X3QgbV9tZW1vcnlVc2VCeXRlczsKICAgICBpbnQgbV9tYXhUZXh0dXJlU2l6ZTsKICAgICBUZXh0
dXJlVG9rZW4gbV9uZXh0VG9rZW47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcAppbmRl
eCBiZDFmMzY2NzcxNzNkMmRjOWVkNGQ3OWIwMzZkYjdiNzg0YTYyMTIyLi43NDg0OWZmNTFjZjVh
ZWY3NjVjYWZjNDk2ZDIwNmYyMThlNTlmY2VkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1
bS5jcHAKQEAgLTQ0LDYgKzQ0LDkgQEAgc3RhdGljIGludCBtYXhVbnRpbGVkU2l6ZSA9IDUxMjsK
IC8vIFdoZW4gdGlsaW5nIGlzIGVuYWJsZWQsIHVzZSB0aWxlcyBvZiB0aGlzIGRpbWVuc2lvbiBz
cXVhcmVkLgogc3RhdGljIGludCBkZWZhdWx0VGlsZVNpemUgPSAyNTY7CiAKKy8vIEZJWE1FOiBQ
cm9iYWJseSB3YW50IHRvIHNldCB0aGlzIGJhc2VkIG9uIHRoZSB2aWV3cG9ydC4KK3N0YXRpYyBp
bnQgaWRsZVBhaW50UGFkZGluZ1dpZHRoID0gZGVmYXVsdFRpbGVTaXplOworCiB1c2luZyBuYW1l
c3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC03Miw2ICs3NSw3IEBAIFRpbGVk
TGF5ZXJDaHJvbWl1bTo6VGlsZWRMYXllckNocm9taXVtKENDTGF5ZXJEZWxlZ2F0ZSogZGVsZWdh
dGUpCiAgICAgLCBtX3RpbGluZ09wdGlvbihBdXRvVGlsZSkKICAgICAsIG1fdGV4dHVyZUZvcm1h
dChHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNKQogICAgICwgbV9za2lwc0RyYXcoZmFs
c2UpCisgICAgLCBtX3Jlc2VydmVGYWlsZWQoZmFsc2UpCiAgICAgLCBtX3RleHR1cmVPcmllbnRh
dGlvbihMYXllclRleHR1cmVVcGRhdGVyOjpJbnZhbGlkT3JpZW50YXRpb24pCiAgICAgLCBtX3Nh
bXBsZWRUZXhlbEZvcm1hdChMYXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXRJ
bnZhbGlkKQogewpAQCAtOTIsNyArOTYsNyBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6Y2xl
YW51cFJlc291cmNlcygpCiAKICAgICBtX3RpbGVyLmNsZWFyKCk7CiAgICAgbV9wYWludFJlY3Qg
PSBJbnRSZWN0KCk7Ci0gICAgbV9yZXF1ZXN0ZWRVcGRhdGVSZWN0ID0gSW50UmVjdCgpOworICAg
IG1fcmVxdWVzdGVkVXBkYXRlVGlsZXNSZWN0ID0gSW50UmVjdCgpOwogfQogCiB2b2lkIFRpbGVk
TGF5ZXJDaHJvbWl1bTo6dXBkYXRlVGlsZVNpemVBbmRUaWxpbmdPcHRpb24oKQpAQCAtMTU3LDEx
ICsxNjEsMTMgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnNldExheWVyVHJlZUhvc3QoQ0NM
YXllclRyZWVIb3N0KiBob3N0KQogdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBv
c2l0b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIENDVGV4dHVyZVVwZGF0
ZXImIHVwZGF0ZXIpCiB7CiAgICAgLy8gUGFpbnRpbmcgY291bGQgY2F1c2UgY29tcG9zaXRpbmcg
dG8gZ2V0IHR1cm5lZCBvZmYsIHdoaWNoIG1heSBjYXVzZSB0aGUgdGlsZXIgdG8gYmVjb21lIGlu
dmFsaWRhdGVkIG1pZC11cGRhdGUuCi0gICAgaWYgKG1fc2tpcHNEcmF3IHx8IG1fcmVxdWVzdGVk
VXBkYXRlUmVjdC5pc0VtcHR5KCkgfHwgIW1fdGlsZXItPm51bVRpbGVzKCkpCisgICAgaWYgKG1f
c2tpcHNEcmF3IHx8IG1fcmVxdWVzdGVkVXBkYXRlVGlsZXNSZWN0LmlzRW1wdHkoKSB8fCAhbV90
aWxlci0+bnVtVGlsZXMoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaW50IGxlZnQsIHRvcCwg
cmlnaHQsIGJvdHRvbTsKLSAgICBtX3RpbGVyLT5jb250ZW50UmVjdFRvVGlsZUluZGljZXMobV9y
ZXF1ZXN0ZWRVcGRhdGVSZWN0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworICAgIGludCBs
ZWZ0ID0gbV9yZXF1ZXN0ZWRVcGRhdGVUaWxlc1JlY3QueCgpOworICAgIGludCB0b3AgPSBtX3Jl
cXVlc3RlZFVwZGF0ZVRpbGVzUmVjdC55KCk7CisgICAgaW50IHJpZ2h0ID0gbV9yZXF1ZXN0ZWRV
cGRhdGVUaWxlc1JlY3QubWF4WCgpLTE7CisgICAgaW50IGJvdHRvbSA9IG1fcmVxdWVzdGVkVXBk
YXRlVGlsZXNSZWN0Lm1heFkoKS0xOwogICAgIGZvciAoaW50IGogPSB0b3A7IGogPD0gYm90dG9t
OyArK2opIHsKICAgICAgICAgZm9yIChpbnQgaSA9IGxlZnQ7IGkgPD0gcmlnaHQ7ICsraSkgewog
ICAgICAgICAgICAgVXBkYXRhYmxlVGlsZSogdGlsZSA9IHRpbGVBdChpLCBqKTsKQEAgLTMxNSwy
OSArMzIxLDExIEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpwcm90ZWN0VGlsZVRleHR1cmVz
KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQogICAgIH0KIH0KIAotdm9pZCBUaWxlZExheWVy
Q2hyb21pdW06OnByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKK3Zv
aWQgVGlsZWRMYXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGVUaWxlcyhib29sIGlkbGUsIGlu
dCBsZWZ0LCBpbnQgdG9wLCBpbnQgcmlnaHQsIGludCBib3R0b20pCiB7Ci0gICAgQVNTRVJUKG1f
dGlsZXIpOwotCi0gICAgbV9za2lwc0RyYXcgPSBmYWxzZTsKLQotICAgIGlmIChjb250ZW50UmVj
dC5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9yZXF1ZXN0ZWRVcGRhdGVSZWN0ID0gSW50UmVjdCgp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV90aWxlci0+Z3Jvd0xheWVyVG9Db250
YWluKGNvbnRlbnRSZWN0KTsKLQotICAgIGlmICghbV90aWxlci0+bnVtVGlsZXMoKSkgewotICAg
ICAgICBtX3JlcXVlc3RlZFVwZGF0ZVJlY3QgPSBJbnRSZWN0KCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KICAgICAvLyBDcmVhdGUgdGlsZXMgYXMgbmVlZGVkLCBleHBhbmRpbmcgYSBkaXJ0
eSByZWN0IHRvIGNvbnRhaW4gYWxsCiAgICAgLy8gdGhlIGRpcnR5IHJlZ2lvbnMgY3VycmVudGx5
IGJlaW5nIGRyYXduLgogICAgIEludFJlY3QgZGlydHlMYXllclJlY3Q7Ci0gICAgaW50IGxlZnQs
IHRvcCwgcmlnaHQsIGJvdHRvbTsKLSAgICBtX3RpbGVyLT5jb250ZW50UmVjdFRvVGlsZUluZGlj
ZXMoY29udGVudFJlY3QsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CiAgICAgZm9yIChpbnQg
aiA9IHRvcDsgaiA8PSBib3R0b207ICsraikgewogICAgICAgICBmb3IgKGludCBpID0gbGVmdDsg
aSA8PSByaWdodDsgKytpKSB7CiAgICAgICAgICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0gdGls
ZUF0KGksIGopOwpAQCAtMzQ3LDIxICszMzUsMjIgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06
OnByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKICAgICAgICAgICAg
IGlmICghdGlsZS0+bWFuYWdlZFRleHR1cmUoKS0+aXNWYWxpZChtX3RpbGVyLT50aWxlU2l6ZSgp
LCBtX3RleHR1cmVGb3JtYXQpKQogICAgICAgICAgICAgICAgIHRpbGUtPm1fZGlydHlMYXllclJl
Y3QgPSBtX3RpbGVyLT50aWxlTGF5ZXJSZWN0KHRpbGUpOwogCi0gICAgICAgICAgICBpZiAoIXRp
bGUtPm1hbmFnZWRUZXh0dXJlKCktPnJlc2VydmUobV90aWxlci0+dGlsZVNpemUoKSwgbV90ZXh0
dXJlRm9ybWF0KSkgeworICAgICAgICAgICAgaWYgKCFpZGxlICYmICF0aWxlLT5tYW5hZ2VkVGV4
dHVyZSgpLT5yZXNlcnZlKG1fdGlsZXItPnRpbGVTaXplKCksIG1fdGV4dHVyZUZvcm1hdCkpIHsK
ICAgICAgICAgICAgICAgICBtX3NraXBzRHJhdyA9IHRydWU7CisgICAgICAgICAgICAgICAgbV9y
ZXNlcnZlRmFpbGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBjbGVhbnVwUmVzb3VyY2VzKCk7
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBp
ZiAoaWRsZSAmJiAhdGlsZS0+bWFuYWdlZFRleHR1cmUoKS0+cmVzZXJ2ZVNvZnQobV90aWxlci0+
dGlsZVNpemUoKSwgbV90ZXh0dXJlRm9ybWF0KSkgeworICAgICAgICAgICAgICAgIG1fcmVzZXJ2
ZUZhaWxlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
CiAgICAgICAgICAgICBkaXJ0eUxheWVyUmVjdC51bml0ZSh0aWxlLT5tX2RpcnR5TGF5ZXJSZWN0
KTsKICAgICAgICAgfQogICAgIH0KIAotICAgIC8vIER1ZSB0byBib3JkZXJzLCB3aGVuIHRoZSBw
YWludCByZWN0IGlzIGV4dGVuZGVkIHRvIHRpbGUgYm91bmRhcmllcywgaXQKLSAgICAvLyBtYXkg
ZW5kIHVwIG92ZXJsYXBwaW5nIG1vcmUgdGlsZXMgdGhhbiB0aGUgb3JpZ2luYWwgY29udGVudCBy
ZWN0LiBSZWNvcmQKLSAgICAvLyB0aGF0IG9yaWdpbmFsIHJlY3Qgc28gd2UgZG9uJ3QgdXBsb2Fk
IG1vcmUgdGlsZXMgdGhhbiBuZWNlc3NhcnkuCi0gICAgbV9yZXF1ZXN0ZWRVcGRhdGVSZWN0ID0g
Y29udGVudFJlY3Q7Ci0KICAgICBtX3BhaW50UmVjdCA9IG1fdGlsZXItPmxheWVyUmVjdFRvQ29u
dGVudFJlY3QoZGlydHlMYXllclJlY3QpOwogICAgIGlmIChkaXJ0eUxheWVyUmVjdC5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTM3Myw3ICszNjIsNiBAQCB2b2lkIFRpbGVkTGF5ZXJD
aHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQogICAg
IFJlZlB0cjxMYXllclRleHR1cmVVcGRhdGVyPiBwcm90ZWN0b3IodGV4dHVyZVVwZGF0ZXIoKSk7
CiAgICAgdGV4dHVyZVVwZGF0ZXIoKS0+cHJlcGFyZVRvVXBkYXRlKG1fcGFpbnRSZWN0LCBtX3Rp
bGVyLT50aWxlU2l6ZSgpLCBtX3RpbGVyLT5oYXNCb3JkZXJUZXhlbHMoKSk7CiAKLSAgICBtX3Rp
bGVyLT5jb250ZW50UmVjdFRvVGlsZUluZGljZXMobV9yZXF1ZXN0ZWRVcGRhdGVSZWN0LCBsZWZ0
LCB0b3AsIHJpZ2h0LCBib3R0b20pOwogICAgIGZvciAoaW50IGogPSB0b3A7IGogPD0gYm90dG9t
OyArK2opIHsKICAgICAgICAgZm9yIChpbnQgaSA9IGxlZnQ7IGkgPD0gcmlnaHQ7ICsraSkgewog
ICAgICAgICAgICAgVXBkYXRhYmxlVGlsZSogdGlsZSA9IHRpbGVBdChpLCBqKTsKQEAgLTM5OSw1
ICszODcsMTE1IEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGUoY29u
c3QgSW50UmVjdCYgY29udGVudFJlY3QpCiAgICAgfQogfQogCisKK3ZvaWQgVGlsZWRMYXllckNo
cm9taXVtOjpwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCit7Cisg
ICAgQVNTRVJUKG1fdGlsZXIpOworCisgICAgbV9za2lwc0RyYXcgPSBmYWxzZTsKKworICAgIG1f
cmVxdWVzdGVkVXBkYXRlVGlsZXNSZWN0ID0gSW50UmVjdCgpOworICAgIG1fcGFpbnRSZWN0ID0g
SW50UmVjdCgpOworCisgICAgaWYgKGNvbnRlbnRSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgbV90aWxlci0+Z3Jvd0xheWVyVG9Db250YWluKGNvbnRlbnRSZWN0KTsKKwor
ICAgIGlmICghbV90aWxlci0+bnVtVGlsZXMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50
IGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbTsKKyAgICBtX3RpbGVyLT5jb250ZW50UmVjdFRvVGls
ZUluZGljZXMoY29udGVudFJlY3QsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CisKKyAgICBw
cmVwYXJlVG9VcGRhdGVUaWxlcyhmYWxzZSwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKKwor
ICAgIC8vIER1ZSB0byBib3JkZXJzLCB3aGVuIHRoZSBwYWludCByZWN0IGlzIGV4dGVuZGVkIHRv
IHRpbGUgYm91bmRhcmllcywgaXQKKyAgICAvLyBtYXkgZW5kIHVwIG92ZXJsYXBwaW5nIG1vcmUg
dGlsZXMgdGhhbiB0aGUgb3JpZ2luYWwgY29udGVudCByZWN0LiBSZWNvcmQKKyAgICAvLyB0aGUg
b3JpZ2luYWwgdGlsZXMgc28gd2UgZG9uJ3QgdXBsb2FkIG1vcmUgdGlsZXMgdGhhbiBuZWNlc3Nh
cnkuCisgICAgaWYgKCFtX3BhaW50UmVjdC5pc0VtcHR5KCkpCisgICAgICAgIG1fcmVxdWVzdGVk
VXBkYXRlVGlsZXNSZWN0ID0gSW50UmVjdChsZWZ0LCB0b3AsIHJpZ2h0LWxlZnQrMSwgYm90dG9t
LXRvcCsxKTsKK30KKwordm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVUb1VwZGF0ZUlk
bGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCit7CisgICAgQVNTRVJUKG1fdGlsZXIpOwor
CisgICAgbV9yZXNlcnZlRmFpbGVkID0gZmFsc2U7CisKKyAgICAvLyBBYm9ydCBpZiB3ZSBoYXZl
IGFscmVhZHkgcHJlcGFyZWQgYSBwYWludC4KKyAgICBpZiAoIW1fcGFpbnRSZWN0LmlzRW1wdHko
KSB8fCAhbV9yZXF1ZXN0ZWRVcGRhdGVUaWxlc1JlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBJbnRSZWN0IGlkbGVQYWludENvbnRlbnRSZWN0ID0gY29udGVudFJlY3Q7Cisg
ICAgaWRsZVBhaW50Q29udGVudFJlY3QuaW5mbGF0ZShpZGxlUGFpbnRQYWRkaW5nV2lkdGgpOyAK
KyAgICBpZGxlUGFpbnRDb250ZW50UmVjdC5pbnRlcnNlY3QoSW50UmVjdChJbnRQb2ludDo6emVy
bygpLCBjb250ZW50Qm91bmRzKCkpKTsKKworICAgIG1fdGlsZXItPmdyb3dMYXllclRvQ29udGFp
bihpZGxlUGFpbnRDb250ZW50UmVjdCk7CisKKyAgICBpZiAoIW1fdGlsZXItPm51bVRpbGVzKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIC8vIEV4cGFuZCBvdXR3YXJkcyB1bnRpbCB3ZSBmaW5k
IGEgZGlydHkgcm93IG9yIGNvbHVtbiB0byB1cGRhdGUuCisgICAgaW50IGwxLCB0MSwgcjEsIGIx
LCBsMiwgdDIsIHIyLCBiMjsKKyAgICBtX3RpbGVyLT5jb250ZW50UmVjdFRvVGlsZUluZGljZXMo
Y29udGVudFJlY3QsIGwxLCB0MSwgcjEsIGIxKTsKKyAgICBtX3RpbGVyLT5jb250ZW50UmVjdFRv
VGlsZUluZGljZXMoaWRsZVBhaW50Q29udGVudFJlY3QsIGwyLCB0MiwgcjIsIGIyKTsKKyAgICB3
aGlsZSAoKGwxID4gbDIgfHwgdDEgPiB0MiB8fCByMSA8IHIyIHx8IGIxIDwgYjIpICYmICFtX3Jl
c2VydmVGYWlsZWQpIHsKKyAgICAgICAgaWYgKGIxIDwgYjIpIHsKKyAgICAgICAgICAgICsrYjE7
CisgICAgICAgICAgICBwcmVwYXJlVG9VcGRhdGVUaWxlcyh0cnVlLCBsMSwgYjEsIHIxLCBiMSk7
CisgICAgICAgICAgICBpZiAoIW1fcGFpbnRSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAodDEgPiB0MikgeworICAgICAgICAgICAg
LS10MTsKKyAgICAgICAgICAgIHByZXBhcmVUb1VwZGF0ZVRpbGVzKHRydWUsIGwxLCB0MSwgcjEs
IHQxKTsKKyAgICAgICAgICAgIGlmICghbV9wYWludFJlY3QuaXNFbXB0eSgpKQorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChsMSA+IGwyKSB7CisgICAgICAg
ICAgICAtLWwxOworICAgICAgICAgICAgcHJlcGFyZVRvVXBkYXRlVGlsZXModHJ1ZSwgbDEsIHQx
LCBsMSwgYjEpOworICAgICAgICAgICAgaWYgKCFtX3BhaW50UmVjdC5pc0VtcHR5KCkpCisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHIxIDwgcjIpIHsKKyAg
ICAgICAgICAgICsrcjE7CisgICAgICAgICAgICBwcmVwYXJlVG9VcGRhdGVUaWxlcyh0cnVlLCBy
MSwgdDEsIHIxLCBiMSk7CisgICAgICAgICAgICBpZiAoIW1fcGFpbnRSZWN0LmlzRW1wdHkoKSkK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgIAorICAgIC8vIER1
ZSB0byBib3JkZXJzLCB3aGVuIHRoZSBwYWludCByZWN0IGlzIGV4dGVuZGVkIHRvIHRpbGUgYm91
bmRhcmllcywgaXQKKyAgICAvLyBtYXkgZW5kIHVwIG92ZXJsYXBwaW5nIG1vcmUgdGlsZXMgdGhh
biB0aGUgb3JpZ2luYWwgY29udGVudCByZWN0LiBSZWNvcmQKKyAgICAvLyB0aGUgb3JpZ2luYWwg
dGlsZXMgc28gd2UgZG9uJ3QgdXBsb2FkIG1vcmUgdGlsZXMgdGhhbiBuZWNlc3NhcnkuCisgICAg
aWYgKCFtX3BhaW50UmVjdC5pc0VtcHR5KCkpCisgICAgICAgIG1fcmVxdWVzdGVkVXBkYXRlVGls
ZXNSZWN0ID0gSW50UmVjdChsMSwgdDEsIHIxLWwxKzEsIGIxLXQxKzEpOworfQorCitib29sIFRp
bGVkTGF5ZXJDaHJvbWl1bTo6bmVlZHNJZGxlUGFpbnQoY29uc3QgSW50UmVjdCYgY29udGVudFJl
Y3QpCit7CisgICAgaWYgKG1fc2tpcHNEcmF3IHx8IG1fcmVzZXJ2ZUZhaWxlZCkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgSW50UmVjdCBpZGxlUGFpbnRDb250ZW50UmVjdCA9IGNvbnRl
bnRSZWN0OworICAgIGlkbGVQYWludENvbnRlbnRSZWN0LmluZmxhdGUoaWRsZVBhaW50UGFkZGlu
Z1dpZHRoKTsgCisgICAgaWRsZVBhaW50Q29udGVudFJlY3QuaW50ZXJzZWN0KEludFJlY3QoSW50
UG9pbnQ6Onplcm8oKSwgY29udGVudEJvdW5kcygpKSk7CisKKyAgICBpbnQgbGVmdCwgdG9wLCBy
aWdodCwgYm90dG9tOworICAgIG1fdGlsZXItPmNvbnRlbnRSZWN0VG9UaWxlSW5kaWNlcyhpZGxl
UGFpbnRDb250ZW50UmVjdCwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKKyAgICBmb3IgKGlu
dCBqID0gdG9wOyBqIDw9IGJvdHRvbTsgKytqKSB7CisgICAgICAgIGZvciAoaW50IGkgPSBsZWZ0
OyBpIDw9IHJpZ2h0OyArK2kpIHsKKyAgICAgICAgICAgIGlmIChtX3JlcXVlc3RlZFVwZGF0ZVRp
bGVzUmVjdC5jb250YWlucyhJbnRQb2ludChpLCBqKSkpCisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0gdGlsZUF0KGksIGopOworICAg
ICAgICAgICAgaWYgKCF0aWxlIHx8ICF0aWxlLT5tYW5hZ2VkVGV4dHVyZSgpLT5pc1ZhbGlkKG1f
dGlsZXItPnRpbGVTaXplKCksIG1fdGV4dHVyZUZvcm1hdCkgfHwgdGlsZS0+ZGlydHkoKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKIH0KICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxl
ZExheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDVkYWYwZjAxOTQ3YTk5NDdjZDIzNWY1NWZi
NzM5NTllNDQ3YjFmNTYuLjY0MTZlYmE0ZDJjNDkzYjJkNjY5N2Q0OTg0ZTcwYjQ2NWQzY2E2ZmUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Rp
bGVkTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oCkBAIC02NSw5ICs2NSwxNiBAQCBwcm90ZWN0
ZWQ6CiAKICAgICAvLyBTZXQgaW52YWxpZGF0aW9ucyB0byBiZSBwb3RlbnRpYWxseSByZXBhaW50
ZWQgZHVyaW5nIHVwZGF0ZSgpLgogICAgIHZvaWQgaW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVj
dCYgY29udGVudFJlY3QpOworCiAgICAgLy8gUHJlcGFyZSBkYXRhIG5lZWRlZCB0byB1cGRhdGUg
dGV4dHVyZXMgdGhhdCBpbnRlcnNlY3Qgd2l0aCBjb250ZW50UmVjdC4KICAgICB2b2lkIHByZXBh
cmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCk7CiAKKyAgICAvLyBTYW1lIGFz
IGFib3ZlLCBidXQgdGhpcyB3aWxsIHRyeSB0byBwYWludCBhZGRpdGlvbmFsIHN1cnJvdW5kaW5n
IGNvbnRlbnQgaWYgaWRsZS4KKyAgICB2b2lkIHByZXBhcmVUb1VwZGF0ZUlkbGUoY29uc3QgSW50
UmVjdCYgY29udGVudFJlY3QpOworCisgICAgLy8gQWZ0ZXIgcHJlcGFyaW5nIGFuIHVwZGF0ZSwg
cmV0dXJucyB0cnVlIGlmIG1vcmUgcHJlLXBhaW50aW5nIGlzIG5lZWRlZC4KKyAgICBib29sIG5l
ZWRzSWRsZVBhaW50KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KTsKKwogICAgIHZpcnR1YWwg
dm9pZCBwcm90ZWN0VmlzaWJsZVRpbGVUZXh0dXJlcygpOwogCiBwcml2YXRlOgpAQCAtNzcsNiAr
ODQsOCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBjcmVhdGVUaWxlcklmTmVlZGVkKCk7CiAgICAg
dm9pZCBzZXRUaWxpbmdPcHRpb24oVGlsaW5nT3B0aW9uKTsKKyAKKyAgICB2b2lkIHByZXBhcmVU
b1VwZGF0ZVRpbGVzKGJvb2wgaWRsZSwgaW50IGxlZnQsIGludCB0b3AsIGludCByaWdodCwgaW50
IGJvdHRvbSk7CiAKICAgICBVcGRhdGFibGVUaWxlKiB0aWxlQXQoaW50LCBpbnQpIGNvbnN0Owog
ICAgIFVwZGF0YWJsZVRpbGUqIGNyZWF0ZVRpbGUoaW50LCBpbnQpOwpAQCAtODQsNyArOTMsOCBA
QCBwcml2YXRlOgogICAgIFRleHR1cmVNYW5hZ2VyKiB0ZXh0dXJlTWFuYWdlcigpIGNvbnN0Owog
CiAgICAgLy8gVGVtcG9yYXJ5IHN0YXRlIGhlbGQgYmV0d2VlbiBwcmVwYXJlVG9VcGRhdGUoKSBh
bmQgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcygpLgotICAgIEludFJlY3QgbV9yZXF1ZXN0ZWRV
cGRhdGVSZWN0OworICAgIEludFJlY3QgbV9yZXF1ZXN0ZWRVcGRhdGVUaWxlc1JlY3Q7CisKICAg
ICAvLyBTdGF0ZSBoZWxkIGJldHdlZW4gcHJlcGFyZVRvVXBkYXRlKCkgYW5kIHB1c2hQcm9wZXJ0
aWVzVG8oKS4gVGhpcyByZXByZXNlbnRzIHRoZSBhcmVhCiAgICAgLy8gb2YgdGhlIGxheWVyIHRo
YXQgaXMgYWN0dWFsbHkgcmUtcGFpbnRlZCBieSBXZWJLaXQuCiAgICAgSW50UmVjdCBtX3BhaW50
UmVjdDsKQEAgLTkyLDYgKzEwMiw3IEBAIHByaXZhdGU6CiAgICAgVGlsaW5nT3B0aW9uIG1fdGls
aW5nT3B0aW9uOwogICAgIEdDM0RlbnVtIG1fdGV4dHVyZUZvcm1hdDsKICAgICBib29sIG1fc2tp
cHNEcmF3OworICAgIGJvb2wgbV9yZXNlcnZlRmFpbGVkOwogICAgIExheWVyVGV4dHVyZVVwZGF0
ZXI6Ok9yaWVudGF0aW9uIG1fdGV4dHVyZU9yaWVudGF0aW9uOwogICAgIExheWVyVGV4dHVyZVVw
ZGF0ZXI6OlNhbXBsZWRUZXhlbEZvcm1hdCBtX3NhbXBsZWRUZXhlbEZvcm1hdDsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggNGYyYzFmYjYyNjRlZTdjM2E5ZTYxNzUzN2Ew
Mjg5ODJmOGFiMzNmZS4uZDBhMzM1NGQwYzBlMGIxM2Y5MzExYTFhYzg3NjM4YWRiY2NhYjMyMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCkBAIC04NSw3ICs4NSw3IEBAIGJvb2wg
Q0NMYXllclRyZWVIb3N0Ojppbml0aWFsaXplKCkKICAgICAvLyBVcGRhdGUgbV9zZXR0aW5ncyBi
YXNlZCBvbiBjYXBhYmlsaXRpZXMgdGhhdCB3ZSBnb3QgYmFjayBmcm9tIHRoZSByZW5kZXJlci4K
ICAgICBtX3NldHRpbmdzLmFjY2VsZXJhdGVQYWludGluZyA9IG1fcHJveHktPmxheWVyUmVuZGVy
ZXJDYXBhYmlsaXRpZXMoKS51c2luZ0FjY2VsZXJhdGVkUGFpbnRpbmc7CiAKLSAgICBtX2NvbnRl
bnRzVGV4dHVyZU1hbmFnZXIgPSBUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKFRleHR1cmVNYW5hZ2Vy
OjpoaWdoTGltaXRCeXRlcygpLCBtX3Byb3h5LT5sYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCku
bWF4VGV4dHVyZVNpemUpOworICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdlciA9IFRleHR1cmVN
YW5hZ2VyOjpjcmVhdGUoVGV4dHVyZU1hbmFnZXI6OmhpZ2hMaW1pdEJ5dGVzKCksIFRleHR1cmVN
YW5hZ2VyOjpyZWNsYWltTGltaXRCeXRlcyh2aWV3cG9ydFNpemUoKSksIG1fcHJveHktPmxheWVy
UmVuZGVyZXJDYXBhYmlsaXRpZXMoKS5tYXhUZXh0dXJlU2l6ZSk7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKQEAgLTExNyw3ICsxMTcsOSBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6YmVnaW5Db21t
aXRPbkltcGxUaHJlYWQoQ0NMYXllclRyZWVIb3N0SW1wbCogaG9zdEltcGwpCiAgICAgQVNTRVJU
KENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKICAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVI
b3N0Ojpjb21taXRUbyIsIHRoaXMsIDApOwogCi0gICAgY29udGVudHNUZXh0dXJlTWFuYWdlcigp
LT5yZWR1Y2VNZW1vcnlUb0xpbWl0KFRleHR1cmVNYW5hZ2VyOjpyZWNsYWltTGltaXRCeXRlcygp
KTsKKyAgICBzaXplX3QgcmVjbGFpbUxpbWl0ID0gVGV4dHVyZU1hbmFnZXI6OnJlY2xhaW1MaW1p
dEJ5dGVzKHZpZXdwb3J0U2l6ZSgpKTsKKyAgICBjb250ZW50c1RleHR1cmVNYW5hZ2VyKCktPnNl
dFNvZnRNZW1vcnlMaW1pdEJ5dGVzKHJlY2xhaW1MaW1pdCk7CisgICAgY29udGVudHNUZXh0dXJl
TWFuYWdlcigpLT5yZWR1Y2VNZW1vcnlUb0xpbWl0KHJlY2xhaW1MaW1pdCk7CiAgICAgY29udGVu
dHNUZXh0dXJlTWFuYWdlcigpLT5kZWxldGVFdmljdGVkVGV4dHVyZXMoaG9zdEltcGwtPmNvbnRl
bnRzVGV4dHVyZUFsbG9jYXRvcigpKTsKIH0KIApAQCAtMjU1LDcgKzI1Nyw3IEBAIHZvaWQgQ0NM
YXllclRyZWVIb3N0OjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKIAogICAgIG1fdmlzaWJsZSA9
IHZpc2libGU7CiAgICAgaWYgKCF2aXNpYmxlKSB7Ci0gICAgICAgIG1fY29udGVudHNUZXh0dXJl
TWFuYWdlci0+cmVkdWNlTWVtb3J5VG9MaW1pdChUZXh0dXJlTWFuYWdlcjo6bG93TGltaXRCeXRl
cygpKTsKKyAgICAgICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT5yZWR1Y2VNZW1vcnlUb0xp
bWl0KFRleHR1cmVNYW5hZ2VyOjpsb3dMaW1pdEJ5dGVzKHZpZXdwb3J0U2l6ZSgpKSk7CiAgICAg
ICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+dW5wcm90ZWN0QWxsVGV4dHVyZXMoKTsKICAg
ICB9CiAKQEAgLTI2OCw3ICsyNzAsOSBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c2V0VmlzaWJs
ZShib29sIHZpc2libGUpCiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6ZGlkQmVjb21lSW52aXNpYmxl
T25JbXBsVGhyZWFkKENDTGF5ZXJUcmVlSG9zdEltcGwqIGhvc3RJbXBsKQogewogICAgIEFTU0VS
VChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7Ci0gICAgY29udGVudHNUZXh0dXJlTWFuYWdlcigp
LT5yZWR1Y2VNZW1vcnlUb0xpbWl0KFRleHR1cmVNYW5hZ2VyOjpyZWNsYWltTGltaXRCeXRlcygp
KTsKKyAgICBzaXplX3QgcmVjbGFpbUxpbWl0ID0gVGV4dHVyZU1hbmFnZXI6OnJlY2xhaW1MaW1p
dEJ5dGVzKHZpZXdwb3J0U2l6ZSgpKTsKKyAgICBjb250ZW50c1RleHR1cmVNYW5hZ2VyKCktPnNl
dFNvZnRNZW1vcnlMaW1pdEJ5dGVzKHJlY2xhaW1MaW1pdCk7CisgICAgY29udGVudHNUZXh0dXJl
TWFuYWdlcigpLT5yZWR1Y2VNZW1vcnlUb0xpbWl0KHJlY2xhaW1MaW1pdCk7CiAgICAgY29udGVu
dHNUZXh0dXJlTWFuYWdlcigpLT5kZWxldGVFdmljdGVkVGV4dHVyZXMoaG9zdEltcGwtPmNvbnRl
bnRzVGV4dHVyZUFsbG9jYXRvcigpKTsKIH0KIApAQCAtMzMyLDE4ICszMzYsMjMgQEAgdm9pZCBD
Q0xheWVyVHJlZUhvc3Q6OnVwZGF0ZUxheWVycyhMYXllckNocm9taXVtKiByb290TGF5ZXIpCiAg
ICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRW
aXNpYmlsaXR5KHJvb3RMYXllciwgcm9vdExheWVyLCBtX3pvb21BbmltYXRvclRyYW5zZm9ybSwg
bV96b29tQW5pbWF0b3JUcmFuc2Zvcm0sIG1fdXBkYXRlTGlzdCwgcm9vdFJlbmRlclN1cmZhY2Ut
PmxheWVyTGlzdCgpLCBsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkubWF4VGV4dHVyZVNpemUp
OwogICAgIH0KIAotICAgIHBhaW50TGF5ZXJDb250ZW50cyhtX3VwZGF0ZUxpc3QpOworICAgIHBh
aW50TGF5ZXJDb250ZW50cyhtX3VwZGF0ZUxpc3QsIGZhbHNlIC8qIGlkbGUgKi8pOworICAgIC8v
IFRoZSBzZWNvbmQgKGlkbGUpIHBhaW50IHdpbGwgYmUgYSBuby1vcCBpbiBsYXllcnMgd2hlcmUg
cGFpbnRpbmcgYWxyZWFkeSBvY2N1cmVkIGFib3ZlLgorICAgIHBhaW50TGF5ZXJDb250ZW50cyht
X3VwZGF0ZUxpc3QsIHRydWUgLyogaWRsZSAqLyk7CiB9CiAKLXN0YXRpYyB2b2lkIHBhaW50Q29u
dGVudHNJZkRpcnR5KExheWVyQ2hyb21pdW0qIGxheWVyLCBjb25zdCBJbnRSZWN0JiB2aXNpYmxl
TGF5ZXJSZWN0KQorc3RhdGljIHZvaWQgcGFpbnRDb250ZW50c0lmRGlydHkoTGF5ZXJDaHJvbWl1
bSogbGF5ZXIsIGNvbnN0IEludFJlY3QmIHZpc2libGVMYXllclJlY3QsIGJvb2wgaWRsZSkKIHsK
ICAgICBpZiAobGF5ZXItPmRyYXdzQ29udGVudCgpKSB7CiAgICAgICAgIGxheWVyLT5zZXRWaXNp
YmxlTGF5ZXJSZWN0KHZpc2libGVMYXllclJlY3QpOwotICAgICAgICBsYXllci0+cGFpbnRDb250
ZW50c0lmRGlydHkoKTsKKyAgICAgICAgaWYgKCFpZGxlKQorICAgICAgICAgICAgbGF5ZXItPnBh
aW50Q29udGVudHNJZkRpcnR5KCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxheWVyLT5p
ZGxlUGFpbnRDb250ZW50c0lmRGlydHkoKTsKICAgICB9CiB9CiAKLXZvaWQgQ0NMYXllclRyZWVI
b3N0OjpwYWludE1hc2tBbmRSZXBsaWNhRm9yUmVuZGVyU3VyZmFjZShMYXllckNocm9taXVtKiBy
ZW5kZXJTdXJmYWNlTGF5ZXIpCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6cGFpbnRNYXNrQW5kUmVw
bGljYUZvclJlbmRlclN1cmZhY2UoTGF5ZXJDaHJvbWl1bSogcmVuZGVyU3VyZmFjZUxheWVyLCBi
b29sIGlkbGUpCiB7CiAgICAgLy8gTm90ZTogTWFza3MgYW5kIHJlcGxpY2FzIG9ubHkgZXhpc3Qg
Zm9yIGxheWVycyB0aGF0IG93biByZW5kZXIgc3VyZmFjZXMuIElmIHdlIHJlYWNoIHRoaXMgcG9p
bnQKICAgICAvLyBpbiBjb2RlLCB3ZSBhbHJlYWR5IGtub3cgdGhhdCBhdCBsZWFzdCBzb21ldGhp
bmcgd2lsbCBiZSBkcmF3biBpbnRvIHRoaXMgcmVuZGVyIHN1cmZhY2UsIHNvIHRoZQpAQCAtMzUx
LDcgKzM2MCw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpwYWludE1hc2tBbmRSZXBsaWNhRm9y
UmVuZGVyU3VyZmFjZShMYXllckNocm9taXVtKiByZW5kZXJTCiAKICAgICBpZiAocmVuZGVyU3Vy
ZmFjZUxheWVyLT5tYXNrTGF5ZXIoKSkgewogICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXItPm1h
c2tMYXllcigpLT5zZXRMYXllclRyZWVIb3N0KHRoaXMpOwotICAgICAgICBwYWludENvbnRlbnRz
SWZEaXJ0eShyZW5kZXJTdXJmYWNlTGF5ZXItPm1hc2tMYXllcigpLCBJbnRSZWN0KEludFBvaW50
KCksIHJlbmRlclN1cmZhY2VMYXllci0+Y29udGVudEJvdW5kcygpKSk7CisgICAgICAgIHBhaW50
Q29udGVudHNJZkRpcnR5KHJlbmRlclN1cmZhY2VMYXllci0+bWFza0xheWVyKCksIEludFJlY3Qo
SW50UG9pbnQoKSwgcmVuZGVyU3VyZmFjZUxheWVyLT5jb250ZW50Qm91bmRzKCkpLCBpZGxlKTsK
ICAgICB9CiAKICAgICBMYXllckNocm9taXVtKiByZXBsaWNhTGF5ZXIgPSByZW5kZXJTdXJmYWNl
TGF5ZXItPnJlcGxpY2FMYXllcigpOwpAQCAtMzYwLDE2ICszNjksMTYgQEAgdm9pZCBDQ0xheWVy
VHJlZUhvc3Q6OnBhaW50TWFza0FuZFJlcGxpY2FGb3JSZW5kZXJTdXJmYWNlKExheWVyQ2hyb21p
dW0qIHJlbmRlclMKICAgICAgICAgSW50UmVjdCB2aXNpYmxlTGF5ZXJSZWN0ID0gQ0NMYXllclRy
ZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlTGF5ZXJSZWN0PExheWVyQ2hyb21pdW0+KHJl
bmRlclN1cmZhY2VMYXllcik7CiAKICAgICAgICAgcmVwbGljYUxheWVyLT5zZXRMYXllclRyZWVI
b3N0KHRoaXMpOwotICAgICAgICBwYWludENvbnRlbnRzSWZEaXJ0eShyZXBsaWNhTGF5ZXIsIHZp
c2libGVMYXllclJlY3QpOworICAgICAgICBwYWludENvbnRlbnRzSWZEaXJ0eShyZXBsaWNhTGF5
ZXIsIHZpc2libGVMYXllclJlY3QsIGlkbGUpOwogCiAgICAgICAgIGlmIChyZXBsaWNhTGF5ZXIt
Pm1hc2tMYXllcigpKSB7CiAgICAgICAgICAgICByZXBsaWNhTGF5ZXItPm1hc2tMYXllcigpLT5z
ZXRMYXllclRyZWVIb3N0KHRoaXMpOwotICAgICAgICAgICAgcGFpbnRDb250ZW50c0lmRGlydHko
cmVwbGljYUxheWVyLT5tYXNrTGF5ZXIoKSwgSW50UmVjdChJbnRQb2ludCgpLCByZXBsaWNhTGF5
ZXItPm1hc2tMYXllcigpLT5jb250ZW50Qm91bmRzKCkpKTsKKyAgICAgICAgICAgIHBhaW50Q29u
dGVudHNJZkRpcnR5KHJlcGxpY2FMYXllci0+bWFza0xheWVyKCksIEludFJlY3QoSW50UG9pbnQo
KSwgcmVwbGljYUxheWVyLT5tYXNrTGF5ZXIoKS0+Y29udGVudEJvdW5kcygpKSwgaWRsZSk7CiAg
ICAgICAgIH0KICAgICB9CiB9CiAKLXZvaWQgQ0NMYXllclRyZWVIb3N0OjpwYWludExheWVyQ29u
dGVudHMoY29uc3QgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KQordm9pZCBDQ0xh
eWVyVHJlZUhvc3Q6OnBhaW50TGF5ZXJDb250ZW50cyhjb25zdCBMYXllckxpc3QmIHJlbmRlclN1
cmZhY2VMYXllckxpc3QsIGJvb2wgaWRsZSkKIHsKICAgICBmb3IgKGludCBzdXJmYWNlSW5kZXgg
PSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSAtIDE7IHN1cmZhY2VJbmRleCA+PSAwIDsg
LS1zdXJmYWNlSW5kZXgpIHsKICAgICAgICAgTGF5ZXJDaHJvbWl1bSogcmVuZGVyU3VyZmFjZUxh
eWVyID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdFtzdXJmYWNlSW5kZXhdLmdldCgpOwpAQCAtMzg1
LDcgKzM5NCw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpwYWludExheWVyQ29udGVudHMoY29u
c3QgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0CiAgICAgICAgICAgICBjb250aW51
ZTsKIAogICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXItPnNldExheWVyVHJlZUhvc3QodGhpcyk7
Ci0gICAgICAgIHBhaW50TWFza0FuZFJlcGxpY2FGb3JSZW5kZXJTdXJmYWNlKHJlbmRlclN1cmZh
Y2VMYXllcik7CisgICAgICAgIHBhaW50TWFza0FuZFJlcGxpY2FGb3JSZW5kZXJTdXJmYWNlKHJl
bmRlclN1cmZhY2VMYXllciwgaWRsZSk7CiAKICAgICAgICAgY29uc3QgTGF5ZXJMaXN0JiBsYXll
ckxpc3QgPSByZW5kZXJTdXJmYWNlLT5sYXllckxpc3QoKTsKICAgICAgICAgQVNTRVJUKGxheWVy
TGlzdC5zaXplKCkpOwpAQCAtNDA0LDcgKzQxMyw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0Ojpw
YWludExheWVyQ29udGVudHMoY29uc3QgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEludFJlY3QgdmlzaWJsZUxheWVyUmVjdCA9IEND
TGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUxheWVyUmVjdDxMYXllckNocm9t
aXVtPihsYXllcik7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHBhaW50Q29udGVudHNJZkRp
cnR5KGxheWVyLCB2aXNpYmxlTGF5ZXJSZWN0KTsKKyAgICAgICAgICAgIHBhaW50Q29udGVudHNJ
ZkRpcnR5KGxheWVyLCB2aXNpYmxlTGF5ZXJSZWN0LCBpZGxlKTsKICAgICAgICAgfQogICAgIH0K
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKaW5kZXggNzUxOTU0NWUxNzUwNGI2YTI0Y2Mx
YTc0Mjg5NmE2ODFhNzUyNzk0ZS4uYTVkM2UyMzg3NDNjYTJkMjczMzBlMjA5ZmVlMjg5Yzg5MTcy
MzhlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKQEAgLTE4NSw4ICsxODUsOCBAQCBw
cm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxMYXllckNocm9t
aXVtPiA+IExheWVyTGlzdDsKIAotICAgIHZvaWQgcGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExh
eWVyTGlzdCYpOwotICAgIHZvaWQgcGFpbnRNYXNrQW5kUmVwbGljYUZvclJlbmRlclN1cmZhY2Uo
TGF5ZXJDaHJvbWl1bSopOworICAgIHZvaWQgcGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExheWVy
TGlzdCYsIGJvb2wgaWRsZVBhaW50KTsKKyAgICB2b2lkIHBhaW50TWFza0FuZFJlcGxpY2FGb3JS
ZW5kZXJTdXJmYWNlKExheWVyQ2hyb21pdW0qLCBib29sIGlkbGVQYWludCk7CiAKICAgICB2b2lk
IHVwZGF0ZUxheWVycyhMYXllckNocm9taXVtKik7CiAgICAgdm9pZCB1cGRhdGVDb21wb3NpdG9y
UmVzb3VyY2VzKExheWVyQ2hyb21pdW0qLCBHcmFwaGljc0NvbnRleHQzRCosIENDVGV4dHVyZVVw
ZGF0ZXImKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116316</attachid>
            <date>2011-11-22 22:14:41 -0800</date>
            <delta_ts>2011-11-23 15:21:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72686-20111122221440.patch</filename>
            <type>text/plain</type>
            <size>33471</size>
            <attacher name="Eric Penner">epenner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTk4NDAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBjNjUxMmMyYjQ5ZmE0NWVm
MDZmNjA0ZThjNDJhMWMyNDUwZjJmN2Q0Li40MmFkMDNjNWJhNTE2MmZmNWI1MGY2NWM5OTQ4Mjc1
N2IwNGVkYzU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTEtMTEtMTcgIEVyaWMg
UGVubmVyICA8ZXBlbm5lckBnb29nbGUuY29tPgorCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiAoT09QUyEpCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c0lmRGly
dHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJv
bWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OmNvbnRhaW5z
TWlzc2luZ1RpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6Y29u
dGFpbnNEaXJ0eVRpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6
Y2FsY3VsYXRlT3B0aW1hbFByZXBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJD
aHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlUHJlcGFpbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUaWxpbmdEYXRhLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJUaWxpbmdEYXRhOjp0aWxlSW5kaWNlc1RvQ29udGVudFJlY3QpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUaWxpbmdEYXRhLmg6
CisKIDIwMTEtMTEtMTAgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJtYW5uQHJpbS5jb20+
CiAKICAgICAgICAgRGVwbG95IFNWR0xlbmd0aENvbnRleHQgaW4gbW9yZSBwbGFjZXMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRM
YXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcAppbmRleCBkYjBhZTQ2OTllNzg5NjkyZjUxYzQw
YjhjZGU3NjQ4NGZkMWM0YWE4Li5jNDdkNzNjOTA4ZjA3ZTJmMmQzNzdiZmU1YmU2MDExNDQ2NWI2
NDU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCkBAIC0xMTQsNiArMTE0
LDIwIEBAIHZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHNJZkRpcnR5KCkK
ICAgICByZXNldE5lZWRzRGlzcGxheSgpOwogfQogCit2b2lkIENvbnRlbnRMYXllckNocm9taXVt
OjppZGxlUGFpbnRDb250ZW50c0lmRGlydHkoKQoreworICAgIGlmICghZHJhd3NDb250ZW50KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCA9IHZpc2li
bGVMYXllclJlY3QoKTsKKyAgICBpZiAobGF5ZXJSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgcHJlcGFyZVRvVXBkYXRlSWRsZShsYXllclJlY3QpOworICAgIGlmIChuZWVk
c0lkbGVQYWludChsYXllclJlY3QpKQorICAgICAgICBzZXROZWVkc0NvbW1pdCgpOworfQorCiBi
b29sIENvbnRlbnRMYXllckNocm9taXVtOjpkcmF3c0NvbnRlbnQoKSBjb25zdAogewogICAgIHJl
dHVybiBtX2RlbGVnYXRlICYmIG1fZGVsZWdhdGUtPmRyYXdzQ29udGVudCgpICYmIFRpbGVkTGF5
ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0u
aAppbmRleCBiODM0ZTY3NmJkNjM0NDVhYTQ1M2IzNjVlZWUyODAyNDBmMzgwOWMxLi4wYzU3NGI1
ZGZkYzBhNTcxYjgxMWJlMDM5NzY0YWM3NWIxYzJlM2VlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXll
ckNocm9taXVtLmgKQEAgLTUwLDYgKzUwLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfkNvbnRl
bnRMYXllckNocm9taXVtKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50c0lmRGly
dHkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgaWRsZVBhaW50Q29udGVudHNJZkRpcnR5KCk7CiAKIHBy
b3RlY3RlZDoKICAgICBleHBsaWNpdCBDb250ZW50TGF5ZXJDaHJvbWl1bShDQ0xheWVyRGVsZWdh
dGUqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyQ2hyb21pdW0uaAppbmRleCA3NDdkYzk4NjljZjEwYjYyZjMwZTliZjA5YWYy
Mjc5ODY2NGQzNDI0Li44YmE4NDUxNWUxYzFiOTlmMzZkMzk3ZjQ3YWZmZDI1ODE4ZWIyMzE0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
ckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJDaHJvbWl1bS5oCkBAIC0xNTgsNiArMTU4LDcgQEAgcHVibGljOgogICAgIC8vIFRo
ZXNlIG1ldGhvZHMgdHlwaWNhbGx5IG5lZWQgdG8gYmUgb3ZlcndyaXR0ZW4gYnkgZGVyaXZlZCBj
bGFzc2VzLgogICAgIHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQogICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzSWZEaXJ0eSgpIHsgfQorICAg
IHZpcnR1YWwgdm9pZCBpZGxlUGFpbnRDb250ZW50c0lmRGlydHkoKSB7IH0KICAgICB2aXJ0dWFs
IHZvaWQgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCosIENDVGV4
dHVyZVVwZGF0ZXImKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0SXNNYXNrKGJvb2wpIHsgfQog
ICAgIHZpcnR1YWwgdm9pZCB1bnJlc2VydmVDb250ZW50c1RleHR1cmUoKSB7IH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCmluZGV4IDY1NmEyODZlOGY3YzMxMTVlZTZiOWJm
MDAzNmJhYTdkYTk3MjdkY2MuLjVjOWRmYjY1ZjBiZTkwMTljYzBiOTc5MjM1YmJmMmQ4MjgxNDRj
MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApAQCAtMjg4LDEzICsy
ODgsMTQgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMoKQogICAgICAg
ICByZXR1cm47CiAKICAgICBzaXplX3QgY29udGVudHNNZW1vcnlVc2VCeXRlcyA9IG1fY29udGVu
dHNUZXh0dXJlQWxsb2NhdG9yLT5jdXJyZW50TWVtb3J5VXNlQnl0ZXMoKTsKLSAgICBtX3JlbmRl
clN1cmZhY2VUZXh0dXJlTWFuYWdlci0+c2V0TWVtb3J5TGltaXRCeXRlcyhUZXh0dXJlTWFuYWdl
cjo6aGlnaExpbWl0Qnl0ZXMoKSAtIGNvbnRlbnRzTWVtb3J5VXNlQnl0ZXMpOworICAgIHNpemVf
dCBoYXJkTGltaXRCeXRlcyA9IHN0ZDo6bWF4PHNpemVfdD4oMCwgVGV4dHVyZU1hbmFnZXI6Omhp
Z2hMaW1pdEJ5dGVzKCkgLSBjb250ZW50c01lbW9yeVVzZUJ5dGVzKTsKKyAgICBzaXplX3QgcmVj
bGFpbUxpbWl0Qnl0ZXMgPSBzdGQ6Om1heDxzaXplX3Q+KDAsIFRleHR1cmVNYW5hZ2VyOjpyZWNs
YWltTGltaXRCeXRlcyh2aWV3cG9ydFNpemUoKSkgLSBjb250ZW50c01lbW9yeVVzZUJ5dGVzKTsK
KyAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+c2V0SGFyZE1lbW9yeUxpbWl0Qnl0
ZXMoaGFyZExpbWl0Qnl0ZXMpOworICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyLT5z
ZXRTb2Z0TWVtb3J5TGltaXRCeXRlcyhyZWNsYWltTGltaXRCeXRlcyk7CisKICAgICBkcmF3TGF5
ZXJzSW50ZXJuYWwoKTsKIAotICAgIGlmIChUZXh0dXJlTWFuYWdlcjo6cmVjbGFpbUxpbWl0Qnl0
ZXMoKSA+IGNvbnRlbnRzTWVtb3J5VXNlQnl0ZXMpCi0gICAgICAgIG1fcmVuZGVyU3VyZmFjZVRl
eHR1cmVNYW5hZ2VyLT5yZWR1Y2VNZW1vcnlUb0xpbWl0KFRleHR1cmVNYW5hZ2VyOjpyZWNsYWlt
TGltaXRCeXRlcygpIC0gY29udGVudHNNZW1vcnlVc2VCeXRlcyk7Ci0gICAgZWxzZQotICAgICAg
ICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+cmVkdWNlTWVtb3J5VG9MaW1pdCgwKTsK
KyAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+cmVkdWNlTWVtb3J5VG9MaW1pdChy
ZWNsYWltTGltaXRCeXRlcyk7CiAgICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXItPmRl
bGV0ZUV2aWN0ZWRUZXh0dXJlcyhtX3JlbmRlclN1cmZhY2VUZXh0dXJlQWxsb2NhdG9yLmdldCgp
KTsKIAogICAgIGlmIChzZXR0aW5ncygpLmNvbXBvc2l0ZU9mZnNjcmVlbikKQEAgLTY2Myw3ICs2
NjQsNyBAQCBib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZVNoYXJlZE9iamVj
dHMoKQogCiAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5mbHVzaCgpKTsKIAot
ICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyID0gVGV4dHVyZU1hbmFnZXI6OmNyZWF0
ZShUZXh0dXJlTWFuYWdlcjo6aGlnaExpbWl0Qnl0ZXMoKSwgbV9jYXBhYmlsaXRpZXMubWF4VGV4
dHVyZVNpemUpOworICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyID0gVGV4dHVyZU1h
bmFnZXI6OmNyZWF0ZShUZXh0dXJlTWFuYWdlcjo6aGlnaExpbWl0Qnl0ZXMoKSwgVGV4dHVyZU1h
bmFnZXI6OnJlY2xhaW1MaW1pdEJ5dGVzKHZpZXdwb3J0U2l6ZSgpKSwgbV9jYXBhYmlsaXRpZXMu
bWF4VGV4dHVyZVNpemUpOwogICAgIG1fY29udGVudHNUZXh0dXJlQWxsb2NhdG9yID0gVHJhY2tp
bmdUZXh0dXJlQWxsb2NhdG9yOjpjcmVhdGUobV9jb250ZXh0LmdldCgpKTsKICAgICBtX3JlbmRl
clN1cmZhY2VUZXh0dXJlQWxsb2NhdG9yID0gVHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yOjpjcmVh
dGUobV9jb250ZXh0LmdldCgpKTsKICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL01hbmFnZWRUZXh0dXJlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL01hbmFnZWRUZXh0dXJl
LmNwcAppbmRleCA1YmJmZjZhNDNlNWIwMzhiM2JmMzMyN2ZiZDNkMWU1MTQzYjdmMWRlLi4yMjZj
YmRhOGQyN2Y1NWFiZDgzMGI2MTA2NTAyMzRjNzNhNTMzMGIzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9NYW5hZ2VkVGV4dHVyZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTWFuYWdlZFRleHR1
cmUuY3BwCkBAIC01NCw2ICs1NCwxNiBAQCBib29sIE1hbmFnZWRUZXh0dXJlOjppc1ZhbGlkKGNv
bnN0IEludFNpemUmIHNpemUsIHVuc2lnbmVkIGZvcm1hdCkKIAogYm9vbCBNYW5hZ2VkVGV4dHVy
ZTo6cmVzZXJ2ZShjb25zdCBJbnRTaXplJiBzaXplLCB1bnNpZ25lZCBmb3JtYXQpCiB7CisgICAg
cmV0dXJuIHJlc2VydmVUb0xpbWl0QXRQcmlvcml0eShzaXplLCBmb3JtYXQsIFRleHR1cmVNYW5h
Z2VyOjpIYXJkTWVtb3J5TGltaXQsIFRleHR1cmVNYW5hZ2VyOjpIaWdoVGV4dHVyZVByaW9yaXR5
KTsKK30KKworYm9vbCBNYW5hZ2VkVGV4dHVyZTo6cmVzZXJ2ZVNvZnQoY29uc3QgSW50U2l6ZSYg
c2l6ZSwgdW5zaWduZWQgZm9ybWF0KQoreworICAgIHJldHVybiByZXNlcnZlVG9MaW1pdEF0UHJp
b3JpdHkoc2l6ZSwgZm9ybWF0LCBUZXh0dXJlTWFuYWdlcjo6U29mdE1lbW9yeUxpbWl0LCBUZXh0
dXJlTWFuYWdlcjo6TG93VGV4dHVyZVByaW9yaXR5KTsKK30KKworYm9vbCBNYW5hZ2VkVGV4dHVy
ZTo6cmVzZXJ2ZVRvTGltaXRBdFByaW9yaXR5KGNvbnN0IEludFNpemUmIHNpemUsIHVuc2lnbmVk
IGZvcm1hdCwgVGV4dHVyZU1hbmFnZXI6Ok1lbW9yeUxpbWl0IGxpbWl0LCBUZXh0dXJlTWFuYWdl
cjo6VGV4dHVyZVByaW9yaXR5IHByaW9yaXR5KQorewogICAgIGlmICghbV90b2tlbikKICAgICAg
ICAgbV90b2tlbiA9IG1fdGV4dHVyZU1hbmFnZXItPmdldFRva2VuKCk7CiAKQEAgLTYyLDcgKzcy
LDcgQEAgYm9vbCBNYW5hZ2VkVGV4dHVyZTo6cmVzZXJ2ZShjb25zdCBJbnRTaXplJiBzaXplLCB1
bnNpZ25lZCBmb3JtYXQpCiAgICAgICAgIG1fdGV4dHVyZU1hbmFnZXItPnByb3RlY3RUZXh0dXJl
KG1fdG9rZW4pOwogICAgIGVsc2UgewogICAgICAgICBtX3RleHR1cmVJZCA9IDA7Ci0gICAgICAg
IHJlc2VydmVkID0gbV90ZXh0dXJlTWFuYWdlci0+cmVxdWVzdFRleHR1cmUobV90b2tlbiwgc2l6
ZSwgZm9ybWF0KTsKKyAgICAgICAgcmVzZXJ2ZWQgPSBtX3RleHR1cmVNYW5hZ2VyLT5yZXF1ZXN0
VGV4dHVyZShtX3Rva2VuLCBzaXplLCBmb3JtYXQsIGxpbWl0LCBwcmlvcml0eSk7CiAgICAgICAg
IGlmIChyZXNlcnZlZCkgewogICAgICAgICAgICAgbV9zaXplID0gc2l6ZTsKICAgICAgICAgICAg
IG1fZm9ybWF0ID0gZm9ybWF0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTWFuYWdlZFRleHR1cmUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL01hbmFnZWRUZXh0dXJlLmgKaW5kZXggNGQ0MzgwOTU5NTM0
MGY1ZDczM2Q1Njc5MjkxYTkyMDY0YzdiMWFlNS4uZDVjYmQ4ZGViZDIwZjg5ZDQ0OTI2ZDk3ZjI0
MzAzZDQwOGYzYjBmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTWFuYWdlZFRleHR1cmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9NYW5hZ2VkVGV4dHVyZS5oCkBAIC00OCw2ICs0OCw4IEBAIHB1
YmxpYzoKIAogICAgIGJvb2wgaXNWYWxpZChjb25zdCBJbnRTaXplJiwgdW5zaWduZWQgZm9ybWF0
KTsKICAgICBib29sIHJlc2VydmUoY29uc3QgSW50U2l6ZSYsIHVuc2lnbmVkIGZvcm1hdCk7Cisg
ICAgYm9vbCByZXNlcnZlU29mdChjb25zdCBJbnRTaXplJiwgdW5zaWduZWQgZm9ybWF0KTsKKyAg
ICBib29sIHJlc2VydmVUb0xpbWl0QXRQcmlvcml0eShjb25zdCBJbnRTaXplJiwgdW5zaWduZWQg
Zm9ybWF0LCBUZXh0dXJlTWFuYWdlcjo6TWVtb3J5TGltaXQsIFRleHR1cmVNYW5hZ2VyOjpUZXh0
dXJlUHJpb3JpdHkpOwogICAgIHZvaWQgdW5yZXNlcnZlKCk7CiAgICAgYm9vbCBpc1Jlc2VydmVk
KCkKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9UZXh0dXJlTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5jcHAKaW5kZXggYzYwMGQ5ZTY0OTFkN2QxZTc1
NzIyMjE0ZTMxOWRhN2YwYzE4ODRjZS4uN2E1MjdjOTA1NWZjOThlODMxZDgxMjExOTMxMTFlMDU3
MDAyMDIzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vVGV4dHVyZU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmNwcApAQCAtMzcsMTMgKzM3LDE1IEBAIHNp
emVfdCBUZXh0dXJlTWFuYWdlcjo6aGlnaExpbWl0Qnl0ZXMoKQogICAgIHJldHVybiAxMjggKiAx
MDI0ICogMTAyNDsKIH0KIAotc2l6ZV90IFRleHR1cmVNYW5hZ2VyOjpyZWNsYWltTGltaXRCeXRl
cygpCitzaXplX3QgVGV4dHVyZU1hbmFnZXI6OnJlY2xhaW1MaW1pdEJ5dGVzKGNvbnN0IEludFNp
emUmIHZpZXdwb3J0U2l6ZSkKIHsKKyAgICAvLyBGSVhNRTogQ2hvb3NlIGEgbGltaXQgYmFzZWQg
b24gdmlld3BvcnQgc2l6ZS4KICAgICByZXR1cm4gNjQgKiAxMDI0ICogMTAyNDsKIH0KIAotc2l6
ZV90IFRleHR1cmVNYW5hZ2VyOjpsb3dMaW1pdEJ5dGVzKCkKK3NpemVfdCBUZXh0dXJlTWFuYWdl
cjo6bG93TGltaXRCeXRlcyhjb25zdCBJbnRTaXplJiB2aWV3cG9ydCkKIHsKKyAgICAvLyBGSVhN
RTogQ2hvb3NlIGEgbGltaXQgYmFzZWQgb24gdmlld3BvcnQgc2l6ZS4KICAgICByZXR1cm4gMyAq
IDEwMjQgKiAxMDI0OwogfQogCkBAIC02MCwxOSArNjIsMjUgQEAgc2l6ZV90IFRleHR1cmVNYW5h
Z2VyOjptZW1vcnlVc2VCeXRlcyhjb25zdCBJbnRTaXplJiBzaXplLCBHQzNEZW51bSB0ZXh0dXJl
Rm9ybWEKIH0KIAogCi1UZXh0dXJlTWFuYWdlcjo6VGV4dHVyZU1hbmFnZXIoc2l6ZV90IG1lbW9y
eUxpbWl0Qnl0ZXMsIGludCBtYXhUZXh0dXJlU2l6ZSkKLSAgICA6IG1fbWVtb3J5TGltaXRCeXRl
cyhtZW1vcnlMaW1pdEJ5dGVzKQorVGV4dHVyZU1hbmFnZXI6OlRleHR1cmVNYW5hZ2VyKHNpemVf
dCBoYXJkTWVtb3J5TGltaXRCeXRlcywgc2l6ZV90IHNvZnRNZW1vcnlMaW1pdEJ5dGVzLCBpbnQg
bWF4VGV4dHVyZVNpemUpCisgICAgOiBtX2hhcmRNZW1vcnlMaW1pdEJ5dGVzKGhhcmRNZW1vcnlM
aW1pdEJ5dGVzKQorICAgICwgbV9zb2Z0TWVtb3J5TGltaXRCeXRlcyhzb2Z0TWVtb3J5TGltaXRC
eXRlcykKICAgICAsIG1fbWVtb3J5VXNlQnl0ZXMoMCkKICAgICAsIG1fbWF4VGV4dHVyZVNpemUo
bWF4VGV4dHVyZVNpemUpCiAgICAgLCBtX25leHRUb2tlbigxKQogewogfQogCi12b2lkIFRleHR1
cmVNYW5hZ2VyOjpzZXRNZW1vcnlMaW1pdEJ5dGVzKHNpemVfdCBtZW1vcnlMaW1pdEJ5dGVzKQor
dm9pZCBUZXh0dXJlTWFuYWdlcjo6c2V0SGFyZE1lbW9yeUxpbWl0Qnl0ZXMoc2l6ZV90IG1lbW9y
eUxpbWl0Qnl0ZXMpCiB7CiAgICAgcmVkdWNlTWVtb3J5VG9MaW1pdChtZW1vcnlMaW1pdEJ5dGVz
KTsKICAgICBBU1NFUlQoY3VycmVudE1lbW9yeVVzZUJ5dGVzKCkgPCBtZW1vcnlMaW1pdEJ5dGVz
KTsKLSAgICBtX21lbW9yeUxpbWl0Qnl0ZXMgPSBtZW1vcnlMaW1pdEJ5dGVzOworICAgIG1faGFy
ZE1lbW9yeUxpbWl0Qnl0ZXMgPSBtZW1vcnlMaW1pdEJ5dGVzOworfQorCit2b2lkIFRleHR1cmVN
YW5hZ2VyOjpzZXRTb2Z0TWVtb3J5TGltaXRCeXRlcyhzaXplX3QgbWVtb3J5TGltaXRCeXRlcykK
K3sKKyAgICBtX3NvZnRNZW1vcnlMaW1pdEJ5dGVzID0gbWVtb3J5TGltaXRCeXRlczsKIH0KIAog
VGV4dHVyZVRva2VuIFRleHR1cmVNYW5hZ2VyOjpnZXRUb2tlbigpCkBAIC0xNDgsOSArMTU2LDE0
IEBAIHZvaWQgVGV4dHVyZU1hbmFnZXI6OmFkZFRleHR1cmUoVGV4dHVyZVRva2VuIHRva2VuLCBU
ZXh0dXJlSW5mbyBpbmZvKQogewogICAgIEFTU0VSVCghbV90ZXh0dXJlTFJVU2V0LmNvbnRhaW5z
KHRva2VuKSk7CiAgICAgQVNTRVJUKCFtX3RleHR1cmVzLmNvbnRhaW5zKHRva2VuKSk7CisgICAg
QVNTRVJUKGluZm8ucHJpb3JpdHkgPT0gSGlnaFRleHR1cmVQcmlvcml0eSB8fCBpbmZvLnByaW9y
aXR5ID09IExvd1RleHR1cmVQcmlvcml0eSk7CisKICAgICBtX21lbW9yeVVzZUJ5dGVzICs9IG1l
bW9yeVVzZUJ5dGVzKGluZm8uc2l6ZSwgaW5mby5mb3JtYXQpOwogICAgIG1fdGV4dHVyZXMuc2V0
KHRva2VuLCBpbmZvKTsKLSAgICBtX3RleHR1cmVMUlVTZXQuYWRkKHRva2VuKTsKKyAgICBpZiAo
aW5mby5wcmlvcml0eSA9PSBIaWdoVGV4dHVyZVByaW9yaXR5KQorICAgICAgICBtX3RleHR1cmVM
UlVTZXQuYWRkKHRva2VuKTsKKyAgICBlbHNlCisgICAgICAgIG1fdGV4dHVyZUxSVVNldC5pbnNl
cnRCZWZvcmUobV90ZXh0dXJlTFJVU2V0LmJlZ2luKCksIHRva2VuKTsKIH0KIAogdm9pZCBUZXh0
dXJlTWFuYWdlcjo6ZGVsZXRlRXZpY3RlZFRleHR1cmVzKFRleHR1cmVBbGxvY2F0b3IqIGFsbG9j
YXRvcikKQEAgLTIwOCwxMSArMjIxLDE2IEBAIHVuc2lnbmVkIFRleHR1cmVNYW5hZ2VyOjphbGxv
Y2F0ZVRleHR1cmUoVGV4dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yLCBUZXh0dXJlVG9rCiAgICAg
cmV0dXJuIHRleHR1cmVJZDsKIH0KIAotYm9vbCBUZXh0dXJlTWFuYWdlcjo6cmVxdWVzdFRleHR1
cmUoVGV4dHVyZVRva2VuIHRva2VuLCBJbnRTaXplIHNpemUsIHVuc2lnbmVkIGZvcm1hdCkKK2Jv
b2wgVGV4dHVyZU1hbmFnZXI6OnJlcXVlc3RUZXh0dXJlKFRleHR1cmVUb2tlbiB0b2tlbiwgSW50
U2l6ZSBzaXplLCB1bnNpZ25lZCBmb3JtYXQsIE1lbW9yeUxpbWl0IG1lbW9yeUxpbWl0LCBUZXh0
dXJlUHJpb3JpdHkgcHJpb3JpdHkpCiB7CiAgICAgaWYgKHNpemUud2lkdGgoKSA+IG1fbWF4VGV4
dHVyZVNpemUgfHwgc2l6ZS5oZWlnaHQoKSA+IG1fbWF4VGV4dHVyZVNpemUpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAorICAgIEFTU0VSVChtZW1vcnlMaW1pdCA9PSBIYXJkTWVtb3J5TGltaXQg
fHwgbWVtb3J5TGltaXQgPT0gU29mdE1lbW9yeUxpbWl0KTsKKyAgICBBU1NFUlQocHJpb3JpdHkg
PT0gSGlnaFRleHR1cmVQcmlvcml0eSB8fCBwcmlvcml0eSA9PSBMb3dUZXh0dXJlUHJpb3JpdHkp
OworCisgICAgc2l6ZV90IG1lbW9yeUxpbWl0Qnl0ZXMgPSAobWVtb3J5TGltaXQgPT0gSGFyZE1l
bW9yeUxpbWl0KSA/IG1faGFyZE1lbW9yeUxpbWl0Qnl0ZXM6bV9zb2Z0TWVtb3J5TGltaXRCeXRl
czsKKwogICAgIFRleHR1cmVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90ZXh0dXJlcy5maW5kKHRva2Vu
KTsKICAgICBpZiAoaXQgIT0gbV90ZXh0dXJlcy5lbmQoKSkgewogICAgICAgICBBU1NFUlQoaXQt
PnNlY29uZC5zaXplICE9IHNpemUgfHwgaXQtPnNlY29uZC5mb3JtYXQgIT0gZm9ybWF0KTsKQEAg
LTIyMCwxMSArMjM4LDExIEBAIGJvb2wgVGV4dHVyZU1hbmFnZXI6OnJlcXVlc3RUZXh0dXJlKFRl
eHR1cmVUb2tlbiB0b2tlbiwgSW50U2l6ZSBzaXplLCB1bnNpZ25lZCBmCiAgICAgfQogCiAgICAg
c2l6ZV90IG1lbW9yeVJlcXVpcmVkQnl0ZXMgPSBtZW1vcnlVc2VCeXRlcyhzaXplLCBmb3JtYXQp
OwotICAgIGlmIChtZW1vcnlSZXF1aXJlZEJ5dGVzID4gbV9tZW1vcnlMaW1pdEJ5dGVzKQorICAg
IGlmIChtZW1vcnlSZXF1aXJlZEJ5dGVzID4gbWVtb3J5TGltaXRCeXRlcykKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgcmVkdWNlTWVtb3J5VG9MaW1pdChtX21lbW9yeUxpbWl0Qnl0ZXMg
LSBtZW1vcnlSZXF1aXJlZEJ5dGVzKTsKLSAgICBpZiAobV9tZW1vcnlVc2VCeXRlcyArIG1lbW9y
eVJlcXVpcmVkQnl0ZXMgPiBtX21lbW9yeUxpbWl0Qnl0ZXMpCisgICAgcmVkdWNlTWVtb3J5VG9M
aW1pdChtZW1vcnlMaW1pdEJ5dGVzIC0gbWVtb3J5UmVxdWlyZWRCeXRlcyk7CisgICAgaWYgKG1f
bWVtb3J5VXNlQnl0ZXMgKyBtZW1vcnlSZXF1aXJlZEJ5dGVzID4gbV9oYXJkTWVtb3J5TGltaXRC
eXRlcykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgVGV4dHVyZUluZm8gaW5mbzsKQEAg
LTIzMiw2ICsyNTAsNyBAQCBib29sIFRleHR1cmVNYW5hZ2VyOjpyZXF1ZXN0VGV4dHVyZShUZXh0
dXJlVG9rZW4gdG9rZW4sIEludFNpemUgc2l6ZSwgdW5zaWduZWQgZgogICAgIGluZm8uZm9ybWF0
ID0gZm9ybWF0OwogICAgIGluZm8udGV4dHVyZUlkID0gMDsKICAgICBpbmZvLmlzUHJvdGVjdGVk
ID0gdHJ1ZTsKKyAgICBpbmZvLnByaW9yaXR5ID0gcHJpb3JpdHk7CiAjaWZuZGVmIE5ERUJVRwog
ICAgIGluZm8uYWxsb2NhdG9yID0gMDsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmgKaW5kZXgg
ZjMyN2I0Y2ZjZDFiMTBkYWU3ZGFkNjM0NjA0ZjY3MzliNTIwZjIwOC4uYTcxOWRiNmIzMWNhMmZk
NzMyMzBlYjM5YWRjZDk5YmMyMWQ2ZmIyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5oCkBAIC00OSwy
NyArNDksMzAgQEAgcHJvdGVjdGVkOgogY2xhc3MgVGV4dHVyZU1hbmFnZXIgewogICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKFRleHR1cmVNYW5hZ2VyKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFz
c093blB0cjxUZXh0dXJlTWFuYWdlcj4gY3JlYXRlKHNpemVfdCBtZW1vcnlMaW1pdEJ5dGVzLCBp
bnQgbWF4VGV4dHVyZVNpemUpCisgICAgc3RhdGljIFBhc3NPd25QdHI8VGV4dHVyZU1hbmFnZXI+
IGNyZWF0ZShzaXplX3QgaGFyZE1lbW9yeUxpbWl0Qnl0ZXMsIHNpemVfdCBzb2Z0TWVtb3J5TGlt
aXRCeXRlcywgaW50IG1heFRleHR1cmVTaXplKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0
UHRyKG5ldyBUZXh0dXJlTWFuYWdlcihtZW1vcnlMaW1pdEJ5dGVzLCBtYXhUZXh0dXJlU2l6ZSkp
OworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFRleHR1cmVNYW5hZ2VyKGhhcmRNZW1vcnlM
aW1pdEJ5dGVzLCBzb2Z0TWVtb3J5TGltaXRCeXRlcywgbWF4VGV4dHVyZVNpemUpKTsKICAgICB9
CiAKICAgICAvLyBBYnNvbHV0ZSBtYXhpbXVtIGxpbWl0IGZvciB0ZXh0dXJlIGFsbG9jYXRpb25z
IGZvciB0aGlzIGluc3RhbmNlLgogICAgIHN0YXRpYyBzaXplX3QgaGlnaExpbWl0Qnl0ZXMoKTsK
LSAgICAvLyBQcmVmZXJyZWQgdGV4dHVyZSBzaXplIGxpbWl0LiBDYW4gYmUgZXhjZWVkZWQgaWYg
bmVlZGVkLgotICAgIHN0YXRpYyBzaXplX3QgcmVjbGFpbUxpbWl0Qnl0ZXMoKTsKKyAgICAvLyBQ
cmVmZXJyZWQgdGV4dHVyZSBzaXplIGxpbWl0IGdpdmVuIHRoZSB2aWV3cG9ydCBzaXplLgorICAg
IHN0YXRpYyBzaXplX3QgcmVjbGFpbUxpbWl0Qnl0ZXMoY29uc3QgSW50U2l6ZSYgdmlld3BvcnRT
aXplKTsKICAgICAvLyBUaGUgbWF4aW11bSB0ZXh0dXJlIG1lbW9yeSB1c2FnZSB3aGVuIGFza2Vk
IHRvIHJlbGVhc2UgdGV4dHVyZXMuCi0gICAgc3RhdGljIHNpemVfdCBsb3dMaW1pdEJ5dGVzKCk7
CisgICAgc3RhdGljIHNpemVfdCBsb3dMaW1pdEJ5dGVzKGNvbnN0IEludFNpemUmIHZpZXdwb3J0
KTsKIAogICAgIHN0YXRpYyBzaXplX3QgbWVtb3J5VXNlQnl0ZXMoY29uc3QgSW50U2l6ZSYsIEdD
M0RlbnVtIGZvcm1hdCk7CiAKLSAgICB2b2lkIHNldE1lbW9yeUxpbWl0Qnl0ZXMoc2l6ZV90KTsK
KyAgICB2b2lkIHNldEhhcmRNZW1vcnlMaW1pdEJ5dGVzKHNpemVfdCk7CisgICAgdm9pZCBzZXRT
b2Z0TWVtb3J5TGltaXRCeXRlcyhzaXplX3QpOwogCiAgICAgVGV4dHVyZVRva2VuIGdldFRva2Vu
KCk7CiAgICAgdm9pZCByZWxlYXNlVG9rZW4oVGV4dHVyZVRva2VuKTsKICAgICBib29sIGhhc1Rl
eHR1cmUoVGV4dHVyZVRva2VuKTsKIAotICAgIGJvb2wgcmVxdWVzdFRleHR1cmUoVGV4dHVyZVRv
a2VuLCBJbnRTaXplLCBHQzNEZW51bSB0ZXh0dXJlRm9ybWF0KTsKKyAgICBlbnVtIE1lbW9yeUxp
bWl0IHsgSGFyZE1lbW9yeUxpbWl0LCBTb2Z0TWVtb3J5TGltaXQgfTsKKyAgICBlbnVtIFRleHR1
cmVQcmlvcml0eSB7IEhpZ2hUZXh0dXJlUHJpb3JpdHksIExvd1RleHR1cmVQcmlvcml0eSB9Owor
ICAgIGJvb2wgcmVxdWVzdFRleHR1cmUoVGV4dHVyZVRva2VuLCBJbnRTaXplLCBHQzNEZW51bSB0
ZXh0dXJlRm9ybWF0LCBNZW1vcnlMaW1pdCwgVGV4dHVyZVByaW9yaXR5KTsKIAogICAgIHZvaWQg
cHJvdGVjdFRleHR1cmUoVGV4dHVyZVRva2VuKTsKICAgICB2b2lkIHVucHJvdGVjdFRleHR1cmUo
VGV4dHVyZVRva2VuKTsKQEAgLTg1LDEzICs4OCwxNCBAQCBwdWJsaWM6CiAgICAgc2l6ZV90IGN1
cnJlbnRNZW1vcnlVc2VCeXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fbWVtb3J5VXNlQnl0ZXM7IH0K
IAogcHJpdmF0ZToKLSAgICBUZXh0dXJlTWFuYWdlcihzaXplX3QgbWVtb3J5TGltaXRCeXRlcywg
aW50IG1heFRleHR1cmVTaXplKTsKKyAgICBUZXh0dXJlTWFuYWdlcihzaXplX3QgaGFyZE1lbW9y
eUxpbWl0Qnl0ZXMsIHNpemVfdCBzb2Z0TWVtb3J5TGltaXRCeXRlcywgaW50IG1heFRleHR1cmVT
aXplKTsKIAogICAgIHN0cnVjdCBUZXh0dXJlSW5mbyB7CiAgICAgICAgIEludFNpemUgc2l6ZTsK
ICAgICAgICAgR0MzRGVudW0gZm9ybWF0OwogICAgICAgICB1bnNpZ25lZCB0ZXh0dXJlSWQ7CiAg
ICAgICAgIGJvb2wgaXNQcm90ZWN0ZWQ7CisgICAgICAgIFRleHR1cmVQcmlvcml0eSBwcmlvcml0
eTsKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgIFRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRvcjsK
ICNlbmRpZgpAQCAtMTA0LDcgKzEwOCw4IEBAIHByaXZhdGU6CiAgICAgVGV4dHVyZU1hcCBtX3Rl
eHR1cmVzOwogICAgIExpc3RIYXNoU2V0PFRleHR1cmVUb2tlbj4gbV90ZXh0dXJlTFJVU2V0Owog
Ci0gICAgc2l6ZV90IG1fbWVtb3J5TGltaXRCeXRlczsKKyAgICBzaXplX3QgbV9oYXJkTWVtb3J5
TGltaXRCeXRlczsKKyAgICBzaXplX3QgbV9zb2Z0TWVtb3J5TGltaXRCeXRlczsKICAgICBzaXpl
X3QgbV9tZW1vcnlVc2VCeXRlczsKICAgICBpbnQgbV9tYXhUZXh0dXJlU2l6ZTsKICAgICBUZXh0
dXJlVG9rZW4gbV9uZXh0VG9rZW47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcAppbmRl
eCBiZDFmMzY2NzcxNzNkMmRjOWVkNGQ3OWIwMzZkYjdiNzg0YTYyMTIyLi5jODg3YjEwZTYyYzJh
YzIxNGVjMmY0NWZiNWZmYTYyZmVlYTQzMGY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1
bS5jcHAKQEAgLTQ0LDYgKzQ0LDkgQEAgc3RhdGljIGludCBtYXhVbnRpbGVkU2l6ZSA9IDUxMjsK
IC8vIFdoZW4gdGlsaW5nIGlzIGVuYWJsZWQsIHVzZSB0aWxlcyBvZiB0aGlzIGRpbWVuc2lvbiBz
cXVhcmVkLgogc3RhdGljIGludCBkZWZhdWx0VGlsZVNpemUgPSAyNTY7CiAKKy8vIEZJWE1FOiBQ
cm9iYWJseSB3YW50IHRvIHNldCB0aGlzIGJhc2VkIG9uIHRoZSB2aWV3cG9ydC4KK3N0YXRpYyBp
bnQgaWRsZVBhaW50UGFkZGluZ1dpZHRoID0gZGVmYXVsdFRpbGVTaXplOworCiB1c2luZyBuYW1l
c3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC03Miw2ICs3NSw3IEBAIFRpbGVk
TGF5ZXJDaHJvbWl1bTo6VGlsZWRMYXllckNocm9taXVtKENDTGF5ZXJEZWxlZ2F0ZSogZGVsZWdh
dGUpCiAgICAgLCBtX3RpbGluZ09wdGlvbihBdXRvVGlsZSkKICAgICAsIG1fdGV4dHVyZUZvcm1h
dChHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNKQogICAgICwgbV9za2lwc0RyYXcoZmFs
c2UpCisgICAgLCBtX3Jlc2VydmVGYWlsZWQoZmFsc2UpCiAgICAgLCBtX3RleHR1cmVPcmllbnRh
dGlvbihMYXllclRleHR1cmVVcGRhdGVyOjpJbnZhbGlkT3JpZW50YXRpb24pCiAgICAgLCBtX3Nh
bXBsZWRUZXhlbEZvcm1hdChMYXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXRJ
bnZhbGlkKQogewpAQCAtOTIsNyArOTYsNyBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6Y2xl
YW51cFJlc291cmNlcygpCiAKICAgICBtX3RpbGVyLmNsZWFyKCk7CiAgICAgbV9wYWludFJlY3Qg
PSBJbnRSZWN0KCk7Ci0gICAgbV9yZXF1ZXN0ZWRVcGRhdGVSZWN0ID0gSW50UmVjdCgpOworICAg
IG1fcmVxdWVzdGVkVXBkYXRlVGlsZXNSZWN0ID0gSW50UmVjdCgpOwogfQogCiB2b2lkIFRpbGVk
TGF5ZXJDaHJvbWl1bTo6dXBkYXRlVGlsZVNpemVBbmRUaWxpbmdPcHRpb24oKQpAQCAtMTU3LDEx
ICsxNjEsMTMgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnNldExheWVyVHJlZUhvc3QoQ0NM
YXllclRyZWVIb3N0KiBob3N0KQogdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBv
c2l0b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIENDVGV4dHVyZVVwZGF0
ZXImIHVwZGF0ZXIpCiB7CiAgICAgLy8gUGFpbnRpbmcgY291bGQgY2F1c2UgY29tcG9zaXRpbmcg
dG8gZ2V0IHR1cm5lZCBvZmYsIHdoaWNoIG1heSBjYXVzZSB0aGUgdGlsZXIgdG8gYmVjb21lIGlu
dmFsaWRhdGVkIG1pZC11cGRhdGUuCi0gICAgaWYgKG1fc2tpcHNEcmF3IHx8IG1fcmVxdWVzdGVk
VXBkYXRlUmVjdC5pc0VtcHR5KCkgfHwgIW1fdGlsZXItPm51bVRpbGVzKCkpCisgICAgaWYgKG1f
c2tpcHNEcmF3IHx8IG1fcmVxdWVzdGVkVXBkYXRlVGlsZXNSZWN0LmlzRW1wdHkoKSB8fCAhbV90
aWxlci0+bnVtVGlsZXMoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaW50IGxlZnQsIHRvcCwg
cmlnaHQsIGJvdHRvbTsKLSAgICBtX3RpbGVyLT5jb250ZW50UmVjdFRvVGlsZUluZGljZXMobV9y
ZXF1ZXN0ZWRVcGRhdGVSZWN0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworICAgIGludCBs
ZWZ0ID0gbV9yZXF1ZXN0ZWRVcGRhdGVUaWxlc1JlY3QueCgpOworICAgIGludCB0b3AgPSBtX3Jl
cXVlc3RlZFVwZGF0ZVRpbGVzUmVjdC55KCk7CisgICAgaW50IHJpZ2h0ID0gbV9yZXF1ZXN0ZWRV
cGRhdGVUaWxlc1JlY3QubWF4WCgpLTE7CisgICAgaW50IGJvdHRvbSA9IG1fcmVxdWVzdGVkVXBk
YXRlVGlsZXNSZWN0Lm1heFkoKS0xOwogICAgIGZvciAoaW50IGogPSB0b3A7IGogPD0gYm90dG9t
OyArK2opIHsKICAgICAgICAgZm9yIChpbnQgaSA9IGxlZnQ7IGkgPD0gcmlnaHQ7ICsraSkgewog
ICAgICAgICAgICAgVXBkYXRhYmxlVGlsZSogdGlsZSA9IHRpbGVBdChpLCBqKTsKQEAgLTMxNSwy
OSArMzIxLDExIEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpwcm90ZWN0VGlsZVRleHR1cmVz
KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQogICAgIH0KIH0KIAotdm9pZCBUaWxlZExheWVy
Q2hyb21pdW06OnByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKK3Zv
aWQgVGlsZWRMYXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGVUaWxlcyhib29sIGlkbGUsIGlu
dCBsZWZ0LCBpbnQgdG9wLCBpbnQgcmlnaHQsIGludCBib3R0b20pCiB7Ci0gICAgQVNTRVJUKG1f
dGlsZXIpOwotCi0gICAgbV9za2lwc0RyYXcgPSBmYWxzZTsKLQotICAgIGlmIChjb250ZW50UmVj
dC5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9yZXF1ZXN0ZWRVcGRhdGVSZWN0ID0gSW50UmVjdCgp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV90aWxlci0+Z3Jvd0xheWVyVG9Db250
YWluKGNvbnRlbnRSZWN0KTsKLQotICAgIGlmICghbV90aWxlci0+bnVtVGlsZXMoKSkgewotICAg
ICAgICBtX3JlcXVlc3RlZFVwZGF0ZVJlY3QgPSBJbnRSZWN0KCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KICAgICAvLyBDcmVhdGUgdGlsZXMgYXMgbmVlZGVkLCBleHBhbmRpbmcgYSBkaXJ0
eSByZWN0IHRvIGNvbnRhaW4gYWxsCiAgICAgLy8gdGhlIGRpcnR5IHJlZ2lvbnMgY3VycmVudGx5
IGJlaW5nIGRyYXduLgogICAgIEludFJlY3QgZGlydHlMYXllclJlY3Q7Ci0gICAgaW50IGxlZnQs
IHRvcCwgcmlnaHQsIGJvdHRvbTsKLSAgICBtX3RpbGVyLT5jb250ZW50UmVjdFRvVGlsZUluZGlj
ZXMoY29udGVudFJlY3QsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CiAgICAgZm9yIChpbnQg
aiA9IHRvcDsgaiA8PSBib3R0b207ICsraikgewogICAgICAgICBmb3IgKGludCBpID0gbGVmdDsg
aSA8PSByaWdodDsgKytpKSB7CiAgICAgICAgICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0gdGls
ZUF0KGksIGopOwpAQCAtMzQ3LDI1ICszMzUsMzIgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06
OnByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKICAgICAgICAgICAg
IGlmICghdGlsZS0+bWFuYWdlZFRleHR1cmUoKS0+aXNWYWxpZChtX3RpbGVyLT50aWxlU2l6ZSgp
LCBtX3RleHR1cmVGb3JtYXQpKQogICAgICAgICAgICAgICAgIHRpbGUtPm1fZGlydHlMYXllclJl
Y3QgPSBtX3RpbGVyLT50aWxlTGF5ZXJSZWN0KHRpbGUpOwogCi0gICAgICAgICAgICBpZiAoIXRp
bGUtPm1hbmFnZWRUZXh0dXJlKCktPnJlc2VydmUobV90aWxlci0+dGlsZVNpemUoKSwgbV90ZXh0
dXJlRm9ybWF0KSkgeworICAgICAgICAgICAgaWYgKCFpZGxlICYmICF0aWxlLT5tYW5hZ2VkVGV4
dHVyZSgpLT5yZXNlcnZlKG1fdGlsZXItPnRpbGVTaXplKCksIG1fdGV4dHVyZUZvcm1hdCkpIHsK
ICAgICAgICAgICAgICAgICBtX3NraXBzRHJhdyA9IHRydWU7CisgICAgICAgICAgICAgICAgbV9y
ZXNlcnZlRmFpbGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBjbGVhbnVwUmVzb3VyY2VzKCk7
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBp
ZiAoaWRsZSAmJiAhdGlsZS0+bWFuYWdlZFRleHR1cmUoKS0+cmVzZXJ2ZVNvZnQobV90aWxlci0+
dGlsZVNpemUoKSwgbV90ZXh0dXJlRm9ybWF0KSkgeworICAgICAgICAgICAgICAgIG1fcmVzZXJ2
ZUZhaWxlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
CiAgICAgICAgICAgICBkaXJ0eUxheWVyUmVjdC51bml0ZSh0aWxlLT5tX2RpcnR5TGF5ZXJSZWN0
KTsKICAgICAgICAgfQogICAgIH0KIAotICAgIC8vIER1ZSB0byBib3JkZXJzLCB3aGVuIHRoZSBw
YWludCByZWN0IGlzIGV4dGVuZGVkIHRvIHRpbGUgYm91bmRhcmllcywgaXQKLSAgICAvLyBtYXkg
ZW5kIHVwIG92ZXJsYXBwaW5nIG1vcmUgdGlsZXMgdGhhbiB0aGUgb3JpZ2luYWwgY29udGVudCBy
ZWN0LiBSZWNvcmQKLSAgICAvLyB0aGF0IG9yaWdpbmFsIHJlY3Qgc28gd2UgZG9uJ3QgdXBsb2Fk
IG1vcmUgdGlsZXMgdGhhbiBuZWNlc3NhcnkuCi0gICAgbV9yZXF1ZXN0ZWRVcGRhdGVSZWN0ID0g
Y29udGVudFJlY3Q7Ci0KICAgICBtX3BhaW50UmVjdCA9IG1fdGlsZXItPmxheWVyUmVjdFRvQ29u
dGVudFJlY3QoZGlydHlMYXllclJlY3QpOwogICAgIGlmIChkaXJ0eUxheWVyUmVjdC5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIC8vIER1ZSB0byBib3JkZXJzLCB3aGVuIHRoZSBw
YWludCByZWN0IGlzIGV4dGVuZGVkIHRvIHRpbGUgYm91bmRhcmllcywgaXQKKyAgICAvLyBtYXkg
ZW5kIHVwIG92ZXJsYXBwaW5nIG1vcmUgdGlsZXMgdGhhbiB0aGUgb3JpZ2luYWwgY29udGVudCBy
ZWN0LiBSZWNvcmQKKyAgICAvLyB0aGUgb3JpZ2luYWwgdGlsZXMgc28gd2UgZG9uJ3QgdXBsb2Fk
IG1vcmUgdGlsZXMgdGhhbiBuZWNlc3NhcnkuCisgICAgaWYgKCFtX3BhaW50UmVjdC5pc0VtcHR5
KCkpCisgICAgICAgIG1fcmVxdWVzdGVkVXBkYXRlVGlsZXNSZWN0ID0gSW50UmVjdChsZWZ0LCB0
b3AsIHJpZ2h0LWxlZnQrMSwgYm90dG9tLXRvcCsxKTsKKwogICAgIC8vIENhbGxpbmcgcHJlcGFy
ZVRvVXBkYXRlKCkgY2FsbHMgaW50byBXZWJLaXQgdG8gcGFpbnQsIHdoaWNoIG1heSBoYXZlIHRo
ZSBzaWRlCiAgICAgLy8gZWZmZWN0IG9mIGRpc2FibGluZyBjb21wb3NpdGluZywgd2hpY2ggY2F1
c2VzIG91ciByZWZlcmVuY2UgdG8gdGhlIHRleHR1cmUgdXBkYXRlciB0byBiZSBkZWxldGVkLgog
ICAgIC8vIEhvd2V2ZXIsIHdlIGNhbid0IGZyZWUgdGhlIG1lbW9yeSBiYWNraW5nIHRoZSBHcmFw
aGljc0NvbnRleHQgdW50aWwgdGhlIHBhaW50IGZpbmlzaGVzLApAQCAtMzczLDcgKzM2OCw2IEBA
IHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYg
Y29udGVudFJlY3QpCiAgICAgUmVmUHRyPExheWVyVGV4dHVyZVVwZGF0ZXI+IHByb3RlY3Rvcih0
ZXh0dXJlVXBkYXRlcigpKTsKICAgICB0ZXh0dXJlVXBkYXRlcigpLT5wcmVwYXJlVG9VcGRhdGUo
bV9wYWludFJlY3QsIG1fdGlsZXItPnRpbGVTaXplKCksIG1fdGlsZXItPmhhc0JvcmRlclRleGVs
cygpKTsKIAotICAgIG1fdGlsZXItPmNvbnRlbnRSZWN0VG9UaWxlSW5kaWNlcyhtX3JlcXVlc3Rl
ZFVwZGF0ZVJlY3QsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CiAgICAgZm9yIChpbnQgaiA9
IHRvcDsgaiA8PSBib3R0b207ICsraikgewogICAgICAgICBmb3IgKGludCBpID0gbGVmdDsgaSA8
PSByaWdodDsgKytpKSB7CiAgICAgICAgICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0gdGlsZUF0
KGksIGopOwpAQCAtMzk5LDUgKzM5MywxMDMgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnBy
ZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKICAgICB9CiB9CiAKKwor
dm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBj
b250ZW50UmVjdCkKK3sKKyAgICBBU1NFUlQobV90aWxlcik7CisKKyAgICBtX3NraXBzRHJhdyA9
IGZhbHNlOworCisgICAgbV9yZXF1ZXN0ZWRVcGRhdGVUaWxlc1JlY3QgPSBJbnRSZWN0KCk7Cisg
ICAgbV9wYWludFJlY3QgPSBJbnRSZWN0KCk7CisKKyAgICBpZiAoY29udGVudFJlY3QuaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3RpbGVyLT5ncm93TGF5ZXJUb0NvbnRhaW4o
Y29udGVudFJlY3QpOworCisgICAgaWYgKCFtX3RpbGVyLT5udW1UaWxlcygpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpbnQgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tOworICAgIG1fdGlsZXIt
PmNvbnRlbnRSZWN0VG9UaWxlSW5kaWNlcyhjb250ZW50UmVjdCwgbGVmdCwgdG9wLCByaWdodCwg
Ym90dG9tKTsKKworICAgIHByZXBhcmVUb1VwZGF0ZVRpbGVzKGZhbHNlLCBsZWZ0LCB0b3AsIHJp
Z2h0LCBib3R0b20pOworfQorCit2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJlcGFyZVRvVXBk
YXRlSWRsZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKK3sKKyAgICBBU1NFUlQobV90aWxl
cik7CisKKyAgICBtX3Jlc2VydmVGYWlsZWQgPSBmYWxzZTsKKworICAgIC8vIEFib3J0IGlmIHdl
IGhhdmUgYWxyZWFkeSBwcmVwYXJlZCBhIHBhaW50LgorICAgIGlmICghbV9wYWludFJlY3QuaXNF
bXB0eSgpIHx8ICFtX3JlcXVlc3RlZFVwZGF0ZVRpbGVzUmVjdC5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIEludFJlY3QgaWRsZVBhaW50Q29udGVudFJlY3QgPSBjb250ZW50UmVj
dDsKKyAgICBpZGxlUGFpbnRDb250ZW50UmVjdC5pbmZsYXRlKGlkbGVQYWludFBhZGRpbmdXaWR0
aCk7IAorICAgIGlkbGVQYWludENvbnRlbnRSZWN0LmludGVyc2VjdChJbnRSZWN0KEludFBvaW50
Ojp6ZXJvKCksIGNvbnRlbnRCb3VuZHMoKSkpOworCisgICAgbV90aWxlci0+Z3Jvd0xheWVyVG9D
b250YWluKGlkbGVQYWludENvbnRlbnRSZWN0KTsKKworICAgIGlmICghbV90aWxlci0+bnVtVGls
ZXMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRXhwYW5kIG91dHdhcmRzIHVudGlsIHdl
IGZpbmQgYSBkaXJ0eSByb3cgb3IgY29sdW1uIHRvIHVwZGF0ZS4KKyAgICBpbnQgbDEsIHQxLCBy
MSwgYjEsIGwyLCB0MiwgcjIsIGIyOworICAgIG1fdGlsZXItPmNvbnRlbnRSZWN0VG9UaWxlSW5k
aWNlcyhjb250ZW50UmVjdCwgbDEsIHQxLCByMSwgYjEpOworICAgIG1fdGlsZXItPmNvbnRlbnRS
ZWN0VG9UaWxlSW5kaWNlcyhpZGxlUGFpbnRDb250ZW50UmVjdCwgbDIsIHQyLCByMiwgYjIpOwor
ICAgIHdoaWxlICgobDEgPiBsMiB8fCB0MSA+IHQyIHx8IHIxIDwgcjIgfHwgYjEgPCBiMikgJiYg
IW1fcmVzZXJ2ZUZhaWxlZCkgeworICAgICAgICBpZiAoYjEgPCBiMikgeworICAgICAgICAgICAg
KytiMTsKKyAgICAgICAgICAgIHByZXBhcmVUb1VwZGF0ZVRpbGVzKHRydWUsIGwxLCBiMSwgcjEs
IGIxKTsKKyAgICAgICAgICAgIGlmICghbV9wYWludFJlY3QuaXNFbXB0eSgpKQorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmICh0MSA+IHQyKSB7CisgICAgICAg
ICAgICAtLXQxOworICAgICAgICAgICAgcHJlcGFyZVRvVXBkYXRlVGlsZXModHJ1ZSwgbDEsIHQx
LCByMSwgdDEpOworICAgICAgICAgICAgaWYgKCFtX3BhaW50UmVjdC5pc0VtcHR5KCkpCisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGwxID4gbDIpIHsKKyAg
ICAgICAgICAgIC0tbDE7CisgICAgICAgICAgICBwcmVwYXJlVG9VcGRhdGVUaWxlcyh0cnVlLCBs
MSwgdDEsIGwxLCBiMSk7CisgICAgICAgICAgICBpZiAoIW1fcGFpbnRSZWN0LmlzRW1wdHkoKSkK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAocjEgPCByMikg
eworICAgICAgICAgICAgKytyMTsKKyAgICAgICAgICAgIHByZXBhcmVUb1VwZGF0ZVRpbGVzKHRy
dWUsIHIxLCB0MSwgcjEsIGIxKTsKKyAgICAgICAgICAgIGlmICghbV9wYWludFJlY3QuaXNFbXB0
eSgpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQorCitib29s
IFRpbGVkTGF5ZXJDaHJvbWl1bTo6bmVlZHNJZGxlUGFpbnQoY29uc3QgSW50UmVjdCYgY29udGVu
dFJlY3QpCit7CisgICAgaWYgKG1fc2tpcHNEcmF3IHx8IG1fcmVzZXJ2ZUZhaWxlZCkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgSW50UmVjdCBpZGxlUGFpbnRDb250ZW50UmVjdCA9IGNv
bnRlbnRSZWN0OworICAgIGlkbGVQYWludENvbnRlbnRSZWN0LmluZmxhdGUoaWRsZVBhaW50UGFk
ZGluZ1dpZHRoKTsgCisgICAgaWRsZVBhaW50Q29udGVudFJlY3QuaW50ZXJzZWN0KEludFJlY3Qo
SW50UG9pbnQ6Onplcm8oKSwgY29udGVudEJvdW5kcygpKSk7CisKKyAgICBpbnQgbGVmdCwgdG9w
LCByaWdodCwgYm90dG9tOworICAgIG1fdGlsZXItPmNvbnRlbnRSZWN0VG9UaWxlSW5kaWNlcyhp
ZGxlUGFpbnRDb250ZW50UmVjdCwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKKyAgICBmb3Ig
KGludCBqID0gdG9wOyBqIDw9IGJvdHRvbTsgKytqKSB7CisgICAgICAgIGZvciAoaW50IGkgPSBs
ZWZ0OyBpIDw9IHJpZ2h0OyArK2kpIHsKKyAgICAgICAgICAgIGlmIChtX3JlcXVlc3RlZFVwZGF0
ZVRpbGVzUmVjdC5jb250YWlucyhJbnRQb2ludChpLCBqKSkpCisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0gdGlsZUF0KGksIGopOwor
ICAgICAgICAgICAgaWYgKCF0aWxlIHx8ICF0aWxlLT5tYW5hZ2VkVGV4dHVyZSgpLT5pc1ZhbGlk
KG1fdGlsZXItPnRpbGVTaXplKCksIG1fdGV4dHVyZUZvcm1hdCkgfHwgdGlsZS0+ZGlydHkoKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKIH0KICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9U
aWxlZExheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDVkYWYwZjAxOTQ3YTk5NDdjZDIzNWY1
NWZiNzM5NTllNDQ3YjFmNTYuLjY0MTZlYmE0ZDJjNDkzYjJkNjY5N2Q0OTg0ZTcwYjQ2NWQzY2E2
ZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1RpbGVkTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oCkBAIC02NSw5ICs2NSwxNiBAQCBwcm90
ZWN0ZWQ6CiAKICAgICAvLyBTZXQgaW52YWxpZGF0aW9ucyB0byBiZSBwb3RlbnRpYWxseSByZXBh
aW50ZWQgZHVyaW5nIHVwZGF0ZSgpLgogICAgIHZvaWQgaW52YWxpZGF0ZVJlY3QoY29uc3QgSW50
UmVjdCYgY29udGVudFJlY3QpOworCiAgICAgLy8gUHJlcGFyZSBkYXRhIG5lZWRlZCB0byB1cGRh
dGUgdGV4dHVyZXMgdGhhdCBpbnRlcnNlY3Qgd2l0aCBjb250ZW50UmVjdC4KICAgICB2b2lkIHBy
ZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCk7CiAKKyAgICAvLyBTYW1l
IGFzIGFib3ZlLCBidXQgdGhpcyB3aWxsIHRyeSB0byBwYWludCBhZGRpdGlvbmFsIHN1cnJvdW5k
aW5nIGNvbnRlbnQgaWYgaWRsZS4KKyAgICB2b2lkIHByZXBhcmVUb1VwZGF0ZUlkbGUoY29uc3Qg
SW50UmVjdCYgY29udGVudFJlY3QpOworCisgICAgLy8gQWZ0ZXIgcHJlcGFyaW5nIGFuIHVwZGF0
ZSwgcmV0dXJucyB0cnVlIGlmIG1vcmUgcHJlLXBhaW50aW5nIGlzIG5lZWRlZC4KKyAgICBib29s
IG5lZWRzSWRsZVBhaW50KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KTsKKwogICAgIHZpcnR1
YWwgdm9pZCBwcm90ZWN0VmlzaWJsZVRpbGVUZXh0dXJlcygpOwogCiBwcml2YXRlOgpAQCAtNzcs
NiArODQsOCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBjcmVhdGVUaWxlcklmTmVlZGVkKCk7CiAg
ICAgdm9pZCBzZXRUaWxpbmdPcHRpb24oVGlsaW5nT3B0aW9uKTsKKyAKKyAgICB2b2lkIHByZXBh
cmVUb1VwZGF0ZVRpbGVzKGJvb2wgaWRsZSwgaW50IGxlZnQsIGludCB0b3AsIGludCByaWdodCwg
aW50IGJvdHRvbSk7CiAKICAgICBVcGRhdGFibGVUaWxlKiB0aWxlQXQoaW50LCBpbnQpIGNvbnN0
OwogICAgIFVwZGF0YWJsZVRpbGUqIGNyZWF0ZVRpbGUoaW50LCBpbnQpOwpAQCAtODQsNyArOTMs
OCBAQCBwcml2YXRlOgogICAgIFRleHR1cmVNYW5hZ2VyKiB0ZXh0dXJlTWFuYWdlcigpIGNvbnN0
OwogCiAgICAgLy8gVGVtcG9yYXJ5IHN0YXRlIGhlbGQgYmV0d2VlbiBwcmVwYXJlVG9VcGRhdGUo
KSBhbmQgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcygpLgotICAgIEludFJlY3QgbV9yZXF1ZXN0
ZWRVcGRhdGVSZWN0OworICAgIEludFJlY3QgbV9yZXF1ZXN0ZWRVcGRhdGVUaWxlc1JlY3Q7CisK
ICAgICAvLyBTdGF0ZSBoZWxkIGJldHdlZW4gcHJlcGFyZVRvVXBkYXRlKCkgYW5kIHB1c2hQcm9w
ZXJ0aWVzVG8oKS4gVGhpcyByZXByZXNlbnRzIHRoZSBhcmVhCiAgICAgLy8gb2YgdGhlIGxheWVy
IHRoYXQgaXMgYWN0dWFsbHkgcmUtcGFpbnRlZCBieSBXZWJLaXQuCiAgICAgSW50UmVjdCBtX3Bh
aW50UmVjdDsKQEAgLTkyLDYgKzEwMiw3IEBAIHByaXZhdGU6CiAgICAgVGlsaW5nT3B0aW9uIG1f
dGlsaW5nT3B0aW9uOwogICAgIEdDM0RlbnVtIG1fdGV4dHVyZUZvcm1hdDsKICAgICBib29sIG1f
c2tpcHNEcmF3OworICAgIGJvb2wgbV9yZXNlcnZlRmFpbGVkOwogICAgIExheWVyVGV4dHVyZVVw
ZGF0ZXI6Ok9yaWVudGF0aW9uIG1fdGV4dHVyZU9yaWVudGF0aW9uOwogICAgIExheWVyVGV4dHVy
ZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZvcm1hdCBtX3NhbXBsZWRUZXhlbEZvcm1hdDsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggNGYyYzFmYjYyNjRlZTdjM2E5ZTYxNzUz
N2EwMjg5ODJmOGFiMzNmZS4uZDBhMzM1NGQwYzBlMGIxM2Y5MzExYTFhYzg3NjM4YWRiY2NhYjMy
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCkBAIC04NSw3ICs4NSw3IEBAIGJv
b2wgQ0NMYXllclRyZWVIb3N0Ojppbml0aWFsaXplKCkKICAgICAvLyBVcGRhdGUgbV9zZXR0aW5n
cyBiYXNlZCBvbiBjYXBhYmlsaXRpZXMgdGhhdCB3ZSBnb3QgYmFjayBmcm9tIHRoZSByZW5kZXJl
ci4KICAgICBtX3NldHRpbmdzLmFjY2VsZXJhdGVQYWludGluZyA9IG1fcHJveHktPmxheWVyUmVu
ZGVyZXJDYXBhYmlsaXRpZXMoKS51c2luZ0FjY2VsZXJhdGVkUGFpbnRpbmc7CiAKLSAgICBtX2Nv
bnRlbnRzVGV4dHVyZU1hbmFnZXIgPSBUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKFRleHR1cmVNYW5h
Z2VyOjpoaWdoTGltaXRCeXRlcygpLCBtX3Byb3h5LT5sYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVz
KCkubWF4VGV4dHVyZVNpemUpOworICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdlciA9IFRleHR1
cmVNYW5hZ2VyOjpjcmVhdGUoVGV4dHVyZU1hbmFnZXI6OmhpZ2hMaW1pdEJ5dGVzKCksIFRleHR1
cmVNYW5hZ2VyOjpyZWNsYWltTGltaXRCeXRlcyh2aWV3cG9ydFNpemUoKSksIG1fcHJveHktPmxh
eWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS5tYXhUZXh0dXJlU2l6ZSk7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKQEAgLTExNyw3ICsxMTcsOSBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6YmVnaW5D
b21taXRPbkltcGxUaHJlYWQoQ0NMYXllclRyZWVIb3N0SW1wbCogaG9zdEltcGwpCiAgICAgQVNT
RVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKICAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRy
ZWVIb3N0Ojpjb21taXRUbyIsIHRoaXMsIDApOwogCi0gICAgY29udGVudHNUZXh0dXJlTWFuYWdl
cigpLT5yZWR1Y2VNZW1vcnlUb0xpbWl0KFRleHR1cmVNYW5hZ2VyOjpyZWNsYWltTGltaXRCeXRl
cygpKTsKKyAgICBzaXplX3QgcmVjbGFpbUxpbWl0ID0gVGV4dHVyZU1hbmFnZXI6OnJlY2xhaW1M
aW1pdEJ5dGVzKHZpZXdwb3J0U2l6ZSgpKTsKKyAgICBjb250ZW50c1RleHR1cmVNYW5hZ2VyKCkt
PnNldFNvZnRNZW1vcnlMaW1pdEJ5dGVzKHJlY2xhaW1MaW1pdCk7CisgICAgY29udGVudHNUZXh0
dXJlTWFuYWdlcigpLT5yZWR1Y2VNZW1vcnlUb0xpbWl0KHJlY2xhaW1MaW1pdCk7CiAgICAgY29u
dGVudHNUZXh0dXJlTWFuYWdlcigpLT5kZWxldGVFdmljdGVkVGV4dHVyZXMoaG9zdEltcGwtPmNv
bnRlbnRzVGV4dHVyZUFsbG9jYXRvcigpKTsKIH0KIApAQCAtMjU1LDcgKzI1Nyw3IEBAIHZvaWQg
Q0NMYXllclRyZWVIb3N0OjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKIAogICAgIG1fdmlzaWJs
ZSA9IHZpc2libGU7CiAgICAgaWYgKCF2aXNpYmxlKSB7Ci0gICAgICAgIG1fY29udGVudHNUZXh0
dXJlTWFuYWdlci0+cmVkdWNlTWVtb3J5VG9MaW1pdChUZXh0dXJlTWFuYWdlcjo6bG93TGltaXRC
eXRlcygpKTsKKyAgICAgICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT5yZWR1Y2VNZW1vcnlU
b0xpbWl0KFRleHR1cmVNYW5hZ2VyOjpsb3dMaW1pdEJ5dGVzKHZpZXdwb3J0U2l6ZSgpKSk7CiAg
ICAgICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+dW5wcm90ZWN0QWxsVGV4dHVyZXMoKTsK
ICAgICB9CiAKQEAgLTI2OCw3ICsyNzAsOSBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c2V0Vmlz
aWJsZShib29sIHZpc2libGUpCiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6ZGlkQmVjb21lSW52aXNp
YmxlT25JbXBsVGhyZWFkKENDTGF5ZXJUcmVlSG9zdEltcGwqIGhvc3RJbXBsKQogewogICAgIEFT
U0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7Ci0gICAgY29udGVudHNUZXh0dXJlTWFuYWdl
cigpLT5yZWR1Y2VNZW1vcnlUb0xpbWl0KFRleHR1cmVNYW5hZ2VyOjpyZWNsYWltTGltaXRCeXRl
cygpKTsKKyAgICBzaXplX3QgcmVjbGFpbUxpbWl0ID0gVGV4dHVyZU1hbmFnZXI6OnJlY2xhaW1M
aW1pdEJ5dGVzKHZpZXdwb3J0U2l6ZSgpKTsKKyAgICBjb250ZW50c1RleHR1cmVNYW5hZ2VyKCkt
PnNldFNvZnRNZW1vcnlMaW1pdEJ5dGVzKHJlY2xhaW1MaW1pdCk7CisgICAgY29udGVudHNUZXh0
dXJlTWFuYWdlcigpLT5yZWR1Y2VNZW1vcnlUb0xpbWl0KHJlY2xhaW1MaW1pdCk7CiAgICAgY29u
dGVudHNUZXh0dXJlTWFuYWdlcigpLT5kZWxldGVFdmljdGVkVGV4dHVyZXMoaG9zdEltcGwtPmNv
bnRlbnRzVGV4dHVyZUFsbG9jYXRvcigpKTsKIH0KIApAQCAtMzMyLDE4ICszMzYsMjMgQEAgdm9p
ZCBDQ0xheWVyVHJlZUhvc3Q6OnVwZGF0ZUxheWVycyhMYXllckNocm9taXVtKiByb290TGF5ZXIp
CiAgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNB
bmRWaXNpYmlsaXR5KHJvb3RMYXllciwgcm9vdExheWVyLCBtX3pvb21BbmltYXRvclRyYW5zZm9y
bSwgbV96b29tQW5pbWF0b3JUcmFuc2Zvcm0sIG1fdXBkYXRlTGlzdCwgcm9vdFJlbmRlclN1cmZh
Y2UtPmxheWVyTGlzdCgpLCBsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkubWF4VGV4dHVyZVNp
emUpOwogICAgIH0KIAotICAgIHBhaW50TGF5ZXJDb250ZW50cyhtX3VwZGF0ZUxpc3QpOworICAg
IHBhaW50TGF5ZXJDb250ZW50cyhtX3VwZGF0ZUxpc3QsIGZhbHNlIC8qIGlkbGUgKi8pOworICAg
IC8vIFRoZSBzZWNvbmQgKGlkbGUpIHBhaW50IHdpbGwgYmUgYSBuby1vcCBpbiBsYXllcnMgd2hl
cmUgcGFpbnRpbmcgYWxyZWFkeSBvY2N1cmVkIGFib3ZlLgorICAgIHBhaW50TGF5ZXJDb250ZW50
cyhtX3VwZGF0ZUxpc3QsIHRydWUgLyogaWRsZSAqLyk7CiB9CiAKLXN0YXRpYyB2b2lkIHBhaW50
Q29udGVudHNJZkRpcnR5KExheWVyQ2hyb21pdW0qIGxheWVyLCBjb25zdCBJbnRSZWN0JiB2aXNp
YmxlTGF5ZXJSZWN0KQorc3RhdGljIHZvaWQgcGFpbnRDb250ZW50c0lmRGlydHkoTGF5ZXJDaHJv
bWl1bSogbGF5ZXIsIGNvbnN0IEludFJlY3QmIHZpc2libGVMYXllclJlY3QsIGJvb2wgaWRsZSkK
IHsKICAgICBpZiAobGF5ZXItPmRyYXdzQ29udGVudCgpKSB7CiAgICAgICAgIGxheWVyLT5zZXRW
aXNpYmxlTGF5ZXJSZWN0KHZpc2libGVMYXllclJlY3QpOwotICAgICAgICBsYXllci0+cGFpbnRD
b250ZW50c0lmRGlydHkoKTsKKyAgICAgICAgaWYgKCFpZGxlKQorICAgICAgICAgICAgbGF5ZXIt
PnBhaW50Q29udGVudHNJZkRpcnR5KCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxheWVy
LT5pZGxlUGFpbnRDb250ZW50c0lmRGlydHkoKTsKICAgICB9CiB9CiAKLXZvaWQgQ0NMYXllclRy
ZWVIb3N0OjpwYWludE1hc2tBbmRSZXBsaWNhRm9yUmVuZGVyU3VyZmFjZShMYXllckNocm9taXVt
KiByZW5kZXJTdXJmYWNlTGF5ZXIpCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6cGFpbnRNYXNrQW5k
UmVwbGljYUZvclJlbmRlclN1cmZhY2UoTGF5ZXJDaHJvbWl1bSogcmVuZGVyU3VyZmFjZUxheWVy
LCBib29sIGlkbGUpCiB7CiAgICAgLy8gTm90ZTogTWFza3MgYW5kIHJlcGxpY2FzIG9ubHkgZXhp
c3QgZm9yIGxheWVycyB0aGF0IG93biByZW5kZXIgc3VyZmFjZXMuIElmIHdlIHJlYWNoIHRoaXMg
cG9pbnQKICAgICAvLyBpbiBjb2RlLCB3ZSBhbHJlYWR5IGtub3cgdGhhdCBhdCBsZWFzdCBzb21l
dGhpbmcgd2lsbCBiZSBkcmF3biBpbnRvIHRoaXMgcmVuZGVyIHN1cmZhY2UsIHNvIHRoZQpAQCAt
MzUxLDcgKzM2MCw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpwYWludE1hc2tBbmRSZXBsaWNh
Rm9yUmVuZGVyU3VyZmFjZShMYXllckNocm9taXVtKiByZW5kZXJTCiAKICAgICBpZiAocmVuZGVy
U3VyZmFjZUxheWVyLT5tYXNrTGF5ZXIoKSkgewogICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXIt
Pm1hc2tMYXllcigpLT5zZXRMYXllclRyZWVIb3N0KHRoaXMpOwotICAgICAgICBwYWludENvbnRl
bnRzSWZEaXJ0eShyZW5kZXJTdXJmYWNlTGF5ZXItPm1hc2tMYXllcigpLCBJbnRSZWN0KEludFBv
aW50KCksIHJlbmRlclN1cmZhY2VMYXllci0+Y29udGVudEJvdW5kcygpKSk7CisgICAgICAgIHBh
aW50Q29udGVudHNJZkRpcnR5KHJlbmRlclN1cmZhY2VMYXllci0+bWFza0xheWVyKCksIEludFJl
Y3QoSW50UG9pbnQoKSwgcmVuZGVyU3VyZmFjZUxheWVyLT5jb250ZW50Qm91bmRzKCkpLCBpZGxl
KTsKICAgICB9CiAKICAgICBMYXllckNocm9taXVtKiByZXBsaWNhTGF5ZXIgPSByZW5kZXJTdXJm
YWNlTGF5ZXItPnJlcGxpY2FMYXllcigpOwpAQCAtMzYwLDE2ICszNjksMTYgQEAgdm9pZCBDQ0xh
eWVyVHJlZUhvc3Q6OnBhaW50TWFza0FuZFJlcGxpY2FGb3JSZW5kZXJTdXJmYWNlKExheWVyQ2hy
b21pdW0qIHJlbmRlclMKICAgICAgICAgSW50UmVjdCB2aXNpYmxlTGF5ZXJSZWN0ID0gQ0NMYXll
clRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlTGF5ZXJSZWN0PExheWVyQ2hyb21pdW0+
KHJlbmRlclN1cmZhY2VMYXllcik7CiAKICAgICAgICAgcmVwbGljYUxheWVyLT5zZXRMYXllclRy
ZWVIb3N0KHRoaXMpOwotICAgICAgICBwYWludENvbnRlbnRzSWZEaXJ0eShyZXBsaWNhTGF5ZXIs
IHZpc2libGVMYXllclJlY3QpOworICAgICAgICBwYWludENvbnRlbnRzSWZEaXJ0eShyZXBsaWNh
TGF5ZXIsIHZpc2libGVMYXllclJlY3QsIGlkbGUpOwogCiAgICAgICAgIGlmIChyZXBsaWNhTGF5
ZXItPm1hc2tMYXllcigpKSB7CiAgICAgICAgICAgICByZXBsaWNhTGF5ZXItPm1hc2tMYXllcigp
LT5zZXRMYXllclRyZWVIb3N0KHRoaXMpOwotICAgICAgICAgICAgcGFpbnRDb250ZW50c0lmRGly
dHkocmVwbGljYUxheWVyLT5tYXNrTGF5ZXIoKSwgSW50UmVjdChJbnRQb2ludCgpLCByZXBsaWNh
TGF5ZXItPm1hc2tMYXllcigpLT5jb250ZW50Qm91bmRzKCkpKTsKKyAgICAgICAgICAgIHBhaW50
Q29udGVudHNJZkRpcnR5KHJlcGxpY2FMYXllci0+bWFza0xheWVyKCksIEludFJlY3QoSW50UG9p
bnQoKSwgcmVwbGljYUxheWVyLT5tYXNrTGF5ZXIoKS0+Y29udGVudEJvdW5kcygpKSwgaWRsZSk7
CiAgICAgICAgIH0KICAgICB9CiB9CiAKLXZvaWQgQ0NMYXllclRyZWVIb3N0OjpwYWludExheWVy
Q29udGVudHMoY29uc3QgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KQordm9pZCBD
Q0xheWVyVHJlZUhvc3Q6OnBhaW50TGF5ZXJDb250ZW50cyhjb25zdCBMYXllckxpc3QmIHJlbmRl
clN1cmZhY2VMYXllckxpc3QsIGJvb2wgaWRsZSkKIHsKICAgICBmb3IgKGludCBzdXJmYWNlSW5k
ZXggPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSAtIDE7IHN1cmZhY2VJbmRleCA+PSAw
IDsgLS1zdXJmYWNlSW5kZXgpIHsKICAgICAgICAgTGF5ZXJDaHJvbWl1bSogcmVuZGVyU3VyZmFj
ZUxheWVyID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdFtzdXJmYWNlSW5kZXhdLmdldCgpOwpAQCAt
Mzg1LDcgKzM5NCw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpwYWludExheWVyQ29udGVudHMo
Y29uc3QgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0CiAgICAgICAgICAgICBjb250
aW51ZTsKIAogICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXItPnNldExheWVyVHJlZUhvc3QodGhp
cyk7Ci0gICAgICAgIHBhaW50TWFza0FuZFJlcGxpY2FGb3JSZW5kZXJTdXJmYWNlKHJlbmRlclN1
cmZhY2VMYXllcik7CisgICAgICAgIHBhaW50TWFza0FuZFJlcGxpY2FGb3JSZW5kZXJTdXJmYWNl
KHJlbmRlclN1cmZhY2VMYXllciwgaWRsZSk7CiAKICAgICAgICAgY29uc3QgTGF5ZXJMaXN0JiBs
YXllckxpc3QgPSByZW5kZXJTdXJmYWNlLT5sYXllckxpc3QoKTsKICAgICAgICAgQVNTRVJUKGxh
eWVyTGlzdC5zaXplKCkpOwpAQCAtNDA0LDcgKzQxMyw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0
OjpwYWludExheWVyQ29udGVudHMoY29uc3QgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEludFJlY3QgdmlzaWJsZUxheWVyUmVjdCA9
IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUxheWVyUmVjdDxMYXllckNo
cm9taXVtPihsYXllcik7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHBhaW50Q29udGVudHNJ
ZkRpcnR5KGxheWVyLCB2aXNpYmxlTGF5ZXJSZWN0KTsKKyAgICAgICAgICAgIHBhaW50Q29udGVu
dHNJZkRpcnR5KGxheWVyLCB2aXNpYmxlTGF5ZXJSZWN0LCBpZGxlKTsKICAgICAgICAgfQogICAg
IH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKaW5kZXggNzUxOTU0NWUxNzUwNGI2YTI0
Y2MxYTc0Mjg5NmE2ODFhNzUyNzk0ZS4uYTVkM2UyMzg3NDNjYTJkMjczMzBlMjA5ZmVlMjg5Yzg5
MTcyMzhlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKQEAgLTE4NSw4ICsxODUsOCBA
QCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxMYXllckNo
cm9taXVtPiA+IExheWVyTGlzdDsKIAotICAgIHZvaWQgcGFpbnRMYXllckNvbnRlbnRzKGNvbnN0
IExheWVyTGlzdCYpOwotICAgIHZvaWQgcGFpbnRNYXNrQW5kUmVwbGljYUZvclJlbmRlclN1cmZh
Y2UoTGF5ZXJDaHJvbWl1bSopOworICAgIHZvaWQgcGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExh
eWVyTGlzdCYsIGJvb2wgaWRsZVBhaW50KTsKKyAgICB2b2lkIHBhaW50TWFza0FuZFJlcGxpY2FG
b3JSZW5kZXJTdXJmYWNlKExheWVyQ2hyb21pdW0qLCBib29sIGlkbGVQYWludCk7CiAKICAgICB2
b2lkIHVwZGF0ZUxheWVycyhMYXllckNocm9taXVtKik7CiAgICAgdm9pZCB1cGRhdGVDb21wb3Np
dG9yUmVzb3VyY2VzKExheWVyQ2hyb21pdW0qLCBHcmFwaGljc0NvbnRleHQzRCosIENDVGV4dHVy
ZVVwZGF0ZXImKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116442</attachid>
            <date>2011-11-23 15:21:14 -0800</date>
            <delta_ts>2011-11-24 22:36:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72686-20111123152113.patch</filename>
            <type>text/plain</type>
            <size>36440</size>
            <attacher name="Eric Penner">epenner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxMDM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2I4MDMyZTk3ZWIxZGQw
NWQ5Mjg1ZjQxYzBkZTZjMzFiYzg2MDU4My4uOTA5ZTY1MjU2OTIxMTM4NDUzMzYxODcxZTUyNGYw
MmRkZWY0MjFjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU4IEBACisyMDExLTExLTIzICBFcmlj
IFBlbm5lciAgPGVwZW5uZXJAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIE5lZWQg
dG8gcHJlcGFpbnQgdGlsZXMgaW4gVGlsZWRMYXllckNocm9taXVtCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjY4NgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMhKQorCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OnBhaW50Q29udGVu
dHNJZkRpcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjppZGxl
UGFpbnRDb250ZW50c0lmRGlydHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0NvbnRlbnRMYXllckNocm9taXVtLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
TGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c0lmRGlydHkpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHNJZkRpcnR5KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZVNoYXJlZE9iamVjdHMpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL01hbmFnZWRUZXh0dXJlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Ok1hbmFnZWRUZXh0dXJlOjpyZXNlcnZlKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1hbmFnZWRUZXh0dXJlOjpyZXNlcnZlU29mdCk6CisgICAgICAgIChXZWJDb3JlOjpN
YW5hZ2VkVGV4dHVyZTo6cmVzZXJ2ZVRvTGltaXRBdFByaW9yaXR5KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9NYW5hZ2VkVGV4dHVyZS5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlRleHR1cmVNYW5hZ2VyOjpyZWNsYWltTGltaXRCeXRlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFuYWdlcjo6bG93TGltaXRCeXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFuYWdlcjo6VGV4dHVyZU1hbmFnZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
bmFnZXI6OnNldEhhcmRNZW1vcnlMaW1pdEJ5dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1
cmVNYW5hZ2VyOjpzZXRTb2Z0TWVtb3J5TGltaXRCeXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0dXJlTWFuYWdlcjo6YWRkVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFu
YWdlcjo6cmVxdWVzdFRleHR1cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1RleHR1cmVNYW5hZ2VyLmg6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFuYWdlcjo6
Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVy
Q2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjpUaWxl
ZExheWVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjpj
bGVhbnVwUmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6
dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVy
Q2hyb21pdW06OnByZXBhcmVUb1VwZGF0ZVRpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVk
TGF5ZXJDaHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVk
TGF5ZXJDaHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlSWRsZSk6CisgICAgICAgIChXZWJDb3JlOjpU
aWxlZExheWVyQ2hyb21pdW06Om5lZWRzSWRsZVBhaW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0Ojppbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkND
TGF5ZXJUcmVlSG9zdDo6YmVnaW5Db21taXRPbkltcGxUaHJlYWQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0OjpzZXRWaXNpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJUcmVlSG9zdDo6ZGlkQmVjb21lSW52aXNpYmxlT25JbXBsVGhyZWFkKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6dXBkYXRlTGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJUcmVlSG9zdDo6cGFpbnRNYXNrQW5kUmVwbGljYUZvclJlbmRlclN1cmZhY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpwYWludExheWVyQ29udGVudHMpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5o
OgorCiAyMDExLTExLTIyICBLZW5uZXRoIFJ1c3NlbGwgIDxrYnJAZ29vZ2xlLmNvbT4KIAogICAg
ICAgICBbY2hyb21pdW1dIFN1cHBvcnQgQ29yZSBBbmltYXRpb24gcGx1Z2lucyBpbiBjb21wb3Np
dG9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggOWViMWQ3OTlmNmQ5
MWVjZWM2Nzk4MTA2ZWM2MDI3YmI0MWU1MjUyMC4uNTIzZmZkNDVhMzNmZWMwZDA4MjU1OTY4ZWZl
Zjg0ZDZlMjBiOWMyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcApAQCAt
OTIsOCArOTIsMTMgQEAgdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6Y2xlYW51cFJlc291cmNl
cygpCiAgICAgVGlsZWRMYXllckNocm9taXVtOjpjbGVhbnVwUmVzb3VyY2VzKCk7CiB9CiAKLXZv
aWQgQ29udGVudExheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHNJZkRpcnR5KCkKK3ZvaWQgQ29u
dGVudExheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHNJZkRpcnR5KGJvb2wgaWRsZVBhaW50KQog
eworICAgIGlmIChpZGxlUGFpbnQpIHsKKyAgICAgICAgaWRsZVBhaW50Q29udGVudHNJZkRpcnR5
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICB1cGRhdGVUaWxlU2l6ZUFuZFRpbGlu
Z09wdGlvbigpOwogCiAgICAgSW50UmVjdCBsYXllclJlY3Q7CkBAIC0xMTEsNiArMTE2LDIwIEBA
IHZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHNJZkRpcnR5KCkKICAgICBy
ZXNldE5lZWRzRGlzcGxheSgpOwogfQogCit2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjppZGxl
UGFpbnRDb250ZW50c0lmRGlydHkoKQoreworICAgIGlmICghZHJhd3NDb250ZW50KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCA9IHZpc2libGVMYXll
clJlY3QoKTsKKyAgICBpZiAobGF5ZXJSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgcHJlcGFyZVRvVXBkYXRlSWRsZShsYXllclJlY3QpOworICAgIGlmIChuZWVkc0lkbGVQ
YWludChsYXllclJlY3QpKQorICAgICAgICBzZXROZWVkc0NvbW1pdCgpOworfQorCiBib29sIENv
bnRlbnRMYXllckNocm9taXVtOjpkcmF3c0NvbnRlbnQoKSBjb25zdAogewogICAgIHJldHVybiBt
X2RlbGVnYXRlICYmIG1fZGVsZWdhdGUtPmRyYXdzQ29udGVudCgpICYmIFRpbGVkTGF5ZXJDaHJv
bWl1bTo6ZHJhd3NDb250ZW50KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaAppbmRl
eCBiODM0ZTY3NmJkNjM0NDVhYTQ1M2IzNjVlZWUyODAyNDBmMzgwOWMxLi4zMjk4MjM5N2IxZmYw
OGRkODQ4OTUzYjZkNWYwMzUxZjQzYjYzZmVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9t
aXVtLmgKQEAgLTQ5LDcgKzQ5LDggQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB+Q29udGVudExh
eWVyQ2hyb21pdW0oKTsKIAotICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzSWZEaXJ0eSgp
OworICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzSWZEaXJ0eShib29sIGlkbGVQYWludCk7
CisgICAgdmlydHVhbCB2b2lkIGlkbGVQYWludENvbnRlbnRzSWZEaXJ0eSgpOwogCiBwcm90ZWN0
ZWQ6CiAgICAgZXhwbGljaXQgQ29udGVudExheWVyQ2hyb21pdW0oQ0NMYXllckRlbGVnYXRlKik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9J
bWFnZUxheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcAppbmRleCA5ZDNlOWYzYTFlNzBkZWU1ZjE5
ZTNjZjBiMjQ4Yjk0M2FmYTEwMmMwLi44MDEwOTM2MDQ4MGM1YmQ4Nzg5MGMxZDAxZmRlY2ZmNGUz
ZTkwOTI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTE0NCw4ICsxNDQs
MTEgQEAgdm9pZCBJbWFnZUxheWVyQ2hyb21pdW06OnNldENvbnRlbnRzKEltYWdlKiBjb250ZW50
cykKICAgICBzZXRPcGFxdWUoIW1fY29udGVudHMtPmN1cnJlbnRGcmFtZUhhc0FscGhhKCkpOwog
fQogCi12b2lkIEltYWdlTGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c0lmRGlydHkoKQordm9p
ZCBJbWFnZUxheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHNJZkRpcnR5KGJvb2wgaWRsZVBhaW50
KQogeworICAgIGlmIChpZGxlUGFpbnQpCisgICAgICAgIHJldHVybjsKKwogICAgIGlmICghbV9k
aXJ0eVJlY3QuaXNFbXB0eSgpKSB7CiAgICAgICAgIG1fdGV4dHVyZVVwZGF0ZXItPnVwZGF0ZUZy
b21JbWFnZShtX2NvbnRlbnRzLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpKTsKICAgICAg
ICAgdXBkYXRlVGlsZVNpemVBbmRUaWxpbmdPcHRpb24oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9t
aXVtLmgKaW5kZXggNWZlNGYyNjY2OGJkY2MzZTI5ZjA0Y2ZmY2RhODgyYTczYzMxZTMyNy4uYzNk
NzVkODg4YjZhNzUxMGY3YmVlYjhmY2M0NDgwMjljMjBmNWViNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXll
ckNocm9taXVtLmgKQEAgLTUzLDcgKzUzLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfkltYWdl
TGF5ZXJDaHJvbWl1bSgpOwogCiAgICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIGNvbnN0
OwotICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzSWZEaXJ0eSgpOworICAgIHZpcnR1YWwg
dm9pZCBwYWludENvbnRlbnRzSWZEaXJ0eShib29sIGlkbGVQYWludCk7CiAgICAgdmlydHVhbCBi
b29sIG5lZWRzQ29udGVudHNTY2FsZSgpIGNvbnN0OwogCiAgICAgdm9pZCBzZXRDb250ZW50cyhJ
bWFnZSogaW1hZ2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDcxM2RmYjI1MjMwMTA4NmZmYTdl
NTgxYzA0MjA0NzVlOGJkZmZiN2QuLjhlYWJiYzE2NDM4YjZlZjUwNWNlMWU0MDRmODY2ZmMyNmU5
MWZmYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKQEAgLTE2MSw3ICsxNjEsNyBAQCBwdWJsaWM6CiAK
ICAgICAvLyBUaGVzZSBtZXRob2RzIHR5cGljYWxseSBuZWVkIHRvIGJlIG92ZXJ3cml0dGVuIGJ5
IGRlcml2ZWQgY2xhc3Nlcy4KICAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50c0lmRGlydHko
KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50c0lmRGlydHkoYm9vbCBpZGxlUGFp
bnQpIHsgfQogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKEdyYXBo
aWNzQ29udGV4dDNEKiwgQ0NUZXh0dXJlVXBkYXRlciYpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBz
ZXRJc01hc2soYm9vbCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIHVucmVzZXJ2ZUNvbnRlbnRzVGV4
dHVyZSgpIHsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKaW5kZXggYTQz
NWQxMDYxNmQ4NWFiNGQ0ZDI1NTQ1ZTAwMGU3ZGMwNzFlMzA2ZC4uYzBlZDZiZDI5YWMzYTU1ZDMx
MTFlNzUzNjU4MzlkODJiZGY0YzBhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21p
dW0uY3BwCkBAIC0zMDAsMTMgKzMwMCwxNCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
ZHJhd0xheWVycygpCiAgICAgICAgIHJldHVybjsKIAogICAgIHNpemVfdCBjb250ZW50c01lbW9y
eVVzZUJ5dGVzID0gbV9jb250ZW50c1RleHR1cmVBbGxvY2F0b3ItPmN1cnJlbnRNZW1vcnlVc2VC
eXRlcygpOwotICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyLT5zZXRNZW1vcnlMaW1p
dEJ5dGVzKFRleHR1cmVNYW5hZ2VyOjpoaWdoTGltaXRCeXRlcygpIC0gY29udGVudHNNZW1vcnlV
c2VCeXRlcyk7CisgICAgc2l6ZV90IGhhcmRMaW1pdEJ5dGVzID0gc3RkOjptYXg8c2l6ZV90Pigw
LCBUZXh0dXJlTWFuYWdlcjo6aGlnaExpbWl0Qnl0ZXMoKSAtIGNvbnRlbnRzTWVtb3J5VXNlQnl0
ZXMpOworICAgIHNpemVfdCByZWNsYWltTGltaXRCeXRlcyA9IHN0ZDo6bWF4PHNpemVfdD4oMCwg
VGV4dHVyZU1hbmFnZXI6OnJlY2xhaW1MaW1pdEJ5dGVzKHZpZXdwb3J0U2l6ZSgpKSAtIGNvbnRl
bnRzTWVtb3J5VXNlQnl0ZXMpOworICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyLT5z
ZXRIYXJkTWVtb3J5TGltaXRCeXRlcyhoYXJkTGltaXRCeXRlcyk7CisgICAgbV9yZW5kZXJTdXJm
YWNlVGV4dHVyZU1hbmFnZXItPnNldFNvZnRNZW1vcnlMaW1pdEJ5dGVzKHJlY2xhaW1MaW1pdEJ5
dGVzKTsKKwogICAgIGRyYXdMYXllcnNJbnRlcm5hbCgpOwogCi0gICAgaWYgKFRleHR1cmVNYW5h
Z2VyOjpyZWNsYWltTGltaXRCeXRlcygpID4gY29udGVudHNNZW1vcnlVc2VCeXRlcykKLSAgICAg
ICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXItPnJlZHVjZU1lbW9yeVRvTGltaXQoVGV4
dHVyZU1hbmFnZXI6OnJlY2xhaW1MaW1pdEJ5dGVzKCkgLSBjb250ZW50c01lbW9yeVVzZUJ5dGVz
KTsKLSAgICBlbHNlCi0gICAgICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyLT5yZWR1
Y2VNZW1vcnlUb0xpbWl0KDApOworICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyLT5y
ZWR1Y2VNZW1vcnlUb0xpbWl0KHJlY2xhaW1MaW1pdEJ5dGVzKTsKICAgICBtX3JlbmRlclN1cmZh
Y2VUZXh0dXJlTWFuYWdlci0+ZGVsZXRlRXZpY3RlZFRleHR1cmVzKG1fcmVuZGVyU3VyZmFjZVRl
eHR1cmVBbGxvY2F0b3IuZ2V0KCkpOwogCiAgICAgaWYgKHNldHRpbmdzKCkuY29tcG9zaXRlT2Zm
c2NyZWVuKQpAQCAtNjY0LDcgKzY2NSw3IEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpp
bml0aWFsaXplU2hhcmVkT2JqZWN0cygpCiAKICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2Nv
bnRleHQtPmZsdXNoKCkpOwogCi0gICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXIgPSBU
ZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKFRleHR1cmVNYW5hZ2VyOjpoaWdoTGltaXRCeXRlcygpLCBt
X2NhcGFiaWxpdGllcy5tYXhUZXh0dXJlU2l6ZSk7CisgICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVy
ZU1hbmFnZXIgPSBUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKFRleHR1cmVNYW5hZ2VyOjpoaWdoTGlt
aXRCeXRlcygpLCBUZXh0dXJlTWFuYWdlcjo6cmVjbGFpbUxpbWl0Qnl0ZXModmlld3BvcnRTaXpl
KCkpLCBtX2NhcGFiaWxpdGllcy5tYXhUZXh0dXJlU2l6ZSk7CiAgICAgbV9jb250ZW50c1RleHR1
cmVBbGxvY2F0b3IgPSBUcmFja2luZ1RleHR1cmVBbGxvY2F0b3I6OmNyZWF0ZShtX2NvbnRleHQu
Z2V0KCkpOwogICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVBbGxvY2F0b3IgPSBUcmFja2luZ1Rl
eHR1cmVBbGxvY2F0b3I6OmNyZWF0ZShtX2NvbnRleHQuZ2V0KCkpOwogICAgIHJldHVybiB0cnVl
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TWFuYWdlZFRleHR1cmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTWFuYWdlZFRleHR1cmUuY3BwCmluZGV4IDViYmZmNmE0M2U1YjAzOGIzYmYzMzI3ZmJk
M2QxZTUxNDNiN2YxZGUuLjIyNmNiZGE4ZDI3ZjU1YWJkODMwYjYxMDY1MDIzNGM3M2E1MzMwYjMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL01h
bmFnZWRUZXh0dXJlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9NYW5hZ2VkVGV4dHVyZS5jcHAKQEAgLTU0LDYgKzU0LDE2IEBAIGJvb2wgTWFuYWdl
ZFRleHR1cmU6OmlzVmFsaWQoY29uc3QgSW50U2l6ZSYgc2l6ZSwgdW5zaWduZWQgZm9ybWF0KQog
CiBib29sIE1hbmFnZWRUZXh0dXJlOjpyZXNlcnZlKGNvbnN0IEludFNpemUmIHNpemUsIHVuc2ln
bmVkIGZvcm1hdCkKIHsKKyAgICByZXR1cm4gcmVzZXJ2ZVRvTGltaXRBdFByaW9yaXR5KHNpemUs
IGZvcm1hdCwgVGV4dHVyZU1hbmFnZXI6OkhhcmRNZW1vcnlMaW1pdCwgVGV4dHVyZU1hbmFnZXI6
OkhpZ2hUZXh0dXJlUHJpb3JpdHkpOworfQorCitib29sIE1hbmFnZWRUZXh0dXJlOjpyZXNlcnZl
U29mdChjb25zdCBJbnRTaXplJiBzaXplLCB1bnNpZ25lZCBmb3JtYXQpCit7CisgICAgcmV0dXJu
IHJlc2VydmVUb0xpbWl0QXRQcmlvcml0eShzaXplLCBmb3JtYXQsIFRleHR1cmVNYW5hZ2VyOjpT
b2Z0TWVtb3J5TGltaXQsIFRleHR1cmVNYW5hZ2VyOjpMb3dUZXh0dXJlUHJpb3JpdHkpOworfQor
Citib29sIE1hbmFnZWRUZXh0dXJlOjpyZXNlcnZlVG9MaW1pdEF0UHJpb3JpdHkoY29uc3QgSW50
U2l6ZSYgc2l6ZSwgdW5zaWduZWQgZm9ybWF0LCBUZXh0dXJlTWFuYWdlcjo6TWVtb3J5TGltaXQg
bGltaXQsIFRleHR1cmVNYW5hZ2VyOjpUZXh0dXJlUHJpb3JpdHkgcHJpb3JpdHkpCit7CiAgICAg
aWYgKCFtX3Rva2VuKQogICAgICAgICBtX3Rva2VuID0gbV90ZXh0dXJlTWFuYWdlci0+Z2V0VG9r
ZW4oKTsKIApAQCAtNjIsNyArNzIsNyBAQCBib29sIE1hbmFnZWRUZXh0dXJlOjpyZXNlcnZlKGNv
bnN0IEludFNpemUmIHNpemUsIHVuc2lnbmVkIGZvcm1hdCkKICAgICAgICAgbV90ZXh0dXJlTWFu
YWdlci0+cHJvdGVjdFRleHR1cmUobV90b2tlbik7CiAgICAgZWxzZSB7CiAgICAgICAgIG1fdGV4
dHVyZUlkID0gMDsKLSAgICAgICAgcmVzZXJ2ZWQgPSBtX3RleHR1cmVNYW5hZ2VyLT5yZXF1ZXN0
VGV4dHVyZShtX3Rva2VuLCBzaXplLCBmb3JtYXQpOworICAgICAgICByZXNlcnZlZCA9IG1fdGV4
dHVyZU1hbmFnZXItPnJlcXVlc3RUZXh0dXJlKG1fdG9rZW4sIHNpemUsIGZvcm1hdCwgbGltaXQs
IHByaW9yaXR5KTsKICAgICAgICAgaWYgKHJlc2VydmVkKSB7CiAgICAgICAgICAgICBtX3NpemUg
PSBzaXplOwogICAgICAgICAgICAgbV9mb3JtYXQgPSBmb3JtYXQ7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9NYW5hZ2VkVGV4dHVyZS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTWFuYWdlZFRleHR1cmUu
aAppbmRleCA0ZDQzODA5NTk1MzQwZjVkNzMzZDU2NzkyOTFhOTIwNjRjN2IxYWU1Li5kNWNiZDhk
ZWJkMjBmODlkNDQ5MjZkOTdmMjQzMDNkNDA4ZjNiMGY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9NYW5hZ2VkVGV4dHVyZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL01hbmFnZWRUZXh0dXJlLmgK
QEAgLTQ4LDYgKzQ4LDggQEAgcHVibGljOgogCiAgICAgYm9vbCBpc1ZhbGlkKGNvbnN0IEludFNp
emUmLCB1bnNpZ25lZCBmb3JtYXQpOwogICAgIGJvb2wgcmVzZXJ2ZShjb25zdCBJbnRTaXplJiwg
dW5zaWduZWQgZm9ybWF0KTsKKyAgICBib29sIHJlc2VydmVTb2Z0KGNvbnN0IEludFNpemUmLCB1
bnNpZ25lZCBmb3JtYXQpOworICAgIGJvb2wgcmVzZXJ2ZVRvTGltaXRBdFByaW9yaXR5KGNvbnN0
IEludFNpemUmLCB1bnNpZ25lZCBmb3JtYXQsIFRleHR1cmVNYW5hZ2VyOjpNZW1vcnlMaW1pdCwg
VGV4dHVyZU1hbmFnZXI6OlRleHR1cmVQcmlvcml0eSk7CiAgICAgdm9pZCB1bnJlc2VydmUoKTsK
ICAgICBib29sIGlzUmVzZXJ2ZWQoKQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmNwcAppbmRl
eCBjNjAwZDllNjQ5MWQ3ZDFlNzU3MjIyMTRlMzE5ZGE3ZjBjMTg4NGNlLi43YTUyN2M5MDU1ZmM5
OGU4MzFkODEyMTE5MzExMWUwNTcwMDIwMjMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuY3BwCkBA
IC0zNywxMyArMzcsMTUgQEAgc2l6ZV90IFRleHR1cmVNYW5hZ2VyOjpoaWdoTGltaXRCeXRlcygp
CiAgICAgcmV0dXJuIDEyOCAqIDEwMjQgKiAxMDI0OwogfQogCi1zaXplX3QgVGV4dHVyZU1hbmFn
ZXI6OnJlY2xhaW1MaW1pdEJ5dGVzKCkKK3NpemVfdCBUZXh0dXJlTWFuYWdlcjo6cmVjbGFpbUxp
bWl0Qnl0ZXMoY29uc3QgSW50U2l6ZSYgdmlld3BvcnRTaXplKQogeworICAgIC8vIEZJWE1FOiBD
aG9vc2UgYSBsaW1pdCBiYXNlZCBvbiB2aWV3cG9ydCBzaXplLgogICAgIHJldHVybiA2NCAqIDEw
MjQgKiAxMDI0OwogfQogCi1zaXplX3QgVGV4dHVyZU1hbmFnZXI6Omxvd0xpbWl0Qnl0ZXMoKQor
c2l6ZV90IFRleHR1cmVNYW5hZ2VyOjpsb3dMaW1pdEJ5dGVzKGNvbnN0IEludFNpemUmIHZpZXdw
b3J0KQogeworICAgIC8vIEZJWE1FOiBDaG9vc2UgYSBsaW1pdCBiYXNlZCBvbiB2aWV3cG9ydCBz
aXplLgogICAgIHJldHVybiAzICogMTAyNCAqIDEwMjQ7CiB9CiAKQEAgLTYwLDE5ICs2MiwyNSBA
QCBzaXplX3QgVGV4dHVyZU1hbmFnZXI6Om1lbW9yeVVzZUJ5dGVzKGNvbnN0IEludFNpemUmIHNp
emUsIEdDM0RlbnVtIHRleHR1cmVGb3JtYQogfQogCiAKLVRleHR1cmVNYW5hZ2VyOjpUZXh0dXJl
TWFuYWdlcihzaXplX3QgbWVtb3J5TGltaXRCeXRlcywgaW50IG1heFRleHR1cmVTaXplKQotICAg
IDogbV9tZW1vcnlMaW1pdEJ5dGVzKG1lbW9yeUxpbWl0Qnl0ZXMpCitUZXh0dXJlTWFuYWdlcjo6
VGV4dHVyZU1hbmFnZXIoc2l6ZV90IGhhcmRNZW1vcnlMaW1pdEJ5dGVzLCBzaXplX3Qgc29mdE1l
bW9yeUxpbWl0Qnl0ZXMsIGludCBtYXhUZXh0dXJlU2l6ZSkKKyAgICA6IG1faGFyZE1lbW9yeUxp
bWl0Qnl0ZXMoaGFyZE1lbW9yeUxpbWl0Qnl0ZXMpCisgICAgLCBtX3NvZnRNZW1vcnlMaW1pdEJ5
dGVzKHNvZnRNZW1vcnlMaW1pdEJ5dGVzKQogICAgICwgbV9tZW1vcnlVc2VCeXRlcygwKQogICAg
ICwgbV9tYXhUZXh0dXJlU2l6ZShtYXhUZXh0dXJlU2l6ZSkKICAgICAsIG1fbmV4dFRva2VuKDEp
CiB7CiB9CiAKLXZvaWQgVGV4dHVyZU1hbmFnZXI6OnNldE1lbW9yeUxpbWl0Qnl0ZXMoc2l6ZV90
IG1lbW9yeUxpbWl0Qnl0ZXMpCit2b2lkIFRleHR1cmVNYW5hZ2VyOjpzZXRIYXJkTWVtb3J5TGlt
aXRCeXRlcyhzaXplX3QgbWVtb3J5TGltaXRCeXRlcykKIHsKICAgICByZWR1Y2VNZW1vcnlUb0xp
bWl0KG1lbW9yeUxpbWl0Qnl0ZXMpOwogICAgIEFTU0VSVChjdXJyZW50TWVtb3J5VXNlQnl0ZXMo
KSA8IG1lbW9yeUxpbWl0Qnl0ZXMpOwotICAgIG1fbWVtb3J5TGltaXRCeXRlcyA9IG1lbW9yeUxp
bWl0Qnl0ZXM7CisgICAgbV9oYXJkTWVtb3J5TGltaXRCeXRlcyA9IG1lbW9yeUxpbWl0Qnl0ZXM7
Cit9CisKK3ZvaWQgVGV4dHVyZU1hbmFnZXI6OnNldFNvZnRNZW1vcnlMaW1pdEJ5dGVzKHNpemVf
dCBtZW1vcnlMaW1pdEJ5dGVzKQoreworICAgIG1fc29mdE1lbW9yeUxpbWl0Qnl0ZXMgPSBtZW1v
cnlMaW1pdEJ5dGVzOwogfQogCiBUZXh0dXJlVG9rZW4gVGV4dHVyZU1hbmFnZXI6OmdldFRva2Vu
KCkKQEAgLTE0OCw5ICsxNTYsMTQgQEAgdm9pZCBUZXh0dXJlTWFuYWdlcjo6YWRkVGV4dHVyZShU
ZXh0dXJlVG9rZW4gdG9rZW4sIFRleHR1cmVJbmZvIGluZm8pCiB7CiAgICAgQVNTRVJUKCFtX3Rl
eHR1cmVMUlVTZXQuY29udGFpbnModG9rZW4pKTsKICAgICBBU1NFUlQoIW1fdGV4dHVyZXMuY29u
dGFpbnModG9rZW4pKTsKKyAgICBBU1NFUlQoaW5mby5wcmlvcml0eSA9PSBIaWdoVGV4dHVyZVBy
aW9yaXR5IHx8IGluZm8ucHJpb3JpdHkgPT0gTG93VGV4dHVyZVByaW9yaXR5KTsKKwogICAgIG1f
bWVtb3J5VXNlQnl0ZXMgKz0gbWVtb3J5VXNlQnl0ZXMoaW5mby5zaXplLCBpbmZvLmZvcm1hdCk7
CiAgICAgbV90ZXh0dXJlcy5zZXQodG9rZW4sIGluZm8pOwotICAgIG1fdGV4dHVyZUxSVVNldC5h
ZGQodG9rZW4pOworICAgIGlmIChpbmZvLnByaW9yaXR5ID09IEhpZ2hUZXh0dXJlUHJpb3JpdHkp
CisgICAgICAgIG1fdGV4dHVyZUxSVVNldC5hZGQodG9rZW4pOworICAgIGVsc2UKKyAgICAgICAg
bV90ZXh0dXJlTFJVU2V0Lmluc2VydEJlZm9yZShtX3RleHR1cmVMUlVTZXQuYmVnaW4oKSwgdG9r
ZW4pOwogfQogCiB2b2lkIFRleHR1cmVNYW5hZ2VyOjpkZWxldGVFdmljdGVkVGV4dHVyZXMoVGV4
dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yKQpAQCAtMjA4LDExICsyMjEsMTYgQEAgdW5zaWduZWQg
VGV4dHVyZU1hbmFnZXI6OmFsbG9jYXRlVGV4dHVyZShUZXh0dXJlQWxsb2NhdG9yKiBhbGxvY2F0
b3IsIFRleHR1cmVUb2sKICAgICByZXR1cm4gdGV4dHVyZUlkOwogfQogCi1ib29sIFRleHR1cmVN
YW5hZ2VyOjpyZXF1ZXN0VGV4dHVyZShUZXh0dXJlVG9rZW4gdG9rZW4sIEludFNpemUgc2l6ZSwg
dW5zaWduZWQgZm9ybWF0KQorYm9vbCBUZXh0dXJlTWFuYWdlcjo6cmVxdWVzdFRleHR1cmUoVGV4
dHVyZVRva2VuIHRva2VuLCBJbnRTaXplIHNpemUsIHVuc2lnbmVkIGZvcm1hdCwgTWVtb3J5TGlt
aXQgbWVtb3J5TGltaXQsIFRleHR1cmVQcmlvcml0eSBwcmlvcml0eSkKIHsKICAgICBpZiAoc2l6
ZS53aWR0aCgpID4gbV9tYXhUZXh0dXJlU2l6ZSB8fCBzaXplLmhlaWdodCgpID4gbV9tYXhUZXh0
dXJlU2l6ZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgQVNTRVJUKG1lbW9yeUxpbWl0
ID09IEhhcmRNZW1vcnlMaW1pdCB8fCBtZW1vcnlMaW1pdCA9PSBTb2Z0TWVtb3J5TGltaXQpOwor
ICAgIEFTU0VSVChwcmlvcml0eSA9PSBIaWdoVGV4dHVyZVByaW9yaXR5IHx8IHByaW9yaXR5ID09
IExvd1RleHR1cmVQcmlvcml0eSk7CisKKyAgICBzaXplX3QgbWVtb3J5TGltaXRCeXRlcyA9ICht
ZW1vcnlMaW1pdCA9PSBIYXJkTWVtb3J5TGltaXQpID8gbV9oYXJkTWVtb3J5TGltaXRCeXRlczpt
X3NvZnRNZW1vcnlMaW1pdEJ5dGVzOworCiAgICAgVGV4dHVyZU1hcDo6aXRlcmF0b3IgaXQgPSBt
X3RleHR1cmVzLmZpbmQodG9rZW4pOwogICAgIGlmIChpdCAhPSBtX3RleHR1cmVzLmVuZCgpKSB7
CiAgICAgICAgIEFTU0VSVChpdC0+c2Vjb25kLnNpemUgIT0gc2l6ZSB8fCBpdC0+c2Vjb25kLmZv
cm1hdCAhPSBmb3JtYXQpOwpAQCAtMjIwLDExICsyMzgsMTEgQEAgYm9vbCBUZXh0dXJlTWFuYWdl
cjo6cmVxdWVzdFRleHR1cmUoVGV4dHVyZVRva2VuIHRva2VuLCBJbnRTaXplIHNpemUsIHVuc2ln
bmVkIGYKICAgICB9CiAKICAgICBzaXplX3QgbWVtb3J5UmVxdWlyZWRCeXRlcyA9IG1lbW9yeVVz
ZUJ5dGVzKHNpemUsIGZvcm1hdCk7Ci0gICAgaWYgKG1lbW9yeVJlcXVpcmVkQnl0ZXMgPiBtX21l
bW9yeUxpbWl0Qnl0ZXMpCisgICAgaWYgKG1lbW9yeVJlcXVpcmVkQnl0ZXMgPiBtZW1vcnlMaW1p
dEJ5dGVzKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZWR1Y2VNZW1vcnlUb0xpbWl0
KG1fbWVtb3J5TGltaXRCeXRlcyAtIG1lbW9yeVJlcXVpcmVkQnl0ZXMpOwotICAgIGlmIChtX21l
bW9yeVVzZUJ5dGVzICsgbWVtb3J5UmVxdWlyZWRCeXRlcyA+IG1fbWVtb3J5TGltaXRCeXRlcykK
KyAgICByZWR1Y2VNZW1vcnlUb0xpbWl0KG1lbW9yeUxpbWl0Qnl0ZXMgLSBtZW1vcnlSZXF1aXJl
ZEJ5dGVzKTsKKyAgICBpZiAobV9tZW1vcnlVc2VCeXRlcyArIG1lbW9yeVJlcXVpcmVkQnl0ZXMg
PiBtX2hhcmRNZW1vcnlMaW1pdEJ5dGVzKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBU
ZXh0dXJlSW5mbyBpbmZvOwpAQCAtMjMyLDYgKzI1MCw3IEBAIGJvb2wgVGV4dHVyZU1hbmFnZXI6
OnJlcXVlc3RUZXh0dXJlKFRleHR1cmVUb2tlbiB0b2tlbiwgSW50U2l6ZSBzaXplLCB1bnNpZ25l
ZCBmCiAgICAgaW5mby5mb3JtYXQgPSBmb3JtYXQ7CiAgICAgaW5mby50ZXh0dXJlSWQgPSAwOwog
ICAgIGluZm8uaXNQcm90ZWN0ZWQgPSB0cnVlOworICAgIGluZm8ucHJpb3JpdHkgPSBwcmlvcml0
eTsKICNpZm5kZWYgTkRFQlVHCiAgICAgaW5mby5hbGxvY2F0b3IgPSAwOwogI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJl
TWFuYWdlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4
dHVyZU1hbmFnZXIuaAppbmRleCBmMzI3YjRjZmNkMWIxMGRhZTdkYWQ2MzQ2MDRmNjczOWI1MjBm
MjA4Li5hNzE5ZGI2YjMxY2EyZmQ3MzIzMGViMzlhZGNkOTliYzIxZDZmYjJmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1
cmVNYW5hZ2VyLmgKQEAgLTQ5LDI3ICs0OSwzMCBAQCBwcm90ZWN0ZWQ6CiBjbGFzcyBUZXh0dXJl
TWFuYWdlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVGV4dHVyZU1hbmFnZXIpOwogcHVi
bGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPFRleHR1cmVNYW5hZ2VyPiBjcmVhdGUoc2l6ZV90
IG1lbW9yeUxpbWl0Qnl0ZXMsIGludCBtYXhUZXh0dXJlU2l6ZSkKKyAgICBzdGF0aWMgUGFzc093
blB0cjxUZXh0dXJlTWFuYWdlcj4gY3JlYXRlKHNpemVfdCBoYXJkTWVtb3J5TGltaXRCeXRlcywg
c2l6ZV90IHNvZnRNZW1vcnlMaW1pdEJ5dGVzLCBpbnQgbWF4VGV4dHVyZVNpemUpCiAgICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFRleHR1cmVNYW5hZ2VyKG1lbW9yeUxpbWl0Qnl0
ZXMsIG1heFRleHR1cmVTaXplKSk7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgVGV4dHVy
ZU1hbmFnZXIoaGFyZE1lbW9yeUxpbWl0Qnl0ZXMsIHNvZnRNZW1vcnlMaW1pdEJ5dGVzLCBtYXhU
ZXh0dXJlU2l6ZSkpOwogICAgIH0KIAogICAgIC8vIEFic29sdXRlIG1heGltdW0gbGltaXQgZm9y
IHRleHR1cmUgYWxsb2NhdGlvbnMgZm9yIHRoaXMgaW5zdGFuY2UuCiAgICAgc3RhdGljIHNpemVf
dCBoaWdoTGltaXRCeXRlcygpOwotICAgIC8vIFByZWZlcnJlZCB0ZXh0dXJlIHNpemUgbGltaXQu
IENhbiBiZSBleGNlZWRlZCBpZiBuZWVkZWQuCi0gICAgc3RhdGljIHNpemVfdCByZWNsYWltTGlt
aXRCeXRlcygpOworICAgIC8vIFByZWZlcnJlZCB0ZXh0dXJlIHNpemUgbGltaXQgZ2l2ZW4gdGhl
IHZpZXdwb3J0IHNpemUuCisgICAgc3RhdGljIHNpemVfdCByZWNsYWltTGltaXRCeXRlcyhjb25z
dCBJbnRTaXplJiB2aWV3cG9ydFNpemUpOwogICAgIC8vIFRoZSBtYXhpbXVtIHRleHR1cmUgbWVt
b3J5IHVzYWdlIHdoZW4gYXNrZWQgdG8gcmVsZWFzZSB0ZXh0dXJlcy4KLSAgICBzdGF0aWMgc2l6
ZV90IGxvd0xpbWl0Qnl0ZXMoKTsKKyAgICBzdGF0aWMgc2l6ZV90IGxvd0xpbWl0Qnl0ZXMoY29u
c3QgSW50U2l6ZSYgdmlld3BvcnQpOwogCiAgICAgc3RhdGljIHNpemVfdCBtZW1vcnlVc2VCeXRl
cyhjb25zdCBJbnRTaXplJiwgR0MzRGVudW0gZm9ybWF0KTsKIAotICAgIHZvaWQgc2V0TWVtb3J5
TGltaXRCeXRlcyhzaXplX3QpOworICAgIHZvaWQgc2V0SGFyZE1lbW9yeUxpbWl0Qnl0ZXMoc2l6
ZV90KTsKKyAgICB2b2lkIHNldFNvZnRNZW1vcnlMaW1pdEJ5dGVzKHNpemVfdCk7CiAKICAgICBU
ZXh0dXJlVG9rZW4gZ2V0VG9rZW4oKTsKICAgICB2b2lkIHJlbGVhc2VUb2tlbihUZXh0dXJlVG9r
ZW4pOwogICAgIGJvb2wgaGFzVGV4dHVyZShUZXh0dXJlVG9rZW4pOwogCi0gICAgYm9vbCByZXF1
ZXN0VGV4dHVyZShUZXh0dXJlVG9rZW4sIEludFNpemUsIEdDM0RlbnVtIHRleHR1cmVGb3JtYXQp
OworICAgIGVudW0gTWVtb3J5TGltaXQgeyBIYXJkTWVtb3J5TGltaXQsIFNvZnRNZW1vcnlMaW1p
dCB9OworICAgIGVudW0gVGV4dHVyZVByaW9yaXR5IHsgSGlnaFRleHR1cmVQcmlvcml0eSwgTG93
VGV4dHVyZVByaW9yaXR5IH07CisgICAgYm9vbCByZXF1ZXN0VGV4dHVyZShUZXh0dXJlVG9rZW4s
IEludFNpemUsIEdDM0RlbnVtIHRleHR1cmVGb3JtYXQsIE1lbW9yeUxpbWl0LCBUZXh0dXJlUHJp
b3JpdHkpOwogCiAgICAgdm9pZCBwcm90ZWN0VGV4dHVyZShUZXh0dXJlVG9rZW4pOwogICAgIHZv
aWQgdW5wcm90ZWN0VGV4dHVyZShUZXh0dXJlVG9rZW4pOwpAQCAtODUsMTMgKzg4LDE0IEBAIHB1
YmxpYzoKICAgICBzaXplX3QgY3VycmVudE1lbW9yeVVzZUJ5dGVzKCkgY29uc3QgeyByZXR1cm4g
bV9tZW1vcnlVc2VCeXRlczsgfQogCiBwcml2YXRlOgotICAgIFRleHR1cmVNYW5hZ2VyKHNpemVf
dCBtZW1vcnlMaW1pdEJ5dGVzLCBpbnQgbWF4VGV4dHVyZVNpemUpOworICAgIFRleHR1cmVNYW5h
Z2VyKHNpemVfdCBoYXJkTWVtb3J5TGltaXRCeXRlcywgc2l6ZV90IHNvZnRNZW1vcnlMaW1pdEJ5
dGVzLCBpbnQgbWF4VGV4dHVyZVNpemUpOwogCiAgICAgc3RydWN0IFRleHR1cmVJbmZvIHsKICAg
ICAgICAgSW50U2l6ZSBzaXplOwogICAgICAgICBHQzNEZW51bSBmb3JtYXQ7CiAgICAgICAgIHVu
c2lnbmVkIHRleHR1cmVJZDsKICAgICAgICAgYm9vbCBpc1Byb3RlY3RlZDsKKyAgICAgICAgVGV4
dHVyZVByaW9yaXR5IHByaW9yaXR5OwogI2lmbmRlZiBOREVCVUcKICAgICAgICAgVGV4dHVyZUFs
bG9jYXRvciogYWxsb2NhdG9yOwogI2VuZGlmCkBAIC0xMDQsNyArMTA4LDggQEAgcHJpdmF0ZToK
ICAgICBUZXh0dXJlTWFwIG1fdGV4dHVyZXM7CiAgICAgTGlzdEhhc2hTZXQ8VGV4dHVyZVRva2Vu
PiBtX3RleHR1cmVMUlVTZXQ7CiAKLSAgICBzaXplX3QgbV9tZW1vcnlMaW1pdEJ5dGVzOworICAg
IHNpemVfdCBtX2hhcmRNZW1vcnlMaW1pdEJ5dGVzOworICAgIHNpemVfdCBtX3NvZnRNZW1vcnlM
aW1pdEJ5dGVzOwogICAgIHNpemVfdCBtX21lbW9yeVVzZUJ5dGVzOwogICAgIGludCBtX21heFRl
eHR1cmVTaXplOwogICAgIFRleHR1cmVUb2tlbiBtX25leHRUb2tlbjsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1
bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExh
eWVyQ2hyb21pdW0uY3BwCmluZGV4IGZmYWQyZjViMTc1Yzk2NjVkNjY1NzViYWZjYzM5YmZjZWUw
ZTFlNmEuLmZhYjQyYTc0M2IzOGUwYzQ1MzQ5ZjFlOWFlYTE1OWY2YWMwN2VlYmYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJD
aHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vVGlsZWRMYXllckNocm9taXVtLmNwcApAQCAtNDUsNiArNDUsOSBAQCBzdGF0aWMgaW50IG1h
eFVudGlsZWRTaXplID0gNTEyOwogLy8gV2hlbiB0aWxpbmcgaXMgZW5hYmxlZCwgdXNlIHRpbGVz
IG9mIHRoaXMgZGltZW5zaW9uIHNxdWFyZWQuCiBzdGF0aWMgaW50IGRlZmF1bHRUaWxlU2l6ZSA9
IDI1NjsKIAorLy8gRklYTUU6IFByb2JhYmx5IHdhbnQgdG8gc2V0IHRoaXMgYmFzZWQgb24gdGhl
IHZpZXdwb3J0Lgorc3RhdGljIGludCBpZGxlUGFpbnRQYWRkaW5nV2lkdGggPSBkZWZhdWx0VGls
ZVNpemU7CisKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAg
LTY5LDYgKzcyLDcgQEAgVGlsZWRMYXllckNocm9taXVtOjpUaWxlZExheWVyQ2hyb21pdW0oQ0NM
YXllckRlbGVnYXRlKiBkZWxlZ2F0ZSkKICAgICA6IExheWVyQ2hyb21pdW0oZGVsZWdhdGUpCiAg
ICAgLCBtX3RleHR1cmVGb3JtYXQoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSkKICAg
ICAsIG1fc2tpcHNEcmF3KGZhbHNlKQorICAgICwgbV9za2lwc0lkbGVQYWludChmYWxzZSkKICAg
ICAsIG1fdGV4dHVyZU9yaWVudGF0aW9uKExheWVyVGV4dHVyZVVwZGF0ZXI6OkludmFsaWRPcmll
bnRhdGlvbikKICAgICAsIG1fc2FtcGxlZFRleGVsRm9ybWF0KExheWVyVGV4dHVyZVVwZGF0ZXI6
OlNhbXBsZWRUZXhlbEZvcm1hdEludmFsaWQpCiAgICAgLCBtX3RpbGluZ09wdGlvbihBdXRvVGls
ZSkKQEAgLTkwLDcgKzk0LDcgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OmNsZWFudXBSZXNv
dXJjZXMoKQogCiAgICAgbV90aWxlci5jbGVhcigpOwogICAgIG1fcGFpbnRSZWN0ID0gSW50UmVj
dCgpOwotICAgIG1fcmVxdWVzdGVkVXBkYXRlUmVjdCA9IEludFJlY3QoKTsKKyAgICBtX3JlcXVl
c3RlZFVwZGF0ZVRpbGVzUmVjdCA9IEludFJlY3QoKTsKIH0KIAogdm9pZCBUaWxlZExheWVyQ2hy
b21pdW06OnVwZGF0ZVRpbGVTaXplQW5kVGlsaW5nT3B0aW9uKCkKQEAgLTE3MiwxMSArMTc2LDEz
IEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpjcmVhdGVUaWxlcihDQ0xheWVyVGlsaW5nRGF0
YTo6Qm9yZGVyVGV4ZWxPcHRpb24gYm9yZGVyCiB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6dXBk
YXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCosIENDVGV4dHVyZVVwZGF0
ZXImIHVwZGF0ZXIpCiB7CiAgICAgLy8gUGFpbnRpbmcgY291bGQgY2F1c2UgY29tcG9zaXRpbmcg
dG8gZ2V0IHR1cm5lZCBvZmYsIHdoaWNoIG1heSBjYXVzZSB0aGUgdGlsZXIgdG8gYmVjb21lIGlu
dmFsaWRhdGVkIG1pZC11cGRhdGUuCi0gICAgaWYgKG1fc2tpcHNEcmF3IHx8IG1fcmVxdWVzdGVk
VXBkYXRlUmVjdC5pc0VtcHR5KCkgfHwgIW1fdGlsZXItPm51bVRpbGVzKCkpCisgICAgaWYgKG1f
c2tpcHNEcmF3IHx8IG1fcmVxdWVzdGVkVXBkYXRlVGlsZXNSZWN0LmlzRW1wdHkoKSB8fCAhbV90
aWxlci0+bnVtVGlsZXMoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaW50IGxlZnQsIHRvcCwg
cmlnaHQsIGJvdHRvbTsKLSAgICBtX3RpbGVyLT5jb250ZW50UmVjdFRvVGlsZUluZGljZXMobV9y
ZXF1ZXN0ZWRVcGRhdGVSZWN0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworICAgIGludCBs
ZWZ0ID0gbV9yZXF1ZXN0ZWRVcGRhdGVUaWxlc1JlY3QueCgpOworICAgIGludCB0b3AgPSBtX3Jl
cXVlc3RlZFVwZGF0ZVRpbGVzUmVjdC55KCk7CisgICAgaW50IHJpZ2h0ID0gbV9yZXF1ZXN0ZWRV
cGRhdGVUaWxlc1JlY3QubWF4WCgpLTE7CisgICAgaW50IGJvdHRvbSA9IG1fcmVxdWVzdGVkVXBk
YXRlVGlsZXNSZWN0Lm1heFkoKS0xOwogICAgIGZvciAoaW50IGogPSB0b3A7IGogPD0gYm90dG9t
OyArK2opIHsKICAgICAgICAgZm9yIChpbnQgaSA9IGxlZnQ7IGkgPD0gcmlnaHQ7ICsraSkgewog
ICAgICAgICAgICAgVXBkYXRhYmxlVGlsZSogdGlsZSA9IHRpbGVBdChpLCBqKTsKQEAgLTMzNCwz
MiArMzQwLDExIEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpwcm90ZWN0VGlsZVRleHR1cmVz
KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQogICAgIH0KIH0KIAotdm9pZCBUaWxlZExheWVy
Q2hyb21pdW06OnByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKK3Zv
aWQgVGlsZWRMYXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGVUaWxlcyhib29sIGlkbGUsIGlu
dCBsZWZ0LCBpbnQgdG9wLCBpbnQgcmlnaHQsIGludCBib3R0b20pCiB7Ci0gICAgaWYgKCFtX3Rp
bGVyKQotICAgICAgICBjcmVhdGVUaWxlcihpc05vbkNvbXBvc2l0ZWRDb250ZW50KCkgPyBDQ0xh
eWVyVGlsaW5nRGF0YTo6Tm9Cb3JkZXJUZXhlbHMgOiBDQ0xheWVyVGlsaW5nRGF0YTo6SGFzQm9y
ZGVyVGV4ZWxzKTsKLQotICAgIEFTU0VSVChtX3RpbGVyKTsKLQotICAgIG1fc2tpcHNEcmF3ID0g
ZmFsc2U7Ci0KLSAgICBpZiAoY29udGVudFJlY3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fcmVx
dWVzdGVkVXBkYXRlUmVjdCA9IEludFJlY3QoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIG1fdGlsZXItPmdyb3dMYXllclRvQ29udGFpbihjb250ZW50UmVjdCk7Ci0KLSAgICBpZiAo
IW1fdGlsZXItPm51bVRpbGVzKCkpIHsKLSAgICAgICAgbV9yZXF1ZXN0ZWRVcGRhdGVSZWN0ID0g
SW50UmVjdCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgLy8gQ3JlYXRlIHRpbGVz
IGFzIG5lZWRlZCwgZXhwYW5kaW5nIGEgZGlydHkgcmVjdCB0byBjb250YWluIGFsbAogICAgIC8v
IHRoZSBkaXJ0eSByZWdpb25zIGN1cnJlbnRseSBiZWluZyBkcmF3bi4KICAgICBJbnRSZWN0IGRp
cnR5TGF5ZXJSZWN0OwotICAgIGludCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b207Ci0gICAgbV90
aWxlci0+Y29udGVudFJlY3RUb1RpbGVJbmRpY2VzKGNvbnRlbnRSZWN0LCBsZWZ0LCB0b3AsIHJp
Z2h0LCBib3R0b20pOwogICAgIGZvciAoaW50IGogPSB0b3A7IGogPD0gYm90dG9tOyArK2opIHsK
ICAgICAgICAgZm9yIChpbnQgaSA9IGxlZnQ7IGkgPD0gcmlnaHQ7ICsraSkgewogICAgICAgICAg
ICAgVXBkYXRhYmxlVGlsZSogdGlsZSA9IHRpbGVBdChpLCBqKTsKQEAgLTM2OSwyNSArMzU0LDMy
IEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVj
dCYgY29udGVudFJlY3QpCiAgICAgICAgICAgICBpZiAoIXRpbGUtPnRleHR1cmUoKS0+aXNWYWxp
ZChtX3RpbGVyLT50aWxlU2l6ZSgpLCBtX3RleHR1cmVGb3JtYXQpKQogICAgICAgICAgICAgICAg
IHRpbGUtPm1fZGlydHlMYXllclJlY3QgPSBtX3RpbGVyLT50aWxlTGF5ZXJSZWN0KHRpbGUpOwog
Ci0gICAgICAgICAgICBpZiAoIXRpbGUtPnRleHR1cmUoKS0+cmVzZXJ2ZShtX3RpbGVyLT50aWxl
U2l6ZSgpLCBtX3RleHR1cmVGb3JtYXQpKSB7CisgICAgICAgICAgICBpZiAoIWlkbGUgJiYgIXRp
bGUtPnRleHR1cmUoKS0+cmVzZXJ2ZShtX3RpbGVyLT50aWxlU2l6ZSgpLCBtX3RleHR1cmVGb3Jt
YXQpKSB7CiAgICAgICAgICAgICAgICAgbV9za2lwc0RyYXcgPSB0cnVlOworICAgICAgICAgICAg
ICAgIG1fc2tpcHNJZGxlUGFpbnQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGNsZWFudXBSZXNv
dXJjZXMoKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKKyAgICAg
ICAgICAgIGlmIChpZGxlICYmICF0aWxlLT50ZXh0dXJlKCktPnJlc2VydmVTb2Z0KG1fdGlsZXIt
PnRpbGVTaXplKCksIG1fdGV4dHVyZUZvcm1hdCkpIHsKKyAgICAgICAgICAgICAgICBtX3NraXBz
SWRsZVBhaW50ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9
CisKICAgICAgICAgICAgIGRpcnR5TGF5ZXJSZWN0LnVuaXRlKHRpbGUtPm1fZGlydHlMYXllclJl
Y3QpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgLy8gRHVlIHRvIGJvcmRlcnMsIHdoZW4gdGhl
IHBhaW50IHJlY3QgaXMgZXh0ZW5kZWQgdG8gdGlsZSBib3VuZGFyaWVzLCBpdAotICAgIC8vIG1h
eSBlbmQgdXAgb3ZlcmxhcHBpbmcgbW9yZSB0aWxlcyB0aGFuIHRoZSBvcmlnaW5hbCBjb250ZW50
IHJlY3QuIFJlY29yZAotICAgIC8vIHRoYXQgb3JpZ2luYWwgcmVjdCBzbyB3ZSBkb24ndCB1cGxv
YWQgbW9yZSB0aWxlcyB0aGFuIG5lY2Vzc2FyeS4KLSAgICBtX3JlcXVlc3RlZFVwZGF0ZVJlY3Qg
PSBjb250ZW50UmVjdDsKLQogICAgIG1fcGFpbnRSZWN0ID0gbV90aWxlci0+bGF5ZXJSZWN0VG9D
b250ZW50UmVjdChkaXJ0eUxheWVyUmVjdCk7CiAgICAgaWYgKGRpcnR5TGF5ZXJSZWN0LmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgLy8gRHVlIHRvIGJvcmRlcnMsIHdoZW4gdGhl
IHBhaW50IHJlY3QgaXMgZXh0ZW5kZWQgdG8gdGlsZSBib3VuZGFyaWVzLCBpdAorICAgIC8vIG1h
eSBlbmQgdXAgb3ZlcmxhcHBpbmcgbW9yZSB0aWxlcyB0aGFuIHRoZSBvcmlnaW5hbCBjb250ZW50
IHJlY3QuIFJlY29yZAorICAgIC8vIHRoZSBvcmlnaW5hbCB0aWxlcyBzbyB3ZSBkb24ndCB1cGxv
YWQgbW9yZSB0aWxlcyB0aGFuIG5lY2Vzc2FyeS4KKyAgICBpZiAoIW1fcGFpbnRSZWN0LmlzRW1w
dHkoKSkKKyAgICAgICAgbV9yZXF1ZXN0ZWRVcGRhdGVUaWxlc1JlY3QgPSBJbnRSZWN0KGxlZnQs
IHRvcCwgcmlnaHQtbGVmdCsxLCBib3R0b20tdG9wKzEpOworCiAgICAgLy8gQ2FsbGluZyBwcmVw
YXJlVG9VcGRhdGUoKSBjYWxscyBpbnRvIFdlYktpdCB0byBwYWludCwgd2hpY2ggbWF5IGhhdmUg
dGhlIHNpZGUKICAgICAvLyBlZmZlY3Qgb2YgZGlzYWJsaW5nIGNvbXBvc2l0aW5nLCB3aGljaCBj
YXVzZXMgb3VyIHJlZmVyZW5jZSB0byB0aGUgdGV4dHVyZSB1cGRhdGVyIHRvIGJlIGRlbGV0ZWQu
CiAgICAgLy8gSG93ZXZlciwgd2UgY2FuJ3QgZnJlZSB0aGUgbWVtb3J5IGJhY2tpbmcgdGhlIEdy
YXBoaWNzQ29udGV4dCB1bnRpbCB0aGUgcGFpbnQgZmluaXNoZXMsCkBAIC0zOTYsNSArMzg4LDEw
MiBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJl
Y3QmIGNvbnRlbnRSZWN0KQogICAgIHRleHR1cmVVcGRhdGVyKCktPnByZXBhcmVUb1VwZGF0ZSht
X3BhaW50UmVjdCwgbV90aWxlci0+dGlsZVNpemUoKSwgbV90aWxlci0+aGFzQm9yZGVyVGV4ZWxz
KCksIGNvbnRlbnRzU2NhbGUoKSk7CiB9CiAKKwordm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnBy
ZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKK3sKKyAgICBBU1NFUlQo
bV90aWxlcik7CisKKyAgICBtX3NraXBzRHJhdyA9IGZhbHNlOworICAgIG1fc2tpcHNJZGxlUGFp
bnQgPSBmYWxzZTsKKworICAgIG1fcmVxdWVzdGVkVXBkYXRlVGlsZXNSZWN0ID0gSW50UmVjdCgp
OworICAgIG1fcGFpbnRSZWN0ID0gSW50UmVjdCgpOworCisgICAgaWYgKGNvbnRlbnRSZWN0Lmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV90aWxlci0+Z3Jvd0xheWVyVG9Db250
YWluKGNvbnRlbnRSZWN0KTsKKworICAgIGlmICghbV90aWxlci0+bnVtVGlsZXMoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaW50IGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbTsKKyAgICBtX3Rp
bGVyLT5jb250ZW50UmVjdFRvVGlsZUluZGljZXMoY29udGVudFJlY3QsIGxlZnQsIHRvcCwgcmln
aHQsIGJvdHRvbSk7CisKKyAgICBwcmVwYXJlVG9VcGRhdGVUaWxlcyhmYWxzZSwgbGVmdCwgdG9w
LCByaWdodCwgYm90dG9tKTsKK30KKwordm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVU
b1VwZGF0ZUlkbGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCit7CisgICAgQVNTRVJUKG1f
dGlsZXIpOworCisgICAgLy8gQWJvcnQgaWYgd2UgaGF2ZSBhbHJlYWR5IHByZXBhcmVkIGEgcGFp
bnQgb3IgcnVuIG91dCBvZiBtZW1vcnkuCisgICAgaWYgKG1fc2tpcHNJZGxlUGFpbnQgfHwgIW1f
cGFpbnRSZWN0LmlzRW1wdHkoKSB8fCAhbV9yZXF1ZXN0ZWRVcGRhdGVUaWxlc1JlY3QuaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBJbnRSZWN0IGlkbGVQYWludENvbnRlbnRSZWN0
ID0gY29udGVudFJlY3Q7CisgICAgaWRsZVBhaW50Q29udGVudFJlY3QuaW5mbGF0ZShpZGxlUGFp
bnRQYWRkaW5nV2lkdGgpOyAKKyAgICBpZGxlUGFpbnRDb250ZW50UmVjdC5pbnRlcnNlY3QoSW50
UmVjdChJbnRQb2ludDo6emVybygpLCBjb250ZW50Qm91bmRzKCkpKTsKKworICAgIG1fdGlsZXIt
Pmdyb3dMYXllclRvQ29udGFpbihpZGxlUGFpbnRDb250ZW50UmVjdCk7CisKKyAgICBpZiAoIW1f
dGlsZXItPm51bVRpbGVzKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEV4cGFuZCBvdXR3
YXJkcyB1bnRpbCB3ZSBmaW5kIGEgZGlydHkgcm93IG9yIGNvbHVtbiB0byB1cGRhdGUuCisgICAg
aW50IGwxLCB0MSwgcjEsIGIxLCBsMiwgdDIsIHIyLCBiMjsKKyAgICBtX3RpbGVyLT5jb250ZW50
UmVjdFRvVGlsZUluZGljZXMoY29udGVudFJlY3QsIGwxLCB0MSwgcjEsIGIxKTsKKyAgICBtX3Rp
bGVyLT5jb250ZW50UmVjdFRvVGlsZUluZGljZXMoaWRsZVBhaW50Q29udGVudFJlY3QsIGwyLCB0
MiwgcjIsIGIyKTsKKyAgICB3aGlsZSAoKGwxID4gbDIgfHwgdDEgPiB0MiB8fCByMSA8IHIyIHx8
IGIxIDwgYjIpICYmICFtX3NraXBzSWRsZVBhaW50KSB7CisgICAgICAgIGlmIChiMSA8IGIyKSB7
CisgICAgICAgICAgICArK2IxOworICAgICAgICAgICAgcHJlcGFyZVRvVXBkYXRlVGlsZXModHJ1
ZSwgbDEsIGIxLCByMSwgYjEpOworICAgICAgICAgICAgaWYgKCFtX3BhaW50UmVjdC5pc0VtcHR5
KCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHQxID4g
dDIpIHsKKyAgICAgICAgICAgIC0tdDE7CisgICAgICAgICAgICBwcmVwYXJlVG9VcGRhdGVUaWxl
cyh0cnVlLCBsMSwgdDEsIHIxLCB0MSk7CisgICAgICAgICAgICBpZiAoIW1fcGFpbnRSZWN0Lmlz
RW1wdHkoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAo
bDEgPiBsMikgeworICAgICAgICAgICAgLS1sMTsKKyAgICAgICAgICAgIHByZXBhcmVUb1VwZGF0
ZVRpbGVzKHRydWUsIGwxLCB0MSwgbDEsIGIxKTsKKyAgICAgICAgICAgIGlmICghbV9wYWludFJl
Y3QuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGlmIChyMSA8IHIyKSB7CisgICAgICAgICAgICArK3IxOworICAgICAgICAgICAgcHJlcGFyZVRv
VXBkYXRlVGlsZXModHJ1ZSwgcjEsIHQxLCByMSwgYjEpOworICAgICAgICAgICAgaWYgKCFtX3Bh
aW50UmVjdC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICB9Cit9CisKK2Jvb2wgVGlsZWRMYXllckNocm9taXVtOjpuZWVkc0lkbGVQYWludChjb25zdCBJ
bnRSZWN0JiBjb250ZW50UmVjdCkKK3sKKyAgICBpZiAobV9za2lwc0RyYXcgfHwgbV9za2lwc0lk
bGVQYWludCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgSW50UmVjdCBpZGxlUGFpbnRD
b250ZW50UmVjdCA9IGNvbnRlbnRSZWN0OworICAgIGlkbGVQYWludENvbnRlbnRSZWN0LmluZmxh
dGUoaWRsZVBhaW50UGFkZGluZ1dpZHRoKTsgCisgICAgaWRsZVBhaW50Q29udGVudFJlY3QuaW50
ZXJzZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgY29udGVudEJvdW5kcygpKSk7CisKKyAg
ICBpbnQgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tOworICAgIG1fdGlsZXItPmNvbnRlbnRSZWN0
VG9UaWxlSW5kaWNlcyhpZGxlUGFpbnRDb250ZW50UmVjdCwgbGVmdCwgdG9wLCByaWdodCwgYm90
dG9tKTsKKyAgICBmb3IgKGludCBqID0gdG9wOyBqIDw9IGJvdHRvbTsgKytqKSB7CisgICAgICAg
IGZvciAoaW50IGkgPSBsZWZ0OyBpIDw9IHJpZ2h0OyArK2kpIHsKKyAgICAgICAgICAgIGlmICht
X3JlcXVlc3RlZFVwZGF0ZVRpbGVzUmVjdC5jb250YWlucyhJbnRQb2ludChpLCBqKSkpCisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0g
dGlsZUF0KGksIGopOworICAgICAgICAgICAgaWYgKCF0aWxlIHx8ICF0aWxlLT50ZXh0dXJlKCkt
PmlzVmFsaWQobV90aWxlci0+dGlsZVNpemUoKSwgbV90ZXh0dXJlRm9ybWF0KSB8fCB0aWxlLT5p
c0RpcnR5KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9
CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB9CiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaAppbmRleCAzNjNkYTYxODU4MDJl
ZWRjNzRmNTE1MmFlNDlmMzg3YzkyZGMwZjhlLi4yMDU5OGYyOGZlODA3ZTNjODE4NDJjMzdiOGMy
MjhlMzIyM2ViYmIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaApAQCAtNzMsOSArNzMs
MTYgQEAgcHJvdGVjdGVkOgogCiAgICAgLy8gU2V0IGludmFsaWRhdGlvbnMgdG8gYmUgcG90ZW50
aWFsbHkgcmVwYWludGVkIGR1cmluZyB1cGRhdGUoKS4KICAgICB2b2lkIGludmFsaWRhdGVSZWN0
KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KTsKKwogICAgIC8vIFByZXBhcmUgZGF0YSBuZWVk
ZWQgdG8gdXBkYXRlIHRleHR1cmVzIHRoYXQgaW50ZXJzZWN0IHdpdGggY29udGVudFJlY3QuCiAg
ICAgdm9pZCBwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpOwogCisg
ICAgLy8gU2FtZSBhcyBhYm92ZSwgYnV0IHRoaXMgd2lsbCB0cnkgdG8gcGFpbnQgYWRkaXRpb25h
bCBzdXJyb3VuZGluZyBjb250ZW50IGlmIGlkbGUuCisgICAgdm9pZCBwcmVwYXJlVG9VcGRhdGVJ
ZGxlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KTsKKworICAgIC8vIEFmdGVyIHByZXBhcmlu
ZyBhbiB1cGRhdGUsIHJldHVybnMgdHJ1ZSBpZiBtb3JlIHByZS1wYWludGluZyBpcyBuZWVkZWQu
CisgICAgYm9vbCBuZWVkc0lkbGVQYWludChjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCk7CisK
ICAgICB2aXJ0dWFsIHZvaWQgcHJvdGVjdFZpc2libGVUaWxlVGV4dHVyZXMoKTsKIAogICAgIHZp
cnR1YWwgVGV4dHVyZU1hbmFnZXIqIHRleHR1cmVNYW5hZ2VyKCkgY29uc3Q7CkBAIC04NywxOCAr
OTQsMjIgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgY3JlYXRlVGlsZXJJZk5lZWRlZCgpOwogICAg
IHZvaWQgc2V0VGlsaW5nT3B0aW9uKFRpbGluZ09wdGlvbik7CisgCisgICAgdm9pZCBwcmVwYXJl
VG9VcGRhdGVUaWxlcyhib29sIGlkbGUsIGludCBsZWZ0LCBpbnQgdG9wLCBpbnQgcmlnaHQsIGlu
dCBib3R0b20pOwogCiAgICAgVXBkYXRhYmxlVGlsZSogdGlsZUF0KGludCwgaW50KSBjb25zdDsK
ICAgICBVcGRhdGFibGVUaWxlKiBjcmVhdGVUaWxlKGludCwgaW50KTsKIAogICAgIC8vIFRlbXBv
cmFyeSBzdGF0ZSBoZWxkIGJldHdlZW4gcHJlcGFyZVRvVXBkYXRlKCkgYW5kIHVwZGF0ZUNvbXBv
c2l0b3JSZXNvdXJjZXMoKS4KLSAgICBJbnRSZWN0IG1fcmVxdWVzdGVkVXBkYXRlUmVjdDsKKyAg
ICBJbnRSZWN0IG1fcmVxdWVzdGVkVXBkYXRlVGlsZXNSZWN0OworCiAgICAgLy8gU3RhdGUgaGVs
ZCBiZXR3ZWVuIHByZXBhcmVUb1VwZGF0ZSgpIGFuZCBwdXNoUHJvcGVydGllc1RvKCkuIFRoaXMg
cmVwcmVzZW50cyB0aGUgYXJlYQogICAgIC8vIG9mIHRoZSBsYXllciB0aGF0IGlzIGFjdHVhbGx5
IHJlLXBhaW50ZWQgYnkgV2ViS2l0LgogICAgIEludFJlY3QgbV9wYWludFJlY3Q7CiAKICAgICBH
QzNEZW51bSBtX3RleHR1cmVGb3JtYXQ7CiAgICAgYm9vbCBtX3NraXBzRHJhdzsKKyAgICBib29s
IG1fc2tpcHNJZGxlUGFpbnQ7CiAgICAgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6T3JpZW50YXRpb24g
bV90ZXh0dXJlT3JpZW50YXRpb247CiAgICAgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRl
eGVsRm9ybWF0IG1fc2FtcGxlZFRleGVsRm9ybWF0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0LmNwcAppbmRleCBjOGFlNjE2OTE4OGE4Y2MxM2Q0MTIyMDBjMWY4MTE0MTdiYTA5ODc5Li5m
NmFkODk4ZDk0N2NhODVjZmJjNWUxYWYzMDJlYzIzODBmZDg1NmRmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTgzLDcgKzgzLDcgQEAgYm9vbCBDQ0xheWVyVHJlZUhvc3Q6
OmluaXRpYWxpemUoKQogICAgIC8vIFVwZGF0ZSBtX3NldHRpbmdzIGJhc2VkIG9uIGNhcGFiaWxp
dGllcyB0aGF0IHdlIGdvdCBiYWNrIGZyb20gdGhlIHJlbmRlcmVyLgogICAgIG1fc2V0dGluZ3Mu
YWNjZWxlcmF0ZVBhaW50aW5nID0gbV9wcm94eS0+bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygp
LnVzaW5nQWNjZWxlcmF0ZWRQYWludGluZzsKIAotICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdl
ciA9IFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoVGV4dHVyZU1hbmFnZXI6OmhpZ2hMaW1pdEJ5dGVz
KCksIG1fcHJveHktPmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS5tYXhUZXh0dXJlU2l6ZSk7
CisgICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyID0gVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZShU
ZXh0dXJlTWFuYWdlcjo6aGlnaExpbWl0Qnl0ZXMoKSwgVGV4dHVyZU1hbmFnZXI6OnJlY2xhaW1M
aW1pdEJ5dGVzKHZpZXdwb3J0U2l6ZSgpKSwgbV9wcm94eS0+bGF5ZXJSZW5kZXJlckNhcGFiaWxp
dGllcygpLm1heFRleHR1cmVTaXplKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTE1LDcg
KzExNSw5IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpiZWdpbkNvbW1pdE9uSW1wbFRocmVhZChD
Q0xheWVyVHJlZUhvc3RJbXBsKiBob3N0SW1wbCkKICAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBs
VGhyZWFkKCkpOwogICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3Q6OmNvbW1pdFRvIiwg
dGhpcywgMCk7CiAKLSAgICBjb250ZW50c1RleHR1cmVNYW5hZ2VyKCktPnJlZHVjZU1lbW9yeVRv
TGltaXQoVGV4dHVyZU1hbmFnZXI6OnJlY2xhaW1MaW1pdEJ5dGVzKCkpOworICAgIHNpemVfdCBy
ZWNsYWltTGltaXQgPSBUZXh0dXJlTWFuYWdlcjo6cmVjbGFpbUxpbWl0Qnl0ZXModmlld3BvcnRT
aXplKCkpOworICAgIGNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKS0+c2V0U29mdE1lbW9yeUxpbWl0
Qnl0ZXMocmVjbGFpbUxpbWl0KTsKKyAgICBjb250ZW50c1RleHR1cmVNYW5hZ2VyKCktPnJlZHVj
ZU1lbW9yeVRvTGltaXQocmVjbGFpbUxpbWl0KTsKICAgICBjb250ZW50c1RleHR1cmVNYW5hZ2Vy
KCktPmRlbGV0ZUV2aWN0ZWRUZXh0dXJlcyhob3N0SW1wbC0+Y29udGVudHNUZXh0dXJlQWxsb2Nh
dG9yKCkpOwogfQogCkBAIC0yNTIsNyArMjU0LDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnNl
dFZpc2libGUoYm9vbCB2aXNpYmxlKQogCiAgICAgbV92aXNpYmxlID0gdmlzaWJsZTsKICAgICBp
ZiAoIXZpc2libGUpIHsKLSAgICAgICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT5yZWR1Y2VN
ZW1vcnlUb0xpbWl0KFRleHR1cmVNYW5hZ2VyOjpsb3dMaW1pdEJ5dGVzKCkpOworICAgICAgICBt
X2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPnJlZHVjZU1lbW9yeVRvTGltaXQoVGV4dHVyZU1hbmFn
ZXI6Omxvd0xpbWl0Qnl0ZXModmlld3BvcnRTaXplKCkpKTsKICAgICAgICAgbV9jb250ZW50c1Rl
eHR1cmVNYW5hZ2VyLT51bnByb3RlY3RBbGxUZXh0dXJlcygpOwogICAgIH0KIApAQCAtMjY1LDcg
KzI2Nyw5IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJsZSkK
IHZvaWQgQ0NMYXllclRyZWVIb3N0OjpkaWRCZWNvbWVJbnZpc2libGVPbkltcGxUaHJlYWQoQ0NM
YXllclRyZWVIb3N0SW1wbCogaG9zdEltcGwpCiB7CiAgICAgQVNTRVJUKENDUHJveHk6OmlzSW1w
bFRocmVhZCgpKTsKLSAgICBjb250ZW50c1RleHR1cmVNYW5hZ2VyKCktPnJlZHVjZU1lbW9yeVRv
TGltaXQoVGV4dHVyZU1hbmFnZXI6OnJlY2xhaW1MaW1pdEJ5dGVzKCkpOworICAgIHNpemVfdCBy
ZWNsYWltTGltaXQgPSBUZXh0dXJlTWFuYWdlcjo6cmVjbGFpbUxpbWl0Qnl0ZXModmlld3BvcnRT
aXplKCkpOworICAgIGNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKS0+c2V0U29mdE1lbW9yeUxpbWl0
Qnl0ZXMocmVjbGFpbUxpbWl0KTsKKyAgICBjb250ZW50c1RleHR1cmVNYW5hZ2VyKCktPnJlZHVj
ZU1lbW9yeVRvTGltaXQocmVjbGFpbUxpbWl0KTsKICAgICBjb250ZW50c1RleHR1cmVNYW5hZ2Vy
KCktPmRlbGV0ZUV2aWN0ZWRUZXh0dXJlcyhob3N0SW1wbC0+Y29udGVudHNUZXh0dXJlQWxsb2Nh
dG9yKCkpOwogfQogCkBAIC0zMzAsMTAgKzMzNCwxMiBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6
dXBkYXRlTGF5ZXJzKExheWVyQ2hyb21pdW0qIHJvb3RMYXllcikKICAgICAgICAgQ0NMYXllclRy
ZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocm9vdExh
eWVyLCByb290TGF5ZXIsIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgbV91cGRhdGVM
aXN0LCByb290UmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCksIGxheWVyUmVuZGVyZXJDYXBhYmls
aXRpZXMoKS5tYXhUZXh0dXJlU2l6ZSk7CiAgICAgfQogCi0gICAgcGFpbnRMYXllckNvbnRlbnRz
KG1fdXBkYXRlTGlzdCk7CisgICAgcGFpbnRMYXllckNvbnRlbnRzKG1fdXBkYXRlTGlzdCwgZmFs
c2UgLyogaWRsZSAqLyk7CisgICAgLy8gVGhlIHNlY29uZCAoaWRsZSkgcGFpbnQgd2lsbCBiZSBh
IG5vLW9wIGluIGxheWVycyB3aGVyZSBwYWludGluZyBhbHJlYWR5IG9jY3VyZWQgYWJvdmUuCisg
ICAgcGFpbnRMYXllckNvbnRlbnRzKG1fdXBkYXRlTGlzdCwgdHJ1ZSAvKiBpZGxlICovKTsKIH0K
IAotdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnBhaW50TWFza0FuZFJlcGxpY2FGb3JSZW5kZXJTdXJm
YWNlKExheWVyQ2hyb21pdW0qIHJlbmRlclN1cmZhY2VMYXllcikKK3ZvaWQgQ0NMYXllclRyZWVI
b3N0OjpwYWludE1hc2tBbmRSZXBsaWNhRm9yUmVuZGVyU3VyZmFjZShMYXllckNocm9taXVtKiBy
ZW5kZXJTdXJmYWNlTGF5ZXIsIGJvb2wgaWRsZSkKIHsKICAgICAvLyBOb3RlOiBNYXNrcyBhbmQg
cmVwbGljYXMgb25seSBleGlzdCBmb3IgbGF5ZXJzIHRoYXQgb3duIHJlbmRlciBzdXJmYWNlcy4g
SWYgd2UgcmVhY2ggdGhpcyBwb2ludAogICAgIC8vIGluIGNvZGUsIHdlIGFscmVhZHkga25vdyB0
aGF0IGF0IGxlYXN0IHNvbWV0aGluZyB3aWxsIGJlIGRyYXduIGludG8gdGhpcyByZW5kZXIgc3Vy
ZmFjZSwgc28gdGhlCkBAIC0zNDIsMjQgKzM0OCwyNCBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6
cGFpbnRNYXNrQW5kUmVwbGljYUZvclJlbmRlclN1cmZhY2UoTGF5ZXJDaHJvbWl1bSogcmVuZGVy
UwogICAgIGlmIChyZW5kZXJTdXJmYWNlTGF5ZXItPm1hc2tMYXllcigpKSB7CiAgICAgICAgIHJl
bmRlclN1cmZhY2VMYXllci0+bWFza0xheWVyKCktPnNldExheWVyVHJlZUhvc3QodGhpcyk7CiAg
ICAgICAgIHJlbmRlclN1cmZhY2VMYXllci0+bWFza0xheWVyKCktPnNldFZpc2libGVMYXllclJl
Y3QoSW50UmVjdChJbnRQb2ludCgpLCByZW5kZXJTdXJmYWNlTGF5ZXItPmNvbnRlbnRCb3VuZHMo
KSkpOwotICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXItPm1hc2tMYXllcigpLT5wYWludENvbnRl
bnRzSWZEaXJ0eSgpOworICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXItPm1hc2tMYXllcigpLT5w
YWludENvbnRlbnRzSWZEaXJ0eShpZGxlKTsKICAgICB9CiAKICAgICBMYXllckNocm9taXVtKiBy
ZXBsaWNhTGF5ZXIgPSByZW5kZXJTdXJmYWNlTGF5ZXItPnJlcGxpY2FMYXllcigpOwogICAgIGlm
IChyZXBsaWNhTGF5ZXIpIHsKIAogICAgICAgICByZXBsaWNhTGF5ZXItPnNldExheWVyVHJlZUhv
c3QodGhpcyk7Ci0gICAgICAgIHJlcGxpY2FMYXllci0+cGFpbnRDb250ZW50c0lmRGlydHkoKTsK
KyAgICAgICAgcmVwbGljYUxheWVyLT5wYWludENvbnRlbnRzSWZEaXJ0eShpZGxlKTsKIAogICAg
ICAgICBpZiAocmVwbGljYUxheWVyLT5tYXNrTGF5ZXIoKSkgewogICAgICAgICAgICAgcmVwbGlj
YUxheWVyLT5tYXNrTGF5ZXIoKS0+c2V0TGF5ZXJUcmVlSG9zdCh0aGlzKTsKICAgICAgICAgICAg
IHJlcGxpY2FMYXllci0+bWFza0xheWVyKCktPnNldFZpc2libGVMYXllclJlY3QoSW50UmVjdChJ
bnRQb2ludCgpLCByZXBsaWNhTGF5ZXItPm1hc2tMYXllcigpLT5jb250ZW50Qm91bmRzKCkpKTsK
LSAgICAgICAgICAgIHJlcGxpY2FMYXllci0+bWFza0xheWVyKCktPnBhaW50Q29udGVudHNJZkRp
cnR5KCk7CisgICAgICAgICAgICByZXBsaWNhTGF5ZXItPm1hc2tMYXllcigpLT5wYWludENvbnRl
bnRzSWZEaXJ0eShpZGxlKTsKICAgICAgICAgfQogICAgIH0KIH0KIAotdm9pZCBDQ0xheWVyVHJl
ZUhvc3Q6OnBhaW50TGF5ZXJDb250ZW50cyhjb25zdCBMYXllckxpc3QmIHJlbmRlclN1cmZhY2VM
YXllckxpc3QpCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6cGFpbnRMYXllckNvbnRlbnRzKGNvbnN0
IExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgYm9vbCBpZGxlKQogewogICAgIGZv
ciAoaW50IHN1cmZhY2VJbmRleCA9IHJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpIC0gMTsg
c3VyZmFjZUluZGV4ID49IDAgOyAtLXN1cmZhY2VJbmRleCkgewogICAgICAgICBMYXllckNocm9t
aXVtKiByZW5kZXJTdXJmYWNlTGF5ZXIgPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0W3N1cmZhY2VJ
bmRleF0uZ2V0KCk7CkBAIC0zNjgsNyArMzc0LDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnBh
aW50TGF5ZXJDb250ZW50cyhjb25zdCBMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QK
ICAgICAgICAgQVNTRVJUKHJlbmRlclN1cmZhY2UtPmRyYXdPcGFjaXR5KCkpOwogCiAgICAgICAg
IHJlbmRlclN1cmZhY2VMYXllci0+c2V0TGF5ZXJUcmVlSG9zdCh0aGlzKTsKLSAgICAgICAgcGFp
bnRNYXNrQW5kUmVwbGljYUZvclJlbmRlclN1cmZhY2UocmVuZGVyU3VyZmFjZUxheWVyKTsKKyAg
ICAgICAgcGFpbnRNYXNrQW5kUmVwbGljYUZvclJlbmRlclN1cmZhY2UocmVuZGVyU3VyZmFjZUxh
eWVyLCBpZGxlKTsKIAogICAgICAgICBjb25zdCBMYXllckxpc3QmIGxheWVyTGlzdCA9IHJlbmRl
clN1cmZhY2UtPmxheWVyTGlzdCgpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGxheWVySW5kZXgg
PSAwOyBsYXllckluZGV4IDwgbGF5ZXJMaXN0LnNpemUoKTsgKytsYXllckluZGV4KSB7CkBAIC0z
ODQsNyArMzkwLDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnBhaW50TGF5ZXJDb250ZW50cyhj
b25zdCBMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QKICAgICAgICAgICAgIEFTU0VS
VChsYXllci0+b3BhY2l0eSgpKTsKICAgICAgICAgICAgIEFTU0VSVCghbGF5ZXItPmJvdW5kcygp
LmlzRW1wdHkoKSk7CiAKLSAgICAgICAgICAgIGxheWVyLT5wYWludENvbnRlbnRzSWZEaXJ0eSgp
OworICAgICAgICAgICAgbGF5ZXItPnBhaW50Q29udGVudHNJZkRpcnR5KGlkbGUpOwogICAgICAg
ICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaAppbmRleCBhNzkzY2NhMjY1
N2Y2MTUzMzIyYWYxMjgxMjVhYTA1M2EwMTMxMTIyLi5mNmZlODhlODgxMDhiZjMwYmRiNzcyNGMy
NWU4OWE0M2VlMmNhMThmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaApAQCAtMTkxLDgg
KzE5MSw4IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRy
PExheWVyQ2hyb21pdW0+ID4gTGF5ZXJMaXN0OwogCi0gICAgdm9pZCBwYWludExheWVyQ29udGVu
dHMoY29uc3QgTGF5ZXJMaXN0Jik7Ci0gICAgdm9pZCBwYWludE1hc2tBbmRSZXBsaWNhRm9yUmVu
ZGVyU3VyZmFjZShMYXllckNocm9taXVtKik7CisgICAgdm9pZCBwYWludExheWVyQ29udGVudHMo
Y29uc3QgTGF5ZXJMaXN0JiwgYm9vbCBpZGxlUGFpbnQpOworICAgIHZvaWQgcGFpbnRNYXNrQW5k
UmVwbGljYUZvclJlbmRlclN1cmZhY2UoTGF5ZXJDaHJvbWl1bSosIGJvb2wgaWRsZVBhaW50KTsK
IAogICAgIHZvaWQgdXBkYXRlTGF5ZXJzKExheWVyQ2hyb21pdW0qKTsKICAgICB2b2lkIGNsZWFy
UGVuZGluZ1VwZGF0ZSgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116562</attachid>
            <date>2011-11-24 22:36:52 -0800</date>
            <delta_ts>2011-11-30 17:05:27 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72686-20111124223651.patch</filename>
            <type>text/plain</type>
            <size>28345</size>
            <attacher name="Eric Penner">epenner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxMDM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2I4MDMyZTk3ZWIxZGQw
NWQ5Mjg1ZjQxYzBkZTZjMzFiYzg2MDU4My4uMWNmMDg4NTQxMTkxNzllZjc2NjZlMjFiZDA2NDJl
MWI4ODc5NDlhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDExLTExLTI0ICBFcmlj
IFBlbm5lciAgPGVwZW5uZXJAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIE5lZWQg
dG8gcHJlcGFpbnQgdGlsZXMgaW4gVGlsZWRMYXllckNocm9taXVtCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjY4NgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMhKQorCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OnBhaW50Q29udGVu
dHNJZkRpcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjppZGxl
UGFpbnRDb250ZW50c0lmRGlydHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0NvbnRlbnRMYXllckNocm9taXVtLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
TGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c0lmRGlydHkpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHNJZkRpcnR5KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFuYWdlcjo6cmVjbGFpbUxpbWl0Qnl0ZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hbmFnZXI6Omxvd0xpbWl0Qnl0ZXMpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6VGlsZWRMYXllckNocm9taXVtKToKKyAgICAgICAgKFdl
YkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6Y2xlYW51cFJlc291cmNlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGVUaWxl
cyk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVUb1VwZGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVUb1VwZGF0
ZUlkbGUpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjpuZWVkc0lkbGVQ
YWludCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNo
cm9taXVtLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6YmVnaW5D
b21taXRPbkltcGxUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Ojpz
ZXRWaXNpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6ZGlkQmVjb21l
SW52aXNpYmxlT25JbXBsVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9z
dDo6dXBkYXRlTGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6cGFp
bnRNYXNrQW5kUmVwbGljYUZvclJlbmRlclN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0OjpwYWludExheWVyQ29udGVudHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oOgorCiAyMDExLTExLTIyICBLZW5u
ZXRoIFJ1c3NlbGwgIDxrYnJAZ29vZ2xlLmNvbT4KIAogICAgICAgICBbY2hyb21pdW1dIFN1cHBv
cnQgQ29yZSBBbmltYXRpb24gcGx1Z2lucyBpbiBjb21wb3NpdG9yCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCmluZGV4IDQzODNlMjhmN2VlMGU4YmYwNTcwMjVlZGMwZDRiZWU1NGNmZjE2OWMuLjA2
MTRlNjVmYzdkZGRiNjRlZGE1YTFiZTc2MTE4YTAyMTk0MDYyZjAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTEtMTEtMjQgIEVyaWMgUGVubmVyICA8ZXBl
bm5lckBnb29nbGUuY29tPgorCisgICAgICAgIFtjaHJvbWl1bV0gTmVlZCB0byBwcmVwYWludCB0
aWxlcyBpbiBUaWxlZExheWVyQ2hyb21pdW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTcyNjg2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcDoKKyAgICAg
ICAgKFdURjo6Q29udGVudExheWVyQ2hyb21pdW1XaXRoVXBkYXRlVHJhY2tpbmc6OnBhaW50Q29u
dGVudHNJZkRpcnR5KToKKwogMjAxMS0xMS0yMiAgS2VubmV0aCBSdXNzZWxsICA8a2JyQGdvb2ds
ZS5jb20+CiAKICAgICAgICAgW2Nocm9taXVtXSBTdXBwb3J0IENvcmUgQW5pbWF0aW9uIHBsdWdp
bnMgaW4gY29tcG9zaXRvcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCmluZGV4
IDllYjFkNzk5ZjZkOTFlY2VjNjc5ODEwNmVjNjAyN2JiNDFlNTI1MjAuLjUyM2ZmZDQ1YTMzZmVj
MGQwODI1NTk2OGVmZWY4NGQ2ZTIwYjljMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJv
bWl1bS5jcHAKQEAgLTkyLDggKzkyLDEzIEBAIHZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OmNs
ZWFudXBSZXNvdXJjZXMoKQogICAgIFRpbGVkTGF5ZXJDaHJvbWl1bTo6Y2xlYW51cFJlc291cmNl
cygpOwogfQogCi12b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0
eSgpCit2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eShib29s
IGlkbGVQYWludCkKIHsKKyAgICBpZiAoaWRsZVBhaW50KSB7CisgICAgICAgIGlkbGVQYWludENv
bnRlbnRzSWZEaXJ0eSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgdXBkYXRlVGls
ZVNpemVBbmRUaWxpbmdPcHRpb24oKTsKIAogICAgIEludFJlY3QgbGF5ZXJSZWN0OwpAQCAtMTEx
LDYgKzExNiwyMCBAQCB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZE
aXJ0eSgpCiAgICAgcmVzZXROZWVkc0Rpc3BsYXkoKTsKIH0KIAordm9pZCBDb250ZW50TGF5ZXJD
aHJvbWl1bTo6aWRsZVBhaW50Q29udGVudHNJZkRpcnR5KCkKK3sKKyAgICBpZiAoIWRyYXdzQ29u
dGVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBJbnRSZWN0JiBsYXllclJlY3Qg
PSB2aXNpYmxlTGF5ZXJSZWN0KCk7CisgICAgaWYgKGxheWVyUmVjdC5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIHByZXBhcmVUb1VwZGF0ZUlkbGUobGF5ZXJSZWN0KTsKKyAgICBp
ZiAobmVlZHNJZGxlUGFpbnQobGF5ZXJSZWN0KSkKKyAgICAgICAgc2V0TmVlZHNDb21taXQoKTsK
K30KKwogYm9vbCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KCkgY29uc3QKIHsK
ICAgICByZXR1cm4gbV9kZWxlZ2F0ZSAmJiBtX2RlbGVnYXRlLT5kcmF3c0NvbnRlbnQoKSAmJiBU
aWxlZExheWVyQ2hyb21pdW06OmRyYXdzQ29udGVudCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNo
cm9taXVtLmgKaW5kZXggYjgzNGU2NzZiZDYzNDQ1YWE0NTNiMzY1ZWVlMjgwMjQwZjM4MDljMS4u
ZGY5OWQ4N2NmZmM3Zjc0ZjU5MTUzM2QyMjcyYzQxYjNhZTUxNjg0ZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21p
dW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250
ZW50TGF5ZXJDaHJvbWl1bS5oCkBAIC00OSwxMiArNDksMTMgQEAgcHVibGljOgogCiAgICAgdmly
dHVhbCB+Q29udGVudExheWVyQ2hyb21pdW0oKTsKIAotICAgIHZpcnR1YWwgdm9pZCBwYWludENv
bnRlbnRzSWZEaXJ0eSgpOworICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzSWZEaXJ0eShi
b29sIGlkbGVQYWludCk7CiAKIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBDb250ZW50TGF5ZXJD
aHJvbWl1bShDQ0xheWVyRGVsZWdhdGUqKTsKIAogcHJpdmF0ZToKKyAgICB2b2lkIGlkbGVQYWlu
dENvbnRlbnRzSWZEaXJ0eSgpOwogICAgIHZpcnR1YWwgdm9pZCBjbGVhbnVwUmVzb3VyY2VzKCk7
CiAgICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9p
ZCBjcmVhdGVUZXh0dXJlVXBkYXRlcihjb25zdCBDQ0xheWVyVHJlZUhvc3QqKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJD
aHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9J
bWFnZUxheWVyQ2hyb21pdW0uY3BwCmluZGV4IDlkM2U5ZjNhMWU3MGRlZTVmMTllM2NmMGIyNDhi
OTQzYWZhMTAyYzAuLjgwMTA5MzYwNDgwYzViZDg3ODkwYzFkMDFmZGVjZmY0ZTNlOTA5MjkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdl
TGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcApAQCAtMTQ0LDggKzE0NCwxMSBAQCB2b2lk
IEltYWdlTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHMoSW1hZ2UqIGNvbnRlbnRzKQogICAgIHNl
dE9wYXF1ZSghbV9jb250ZW50cy0+Y3VycmVudEZyYW1lSGFzQWxwaGEoKSk7CiB9CiAKLXZvaWQg
SW1hZ2VMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eSgpCit2b2lkIEltYWdlTGF5
ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c0lmRGlydHkoYm9vbCBpZGxlUGFpbnQpCiB7CisgICAg
aWYgKGlkbGVQYWludCkKKyAgICAgICAgcmV0dXJuOworCiAgICAgaWYgKCFtX2RpcnR5UmVjdC5p
c0VtcHR5KCkpIHsKICAgICAgICAgbV90ZXh0dXJlVXBkYXRlci0+dXBkYXRlRnJvbUltYWdlKG1f
Y29udGVudHMtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkpOwogICAgICAgICB1cGRhdGVU
aWxlU2l6ZUFuZFRpbGluZ09wdGlvbigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uaAppbmRl
eCA1ZmU0ZjI2NjY4YmRjYzNlMjlmMDRjZmZjZGE4ODJhNzNjMzFlMzI3Li5jM2Q3NWQ4ODhiNmE3
NTEwZjdiZWViOGZjYzQ0ODAyOWMyMGY1ZWI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0u
aApAQCAtNTMsNyArNTMsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+SW1hZ2VMYXllckNocm9t
aXVtKCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3Q7Ci0gICAgdmly
dHVhbCB2b2lkIHBhaW50Q29udGVudHNJZkRpcnR5KCk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50
Q29udGVudHNJZkRpcnR5KGJvb2wgaWRsZVBhaW50KTsKICAgICB2aXJ0dWFsIGJvb2wgbmVlZHND
b250ZW50c1NjYWxlKCkgY29uc3Q7CiAKICAgICB2b2lkIHNldENvbnRlbnRzKEltYWdlKiBpbWFn
ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllckNocm9taXVtLmgKaW5kZXggNzEzZGZiMjUyMzAxMDg2ZmZhN2U1ODFjMDQyMDQ3
NWU4YmRmZmI3ZC4uOGVhYmJjMTY0MzhiNmVmNTA1Y2UxZTQwNGY4NjZmYzI2ZTkxZmZiMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJD
aHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyQ2hyb21pdW0uaApAQCAtMTYxLDcgKzE2MSw3IEBAIHB1YmxpYzoKIAogICAgIC8vIFRo
ZXNlIG1ldGhvZHMgdHlwaWNhbGx5IG5lZWQgdG8gYmUgb3ZlcndyaXR0ZW4gYnkgZGVyaXZlZCBj
bGFzc2VzLgogICAgIHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQotICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzSWZEaXJ0eSgpIHsgfQorICAg
IHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzSWZEaXJ0eShib29sIGlkbGVQYWludCkgeyB9CiAg
ICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0
M0QqLCBDQ1RleHR1cmVVcGRhdGVyJikgeyB9CiAgICAgdmlydHVhbCB2b2lkIHNldElzTWFzayhi
b29sKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgdW5yZXNlcnZlQ29udGVudHNUZXh0dXJlKCkgeyB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclJlbmRlcmVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAppbmRleCBhNDM1ZDEwNjE2ZDg1
YWI0ZDRkMjU1NDVlMDAwZTdkYzA3MWUzMDZkLi5iZmI0ZDY4MTAyNzAxZGUyNDczNmRmZGNiOGNl
MTM2ZWIxYmY5NzRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKQEAg
LTMwMCwxMyArMzAwLDEzIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJz
KCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgc2l6ZV90IGNvbnRlbnRzTWVtb3J5VXNlQnl0ZXMg
PSBtX2NvbnRlbnRzVGV4dHVyZUFsbG9jYXRvci0+Y3VycmVudE1lbW9yeVVzZUJ5dGVzKCk7Ci0g
ICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXItPnNldE1lbW9yeUxpbWl0Qnl0ZXMoVGV4
dHVyZU1hbmFnZXI6OmhpZ2hMaW1pdEJ5dGVzKCkgLSBjb250ZW50c01lbW9yeVVzZUJ5dGVzKTsK
KyAgICBzaXplX3QgaGFyZExpbWl0Qnl0ZXMgPSBzdGQ6Om1heDxzaXplX3Q+KDAsIFRleHR1cmVN
YW5hZ2VyOjpoaWdoTGltaXRCeXRlcygpIC0gY29udGVudHNNZW1vcnlVc2VCeXRlcyk7CisgICAg
c2l6ZV90IHJlY2xhaW1MaW1pdEJ5dGVzID0gc3RkOjptYXg8c2l6ZV90PigwLCBUZXh0dXJlTWFu
YWdlcjo6cmVjbGFpbUxpbWl0Qnl0ZXModmlld3BvcnRTaXplKCkpIC0gY29udGVudHNNZW1vcnlV
c2VCeXRlcyk7CisgICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXItPnNldE1lbW9yeUxp
bWl0Qnl0ZXMoaGFyZExpbWl0Qnl0ZXMpOworCiAgICAgZHJhd0xheWVyc0ludGVybmFsKCk7CiAK
LSAgICBpZiAoVGV4dHVyZU1hbmFnZXI6OnJlY2xhaW1MaW1pdEJ5dGVzKCkgPiBjb250ZW50c01l
bW9yeVVzZUJ5dGVzKQotICAgICAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+cmVk
dWNlTWVtb3J5VG9MaW1pdChUZXh0dXJlTWFuYWdlcjo6cmVjbGFpbUxpbWl0Qnl0ZXMoKSAtIGNv
bnRlbnRzTWVtb3J5VXNlQnl0ZXMpOwotICAgIGVsc2UKLSAgICAgICAgbV9yZW5kZXJTdXJmYWNl
VGV4dHVyZU1hbmFnZXItPnJlZHVjZU1lbW9yeVRvTGltaXQoMCk7CisgICAgbV9yZW5kZXJTdXJm
YWNlVGV4dHVyZU1hbmFnZXItPnJlZHVjZU1lbW9yeVRvTGltaXQocmVjbGFpbUxpbWl0Qnl0ZXMp
OwogICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyLT5kZWxldGVFdmljdGVkVGV4dHVy
ZXMobV9yZW5kZXJTdXJmYWNlVGV4dHVyZUFsbG9jYXRvci5nZXQoKSk7CiAKICAgICBpZiAoc2V0
dGluZ3MoKS5jb21wb3NpdGVPZmZzY3JlZW4pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5jcHAKaW5kZXgg
YzYwMGQ5ZTY0OTFkN2QxZTc1NzIyMjE0ZTMxOWRhN2YwYzE4ODRjZS4uNDE0YzU0MGFlODUwNTg4
YzE4NmZjZTI5NWM4N2VlYWI4MTE2MWYxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmNwcApAQCAt
MzcsMTMgKzM3LDE1IEBAIHNpemVfdCBUZXh0dXJlTWFuYWdlcjo6aGlnaExpbWl0Qnl0ZXMoKQog
ICAgIHJldHVybiAxMjggKiAxMDI0ICogMTAyNDsKIH0KIAotc2l6ZV90IFRleHR1cmVNYW5hZ2Vy
OjpyZWNsYWltTGltaXRCeXRlcygpCitzaXplX3QgVGV4dHVyZU1hbmFnZXI6OnJlY2xhaW1MaW1p
dEJ5dGVzKGNvbnN0IEludFNpemUmIHZpZXdwb3J0U2l6ZSkKIHsKKyAgICAvLyBGSVhNRTogQ2hv
b3NlIGEgbGltaXQgYmFzZWQgb24gdmlld3BvcnQgc2l6ZS4KICAgICByZXR1cm4gNjQgKiAxMDI0
ICogMTAyNDsKIH0KIAotc2l6ZV90IFRleHR1cmVNYW5hZ2VyOjpsb3dMaW1pdEJ5dGVzKCkKK3Np
emVfdCBUZXh0dXJlTWFuYWdlcjo6bG93TGltaXRCeXRlcyhjb25zdCBJbnRTaXplJiB2aWV3cG9y
dFNpemUpCiB7CisgICAgLy8gRklYTUU6IENob29zZSBhIGxpbWl0IGJhc2VkIG9uIHZpZXdwb3J0
IHNpemUuCiAgICAgcmV0dXJuIDMgKiAxMDI0ICogMTAyNDsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2Vy
LmgKaW5kZXggZjMyN2I0Y2ZjZDFiMTBkYWU3ZGFkNjM0NjA0ZjY3MzliNTIwZjIwOC4uYjFiYmE0
Y2Y4NDExYjk2NDM4NWEwYTRjOWJlMWUzN2E5NzdjNDQyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5o
CkBAIC01Nyw5ICs1Nyw5IEBAIHB1YmxpYzoKICAgICAvLyBBYnNvbHV0ZSBtYXhpbXVtIGxpbWl0
IGZvciB0ZXh0dXJlIGFsbG9jYXRpb25zIGZvciB0aGlzIGluc3RhbmNlLgogICAgIHN0YXRpYyBz
aXplX3QgaGlnaExpbWl0Qnl0ZXMoKTsKICAgICAvLyBQcmVmZXJyZWQgdGV4dHVyZSBzaXplIGxp
bWl0LiBDYW4gYmUgZXhjZWVkZWQgaWYgbmVlZGVkLgotICAgIHN0YXRpYyBzaXplX3QgcmVjbGFp
bUxpbWl0Qnl0ZXMoKTsKKyAgICBzdGF0aWMgc2l6ZV90IHJlY2xhaW1MaW1pdEJ5dGVzKGNvbnN0
IEludFNpemUmIHZpZXdwb3J0U2l6ZSk7CiAgICAgLy8gVGhlIG1heGltdW0gdGV4dHVyZSBtZW1v
cnkgdXNhZ2Ugd2hlbiBhc2tlZCB0byByZWxlYXNlIHRleHR1cmVzLgotICAgIHN0YXRpYyBzaXpl
X3QgbG93TGltaXRCeXRlcygpOworICAgIHN0YXRpYyBzaXplX3QgbG93TGltaXRCeXRlcyhjb25z
dCBJbnRTaXplJiB2aWV3cG9ydFNpemUpOwogCiAgICAgc3RhdGljIHNpemVfdCBtZW1vcnlVc2VC
eXRlcyhjb25zdCBJbnRTaXplJiwgR0MzRGVudW0gZm9ybWF0KTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVt
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5
ZXJDaHJvbWl1bS5jcHAKaW5kZXggZmZhZDJmNWIxNzVjOTY2NWQ2NjU3NWJhZmNjMzliZmNlZTBl
MWU2YS4uYjQyZTU5YzJhMTI2OGRkYjUxZTUyMmZkMmEzM2U0ZGE0ZDVkNzA2NSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNo
cm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCkBAIC00NSw2ICs0NSw5IEBAIHN0YXRpYyBpbnQgbWF4
VW50aWxlZFNpemUgPSA1MTI7CiAvLyBXaGVuIHRpbGluZyBpcyBlbmFibGVkLCB1c2UgdGlsZXMg
b2YgdGhpcyBkaW1lbnNpb24gc3F1YXJlZC4KIHN0YXRpYyBpbnQgZGVmYXVsdFRpbGVTaXplID0g
MjU2OwogCisvLyBGSVhNRTogUHJvYmFibHkgd2FudCB0byBzZXQgdGhpcyBiYXNlZCBvbiB0aGUg
dmlld3BvcnQuCitzdGF0aWMgaW50IGlkbGVQYWludFBhZGRpbmdXaWR0aCA9IGRlZmF1bHRUaWxl
U2l6ZTsKKwogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAt
NjksNiArNzIsNyBAQCBUaWxlZExheWVyQ2hyb21pdW06OlRpbGVkTGF5ZXJDaHJvbWl1bShDQ0xh
eWVyRGVsZWdhdGUqIGRlbGVnYXRlKQogICAgIDogTGF5ZXJDaHJvbWl1bShkZWxlZ2F0ZSkKICAg
ICAsIG1fdGV4dHVyZUZvcm1hdChHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNKQogICAg
ICwgbV9za2lwc0RyYXcoZmFsc2UpCisgICAgLCBtX3NraXBzSWRsZVBhaW50KGZhbHNlKQogICAg
ICwgbV90ZXh0dXJlT3JpZW50YXRpb24oTGF5ZXJUZXh0dXJlVXBkYXRlcjo6SW52YWxpZE9yaWVu
dGF0aW9uKQogICAgICwgbV9zYW1wbGVkVGV4ZWxGb3JtYXQoTGF5ZXJUZXh0dXJlVXBkYXRlcjo6
U2FtcGxlZFRleGVsRm9ybWF0SW52YWxpZCkKICAgICAsIG1fdGlsaW5nT3B0aW9uKEF1dG9UaWxl
KQpAQCAtOTAsNyArOTQsNyBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6Y2xlYW51cFJlc291
cmNlcygpCiAKICAgICBtX3RpbGVyLmNsZWFyKCk7CiAgICAgbV9wYWludFJlY3QgPSBJbnRSZWN0
KCk7Ci0gICAgbV9yZXF1ZXN0ZWRVcGRhdGVSZWN0ID0gSW50UmVjdCgpOworICAgIG1fcmVxdWVz
dGVkVXBkYXRlVGlsZXNSZWN0ID0gSW50UmVjdCgpOwogfQogCiB2b2lkIFRpbGVkTGF5ZXJDaHJv
bWl1bTo6dXBkYXRlVGlsZVNpemVBbmRUaWxpbmdPcHRpb24oKQpAQCAtMTcyLDExICsxNzYsMTMg
QEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OmNyZWF0ZVRpbGVyKENDTGF5ZXJUaWxpbmdEYXRh
OjpCb3JkZXJUZXhlbE9wdGlvbiBib3JkZXIKIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjp1cGRh
dGVDb21wb3NpdG9yUmVzb3VyY2VzKEdyYXBoaWNzQ29udGV4dDNEKiwgQ0NUZXh0dXJlVXBkYXRl
ciYgdXBkYXRlcikKIHsKICAgICAvLyBQYWludGluZyBjb3VsZCBjYXVzZSBjb21wb3NpdGluZyB0
byBnZXQgdHVybmVkIG9mZiwgd2hpY2ggbWF5IGNhdXNlIHRoZSB0aWxlciB0byBiZWNvbWUgaW52
YWxpZGF0ZWQgbWlkLXVwZGF0ZS4KLSAgICBpZiAobV9za2lwc0RyYXcgfHwgbV9yZXF1ZXN0ZWRV
cGRhdGVSZWN0LmlzRW1wdHkoKSB8fCAhbV90aWxlci0+bnVtVGlsZXMoKSkKKyAgICBpZiAobV9z
a2lwc0RyYXcgfHwgbV9yZXF1ZXN0ZWRVcGRhdGVUaWxlc1JlY3QuaXNFbXB0eSgpIHx8ICFtX3Rp
bGVyLT5udW1UaWxlcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpbnQgbGVmdCwgdG9wLCBy
aWdodCwgYm90dG9tOwotICAgIG1fdGlsZXItPmNvbnRlbnRSZWN0VG9UaWxlSW5kaWNlcyhtX3Jl
cXVlc3RlZFVwZGF0ZVJlY3QsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CisgICAgaW50IGxl
ZnQgPSBtX3JlcXVlc3RlZFVwZGF0ZVRpbGVzUmVjdC54KCk7CisgICAgaW50IHRvcCA9IG1fcmVx
dWVzdGVkVXBkYXRlVGlsZXNSZWN0LnkoKTsKKyAgICBpbnQgcmlnaHQgPSBtX3JlcXVlc3RlZFVw
ZGF0ZVRpbGVzUmVjdC5tYXhYKCkgLSAxOworICAgIGludCBib3R0b20gPSBtX3JlcXVlc3RlZFVw
ZGF0ZVRpbGVzUmVjdC5tYXhZKCkgLSAxOwogICAgIGZvciAoaW50IGogPSB0b3A7IGogPD0gYm90
dG9tOyArK2opIHsKICAgICAgICAgZm9yIChpbnQgaSA9IGxlZnQ7IGkgPD0gcmlnaHQ7ICsraSkg
ewogICAgICAgICAgICAgVXBkYXRhYmxlVGlsZSogdGlsZSA9IHRpbGVBdChpLCBqKTsKQEAgLTMz
NCwzMiArMzQwLDExIEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpwcm90ZWN0VGlsZVRleHR1
cmVzKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQogICAgIH0KIH0KIAotdm9pZCBUaWxlZExh
eWVyQ2hyb21pdW06OnByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkK
K3ZvaWQgVGlsZWRMYXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGVUaWxlcyhib29sIGlkbGUs
IGludCBsZWZ0LCBpbnQgdG9wLCBpbnQgcmlnaHQsIGludCBib3R0b20pCiB7Ci0gICAgaWYgKCFt
X3RpbGVyKQotICAgICAgICBjcmVhdGVUaWxlcihpc05vbkNvbXBvc2l0ZWRDb250ZW50KCkgPyBD
Q0xheWVyVGlsaW5nRGF0YTo6Tm9Cb3JkZXJUZXhlbHMgOiBDQ0xheWVyVGlsaW5nRGF0YTo6SGFz
Qm9yZGVyVGV4ZWxzKTsKLQotICAgIEFTU0VSVChtX3RpbGVyKTsKLQotICAgIG1fc2tpcHNEcmF3
ID0gZmFsc2U7Ci0KLSAgICBpZiAoY29udGVudFJlY3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1f
cmVxdWVzdGVkVXBkYXRlUmVjdCA9IEludFJlY3QoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIG1fdGlsZXItPmdyb3dMYXllclRvQ29udGFpbihjb250ZW50UmVjdCk7Ci0KLSAgICBp
ZiAoIW1fdGlsZXItPm51bVRpbGVzKCkpIHsKLSAgICAgICAgbV9yZXF1ZXN0ZWRVcGRhdGVSZWN0
ID0gSW50UmVjdCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgLy8gQ3JlYXRlIHRp
bGVzIGFzIG5lZWRlZCwgZXhwYW5kaW5nIGEgZGlydHkgcmVjdCB0byBjb250YWluIGFsbAogICAg
IC8vIHRoZSBkaXJ0eSByZWdpb25zIGN1cnJlbnRseSBiZWluZyBkcmF3bi4KICAgICBJbnRSZWN0
IGRpcnR5TGF5ZXJSZWN0OwotICAgIGludCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b207Ci0gICAg
bV90aWxlci0+Y29udGVudFJlY3RUb1RpbGVJbmRpY2VzKGNvbnRlbnRSZWN0LCBsZWZ0LCB0b3As
IHJpZ2h0LCBib3R0b20pOwogICAgIGZvciAoaW50IGogPSB0b3A7IGogPD0gYm90dG9tOyArK2op
IHsKICAgICAgICAgZm9yIChpbnQgaSA9IGxlZnQ7IGkgPD0gcmlnaHQ7ICsraSkgewogICAgICAg
ICAgICAgVXBkYXRhYmxlVGlsZSogdGlsZSA9IHRpbGVBdChpLCBqKTsKQEAgLTM3MCw4ICszNTUs
MTEgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRS
ZWN0JiBjb250ZW50UmVjdCkKICAgICAgICAgICAgICAgICB0aWxlLT5tX2RpcnR5TGF5ZXJSZWN0
ID0gbV90aWxlci0+dGlsZUxheWVyUmVjdCh0aWxlKTsKIAogICAgICAgICAgICAgaWYgKCF0aWxl
LT50ZXh0dXJlKCktPnJlc2VydmUobV90aWxlci0+dGlsZVNpemUoKSwgbV90ZXh0dXJlRm9ybWF0
KSkgewotICAgICAgICAgICAgICAgIG1fc2tpcHNEcmF3ID0gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICBjbGVhbnVwUmVzb3VyY2VzKCk7CisgICAgICAgICAgICAgICAgbV9za2lwc0lkbGVQYWludCA9
IHRydWU7CisgICAgICAgICAgICAgICAgaWYgKCFpZGxlKSB7CisgICAgICAgICAgICAgICAgICAg
IG1fc2tpcHNEcmF3ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgY2xlYW51cFJlc291cmNl
cygpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICB9CiAKQEAgLTM3OSwxNSArMzY3LDE2IEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpw
cmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCiAgICAgICAgIH0KICAg
ICB9CiAKLSAgICAvLyBEdWUgdG8gYm9yZGVycywgd2hlbiB0aGUgcGFpbnQgcmVjdCBpcyBleHRl
bmRlZCB0byB0aWxlIGJvdW5kYXJpZXMsIGl0Ci0gICAgLy8gbWF5IGVuZCB1cCBvdmVybGFwcGlu
ZyBtb3JlIHRpbGVzIHRoYW4gdGhlIG9yaWdpbmFsIGNvbnRlbnQgcmVjdC4gUmVjb3JkCi0gICAg
Ly8gdGhhdCBvcmlnaW5hbCByZWN0IHNvIHdlIGRvbid0IHVwbG9hZCBtb3JlIHRpbGVzIHRoYW4g
bmVjZXNzYXJ5LgotICAgIG1fcmVxdWVzdGVkVXBkYXRlUmVjdCA9IGNvbnRlbnRSZWN0OwotCiAg
ICAgbV9wYWludFJlY3QgPSBtX3RpbGVyLT5sYXllclJlY3RUb0NvbnRlbnRSZWN0KGRpcnR5TGF5
ZXJSZWN0KTsKICAgICBpZiAoZGlydHlMYXllclJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1
cm47CiAKKyAgICAvLyBEdWUgdG8gYm9yZGVycywgd2hlbiB0aGUgcGFpbnQgcmVjdCBpcyBleHRl
bmRlZCB0byB0aWxlIGJvdW5kYXJpZXMsIGl0CisgICAgLy8gbWF5IGVuZCB1cCBvdmVybGFwcGlu
ZyBtb3JlIHRpbGVzIHRoYW4gdGhlIG9yaWdpbmFsIGNvbnRlbnQgcmVjdC4gUmVjb3JkCisgICAg
Ly8gdGhlIG9yaWdpbmFsIHRpbGVzIHNvIHdlIGRvbid0IHVwbG9hZCBtb3JlIHRpbGVzIHRoYW4g
bmVjZXNzYXJ5LgorICAgIGlmICghbV9wYWludFJlY3QuaXNFbXB0eSgpKQorICAgICAgICBtX3Jl
cXVlc3RlZFVwZGF0ZVRpbGVzUmVjdCA9IEludFJlY3QobGVmdCwgdG9wLCByaWdodCAtIGxlZnQg
KyAxLCBib3R0b20gLSB0b3AgKyAxKTsKKwogICAgIC8vIENhbGxpbmcgcHJlcGFyZVRvVXBkYXRl
KCkgY2FsbHMgaW50byBXZWJLaXQgdG8gcGFpbnQsIHdoaWNoIG1heSBoYXZlIHRoZSBzaWRlCiAg
ICAgLy8gZWZmZWN0IG9mIGRpc2FibGluZyBjb21wb3NpdGluZywgd2hpY2ggY2F1c2VzIG91ciBy
ZWZlcmVuY2UgdG8gdGhlIHRleHR1cmUgdXBkYXRlciB0byBiZSBkZWxldGVkLgogICAgIC8vIEhv
d2V2ZXIsIHdlIGNhbid0IGZyZWUgdGhlIG1lbW9yeSBiYWNraW5nIHRoZSBHcmFwaGljc0NvbnRl
eHQgdW50aWwgdGhlIHBhaW50IGZpbmlzaGVzLApAQCAtMzk2LDUgKzM4NSwxMTAgQEAgdm9pZCBU
aWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50
UmVjdCkKICAgICB0ZXh0dXJlVXBkYXRlcigpLT5wcmVwYXJlVG9VcGRhdGUobV9wYWludFJlY3Qs
IG1fdGlsZXItPnRpbGVTaXplKCksIG1fdGlsZXItPmhhc0JvcmRlclRleGVscygpLCBjb250ZW50
c1NjYWxlKCkpOwogfQogCisKK3ZvaWQgVGlsZWRMYXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRh
dGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCit7CisgICAgaWYgKCFtX3RpbGVyKQorICAg
ICAgICBjcmVhdGVUaWxlcihpc05vbkNvbXBvc2l0ZWRDb250ZW50KCkgPyBDQ0xheWVyVGlsaW5n
RGF0YTo6Tm9Cb3JkZXJUZXhlbHMgOiBDQ0xheWVyVGlsaW5nRGF0YTo6SGFzQm9yZGVyVGV4ZWxz
KTsKKworICAgIEFTU0VSVChtX3RpbGVyKTsKKworICAgIG1fc2tpcHNEcmF3ID0gZmFsc2U7Cisg
ICAgbV9za2lwc0lkbGVQYWludCA9IGZhbHNlOworICAgIG1fcmVxdWVzdGVkVXBkYXRlVGlsZXNS
ZWN0ID0gSW50UmVjdCgpOworICAgIG1fcGFpbnRSZWN0ID0gSW50UmVjdCgpOworCisgICAgaWYg
KGNvbnRlbnRSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV90aWxlci0+
Z3Jvd0xheWVyVG9Db250YWluKGNvbnRlbnRSZWN0KTsKKworICAgIGlmICghbV90aWxlci0+bnVt
VGlsZXMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50IGxlZnQsIHRvcCwgcmlnaHQsIGJv
dHRvbTsKKyAgICBtX3RpbGVyLT5jb250ZW50UmVjdFRvVGlsZUluZGljZXMoY29udGVudFJlY3Qs
IGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CisKKyAgICBwcmVwYXJlVG9VcGRhdGVUaWxlcyhm
YWxzZSwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKK30KKwordm9pZCBUaWxlZExheWVyQ2hy
b21pdW06OnByZXBhcmVUb1VwZGF0ZUlkbGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCit7
CisgICAgQVNTRVJUKG1fdGlsZXIpOworICAgIGlmICghbV90aWxlcikKKyAgICAgICAgcmV0dXJu
OworCisgICAgLy8gQWJvcnQgaWYgd2UgaGF2ZSBhbHJlYWR5IHByZXBhcmVkIGEgcGFpbnQgb3Ig
cnVuIG91dCBvZiBtZW1vcnkuCisgICAgaWYgKG1fc2tpcHNJZGxlUGFpbnQgfHwgIW1fcGFpbnRS
ZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgSW50UmVjdCBpZGxlUGFpbnRD
b250ZW50UmVjdCA9IGNvbnRlbnRSZWN0OworICAgIGlkbGVQYWludENvbnRlbnRSZWN0LmluZmxh
dGUoaWRsZVBhaW50UGFkZGluZ1dpZHRoKTsKKyAgICBpZGxlUGFpbnRDb250ZW50UmVjdC5pbnRl
cnNlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBjb250ZW50Qm91bmRzKCkpKTsKKworICAg
IG1fdGlsZXItPmdyb3dMYXllclRvQ29udGFpbihpZGxlUGFpbnRDb250ZW50UmVjdCk7CisKKyAg
ICBpZiAoIW1fdGlsZXItPm51bVRpbGVzKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFBy
b3RlY3QgYW55IHRleHR1cmVzIGluIHRoZSBwcmUtcGFpbnQgYXJlYSBzbyB3ZSBkb24ndCBlbmQg
dXAKKyAgICAvLyByZWNsYWltaW5nIHRoZW0gYmVsb3cuCisgICAgcHJvdGVjdFRpbGVUZXh0dXJl
cyhpZGxlUGFpbnRDb250ZW50UmVjdCk7CisKKyAgICAvLyBFeHBhbmQgb3V0d2FyZHMgdW50aWwg
d2UgZmluZCBhIGRpcnR5IHJvdyBvciBjb2x1bW4gdG8gdXBkYXRlLgorICAgIGludCBsMSwgdDEs
IHIxLCBiMSwgbDIsIHQyLCByMiwgYjI7CisgICAgbV90aWxlci0+Y29udGVudFJlY3RUb1RpbGVJ
bmRpY2VzKGNvbnRlbnRSZWN0LCBsMSwgdDEsIHIxLCBiMSk7CisgICAgbV90aWxlci0+Y29udGVu
dFJlY3RUb1RpbGVJbmRpY2VzKGlkbGVQYWludENvbnRlbnRSZWN0LCBsMiwgdDIsIHIyLCBiMik7
CisgICAgd2hpbGUgKChsMSA+IGwyIHx8IHQxID4gdDIgfHwgcjEgPCByMiB8fCBiMSA8IGIyKSAm
JiAhbV9za2lwc0lkbGVQYWludCkgeworICAgICAgICBpZiAoYjEgPCBiMikgeworICAgICAgICAg
ICAgKytiMTsKKyAgICAgICAgICAgIHByZXBhcmVUb1VwZGF0ZVRpbGVzKHRydWUsIGwxLCBiMSwg
cjEsIGIxKTsKKyAgICAgICAgICAgIGlmICghbV9wYWludFJlY3QuaXNFbXB0eSgpIHx8IG1fc2tp
cHNJZGxlUGFpbnQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKHQxID4gdDIpIHsKKyAgICAgICAgICAgIC0tdDE7CisgICAgICAgICAgICBwcmVwYXJlVG9V
cGRhdGVUaWxlcyh0cnVlLCBsMSwgdDEsIHIxLCB0MSk7CisgICAgICAgICAgICBpZiAoIW1fcGFp
bnRSZWN0LmlzRW1wdHkoKSB8fCBtX3NraXBzSWRsZVBhaW50KQorICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChsMSA+IGwyKSB7CisgICAgICAgICAgICAtLWwx
OworICAgICAgICAgICAgcHJlcGFyZVRvVXBkYXRlVGlsZXModHJ1ZSwgbDEsIHQxLCBsMSwgYjEp
OworICAgICAgICAgICAgaWYgKCFtX3BhaW50UmVjdC5pc0VtcHR5KCkgfHwgbV9za2lwc0lkbGVQ
YWludCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAocjEg
PCByMikgeworICAgICAgICAgICAgKytyMTsKKyAgICAgICAgICAgIHByZXBhcmVUb1VwZGF0ZVRp
bGVzKHRydWUsIHIxLCB0MSwgcjEsIGIxKTsKKyAgICAgICAgICAgIGlmICghbV9wYWludFJlY3Qu
aXNFbXB0eSgpIHx8IG1fc2tpcHNJZGxlUGFpbnQpCisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgVGlsZWRMYXllckNocm9taXVtOjpuZWVkc0lkbGVQ
YWludChjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKK3sKKyAgICBpZiAobV9za2lwc0RyYXcg
fHwgbV9za2lwc0lkbGVQYWludCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgSW50UmVj
dCBpZGxlUGFpbnRDb250ZW50UmVjdCA9IGNvbnRlbnRSZWN0OworICAgIGlkbGVQYWludENvbnRl
bnRSZWN0LmluZmxhdGUoaWRsZVBhaW50UGFkZGluZ1dpZHRoKTsKKyAgICBpZGxlUGFpbnRDb250
ZW50UmVjdC5pbnRlcnNlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBjb250ZW50Qm91bmRz
KCkpKTsKKworICAgIGludCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b207CisgICAgbV90aWxlci0+
Y29udGVudFJlY3RUb1RpbGVJbmRpY2VzKGlkbGVQYWludENvbnRlbnRSZWN0LCBsZWZ0LCB0b3As
IHJpZ2h0LCBib3R0b20pOworICAgIGZvciAoaW50IGogPSB0b3A7IGogPD0gYm90dG9tOyArK2op
IHsKKyAgICAgICAgZm9yIChpbnQgaSA9IGxlZnQ7IGkgPD0gcmlnaHQ7ICsraSkgeworICAgICAg
ICAgICAgaWYgKG1fcmVxdWVzdGVkVXBkYXRlVGlsZXNSZWN0LmNvbnRhaW5zKEludFBvaW50KGks
IGopKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIFVwZGF0YWJsZVRp
bGUqIHRpbGUgPSB0aWxlQXQoaSwgaik7CisgICAgICAgICAgICBpZiAoIXRpbGUgfHwgIXRpbGUt
PnRleHR1cmUoKS0+aXNWYWxpZChtX3RpbGVyLT50aWxlU2l6ZSgpLCBtX3RleHR1cmVGb3JtYXQp
IHx8IHRpbGUtPmlzRGlydHkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIH0KICNlbmRpZiAvLyBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDM2
M2RhNjE4NTgwMmVlZGM3NGY1MTUyYWU0OWYzODdjOTJkYzBmOGUuLmFlNjdkMGI2YTY0MGQ2ODk2
MmU3MWQ5NzlmMDY2N2RmYjJkOTU2MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oCkBA
IC03Myw5ICs3MywxNiBAQCBwcm90ZWN0ZWQ6CiAKICAgICAvLyBTZXQgaW52YWxpZGF0aW9ucyB0
byBiZSBwb3RlbnRpYWxseSByZXBhaW50ZWQgZHVyaW5nIHVwZGF0ZSgpLgogICAgIHZvaWQgaW52
YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpOworCiAgICAgLy8gUHJlcGFy
ZSBkYXRhIG5lZWRlZCB0byB1cGRhdGUgdGV4dHVyZXMgdGhhdCBpbnRlcnNlY3Qgd2l0aCBjb250
ZW50UmVjdC4KICAgICB2b2lkIHByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50
UmVjdCk7CiAKKyAgICAvLyBTYW1lIGFzIGFib3ZlLCBidXQgdGhpcyB3aWxsIHRyeSB0byBwYWlu
dCBhZGRpdGlvbmFsIHN1cnJvdW5kaW5nIGNvbnRlbnQgaWYgaWRsZS4KKyAgICB2b2lkIHByZXBh
cmVUb1VwZGF0ZUlkbGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpOworCisgICAgLy8gQWZ0
ZXIgcHJlcGFyaW5nIGFuIHVwZGF0ZSwgcmV0dXJucyB0cnVlIGlmIG1vcmUgcHJlLXBhaW50aW5n
IGlzIG5lZWRlZC4KKyAgICBib29sIG5lZWRzSWRsZVBhaW50KGNvbnN0IEludFJlY3QmIGNvbnRl
bnRSZWN0KTsKKwogICAgIHZpcnR1YWwgdm9pZCBwcm90ZWN0VmlzaWJsZVRpbGVUZXh0dXJlcygp
OwogCiAgICAgdmlydHVhbCBUZXh0dXJlTWFuYWdlciogdGV4dHVyZU1hbmFnZXIoKSBjb25zdDsK
QEAgLTg4LDE3ICs5NSwyMSBAQCBwcml2YXRlOgogICAgIHZvaWQgY3JlYXRlVGlsZXJJZk5lZWRl
ZCgpOwogICAgIHZvaWQgc2V0VGlsaW5nT3B0aW9uKFRpbGluZ09wdGlvbik7CiAKKyAgICB2b2lk
IHByZXBhcmVUb1VwZGF0ZVRpbGVzKGJvb2wgaWRsZSwgaW50IGxlZnQsIGludCB0b3AsIGludCBy
aWdodCwgaW50IGJvdHRvbSk7CisKICAgICBVcGRhdGFibGVUaWxlKiB0aWxlQXQoaW50LCBpbnQp
IGNvbnN0OwogICAgIFVwZGF0YWJsZVRpbGUqIGNyZWF0ZVRpbGUoaW50LCBpbnQpOwogCiAgICAg
Ly8gVGVtcG9yYXJ5IHN0YXRlIGhlbGQgYmV0d2VlbiBwcmVwYXJlVG9VcGRhdGUoKSBhbmQgdXBk
YXRlQ29tcG9zaXRvclJlc291cmNlcygpLgotICAgIEludFJlY3QgbV9yZXF1ZXN0ZWRVcGRhdGVS
ZWN0OworICAgIEludFJlY3QgbV9yZXF1ZXN0ZWRVcGRhdGVUaWxlc1JlY3Q7CisKICAgICAvLyBT
dGF0ZSBoZWxkIGJldHdlZW4gcHJlcGFyZVRvVXBkYXRlKCkgYW5kIHB1c2hQcm9wZXJ0aWVzVG8o
KS4gVGhpcyByZXByZXNlbnRzIHRoZSBhcmVhCiAgICAgLy8gb2YgdGhlIGxheWVyIHRoYXQgaXMg
YWN0dWFsbHkgcmUtcGFpbnRlZCBieSBXZWJLaXQuCiAgICAgSW50UmVjdCBtX3BhaW50UmVjdDsK
IAogICAgIEdDM0RlbnVtIG1fdGV4dHVyZUZvcm1hdDsKICAgICBib29sIG1fc2tpcHNEcmF3Owor
ICAgIGJvb2wgbV9za2lwc0lkbGVQYWludDsKICAgICBMYXllclRleHR1cmVVcGRhdGVyOjpPcmll
bnRhdGlvbiBtX3RleHR1cmVPcmllbnRhdGlvbjsKICAgICBMYXllclRleHR1cmVVcGRhdGVyOjpT
YW1wbGVkVGV4ZWxGb3JtYXQgbV9zYW1wbGVkVGV4ZWxGb3JtYXQ7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3QuY3BwCmluZGV4IGM4YWU2MTY5MTg4YThjYzEzZDQxMjIwMGMxZjgxMTQxN2Jh
MDk4NzkuLjQxZWNlZTZkYTUyMjdkMWZjMjkzNjhlZGE4OWFkYjBlZDAwMjJmOTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcApAQCAtMTE1LDcgKzExNSw4IEBAIHZvaWQgQ0NMYXll
clRyZWVIb3N0OjpiZWdpbkNvbW1pdE9uSW1wbFRocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKiBo
b3N0SW1wbCkKICAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwogICAgIFRSQUNF
X0VWRU5UKCJDQ0xheWVyVHJlZUhvc3Q6OmNvbW1pdFRvIiwgdGhpcywgMCk7CiAKLSAgICBjb250
ZW50c1RleHR1cmVNYW5hZ2VyKCktPnJlZHVjZU1lbW9yeVRvTGltaXQoVGV4dHVyZU1hbmFnZXI6
OnJlY2xhaW1MaW1pdEJ5dGVzKCkpOworICAgIHNpemVfdCByZWNsYWltTGltaXQgPSBUZXh0dXJl
TWFuYWdlcjo6cmVjbGFpbUxpbWl0Qnl0ZXModmlld3BvcnRTaXplKCkpOworICAgIGNvbnRlbnRz
VGV4dHVyZU1hbmFnZXIoKS0+cmVkdWNlTWVtb3J5VG9MaW1pdChyZWNsYWltTGltaXQpOwogICAg
IGNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKS0+ZGVsZXRlRXZpY3RlZFRleHR1cmVzKGhvc3RJbXBs
LT5jb250ZW50c1RleHR1cmVBbGxvY2F0b3IoKSk7CiB9CiAKQEAgLTI1Miw3ICsyNTMsNyBAQCB2
b2lkIENDTGF5ZXJUcmVlSG9zdDo6c2V0VmlzaWJsZShib29sIHZpc2libGUpCiAKICAgICBtX3Zp
c2libGUgPSB2aXNpYmxlOwogICAgIGlmICghdmlzaWJsZSkgewotICAgICAgICBtX2NvbnRlbnRz
VGV4dHVyZU1hbmFnZXItPnJlZHVjZU1lbW9yeVRvTGltaXQoVGV4dHVyZU1hbmFnZXI6Omxvd0xp
bWl0Qnl0ZXMoKSk7CisgICAgICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+cmVkdWNlTWVt
b3J5VG9MaW1pdChUZXh0dXJlTWFuYWdlcjo6bG93TGltaXRCeXRlcyh2aWV3cG9ydFNpemUoKSkp
OwogICAgICAgICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPnVucHJvdGVjdEFsbFRleHR1cmVz
KCk7CiAgICAgfQogCkBAIC0yNjUsNyArMjY2LDggQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnNl
dFZpc2libGUoYm9vbCB2aXNpYmxlKQogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmRpZEJlY29tZUlu
dmlzaWJsZU9uSW1wbFRocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKiBob3N0SW1wbCkKIHsKICAg
ICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwotICAgIGNvbnRlbnRzVGV4dHVyZU1h
bmFnZXIoKS0+cmVkdWNlTWVtb3J5VG9MaW1pdChUZXh0dXJlTWFuYWdlcjo6cmVjbGFpbUxpbWl0
Qnl0ZXMoKSk7CisgICAgc2l6ZV90IHJlY2xhaW1MaW1pdCA9IFRleHR1cmVNYW5hZ2VyOjpyZWNs
YWltTGltaXRCeXRlcyh2aWV3cG9ydFNpemUoKSk7CisgICAgY29udGVudHNUZXh0dXJlTWFuYWdl
cigpLT5yZWR1Y2VNZW1vcnlUb0xpbWl0KHJlY2xhaW1MaW1pdCk7CiAgICAgY29udGVudHNUZXh0
dXJlTWFuYWdlcigpLT5kZWxldGVFdmljdGVkVGV4dHVyZXMoaG9zdEltcGwtPmNvbnRlbnRzVGV4
dHVyZUFsbG9jYXRvcigpKTsKIH0KIApAQCAtMzMwLDEwICszMzIsMTIgQEAgdm9pZCBDQ0xheWVy
VHJlZUhvc3Q6OnVwZGF0ZUxheWVycyhMYXllckNocm9taXVtKiByb290TGF5ZXIpCiAgICAgICAg
IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmls
aXR5KHJvb3RMYXllciwgcm9vdExheWVyLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgs
IG1fdXBkYXRlTGlzdCwgcm9vdFJlbmRlclN1cmZhY2UtPmxheWVyTGlzdCgpLCBsYXllclJlbmRl
cmVyQ2FwYWJpbGl0aWVzKCkubWF4VGV4dHVyZVNpemUpOwogICAgIH0KIAotICAgIHBhaW50TGF5
ZXJDb250ZW50cyhtX3VwZGF0ZUxpc3QpOworICAgIHBhaW50TGF5ZXJDb250ZW50cyhtX3VwZGF0
ZUxpc3QsIGZhbHNlIC8qIGlkbGUgKi8pOworICAgIC8vIFRoZSBzZWNvbmQgKGlkbGUpIHBhaW50
IHdpbGwgYmUgYSBuby1vcCBpbiBsYXllcnMgd2hlcmUgcGFpbnRpbmcgYWxyZWFkeSBvY2N1cmVk
IGFib3ZlLgorICAgIHBhaW50TGF5ZXJDb250ZW50cyhtX3VwZGF0ZUxpc3QsIHRydWUgLyogaWRs
ZSAqLyk7CiB9CiAKLXZvaWQgQ0NMYXllclRyZWVIb3N0OjpwYWludE1hc2tBbmRSZXBsaWNhRm9y
UmVuZGVyU3VyZmFjZShMYXllckNocm9taXVtKiByZW5kZXJTdXJmYWNlTGF5ZXIpCit2b2lkIEND
TGF5ZXJUcmVlSG9zdDo6cGFpbnRNYXNrQW5kUmVwbGljYUZvclJlbmRlclN1cmZhY2UoTGF5ZXJD
aHJvbWl1bSogcmVuZGVyU3VyZmFjZUxheWVyLCBib29sIGlkbGUpCiB7CiAgICAgLy8gTm90ZTog
TWFza3MgYW5kIHJlcGxpY2FzIG9ubHkgZXhpc3QgZm9yIGxheWVycyB0aGF0IG93biByZW5kZXIg
c3VyZmFjZXMuIElmIHdlIHJlYWNoIHRoaXMgcG9pbnQKICAgICAvLyBpbiBjb2RlLCB3ZSBhbHJl
YWR5IGtub3cgdGhhdCBhdCBsZWFzdCBzb21ldGhpbmcgd2lsbCBiZSBkcmF3biBpbnRvIHRoaXMg
cmVuZGVyIHN1cmZhY2UsIHNvIHRoZQpAQCAtMzQyLDI0ICszNDYsMjQgQEAgdm9pZCBDQ0xheWVy
VHJlZUhvc3Q6OnBhaW50TWFza0FuZFJlcGxpY2FGb3JSZW5kZXJTdXJmYWNlKExheWVyQ2hyb21p
dW0qIHJlbmRlclMKICAgICBpZiAocmVuZGVyU3VyZmFjZUxheWVyLT5tYXNrTGF5ZXIoKSkgewog
ICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXItPm1hc2tMYXllcigpLT5zZXRMYXllclRyZWVIb3N0
KHRoaXMpOwogICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXItPm1hc2tMYXllcigpLT5zZXRWaXNp
YmxlTGF5ZXJSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgcmVuZGVyU3VyZmFjZUxheWVyLT5jb250
ZW50Qm91bmRzKCkpKTsKLSAgICAgICAgcmVuZGVyU3VyZmFjZUxheWVyLT5tYXNrTGF5ZXIoKS0+
cGFpbnRDb250ZW50c0lmRGlydHkoKTsKKyAgICAgICAgcmVuZGVyU3VyZmFjZUxheWVyLT5tYXNr
TGF5ZXIoKS0+cGFpbnRDb250ZW50c0lmRGlydHkoaWRsZSk7CiAgICAgfQogCiAgICAgTGF5ZXJD
aHJvbWl1bSogcmVwbGljYUxheWVyID0gcmVuZGVyU3VyZmFjZUxheWVyLT5yZXBsaWNhTGF5ZXIo
KTsKICAgICBpZiAocmVwbGljYUxheWVyKSB7CiAKICAgICAgICAgcmVwbGljYUxheWVyLT5zZXRM
YXllclRyZWVIb3N0KHRoaXMpOwotICAgICAgICByZXBsaWNhTGF5ZXItPnBhaW50Q29udGVudHNJ
ZkRpcnR5KCk7CisgICAgICAgIHJlcGxpY2FMYXllci0+cGFpbnRDb250ZW50c0lmRGlydHkoaWRs
ZSk7CiAKICAgICAgICAgaWYgKHJlcGxpY2FMYXllci0+bWFza0xheWVyKCkpIHsKICAgICAgICAg
ICAgIHJlcGxpY2FMYXllci0+bWFza0xheWVyKCktPnNldExheWVyVHJlZUhvc3QodGhpcyk7CiAg
ICAgICAgICAgICByZXBsaWNhTGF5ZXItPm1hc2tMYXllcigpLT5zZXRWaXNpYmxlTGF5ZXJSZWN0
KEludFJlY3QoSW50UG9pbnQoKSwgcmVwbGljYUxheWVyLT5tYXNrTGF5ZXIoKS0+Y29udGVudEJv
dW5kcygpKSk7Ci0gICAgICAgICAgICByZXBsaWNhTGF5ZXItPm1hc2tMYXllcigpLT5wYWludENv
bnRlbnRzSWZEaXJ0eSgpOworICAgICAgICAgICAgcmVwbGljYUxheWVyLT5tYXNrTGF5ZXIoKS0+
cGFpbnRDb250ZW50c0lmRGlydHkoaWRsZSk7CiAgICAgICAgIH0KICAgICB9CiB9CiAKLXZvaWQg
Q0NMYXllclRyZWVIb3N0OjpwYWludExheWVyQ29udGVudHMoY29uc3QgTGF5ZXJMaXN0JiByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0KQordm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnBhaW50TGF5ZXJDb250
ZW50cyhjb25zdCBMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGJvb2wgaWRsZSkK
IHsKICAgICBmb3IgKGludCBzdXJmYWNlSW5kZXggPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNp
emUoKSAtIDE7IHN1cmZhY2VJbmRleCA+PSAwIDsgLS1zdXJmYWNlSW5kZXgpIHsKICAgICAgICAg
TGF5ZXJDaHJvbWl1bSogcmVuZGVyU3VyZmFjZUxheWVyID0gcmVuZGVyU3VyZmFjZUxheWVyTGlz
dFtzdXJmYWNlSW5kZXhdLmdldCgpOwpAQCAtMzY4LDcgKzM3Miw3IEBAIHZvaWQgQ0NMYXllclRy
ZWVIb3N0OjpwYWludExheWVyQ29udGVudHMoY29uc3QgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0CiAgICAgICAgIEFTU0VSVChyZW5kZXJTdXJmYWNlLT5kcmF3T3BhY2l0eSgpKTsK
IAogICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXItPnNldExheWVyVHJlZUhvc3QodGhpcyk7Ci0g
ICAgICAgIHBhaW50TWFza0FuZFJlcGxpY2FGb3JSZW5kZXJTdXJmYWNlKHJlbmRlclN1cmZhY2VM
YXllcik7CisgICAgICAgIHBhaW50TWFza0FuZFJlcGxpY2FGb3JSZW5kZXJTdXJmYWNlKHJlbmRl
clN1cmZhY2VMYXllciwgaWRsZSk7CiAKICAgICAgICAgY29uc3QgTGF5ZXJMaXN0JiBsYXllckxp
c3QgPSByZW5kZXJTdXJmYWNlLT5sYXllckxpc3QoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBs
YXllckluZGV4ID0gMDsgbGF5ZXJJbmRleCA8IGxheWVyTGlzdC5zaXplKCk7ICsrbGF5ZXJJbmRl
eCkgewpAQCAtMzg0LDcgKzM4OCw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpwYWludExheWVy
Q29udGVudHMoY29uc3QgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0CiAgICAgICAg
ICAgICBBU1NFUlQobGF5ZXItPm9wYWNpdHkoKSk7CiAgICAgICAgICAgICBBU1NFUlQoIWxheWVy
LT5ib3VuZHMoKS5pc0VtcHR5KCkpOwogCi0gICAgICAgICAgICBsYXllci0+cGFpbnRDb250ZW50
c0lmRGlydHkoKTsKKyAgICAgICAgICAgIGxheWVyLT5wYWludENvbnRlbnRzSWZEaXJ0eShpZGxl
KTsKICAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKaW5kZXgg
YTc5M2NjYTI2NTdmNjE1MzMyMmFmMTI4MTI1YWEwNTNhMDEzMTEyMi4uZjZmZTg4ZTg4MTA4YmYz
MGJkYjc3MjRjMjVlODlhNDNlZTJjYTE4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgK
QEAgLTE5MSw4ICsxOTEsOCBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIHR5cGVkZWYgVmVj
dG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IExheWVyTGlzdDsKIAotICAgIHZvaWQgcGFpbnRM
YXllckNvbnRlbnRzKGNvbnN0IExheWVyTGlzdCYpOwotICAgIHZvaWQgcGFpbnRNYXNrQW5kUmVw
bGljYUZvclJlbmRlclN1cmZhY2UoTGF5ZXJDaHJvbWl1bSopOworICAgIHZvaWQgcGFpbnRMYXll
ckNvbnRlbnRzKGNvbnN0IExheWVyTGlzdCYsIGJvb2wgaWRsZVBhaW50KTsKKyAgICB2b2lkIHBh
aW50TWFza0FuZFJlcGxpY2FGb3JSZW5kZXJTdXJmYWNlKExheWVyQ2hyb21pdW0qLCBib29sIGlk
bGVQYWludCk7CiAKICAgICB2b2lkIHVwZGF0ZUxheWVycyhMYXllckNocm9taXVtKik7CiAgICAg
dm9pZCBjbGVhclBlbmRpbmdVcGRhdGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCmluZGV4IDRhNDE3OTY0NzkxM2I4ZGYw
YTY3ZjkzZTMyODY5ZjRjM2QzZTdjZjYuLjU4ZDQwYzc1MGI1ZmM5YjgzZTMyM2Y5ZmExNmQyZjY2
MzBlZGRjNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXll
clRyZWVIb3N0VGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xh
eWVyVHJlZUhvc3RUZXN0LmNwcApAQCAtOTM1LDkgKzkzNSw5IEBAIHB1YmxpYzoKICAgICBpbnQg
dXBkYXRlQ291bnQoKSB7IHJldHVybiBtX3VwZGF0ZUNvdW50OyB9CiAgICAgdm9pZCByZXNldFVw
ZGF0ZUNvdW50KCkgeyBtX3VwZGF0ZUNvdW50ID0gMDsgfQogCi0gICAgdmlydHVhbCB2b2lkIHBh
aW50Q29udGVudHNJZkRpcnR5KCkKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50c0lmRGly
dHkoYm9vbCBpZGxlUGFpbnQpCiAgICAgewotICAgICAgICBDb250ZW50TGF5ZXJDaHJvbWl1bTo6
cGFpbnRDb250ZW50c0lmRGlydHkoKTsKKyAgICAgICAgQ29udGVudExheWVyQ2hyb21pdW06OnBh
aW50Q29udGVudHNJZkRpcnR5KGlkbGVQYWludCk7CiAgICAgICAgIG1fcGFpbnRDb250ZW50c0Nv
dW50Kys7CiAgICAgfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117302</attachid>
            <date>2011-11-30 17:05:36 -0800</date>
            <delta_ts>2011-11-30 19:45:45 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72686-20111130170535.patch</filename>
            <type>text/plain</type>
            <size>27710</size>
            <attacher name="Eric Penner">epenner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxMzE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzhlN2Y5MGJlZDUyMjFj
NGQ5MTEyOTI2MzEyMzEzNmJiYmU0MjMyNy4uYWJkMDhkNDM5MGNmYjVkNzQ4OWViMDU0NjUwMGQz
NTdjY2E3NDJlMiAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDExLTExLTMwICBFcmlj
IFBlbm5lciAgPGVwZW5uZXJAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIE5lZWQg
dG8gcHJlcGFpbnQgdGlsZXMgaW4gVGlsZWRMYXllckNocm9taXVtCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjY4NgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMhKQorCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OmlkbGVQYWludENv
bnRlbnRzSWZEaXJ0eSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29u
dGVudExheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllckNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjppZGxl
UGFpbnRDb250ZW50c0lmRGlydHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1RleHR1cmVNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYW5hZ2Vy
Ojpwcm90ZWN0VGV4dHVyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
VGlsZWRMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJv
bWl1bTo6VGlsZWRMYXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJD
aHJvbWl1bTo6Y2xlYW51cFJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVy
Q2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMpOgorICAgICAgICAoV2ViQ29yZTo6
VGlsZWRMYXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGVUaWxlcyk6CisgICAgICAgIChXZWJD
b3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVUb1VwZGF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVUb1VwZGF0ZUlkbGUpOgorICAgICAgICAo
V2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjpuZWVkc0lkbGVQYWludCk6CisgICAgICAgIChX
ZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OmlkbGVQYWludFJlY3QpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnVwZGF0ZUxheWVycyk6CisgICAgICAgIChX
ZWJDb3JlOjpwYWludENvbnRlbnRzSWZEaXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
VHJlZUhvc3Q6OnBhaW50TWFza0FuZFJlcGxpY2FGb3JSZW5kZXJTdXJmYWNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6cGFpbnRMYXllckNvbnRlbnRzKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaDoKKwogMjAx
MS0xMS0yOCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CiAKICAgICAgICAg
QWRkIHN1cHBvcnQgZm9yIGtub3dpbmcgd2hlbiBhIFRyZWVFbGVtZW50IGlzIGFkZGVkIG9yIGNo
YW5nZWQgYW55d2hlcmUgaW4gYSBUcmVlT3V0bGluZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cK
aW5kZXggNzQxMzM3MjNhY2E1ZmVhNjZlYjg4OTM5MjE3MWYzZmY5ZWZlZDc4Yi4uMzQzYzkxNzRj
NjNmOThkMDVlYTliY2VhMDY0ZGRhMThhZTA1NjhiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwyMSBAQAorMjAxMS0xMS0zMCAgRXJpYyBQZW5uZXIgIDxlcGVubmVyQGdv
b2dsZS5jb20+CisKKyAgICAgICAgW2Nocm9taXVtXSBOZWVkIHRvIHByZXBhaW50IHRpbGVzIGlu
IFRpbGVkTGF5ZXJDaHJvbWl1bQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NzI2ODYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwOgorICAgICAgICAoV1RG
OjpDb250ZW50TGF5ZXJDaHJvbWl1bVdpdGhVcGRhdGVUcmFja2luZzo6aWRsZVBhaW50Q29udGVu
dHNDb3VudCk6CisgICAgICAgIChXVEY6OkNvbnRlbnRMYXllckNocm9taXVtV2l0aFVwZGF0ZVRy
YWNraW5nOjpyZXNldFBhaW50Q29udGVudHNDb3VudCk6CisgICAgICAgIChXVEY6OkNvbnRlbnRM
YXllckNocm9taXVtV2l0aFVwZGF0ZVRyYWNraW5nOjppZGxlUGFpbnRDb250ZW50c0lmRGlydHkp
OgorICAgICAgICAoV1RGOjpDb250ZW50TGF5ZXJDaHJvbWl1bVdpdGhVcGRhdGVUcmFja2luZzo6
Q29udGVudExheWVyQ2hyb21pdW1XaXRoVXBkYXRlVHJhY2tpbmcpOgorICAgICAgICAoV1RGOjpD
Q0xheWVyVHJlZUhvc3RUZXN0T3BhY2l0eUNoYW5nZTo6YWZ0ZXJUZXN0KToKKyAgICAgICAgKiB0
ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0LmNwcDoKKyAgICAgICAgKFdURjo6RmFrZVRpbGVk
TGF5ZXJDaHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlSWRsZSk6CisgICAgICAgIChXVEY6OkZha2VU
aWxlZExheWVyQ2hyb21pdW06Om5lZWRzSWRsZVBhaW50KToKKyAgICAgICAgKFdURjo6VEVTVCk6
CisKIDIwMTEtMTEtMjggIEpvbiBMZWUgIDxqb25sZWVAYXBwbGUuY29tPgogCiAgICAgICAgIFBv
c3NpYmxlIGZpeCBmb3IgdGVzdCBmYWlsdXJlcyBpbiByMTAxMzA3LgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21p
dW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVu
dExheWVyQ2hyb21pdW0uY3BwCmluZGV4IDllYjFkNzk5ZjZkOTFlY2VjNjc5ODEwNmVjNjAyN2Ji
NDFlNTI1MjAuLmY1YzdkMzhjZTNmNDU4NGNiNTNjYmMyYTEzMmNiZjZmNzBkZGJjMmYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRM
YXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTExMSw2ICsxMTEsMjAgQEAgdm9p
ZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c0lmRGlydHkoKQogICAgIHJlc2V0
TmVlZHNEaXNwbGF5KCk7CiB9CiAKK3ZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OmlkbGVQYWlu
dENvbnRlbnRzSWZEaXJ0eSgpCit7CisgICAgaWYgKCFkcmF3c0NvbnRlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0ID0gdmlzaWJsZUxheWVyUmVj
dCgpOworICAgIGlmIChsYXllclJlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBwcmVwYXJlVG9VcGRhdGVJZGxlKGxheWVyUmVjdCk7CisgICAgaWYgKG5lZWRzSWRsZVBhaW50
KGxheWVyUmVjdCkpCisgICAgICAgIHNldE5lZWRzQ29tbWl0KCk7Cit9CisKIGJvb2wgQ29udGVu
dExheWVyQ2hyb21pdW06OmRyYXdzQ29udGVudCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fZGVs
ZWdhdGUgJiYgbV9kZWxlZ2F0ZS0+ZHJhd3NDb250ZW50KCkgJiYgVGlsZWRMYXllckNocm9taXVt
OjpkcmF3c0NvbnRlbnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oCmluZGV4IGI4
MzRlNjc2YmQ2MzQ0NWFhNDUzYjM2NWVlZTI4MDI0MGYzODA5YzEuLjBjNTc0YjVkZmRjMGE1NzFi
ODExYmUwMzk3NjRhYzc1YjFjMmUzZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0u
aApAQCAtNTAsNiArNTAsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+Q29udGVudExheWVyQ2hy
b21pdW0oKTsKIAogICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzSWZEaXJ0eSgpOworICAg
IHZpcnR1YWwgdm9pZCBpZGxlUGFpbnRDb250ZW50c0lmRGlydHkoKTsKIAogcHJvdGVjdGVkOgog
ICAgIGV4cGxpY2l0IENvbnRlbnRMYXllckNocm9taXVtKENDTGF5ZXJEZWxlZ2F0ZSopOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJD
aHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJDaHJvbWl1bS5oCmluZGV4IDcxM2RmYjI1MjMwMTA4NmZmYTdlNTgxYzA0MjA0NzVlOGJkZmZi
N2QuLjRmYjlmZDI2NzhlZjQxNDU5MDQ3NjkwODZlMzBjZjIzYjU1Yzg3ZGMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNo
cm9taXVtLmgKQEAgLTE2Miw2ICsxNjIsNyBAQCBwdWJsaWM6CiAgICAgLy8gVGhlc2UgbWV0aG9k
cyB0eXBpY2FsbHkgbmVlZCB0byBiZSBvdmVyd3JpdHRlbiBieSBkZXJpdmVkIGNsYXNzZXMuCiAg
ICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAg
ICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHNJZkRpcnR5KCkgeyB9CisgICAgdmlydHVhbCB2
b2lkIGlkbGVQYWludENvbnRlbnRzSWZEaXJ0eSgpIHsgfQogICAgIHZpcnR1YWwgdm9pZCB1cGRh
dGVDb21wb3NpdG9yUmVzb3VyY2VzKEdyYXBoaWNzQ29udGV4dDNEKiwgQ0NUZXh0dXJlVXBkYXRl
ciYpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRJc01hc2soYm9vbCkgeyB9CiAgICAgdmlydHVh
bCB2b2lkIHVucmVzZXJ2ZUNvbnRlbnRzVGV4dHVyZSgpIHsgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIu
Y3BwCmluZGV4IGM2MDBkOWU2NDkxZDdkMWU3NTcyMjIxNGUzMTlkYTdmMGMxODg0Y2UuLmZmNWJj
M2UzZDc2ZWJiNTQ2Y2U5NmM4MGE5ODNlNGI0ZTk4ODVkNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdl
ci5jcHAKQEAgLTEwNiw3ICsxMDYsNiBAQCBib29sIFRleHR1cmVNYW5hZ2VyOjppc1Byb3RlY3Rl
ZChUZXh0dXJlVG9rZW4gdG9rZW4pCiB2b2lkIFRleHR1cmVNYW5hZ2VyOjpwcm90ZWN0VGV4dHVy
ZShUZXh0dXJlVG9rZW4gdG9rZW4pCiB7CiAgICAgQVNTRVJUKGhhc1RleHR1cmUodG9rZW4pKTsK
LSAgICBBU1NFUlQoIW1fdGV4dHVyZXMuZ2V0KHRva2VuKS5pc1Byb3RlY3RlZCk7CiAgICAgVGV4
dHVyZUluZm8gaW5mbyA9IG1fdGV4dHVyZXMudGFrZSh0b2tlbik7CiAgICAgaW5mby5pc1Byb3Rl
Y3RlZCA9IHRydWU7CiAgICAgbV90ZXh0dXJlcy5hZGQodG9rZW4sIGluZm8pOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNo
cm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Rp
bGVkTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggZmZhZDJmNWIxNzVjOTY2NWQ2NjU3NWJhZmNjMzli
ZmNlZTBlMWU2YS4uZjA0NzE0MDI4N2VhN2YzYTgwN2FlYzRmNzFjZjY2OGMwMTBhOTU5YSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRM
YXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCkBAIC02OSw2ICs2OSw3IEBAIFRpbGVkTGF5
ZXJDaHJvbWl1bTo6VGlsZWRMYXllckNocm9taXVtKENDTGF5ZXJEZWxlZ2F0ZSogZGVsZWdhdGUp
CiAgICAgOiBMYXllckNocm9taXVtKGRlbGVnYXRlKQogICAgICwgbV90ZXh0dXJlRm9ybWF0KEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0pCiAgICAgLCBtX3NraXBzRHJhdyhmYWxzZSkK
KyAgICAsIG1fc2tpcHNJZGxlUGFpbnQoZmFsc2UpCiAgICAgLCBtX3RleHR1cmVPcmllbnRhdGlv
bihMYXllclRleHR1cmVVcGRhdGVyOjpJbnZhbGlkT3JpZW50YXRpb24pCiAgICAgLCBtX3NhbXBs
ZWRUZXhlbEZvcm1hdChMYXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXRJbnZh
bGlkKQogICAgICwgbV90aWxpbmdPcHRpb24oQXV0b1RpbGUpCkBAIC05MCw3ICs5MSw3IEBAIHZv
aWQgVGlsZWRMYXllckNocm9taXVtOjpjbGVhbnVwUmVzb3VyY2VzKCkKIAogICAgIG1fdGlsZXIu
Y2xlYXIoKTsKICAgICBtX3BhaW50UmVjdCA9IEludFJlY3QoKTsKLSAgICBtX3JlcXVlc3RlZFVw
ZGF0ZVJlY3QgPSBJbnRSZWN0KCk7CisgICAgbV9yZXF1ZXN0ZWRVcGRhdGVUaWxlc1JlY3QgPSBJ
bnRSZWN0KCk7CiB9CiAKIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjp1cGRhdGVUaWxlU2l6ZUFu
ZFRpbGluZ09wdGlvbigpCkBAIC0xNzIsMTEgKzE3MywxMyBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJv
bWl1bTo6Y3JlYXRlVGlsZXIoQ0NMYXllclRpbGluZ0RhdGE6OkJvcmRlclRleGVsT3B0aW9uIGJv
cmRlcgogdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMo
R3JhcGhpY3NDb250ZXh0M0QqLCBDQ1RleHR1cmVVcGRhdGVyJiB1cGRhdGVyKQogewogICAgIC8v
IFBhaW50aW5nIGNvdWxkIGNhdXNlIGNvbXBvc2l0aW5nIHRvIGdldCB0dXJuZWQgb2ZmLCB3aGlj
aCBtYXkgY2F1c2UgdGhlIHRpbGVyIHRvIGJlY29tZSBpbnZhbGlkYXRlZCBtaWQtdXBkYXRlLgot
ICAgIGlmIChtX3NraXBzRHJhdyB8fCBtX3JlcXVlc3RlZFVwZGF0ZVJlY3QuaXNFbXB0eSgpIHx8
ICFtX3RpbGVyLT5udW1UaWxlcygpKQorICAgIGlmIChtX3NraXBzRHJhdyB8fCBtX3JlcXVlc3Rl
ZFVwZGF0ZVRpbGVzUmVjdC5pc0VtcHR5KCkgfHwgIW1fdGlsZXItPm51bVRpbGVzKCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGludCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b207Ci0gICAgbV90
aWxlci0+Y29udGVudFJlY3RUb1RpbGVJbmRpY2VzKG1fcmVxdWVzdGVkVXBkYXRlUmVjdCwgbGVm
dCwgdG9wLCByaWdodCwgYm90dG9tKTsKKyAgICBpbnQgbGVmdCA9IG1fcmVxdWVzdGVkVXBkYXRl
VGlsZXNSZWN0LngoKTsKKyAgICBpbnQgdG9wID0gbV9yZXF1ZXN0ZWRVcGRhdGVUaWxlc1JlY3Qu
eSgpOworICAgIGludCByaWdodCA9IG1fcmVxdWVzdGVkVXBkYXRlVGlsZXNSZWN0Lm1heFgoKSAt
IDE7CisgICAgaW50IGJvdHRvbSA9IG1fcmVxdWVzdGVkVXBkYXRlVGlsZXNSZWN0Lm1heFkoKSAt
IDE7CiAgICAgZm9yIChpbnQgaiA9IHRvcDsgaiA8PSBib3R0b207ICsraikgewogICAgICAgICBm
b3IgKGludCBpID0gbGVmdDsgaSA8PSByaWdodDsgKytpKSB7CiAgICAgICAgICAgICBVcGRhdGFi
bGVUaWxlKiB0aWxlID0gdGlsZUF0KGksIGopOwpAQCAtMzM0LDMyICszMzcsMTEgQEAgdm9pZCBU
aWxlZExheWVyQ2hyb21pdW06OnByb3RlY3RUaWxlVGV4dHVyZXMoY29uc3QgSW50UmVjdCYgY29u
dGVudFJlY3QpCiAgICAgfQogfQogCi12b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJlcGFyZVRv
VXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQordm9pZCBUaWxlZExheWVyQ2hyb21p
dW06OnByZXBhcmVUb1VwZGF0ZVRpbGVzKGJvb2wgaWRsZSwgaW50IGxlZnQsIGludCB0b3AsIGlu
dCByaWdodCwgaW50IGJvdHRvbSkKIHsKLSAgICBpZiAoIW1fdGlsZXIpCi0gICAgICAgIGNyZWF0
ZVRpbGVyKGlzTm9uQ29tcG9zaXRlZENvbnRlbnQoKSA/IENDTGF5ZXJUaWxpbmdEYXRhOjpOb0Jv
cmRlclRleGVscyA6IENDTGF5ZXJUaWxpbmdEYXRhOjpIYXNCb3JkZXJUZXhlbHMpOwotCi0gICAg
QVNTRVJUKG1fdGlsZXIpOwotCi0gICAgbV9za2lwc0RyYXcgPSBmYWxzZTsKLQotICAgIGlmIChj
b250ZW50UmVjdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9yZXF1ZXN0ZWRVcGRhdGVSZWN0ID0g
SW50UmVjdCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV90aWxlci0+Z3Jvd0xh
eWVyVG9Db250YWluKGNvbnRlbnRSZWN0KTsKLQotICAgIGlmICghbV90aWxlci0+bnVtVGlsZXMo
KSkgewotICAgICAgICBtX3JlcXVlc3RlZFVwZGF0ZVJlY3QgPSBJbnRSZWN0KCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KICAgICAvLyBDcmVhdGUgdGlsZXMgYXMgbmVlZGVkLCBleHBhbmRp
bmcgYSBkaXJ0eSByZWN0IHRvIGNvbnRhaW4gYWxsCiAgICAgLy8gdGhlIGRpcnR5IHJlZ2lvbnMg
Y3VycmVudGx5IGJlaW5nIGRyYXduLgogICAgIEludFJlY3QgZGlydHlMYXllclJlY3Q7Ci0gICAg
aW50IGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbTsKLSAgICBtX3RpbGVyLT5jb250ZW50UmVjdFRv
VGlsZUluZGljZXMoY29udGVudFJlY3QsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CiAgICAg
Zm9yIChpbnQgaiA9IHRvcDsgaiA8PSBib3R0b207ICsraikgewogICAgICAgICBmb3IgKGludCBp
ID0gbGVmdDsgaSA8PSByaWdodDsgKytpKSB7CiAgICAgICAgICAgICBVcGRhdGFibGVUaWxlKiB0
aWxlID0gdGlsZUF0KGksIGopOwpAQCAtMzcwLDggKzM1MiwxMSBAQCB2b2lkIFRpbGVkTGF5ZXJD
aHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQogICAg
ICAgICAgICAgICAgIHRpbGUtPm1fZGlydHlMYXllclJlY3QgPSBtX3RpbGVyLT50aWxlTGF5ZXJS
ZWN0KHRpbGUpOwogCiAgICAgICAgICAgICBpZiAoIXRpbGUtPnRleHR1cmUoKS0+cmVzZXJ2ZSht
X3RpbGVyLT50aWxlU2l6ZSgpLCBtX3RleHR1cmVGb3JtYXQpKSB7Ci0gICAgICAgICAgICAgICAg
bV9za2lwc0RyYXcgPSB0cnVlOwotICAgICAgICAgICAgICAgIGNsZWFudXBSZXNvdXJjZXMoKTsK
KyAgICAgICAgICAgICAgICBtX3NraXBzSWRsZVBhaW50ID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICBpZiAoIWlkbGUpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9za2lwc0RyYXcgPSB0cnVlOwor
ICAgICAgICAgICAgICAgICAgICBjbGVhbnVwUmVzb3VyY2VzKCk7CisgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIApAQCAtMzc5LDE1ICsz
NjQsMTYgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVUb1VwZGF0ZShjb25zdCBJ
bnRSZWN0JiBjb250ZW50UmVjdCkKICAgICAgICAgfQogICAgIH0KIAotICAgIC8vIER1ZSB0byBi
b3JkZXJzLCB3aGVuIHRoZSBwYWludCByZWN0IGlzIGV4dGVuZGVkIHRvIHRpbGUgYm91bmRhcmll
cywgaXQKLSAgICAvLyBtYXkgZW5kIHVwIG92ZXJsYXBwaW5nIG1vcmUgdGlsZXMgdGhhbiB0aGUg
b3JpZ2luYWwgY29udGVudCByZWN0LiBSZWNvcmQKLSAgICAvLyB0aGF0IG9yaWdpbmFsIHJlY3Qg
c28gd2UgZG9uJ3QgdXBsb2FkIG1vcmUgdGlsZXMgdGhhbiBuZWNlc3NhcnkuCi0gICAgbV9yZXF1
ZXN0ZWRVcGRhdGVSZWN0ID0gY29udGVudFJlY3Q7Ci0KICAgICBtX3BhaW50UmVjdCA9IG1fdGls
ZXItPmxheWVyUmVjdFRvQ29udGVudFJlY3QoZGlydHlMYXllclJlY3QpOwogICAgIGlmIChkaXJ0
eUxheWVyUmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIC8vIER1ZSB0byBi
b3JkZXJzLCB3aGVuIHRoZSBwYWludCByZWN0IGlzIGV4dGVuZGVkIHRvIHRpbGUgYm91bmRhcmll
cywgaXQKKyAgICAvLyBtYXkgZW5kIHVwIG92ZXJsYXBwaW5nIG1vcmUgdGlsZXMgdGhhbiB0aGUg
b3JpZ2luYWwgY29udGVudCByZWN0LiBSZWNvcmQKKyAgICAvLyB0aGUgb3JpZ2luYWwgdGlsZXMg
c28gd2UgZG9uJ3QgdXBsb2FkIG1vcmUgdGlsZXMgdGhhbiBuZWNlc3NhcnkuCisgICAgaWYgKCFt
X3BhaW50UmVjdC5pc0VtcHR5KCkpCisgICAgICAgIG1fcmVxdWVzdGVkVXBkYXRlVGlsZXNSZWN0
ID0gSW50UmVjdChsZWZ0LCB0b3AsIHJpZ2h0IC0gbGVmdCArIDEsIGJvdHRvbSAtIHRvcCArIDEp
OworCiAgICAgLy8gQ2FsbGluZyBwcmVwYXJlVG9VcGRhdGUoKSBjYWxscyBpbnRvIFdlYktpdCB0
byBwYWludCwgd2hpY2ggbWF5IGhhdmUgdGhlIHNpZGUKICAgICAvLyBlZmZlY3Qgb2YgZGlzYWJs
aW5nIGNvbXBvc2l0aW5nLCB3aGljaCBjYXVzZXMgb3VyIHJlZmVyZW5jZSB0byB0aGUgdGV4dHVy
ZSB1cGRhdGVyIHRvIGJlIGRlbGV0ZWQuCiAgICAgLy8gSG93ZXZlciwgd2UgY2FuJ3QgZnJlZSB0
aGUgbWVtb3J5IGJhY2tpbmcgdGhlIEdyYXBoaWNzQ29udGV4dCB1bnRpbCB0aGUgcGFpbnQgZmlu
aXNoZXMsCkBAIC0zOTYsNSArMzgyLDEyMCBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJl
cGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQogICAgIHRleHR1cmVVcGRh
dGVyKCktPnByZXBhcmVUb1VwZGF0ZShtX3BhaW50UmVjdCwgbV90aWxlci0+dGlsZVNpemUoKSwg
bV90aWxlci0+aGFzQm9yZGVyVGV4ZWxzKCksIGNvbnRlbnRzU2NhbGUoKSk7CiB9CiAKKwordm9p
ZCBUaWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250
ZW50UmVjdCkKK3sKKyAgICBpZiAoIW1fdGlsZXIpCisgICAgICAgIGNyZWF0ZVRpbGVyKGlzTm9u
Q29tcG9zaXRlZENvbnRlbnQoKSA/IENDTGF5ZXJUaWxpbmdEYXRhOjpOb0JvcmRlclRleGVscyA6
IENDTGF5ZXJUaWxpbmdEYXRhOjpIYXNCb3JkZXJUZXhlbHMpOworCisgICAgQVNTRVJUKG1fdGls
ZXIpOworCisgICAgbV9za2lwc0RyYXcgPSBmYWxzZTsKKyAgICBtX3NraXBzSWRsZVBhaW50ID0g
ZmFsc2U7CisgICAgbV9yZXF1ZXN0ZWRVcGRhdGVUaWxlc1JlY3QgPSBJbnRSZWN0KCk7CisgICAg
bV9wYWludFJlY3QgPSBJbnRSZWN0KCk7CisKKyAgICBpZiAoY29udGVudFJlY3QuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX3RpbGVyLT5ncm93TGF5ZXJUb0NvbnRhaW4oY29u
dGVudFJlY3QpOworCisgICAgaWYgKCFtX3RpbGVyLT5udW1UaWxlcygpKQorICAgICAgICByZXR1
cm47CisKKyAgICBpbnQgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tOworICAgIG1fdGlsZXItPmNv
bnRlbnRSZWN0VG9UaWxlSW5kaWNlcyhjb250ZW50UmVjdCwgbGVmdCwgdG9wLCByaWdodCwgYm90
dG9tKTsKKworICAgIHByZXBhcmVUb1VwZGF0ZVRpbGVzKGZhbHNlLCBsZWZ0LCB0b3AsIHJpZ2h0
LCBib3R0b20pOworfQorCit2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRl
SWRsZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKK3sKKyAgICBBU1NFUlQobV90aWxlcik7
CisKKyAgICAvLyBBYm9ydCBpZiB3ZSBoYXZlIGFscmVhZHkgcHJlcGFyZWQgYSBwYWludCBvciBy
dW4gb3V0IG9mIG1lbW9yeS4KKyAgICBpZiAobV9za2lwc0lkbGVQYWludCB8fCAhbV9wYWludFJl
Y3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBJbnRSZWN0IGlkbGVQYWludENv
bnRlbnRSZWN0ID0gaWRsZVBhaW50UmVjdChjb250ZW50UmVjdCk7CisgICAgbV90aWxlci0+Z3Jv
d0xheWVyVG9Db250YWluKGlkbGVQYWludENvbnRlbnRSZWN0KTsKKworICAgIGlmICghbV90aWxl
ci0+bnVtVGlsZXMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gUHJvdGVjdCBhbnkgdGV4
dHVyZXMgaW4gdGhlIHByZS1wYWludCBhcmVhIHNvIHdlIGRvbid0IGVuZCB1cCBqdXN0CisgICAg
Ly8gcmVjbGFpbWluZyB0aGVtIGJlbG93LgorICAgIHByb3RlY3RUaWxlVGV4dHVyZXMoaWRsZVBh
aW50Q29udGVudFJlY3QpOworCisgICAgLy8gRXhwYW5kIG91dHdhcmRzIHVudGlsIHdlIGZpbmQg
YSBkaXJ0eSByb3cgb3IgY29sdW1uIHRvIHVwZGF0ZS4KKyAgICBpbnQgbGVmdCwgdG9wLCByaWdo
dCwgYm90dG9tOworICAgIG1fdGlsZXItPmNvbnRlbnRSZWN0VG9UaWxlSW5kaWNlcyhjb250ZW50
UmVjdCwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKKyAgICBpbnQgcHJlcGFpbnRMZWZ0LCBw
cmVwYWludFRvcCwgcHJlcGFpbnRSaWdodCwgcHJlcGFpbnRCb3R0b207CisgICAgbV90aWxlci0+
Y29udGVudFJlY3RUb1RpbGVJbmRpY2VzKGlkbGVQYWludENvbnRlbnRSZWN0LCBwcmVwYWludExl
ZnQsIHByZXBhaW50VG9wLCBwcmVwYWludFJpZ2h0LCBwcmVwYWludEJvdHRvbSk7CisgICAgd2hp
bGUgKCFtX3NraXBzSWRsZVBhaW50ICYmIChsZWZ0ID4gcHJlcGFpbnRMZWZ0IHx8IHRvcCA+IHBy
ZXBhaW50VG9wIHx8IHJpZ2h0IDwgcHJlcGFpbnRSaWdodCB8fCBib3R0b20gPCBwcmVwYWludEJv
dHRvbSkpIHsKKyAgICAgICAgaWYgKGJvdHRvbSA8IHByZXBhaW50Qm90dG9tKSB7CisgICAgICAg
ICAgICArK2JvdHRvbTsKKyAgICAgICAgICAgIHByZXBhcmVUb1VwZGF0ZVRpbGVzKHRydWUsIGxl
ZnQsIGJvdHRvbSwgcmlnaHQsIGJvdHRvbSk7CisgICAgICAgICAgICBpZiAoIW1fcGFpbnRSZWN0
LmlzRW1wdHkoKSB8fCBtX3NraXBzSWRsZVBhaW50KQorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGlmICh0b3AgPiBwcmVwYWludFRvcCkgeworICAgICAgICAgICAg
LS10b3A7CisgICAgICAgICAgICBwcmVwYXJlVG9VcGRhdGVUaWxlcyh0cnVlLCBsZWZ0LCB0b3As
IHJpZ2h0LCB0b3ApOworICAgICAgICAgICAgaWYgKCFtX3BhaW50UmVjdC5pc0VtcHR5KCkgfHwg
bV9za2lwc0lkbGVQYWludCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBpZiAobGVmdCA+IHByZXBhaW50TGVmdCkgeworICAgICAgICAgICAgLS1sZWZ0OworICAg
ICAgICAgICAgcHJlcGFyZVRvVXBkYXRlVGlsZXModHJ1ZSwgbGVmdCwgdG9wLCBsZWZ0LCBib3R0
b20pOworICAgICAgICAgICAgaWYgKCFtX3BhaW50UmVjdC5pc0VtcHR5KCkgfHwgbV9za2lwc0lk
bGVQYWludCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAo
cmlnaHQgPCBwcmVwYWludFJpZ2h0KSB7CisgICAgICAgICAgICArK3JpZ2h0OworICAgICAgICAg
ICAgcHJlcGFyZVRvVXBkYXRlVGlsZXModHJ1ZSwgcmlnaHQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7
CisgICAgICAgICAgICBpZiAoIW1fcGFpbnRSZWN0LmlzRW1wdHkoKSB8fCBtX3NraXBzSWRsZVBh
aW50KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQorCitib29s
IFRpbGVkTGF5ZXJDaHJvbWl1bTo6bmVlZHNJZGxlUGFpbnQoY29uc3QgSW50UmVjdCYgY29udGVu
dFJlY3QpCit7CisgICAgaWYgKG1fc2tpcHNJZGxlUGFpbnQpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIEFTU0VSVChtX3RpbGVyKTsKKworICAgIEludFJlY3QgaWRsZVBhaW50Q29udGVu
dFJlY3QgPSBpZGxlUGFpbnRSZWN0KGNvbnRlbnRSZWN0KTsKKworICAgIGludCBsZWZ0LCB0b3As
IHJpZ2h0LCBib3R0b207CisgICAgbV90aWxlci0+Y29udGVudFJlY3RUb1RpbGVJbmRpY2VzKGlk
bGVQYWludENvbnRlbnRSZWN0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworICAgIGZvciAo
aW50IGogPSB0b3A7IGogPD0gYm90dG9tOyArK2opIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IGxl
ZnQ7IGkgPD0gcmlnaHQ7ICsraSkgeworICAgICAgICAgICAgaWYgKG1fcmVxdWVzdGVkVXBkYXRl
VGlsZXNSZWN0LmNvbnRhaW5zKEludFBvaW50KGksIGopKSkKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIFVwZGF0YWJsZVRpbGUqIHRpbGUgPSB0aWxlQXQoaSwgaik7Cisg
ICAgICAgICAgICBpZiAoIXRpbGUgfHwgIXRpbGUtPnRleHR1cmUoKS0+aXNWYWxpZChtX3RpbGVy
LT50aWxlU2l6ZSgpLCBtX3RleHR1cmVGb3JtYXQpIHx8IHRpbGUtPmlzRGlydHkoKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK0ludFJlY3QgVGlsZWRMYXllckNocm9taXVtOjppZGxlUGFpbnRSZWN0KGNvbnN0
IEludFJlY3QmIHZpc2libGVDb250ZW50UmVjdCkKK3sKKyAgICBBU1NFUlQobV90aWxlcik7Cisg
ICAgSW50UmVjdCBwcmVwYWludFJlY3QgPSB2aXNpYmxlQ29udGVudFJlY3Q7CisgICAgLy8gRklY
TUU6IFRoaXMgY2FuIGJlIG1hZGUgYSBsb3QgbGFyZ2VyIGlmIHdlIGNhbjoKKyAgICAvLyAtIHJl
c2VydmUgbWVtb3J5IGF0IGEgbG93ZXIgcHJpb3JpdHkgdGhhbiBmb3IgdmlzaWJsZSBjb250ZW50
CisgICAgLy8gLSBvbmx5IHJlc2VydmUgaWRsZSBwYWludCB0aWxlcyB1cCB0byBhIG1lbW9yeSBy
ZWNsYWltIHRocmVzaG9sZCBhbmQKKyAgICAvLyAtIGluc3VyZSB3ZSBwbGF5IG5pY2VseSB3aXRo
IG90aGVyIGxheWVycworICAgIHByZXBhaW50UmVjdC5pbmZsYXRlWChtX3RpbGVyLT50aWxlU2l6
ZSgpLndpZHRoKCkpOworICAgIHByZXBhaW50UmVjdC5pbmZsYXRlWShtX3RpbGVyLT50aWxlU2l6
ZSgpLmhlaWdodCgpKTsKKyAgICBwcmVwYWludFJlY3QuaW50ZXJzZWN0KEludFJlY3QoSW50UG9p
bnQ6Onplcm8oKSwgY29udGVudEJvdW5kcygpKSk7CisgICAgcmV0dXJuIHByZXBhaW50UmVjdDsK
K30KKwogfQogI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJD
aHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGls
ZWRMYXllckNocm9taXVtLmgKaW5kZXggMzYzZGE2MTg1ODAyZWVkYzc0ZjUxNTJhZTQ5ZjM4N2M5
MmRjMGY4ZS4uM2EwNWRlNDEzMzI4MGI0MTc5MTQyYWUxZGRmMDY5ZDIyYmU1OTZjMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXll
ckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vVGlsZWRMYXllckNocm9taXVtLmgKQEAgLTczLDkgKzczLDE2IEBAIHByb3RlY3RlZDoKIAog
ICAgIC8vIFNldCBpbnZhbGlkYXRpb25zIHRvIGJlIHBvdGVudGlhbGx5IHJlcGFpbnRlZCBkdXJp
bmcgdXBkYXRlKCkuCiAgICAgdm9pZCBpbnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0JiBjb250
ZW50UmVjdCk7CisKICAgICAvLyBQcmVwYXJlIGRhdGEgbmVlZGVkIHRvIHVwZGF0ZSB0ZXh0dXJl
cyB0aGF0IGludGVyc2VjdCB3aXRoIGNvbnRlbnRSZWN0LgogICAgIHZvaWQgcHJlcGFyZVRvVXBk
YXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KTsKIAorICAgIC8vIFNhbWUgYXMgYWJvdmUs
IGJ1dCB0aGlzIHdpbGwgdHJ5IHRvIHBhaW50IGFkZGl0aW9uYWwgc3Vycm91bmRpbmcgY29udGVu
dCBpZiBpZGxlLgorICAgIHZvaWQgcHJlcGFyZVRvVXBkYXRlSWRsZShjb25zdCBJbnRSZWN0JiBj
b250ZW50UmVjdCk7CisKKyAgICAvLyBBZnRlciBwcmVwYXJpbmcgYW4gdXBkYXRlLCByZXR1cm5z
IHRydWUgaWYgbW9yZSBwcmUtcGFpbnRpbmcgaXMgbmVlZGVkLgorICAgIGJvb2wgbmVlZHNJZGxl
UGFpbnQoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpOworCiAgICAgdmlydHVhbCB2b2lkIHBy
b3RlY3RWaXNpYmxlVGlsZVRleHR1cmVzKCk7CiAKICAgICB2aXJ0dWFsIFRleHR1cmVNYW5hZ2Vy
KiB0ZXh0dXJlTWFuYWdlcigpIGNvbnN0OwpAQCAtODgsMTcgKzk1LDIyIEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBjcmVhdGVUaWxlcklmTmVlZGVkKCk7CiAgICAgdm9pZCBzZXRUaWxpbmdPcHRpb24o
VGlsaW5nT3B0aW9uKTsKIAorICAgIHZvaWQgcHJlcGFyZVRvVXBkYXRlVGlsZXMoYm9vbCBpZGxl
LCBpbnQgbGVmdCwgaW50IHRvcCwgaW50IHJpZ2h0LCBpbnQgYm90dG9tKTsKKyAgICBJbnRSZWN0
IGlkbGVQYWludFJlY3QoY29uc3QgSW50UmVjdCYgdmlzaWJsZUNvbnRlbnRSZWN0KTsKKwogICAg
IFVwZGF0YWJsZVRpbGUqIHRpbGVBdChpbnQsIGludCkgY29uc3Q7CiAgICAgVXBkYXRhYmxlVGls
ZSogY3JlYXRlVGlsZShpbnQsIGludCk7CiAKICAgICAvLyBUZW1wb3Jhcnkgc3RhdGUgaGVsZCBi
ZXR3ZWVuIHByZXBhcmVUb1VwZGF0ZSgpIGFuZCB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKCku
Ci0gICAgSW50UmVjdCBtX3JlcXVlc3RlZFVwZGF0ZVJlY3Q7CisgICAgSW50UmVjdCBtX3JlcXVl
c3RlZFVwZGF0ZVRpbGVzUmVjdDsKKwogICAgIC8vIFN0YXRlIGhlbGQgYmV0d2VlbiBwcmVwYXJl
VG9VcGRhdGUoKSBhbmQgcHVzaFByb3BlcnRpZXNUbygpLiBUaGlzIHJlcHJlc2VudHMgdGhlIGFy
ZWEKICAgICAvLyBvZiB0aGUgbGF5ZXIgdGhhdCBpcyBhY3R1YWxseSByZS1wYWludGVkIGJ5IFdl
YktpdC4KICAgICBJbnRSZWN0IG1fcGFpbnRSZWN0OwogCiAgICAgR0MzRGVudW0gbV90ZXh0dXJl
Rm9ybWF0OwogICAgIGJvb2wgbV9za2lwc0RyYXc7CisgICAgYm9vbCBtX3NraXBzSWRsZVBhaW50
OwogICAgIExheWVyVGV4dHVyZVVwZGF0ZXI6Ok9yaWVudGF0aW9uIG1fdGV4dHVyZU9yaWVudGF0
aW9uOwogICAgIExheWVyVGV4dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZvcm1hdCBtX3NhbXBs
ZWRUZXhlbEZvcm1hdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggNmM4
ZGE0NjFhY2QxNzQxMGExMDI1ZTg5MzI1NGVkYWMwMTE3M2VmNi4uZmYzZmJjMzVkMjljZGUwZmI1
M2U5NmU1ZWZlNTg0MTY3ZDRhZTQ0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3Bw
CkBAIC0zMzUsMTAgKzMzNSwyMSBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6dXBkYXRlTGF5ZXJz
KExheWVyQ2hyb21pdW0qIHJvb3RMYXllcikKICAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9u
OjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocm9vdExheWVyLCByb290TGF5
ZXIsIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgbV91cGRhdGVMaXN0LCByb290UmVu
ZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCksIGxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS5tYXhU
ZXh0dXJlU2l6ZSk7CiAgICAgfQogCi0gICAgcGFpbnRMYXllckNvbnRlbnRzKG1fdXBkYXRlTGlz
dCk7CisgICAgcGFpbnRMYXllckNvbnRlbnRzKG1fdXBkYXRlTGlzdCwgZmFsc2UgLyogaWRsZSAq
Lyk7CisgICAgLy8gVGhlIHNlY29uZCAoaWRsZSkgcGFpbnQgd2lsbCBiZSBhIG5vLW9wIGluIGxh
eWVycyB3aGVyZSBwYWludGluZyBhbHJlYWR5IG9jY3VyZWQgYWJvdmUuCisgICAgcGFpbnRMYXll
ckNvbnRlbnRzKG1fdXBkYXRlTGlzdCwgdHJ1ZSAvKiBpZGxlICovKTsKIH0KIAotdm9pZCBDQ0xh
eWVyVHJlZUhvc3Q6OnBhaW50TWFza0FuZFJlcGxpY2FGb3JSZW5kZXJTdXJmYWNlKExheWVyQ2hy
b21pdW0qIHJlbmRlclN1cmZhY2VMYXllcikKK3ZvaWQgcGFpbnRDb250ZW50c0lmRGlydHkoTGF5
ZXJDaHJvbWl1bSogbGF5ZXIsIGJvb2wgaWRsZSkKK3sKKyAgICBBU1NFUlQobGF5ZXIpOworICAg
IGlmICghaWRsZSkKKyAgICAgICAgbGF5ZXItPnBhaW50Q29udGVudHNJZkRpcnR5KCk7CisgICAg
ZWxzZQorICAgICAgICBsYXllci0+aWRsZVBhaW50Q29udGVudHNJZkRpcnR5KCk7Cit9CisKK3Zv
aWQgQ0NMYXllclRyZWVIb3N0OjpwYWludE1hc2tBbmRSZXBsaWNhRm9yUmVuZGVyU3VyZmFjZShM
YXllckNocm9taXVtKiByZW5kZXJTdXJmYWNlTGF5ZXIsIGJvb2wgaWRsZSkKIHsKICAgICAvLyBO
b3RlOiBNYXNrcyBhbmQgcmVwbGljYXMgb25seSBleGlzdCBmb3IgbGF5ZXJzIHRoYXQgb3duIHJl
bmRlciBzdXJmYWNlcy4gSWYgd2UgcmVhY2ggdGhpcyBwb2ludAogICAgIC8vIGluIGNvZGUsIHdl
IGFscmVhZHkga25vdyB0aGF0IGF0IGxlYXN0IHNvbWV0aGluZyB3aWxsIGJlIGRyYXduIGludG8g
dGhpcyByZW5kZXIgc3VyZmFjZSwgc28gdGhlCkBAIC0zNDcsMjQgKzM1OCwyNCBAQCB2b2lkIEND
TGF5ZXJUcmVlSG9zdDo6cGFpbnRNYXNrQW5kUmVwbGljYUZvclJlbmRlclN1cmZhY2UoTGF5ZXJD
aHJvbWl1bSogcmVuZGVyUwogICAgIGlmIChyZW5kZXJTdXJmYWNlTGF5ZXItPm1hc2tMYXllcigp
KSB7CiAgICAgICAgIHJlbmRlclN1cmZhY2VMYXllci0+bWFza0xheWVyKCktPnNldExheWVyVHJl
ZUhvc3QodGhpcyk7CiAgICAgICAgIHJlbmRlclN1cmZhY2VMYXllci0+bWFza0xheWVyKCktPnNl
dFZpc2libGVMYXllclJlY3QoSW50UmVjdChJbnRQb2ludCgpLCByZW5kZXJTdXJmYWNlTGF5ZXIt
PmNvbnRlbnRCb3VuZHMoKSkpOwotICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXItPm1hc2tMYXll
cigpLT5wYWludENvbnRlbnRzSWZEaXJ0eSgpOworICAgICAgICBwYWludENvbnRlbnRzSWZEaXJ0
eShyZW5kZXJTdXJmYWNlTGF5ZXItPm1hc2tMYXllcigpLCBpZGxlKTsKICAgICB9CiAKICAgICBM
YXllckNocm9taXVtKiByZXBsaWNhTGF5ZXIgPSByZW5kZXJTdXJmYWNlTGF5ZXItPnJlcGxpY2FM
YXllcigpOwogICAgIGlmIChyZXBsaWNhTGF5ZXIpIHsKIAogICAgICAgICByZXBsaWNhTGF5ZXIt
PnNldExheWVyVHJlZUhvc3QodGhpcyk7Ci0gICAgICAgIHJlcGxpY2FMYXllci0+cGFpbnRDb250
ZW50c0lmRGlydHkoKTsKKyAgICAgICAgcGFpbnRDb250ZW50c0lmRGlydHkocmVwbGljYUxheWVy
LCBpZGxlKTsKIAogICAgICAgICBpZiAocmVwbGljYUxheWVyLT5tYXNrTGF5ZXIoKSkgewogICAg
ICAgICAgICAgcmVwbGljYUxheWVyLT5tYXNrTGF5ZXIoKS0+c2V0TGF5ZXJUcmVlSG9zdCh0aGlz
KTsKICAgICAgICAgICAgIHJlcGxpY2FMYXllci0+bWFza0xheWVyKCktPnNldFZpc2libGVMYXll
clJlY3QoSW50UmVjdChJbnRQb2ludCgpLCByZXBsaWNhTGF5ZXItPm1hc2tMYXllcigpLT5jb250
ZW50Qm91bmRzKCkpKTsKLSAgICAgICAgICAgIHJlcGxpY2FMYXllci0+bWFza0xheWVyKCktPnBh
aW50Q29udGVudHNJZkRpcnR5KCk7CisgICAgICAgICAgICBwYWludENvbnRlbnRzSWZEaXJ0eShy
ZXBsaWNhTGF5ZXItPm1hc2tMYXllcigpLCBpZGxlKTsKICAgICAgICAgfQogICAgIH0KIH0KIAot
dm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnBhaW50TGF5ZXJDb250ZW50cyhjb25zdCBMYXllckxpc3Qm
IHJlbmRlclN1cmZhY2VMYXllckxpc3QpCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6cGFpbnRMYXll
ckNvbnRlbnRzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgYm9vbCBp
ZGxlKQogewogICAgIGZvciAoaW50IHN1cmZhY2VJbmRleCA9IHJlbmRlclN1cmZhY2VMYXllckxp
c3Quc2l6ZSgpIC0gMTsgc3VyZmFjZUluZGV4ID49IDAgOyAtLXN1cmZhY2VJbmRleCkgewogICAg
ICAgICBMYXllckNocm9taXVtKiByZW5kZXJTdXJmYWNlTGF5ZXIgPSByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0W3N1cmZhY2VJbmRleF0uZ2V0KCk7CkBAIC0zNzMsNyArMzg0LDcgQEAgdm9pZCBDQ0xh
eWVyVHJlZUhvc3Q6OnBhaW50TGF5ZXJDb250ZW50cyhjb25zdCBMYXllckxpc3QmIHJlbmRlclN1
cmZhY2VMYXllckxpc3QKICAgICAgICAgQVNTRVJUKHJlbmRlclN1cmZhY2UtPmRyYXdPcGFjaXR5
KCkpOwogCiAgICAgICAgIHJlbmRlclN1cmZhY2VMYXllci0+c2V0TGF5ZXJUcmVlSG9zdCh0aGlz
KTsKLSAgICAgICAgcGFpbnRNYXNrQW5kUmVwbGljYUZvclJlbmRlclN1cmZhY2UocmVuZGVyU3Vy
ZmFjZUxheWVyKTsKKyAgICAgICAgcGFpbnRNYXNrQW5kUmVwbGljYUZvclJlbmRlclN1cmZhY2Uo
cmVuZGVyU3VyZmFjZUxheWVyLCBpZGxlKTsKIAogICAgICAgICBjb25zdCBMYXllckxpc3QmIGxh
eWVyTGlzdCA9IHJlbmRlclN1cmZhY2UtPmxheWVyTGlzdCgpOwogICAgICAgICBmb3IgKHVuc2ln
bmVkIGxheWVySW5kZXggPSAwOyBsYXllckluZGV4IDwgbGF5ZXJMaXN0LnNpemUoKTsgKytsYXll
ckluZGV4KSB7CkBAIC0zODYsMTAgKzM5NywxNCBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6cGFp
bnRMYXllckNvbnRlbnRzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdAog
CiAgICAgICAgICAgICBsYXllci0+c2V0TGF5ZXJUcmVlSG9zdCh0aGlzKTsKIAorICAgICAgICAg
ICAgLy8gUHJpbWFyeSBwYWludCBjb3VsZCBoYXZlIHNldCBvcGFjaXR5IHRvIHplcm8uIFNraXAg
aWRsZSBwYWludC4KKyAgICAgICAgICAgIGlmIChpZGxlICYmICFsYXllci0+b3BhY2l0eSgpKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCiAgICAgICAgICAgICBBU1NFUlQobGF5ZXItPm9w
YWNpdHkoKSk7CiAgICAgICAgICAgICBBU1NFUlQoIWxheWVyLT5ib3VuZHMoKS5pc0VtcHR5KCkp
OwogCi0gICAgICAgICAgICBsYXllci0+cGFpbnRDb250ZW50c0lmRGlydHkoKTsKKyAgICAgICAg
ICAgIHBhaW50Q29udGVudHNJZkRpcnR5KGxheWVyLCBpZGxlKTsKICAgICAgICAgfQogICAgIH0K
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKaW5kZXggNDg3ZDhmNGJlNmJjZDY0NDhkYzA2
NjFkNTk2NzVlZmQ0NmEwNmY3ZC4uYzZmM2Q2ZDBiYjk4YzkzODU3MTc1NDI5NmY5NzRjZDNkOGM5
ZjVlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKQEAgLTE5NSw4ICsxOTUsOCBAQCBw
cm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxMYXllckNocm9t
aXVtPiA+IExheWVyTGlzdDsKIAotICAgIHZvaWQgcGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExh
eWVyTGlzdCYpOwotICAgIHZvaWQgcGFpbnRNYXNrQW5kUmVwbGljYUZvclJlbmRlclN1cmZhY2Uo
TGF5ZXJDaHJvbWl1bSopOworICAgIHZvaWQgcGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExheWVy
TGlzdCYsIGJvb2wgaWRsZVBhaW50KTsKKyAgICB2b2lkIHBhaW50TWFza0FuZFJlcGxpY2FGb3JS
ZW5kZXJTdXJmYWNlKExheWVyQ2hyb21pdW0qLCBib29sIGlkbGVQYWludCk7CiAKICAgICB2b2lk
IHVwZGF0ZUxheWVycyhMYXllckNocm9taXVtKik7CiAgICAgdm9pZCBjbGVhclBlbmRpbmdVcGRh
dGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRy
ZWVIb3N0VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVl
SG9zdFRlc3QuY3BwCmluZGV4IDRhNDE3OTY0NzkxM2I4ZGYwYTY3ZjkzZTMyODY5ZjRjM2QzZTdj
ZjYuLjFhMTkyYzM4ZGZkNGU0OTJkYjJjNTBhMmIzMzI1MzQ5OTkyM2ZkYTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcApA
QCAtOTMwLDcgKzkzMCw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb250ZW50
TGF5ZXJDaHJvbWl1bVdpdGhVcGRhdGVUcmFja2luZz4gY3JlYXRlKENDTGF5ZXJEZWxlZ2F0ZSAq
ZGVsZWdhdGUpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBDb250ZW50TGF5ZXJDaHJvbWl1bVdpdGhV
cGRhdGVUcmFja2luZyhkZWxlZ2F0ZSkpOyB9CiAKICAgICBpbnQgcGFpbnRDb250ZW50c0NvdW50
KCkgeyByZXR1cm4gbV9wYWludENvbnRlbnRzQ291bnQ7IH0KLSAgICB2b2lkIHJlc2V0UGFpbnRD
b250ZW50c0NvdW50KCkgeyBtX3BhaW50Q29udGVudHNDb3VudCA9IDA7IH0KKyAgICBpbnQgaWRs
ZVBhaW50Q29udGVudHNDb3VudCgpIHsgcmV0dXJuIG1faWRsZVBhaW50Q29udGVudHNDb3VudDsg
fQorICAgIHZvaWQgcmVzZXRQYWludENvbnRlbnRzQ291bnQoKSB7IG1fcGFpbnRDb250ZW50c0Nv
dW50ID0gMDsgbV9pZGxlUGFpbnRDb250ZW50c0NvdW50ID0gMDt9CiAKICAgICBpbnQgdXBkYXRl
Q291bnQoKSB7IHJldHVybiBtX3VwZGF0ZUNvdW50OyB9CiAgICAgdm9pZCByZXNldFVwZGF0ZUNv
dW50KCkgeyBtX3VwZGF0ZUNvdW50ID0gMDsgfQpAQCAtOTQxLDYgKzk0MiwxMiBAQCBwdWJsaWM6
CiAgICAgICAgIG1fcGFpbnRDb250ZW50c0NvdW50Kys7CiAgICAgfQogCisgICAgdmlydHVhbCB2
b2lkIGlkbGVQYWludENvbnRlbnRzSWZEaXJ0eSgpCisgICAgeworICAgICAgICBDb250ZW50TGF5
ZXJDaHJvbWl1bTo6aWRsZVBhaW50Q29udGVudHNJZkRpcnR5KCk7CisgICAgICAgIG1faWRsZVBh
aW50Q29udGVudHNDb3VudCsrOworICAgIH0KKwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb21w
b3NpdG9yUmVzb3VyY2VzKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBDQ1RleHR1cmVVcGRh
dGVyJiB1cGRhdGVyKQogICAgIHsKICAgICAgICAgQ29udGVudExheWVyQ2hyb21pdW06OnVwZGF0
ZUNvbXBvc2l0b3JSZXNvdXJjZXMoY29udGV4dCwgdXBkYXRlcik7CkBAIC05NTEsMTIgKzk1OCwx
NCBAQCBwcml2YXRlOgogICAgIGV4cGxpY2l0IENvbnRlbnRMYXllckNocm9taXVtV2l0aFVwZGF0
ZVRyYWNraW5nKENDTGF5ZXJEZWxlZ2F0ZSAqZGVsZWdhdGUpCiAgICAgICAgIDogQ29udGVudExh
eWVyQ2hyb21pdW0oZGVsZWdhdGUpCiAgICAgICAgICwgbV9wYWludENvbnRlbnRzQ291bnQoMCkK
KyAgICAgICAgLCBtX2lkbGVQYWludENvbnRlbnRzQ291bnQoMCkKICAgICAgICAgLCBtX3VwZGF0
ZUNvdW50KDApCiAgICAgewogICAgICAgICBzZXRCb3VuZHMoSW50U2l6ZSgxMCwgMTApKTsKICAg
ICB9CiAKICAgICBpbnQgbV9wYWludENvbnRlbnRzQ291bnQ7CisgICAgaW50IG1faWRsZVBhaW50
Q29udGVudHNDb3VudDsKICAgICBpbnQgbV91cGRhdGVDb3VudDsKIH07CiAKQEAgLTk4Nyw2ICs5
OTYsOSBAQCBwdWJsaWM6CiAgICAgICAgIC8vIHBhaW50Q29udGVudHNJZkRpcnR5KCkgc2hvdWxk
IGhhdmUgYmVlbiBjYWxsZWQgb25jZS4KICAgICAgICAgRVhQRUNUX0VRKDEsIG1fdXBkYXRlQ2hl
Y2tMYXllci0+cGFpbnRDb250ZW50c0NvdW50KCkpOwogCisgICAgICAgIC8vIGlkbGVQYWludENv
bnRlbnRzSWZEaXJ0eSgpIHNob3VsZCBub3QgYmUgY2FsbGVkIGFmdGVyIG9wYWNpdHkgc2V0IHRv
IDAgaW4gcGFpbnRDb250ZW50c0lmRGlydHkoKQorICAgICAgICBFWFBFQ1RfRVEoMCwgbV91cGRh
dGVDaGVja0xheWVyLT5pZGxlUGFpbnRDb250ZW50c0NvdW50KCkpOworCiAgICAgICAgIC8vIHVw
ZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoKSBzaG91bGQgaGF2ZSBiZWVuIGNhbGxlZCB0aGUgc2Ft
ZQogICAgICAgICAvLyBhbW91dCBvZiB0aW1lcyBhcyBwYWludENvbnRlbnRzSWZEaXJ0eSgpLgog
ICAgICAgICBFWFBFQ1RfRVEobV91cGRhdGVDaGVja0xheWVyLT5wYWludENvbnRlbnRzQ291bnQo
KSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsZWRMYXllckNo
cm9taXVtVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RpbGVkTGF5ZXJD
aHJvbWl1bVRlc3QuY3BwCmluZGV4IDI4M2VhY2U1YWRiN2RiZWZhMGFlNjUwMzUzZjBlMGNmNDhi
ZjBkNjcuLmY3OWU4OTUyYmI1N2VjYjQzNmE5Yjc0YzA5ZGExZDM2ZTE4YjdjYjQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsZWRMYXllckNocm9taXVtVGVzdC5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1U
ZXN0LmNwcApAQCAtOTAsNiArOTAsMTYgQEAgcHVibGljOgogICAgICAgICBUaWxlZExheWVyQ2hy
b21pdW06OnByZXBhcmVUb1VwZGF0ZShyZWN0KTsKICAgICB9CiAKKyAgICB2b2lkIHByZXBhcmVU
b1VwZGF0ZUlkbGUoY29uc3QgSW50UmVjdCYgcmVjdCkKKyAgICB7CisgICAgICAgIFRpbGVkTGF5
ZXJDaHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlSWRsZShyZWN0KTsKKyAgICB9CisKKyAgICBib29s
IG5lZWRzSWRsZVBhaW50KGNvbnN0IEludFJlY3QmIHJlY3QpCisgICAgeworICAgICAgICByZXR1
cm4gVGlsZWRMYXllckNocm9taXVtOjpuZWVkc0lkbGVQYWludChyZWN0KTsKKyAgICB9CisKICAg
ICB2aXJ0dWFsIFRleHR1cmVNYW5hZ2VyKiB0ZXh0dXJlTWFuYWdlcigpIGNvbnN0IHsgcmV0dXJu
IG1fdGV4dHVyZU1hbmFnZXI7IH0KIAogcHJpdmF0ZToKQEAgLTEzOCw1ICsxNDgsNjMgQEAgVEVT
VChUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoRGlydHlUaWxlcykKICAgICBFWFBFQ1RfRkFM
U0UobGF5ZXJJbXBsLT5oYXNUaWxlQXQoMCwgMSkpOwogfQogCitURVNUKFRpbGVkTGF5ZXJDaHJv
bWl1bVRlc3QsIHB1c2hJZGxlUGFpbnRUaWxlcykKK3sKKyAgICBPd25QdHI8VGV4dHVyZU1hbmFn
ZXI+IHRleHR1cmVNYW5hZ2VyID0gVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwg
MTAyNCk7CisgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRS
ZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKKyAg
ICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKKyAgICBSZWZQdHI8RmFrZUND
VGlsZWRMYXllckltcGw+IGxheWVySW1wbCA9IGFkb3B0UmVmKG5ldyBGYWtlQ0NUaWxlZExheWVy
SW1wbCgwKSk7CisKKyAgICBGYWtlVGV4dHVyZUFsbG9jYXRvciB0ZXh0dXJlQWxsb2NhdG9yOwor
ICAgIENDVGV4dHVyZVVwZGF0ZXIgdXBkYXRlcigmdGV4dHVyZUFsbG9jYXRvcik7CisKKyAgICAv
LyBUaGUgdGlsZSBzaXplIGlzIDEwMHgxMDAuIFNldHVwIDV4NSB0aWxlcyB3aXRoIG9uZSB2aXNp
YmxlIHRpbGUgaW4gdGhlIGNlbnRlci4KKyAgICBJbnRTaXplIGNvbnRlbnRCb3VuZHMoNTAwLCA1
MDApOworICAgIEludFJlY3QgY29udGVudFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgY29udGVudEJv
dW5kcyk7CisgICAgSW50UmVjdCB2aXNpYmxlUmVjdCgyMDAsIDIwMCwgMTAwLCAxMDApOworCisg
ICAgLy8gVGhpcyBpbnZhbGlkYXRlcyAyNSB0aWxlcyBhbmQgdGhlbiBwYWludHMgb25lIHZpc2li
bGUgdGlsZS4KKyAgICBsYXllci0+c2V0Qm91bmRzKGNvbnRlbnRCb3VuZHMpOworICAgIGxheWVy
LT5zZXRWaXNpYmxlTGF5ZXJSZWN0KHZpc2libGVSZWN0KTsKKyAgICBsYXllci0+aW52YWxpZGF0
ZVJlY3QoY29udGVudFJlY3QpOworICAgIGxheWVyLT5wcmVwYXJlVG9VcGRhdGUodmlzaWJsZVJl
Y3QpOworCisgICAgLy8gV2Ugc2hvdWxkIG5lZWQgaWRsZS1wYWludGluZyBmb3IgM3gzIHRpbGVz
IGluIHRoZSBjZW50ZXIuCisgICAgRVhQRUNUX1RSVUUobGF5ZXItPm5lZWRzSWRsZVBhaW50KHZp
c2libGVSZWN0KSk7CisKKyAgICBsYXllci0+dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcygwLCB1
cGRhdGVyKTsKKyAgICBsYXllci0+cHVzaFByb3BlcnRpZXNUbyhsYXllckltcGwuZ2V0KCkpOwor
CisgICAgLy8gV2Ugc2hvdWxkIGhhdmUgb25lIHRpbGUgb24gdGhlIGltcGwgc2lkZS4KKyAgICBF
WFBFQ1RfVFJVRShsYXllckltcGwtPmhhc1RpbGVBdCgyLCAyKSk7CisKKyAgICB0ZXh0dXJlTWFu
YWdlci0+dW5wcm90ZWN0QWxsVGV4dHVyZXMoKTsKKworICAgIC8vIEZvciB0aGUgbmV4dCBmb3Vy
IHVwZGF0ZXMsIHdlIHNob3VsZCBkZXRlY3Qgd2Ugc3RpbGwgbmVlZCBpZGxlIHBhaW50aW5nLgor
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7CisgICAgICAgIGxheWVyLT5wcmVwYXJl
VG9VcGRhdGUodmlzaWJsZVJlY3QpOworICAgICAgICBFWFBFQ1RfVFJVRShsYXllci0+bmVlZHNJ
ZGxlUGFpbnQodmlzaWJsZVJlY3QpKTsKKyAgICAgICAgbGF5ZXItPnByZXBhcmVUb1VwZGF0ZUlk
bGUodmlzaWJsZVJlY3QpOworICAgICAgICBsYXllci0+dXBkYXRlQ29tcG9zaXRvclJlc291cmNl
cygwLCB1cGRhdGVyKTsKKyAgICAgICAgbGF5ZXItPnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXJJbXBs
LmdldCgpKTsKKyAgICAgICAgdGV4dHVyZU1hbmFnZXItPnVucHJvdGVjdEFsbFRleHR1cmVzKCk7
CisgICAgfQorCisgICAgLy8gQWZ0ZXIgZm91ciBwYXNzZXMgb2YgaWRsZSBwYWludGluZywgd2Ug
c2hvdWxkIGJlIGZpbmlzaGVkIHBhaW50aW5nCisgICAgRVhQRUNUX0ZBTFNFKGxheWVyLT5uZWVk
c0lkbGVQYWludCh2aXNpYmxlUmVjdCkpOworCisgICAgLy8gV2Ugc2hvdWxkIGhhdmUgb25lIHRp
bGUgc3Vycm91bmRpbmcgdGhlIHZpc2libGUgdGlsZSBvbiBhbGwgc2lkZXMsIGJ1dCBubyBvdGhl
ciB0aWxlcy4KKyAgICBJbnRSZWN0IGlkbGVQYWludFRpbGVzKDEsIDEsIDMsIDMpOworICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgNTsgaSsrKSB7CisgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwg
NTsgaisrKSB7CisgICAgICAgICAgICBpZiAoaWRsZVBhaW50VGlsZXMuY29udGFpbnMoaSwgaikp
CisgICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUobGF5ZXJJbXBsLT5oYXNUaWxlQXQoaSwgaikp
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIEVYUEVDVF9GQUxTRShsYXllcklt
cGwtPmhhc1RpbGVBdChpLCBqKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKKwogfSAvLyBuYW1l
c3BhY2UKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117314</attachid>
            <date>2011-11-30 19:45:52 -0800</date>
            <delta_ts>2011-11-30 19:59:00 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72686-20111130194551.patch</filename>
            <type>text/plain</type>
            <size>28013</size>
            <attacher name="Eric Penner">epenner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxMzE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzhlN2Y5MGJlZDUyMjFj
NGQ5MTEyOTI2MzEyMzEzNmJiYmU0MjMyNy4uYThiZjc1ZDMwNzJkMjIwMTI4YTY4MTg3YjRhZjRk
YTRkNzA2NTZjMSAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDExLTExLTMwICBFcmlj
IFBlbm5lciAgPGVwZW5uZXJAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIE5lZWQg
dG8gcHJlcGFpbnQgdGlsZXMgaW4gVGlsZWRMYXllckNocm9taXVtCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjY4NgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3Q6IHB1c2hJZGxlUGFpbnRUaWxlcwor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21p
dW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OmlkbGVQYWlu
dENvbnRlbnRzSWZEaXJ0eSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Q29udGVudExheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllckNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpp
ZGxlUGFpbnRDb250ZW50c0lmRGlydHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1RleHR1cmVNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYW5h
Z2VyOjpwcm90ZWN0VGV4dHVyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vVGlsZWRMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJD
aHJvbWl1bTo6VGlsZWRMYXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5
ZXJDaHJvbWl1bTo6Y2xlYW51cFJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExh
eWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6VGlsZWRMYXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGVUaWxlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVUb1VwZGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVUb1VwZGF0ZUlkbGUpOgorICAgICAg
ICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjpuZWVkc0lkbGVQYWludCk6CisgICAgICAg
IChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OmlkbGVQYWludFJlY3QpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnVwZGF0ZUxheWVycyk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnBhaW50Q29udGVudHNJZkRpcnR5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6cGFpbnRNYXNrQW5kUmVwbGljYUZvclJlbmRl
clN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpwYWludExheWVy
Q29udGVudHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdC5oOgorCiAyMDExLTExLTI4ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFw
cGxlLmNvbT4KIAogICAgICAgICBBZGQgc3VwcG9ydCBmb3Iga25vd2luZyB3aGVuIGEgVHJlZUVs
ZW1lbnQgaXMgYWRkZWQgb3IgY2hhbmdlZCBhbnl3aGVyZSBpbiBhIFRyZWVPdXRsaW5lLgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA3NDEzMzcyM2FjYTVmZWE2NmViODg5MzkyMTcxZjNm
ZjllZmVkNzhiLi4zNDNjOTE3NGM2M2Y5OGQwNWVhOWJjZWEwNjRkZGExOGFlMDU2OGJhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDExLTExLTMwICBFcmlj
IFBlbm5lciAgPGVwZW5uZXJAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIE5lZWQg
dG8gcHJlcGFpbnQgdGlsZXMgaW4gVGlsZWRMYXllckNocm9taXVtCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjY4NgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVz
dC5jcHA6CisgICAgICAgIChXVEY6OkNvbnRlbnRMYXllckNocm9taXVtV2l0aFVwZGF0ZVRyYWNr
aW5nOjppZGxlUGFpbnRDb250ZW50c0NvdW50KToKKyAgICAgICAgKFdURjo6Q29udGVudExheWVy
Q2hyb21pdW1XaXRoVXBkYXRlVHJhY2tpbmc6OnJlc2V0UGFpbnRDb250ZW50c0NvdW50KToKKyAg
ICAgICAgKFdURjo6Q29udGVudExheWVyQ2hyb21pdW1XaXRoVXBkYXRlVHJhY2tpbmc6OmlkbGVQ
YWludENvbnRlbnRzSWZEaXJ0eSk6CisgICAgICAgIChXVEY6OkNvbnRlbnRMYXllckNocm9taXVt
V2l0aFVwZGF0ZVRyYWNraW5nOjpDb250ZW50TGF5ZXJDaHJvbWl1bVdpdGhVcGRhdGVUcmFja2lu
Zyk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RPcGFjaXR5Q2hhbmdlOjphZnRl
clRlc3QpOgorICAgICAgICAqIHRlc3RzL1RpbGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3BwOgorICAg
ICAgICAoV1RGOjpGYWtlVGlsZWRMYXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGVJZGxlKToK
KyAgICAgICAgKFdURjo6RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bTo6bmVlZHNJZGxlUGFpbnQpOgor
ICAgICAgICAoV1RGOjpURVNUKToKKwogMjAxMS0xMS0yOCAgSm9uIExlZSAgPGpvbmxlZUBhcHBs
ZS5jb20+CiAKICAgICAgICAgUG9zc2libGUgZml4IGZvciB0ZXN0IGZhaWx1cmVzIGluIHIxMDEz
MDcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggOWViMWQ3OTlmNmQ5
MWVjZWM2Nzk4MTA2ZWM2MDI3YmI0MWU1MjUyMC4uZjVjN2QzOGNlM2Y0NTg0Y2I1M2NiYzJhMTMy
Y2JmNmY3MGRkYmMyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcApAQCAt
MTExLDYgKzExMSwyMCBAQCB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpwYWludENvbnRlbnRz
SWZEaXJ0eSgpCiAgICAgcmVzZXROZWVkc0Rpc3BsYXkoKTsKIH0KIAordm9pZCBDb250ZW50TGF5
ZXJDaHJvbWl1bTo6aWRsZVBhaW50Q29udGVudHNJZkRpcnR5KCkKK3sKKyAgICBpZiAoIWRyYXdz
Q29udGVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBJbnRSZWN0JiBsYXllclJl
Y3QgPSB2aXNpYmxlTGF5ZXJSZWN0KCk7CisgICAgaWYgKGxheWVyUmVjdC5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIHByZXBhcmVUb1VwZGF0ZUlkbGUobGF5ZXJSZWN0KTsKKyAg
ICBpZiAobmVlZHNJZGxlUGFpbnQobGF5ZXJSZWN0KSkKKyAgICAgICAgc2V0TmVlZHNDb21taXQo
KTsKK30KKwogYm9vbCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KCkgY29uc3QK
IHsKICAgICByZXR1cm4gbV9kZWxlZ2F0ZSAmJiBtX2RlbGVnYXRlLT5kcmF3c0NvbnRlbnQoKSAm
JiBUaWxlZExheWVyQ2hyb21pdW06OmRyYXdzQ29udGVudCgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0u
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXll
ckNocm9taXVtLmgKaW5kZXggYjgzNGU2NzZiZDYzNDQ1YWE0NTNiMzY1ZWVlMjgwMjQwZjM4MDlj
MS4uMGM1NzRiNWRmZGMwYTU3MWI4MTFiZTAzOTc2NGFjNzViMWMyZTNlZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hy
b21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
b250ZW50TGF5ZXJDaHJvbWl1bS5oCkBAIC01MCw2ICs1MCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIH5Db250ZW50TGF5ZXJDaHJvbWl1bSgpOwogCiAgICAgdmlydHVhbCB2b2lkIHBhaW50Q29u
dGVudHNJZkRpcnR5KCk7CisgICAgdmlydHVhbCB2b2lkIGlkbGVQYWludENvbnRlbnRzSWZEaXJ0
eSgpOwogCiBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgQ29udGVudExheWVyQ2hyb21pdW0oQ0NM
YXllckRlbGVnYXRlKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKaW5kZXggNzEzZGZiMjUyMzAxMDg2ZmZh
N2U1ODFjMDQyMDQ3NWU4YmRmZmI3ZC4uNGZiOWZkMjY3OGVmNDE0NTkwNDc2OTA4NmUzMGNmMjNi
NTVjODdkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaApAQCAtMTYyLDYgKzE2Miw3IEBAIHB1YmxpYzoK
ICAgICAvLyBUaGVzZSBtZXRob2RzIHR5cGljYWxseSBuZWVkIHRvIGJlIG92ZXJ3cml0dGVuIGJ5
IGRlcml2ZWQgY2xhc3Nlcy4KICAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50c0lmRGlydHko
KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgaWRsZVBhaW50Q29udGVudHNJZkRpcnR5KCkgeyB9CiAg
ICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0
M0QqLCBDQ1RleHR1cmVVcGRhdGVyJikgeyB9CiAgICAgdmlydHVhbCB2b2lkIHNldElzTWFzayhi
b29sKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgdW5yZXNlcnZlQ29udGVudHNUZXh0dXJlKCkgeyB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9U
ZXh0dXJlTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9UZXh0dXJlTWFuYWdlci5jcHAKaW5kZXggYzYwMGQ5ZTY0OTFkN2QxZTc1NzIyMjE0ZTMx
OWRhN2YwYzE4ODRjZS4uZmY1YmMzZTNkNzZlYmI1NDZjZTk2YzgwYTk4M2U0YjRlOTg4NWQ3MCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4
dHVyZU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1RleHR1cmVNYW5hZ2VyLmNwcApAQCAtMTA2LDcgKzEwNiw2IEBAIGJvb2wgVGV4dHVy
ZU1hbmFnZXI6OmlzUHJvdGVjdGVkKFRleHR1cmVUb2tlbiB0b2tlbikKIHZvaWQgVGV4dHVyZU1h
bmFnZXI6OnByb3RlY3RUZXh0dXJlKFRleHR1cmVUb2tlbiB0b2tlbikKIHsKICAgICBBU1NFUlQo
aGFzVGV4dHVyZSh0b2tlbikpOwotICAgIEFTU0VSVCghbV90ZXh0dXJlcy5nZXQodG9rZW4pLmlz
UHJvdGVjdGVkKTsKICAgICBUZXh0dXJlSW5mbyBpbmZvID0gbV90ZXh0dXJlcy50YWtlKHRva2Vu
KTsKICAgICBpbmZvLmlzUHJvdGVjdGVkID0gdHJ1ZTsKICAgICBtX3RleHR1cmVzLmFkZCh0b2tl
biwgaW5mbyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcAppbmRleCBmZmFkMmY1YjE3
NWM5NjY1ZDY2NTc1YmFmY2MzOWJmY2VlMGUxZTZhLi5mMDQ3MTQwMjg3ZWE3ZjNhODA3YWVjNGY3
MWNmNjY4YzAxMGE5NTlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTY5
LDYgKzY5LDcgQEAgVGlsZWRMYXllckNocm9taXVtOjpUaWxlZExheWVyQ2hyb21pdW0oQ0NMYXll
ckRlbGVnYXRlKiBkZWxlZ2F0ZSkKICAgICA6IExheWVyQ2hyb21pdW0oZGVsZWdhdGUpCiAgICAg
LCBtX3RleHR1cmVGb3JtYXQoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSkKICAgICAs
IG1fc2tpcHNEcmF3KGZhbHNlKQorICAgICwgbV9za2lwc0lkbGVQYWludChmYWxzZSkKICAgICAs
IG1fdGV4dHVyZU9yaWVudGF0aW9uKExheWVyVGV4dHVyZVVwZGF0ZXI6OkludmFsaWRPcmllbnRh
dGlvbikKICAgICAsIG1fc2FtcGxlZFRleGVsRm9ybWF0KExheWVyVGV4dHVyZVVwZGF0ZXI6OlNh
bXBsZWRUZXhlbEZvcm1hdEludmFsaWQpCiAgICAgLCBtX3RpbGluZ09wdGlvbihBdXRvVGlsZSkK
QEAgLTkwLDcgKzkxLDcgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OmNsZWFudXBSZXNvdXJj
ZXMoKQogCiAgICAgbV90aWxlci5jbGVhcigpOwogICAgIG1fcGFpbnRSZWN0ID0gSW50UmVjdCgp
OwotICAgIG1fcmVxdWVzdGVkVXBkYXRlUmVjdCA9IEludFJlY3QoKTsKKyAgICBtX3JlcXVlc3Rl
ZFVwZGF0ZVRpbGVzUmVjdCA9IEludFJlY3QoKTsKIH0KIAogdm9pZCBUaWxlZExheWVyQ2hyb21p
dW06OnVwZGF0ZVRpbGVTaXplQW5kVGlsaW5nT3B0aW9uKCkKQEAgLTE3MiwxMSArMTczLDEzIEBA
IHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpjcmVhdGVUaWxlcihDQ0xheWVyVGlsaW5nRGF0YTo6
Qm9yZGVyVGV4ZWxPcHRpb24gYm9yZGVyCiB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6dXBkYXRl
Q29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCosIENDVGV4dHVyZVVwZGF0ZXIm
IHVwZGF0ZXIpCiB7CiAgICAgLy8gUGFpbnRpbmcgY291bGQgY2F1c2UgY29tcG9zaXRpbmcgdG8g
Z2V0IHR1cm5lZCBvZmYsIHdoaWNoIG1heSBjYXVzZSB0aGUgdGlsZXIgdG8gYmVjb21lIGludmFs
aWRhdGVkIG1pZC11cGRhdGUuCi0gICAgaWYgKG1fc2tpcHNEcmF3IHx8IG1fcmVxdWVzdGVkVXBk
YXRlUmVjdC5pc0VtcHR5KCkgfHwgIW1fdGlsZXItPm51bVRpbGVzKCkpCisgICAgaWYgKG1fc2tp
cHNEcmF3IHx8IG1fcmVxdWVzdGVkVXBkYXRlVGlsZXNSZWN0LmlzRW1wdHkoKSB8fCAhbV90aWxl
ci0+bnVtVGlsZXMoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaW50IGxlZnQsIHRvcCwgcmln
aHQsIGJvdHRvbTsKLSAgICBtX3RpbGVyLT5jb250ZW50UmVjdFRvVGlsZUluZGljZXMobV9yZXF1
ZXN0ZWRVcGRhdGVSZWN0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworICAgIGludCBsZWZ0
ID0gbV9yZXF1ZXN0ZWRVcGRhdGVUaWxlc1JlY3QueCgpOworICAgIGludCB0b3AgPSBtX3JlcXVl
c3RlZFVwZGF0ZVRpbGVzUmVjdC55KCk7CisgICAgaW50IHJpZ2h0ID0gbV9yZXF1ZXN0ZWRVcGRh
dGVUaWxlc1JlY3QubWF4WCgpIC0gMTsKKyAgICBpbnQgYm90dG9tID0gbV9yZXF1ZXN0ZWRVcGRh
dGVUaWxlc1JlY3QubWF4WSgpIC0gMTsKICAgICBmb3IgKGludCBqID0gdG9wOyBqIDw9IGJvdHRv
bTsgKytqKSB7CiAgICAgICAgIGZvciAoaW50IGkgPSBsZWZ0OyBpIDw9IHJpZ2h0OyArK2kpIHsK
ICAgICAgICAgICAgIFVwZGF0YWJsZVRpbGUqIHRpbGUgPSB0aWxlQXQoaSwgaik7CkBAIC0zMzQs
MzIgKzMzNywxMSBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJvdGVjdFRpbGVUZXh0dXJl
cyhjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKICAgICB9CiB9CiAKLXZvaWQgVGlsZWRMYXll
ckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCit2
b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlVGlsZXMoYm9vbCBpZGxlLCBp
bnQgbGVmdCwgaW50IHRvcCwgaW50IHJpZ2h0LCBpbnQgYm90dG9tKQogewotICAgIGlmICghbV90
aWxlcikKLSAgICAgICAgY3JlYXRlVGlsZXIoaXNOb25Db21wb3NpdGVkQ29udGVudCgpID8gQ0NM
YXllclRpbGluZ0RhdGE6Ok5vQm9yZGVyVGV4ZWxzIDogQ0NMYXllclRpbGluZ0RhdGE6Okhhc0Jv
cmRlclRleGVscyk7Ci0KLSAgICBBU1NFUlQobV90aWxlcik7Ci0KLSAgICBtX3NraXBzRHJhdyA9
IGZhbHNlOwotCi0gICAgaWYgKGNvbnRlbnRSZWN0LmlzRW1wdHkoKSkgewotICAgICAgICBtX3Jl
cXVlc3RlZFVwZGF0ZVJlY3QgPSBJbnRSZWN0KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBtX3RpbGVyLT5ncm93TGF5ZXJUb0NvbnRhaW4oY29udGVudFJlY3QpOwotCi0gICAgaWYg
KCFtX3RpbGVyLT5udW1UaWxlcygpKSB7Ci0gICAgICAgIG1fcmVxdWVzdGVkVXBkYXRlUmVjdCA9
IEludFJlY3QoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIC8vIENyZWF0ZSB0aWxl
cyBhcyBuZWVkZWQsIGV4cGFuZGluZyBhIGRpcnR5IHJlY3QgdG8gY29udGFpbiBhbGwKICAgICAv
LyB0aGUgZGlydHkgcmVnaW9ucyBjdXJyZW50bHkgYmVpbmcgZHJhd24uCiAgICAgSW50UmVjdCBk
aXJ0eUxheWVyUmVjdDsKLSAgICBpbnQgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tOwotICAgIG1f
dGlsZXItPmNvbnRlbnRSZWN0VG9UaWxlSW5kaWNlcyhjb250ZW50UmVjdCwgbGVmdCwgdG9wLCBy
aWdodCwgYm90dG9tKTsKICAgICBmb3IgKGludCBqID0gdG9wOyBqIDw9IGJvdHRvbTsgKytqKSB7
CiAgICAgICAgIGZvciAoaW50IGkgPSBsZWZ0OyBpIDw9IHJpZ2h0OyArK2kpIHsKICAgICAgICAg
ICAgIFVwZGF0YWJsZVRpbGUqIHRpbGUgPSB0aWxlQXQoaSwgaik7CkBAIC0zNzAsOCArMzUyLDEx
IEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVj
dCYgY29udGVudFJlY3QpCiAgICAgICAgICAgICAgICAgdGlsZS0+bV9kaXJ0eUxheWVyUmVjdCA9
IG1fdGlsZXItPnRpbGVMYXllclJlY3QodGlsZSk7CiAKICAgICAgICAgICAgIGlmICghdGlsZS0+
dGV4dHVyZSgpLT5yZXNlcnZlKG1fdGlsZXItPnRpbGVTaXplKCksIG1fdGV4dHVyZUZvcm1hdCkp
IHsKLSAgICAgICAgICAgICAgICBtX3NraXBzRHJhdyA9IHRydWU7Ci0gICAgICAgICAgICAgICAg
Y2xlYW51cFJlc291cmNlcygpOworICAgICAgICAgICAgICAgIG1fc2tpcHNJZGxlUGFpbnQgPSB0
cnVlOworICAgICAgICAgICAgICAgIGlmICghaWRsZSkgeworICAgICAgICAgICAgICAgICAgICBt
X3NraXBzRHJhdyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGNsZWFudXBSZXNvdXJjZXMo
KTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgfQogCkBAIC0zNzksMTUgKzM2NCwxNiBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJl
cGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQogICAgICAgICB9CiAgICAg
fQogCi0gICAgLy8gRHVlIHRvIGJvcmRlcnMsIHdoZW4gdGhlIHBhaW50IHJlY3QgaXMgZXh0ZW5k
ZWQgdG8gdGlsZSBib3VuZGFyaWVzLCBpdAotICAgIC8vIG1heSBlbmQgdXAgb3ZlcmxhcHBpbmcg
bW9yZSB0aWxlcyB0aGFuIHRoZSBvcmlnaW5hbCBjb250ZW50IHJlY3QuIFJlY29yZAotICAgIC8v
IHRoYXQgb3JpZ2luYWwgcmVjdCBzbyB3ZSBkb24ndCB1cGxvYWQgbW9yZSB0aWxlcyB0aGFuIG5l
Y2Vzc2FyeS4KLSAgICBtX3JlcXVlc3RlZFVwZGF0ZVJlY3QgPSBjb250ZW50UmVjdDsKLQogICAg
IG1fcGFpbnRSZWN0ID0gbV90aWxlci0+bGF5ZXJSZWN0VG9Db250ZW50UmVjdChkaXJ0eUxheWVy
UmVjdCk7CiAgICAgaWYgKGRpcnR5TGF5ZXJSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
OwogCisgICAgLy8gRHVlIHRvIGJvcmRlcnMsIHdoZW4gdGhlIHBhaW50IHJlY3QgaXMgZXh0ZW5k
ZWQgdG8gdGlsZSBib3VuZGFyaWVzLCBpdAorICAgIC8vIG1heSBlbmQgdXAgb3ZlcmxhcHBpbmcg
bW9yZSB0aWxlcyB0aGFuIHRoZSBvcmlnaW5hbCBjb250ZW50IHJlY3QuIFJlY29yZAorICAgIC8v
IHRoZSBvcmlnaW5hbCB0aWxlcyBzbyB3ZSBkb24ndCB1cGxvYWQgbW9yZSB0aWxlcyB0aGFuIG5l
Y2Vzc2FyeS4KKyAgICBpZiAoIW1fcGFpbnRSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgbV9yZXF1
ZXN0ZWRVcGRhdGVUaWxlc1JlY3QgPSBJbnRSZWN0KGxlZnQsIHRvcCwgcmlnaHQgLSBsZWZ0ICsg
MSwgYm90dG9tIC0gdG9wICsgMSk7CisKICAgICAvLyBDYWxsaW5nIHByZXBhcmVUb1VwZGF0ZSgp
IGNhbGxzIGludG8gV2ViS2l0IHRvIHBhaW50LCB3aGljaCBtYXkgaGF2ZSB0aGUgc2lkZQogICAg
IC8vIGVmZmVjdCBvZiBkaXNhYmxpbmcgY29tcG9zaXRpbmcsIHdoaWNoIGNhdXNlcyBvdXIgcmVm
ZXJlbmNlIHRvIHRoZSB0ZXh0dXJlIHVwZGF0ZXIgdG8gYmUgZGVsZXRlZC4KICAgICAvLyBIb3dl
dmVyLCB3ZSBjYW4ndCBmcmVlIHRoZSBtZW1vcnkgYmFja2luZyB0aGUgR3JhcGhpY3NDb250ZXh0
IHVudGlsIHRoZSBwYWludCBmaW5pc2hlcywKQEAgLTM5Niw1ICszODIsMTIwIEBAIHZvaWQgVGls
ZWRMYXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJl
Y3QpCiAgICAgdGV4dHVyZVVwZGF0ZXIoKS0+cHJlcGFyZVRvVXBkYXRlKG1fcGFpbnRSZWN0LCBt
X3RpbGVyLT50aWxlU2l6ZSgpLCBtX3RpbGVyLT5oYXNCb3JkZXJUZXhlbHMoKSwgY29udGVudHNT
Y2FsZSgpKTsKIH0KIAorCit2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRl
KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQoreworICAgIGlmICghbV90aWxlcikKKyAgICAg
ICAgY3JlYXRlVGlsZXIoaXNOb25Db21wb3NpdGVkQ29udGVudCgpID8gQ0NMYXllclRpbGluZ0Rh
dGE6Ok5vQm9yZGVyVGV4ZWxzIDogQ0NMYXllclRpbGluZ0RhdGE6Okhhc0JvcmRlclRleGVscyk7
CisKKyAgICBBU1NFUlQobV90aWxlcik7CisKKyAgICBtX3NraXBzRHJhdyA9IGZhbHNlOworICAg
IG1fc2tpcHNJZGxlUGFpbnQgPSBmYWxzZTsKKyAgICBtX3JlcXVlc3RlZFVwZGF0ZVRpbGVzUmVj
dCA9IEludFJlY3QoKTsKKyAgICBtX3BhaW50UmVjdCA9IEludFJlY3QoKTsKKworICAgIGlmIChj
b250ZW50UmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fdGlsZXItPmdy
b3dMYXllclRvQ29udGFpbihjb250ZW50UmVjdCk7CisKKyAgICBpZiAoIW1fdGlsZXItPm51bVRp
bGVzKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGludCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0
b207CisgICAgbV90aWxlci0+Y29udGVudFJlY3RUb1RpbGVJbmRpY2VzKGNvbnRlbnRSZWN0LCBs
ZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworCisgICAgcHJlcGFyZVRvVXBkYXRlVGlsZXMoZmFs
c2UsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7Cit9CisKK3ZvaWQgVGlsZWRMYXllckNocm9t
aXVtOjpwcmVwYXJlVG9VcGRhdGVJZGxlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQorewor
ICAgIEFTU0VSVChtX3RpbGVyKTsKKworICAgIC8vIEFib3J0IGlmIHdlIGhhdmUgYWxyZWFkeSBw
cmVwYXJlZCBhIHBhaW50IG9yIHJ1biBvdXQgb2YgbWVtb3J5LgorICAgIGlmIChtX3NraXBzSWRs
ZVBhaW50IHx8ICFtX3BhaW50UmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAg
IEludFJlY3QgaWRsZVBhaW50Q29udGVudFJlY3QgPSBpZGxlUGFpbnRSZWN0KGNvbnRlbnRSZWN0
KTsKKyAgICBtX3RpbGVyLT5ncm93TGF5ZXJUb0NvbnRhaW4oaWRsZVBhaW50Q29udGVudFJlY3Qp
OworCisgICAgaWYgKCFtX3RpbGVyLT5udW1UaWxlcygpKQorICAgICAgICByZXR1cm47CisKKyAg
ICAvLyBQcm90ZWN0IGFueSB0ZXh0dXJlcyBpbiB0aGUgcHJlLXBhaW50IGFyZWEgc28gd2UgZG9u
J3QgZW5kIHVwIGp1c3QKKyAgICAvLyByZWNsYWltaW5nIHRoZW0gYmVsb3cuCisgICAgcHJvdGVj
dFRpbGVUZXh0dXJlcyhpZGxlUGFpbnRDb250ZW50UmVjdCk7CisKKyAgICAvLyBFeHBhbmQgb3V0
d2FyZHMgdW50aWwgd2UgZmluZCBhIGRpcnR5IHJvdyBvciBjb2x1bW4gdG8gdXBkYXRlLgorICAg
IGludCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b207CisgICAgbV90aWxlci0+Y29udGVudFJlY3RU
b1RpbGVJbmRpY2VzKGNvbnRlbnRSZWN0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworICAg
IGludCBwcmVwYWludExlZnQsIHByZXBhaW50VG9wLCBwcmVwYWludFJpZ2h0LCBwcmVwYWludEJv
dHRvbTsKKyAgICBtX3RpbGVyLT5jb250ZW50UmVjdFRvVGlsZUluZGljZXMoaWRsZVBhaW50Q29u
dGVudFJlY3QsIHByZXBhaW50TGVmdCwgcHJlcGFpbnRUb3AsIHByZXBhaW50UmlnaHQsIHByZXBh
aW50Qm90dG9tKTsKKyAgICB3aGlsZSAoIW1fc2tpcHNJZGxlUGFpbnQgJiYgKGxlZnQgPiBwcmVw
YWludExlZnQgfHwgdG9wID4gcHJlcGFpbnRUb3AgfHwgcmlnaHQgPCBwcmVwYWludFJpZ2h0IHx8
IGJvdHRvbSA8IHByZXBhaW50Qm90dG9tKSkgeworICAgICAgICBpZiAoYm90dG9tIDwgcHJlcGFp
bnRCb3R0b20pIHsKKyAgICAgICAgICAgICsrYm90dG9tOworICAgICAgICAgICAgcHJlcGFyZVRv
VXBkYXRlVGlsZXModHJ1ZSwgbGVmdCwgYm90dG9tLCByaWdodCwgYm90dG9tKTsKKyAgICAgICAg
ICAgIGlmICghbV9wYWludFJlY3QuaXNFbXB0eSgpIHx8IG1fc2tpcHNJZGxlUGFpbnQpCisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRvcCA+IHByZXBhaW50
VG9wKSB7CisgICAgICAgICAgICAtLXRvcDsKKyAgICAgICAgICAgIHByZXBhcmVUb1VwZGF0ZVRp
bGVzKHRydWUsIGxlZnQsIHRvcCwgcmlnaHQsIHRvcCk7CisgICAgICAgICAgICBpZiAoIW1fcGFp
bnRSZWN0LmlzRW1wdHkoKSB8fCBtX3NraXBzSWRsZVBhaW50KQorICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChsZWZ0ID4gcHJlcGFpbnRMZWZ0KSB7CisgICAg
ICAgICAgICAtLWxlZnQ7CisgICAgICAgICAgICBwcmVwYXJlVG9VcGRhdGVUaWxlcyh0cnVlLCBs
ZWZ0LCB0b3AsIGxlZnQsIGJvdHRvbSk7CisgICAgICAgICAgICBpZiAoIW1fcGFpbnRSZWN0Lmlz
RW1wdHkoKSB8fCBtX3NraXBzSWRsZVBhaW50KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGlmIChyaWdodCA8IHByZXBhaW50UmlnaHQpIHsKKyAgICAgICAgICAg
ICsrcmlnaHQ7CisgICAgICAgICAgICBwcmVwYXJlVG9VcGRhdGVUaWxlcyh0cnVlLCByaWdodCwg
dG9wLCByaWdodCwgYm90dG9tKTsKKyAgICAgICAgICAgIGlmICghbV9wYWludFJlY3QuaXNFbXB0
eSgpIHx8IG1fc2tpcHNJZGxlUGFpbnQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICB9Cit9CisKK2Jvb2wgVGlsZWRMYXllckNocm9taXVtOjpuZWVkc0lkbGVQYWludChj
b25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKK3sKKyAgICBpZiAobV9za2lwc0lkbGVQYWludCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQVNTRVJUKG1fdGlsZXIpOworCisgICAgSW50
UmVjdCBpZGxlUGFpbnRDb250ZW50UmVjdCA9IGlkbGVQYWludFJlY3QoY29udGVudFJlY3QpOwor
CisgICAgaW50IGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbTsKKyAgICBtX3RpbGVyLT5jb250ZW50
UmVjdFRvVGlsZUluZGljZXMoaWRsZVBhaW50Q29udGVudFJlY3QsIGxlZnQsIHRvcCwgcmlnaHQs
IGJvdHRvbSk7CisgICAgZm9yIChpbnQgaiA9IHRvcDsgaiA8PSBib3R0b207ICsraikgeworICAg
ICAgICBmb3IgKGludCBpID0gbGVmdDsgaSA8PSByaWdodDsgKytpKSB7CisgICAgICAgICAgICBp
ZiAobV9yZXF1ZXN0ZWRVcGRhdGVUaWxlc1JlY3QuY29udGFpbnMoSW50UG9pbnQoaSwgaikpKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgVXBkYXRhYmxlVGlsZSogdGls
ZSA9IHRpbGVBdChpLCBqKTsKKyAgICAgICAgICAgIGlmICghdGlsZSB8fCAhdGlsZS0+dGV4dHVy
ZSgpLT5pc1ZhbGlkKG1fdGlsZXItPnRpbGVTaXplKCksIG1fdGV4dHVyZUZvcm1hdCkgfHwgdGls
ZS0+aXNEaXJ0eSgpKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9Cisg
ICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworSW50UmVjdCBUaWxlZExheWVyQ2hyb21pdW06
OmlkbGVQYWludFJlY3QoY29uc3QgSW50UmVjdCYgdmlzaWJsZUNvbnRlbnRSZWN0KQoreworICAg
IEFTU0VSVChtX3RpbGVyKTsKKyAgICBJbnRSZWN0IHByZXBhaW50UmVjdCA9IHZpc2libGVDb250
ZW50UmVjdDsKKyAgICAvLyBGSVhNRTogVGhpcyBjYW4gYmUgbWFkZSBhIGxvdCBsYXJnZXIgaWYg
d2UgY2FuOgorICAgIC8vIC0gcmVzZXJ2ZSBtZW1vcnkgYXQgYSBsb3dlciBwcmlvcml0eSB0aGFu
IGZvciB2aXNpYmxlIGNvbnRlbnQKKyAgICAvLyAtIG9ubHkgcmVzZXJ2ZSBpZGxlIHBhaW50IHRp
bGVzIHVwIHRvIGEgbWVtb3J5IHJlY2xhaW0gdGhyZXNob2xkIGFuZAorICAgIC8vIC0gaW5zdXJl
IHdlIHBsYXkgbmljZWx5IHdpdGggb3RoZXIgbGF5ZXJzCisgICAgcHJlcGFpbnRSZWN0LmluZmxh
dGVYKG1fdGlsZXItPnRpbGVTaXplKCkud2lkdGgoKSk7CisgICAgcHJlcGFpbnRSZWN0LmluZmxh
dGVZKG1fdGlsZXItPnRpbGVTaXplKCkuaGVpZ2h0KCkpOworICAgIHByZXBhaW50UmVjdC5pbnRl
cnNlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBjb250ZW50Qm91bmRzKCkpKTsKKyAgICBy
ZXR1cm4gcHJlcGFpbnRSZWN0OworfQorCiB9CiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaAppbmRleCAzNjNkYTYxODU4MDJl
ZWRjNzRmNTE1MmFlNDlmMzg3YzkyZGMwZjhlLi4zYTA1ZGU0MTMzMjgwYjQxNzkxNDJhZTFkZGYw
NjlkMjJiZTU5NmMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaApAQCAtNzMsOSArNzMs
MTYgQEAgcHJvdGVjdGVkOgogCiAgICAgLy8gU2V0IGludmFsaWRhdGlvbnMgdG8gYmUgcG90ZW50
aWFsbHkgcmVwYWludGVkIGR1cmluZyB1cGRhdGUoKS4KICAgICB2b2lkIGludmFsaWRhdGVSZWN0
KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KTsKKwogICAgIC8vIFByZXBhcmUgZGF0YSBuZWVk
ZWQgdG8gdXBkYXRlIHRleHR1cmVzIHRoYXQgaW50ZXJzZWN0IHdpdGggY29udGVudFJlY3QuCiAg
ICAgdm9pZCBwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpOwogCisg
ICAgLy8gU2FtZSBhcyBhYm92ZSwgYnV0IHRoaXMgd2lsbCB0cnkgdG8gcGFpbnQgYWRkaXRpb25h
bCBzdXJyb3VuZGluZyBjb250ZW50IGlmIGlkbGUuCisgICAgdm9pZCBwcmVwYXJlVG9VcGRhdGVJ
ZGxlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KTsKKworICAgIC8vIEFmdGVyIHByZXBhcmlu
ZyBhbiB1cGRhdGUsIHJldHVybnMgdHJ1ZSBpZiBtb3JlIHByZS1wYWludGluZyBpcyBuZWVkZWQu
CisgICAgYm9vbCBuZWVkc0lkbGVQYWludChjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCk7CisK
ICAgICB2aXJ0dWFsIHZvaWQgcHJvdGVjdFZpc2libGVUaWxlVGV4dHVyZXMoKTsKIAogICAgIHZp
cnR1YWwgVGV4dHVyZU1hbmFnZXIqIHRleHR1cmVNYW5hZ2VyKCkgY29uc3Q7CkBAIC04OCwxNyAr
OTUsMjIgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNyZWF0ZVRpbGVySWZOZWVkZWQoKTsKICAgICB2
b2lkIHNldFRpbGluZ09wdGlvbihUaWxpbmdPcHRpb24pOwogCisgICAgdm9pZCBwcmVwYXJlVG9V
cGRhdGVUaWxlcyhib29sIGlkbGUsIGludCBsZWZ0LCBpbnQgdG9wLCBpbnQgcmlnaHQsIGludCBi
b3R0b20pOworICAgIEludFJlY3QgaWRsZVBhaW50UmVjdChjb25zdCBJbnRSZWN0JiB2aXNpYmxl
Q29udGVudFJlY3QpOworCiAgICAgVXBkYXRhYmxlVGlsZSogdGlsZUF0KGludCwgaW50KSBjb25z
dDsKICAgICBVcGRhdGFibGVUaWxlKiBjcmVhdGVUaWxlKGludCwgaW50KTsKIAogICAgIC8vIFRl
bXBvcmFyeSBzdGF0ZSBoZWxkIGJldHdlZW4gcHJlcGFyZVRvVXBkYXRlKCkgYW5kIHVwZGF0ZUNv
bXBvc2l0b3JSZXNvdXJjZXMoKS4KLSAgICBJbnRSZWN0IG1fcmVxdWVzdGVkVXBkYXRlUmVjdDsK
KyAgICBJbnRSZWN0IG1fcmVxdWVzdGVkVXBkYXRlVGlsZXNSZWN0OworCiAgICAgLy8gU3RhdGUg
aGVsZCBiZXR3ZWVuIHByZXBhcmVUb1VwZGF0ZSgpIGFuZCBwdXNoUHJvcGVydGllc1RvKCkuIFRo
aXMgcmVwcmVzZW50cyB0aGUgYXJlYQogICAgIC8vIG9mIHRoZSBsYXllciB0aGF0IGlzIGFjdHVh
bGx5IHJlLXBhaW50ZWQgYnkgV2ViS2l0LgogICAgIEludFJlY3QgbV9wYWludFJlY3Q7CiAKICAg
ICBHQzNEZW51bSBtX3RleHR1cmVGb3JtYXQ7CiAgICAgYm9vbCBtX3NraXBzRHJhdzsKKyAgICBi
b29sIG1fc2tpcHNJZGxlUGFpbnQ7CiAgICAgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6T3JpZW50YXRp
b24gbV90ZXh0dXJlT3JpZW50YXRpb247CiAgICAgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxl
ZFRleGVsRm9ybWF0IG1fc2FtcGxlZFRleGVsRm9ybWF0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0LmNwcAppbmRleCA2YzhkYTQ2MWFjZDE3NDEwYTEwMjVlODkzMjU0ZWRhYzAxMTczZWY2
Li5hMjFlMjQ4MzFjYTIwZmZmN2VkMmJlNTM1ZThjNzhhZDU4YWFhODg0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTMzNSwxMCArMzM1LDIzIEBAIHZvaWQgQ0NMYXllclRy
ZWVIb3N0Ojp1cGRhdGVMYXllcnMoTGF5ZXJDaHJvbWl1bSogcm9vdExheWVyKQogICAgICAgICBD
Q0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0
eShyb290TGF5ZXIsIHJvb3RMYXllciwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBt
X3VwZGF0ZUxpc3QsIHJvb3RSZW5kZXJTdXJmYWNlLT5sYXllckxpc3QoKSwgbGF5ZXJSZW5kZXJl
ckNhcGFiaWxpdGllcygpLm1heFRleHR1cmVTaXplKTsKICAgICB9CiAKLSAgICBwYWludExheWVy
Q29udGVudHMobV91cGRhdGVMaXN0KTsKKyAgICBwYWludExheWVyQ29udGVudHMobV91cGRhdGVM
aXN0LCBQYWludFZpc2libGUpOworICAgIC8vIFRoZSBzZWNvbmQgKGlkbGUpIHBhaW50IHdpbGwg
YmUgYSBuby1vcCBpbiBsYXllcnMgd2hlcmUgcGFpbnRpbmcgYWxyZWFkeSBvY2N1cmVkIGFib3Zl
LgorICAgIHBhaW50TGF5ZXJDb250ZW50cyhtX3VwZGF0ZUxpc3QsIFBhaW50SWRsZSk7CiB9CiAK
LXZvaWQgQ0NMYXllclRyZWVIb3N0OjpwYWludE1hc2tBbmRSZXBsaWNhRm9yUmVuZGVyU3VyZmFj
ZShMYXllckNocm9taXVtKiByZW5kZXJTdXJmYWNlTGF5ZXIpCisvLyBzdGF0aWMKK3ZvaWQgQ0NM
YXllclRyZWVIb3N0OjpwYWludENvbnRlbnRzSWZEaXJ0eShMYXllckNocm9taXVtKiBsYXllciwg
UGFpbnRUeXBlIHBhaW50VHlwZSkKK3sKKyAgICBBU1NFUlQobGF5ZXIpOworICAgIEFTU0VSVChQ
YWludFZpc2libGUgPT0gcGFpbnRUeXBlIHx8IFBhaW50SWRsZSA9PSBwYWludFR5cGUpOworICAg
IGlmIChQYWludFZpc2libGUgPT0gcGFpbnRUeXBlKQorICAgICAgICBsYXllci0+cGFpbnRDb250
ZW50c0lmRGlydHkoKTsKKyAgICBlbHNlCisgICAgICAgIGxheWVyLT5pZGxlUGFpbnRDb250ZW50
c0lmRGlydHkoKTsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnBhaW50TWFza0FuZFJlcGxp
Y2FGb3JSZW5kZXJTdXJmYWNlKExheWVyQ2hyb21pdW0qIHJlbmRlclN1cmZhY2VMYXllciwgUGFp
bnRUeXBlIHBhaW50VHlwZSkKIHsKICAgICAvLyBOb3RlOiBNYXNrcyBhbmQgcmVwbGljYXMgb25s
eSBleGlzdCBmb3IgbGF5ZXJzIHRoYXQgb3duIHJlbmRlciBzdXJmYWNlcy4gSWYgd2UgcmVhY2gg
dGhpcyBwb2ludAogICAgIC8vIGluIGNvZGUsIHdlIGFscmVhZHkga25vdyB0aGF0IGF0IGxlYXN0
IHNvbWV0aGluZyB3aWxsIGJlIGRyYXduIGludG8gdGhpcyByZW5kZXIgc3VyZmFjZSwgc28gdGhl
CkBAIC0zNDcsMjQgKzM2MCwyNCBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6cGFpbnRNYXNrQW5k
UmVwbGljYUZvclJlbmRlclN1cmZhY2UoTGF5ZXJDaHJvbWl1bSogcmVuZGVyUwogICAgIGlmIChy
ZW5kZXJTdXJmYWNlTGF5ZXItPm1hc2tMYXllcigpKSB7CiAgICAgICAgIHJlbmRlclN1cmZhY2VM
YXllci0+bWFza0xheWVyKCktPnNldExheWVyVHJlZUhvc3QodGhpcyk7CiAgICAgICAgIHJlbmRl
clN1cmZhY2VMYXllci0+bWFza0xheWVyKCktPnNldFZpc2libGVMYXllclJlY3QoSW50UmVjdChJ
bnRQb2ludCgpLCByZW5kZXJTdXJmYWNlTGF5ZXItPmNvbnRlbnRCb3VuZHMoKSkpOwotICAgICAg
ICByZW5kZXJTdXJmYWNlTGF5ZXItPm1hc2tMYXllcigpLT5wYWludENvbnRlbnRzSWZEaXJ0eSgp
OworICAgICAgICBwYWludENvbnRlbnRzSWZEaXJ0eShyZW5kZXJTdXJmYWNlTGF5ZXItPm1hc2tM
YXllcigpLCBwYWludFR5cGUpOwogICAgIH0KIAogICAgIExheWVyQ2hyb21pdW0qIHJlcGxpY2FM
YXllciA9IHJlbmRlclN1cmZhY2VMYXllci0+cmVwbGljYUxheWVyKCk7CiAgICAgaWYgKHJlcGxp
Y2FMYXllcikgewogCiAgICAgICAgIHJlcGxpY2FMYXllci0+c2V0TGF5ZXJUcmVlSG9zdCh0aGlz
KTsKLSAgICAgICAgcmVwbGljYUxheWVyLT5wYWludENvbnRlbnRzSWZEaXJ0eSgpOworICAgICAg
ICBwYWludENvbnRlbnRzSWZEaXJ0eShyZXBsaWNhTGF5ZXIsIHBhaW50VHlwZSk7CiAKICAgICAg
ICAgaWYgKHJlcGxpY2FMYXllci0+bWFza0xheWVyKCkpIHsKICAgICAgICAgICAgIHJlcGxpY2FM
YXllci0+bWFza0xheWVyKCktPnNldExheWVyVHJlZUhvc3QodGhpcyk7CiAgICAgICAgICAgICBy
ZXBsaWNhTGF5ZXItPm1hc2tMYXllcigpLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KEludFJlY3QoSW50
UG9pbnQoKSwgcmVwbGljYUxheWVyLT5tYXNrTGF5ZXIoKS0+Y29udGVudEJvdW5kcygpKSk7Ci0g
ICAgICAgICAgICByZXBsaWNhTGF5ZXItPm1hc2tMYXllcigpLT5wYWludENvbnRlbnRzSWZEaXJ0
eSgpOworICAgICAgICAgICAgcGFpbnRDb250ZW50c0lmRGlydHkocmVwbGljYUxheWVyLT5tYXNr
TGF5ZXIoKSwgcGFpbnRUeXBlKTsKICAgICAgICAgfQogICAgIH0KIH0KIAotdm9pZCBDQ0xheWVy
VHJlZUhvc3Q6OnBhaW50TGF5ZXJDb250ZW50cyhjb25zdCBMYXllckxpc3QmIHJlbmRlclN1cmZh
Y2VMYXllckxpc3QpCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6cGFpbnRMYXllckNvbnRlbnRzKGNv
bnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgUGFpbnRUeXBlIHBhaW50VHlw
ZSkKIHsKICAgICBmb3IgKGludCBzdXJmYWNlSW5kZXggPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
LnNpemUoKSAtIDE7IHN1cmZhY2VJbmRleCA+PSAwIDsgLS1zdXJmYWNlSW5kZXgpIHsKICAgICAg
ICAgTGF5ZXJDaHJvbWl1bSogcmVuZGVyU3VyZmFjZUxheWVyID0gcmVuZGVyU3VyZmFjZUxheWVy
TGlzdFtzdXJmYWNlSW5kZXhdLmdldCgpOwpAQCAtMzczLDcgKzM4Niw3IEBAIHZvaWQgQ0NMYXll
clRyZWVIb3N0OjpwYWludExheWVyQ29udGVudHMoY29uc3QgTGF5ZXJMaXN0JiByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0CiAgICAgICAgIEFTU0VSVChyZW5kZXJTdXJmYWNlLT5kcmF3T3BhY2l0eSgp
KTsKIAogICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXItPnNldExheWVyVHJlZUhvc3QodGhpcyk7
Ci0gICAgICAgIHBhaW50TWFza0FuZFJlcGxpY2FGb3JSZW5kZXJTdXJmYWNlKHJlbmRlclN1cmZh
Y2VMYXllcik7CisgICAgICAgIHBhaW50TWFza0FuZFJlcGxpY2FGb3JSZW5kZXJTdXJmYWNlKHJl
bmRlclN1cmZhY2VMYXllciwgcGFpbnRUeXBlKTsKIAogICAgICAgICBjb25zdCBMYXllckxpc3Qm
IGxheWVyTGlzdCA9IHJlbmRlclN1cmZhY2UtPmxheWVyTGlzdCgpOwogICAgICAgICBmb3IgKHVu
c2lnbmVkIGxheWVySW5kZXggPSAwOyBsYXllckluZGV4IDwgbGF5ZXJMaXN0LnNpemUoKTsgKyts
YXllckluZGV4KSB7CkBAIC0zODYsMTAgKzM5OSwxNCBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6
cGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dAogCiAgICAgICAgICAgICBsYXllci0+c2V0TGF5ZXJUcmVlSG9zdCh0aGlzKTsKIAorICAgICAg
ICAgICAgLy8gUHJpbWFyeSBwYWludCBjb3VsZCBoYXZlIHNldCBvcGFjaXR5IHRvIHplcm8uIFNr
aXAgaWRsZSBwYWludC4KKyAgICAgICAgICAgIGlmIChwYWludFR5cGUgPT0gUGFpbnRJZGxlICYm
ICFsYXllci0+b3BhY2l0eSgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCiAgICAgICAg
ICAgICBBU1NFUlQobGF5ZXItPm9wYWNpdHkoKSk7CiAgICAgICAgICAgICBBU1NFUlQoIWxheWVy
LT5ib3VuZHMoKS5pc0VtcHR5KCkpOwogCi0gICAgICAgICAgICBsYXllci0+cGFpbnRDb250ZW50
c0lmRGlydHkoKTsKKyAgICAgICAgICAgIHBhaW50Q29udGVudHNJZkRpcnR5KGxheWVyLCBwYWlu
dFR5cGUpOwogICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaApp
bmRleCA0ODdkOGY0YmU2YmNkNjQ0OGRjMDY2MWQ1OTY3NWVmZDQ2YTA2ZjdkLi4yMzhhMTZmMWZl
YzU4NGY1OWQ3OWI5YzRhM2FiZDhiZjk3NDA1MGE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3QuaApAQCAtMTk1LDggKzE5NSwxMCBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIHR5cGVk
ZWYgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IExheWVyTGlzdDsKIAotICAgIHZvaWQg
cGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExheWVyTGlzdCYpOwotICAgIHZvaWQgcGFpbnRNYXNr
QW5kUmVwbGljYUZvclJlbmRlclN1cmZhY2UoTGF5ZXJDaHJvbWl1bSopOworICAgIGVudW0gUGFp
bnRUeXBlIHsgUGFpbnRWaXNpYmxlLCBQYWludElkbGUgfTsKKyAgICBzdGF0aWMgdm9pZCBwYWlu
dENvbnRlbnRzSWZEaXJ0eShMYXllckNocm9taXVtKiwgUGFpbnRUeXBlKTsKKyAgICB2b2lkIHBh
aW50TGF5ZXJDb250ZW50cyhjb25zdCBMYXllckxpc3QmLCBQYWludFR5cGUpOworICAgIHZvaWQg
cGFpbnRNYXNrQW5kUmVwbGljYUZvclJlbmRlclN1cmZhY2UoTGF5ZXJDaHJvbWl1bSosIFBhaW50
VHlwZSk7CiAKICAgICB2b2lkIHVwZGF0ZUxheWVycyhMYXllckNocm9taXVtKik7CiAgICAgdm9p
ZCBjbGVhclBlbmRpbmdVcGRhdGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCmluZGV4IDRhNDE3OTY0NzkxM2I4ZGYwYTY3
ZjkzZTMyODY5ZjRjM2QzZTdjZjYuLjFhMTkyYzM4ZGZkNGU0OTJkYjJjNTBhMmIzMzI1MzQ5OTky
M2ZkYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRy
ZWVIb3N0VGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVy
VHJlZUhvc3RUZXN0LmNwcApAQCAtOTMwLDcgKzkzMCw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxDb250ZW50TGF5ZXJDaHJvbWl1bVdpdGhVcGRhdGVUcmFja2luZz4gY3JlYXRl
KENDTGF5ZXJEZWxlZ2F0ZSAqZGVsZWdhdGUpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBDb250ZW50
TGF5ZXJDaHJvbWl1bVdpdGhVcGRhdGVUcmFja2luZyhkZWxlZ2F0ZSkpOyB9CiAKICAgICBpbnQg
cGFpbnRDb250ZW50c0NvdW50KCkgeyByZXR1cm4gbV9wYWludENvbnRlbnRzQ291bnQ7IH0KLSAg
ICB2b2lkIHJlc2V0UGFpbnRDb250ZW50c0NvdW50KCkgeyBtX3BhaW50Q29udGVudHNDb3VudCA9
IDA7IH0KKyAgICBpbnQgaWRsZVBhaW50Q29udGVudHNDb3VudCgpIHsgcmV0dXJuIG1faWRsZVBh
aW50Q29udGVudHNDb3VudDsgfQorICAgIHZvaWQgcmVzZXRQYWludENvbnRlbnRzQ291bnQoKSB7
IG1fcGFpbnRDb250ZW50c0NvdW50ID0gMDsgbV9pZGxlUGFpbnRDb250ZW50c0NvdW50ID0gMDt9
CiAKICAgICBpbnQgdXBkYXRlQ291bnQoKSB7IHJldHVybiBtX3VwZGF0ZUNvdW50OyB9CiAgICAg
dm9pZCByZXNldFVwZGF0ZUNvdW50KCkgeyBtX3VwZGF0ZUNvdW50ID0gMDsgfQpAQCAtOTQxLDYg
Kzk0MiwxMiBAQCBwdWJsaWM6CiAgICAgICAgIG1fcGFpbnRDb250ZW50c0NvdW50Kys7CiAgICAg
fQogCisgICAgdmlydHVhbCB2b2lkIGlkbGVQYWludENvbnRlbnRzSWZEaXJ0eSgpCisgICAgewor
ICAgICAgICBDb250ZW50TGF5ZXJDaHJvbWl1bTo6aWRsZVBhaW50Q29udGVudHNJZkRpcnR5KCk7
CisgICAgICAgIG1faWRsZVBhaW50Q29udGVudHNDb3VudCsrOworICAgIH0KKwogICAgIHZpcnR1
YWwgdm9pZCB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKEdyYXBoaWNzQ29udGV4dDNEKiBjb250
ZXh0LCBDQ1RleHR1cmVVcGRhdGVyJiB1cGRhdGVyKQogICAgIHsKICAgICAgICAgQ29udGVudExh
eWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoY29udGV4dCwgdXBkYXRlcik7
CkBAIC05NTEsMTIgKzk1OCwxNCBAQCBwcml2YXRlOgogICAgIGV4cGxpY2l0IENvbnRlbnRMYXll
ckNocm9taXVtV2l0aFVwZGF0ZVRyYWNraW5nKENDTGF5ZXJEZWxlZ2F0ZSAqZGVsZWdhdGUpCiAg
ICAgICAgIDogQ29udGVudExheWVyQ2hyb21pdW0oZGVsZWdhdGUpCiAgICAgICAgICwgbV9wYWlu
dENvbnRlbnRzQ291bnQoMCkKKyAgICAgICAgLCBtX2lkbGVQYWludENvbnRlbnRzQ291bnQoMCkK
ICAgICAgICAgLCBtX3VwZGF0ZUNvdW50KDApCiAgICAgewogICAgICAgICBzZXRCb3VuZHMoSW50
U2l6ZSgxMCwgMTApKTsKICAgICB9CiAKICAgICBpbnQgbV9wYWludENvbnRlbnRzQ291bnQ7Cisg
ICAgaW50IG1faWRsZVBhaW50Q29udGVudHNDb3VudDsKICAgICBpbnQgbV91cGRhdGVDb3VudDsK
IH07CiAKQEAgLTk4Nyw2ICs5OTYsOSBAQCBwdWJsaWM6CiAgICAgICAgIC8vIHBhaW50Q29udGVu
dHNJZkRpcnR5KCkgc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQgb25jZS4KICAgICAgICAgRVhQRUNU
X0VRKDEsIG1fdXBkYXRlQ2hlY2tMYXllci0+cGFpbnRDb250ZW50c0NvdW50KCkpOwogCisgICAg
ICAgIC8vIGlkbGVQYWludENvbnRlbnRzSWZEaXJ0eSgpIHNob3VsZCBub3QgYmUgY2FsbGVkIGFm
dGVyIG9wYWNpdHkgc2V0IHRvIDAgaW4gcGFpbnRDb250ZW50c0lmRGlydHkoKQorICAgICAgICBF
WFBFQ1RfRVEoMCwgbV91cGRhdGVDaGVja0xheWVyLT5pZGxlUGFpbnRDb250ZW50c0NvdW50KCkp
OworCiAgICAgICAgIC8vIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoKSBzaG91bGQgaGF2ZSBi
ZWVuIGNhbGxlZCB0aGUgc2FtZQogICAgICAgICAvLyBhbW91dCBvZiB0aW1lcyBhcyBwYWludENv
bnRlbnRzSWZEaXJ0eSgpLgogICAgICAgICBFWFBFQ1RfRVEobV91cGRhdGVDaGVja0xheWVyLT5w
YWludENvbnRlbnRzQ291bnQoKSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvVGlsZWRMYXllckNocm9taXVtVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL1RpbGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCmluZGV4IDI4M2VhY2U1YWRiN2RiZWZh
MGFlNjUwMzUzZjBlMGNmNDhiZjBkNjcuLmY3OWU4OTUyYmI1N2VjYjQzNmE5Yjc0YzA5ZGExZDM2
ZTE4YjdjYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsZWRM
YXllckNocm9taXVtVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9U
aWxlZExheWVyQ2hyb21pdW1UZXN0LmNwcApAQCAtOTAsNiArOTAsMTYgQEAgcHVibGljOgogICAg
ICAgICBUaWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVUb1VwZGF0ZShyZWN0KTsKICAgICB9CiAK
KyAgICB2b2lkIHByZXBhcmVUb1VwZGF0ZUlkbGUoY29uc3QgSW50UmVjdCYgcmVjdCkKKyAgICB7
CisgICAgICAgIFRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlSWRsZShyZWN0KTsK
KyAgICB9CisKKyAgICBib29sIG5lZWRzSWRsZVBhaW50KGNvbnN0IEludFJlY3QmIHJlY3QpCisg
ICAgeworICAgICAgICByZXR1cm4gVGlsZWRMYXllckNocm9taXVtOjpuZWVkc0lkbGVQYWludChy
ZWN0KTsKKyAgICB9CisKICAgICB2aXJ0dWFsIFRleHR1cmVNYW5hZ2VyKiB0ZXh0dXJlTWFuYWdl
cigpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZU1hbmFnZXI7IH0KIAogcHJpdmF0ZToKQEAgLTEz
OCw1ICsxNDgsNjMgQEAgVEVTVChUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoRGlydHlUaWxl
cykKICAgICBFWFBFQ1RfRkFMU0UobGF5ZXJJbXBsLT5oYXNUaWxlQXQoMCwgMSkpOwogfQogCitU
RVNUKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hJZGxlUGFpbnRUaWxlcykKK3sKKyAgICBP
d25QdHI8VGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gVGV4dHVyZU1hbmFnZXI6OmNy
ZWF0ZSg0KjEwMjQqMTAyNCwgMTAyNCk7CisgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21p
dW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1h
bmFnZXIuZ2V0KCkpKTsKKyAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsK
KyAgICBSZWZQdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1wbCA9IGFkb3B0UmVmKG5l
dyBGYWtlQ0NUaWxlZExheWVySW1wbCgwKSk7CisKKyAgICBGYWtlVGV4dHVyZUFsbG9jYXRvciB0
ZXh0dXJlQWxsb2NhdG9yOworICAgIENDVGV4dHVyZVVwZGF0ZXIgdXBkYXRlcigmdGV4dHVyZUFs
bG9jYXRvcik7CisKKyAgICAvLyBUaGUgdGlsZSBzaXplIGlzIDEwMHgxMDAuIFNldHVwIDV4NSB0
aWxlcyB3aXRoIG9uZSB2aXNpYmxlIHRpbGUgaW4gdGhlIGNlbnRlci4KKyAgICBJbnRTaXplIGNv
bnRlbnRCb3VuZHMoNTAwLCA1MDApOworICAgIEludFJlY3QgY29udGVudFJlY3QoSW50UG9pbnQ6
Onplcm8oKSwgY29udGVudEJvdW5kcyk7CisgICAgSW50UmVjdCB2aXNpYmxlUmVjdCgyMDAsIDIw
MCwgMTAwLCAxMDApOworCisgICAgLy8gVGhpcyBpbnZhbGlkYXRlcyAyNSB0aWxlcyBhbmQgdGhl
biBwYWludHMgb25lIHZpc2libGUgdGlsZS4KKyAgICBsYXllci0+c2V0Qm91bmRzKGNvbnRlbnRC
b3VuZHMpOworICAgIGxheWVyLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KHZpc2libGVSZWN0KTsKKyAg
ICBsYXllci0+aW52YWxpZGF0ZVJlY3QoY29udGVudFJlY3QpOworICAgIGxheWVyLT5wcmVwYXJl
VG9VcGRhdGUodmlzaWJsZVJlY3QpOworCisgICAgLy8gV2Ugc2hvdWxkIG5lZWQgaWRsZS1wYWlu
dGluZyBmb3IgM3gzIHRpbGVzIGluIHRoZSBjZW50ZXIuCisgICAgRVhQRUNUX1RSVUUobGF5ZXIt
Pm5lZWRzSWRsZVBhaW50KHZpc2libGVSZWN0KSk7CisKKyAgICBsYXllci0+dXBkYXRlQ29tcG9z
aXRvclJlc291cmNlcygwLCB1cGRhdGVyKTsKKyAgICBsYXllci0+cHVzaFByb3BlcnRpZXNUbyhs
YXllckltcGwuZ2V0KCkpOworCisgICAgLy8gV2Ugc2hvdWxkIGhhdmUgb25lIHRpbGUgb24gdGhl
IGltcGwgc2lkZS4KKyAgICBFWFBFQ1RfVFJVRShsYXllckltcGwtPmhhc1RpbGVBdCgyLCAyKSk7
CisKKyAgICB0ZXh0dXJlTWFuYWdlci0+dW5wcm90ZWN0QWxsVGV4dHVyZXMoKTsKKworICAgIC8v
IEZvciB0aGUgbmV4dCBmb3VyIHVwZGF0ZXMsIHdlIHNob3VsZCBkZXRlY3Qgd2Ugc3RpbGwgbmVl
ZCBpZGxlIHBhaW50aW5nLgorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7CisgICAg
ICAgIGxheWVyLT5wcmVwYXJlVG9VcGRhdGUodmlzaWJsZVJlY3QpOworICAgICAgICBFWFBFQ1Rf
VFJVRShsYXllci0+bmVlZHNJZGxlUGFpbnQodmlzaWJsZVJlY3QpKTsKKyAgICAgICAgbGF5ZXIt
PnByZXBhcmVUb1VwZGF0ZUlkbGUodmlzaWJsZVJlY3QpOworICAgICAgICBsYXllci0+dXBkYXRl
Q29tcG9zaXRvclJlc291cmNlcygwLCB1cGRhdGVyKTsKKyAgICAgICAgbGF5ZXItPnB1c2hQcm9w
ZXJ0aWVzVG8obGF5ZXJJbXBsLmdldCgpKTsKKyAgICAgICAgdGV4dHVyZU1hbmFnZXItPnVucHJv
dGVjdEFsbFRleHR1cmVzKCk7CisgICAgfQorCisgICAgLy8gQWZ0ZXIgZm91ciBwYXNzZXMgb2Yg
aWRsZSBwYWludGluZywgd2Ugc2hvdWxkIGJlIGZpbmlzaGVkIHBhaW50aW5nCisgICAgRVhQRUNU
X0ZBTFNFKGxheWVyLT5uZWVkc0lkbGVQYWludCh2aXNpYmxlUmVjdCkpOworCisgICAgLy8gV2Ug
c2hvdWxkIGhhdmUgb25lIHRpbGUgc3Vycm91bmRpbmcgdGhlIHZpc2libGUgdGlsZSBvbiBhbGwg
c2lkZXMsIGJ1dCBubyBvdGhlciB0aWxlcy4KKyAgICBJbnRSZWN0IGlkbGVQYWludFRpbGVzKDEs
IDEsIDMsIDMpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNTsgaSsrKSB7CisgICAgICAgIGZv
ciAoaW50IGogPSAwOyBqIDwgNTsgaisrKSB7CisgICAgICAgICAgICBpZiAoaWRsZVBhaW50VGls
ZXMuY29udGFpbnMoaSwgaikpCisgICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUobGF5ZXJJbXBs
LT5oYXNUaWxlQXQoaSwgaikpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIEVY
UEVDVF9GQUxTRShsYXllckltcGwtPmhhc1RpbGVBdChpLCBqKSk7CisgICAgICAgIH0KKyAgICB9
Cit9CisKKwogfSAvLyBuYW1lc3BhY2UKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117316</attachid>
            <date>2011-11-30 19:59:04 -0800</date>
            <delta_ts>2011-12-01 19:18:15 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72686-20111130195903.patch</filename>
            <type>text/plain</type>
            <size>28014</size>
            <attacher name="Eric Penner">epenner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxMzE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzhlN2Y5MGJlZDUyMjFj
NGQ5MTEyOTI2MzEyMzEzNmJiYmU0MjMyNy4uNjJkN2M3MDczMmFlNWY3YzZjZGU0YzQ0Y2EzM2Fi
ZmM4NWE2MjMxOCAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDExLTExLTMwICBFcmlj
IFBlbm5lciAgPGVwZW5uZXJAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIE5lZWQg
dG8gcHJlcGFpbnQgdGlsZXMgaW4gVGlsZWRMYXllckNocm9taXVtCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjY4NgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3RzOiBwdXNoSWRsZVBhaW50VGlsZXMK
KworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9t
aXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjppZGxlUGFp
bnRDb250ZW50c0lmRGlydHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0NvbnRlbnRMYXllckNocm9taXVtLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6
aWRsZVBhaW50Q29udGVudHNJZkRpcnR5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9UZXh0dXJlTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFu
YWdlcjo6cHJvdGVjdFRleHR1cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVy
Q2hyb21pdW06OlRpbGVkTGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExh
eWVyQ2hyb21pdW06OmNsZWFudXBSZXNvdXJjZXMpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRM
YXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNv
cmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlVGlsZXMpOgorICAgICAgICAo
V2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGVJZGxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6bmVlZHNJZGxlUGFpbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjppZGxlUGFpbnRSZWN0KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Ojp1cGRhdGVMYXllcnMpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpwYWludENvbnRlbnRzSWZEaXJ0eSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnBhaW50TWFza0FuZFJlcGxpY2FGb3JSZW5k
ZXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6cGFpbnRMYXll
ckNvbnRlbnRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3QuaDoKKwogMjAxMS0xMS0yOCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBh
cHBsZS5jb20+CiAKICAgICAgICAgQWRkIHN1cHBvcnQgZm9yIGtub3dpbmcgd2hlbiBhIFRyZWVF
bGVtZW50IGlzIGFkZGVkIG9yIGNoYW5nZWQgYW55d2hlcmUgaW4gYSBUcmVlT3V0bGluZS4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggNzQxMzM3MjNhY2E1ZmVhNjZlYjg4OTM5MjE3MWYz
ZmY5ZWZlZDc4Yi4uMzQzYzkxNzRjNjNmOThkMDVlYTliY2VhMDY0ZGRhMThhZTA1NjhiYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMSBAQAorMjAxMS0xMS0zMCAgRXJp
YyBQZW5uZXIgIDxlcGVubmVyQGdvb2dsZS5jb20+CisKKyAgICAgICAgW2Nocm9taXVtXSBOZWVk
IHRvIHByZXBhaW50IHRpbGVzIGluIFRpbGVkTGF5ZXJDaHJvbWl1bQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI2ODYKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdFRl
c3QuY3BwOgorICAgICAgICAoV1RGOjpDb250ZW50TGF5ZXJDaHJvbWl1bVdpdGhVcGRhdGVUcmFj
a2luZzo6aWRsZVBhaW50Q29udGVudHNDb3VudCk6CisgICAgICAgIChXVEY6OkNvbnRlbnRMYXll
ckNocm9taXVtV2l0aFVwZGF0ZVRyYWNraW5nOjpyZXNldFBhaW50Q29udGVudHNDb3VudCk6Cisg
ICAgICAgIChXVEY6OkNvbnRlbnRMYXllckNocm9taXVtV2l0aFVwZGF0ZVRyYWNraW5nOjppZGxl
UGFpbnRDb250ZW50c0lmRGlydHkpOgorICAgICAgICAoV1RGOjpDb250ZW50TGF5ZXJDaHJvbWl1
bVdpdGhVcGRhdGVUcmFja2luZzo6Q29udGVudExheWVyQ2hyb21pdW1XaXRoVXBkYXRlVHJhY2tp
bmcpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0T3BhY2l0eUNoYW5nZTo6YWZ0
ZXJUZXN0KToKKyAgICAgICAgKiB0ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0LmNwcDoKKyAg
ICAgICAgKFdURjo6RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlSWRsZSk6
CisgICAgICAgIChXVEY6OkZha2VUaWxlZExheWVyQ2hyb21pdW06Om5lZWRzSWRsZVBhaW50KToK
KyAgICAgICAgKFdURjo6VEVTVCk6CisKIDIwMTEtMTEtMjggIEpvbiBMZWUgIDxqb25sZWVAYXBw
bGUuY29tPgogCiAgICAgICAgIFBvc3NpYmxlIGZpeCBmb3IgdGVzdCBmYWlsdXJlcyBpbiByMTAx
MzA3LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCmluZGV4IDllYjFkNzk5ZjZk
OTFlY2VjNjc5ODEwNmVjNjAyN2JiNDFlNTI1MjAuLmY1YzdkMzhjZTNmNDU4NGNiNTNjYmMyYTEz
MmNiZjZmNzBkZGJjMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKQEAg
LTExMSw2ICsxMTEsMjAgQEAgdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50
c0lmRGlydHkoKQogICAgIHJlc2V0TmVlZHNEaXNwbGF5KCk7CiB9CiAKK3ZvaWQgQ29udGVudExh
eWVyQ2hyb21pdW06OmlkbGVQYWludENvbnRlbnRzSWZEaXJ0eSgpCit7CisgICAgaWYgKCFkcmF3
c0NvbnRlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3QgSW50UmVjdCYgbGF5ZXJS
ZWN0ID0gdmlzaWJsZUxheWVyUmVjdCgpOworICAgIGlmIChsYXllclJlY3QuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBwcmVwYXJlVG9VcGRhdGVJZGxlKGxheWVyUmVjdCk7Cisg
ICAgaWYgKG5lZWRzSWRsZVBhaW50KGxheWVyUmVjdCkpCisgICAgICAgIHNldE5lZWRzQ29tbWl0
KCk7Cit9CisKIGJvb2wgQ29udGVudExheWVyQ2hyb21pdW06OmRyYXdzQ29udGVudCgpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIG1fZGVsZWdhdGUgJiYgbV9kZWxlZ2F0ZS0+ZHJhd3NDb250ZW50KCkg
JiYgVGlsZWRMYXllckNocm9taXVtOjpkcmF3c0NvbnRlbnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVt
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5
ZXJDaHJvbWl1bS5oCmluZGV4IGI4MzRlNjc2YmQ2MzQ0NWFhNDUzYjM2NWVlZTI4MDI0MGYzODA5
YzEuLjBjNTc0YjVkZmRjMGE1NzFiODExYmUwMzk3NjRhYzc1YjFjMmUzZWUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNo
cm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Q29udGVudExheWVyQ2hyb21pdW0uaApAQCAtNTAsNiArNTAsNyBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB+Q29udGVudExheWVyQ2hyb21pdW0oKTsKIAogICAgIHZpcnR1YWwgdm9pZCBwYWludENv
bnRlbnRzSWZEaXJ0eSgpOworICAgIHZpcnR1YWwgdm9pZCBpZGxlUGFpbnRDb250ZW50c0lmRGly
dHkoKTsKIAogcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0IENvbnRlbnRMYXllckNocm9taXVtKEND
TGF5ZXJEZWxlZ2F0ZSopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDcxM2RmYjI1MjMwMTA4NmZm
YTdlNTgxYzA0MjA0NzVlOGJkZmZiN2QuLjRmYjlmZDI2NzhlZjQxNDU5MDQ3NjkwODZlMzBjZjIz
YjU1Yzg3ZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKQEAgLTE2Miw2ICsxNjIsNyBAQCBwdWJsaWM6
CiAgICAgLy8gVGhlc2UgbWV0aG9kcyB0eXBpY2FsbHkgbmVlZCB0byBiZSBvdmVyd3JpdHRlbiBi
eSBkZXJpdmVkIGNsYXNzZXMuCiAgICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHNJZkRpcnR5
KCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGlkbGVQYWludENvbnRlbnRzSWZEaXJ0eSgpIHsgfQog
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKEdyYXBoaWNzQ29udGV4
dDNEKiwgQ0NUZXh0dXJlVXBkYXRlciYpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRJc01hc2so
Ym9vbCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIHVucmVzZXJ2ZUNvbnRlbnRzVGV4dHVyZSgpIHsg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
VGV4dHVyZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vVGV4dHVyZU1hbmFnZXIuY3BwCmluZGV4IGM2MDBkOWU2NDkxZDdkMWU3NTcyMjIxNGUz
MTlkYTdmMGMxODg0Y2UuLmZmNWJjM2UzZDc2ZWJiNTQ2Y2U5NmM4MGE5ODNlNGI0ZTk4ODVkNzAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Rl
eHR1cmVNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9UZXh0dXJlTWFuYWdlci5jcHAKQEAgLTEwNiw3ICsxMDYsNiBAQCBib29sIFRleHR1
cmVNYW5hZ2VyOjppc1Byb3RlY3RlZChUZXh0dXJlVG9rZW4gdG9rZW4pCiB2b2lkIFRleHR1cmVN
YW5hZ2VyOjpwcm90ZWN0VGV4dHVyZShUZXh0dXJlVG9rZW4gdG9rZW4pCiB7CiAgICAgQVNTRVJU
KGhhc1RleHR1cmUodG9rZW4pKTsKLSAgICBBU1NFUlQoIW1fdGV4dHVyZXMuZ2V0KHRva2VuKS5p
c1Byb3RlY3RlZCk7CiAgICAgVGV4dHVyZUluZm8gaW5mbyA9IG1fdGV4dHVyZXMudGFrZSh0b2tl
bik7CiAgICAgaW5mby5pc1Byb3RlY3RlZCA9IHRydWU7CiAgICAgbV90ZXh0dXJlcy5hZGQodG9r
ZW4sIGluZm8pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggZmZhZDJmNWIx
NzVjOTY2NWQ2NjU3NWJhZmNjMzliZmNlZTBlMWU2YS4uZjA0NzE0MDI4N2VhN2YzYTgwN2FlYzRm
NzFjZjY2OGMwMTBhOTU5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCkBAIC02
OSw2ICs2OSw3IEBAIFRpbGVkTGF5ZXJDaHJvbWl1bTo6VGlsZWRMYXllckNocm9taXVtKENDTGF5
ZXJEZWxlZ2F0ZSogZGVsZWdhdGUpCiAgICAgOiBMYXllckNocm9taXVtKGRlbGVnYXRlKQogICAg
ICwgbV90ZXh0dXJlRm9ybWF0KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0pCiAgICAg
LCBtX3NraXBzRHJhdyhmYWxzZSkKKyAgICAsIG1fc2tpcHNJZGxlUGFpbnQoZmFsc2UpCiAgICAg
LCBtX3RleHR1cmVPcmllbnRhdGlvbihMYXllclRleHR1cmVVcGRhdGVyOjpJbnZhbGlkT3JpZW50
YXRpb24pCiAgICAgLCBtX3NhbXBsZWRUZXhlbEZvcm1hdChMYXllclRleHR1cmVVcGRhdGVyOjpT
YW1wbGVkVGV4ZWxGb3JtYXRJbnZhbGlkKQogICAgICwgbV90aWxpbmdPcHRpb24oQXV0b1RpbGUp
CkBAIC05MCw3ICs5MSw3IEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpjbGVhbnVwUmVzb3Vy
Y2VzKCkKIAogICAgIG1fdGlsZXIuY2xlYXIoKTsKICAgICBtX3BhaW50UmVjdCA9IEludFJlY3Qo
KTsKLSAgICBtX3JlcXVlc3RlZFVwZGF0ZVJlY3QgPSBJbnRSZWN0KCk7CisgICAgbV9yZXF1ZXN0
ZWRVcGRhdGVUaWxlc1JlY3QgPSBJbnRSZWN0KCk7CiB9CiAKIHZvaWQgVGlsZWRMYXllckNocm9t
aXVtOjp1cGRhdGVUaWxlU2l6ZUFuZFRpbGluZ09wdGlvbigpCkBAIC0xNzIsMTEgKzE3MywxMyBA
QCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlVGlsZXIoQ0NMYXllclRpbGluZ0RhdGE6
OkJvcmRlclRleGVsT3B0aW9uIGJvcmRlcgogdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnVwZGF0
ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0M0QqLCBDQ1RleHR1cmVVcGRhdGVy
JiB1cGRhdGVyKQogewogICAgIC8vIFBhaW50aW5nIGNvdWxkIGNhdXNlIGNvbXBvc2l0aW5nIHRv
IGdldCB0dXJuZWQgb2ZmLCB3aGljaCBtYXkgY2F1c2UgdGhlIHRpbGVyIHRvIGJlY29tZSBpbnZh
bGlkYXRlZCBtaWQtdXBkYXRlLgotICAgIGlmIChtX3NraXBzRHJhdyB8fCBtX3JlcXVlc3RlZFVw
ZGF0ZVJlY3QuaXNFbXB0eSgpIHx8ICFtX3RpbGVyLT5udW1UaWxlcygpKQorICAgIGlmIChtX3Nr
aXBzRHJhdyB8fCBtX3JlcXVlc3RlZFVwZGF0ZVRpbGVzUmVjdC5pc0VtcHR5KCkgfHwgIW1fdGls
ZXItPm51bVRpbGVzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGludCBsZWZ0LCB0b3AsIHJp
Z2h0LCBib3R0b207Ci0gICAgbV90aWxlci0+Y29udGVudFJlY3RUb1RpbGVJbmRpY2VzKG1fcmVx
dWVzdGVkVXBkYXRlUmVjdCwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKKyAgICBpbnQgbGVm
dCA9IG1fcmVxdWVzdGVkVXBkYXRlVGlsZXNSZWN0LngoKTsKKyAgICBpbnQgdG9wID0gbV9yZXF1
ZXN0ZWRVcGRhdGVUaWxlc1JlY3QueSgpOworICAgIGludCByaWdodCA9IG1fcmVxdWVzdGVkVXBk
YXRlVGlsZXNSZWN0Lm1heFgoKSAtIDE7CisgICAgaW50IGJvdHRvbSA9IG1fcmVxdWVzdGVkVXBk
YXRlVGlsZXNSZWN0Lm1heFkoKSAtIDE7CiAgICAgZm9yIChpbnQgaiA9IHRvcDsgaiA8PSBib3R0
b207ICsraikgewogICAgICAgICBmb3IgKGludCBpID0gbGVmdDsgaSA8PSByaWdodDsgKytpKSB7
CiAgICAgICAgICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0gdGlsZUF0KGksIGopOwpAQCAtMzM0
LDMyICszMzcsMTEgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnByb3RlY3RUaWxlVGV4dHVy
ZXMoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCiAgICAgfQogfQogCi12b2lkIFRpbGVkTGF5
ZXJDaHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQor
dm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVUb1VwZGF0ZVRpbGVzKGJvb2wgaWRsZSwg
aW50IGxlZnQsIGludCB0b3AsIGludCByaWdodCwgaW50IGJvdHRvbSkKIHsKLSAgICBpZiAoIW1f
dGlsZXIpCi0gICAgICAgIGNyZWF0ZVRpbGVyKGlzTm9uQ29tcG9zaXRlZENvbnRlbnQoKSA/IEND
TGF5ZXJUaWxpbmdEYXRhOjpOb0JvcmRlclRleGVscyA6IENDTGF5ZXJUaWxpbmdEYXRhOjpIYXNC
b3JkZXJUZXhlbHMpOwotCi0gICAgQVNTRVJUKG1fdGlsZXIpOwotCi0gICAgbV9za2lwc0RyYXcg
PSBmYWxzZTsKLQotICAgIGlmIChjb250ZW50UmVjdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9y
ZXF1ZXN0ZWRVcGRhdGVSZWN0ID0gSW50UmVjdCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgbV90aWxlci0+Z3Jvd0xheWVyVG9Db250YWluKGNvbnRlbnRSZWN0KTsKLQotICAgIGlm
ICghbV90aWxlci0+bnVtVGlsZXMoKSkgewotICAgICAgICBtX3JlcXVlc3RlZFVwZGF0ZVJlY3Qg
PSBJbnRSZWN0KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICAvLyBDcmVhdGUgdGls
ZXMgYXMgbmVlZGVkLCBleHBhbmRpbmcgYSBkaXJ0eSByZWN0IHRvIGNvbnRhaW4gYWxsCiAgICAg
Ly8gdGhlIGRpcnR5IHJlZ2lvbnMgY3VycmVudGx5IGJlaW5nIGRyYXduLgogICAgIEludFJlY3Qg
ZGlydHlMYXllclJlY3Q7Ci0gICAgaW50IGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbTsKLSAgICBt
X3RpbGVyLT5jb250ZW50UmVjdFRvVGlsZUluZGljZXMoY29udGVudFJlY3QsIGxlZnQsIHRvcCwg
cmlnaHQsIGJvdHRvbSk7CiAgICAgZm9yIChpbnQgaiA9IHRvcDsgaiA8PSBib3R0b207ICsraikg
ewogICAgICAgICBmb3IgKGludCBpID0gbGVmdDsgaSA8PSByaWdodDsgKytpKSB7CiAgICAgICAg
ICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0gdGlsZUF0KGksIGopOwpAQCAtMzcwLDggKzM1Miwx
MSBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJl
Y3QmIGNvbnRlbnRSZWN0KQogICAgICAgICAgICAgICAgIHRpbGUtPm1fZGlydHlMYXllclJlY3Qg
PSBtX3RpbGVyLT50aWxlTGF5ZXJSZWN0KHRpbGUpOwogCiAgICAgICAgICAgICBpZiAoIXRpbGUt
PnRleHR1cmUoKS0+cmVzZXJ2ZShtX3RpbGVyLT50aWxlU2l6ZSgpLCBtX3RleHR1cmVGb3JtYXQp
KSB7Ci0gICAgICAgICAgICAgICAgbV9za2lwc0RyYXcgPSB0cnVlOwotICAgICAgICAgICAgICAg
IGNsZWFudXBSZXNvdXJjZXMoKTsKKyAgICAgICAgICAgICAgICBtX3NraXBzSWRsZVBhaW50ID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICBpZiAoIWlkbGUpIHsKKyAgICAgICAgICAgICAgICAgICAg
bV9za2lwc0RyYXcgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBjbGVhbnVwUmVzb3VyY2Vz
KCk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgIH0KIApAQCAtMzc5LDE1ICszNjQsMTYgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnBy
ZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKICAgICAgICAgfQogICAg
IH0KIAotICAgIC8vIER1ZSB0byBib3JkZXJzLCB3aGVuIHRoZSBwYWludCByZWN0IGlzIGV4dGVu
ZGVkIHRvIHRpbGUgYm91bmRhcmllcywgaXQKLSAgICAvLyBtYXkgZW5kIHVwIG92ZXJsYXBwaW5n
IG1vcmUgdGlsZXMgdGhhbiB0aGUgb3JpZ2luYWwgY29udGVudCByZWN0LiBSZWNvcmQKLSAgICAv
LyB0aGF0IG9yaWdpbmFsIHJlY3Qgc28gd2UgZG9uJ3QgdXBsb2FkIG1vcmUgdGlsZXMgdGhhbiBu
ZWNlc3NhcnkuCi0gICAgbV9yZXF1ZXN0ZWRVcGRhdGVSZWN0ID0gY29udGVudFJlY3Q7Ci0KICAg
ICBtX3BhaW50UmVjdCA9IG1fdGlsZXItPmxheWVyUmVjdFRvQ29udGVudFJlY3QoZGlydHlMYXll
clJlY3QpOwogICAgIGlmIChkaXJ0eUxheWVyUmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
bjsKIAorICAgIC8vIER1ZSB0byBib3JkZXJzLCB3aGVuIHRoZSBwYWludCByZWN0IGlzIGV4dGVu
ZGVkIHRvIHRpbGUgYm91bmRhcmllcywgaXQKKyAgICAvLyBtYXkgZW5kIHVwIG92ZXJsYXBwaW5n
IG1vcmUgdGlsZXMgdGhhbiB0aGUgb3JpZ2luYWwgY29udGVudCByZWN0LiBSZWNvcmQKKyAgICAv
LyB0aGUgb3JpZ2luYWwgdGlsZXMgc28gd2UgZG9uJ3QgdXBsb2FkIG1vcmUgdGlsZXMgdGhhbiBu
ZWNlc3NhcnkuCisgICAgaWYgKCFtX3BhaW50UmVjdC5pc0VtcHR5KCkpCisgICAgICAgIG1fcmVx
dWVzdGVkVXBkYXRlVGlsZXNSZWN0ID0gSW50UmVjdChsZWZ0LCB0b3AsIHJpZ2h0IC0gbGVmdCAr
IDEsIGJvdHRvbSAtIHRvcCArIDEpOworCiAgICAgLy8gQ2FsbGluZyBwcmVwYXJlVG9VcGRhdGUo
KSBjYWxscyBpbnRvIFdlYktpdCB0byBwYWludCwgd2hpY2ggbWF5IGhhdmUgdGhlIHNpZGUKICAg
ICAvLyBlZmZlY3Qgb2YgZGlzYWJsaW5nIGNvbXBvc2l0aW5nLCB3aGljaCBjYXVzZXMgb3VyIHJl
ZmVyZW5jZSB0byB0aGUgdGV4dHVyZSB1cGRhdGVyIHRvIGJlIGRlbGV0ZWQuCiAgICAgLy8gSG93
ZXZlciwgd2UgY2FuJ3QgZnJlZSB0aGUgbWVtb3J5IGJhY2tpbmcgdGhlIEdyYXBoaWNzQ29udGV4
dCB1bnRpbCB0aGUgcGFpbnQgZmluaXNoZXMsCkBAIC0zOTYsNSArMzgyLDEyMCBAQCB2b2lkIFRp
bGVkTGF5ZXJDaHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRS
ZWN0KQogICAgIHRleHR1cmVVcGRhdGVyKCktPnByZXBhcmVUb1VwZGF0ZShtX3BhaW50UmVjdCwg
bV90aWxlci0+dGlsZVNpemUoKSwgbV90aWxlci0+aGFzQm9yZGVyVGV4ZWxzKCksIGNvbnRlbnRz
U2NhbGUoKSk7CiB9CiAKKwordm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVUb1VwZGF0
ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKK3sKKyAgICBpZiAoIW1fdGlsZXIpCisgICAg
ICAgIGNyZWF0ZVRpbGVyKGlzTm9uQ29tcG9zaXRlZENvbnRlbnQoKSA/IENDTGF5ZXJUaWxpbmdE
YXRhOjpOb0JvcmRlclRleGVscyA6IENDTGF5ZXJUaWxpbmdEYXRhOjpIYXNCb3JkZXJUZXhlbHMp
OworCisgICAgQVNTRVJUKG1fdGlsZXIpOworCisgICAgbV9za2lwc0RyYXcgPSBmYWxzZTsKKyAg
ICBtX3NraXBzSWRsZVBhaW50ID0gZmFsc2U7CisgICAgbV9yZXF1ZXN0ZWRVcGRhdGVUaWxlc1Jl
Y3QgPSBJbnRSZWN0KCk7CisgICAgbV9wYWludFJlY3QgPSBJbnRSZWN0KCk7CisKKyAgICBpZiAo
Y29udGVudFJlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3RpbGVyLT5n
cm93TGF5ZXJUb0NvbnRhaW4oY29udGVudFJlY3QpOworCisgICAgaWYgKCFtX3RpbGVyLT5udW1U
aWxlcygpKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQgbGVmdCwgdG9wLCByaWdodCwgYm90
dG9tOworICAgIG1fdGlsZXItPmNvbnRlbnRSZWN0VG9UaWxlSW5kaWNlcyhjb250ZW50UmVjdCwg
bGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKKworICAgIHByZXBhcmVUb1VwZGF0ZVRpbGVzKGZh
bHNlLCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworfQorCit2b2lkIFRpbGVkTGF5ZXJDaHJv
bWl1bTo6cHJlcGFyZVRvVXBkYXRlSWRsZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKK3sK
KyAgICBBU1NFUlQobV90aWxlcik7CisKKyAgICAvLyBBYm9ydCBpZiB3ZSBoYXZlIGFscmVhZHkg
cHJlcGFyZWQgYSBwYWludCBvciBydW4gb3V0IG9mIG1lbW9yeS4KKyAgICBpZiAobV9za2lwc0lk
bGVQYWludCB8fCAhbV9wYWludFJlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBJbnRSZWN0IGlkbGVQYWludENvbnRlbnRSZWN0ID0gaWRsZVBhaW50UmVjdChjb250ZW50UmVj
dCk7CisgICAgbV90aWxlci0+Z3Jvd0xheWVyVG9Db250YWluKGlkbGVQYWludENvbnRlbnRSZWN0
KTsKKworICAgIGlmICghbV90aWxlci0+bnVtVGlsZXMoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgLy8gUHJvdGVjdCBhbnkgdGV4dHVyZXMgaW4gdGhlIHByZS1wYWludCBhcmVhIHNvIHdlIGRv
bid0IGVuZCB1cCBqdXN0CisgICAgLy8gcmVjbGFpbWluZyB0aGVtIGJlbG93LgorICAgIHByb3Rl
Y3RUaWxlVGV4dHVyZXMoaWRsZVBhaW50Q29udGVudFJlY3QpOworCisgICAgLy8gRXhwYW5kIG91
dHdhcmRzIHVudGlsIHdlIGZpbmQgYSBkaXJ0eSByb3cgb3IgY29sdW1uIHRvIHVwZGF0ZS4KKyAg
ICBpbnQgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tOworICAgIG1fdGlsZXItPmNvbnRlbnRSZWN0
VG9UaWxlSW5kaWNlcyhjb250ZW50UmVjdCwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKKyAg
ICBpbnQgcHJlcGFpbnRMZWZ0LCBwcmVwYWludFRvcCwgcHJlcGFpbnRSaWdodCwgcHJlcGFpbnRC
b3R0b207CisgICAgbV90aWxlci0+Y29udGVudFJlY3RUb1RpbGVJbmRpY2VzKGlkbGVQYWludENv
bnRlbnRSZWN0LCBwcmVwYWludExlZnQsIHByZXBhaW50VG9wLCBwcmVwYWludFJpZ2h0LCBwcmVw
YWludEJvdHRvbSk7CisgICAgd2hpbGUgKCFtX3NraXBzSWRsZVBhaW50ICYmIChsZWZ0ID4gcHJl
cGFpbnRMZWZ0IHx8IHRvcCA+IHByZXBhaW50VG9wIHx8IHJpZ2h0IDwgcHJlcGFpbnRSaWdodCB8
fCBib3R0b20gPCBwcmVwYWludEJvdHRvbSkpIHsKKyAgICAgICAgaWYgKGJvdHRvbSA8IHByZXBh
aW50Qm90dG9tKSB7CisgICAgICAgICAgICArK2JvdHRvbTsKKyAgICAgICAgICAgIHByZXBhcmVU
b1VwZGF0ZVRpbGVzKHRydWUsIGxlZnQsIGJvdHRvbSwgcmlnaHQsIGJvdHRvbSk7CisgICAgICAg
ICAgICBpZiAoIW1fcGFpbnRSZWN0LmlzRW1wdHkoKSB8fCBtX3NraXBzSWRsZVBhaW50KQorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmICh0b3AgPiBwcmVwYWlu
dFRvcCkgeworICAgICAgICAgICAgLS10b3A7CisgICAgICAgICAgICBwcmVwYXJlVG9VcGRhdGVU
aWxlcyh0cnVlLCBsZWZ0LCB0b3AsIHJpZ2h0LCB0b3ApOworICAgICAgICAgICAgaWYgKCFtX3Bh
aW50UmVjdC5pc0VtcHR5KCkgfHwgbV9za2lwc0lkbGVQYWludCkKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAobGVmdCA+IHByZXBhaW50TGVmdCkgeworICAg
ICAgICAgICAgLS1sZWZ0OworICAgICAgICAgICAgcHJlcGFyZVRvVXBkYXRlVGlsZXModHJ1ZSwg
bGVmdCwgdG9wLCBsZWZ0LCBib3R0b20pOworICAgICAgICAgICAgaWYgKCFtX3BhaW50UmVjdC5p
c0VtcHR5KCkgfHwgbV9za2lwc0lkbGVQYWludCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBpZiAocmlnaHQgPCBwcmVwYWludFJpZ2h0KSB7CisgICAgICAgICAg
ICArK3JpZ2h0OworICAgICAgICAgICAgcHJlcGFyZVRvVXBkYXRlVGlsZXModHJ1ZSwgcmlnaHQs
IHRvcCwgcmlnaHQsIGJvdHRvbSk7CisgICAgICAgICAgICBpZiAoIW1fcGFpbnRSZWN0LmlzRW1w
dHkoKSB8fCBtX3NraXBzSWRsZVBhaW50KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgfQorfQorCitib29sIFRpbGVkTGF5ZXJDaHJvbWl1bTo6bmVlZHNJZGxlUGFpbnQo
Y29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCit7CisgICAgaWYgKG1fc2tpcHNJZGxlUGFpbnQp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEFTU0VSVChtX3RpbGVyKTsKKworICAgIElu
dFJlY3QgaWRsZVBhaW50Q29udGVudFJlY3QgPSBpZGxlUGFpbnRSZWN0KGNvbnRlbnRSZWN0KTsK
KworICAgIGludCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b207CisgICAgbV90aWxlci0+Y29udGVu
dFJlY3RUb1RpbGVJbmRpY2VzKGlkbGVQYWludENvbnRlbnRSZWN0LCBsZWZ0LCB0b3AsIHJpZ2h0
LCBib3R0b20pOworICAgIGZvciAoaW50IGogPSB0b3A7IGogPD0gYm90dG9tOyArK2opIHsKKyAg
ICAgICAgZm9yIChpbnQgaSA9IGxlZnQ7IGkgPD0gcmlnaHQ7ICsraSkgeworICAgICAgICAgICAg
aWYgKG1fcmVxdWVzdGVkVXBkYXRlVGlsZXNSZWN0LmNvbnRhaW5zKEludFBvaW50KGksIGopKSkK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIFVwZGF0YWJsZVRpbGUqIHRp
bGUgPSB0aWxlQXQoaSwgaik7CisgICAgICAgICAgICBpZiAoIXRpbGUgfHwgIXRpbGUtPnRleHR1
cmUoKS0+aXNWYWxpZChtX3RpbGVyLT50aWxlU2l6ZSgpLCBtX3RleHR1cmVGb3JtYXQpIHx8IHRp
bGUtPmlzRGlydHkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0ludFJlY3QgVGlsZWRMYXllckNocm9taXVt
OjppZGxlUGFpbnRSZWN0KGNvbnN0IEludFJlY3QmIHZpc2libGVDb250ZW50UmVjdCkKK3sKKyAg
ICBBU1NFUlQobV90aWxlcik7CisgICAgSW50UmVjdCBwcmVwYWludFJlY3QgPSB2aXNpYmxlQ29u
dGVudFJlY3Q7CisgICAgLy8gRklYTUU6IFRoaXMgY2FuIGJlIG1hZGUgYSBsb3QgbGFyZ2VyIGlm
IHdlIGNhbjoKKyAgICAvLyAtIHJlc2VydmUgbWVtb3J5IGF0IGEgbG93ZXIgcHJpb3JpdHkgdGhh
biBmb3IgdmlzaWJsZSBjb250ZW50CisgICAgLy8gLSBvbmx5IHJlc2VydmUgaWRsZSBwYWludCB0
aWxlcyB1cCB0byBhIG1lbW9yeSByZWNsYWltIHRocmVzaG9sZCBhbmQKKyAgICAvLyAtIGluc3Vy
ZSB3ZSBwbGF5IG5pY2VseSB3aXRoIG90aGVyIGxheWVycworICAgIHByZXBhaW50UmVjdC5pbmZs
YXRlWChtX3RpbGVyLT50aWxlU2l6ZSgpLndpZHRoKCkpOworICAgIHByZXBhaW50UmVjdC5pbmZs
YXRlWShtX3RpbGVyLT50aWxlU2l6ZSgpLmhlaWdodCgpKTsKKyAgICBwcmVwYWludFJlY3QuaW50
ZXJzZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgY29udGVudEJvdW5kcygpKSk7CisgICAg
cmV0dXJuIHByZXBhaW50UmVjdDsKK30KKwogfQogI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmgKaW5kZXggMzYzZGE2MTg1ODAy
ZWVkYzc0ZjUxNTJhZTQ5ZjM4N2M5MmRjMGY4ZS4uM2EwNWRlNDEzMzI4MGI0MTc5MTQyYWUxZGRm
MDY5ZDIyYmU1OTZjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmgKQEAgLTczLDkgKzcz
LDE2IEBAIHByb3RlY3RlZDoKIAogICAgIC8vIFNldCBpbnZhbGlkYXRpb25zIHRvIGJlIHBvdGVu
dGlhbGx5IHJlcGFpbnRlZCBkdXJpbmcgdXBkYXRlKCkuCiAgICAgdm9pZCBpbnZhbGlkYXRlUmVj
dChjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCk7CisKICAgICAvLyBQcmVwYXJlIGRhdGEgbmVl
ZGVkIHRvIHVwZGF0ZSB0ZXh0dXJlcyB0aGF0IGludGVyc2VjdCB3aXRoIGNvbnRlbnRSZWN0Lgog
ICAgIHZvaWQgcHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KTsKIAor
ICAgIC8vIFNhbWUgYXMgYWJvdmUsIGJ1dCB0aGlzIHdpbGwgdHJ5IHRvIHBhaW50IGFkZGl0aW9u
YWwgc3Vycm91bmRpbmcgY29udGVudCBpZiBpZGxlLgorICAgIHZvaWQgcHJlcGFyZVRvVXBkYXRl
SWRsZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCk7CisKKyAgICAvLyBBZnRlciBwcmVwYXJp
bmcgYW4gdXBkYXRlLCByZXR1cm5zIHRydWUgaWYgbW9yZSBwcmUtcGFpbnRpbmcgaXMgbmVlZGVk
LgorICAgIGJvb2wgbmVlZHNJZGxlUGFpbnQoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpOwor
CiAgICAgdmlydHVhbCB2b2lkIHByb3RlY3RWaXNpYmxlVGlsZVRleHR1cmVzKCk7CiAKICAgICB2
aXJ0dWFsIFRleHR1cmVNYW5hZ2VyKiB0ZXh0dXJlTWFuYWdlcigpIGNvbnN0OwpAQCAtODgsMTcg
Kzk1LDIyIEBAIHByaXZhdGU6CiAgICAgdm9pZCBjcmVhdGVUaWxlcklmTmVlZGVkKCk7CiAgICAg
dm9pZCBzZXRUaWxpbmdPcHRpb24oVGlsaW5nT3B0aW9uKTsKIAorICAgIHZvaWQgcHJlcGFyZVRv
VXBkYXRlVGlsZXMoYm9vbCBpZGxlLCBpbnQgbGVmdCwgaW50IHRvcCwgaW50IHJpZ2h0LCBpbnQg
Ym90dG9tKTsKKyAgICBJbnRSZWN0IGlkbGVQYWludFJlY3QoY29uc3QgSW50UmVjdCYgdmlzaWJs
ZUNvbnRlbnRSZWN0KTsKKwogICAgIFVwZGF0YWJsZVRpbGUqIHRpbGVBdChpbnQsIGludCkgY29u
c3Q7CiAgICAgVXBkYXRhYmxlVGlsZSogY3JlYXRlVGlsZShpbnQsIGludCk7CiAKICAgICAvLyBU
ZW1wb3Jhcnkgc3RhdGUgaGVsZCBiZXR3ZWVuIHByZXBhcmVUb1VwZGF0ZSgpIGFuZCB1cGRhdGVD
b21wb3NpdG9yUmVzb3VyY2VzKCkuCi0gICAgSW50UmVjdCBtX3JlcXVlc3RlZFVwZGF0ZVJlY3Q7
CisgICAgSW50UmVjdCBtX3JlcXVlc3RlZFVwZGF0ZVRpbGVzUmVjdDsKKwogICAgIC8vIFN0YXRl
IGhlbGQgYmV0d2VlbiBwcmVwYXJlVG9VcGRhdGUoKSBhbmQgcHVzaFByb3BlcnRpZXNUbygpLiBU
aGlzIHJlcHJlc2VudHMgdGhlIGFyZWEKICAgICAvLyBvZiB0aGUgbGF5ZXIgdGhhdCBpcyBhY3R1
YWxseSByZS1wYWludGVkIGJ5IFdlYktpdC4KICAgICBJbnRSZWN0IG1fcGFpbnRSZWN0OwogCiAg
ICAgR0MzRGVudW0gbV90ZXh0dXJlRm9ybWF0OwogICAgIGJvb2wgbV9za2lwc0RyYXc7CisgICAg
Ym9vbCBtX3NraXBzSWRsZVBhaW50OwogICAgIExheWVyVGV4dHVyZVVwZGF0ZXI6Ok9yaWVudGF0
aW9uIG1fdGV4dHVyZU9yaWVudGF0aW9uOwogICAgIExheWVyVGV4dHVyZVVwZGF0ZXI6OlNhbXBs
ZWRUZXhlbEZvcm1hdCBtX3NhbXBsZWRUZXhlbEZvcm1hdDsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdC5jcHAKaW5kZXggNmM4ZGE0NjFhY2QxNzQxMGExMDI1ZTg5MzI1NGVkYWMwMTE3M2Vm
Ni4uYTIxZTI0ODMxY2EyMGZmZjdlZDJiZTUzNWU4Yzc4YWQ1OGFhYTg4NCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3QuY3BwCkBAIC0zMzUsMTAgKzMzNSwyMyBAQCB2b2lkIENDTGF5ZXJU
cmVlSG9zdDo6dXBkYXRlTGF5ZXJzKExheWVyQ2hyb21pdW0qIHJvb3RMYXllcikKICAgICAgICAg
Q0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxp
dHkocm9vdExheWVyLCByb290TGF5ZXIsIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwg
bV91cGRhdGVMaXN0LCByb290UmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCksIGxheWVyUmVuZGVy
ZXJDYXBhYmlsaXRpZXMoKS5tYXhUZXh0dXJlU2l6ZSk7CiAgICAgfQogCi0gICAgcGFpbnRMYXll
ckNvbnRlbnRzKG1fdXBkYXRlTGlzdCk7CisgICAgcGFpbnRMYXllckNvbnRlbnRzKG1fdXBkYXRl
TGlzdCwgUGFpbnRWaXNpYmxlKTsKKyAgICAvLyBUaGUgc2Vjb25kIChpZGxlKSBwYWludCB3aWxs
IGJlIGEgbm8tb3AgaW4gbGF5ZXJzIHdoZXJlIHBhaW50aW5nIGFscmVhZHkgb2NjdXJlZCBhYm92
ZS4KKyAgICBwYWludExheWVyQ29udGVudHMobV91cGRhdGVMaXN0LCBQYWludElkbGUpOwogfQog
Ci12b2lkIENDTGF5ZXJUcmVlSG9zdDo6cGFpbnRNYXNrQW5kUmVwbGljYUZvclJlbmRlclN1cmZh
Y2UoTGF5ZXJDaHJvbWl1bSogcmVuZGVyU3VyZmFjZUxheWVyKQorLy8gc3RhdGljCit2b2lkIEND
TGF5ZXJUcmVlSG9zdDo6cGFpbnRDb250ZW50c0lmRGlydHkoTGF5ZXJDaHJvbWl1bSogbGF5ZXIs
IFBhaW50VHlwZSBwYWludFR5cGUpCit7CisgICAgQVNTRVJUKGxheWVyKTsKKyAgICBBU1NFUlQo
UGFpbnRWaXNpYmxlID09IHBhaW50VHlwZSB8fCBQYWludElkbGUgPT0gcGFpbnRUeXBlKTsKKyAg
ICBpZiAoUGFpbnRWaXNpYmxlID09IHBhaW50VHlwZSkKKyAgICAgICAgbGF5ZXItPnBhaW50Q29u
dGVudHNJZkRpcnR5KCk7CisgICAgZWxzZQorICAgICAgICBsYXllci0+aWRsZVBhaW50Q29udGVu
dHNJZkRpcnR5KCk7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0OjpwYWludE1hc2tBbmRSZXBs
aWNhRm9yUmVuZGVyU3VyZmFjZShMYXllckNocm9taXVtKiByZW5kZXJTdXJmYWNlTGF5ZXIsIFBh
aW50VHlwZSBwYWludFR5cGUpCiB7CiAgICAgLy8gTm90ZTogTWFza3MgYW5kIHJlcGxpY2FzIG9u
bHkgZXhpc3QgZm9yIGxheWVycyB0aGF0IG93biByZW5kZXIgc3VyZmFjZXMuIElmIHdlIHJlYWNo
IHRoaXMgcG9pbnQKICAgICAvLyBpbiBjb2RlLCB3ZSBhbHJlYWR5IGtub3cgdGhhdCBhdCBsZWFz
dCBzb21ldGhpbmcgd2lsbCBiZSBkcmF3biBpbnRvIHRoaXMgcmVuZGVyIHN1cmZhY2UsIHNvIHRo
ZQpAQCAtMzQ3LDI0ICszNjAsMjQgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnBhaW50TWFza0Fu
ZFJlcGxpY2FGb3JSZW5kZXJTdXJmYWNlKExheWVyQ2hyb21pdW0qIHJlbmRlclMKICAgICBpZiAo
cmVuZGVyU3VyZmFjZUxheWVyLT5tYXNrTGF5ZXIoKSkgewogICAgICAgICByZW5kZXJTdXJmYWNl
TGF5ZXItPm1hc2tMYXllcigpLT5zZXRMYXllclRyZWVIb3N0KHRoaXMpOwogICAgICAgICByZW5k
ZXJTdXJmYWNlTGF5ZXItPm1hc2tMYXllcigpLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KEludFJlY3Qo
SW50UG9pbnQoKSwgcmVuZGVyU3VyZmFjZUxheWVyLT5jb250ZW50Qm91bmRzKCkpKTsKLSAgICAg
ICAgcmVuZGVyU3VyZmFjZUxheWVyLT5tYXNrTGF5ZXIoKS0+cGFpbnRDb250ZW50c0lmRGlydHko
KTsKKyAgICAgICAgcGFpbnRDb250ZW50c0lmRGlydHkocmVuZGVyU3VyZmFjZUxheWVyLT5tYXNr
TGF5ZXIoKSwgcGFpbnRUeXBlKTsKICAgICB9CiAKICAgICBMYXllckNocm9taXVtKiByZXBsaWNh
TGF5ZXIgPSByZW5kZXJTdXJmYWNlTGF5ZXItPnJlcGxpY2FMYXllcigpOwogICAgIGlmIChyZXBs
aWNhTGF5ZXIpIHsKIAogICAgICAgICByZXBsaWNhTGF5ZXItPnNldExheWVyVHJlZUhvc3QodGhp
cyk7Ci0gICAgICAgIHJlcGxpY2FMYXllci0+cGFpbnRDb250ZW50c0lmRGlydHkoKTsKKyAgICAg
ICAgcGFpbnRDb250ZW50c0lmRGlydHkocmVwbGljYUxheWVyLCBwYWludFR5cGUpOwogCiAgICAg
ICAgIGlmIChyZXBsaWNhTGF5ZXItPm1hc2tMYXllcigpKSB7CiAgICAgICAgICAgICByZXBsaWNh
TGF5ZXItPm1hc2tMYXllcigpLT5zZXRMYXllclRyZWVIb3N0KHRoaXMpOwogICAgICAgICAgICAg
cmVwbGljYUxheWVyLT5tYXNrTGF5ZXIoKS0+c2V0VmlzaWJsZUxheWVyUmVjdChJbnRSZWN0KElu
dFBvaW50KCksIHJlcGxpY2FMYXllci0+bWFza0xheWVyKCktPmNvbnRlbnRCb3VuZHMoKSkpOwot
ICAgICAgICAgICAgcmVwbGljYUxheWVyLT5tYXNrTGF5ZXIoKS0+cGFpbnRDb250ZW50c0lmRGly
dHkoKTsKKyAgICAgICAgICAgIHBhaW50Q29udGVudHNJZkRpcnR5KHJlcGxpY2FMYXllci0+bWFz
a0xheWVyKCksIHBhaW50VHlwZSk7CiAgICAgICAgIH0KICAgICB9CiB9CiAKLXZvaWQgQ0NMYXll
clRyZWVIb3N0OjpwYWludExheWVyQ29udGVudHMoY29uc3QgTGF5ZXJMaXN0JiByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0KQordm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnBhaW50TGF5ZXJDb250ZW50cyhj
b25zdCBMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIFBhaW50VHlwZSBwYWludFR5
cGUpCiB7CiAgICAgZm9yIChpbnQgc3VyZmFjZUluZGV4ID0gcmVuZGVyU3VyZmFjZUxheWVyTGlz
dC5zaXplKCkgLSAxOyBzdXJmYWNlSW5kZXggPj0gMCA7IC0tc3VyZmFjZUluZGV4KSB7CiAgICAg
ICAgIExheWVyQ2hyb21pdW0qIHJlbmRlclN1cmZhY2VMYXllciA9IHJlbmRlclN1cmZhY2VMYXll
ckxpc3Rbc3VyZmFjZUluZGV4XS5nZXQoKTsKQEAgLTM3Myw3ICszODYsNyBAQCB2b2lkIENDTGF5
ZXJUcmVlSG9zdDo6cGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdAogICAgICAgICBBU1NFUlQocmVuZGVyU3VyZmFjZS0+ZHJhd09wYWNpdHko
KSk7CiAKICAgICAgICAgcmVuZGVyU3VyZmFjZUxheWVyLT5zZXRMYXllclRyZWVIb3N0KHRoaXMp
OwotICAgICAgICBwYWludE1hc2tBbmRSZXBsaWNhRm9yUmVuZGVyU3VyZmFjZShyZW5kZXJTdXJm
YWNlTGF5ZXIpOworICAgICAgICBwYWludE1hc2tBbmRSZXBsaWNhRm9yUmVuZGVyU3VyZmFjZShy
ZW5kZXJTdXJmYWNlTGF5ZXIsIHBhaW50VHlwZSk7CiAKICAgICAgICAgY29uc3QgTGF5ZXJMaXN0
JiBsYXllckxpc3QgPSByZW5kZXJTdXJmYWNlLT5sYXllckxpc3QoKTsKICAgICAgICAgZm9yICh1
bnNpZ25lZCBsYXllckluZGV4ID0gMDsgbGF5ZXJJbmRleCA8IGxheWVyTGlzdC5zaXplKCk7ICsr
bGF5ZXJJbmRleCkgewpAQCAtMzg2LDEwICszOTksMTQgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6
OnBhaW50TGF5ZXJDb250ZW50cyhjb25zdCBMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxp
c3QKIAogICAgICAgICAgICAgbGF5ZXItPnNldExheWVyVHJlZUhvc3QodGhpcyk7CiAKKyAgICAg
ICAgICAgIC8vIFByaW1hcnkgcGFpbnQgY291bGQgaGF2ZSBzZXQgb3BhY2l0eSB0byB6ZXJvLiBT
a2lwIGlkbGUgcGFpbnQuCisgICAgICAgICAgICBpZiAocGFpbnRUeXBlID09IFBhaW50SWRsZSAm
JiAhbGF5ZXItPm9wYWNpdHkoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKwogICAgICAg
ICAgICAgQVNTRVJUKGxheWVyLT5vcGFjaXR5KCkpOwogICAgICAgICAgICAgQVNTRVJUKCFsYXll
ci0+Ym91bmRzKCkuaXNFbXB0eSgpKTsKIAotICAgICAgICAgICAgbGF5ZXItPnBhaW50Q29udGVu
dHNJZkRpcnR5KCk7CisgICAgICAgICAgICBwYWludENvbnRlbnRzSWZEaXJ0eShsYXllciwgcGFp
bnRUeXBlKTsKICAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgK
aW5kZXggNDg3ZDhmNGJlNmJjZDY0NDhkYzA2NjFkNTk2NzVlZmQ0NmEwNmY3ZC4uMjM4YTE2ZjFm
ZWM1ODRmNTlkNzliOWM0YTNhYmQ4YmY5NzQwNTBhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0LmgKQEAgLTE5NSw4ICsxOTUsMTAgQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICB0eXBl
ZGVmIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBMYXllckxpc3Q7CiAKLSAgICB2b2lk
IHBhaW50TGF5ZXJDb250ZW50cyhjb25zdCBMYXllckxpc3QmKTsKLSAgICB2b2lkIHBhaW50TWFz
a0FuZFJlcGxpY2FGb3JSZW5kZXJTdXJmYWNlKExheWVyQ2hyb21pdW0qKTsKKyAgICBlbnVtIFBh
aW50VHlwZSB7IFBhaW50VmlzaWJsZSwgUGFpbnRJZGxlIH07CisgICAgc3RhdGljIHZvaWQgcGFp
bnRDb250ZW50c0lmRGlydHkoTGF5ZXJDaHJvbWl1bSosIFBhaW50VHlwZSk7CisgICAgdm9pZCBw
YWludExheWVyQ29udGVudHMoY29uc3QgTGF5ZXJMaXN0JiwgUGFpbnRUeXBlKTsKKyAgICB2b2lk
IHBhaW50TWFza0FuZFJlcGxpY2FGb3JSZW5kZXJTdXJmYWNlKExheWVyQ2hyb21pdW0qLCBQYWlu
dFR5cGUpOwogCiAgICAgdm9pZCB1cGRhdGVMYXllcnMoTGF5ZXJDaHJvbWl1bSopOwogICAgIHZv
aWQgY2xlYXJQZW5kaW5nVXBkYXRlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcAppbmRleCA0YTQxNzk2NDc5MTNiOGRmMGE2
N2Y5M2UzMjg2OWY0YzNkM2U3Y2Y2Li4xYTE5MmMzOGRmZDRlNDkyZGIyYzUwYTJiMzMyNTM0OTk5
MjNmZGE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJU
cmVlSG9zdFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXll
clRyZWVIb3N0VGVzdC5jcHAKQEAgLTkzMCw3ICs5MzAsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8Q29udGVudExheWVyQ2hyb21pdW1XaXRoVXBkYXRlVHJhY2tpbmc+IGNyZWF0
ZShDQ0xheWVyRGVsZWdhdGUgKmRlbGVnYXRlKSB7IHJldHVybiBhZG9wdFJlZihuZXcgQ29udGVu
dExheWVyQ2hyb21pdW1XaXRoVXBkYXRlVHJhY2tpbmcoZGVsZWdhdGUpKTsgfQogCiAgICAgaW50
IHBhaW50Q29udGVudHNDb3VudCgpIHsgcmV0dXJuIG1fcGFpbnRDb250ZW50c0NvdW50OyB9Ci0g
ICAgdm9pZCByZXNldFBhaW50Q29udGVudHNDb3VudCgpIHsgbV9wYWludENvbnRlbnRzQ291bnQg
PSAwOyB9CisgICAgaW50IGlkbGVQYWludENvbnRlbnRzQ291bnQoKSB7IHJldHVybiBtX2lkbGVQ
YWludENvbnRlbnRzQ291bnQ7IH0KKyAgICB2b2lkIHJlc2V0UGFpbnRDb250ZW50c0NvdW50KCkg
eyBtX3BhaW50Q29udGVudHNDb3VudCA9IDA7IG1faWRsZVBhaW50Q29udGVudHNDb3VudCA9IDA7
fQogCiAgICAgaW50IHVwZGF0ZUNvdW50KCkgeyByZXR1cm4gbV91cGRhdGVDb3VudDsgfQogICAg
IHZvaWQgcmVzZXRVcGRhdGVDb3VudCgpIHsgbV91cGRhdGVDb3VudCA9IDA7IH0KQEAgLTk0MSw2
ICs5NDIsMTIgQEAgcHVibGljOgogICAgICAgICBtX3BhaW50Q29udGVudHNDb3VudCsrOwogICAg
IH0KIAorICAgIHZpcnR1YWwgdm9pZCBpZGxlUGFpbnRDb250ZW50c0lmRGlydHkoKQorICAgIHsK
KyAgICAgICAgQ29udGVudExheWVyQ2hyb21pdW06OmlkbGVQYWludENvbnRlbnRzSWZEaXJ0eSgp
OworICAgICAgICBtX2lkbGVQYWludENvbnRlbnRzQ291bnQrKzsKKyAgICB9CisKICAgICB2aXJ0
dWFsIHZvaWQgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCogY29u
dGV4dCwgQ0NUZXh0dXJlVXBkYXRlciYgdXBkYXRlcikKICAgICB7CiAgICAgICAgIENvbnRlbnRM
YXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGNvbnRleHQsIHVwZGF0ZXIp
OwpAQCAtOTUxLDEyICs5NTgsMTQgQEAgcHJpdmF0ZToKICAgICBleHBsaWNpdCBDb250ZW50TGF5
ZXJDaHJvbWl1bVdpdGhVcGRhdGVUcmFja2luZyhDQ0xheWVyRGVsZWdhdGUgKmRlbGVnYXRlKQog
ICAgICAgICA6IENvbnRlbnRMYXllckNocm9taXVtKGRlbGVnYXRlKQogICAgICAgICAsIG1fcGFp
bnRDb250ZW50c0NvdW50KDApCisgICAgICAgICwgbV9pZGxlUGFpbnRDb250ZW50c0NvdW50KDAp
CiAgICAgICAgICwgbV91cGRhdGVDb3VudCgwKQogICAgIHsKICAgICAgICAgc2V0Qm91bmRzKElu
dFNpemUoMTAsIDEwKSk7CiAgICAgfQogCiAgICAgaW50IG1fcGFpbnRDb250ZW50c0NvdW50Owor
ICAgIGludCBtX2lkbGVQYWludENvbnRlbnRzQ291bnQ7CiAgICAgaW50IG1fdXBkYXRlQ291bnQ7
CiB9OwogCkBAIC05ODcsNiArOTk2LDkgQEAgcHVibGljOgogICAgICAgICAvLyBwYWludENvbnRl
bnRzSWZEaXJ0eSgpIHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkIG9uY2UuCiAgICAgICAgIEVYUEVD
VF9FUSgxLCBtX3VwZGF0ZUNoZWNrTGF5ZXItPnBhaW50Q29udGVudHNDb3VudCgpKTsKIAorICAg
ICAgICAvLyBpZGxlUGFpbnRDb250ZW50c0lmRGlydHkoKSBzaG91bGQgbm90IGJlIGNhbGxlZCBh
ZnRlciBvcGFjaXR5IHNldCB0byAwIGluIHBhaW50Q29udGVudHNJZkRpcnR5KCkKKyAgICAgICAg
RVhQRUNUX0VRKDAsIG1fdXBkYXRlQ2hlY2tMYXllci0+aWRsZVBhaW50Q29udGVudHNDb3VudCgp
KTsKKwogICAgICAgICAvLyB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKCkgc2hvdWxkIGhhdmUg
YmVlbiBjYWxsZWQgdGhlIHNhbWUKICAgICAgICAgLy8gYW1vdXQgb2YgdGltZXMgYXMgcGFpbnRD
b250ZW50c0lmRGlydHkoKS4KICAgICAgICAgRVhQRUNUX0VRKG1fdXBkYXRlQ2hlY2tMYXllci0+
cGFpbnRDb250ZW50c0NvdW50KCksCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL1RpbGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0LmNwcAppbmRleCAyODNlYWNlNWFkYjdkYmVm
YTBhZTY1MDM1M2YwZTBjZjQ4YmYwZDY3Li5mNzllODk1MmJiNTdlY2I0MzZhOWI3NGMwOWRhMWQz
NmUxOGI3Y2I0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RpbGVk
TGF5ZXJDaHJvbWl1bVRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
VGlsZWRMYXllckNocm9taXVtVGVzdC5jcHAKQEAgLTkwLDYgKzkwLDE2IEBAIHB1YmxpYzoKICAg
ICAgICAgVGlsZWRMYXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGUocmVjdCk7CiAgICAgfQog
CisgICAgdm9pZCBwcmVwYXJlVG9VcGRhdGVJZGxlKGNvbnN0IEludFJlY3QmIHJlY3QpCisgICAg
eworICAgICAgICBUaWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVUb1VwZGF0ZUlkbGUocmVjdCk7
CisgICAgfQorCisgICAgYm9vbCBuZWVkc0lkbGVQYWludChjb25zdCBJbnRSZWN0JiByZWN0KQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIFRpbGVkTGF5ZXJDaHJvbWl1bTo6bmVlZHNJZGxlUGFpbnQo
cmVjdCk7CisgICAgfQorCiAgICAgdmlydHVhbCBUZXh0dXJlTWFuYWdlciogdGV4dHVyZU1hbmFn
ZXIoKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmVNYW5hZ2VyOyB9CiAKIHByaXZhdGU6CkBAIC0x
MzgsNSArMTQ4LDYzIEBAIFRFU1QoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaERpcnR5VGls
ZXMpCiAgICAgRVhQRUNUX0ZBTFNFKGxheWVySW1wbC0+aGFzVGlsZUF0KDAsIDEpKTsKIH0KIAor
VEVTVChUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoSWRsZVBhaW50VGlsZXMpCit7CisgICAg
T3duUHRyPFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IFRleHR1cmVNYW5hZ2VyOjpj
cmVhdGUoNCoxMDI0KjEwMjQsIDEwMjQpOworICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9t
aXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVN
YW5hZ2VyLmdldCgpKSk7CisgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7
CisgICAgUmVmUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllckltcGwgPSBhZG9wdFJlZihu
ZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMCkpOworCisgICAgRmFrZVRleHR1cmVBbGxvY2F0b3Ig
dGV4dHVyZUFsbG9jYXRvcjsKKyAgICBDQ1RleHR1cmVVcGRhdGVyIHVwZGF0ZXIoJnRleHR1cmVB
bGxvY2F0b3IpOworCisgICAgLy8gVGhlIHRpbGUgc2l6ZSBpcyAxMDB4MTAwLiBTZXR1cCA1eDUg
dGlsZXMgd2l0aCBvbmUgdmlzaWJsZSB0aWxlIGluIHRoZSBjZW50ZXIuCisgICAgSW50U2l6ZSBj
b250ZW50Qm91bmRzKDUwMCwgNTAwKTsKKyAgICBJbnRSZWN0IGNvbnRlbnRSZWN0KEludFBvaW50
Ojp6ZXJvKCksIGNvbnRlbnRCb3VuZHMpOworICAgIEludFJlY3QgdmlzaWJsZVJlY3QoMjAwLCAy
MDAsIDEwMCwgMTAwKTsKKworICAgIC8vIFRoaXMgaW52YWxpZGF0ZXMgMjUgdGlsZXMgYW5kIHRo
ZW4gcGFpbnRzIG9uZSB2aXNpYmxlIHRpbGUuCisgICAgbGF5ZXItPnNldEJvdW5kcyhjb250ZW50
Qm91bmRzKTsKKyAgICBsYXllci0+c2V0VmlzaWJsZUxheWVyUmVjdCh2aXNpYmxlUmVjdCk7Cisg
ICAgbGF5ZXItPmludmFsaWRhdGVSZWN0KGNvbnRlbnRSZWN0KTsKKyAgICBsYXllci0+cHJlcGFy
ZVRvVXBkYXRlKHZpc2libGVSZWN0KTsKKworICAgIC8vIFdlIHNob3VsZCBuZWVkIGlkbGUtcGFp
bnRpbmcgZm9yIDN4MyB0aWxlcyBpbiB0aGUgY2VudGVyLgorICAgIEVYUEVDVF9UUlVFKGxheWVy
LT5uZWVkc0lkbGVQYWludCh2aXNpYmxlUmVjdCkpOworCisgICAgbGF5ZXItPnVwZGF0ZUNvbXBv
c2l0b3JSZXNvdXJjZXMoMCwgdXBkYXRlcik7CisgICAgbGF5ZXItPnB1c2hQcm9wZXJ0aWVzVG8o
bGF5ZXJJbXBsLmdldCgpKTsKKworICAgIC8vIFdlIHNob3VsZCBoYXZlIG9uZSB0aWxlIG9uIHRo
ZSBpbXBsIHNpZGUuCisgICAgRVhQRUNUX1RSVUUobGF5ZXJJbXBsLT5oYXNUaWxlQXQoMiwgMikp
OworCisgICAgdGV4dHVyZU1hbmFnZXItPnVucHJvdGVjdEFsbFRleHR1cmVzKCk7CisKKyAgICAv
LyBGb3IgdGhlIG5leHQgZm91ciB1cGRhdGVzLCB3ZSBzaG91bGQgZGV0ZWN0IHdlIHN0aWxsIG5l
ZWQgaWRsZSBwYWludGluZy4KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykgeworICAg
ICAgICBsYXllci0+cHJlcGFyZVRvVXBkYXRlKHZpc2libGVSZWN0KTsKKyAgICAgICAgRVhQRUNU
X1RSVUUobGF5ZXItPm5lZWRzSWRsZVBhaW50KHZpc2libGVSZWN0KSk7CisgICAgICAgIGxheWVy
LT5wcmVwYXJlVG9VcGRhdGVJZGxlKHZpc2libGVSZWN0KTsKKyAgICAgICAgbGF5ZXItPnVwZGF0
ZUNvbXBvc2l0b3JSZXNvdXJjZXMoMCwgdXBkYXRlcik7CisgICAgICAgIGxheWVyLT5wdXNoUHJv
cGVydGllc1RvKGxheWVySW1wbC5nZXQoKSk7CisgICAgICAgIHRleHR1cmVNYW5hZ2VyLT51bnBy
b3RlY3RBbGxUZXh0dXJlcygpOworICAgIH0KKworICAgIC8vIEFmdGVyIGZvdXIgcGFzc2VzIG9m
IGlkbGUgcGFpbnRpbmcsIHdlIHNob3VsZCBiZSBmaW5pc2hlZCBwYWludGluZworICAgIEVYUEVD
VF9GQUxTRShsYXllci0+bmVlZHNJZGxlUGFpbnQodmlzaWJsZVJlY3QpKTsKKworICAgIC8vIFdl
IHNob3VsZCBoYXZlIG9uZSB0aWxlIHN1cnJvdW5kaW5nIHRoZSB2aXNpYmxlIHRpbGUgb24gYWxs
IHNpZGVzLCBidXQgbm8gb3RoZXIgdGlsZXMuCisgICAgSW50UmVjdCBpZGxlUGFpbnRUaWxlcygx
LCAxLCAzLCAzKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDU7IGkrKykgeworICAgICAgICBm
b3IgKGludCBqID0gMDsgaiA8IDU7IGorKykgeworICAgICAgICAgICAgaWYgKGlkbGVQYWludFRp
bGVzLmNvbnRhaW5zKGksIGopKQorICAgICAgICAgICAgICAgIEVYUEVDVF9UUlVFKGxheWVySW1w
bC0+aGFzVGlsZUF0KGksIGopKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBF
WFBFQ1RfRkFMU0UobGF5ZXJJbXBsLT5oYXNUaWxlQXQoaSwgaikpOworICAgICAgICB9CisgICAg
fQorfQorCisKIH0gLy8gbmFtZXNwYWNlCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117543</attachid>
            <date>2011-12-01 19:18:20 -0800</date>
            <delta_ts>2011-12-08 10:50:02 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72686-20111201191819.patch</filename>
            <type>text/plain</type>
            <size>30427</size>
            <attacher name="Eric Penner">epenner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxNjgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2IyNzBhNDE3NTRlZTQ2
ZWNjZTE1MmQwZDQyNjc2YjJkYjM4ZmIyMS4uOTRiMmE0YjYyMmU1NDZjMDljZTg3YTA5ODZjOGFh
NDU0ODIzYWI4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDExLTEyLTAxICBFcmlj
IFBlbm5lciAgPGVwZW5uZXJAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIE5lZWQg
dG8gcHJlcGFpbnQgdGlsZXMgaW4gVGlsZWRMYXllckNocm9taXVtCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjY4NgorCisgICAgICAgIFJldmlld2Vk
IGJ5OiBlbm5lQGdvb2dsZS5jb20KKworICAgICAgICBUZXN0czogcHVzaElkbGVQYWludFRpbGVz
LCBpZGxlUGFpbnRPdXRPZk1lbW9yeQorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVu
dExheWVyQ2hyb21pdW06OmlkbGVQYWludENvbnRlbnRzSWZEaXJ0eSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmg6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllckNocm9taXVtOjppZGxlUGFpbnRDb250ZW50c0lmRGlydHkpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmVNYW5hZ2VyOjpwcm90ZWN0VGV4dHVyZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6VGlsZWRMYXllckNocm9taXVtKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6Y2xlYW51cFJlc291cmNlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNv
dXJjZXMpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjpwcmVwYXJlVG9V
cGRhdGVUaWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnByZXBh
cmVUb1VwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnByZXBh
cmVUb1VwZGF0ZUlkbGUpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjpu
ZWVkc0lkbGVQYWludCk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06Omlk
bGVQYWludFJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVk
TGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6
OnVwZGF0ZUxheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnBhaW50
Q29udGVudHNJZkRpcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6cGFp
bnRNYXNrQW5kUmVwbGljYUZvclJlbmRlclN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0OjpwYWludExheWVyQ29udGVudHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oOgorCiAyMDExLTEyLTAxICBSb2xh
bmQgU3RlaW5lciAgPHJvbGFuZHN0ZWluZXJAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFNoYWRv
dyBJRCBwc2V1ZG8tZWxlbWVudCBzZWxlY3RvcnMgc2VyaWFsaXplIGluY29ycmVjdGx5CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDZiNTRkNmFkZjdkYjY0ZWM4MmJjNzlhNWY3ZTg2ZTZh
NDdjNmNiOTYuLmU4OTMzNGFiZDEzZWI3NDU3OTI5MTllOGUyNDY3YzViYWE2NTIzMDIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTEtMTItMDEgIEVyaWMg
UGVubmVyICA8ZXBlbm5lckBnb29nbGUuY29tPgorCisgICAgICAgIFtjaHJvbWl1bV0gTmVlZCB0
byBwcmVwYWludCB0aWxlcyBpbiBUaWxlZExheWVyQ2hyb21pdW0KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcyNjg2CisKKyAgICAgICAgUmV2aWV3ZWQg
Ynk6IGVubmVAZ29vZ2xlLmNvbQorCisgICAgICAgICogdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVz
dC5jcHA6CisgICAgICAgIChXVEY6OkNvbnRlbnRMYXllckNocm9taXVtV2l0aFVwZGF0ZVRyYWNr
aW5nOjppZGxlUGFpbnRDb250ZW50c0NvdW50KToKKyAgICAgICAgKFdURjo6Q29udGVudExheWVy
Q2hyb21pdW1XaXRoVXBkYXRlVHJhY2tpbmc6OnJlc2V0UGFpbnRDb250ZW50c0NvdW50KToKKyAg
ICAgICAgKFdURjo6Q29udGVudExheWVyQ2hyb21pdW1XaXRoVXBkYXRlVHJhY2tpbmc6OmlkbGVQ
YWludENvbnRlbnRzSWZEaXJ0eSk6CisgICAgICAgIChXVEY6OkNvbnRlbnRMYXllckNocm9taXVt
V2l0aFVwZGF0ZVRyYWNraW5nOjpDb250ZW50TGF5ZXJDaHJvbWl1bVdpdGhVcGRhdGVUcmFja2lu
Zyk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RPcGFjaXR5Q2hhbmdlOjphZnRl
clRlc3QpOgorICAgICAgICAqIHRlc3RzL1RpbGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3BwOgorICAg
ICAgICAoV1RGOjpGYWtlVGlsZWRMYXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGVJZGxlKToK
KyAgICAgICAgKFdURjo6RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bTo6bmVlZHNJZGxlUGFpbnQpOgor
ICAgICAgICAoV1RGOjpURVNUKToKKwogMjAxMS0xMi0wMSAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxk
bWFuQGdvb2dsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogZnVydGhlciBhbGlnbiBm
cm9udC1lbmQgY29uZmlndXJhdGlvbnM6IGdldCByaWQgb2Ygc2F2ZUFzQXZhaWxhYmxlIHByZWZl
cmVuY2UsIGlubGluZSBkcmFnIGdsYXNzIHBhbmUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJv
bWl1bS5jcHAKaW5kZXggM2FlYzNlYmZmMGYxMmFjNjE4ZDY4ZmYyNjE3MGNiMjYwNzRkMWZiYi4u
ODFiZTU1OWI3OWMzMGJmMTBkNTdkMmRlYzU4YTc4ZjI2OWZiZGMyNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21p
dW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Nv
bnRlbnRMYXllckNocm9taXVtLmNwcApAQCAtMTA4LDYgKzEwOCwyMCBAQCB2b2lkIENvbnRlbnRM
YXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eSgpCiAgICAgbV9uZWVkc0Rpc3BsYXkg
PSBmYWxzZTsKIH0KIAordm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6aWRsZVBhaW50Q29udGVu
dHNJZkRpcnR5KCkKK3sKKyAgICBpZiAoIWRyYXdzQ29udGVudCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBjb25zdCBJbnRSZWN0JiBsYXllclJlY3QgPSB2aXNpYmxlTGF5ZXJSZWN0KCk7Cisg
ICAgaWYgKGxheWVyUmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIHByZXBh
cmVUb1VwZGF0ZUlkbGUobGF5ZXJSZWN0KTsKKyAgICBpZiAobmVlZHNJZGxlUGFpbnQobGF5ZXJS
ZWN0KSkKKyAgICAgICAgc2V0TmVlZHNDb21taXQoKTsKK30KKwogYm9vbCBDb250ZW50TGF5ZXJD
aHJvbWl1bTo6ZHJhd3NDb250ZW50KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9kZWxlZ2F0ZSAm
JiBtX2RlbGVnYXRlLT5kcmF3c0NvbnRlbnQoKSAmJiBUaWxlZExheWVyQ2hyb21pdW06OmRyYXdz
Q29udGVudCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmgKaW5kZXggYjgzNGU2NzZi
ZDYzNDQ1YWE0NTNiMzY1ZWVlMjgwMjQwZjM4MDljMS4uMGM1NzRiNWRmZGMwYTU3MWI4MTFiZTAz
OTc2NGFjNzViMWMyZTNlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oCkBAIC01
MCw2ICs1MCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5Db250ZW50TGF5ZXJDaHJvbWl1bSgp
OwogCiAgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHNJZkRpcnR5KCk7CisgICAgdmlydHVh
bCB2b2lkIGlkbGVQYWludENvbnRlbnRzSWZEaXJ0eSgpOwogCiBwcm90ZWN0ZWQ6CiAgICAgZXhw
bGljaXQgQ29udGVudExheWVyQ2hyb21pdW0oQ0NMYXllckRlbGVnYXRlKik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVt
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9t
aXVtLmgKaW5kZXggMTc1ZmMyZjkwNTlhMzA4MDM3ZTBlZTg0OGI5ZmMxMzEyNTA5ZThkZC4uODRi
NWJmMDY1ODAxYzUyNTBmYmU3YWFmMTcxNzU1ODc1OTI0NDRmYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0u
aApAQCAtMTYxLDYgKzE2MSw3IEBAIHB1YmxpYzoKICAgICAvLyBUaGVzZSBtZXRob2RzIHR5cGlj
YWxseSBuZWVkIHRvIGJlIG92ZXJ3cml0dGVuIGJ5IGRlcml2ZWQgY2xhc3Nlcy4KICAgICB2aXJ0
dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0
dWFsIHZvaWQgcGFpbnRDb250ZW50c0lmRGlydHkoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgaWRs
ZVBhaW50Q29udGVudHNJZkRpcnR5KCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbXBv
c2l0b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0M0QqLCBDQ1RleHR1cmVVcGRhdGVyJikgeyB9
CiAgICAgdmlydHVhbCB2b2lkIHNldElzTWFzayhib29sKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQg
dW5yZXNlcnZlQ29udGVudHNUZXh0dXJlKCkgeyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5jcHAKaW5k
ZXggYWViNjg2Njk2MWI5YmE0NGQ3NzUyYzVkNGIzOWNjMTYwN2E3YjgyMS4uOTI1ZWIzOTIyZTNj
ODgyYTA5MDUzNmMzMmQ1YWM1Nzg0MjVhMzYzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmNwcApA
QCAtMTAwLDcgKzEwMCw2IEBAIGJvb2wgVGV4dHVyZU1hbmFnZXI6OmlzUHJvdGVjdGVkKFRleHR1
cmVUb2tlbiB0b2tlbikKIHZvaWQgVGV4dHVyZU1hbmFnZXI6OnByb3RlY3RUZXh0dXJlKFRleHR1
cmVUb2tlbiB0b2tlbikKIHsKICAgICBBU1NFUlQoaGFzVGV4dHVyZSh0b2tlbikpOwotICAgIEFT
U0VSVCghbV90ZXh0dXJlcy5nZXQodG9rZW4pLmlzUHJvdGVjdGVkKTsKICAgICBUZXh0dXJlSW5m
byBpbmZvID0gbV90ZXh0dXJlcy50YWtlKHRva2VuKTsKICAgICBpbmZvLmlzUHJvdGVjdGVkID0g
dHJ1ZTsKICAgICBtX3RleHR1cmVzLmFkZCh0b2tlbiwgaW5mbyk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXll
ckNocm9taXVtLmNwcAppbmRleCA5NjhkOWUzZTRhY2U2NTAxMGM4M2RkYzlkODg0Y2NiYTkxYjAy
NWUxLi45NmVhZjJhYTA0NTA4ZjY5NTkwNjJjNDFmMzMyYjJmMjcxYWEwNGIxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hy
b21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTcyLDYgKzcyLDcgQEAgVGlsZWRMYXllckNocm9t
aXVtOjpUaWxlZExheWVyQ2hyb21pdW0oQ0NMYXllckRlbGVnYXRlKiBkZWxlZ2F0ZSkKICAgICA6
IExheWVyQ2hyb21pdW0oZGVsZWdhdGUpCiAgICAgLCBtX3RleHR1cmVGb3JtYXQoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSkKICAgICAsIG1fc2tpcHNEcmF3KGZhbHNlKQorICAgICwg
bV9za2lwc0lkbGVQYWludChmYWxzZSkKICAgICAsIG1fdGV4dHVyZU9yaWVudGF0aW9uKExheWVy
VGV4dHVyZVVwZGF0ZXI6OkludmFsaWRPcmllbnRhdGlvbikKICAgICAsIG1fc2FtcGxlZFRleGVs
Rm9ybWF0KExheWVyVGV4dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZvcm1hdEludmFsaWQpCiAg
ICAgLCBtX3RpbGluZ09wdGlvbihBdXRvVGlsZSkKQEAgLTkzLDcgKzk0LDcgQEAgdm9pZCBUaWxl
ZExheWVyQ2hyb21pdW06OmNsZWFudXBSZXNvdXJjZXMoKQogCiAgICAgbV90aWxlci5jbGVhcigp
OwogICAgIG1fcGFpbnRSZWN0ID0gSW50UmVjdCgpOwotICAgIG1fcmVxdWVzdGVkVXBkYXRlUmVj
dCA9IEludFJlY3QoKTsKKyAgICBtX3JlcXVlc3RlZFVwZGF0ZVRpbGVzUmVjdCA9IEludFJlY3Qo
KTsKIH0KIAogdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnVwZGF0ZVRpbGVTaXplQW5kVGlsaW5n
T3B0aW9uKCkKQEAgLTE3NSwxMSArMTc2LDEzIEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpj
cmVhdGVUaWxlcihDQ0xheWVyVGlsaW5nRGF0YTo6Qm9yZGVyVGV4ZWxPcHRpb24gYm9yZGVyCiB2
b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGlj
c0NvbnRleHQzRCosIENDVGV4dHVyZVVwZGF0ZXImIHVwZGF0ZXIpCiB7CiAgICAgLy8gUGFpbnRp
bmcgY291bGQgY2F1c2UgY29tcG9zaXRpbmcgdG8gZ2V0IHR1cm5lZCBvZmYsIHdoaWNoIG1heSBj
YXVzZSB0aGUgdGlsZXIgdG8gYmVjb21lIGludmFsaWRhdGVkIG1pZC11cGRhdGUuCi0gICAgaWYg
KG1fc2tpcHNEcmF3IHx8IG1fcmVxdWVzdGVkVXBkYXRlUmVjdC5pc0VtcHR5KCkgfHwgIW1fdGls
ZXItPm51bVRpbGVzKCkpCisgICAgaWYgKG1fc2tpcHNEcmF3IHx8IG1fcmVxdWVzdGVkVXBkYXRl
VGlsZXNSZWN0LmlzRW1wdHkoKSB8fCAhbV90aWxlci0+bnVtVGlsZXMoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgaW50IGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbTsKLSAgICBtX3RpbGVyLT5j
b250ZW50UmVjdFRvVGlsZUluZGljZXMobV9yZXF1ZXN0ZWRVcGRhdGVSZWN0LCBsZWZ0LCB0b3As
IHJpZ2h0LCBib3R0b20pOworICAgIGludCBsZWZ0ID0gbV9yZXF1ZXN0ZWRVcGRhdGVUaWxlc1Jl
Y3QueCgpOworICAgIGludCB0b3AgPSBtX3JlcXVlc3RlZFVwZGF0ZVRpbGVzUmVjdC55KCk7Cisg
ICAgaW50IHJpZ2h0ID0gbV9yZXF1ZXN0ZWRVcGRhdGVUaWxlc1JlY3QubWF4WCgpIC0gMTsKKyAg
ICBpbnQgYm90dG9tID0gbV9yZXF1ZXN0ZWRVcGRhdGVUaWxlc1JlY3QubWF4WSgpIC0gMTsKICAg
ICBmb3IgKGludCBqID0gdG9wOyBqIDw9IGJvdHRvbTsgKytqKSB7CiAgICAgICAgIGZvciAoaW50
IGkgPSBsZWZ0OyBpIDw9IHJpZ2h0OyArK2kpIHsKICAgICAgICAgICAgIFVwZGF0YWJsZVRpbGUq
IHRpbGUgPSB0aWxlQXQoaSwgaik7CkBAIC0zMzgsMzggKzM0MSwxNyBAQCB2b2lkIFRpbGVkTGF5
ZXJDaHJvbWl1bTo6cHJvdGVjdFRpbGVUZXh0dXJlcyhjb25zdCBJbnRSZWN0JiBjb250ZW50UmVj
dCkKICAgICB9CiB9CiAKLXZvaWQgVGlsZWRMYXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGUo
Y29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCit2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJl
cGFyZVRvVXBkYXRlVGlsZXMoYm9vbCBpZGxlLCBpbnQgbGVmdCwgaW50IHRvcCwgaW50IHJpZ2h0
LCBpbnQgYm90dG9tKQogewotICAgIGlmICghbV90aWxlcikKLSAgICAgICAgY3JlYXRlVGlsZXIo
aXNOb25Db21wb3NpdGVkQ29udGVudCgpID8gQ0NMYXllclRpbGluZ0RhdGE6Ok5vQm9yZGVyVGV4
ZWxzIDogQ0NMYXllclRpbGluZ0RhdGE6Okhhc0JvcmRlclRleGVscyk7Ci0KLSAgICBBU1NFUlQo
bV90aWxlcik7Ci0KLSAgICBtX3NraXBzRHJhdyA9IGZhbHNlOwotCiAgICAgLy8gUmVzZXQgbV91
cGRhdGVSZWN0IGZvciBhbGwgdGlsZXMuCiAgICAgZm9yIChDQ0xheWVyVGlsaW5nRGF0YTo6VGls
ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1fdGlsZXItPnRpbGVzKCkuYmVnaW4oKTsgaXRl
ciAhPSBtX3RpbGVyLT50aWxlcygpLmVuZCgpOyArK2l0ZXIpIHsKICAgICAgICAgVXBkYXRhYmxl
VGlsZSogdGlsZSA9IHN0YXRpY19jYXN0PFVwZGF0YWJsZVRpbGUqPihpdGVyLT5zZWNvbmQuZ2V0
KCkpOwogICAgICAgICB0aWxlLT5tX3VwZGF0ZVJlY3QgPSBJbnRSZWN0KCk7CiAgICAgfQogCi0g
ICAgaWYgKGNvbnRlbnRSZWN0LmlzRW1wdHkoKSkgewotICAgICAgICBtX3JlcXVlc3RlZFVwZGF0
ZVJlY3QgPSBJbnRSZWN0KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX3RpbGVy
LT5ncm93TGF5ZXJUb0NvbnRhaW4oY29udGVudFJlY3QpOwotCi0gICAgaWYgKCFtX3RpbGVyLT5u
dW1UaWxlcygpKSB7Ci0gICAgICAgIG1fcmVxdWVzdGVkVXBkYXRlUmVjdCA9IEludFJlY3QoKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIC8vIENyZWF0ZSB0aWxlcyBhcyBuZWVkZWQs
IGV4cGFuZGluZyBhIGRpcnR5IHJlY3QgdG8gY29udGFpbiBhbGwKICAgICAvLyB0aGUgZGlydHkg
cmVnaW9ucyBjdXJyZW50bHkgYmVpbmcgZHJhd24uCiAgICAgSW50UmVjdCBkaXJ0eUxheWVyUmVj
dDsKLSAgICBpbnQgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tOwotICAgIG1fdGlsZXItPmNvbnRl
bnRSZWN0VG9UaWxlSW5kaWNlcyhjb250ZW50UmVjdCwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9t
KTsKICAgICBmb3IgKGludCBqID0gdG9wOyBqIDw9IGJvdHRvbTsgKytqKSB7CiAgICAgICAgIGZv
ciAoaW50IGkgPSBsZWZ0OyBpIDw9IHJpZ2h0OyArK2kpIHsKICAgICAgICAgICAgIFVwZGF0YWJs
ZVRpbGUqIHRpbGUgPSB0aWxlQXQoaSwgaik7CkBAIC0zODAsOCArMzYyLDExIEBAIHZvaWQgVGls
ZWRMYXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJl
Y3QpCiAgICAgICAgICAgICAgICAgdGlsZS0+bV9kaXJ0eUxheWVyUmVjdCA9IG1fdGlsZXItPnRp
bGVMYXllclJlY3QodGlsZSk7CiAKICAgICAgICAgICAgIGlmICghdGlsZS0+bWFuYWdlZFRleHR1
cmUoKS0+cmVzZXJ2ZShtX3RpbGVyLT50aWxlU2l6ZSgpLCBtX3RleHR1cmVGb3JtYXQpKSB7Ci0g
ICAgICAgICAgICAgICAgbV9za2lwc0RyYXcgPSB0cnVlOwotICAgICAgICAgICAgICAgIGNsZWFu
dXBSZXNvdXJjZXMoKTsKKyAgICAgICAgICAgICAgICBtX3NraXBzSWRsZVBhaW50ID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICBpZiAoIWlkbGUpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9za2lw
c0RyYXcgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBjbGVhbnVwUmVzb3VyY2VzKCk7Cisg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0K
IApAQCAtMzg5LDIyICszNzQsMjIgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVU
b1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKICAgICAgICAgfQogICAgIH0KIAot
ICAgIC8vIER1ZSB0byBib3JkZXJzLCB3aGVuIHRoZSBwYWludCByZWN0IGlzIGV4dGVuZGVkIHRv
IHRpbGUgYm91bmRhcmllcywgaXQKLSAgICAvLyBtYXkgZW5kIHVwIG92ZXJsYXBwaW5nIG1vcmUg
dGlsZXMgdGhhbiB0aGUgb3JpZ2luYWwgY29udGVudCByZWN0LiBSZWNvcmQKLSAgICAvLyB0aGF0
IG9yaWdpbmFsIHJlY3Qgc28gd2UgZG9uJ3QgdXBsb2FkIG1vcmUgdGlsZXMgdGhhbiBuZWNlc3Nh
cnkuCi0gICAgbV9yZXF1ZXN0ZWRVcGRhdGVSZWN0ID0gY29udGVudFJlY3Q7Ci0KICAgICBtX3Bh
aW50UmVjdCA9IG1fdGlsZXItPmxheWVyUmVjdFRvQ29udGVudFJlY3QoZGlydHlMYXllclJlY3Qp
OwogICAgIGlmIChkaXJ0eUxheWVyUmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAor
ICAgIC8vIER1ZSB0byBib3JkZXJzLCB3aGVuIHRoZSBwYWludCByZWN0IGlzIGV4dGVuZGVkIHRv
IHRpbGUgYm91bmRhcmllcywgaXQKKyAgICAvLyBtYXkgZW5kIHVwIG92ZXJsYXBwaW5nIG1vcmUg
dGlsZXMgdGhhbiB0aGUgb3JpZ2luYWwgY29udGVudCByZWN0LiBSZWNvcmQKKyAgICAvLyB0aGUg
b3JpZ2luYWwgdGlsZXMgc28gd2UgZG9uJ3QgdXBsb2FkIG1vcmUgdGlsZXMgdGhhbiBuZWNlc3Nh
cnkuCisgICAgaWYgKCFtX3BhaW50UmVjdC5pc0VtcHR5KCkpCisgICAgICAgIG1fcmVxdWVzdGVk
VXBkYXRlVGlsZXNSZWN0ID0gSW50UmVjdChsZWZ0LCB0b3AsIHJpZ2h0IC0gbGVmdCArIDEsIGJv
dHRvbSAtIHRvcCArIDEpOworCiAgICAgLy8gQ2FsbGluZyBwcmVwYXJlVG9VcGRhdGUoKSBjYWxs
cyBpbnRvIFdlYktpdCB0byBwYWludCwgd2hpY2ggbWF5IGhhdmUgdGhlIHNpZGUKICAgICAvLyBl
ZmZlY3Qgb2YgZGlzYWJsaW5nIGNvbXBvc2l0aW5nLCB3aGljaCBjYXVzZXMgb3VyIHJlZmVyZW5j
ZSB0byB0aGUgdGV4dHVyZSB1cGRhdGVyIHRvIGJlIGRlbGV0ZWQuCiAgICAgLy8gSG93ZXZlciwg
d2UgY2FuJ3QgZnJlZSB0aGUgbWVtb3J5IGJhY2tpbmcgdGhlIEdyYXBoaWNzQ29udGV4dCB1bnRp
bCB0aGUgcGFpbnQgZmluaXNoZXMsCiAgICAgLy8gc28gd2UgZ3JhYiBhIGxvY2FsIHJlZmVyZW5j
ZSBoZXJlIHRvIGhvbGQgdGhlIHVwZGF0ZXIgYWxpdmUgdW50aWwgdGhlIHBhaW50IGNvbXBsZXRl
cy4KICAgICBSZWZQdHI8TGF5ZXJUZXh0dXJlVXBkYXRlcj4gcHJvdGVjdG9yKHRleHR1cmVVcGRh
dGVyKCkpOwogICAgIHRleHR1cmVVcGRhdGVyKCktPnByZXBhcmVUb1VwZGF0ZShtX3BhaW50UmVj
dCwgbV90aWxlci0+dGlsZVNpemUoKSwgbV90aWxlci0+aGFzQm9yZGVyVGV4ZWxzKCksIGNvbnRl
bnRzU2NhbGUoKSk7Ci0gICAgbV90aWxlci0+Y29udGVudFJlY3RUb1RpbGVJbmRpY2VzKG1fcmVx
dWVzdGVkVXBkYXRlUmVjdCwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKICAgICBmb3IgKGlu
dCBqID0gdG9wOyBqIDw9IGJvdHRvbTsgKytqKSB7CiAgICAgICAgIGZvciAoaW50IGkgPSBsZWZ0
OyBpIDw9IHJpZ2h0OyArK2kpIHsKICAgICAgICAgICAgIFVwZGF0YWJsZVRpbGUqIHRpbGUgPSB0
aWxlQXQoaSwgaik7CkBAIC00MzYsNSArNDIxLDEyMCBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1
bTo6cHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQogICAgIH0KIH0K
IAorCit2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJl
Y3QmIGNvbnRlbnRSZWN0KQoreworICAgIGlmICghbV90aWxlcikKKyAgICAgICAgY3JlYXRlVGls
ZXIoaXNOb25Db21wb3NpdGVkQ29udGVudCgpID8gQ0NMYXllclRpbGluZ0RhdGE6Ok5vQm9yZGVy
VGV4ZWxzIDogQ0NMYXllclRpbGluZ0RhdGE6Okhhc0JvcmRlclRleGVscyk7CisKKyAgICBBU1NF
UlQobV90aWxlcik7CisKKyAgICBtX3NraXBzRHJhdyA9IGZhbHNlOworICAgIG1fc2tpcHNJZGxl
UGFpbnQgPSBmYWxzZTsKKyAgICBtX3JlcXVlc3RlZFVwZGF0ZVRpbGVzUmVjdCA9IEludFJlY3Qo
KTsKKyAgICBtX3BhaW50UmVjdCA9IEludFJlY3QoKTsKKworICAgIGlmIChjb250ZW50UmVjdC5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fdGlsZXItPmdyb3dMYXllclRvQ29u
dGFpbihjb250ZW50UmVjdCk7CisKKyAgICBpZiAoIW1fdGlsZXItPm51bVRpbGVzKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGludCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b207CisgICAgbV90
aWxlci0+Y29udGVudFJlY3RUb1RpbGVJbmRpY2VzKGNvbnRlbnRSZWN0LCBsZWZ0LCB0b3AsIHJp
Z2h0LCBib3R0b20pOworCisgICAgcHJlcGFyZVRvVXBkYXRlVGlsZXMoZmFsc2UsIGxlZnQsIHRv
cCwgcmlnaHQsIGJvdHRvbSk7Cit9CisKK3ZvaWQgVGlsZWRMYXllckNocm9taXVtOjpwcmVwYXJl
VG9VcGRhdGVJZGxlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQoreworICAgIEFTU0VSVCht
X3RpbGVyKTsKKworICAgIC8vIEFib3J0IGlmIHdlIGhhdmUgYWxyZWFkeSBwcmVwYXJlZCBhIHBh
aW50IG9yIHJ1biBvdXQgb2YgbWVtb3J5LgorICAgIGlmIChtX3NraXBzSWRsZVBhaW50IHx8ICFt
X3BhaW50UmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEludFJlY3QgaWRs
ZVBhaW50Q29udGVudFJlY3QgPSBpZGxlUGFpbnRSZWN0KGNvbnRlbnRSZWN0KTsKKyAgICBtX3Rp
bGVyLT5ncm93TGF5ZXJUb0NvbnRhaW4oaWRsZVBhaW50Q29udGVudFJlY3QpOworCisgICAgaWYg
KCFtX3RpbGVyLT5udW1UaWxlcygpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBQcm90ZWN0
IGFueSB0ZXh0dXJlcyBpbiB0aGUgcHJlLXBhaW50IGFyZWEgc28gd2UgZG9uJ3QgZW5kIHVwIGp1
c3QKKyAgICAvLyByZWNsYWltaW5nIHRoZW0gYmVsb3cuCisgICAgcHJvdGVjdFRpbGVUZXh0dXJl
cyhpZGxlUGFpbnRDb250ZW50UmVjdCk7CisKKyAgICAvLyBFeHBhbmQgb3V0d2FyZHMgdW50aWwg
d2UgZmluZCBhIGRpcnR5IHJvdyBvciBjb2x1bW4gdG8gdXBkYXRlLgorICAgIGludCBsZWZ0LCB0
b3AsIHJpZ2h0LCBib3R0b207CisgICAgbV90aWxlci0+Y29udGVudFJlY3RUb1RpbGVJbmRpY2Vz
KGNvbnRlbnRSZWN0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworICAgIGludCBwcmVwYWlu
dExlZnQsIHByZXBhaW50VG9wLCBwcmVwYWludFJpZ2h0LCBwcmVwYWludEJvdHRvbTsKKyAgICBt
X3RpbGVyLT5jb250ZW50UmVjdFRvVGlsZUluZGljZXMoaWRsZVBhaW50Q29udGVudFJlY3QsIHBy
ZXBhaW50TGVmdCwgcHJlcGFpbnRUb3AsIHByZXBhaW50UmlnaHQsIHByZXBhaW50Qm90dG9tKTsK
KyAgICB3aGlsZSAoIW1fc2tpcHNJZGxlUGFpbnQgJiYgKGxlZnQgPiBwcmVwYWludExlZnQgfHwg
dG9wID4gcHJlcGFpbnRUb3AgfHwgcmlnaHQgPCBwcmVwYWludFJpZ2h0IHx8IGJvdHRvbSA8IHBy
ZXBhaW50Qm90dG9tKSkgeworICAgICAgICBpZiAoYm90dG9tIDwgcHJlcGFpbnRCb3R0b20pIHsK
KyAgICAgICAgICAgICsrYm90dG9tOworICAgICAgICAgICAgcHJlcGFyZVRvVXBkYXRlVGlsZXMo
dHJ1ZSwgbGVmdCwgYm90dG9tLCByaWdodCwgYm90dG9tKTsKKyAgICAgICAgICAgIGlmICghbV9w
YWludFJlY3QuaXNFbXB0eSgpIHx8IG1fc2tpcHNJZGxlUGFpbnQpCisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRvcCA+IHByZXBhaW50VG9wKSB7CisgICAg
ICAgICAgICAtLXRvcDsKKyAgICAgICAgICAgIHByZXBhcmVUb1VwZGF0ZVRpbGVzKHRydWUsIGxl
ZnQsIHRvcCwgcmlnaHQsIHRvcCk7CisgICAgICAgICAgICBpZiAoIW1fcGFpbnRSZWN0LmlzRW1w
dHkoKSB8fCBtX3NraXBzSWRsZVBhaW50KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIGlmIChsZWZ0ID4gcHJlcGFpbnRMZWZ0KSB7CisgICAgICAgICAgICAtLWxl
ZnQ7CisgICAgICAgICAgICBwcmVwYXJlVG9VcGRhdGVUaWxlcyh0cnVlLCBsZWZ0LCB0b3AsIGxl
ZnQsIGJvdHRvbSk7CisgICAgICAgICAgICBpZiAoIW1fcGFpbnRSZWN0LmlzRW1wdHkoKSB8fCBt
X3NraXBzSWRsZVBhaW50KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGlmIChyaWdodCA8IHByZXBhaW50UmlnaHQpIHsKKyAgICAgICAgICAgICsrcmlnaHQ7Cisg
ICAgICAgICAgICBwcmVwYXJlVG9VcGRhdGVUaWxlcyh0cnVlLCByaWdodCwgdG9wLCByaWdodCwg
Ym90dG9tKTsKKyAgICAgICAgICAgIGlmICghbV9wYWludFJlY3QuaXNFbXB0eSgpIHx8IG1fc2tp
cHNJZGxlUGFpbnQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9
CisKK2Jvb2wgVGlsZWRMYXllckNocm9taXVtOjpuZWVkc0lkbGVQYWludChjb25zdCBJbnRSZWN0
JiBjb250ZW50UmVjdCkKK3sKKyAgICBpZiAobV9za2lwc0lkbGVQYWludCkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgQVNTRVJUKG1fdGlsZXIpOworCisgICAgSW50UmVjdCBpZGxlUGFp
bnRDb250ZW50UmVjdCA9IGlkbGVQYWludFJlY3QoY29udGVudFJlY3QpOworCisgICAgaW50IGxl
ZnQsIHRvcCwgcmlnaHQsIGJvdHRvbTsKKyAgICBtX3RpbGVyLT5jb250ZW50UmVjdFRvVGlsZUlu
ZGljZXMoaWRsZVBhaW50Q29udGVudFJlY3QsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7Cisg
ICAgZm9yIChpbnQgaiA9IHRvcDsgaiA8PSBib3R0b207ICsraikgeworICAgICAgICBmb3IgKGlu
dCBpID0gbGVmdDsgaSA8PSByaWdodDsgKytpKSB7CisgICAgICAgICAgICBpZiAobV9yZXF1ZXN0
ZWRVcGRhdGVUaWxlc1JlY3QuY29udGFpbnMoSW50UG9pbnQoaSwgaikpKQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgVXBkYXRhYmxlVGlsZSogdGlsZSA9IHRpbGVBdChp
LCBqKTsKKyAgICAgICAgICAgIGlmICghdGlsZSB8fCAhdGlsZS0+bWFuYWdlZFRleHR1cmUoKS0+
aXNWYWxpZChtX3RpbGVyLT50aWxlU2l6ZSgpLCBtX3RleHR1cmVGb3JtYXQpIHx8IHRpbGUtPmlz
RGlydHkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0K
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0ludFJlY3QgVGlsZWRMYXllckNocm9taXVtOjppZGxl
UGFpbnRSZWN0KGNvbnN0IEludFJlY3QmIHZpc2libGVDb250ZW50UmVjdCkKK3sKKyAgICBBU1NF
UlQobV90aWxlcik7CisgICAgSW50UmVjdCBwcmVwYWludFJlY3QgPSB2aXNpYmxlQ29udGVudFJl
Y3Q7CisgICAgLy8gRklYTUU6IFRoaXMgY2FuIGJlIG1hZGUgYSBsb3QgbGFyZ2VyIGlmIHdlIGNh
bjoKKyAgICAvLyAtIHJlc2VydmUgbWVtb3J5IGF0IGEgbG93ZXIgcHJpb3JpdHkgdGhhbiBmb3Ig
dmlzaWJsZSBjb250ZW50CisgICAgLy8gLSBvbmx5IHJlc2VydmUgaWRsZSBwYWludCB0aWxlcyB1
cCB0byBhIG1lbW9yeSByZWNsYWltIHRocmVzaG9sZCBhbmQKKyAgICAvLyAtIGluc3VyZSB3ZSBw
bGF5IG5pY2VseSB3aXRoIG90aGVyIGxheWVycworICAgIHByZXBhaW50UmVjdC5pbmZsYXRlWCht
X3RpbGVyLT50aWxlU2l6ZSgpLndpZHRoKCkpOworICAgIHByZXBhaW50UmVjdC5pbmZsYXRlWSht
X3RpbGVyLT50aWxlU2l6ZSgpLmhlaWdodCgpKTsKKyAgICBwcmVwYWludFJlY3QuaW50ZXJzZWN0
KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgY29udGVudEJvdW5kcygpKSk7CisgICAgcmV0dXJu
IHByZXBhaW50UmVjdDsKK30KKwogfQogI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmgKaW5kZXggMjhlN2QxZDBjNTY5NjgwMGYz
ZDYyMTI0MDhkZDhkMThiY2VkYmVjMi4uNzRlYmZlY2VlNmVjN2ExYjk0MzlmNzg2ZTc2MTQ0NWRj
YzU5N2ZlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vVGlsZWRMYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmgKQEAgLTc1LDkgKzc1LDE2IEBA
IHByb3RlY3RlZDoKIAogICAgIC8vIFNldCBpbnZhbGlkYXRpb25zIHRvIGJlIHBvdGVudGlhbGx5
IHJlcGFpbnRlZCBkdXJpbmcgdXBkYXRlKCkuCiAgICAgdm9pZCBpbnZhbGlkYXRlUmVjdChjb25z
dCBJbnRSZWN0JiBjb250ZW50UmVjdCk7CisKICAgICAvLyBQcmVwYXJlIGRhdGEgbmVlZGVkIHRv
IHVwZGF0ZSB0ZXh0dXJlcyB0aGF0IGludGVyc2VjdCB3aXRoIGNvbnRlbnRSZWN0LgogICAgIHZv
aWQgcHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KTsKIAorICAgIC8v
IFNhbWUgYXMgYWJvdmUsIGJ1dCB0aGlzIHdpbGwgdHJ5IHRvIHBhaW50IGFkZGl0aW9uYWwgc3Vy
cm91bmRpbmcgY29udGVudCBpZiBpZGxlLgorICAgIHZvaWQgcHJlcGFyZVRvVXBkYXRlSWRsZShj
b25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCk7CisKKyAgICAvLyBBZnRlciBwcmVwYXJpbmcgYW4g
dXBkYXRlLCByZXR1cm5zIHRydWUgaWYgbW9yZSBwcmUtcGFpbnRpbmcgaXMgbmVlZGVkLgorICAg
IGJvb2wgbmVlZHNJZGxlUGFpbnQoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpOworCiAgICAg
dmlydHVhbCB2b2lkIHByb3RlY3RWaXNpYmxlVGlsZVRleHR1cmVzKCk7CiAKICAgICB2aXJ0dWFs
IFRleHR1cmVNYW5hZ2VyKiB0ZXh0dXJlTWFuYWdlcigpIGNvbnN0OwpAQCAtOTAsMTcgKzk3LDIy
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjcmVhdGVUaWxlcklmTmVlZGVkKCk7CiAgICAgdm9pZCBz
ZXRUaWxpbmdPcHRpb24oVGlsaW5nT3B0aW9uKTsKIAorICAgIHZvaWQgcHJlcGFyZVRvVXBkYXRl
VGlsZXMoYm9vbCBpZGxlLCBpbnQgbGVmdCwgaW50IHRvcCwgaW50IHJpZ2h0LCBpbnQgYm90dG9t
KTsKKyAgICBJbnRSZWN0IGlkbGVQYWludFJlY3QoY29uc3QgSW50UmVjdCYgdmlzaWJsZUNvbnRl
bnRSZWN0KTsKKwogICAgIFVwZGF0YWJsZVRpbGUqIHRpbGVBdChpbnQsIGludCkgY29uc3Q7CiAg
ICAgVXBkYXRhYmxlVGlsZSogY3JlYXRlVGlsZShpbnQsIGludCk7CiAKICAgICAvLyBUZW1wb3Jh
cnkgc3RhdGUgaGVsZCBiZXR3ZWVuIHByZXBhcmVUb1VwZGF0ZSgpIGFuZCB1cGRhdGVDb21wb3Np
dG9yUmVzb3VyY2VzKCkuCi0gICAgSW50UmVjdCBtX3JlcXVlc3RlZFVwZGF0ZVJlY3Q7CisgICAg
SW50UmVjdCBtX3JlcXVlc3RlZFVwZGF0ZVRpbGVzUmVjdDsKKwogICAgIC8vIFN0YXRlIGhlbGQg
YmV0d2VlbiBwcmVwYXJlVG9VcGRhdGUoKSBhbmQgcHVzaFByb3BlcnRpZXNUbygpLiBUaGlzIHJl
cHJlc2VudHMgdGhlIGFyZWEKICAgICAvLyBvZiB0aGUgbGF5ZXIgdGhhdCBpcyBhY3R1YWxseSBy
ZS1wYWludGVkIGJ5IFdlYktpdC4KICAgICBJbnRSZWN0IG1fcGFpbnRSZWN0OwogCiAgICAgR0Mz
RGVudW0gbV90ZXh0dXJlRm9ybWF0OwogICAgIGJvb2wgbV9za2lwc0RyYXc7CisgICAgYm9vbCBt
X3NraXBzSWRsZVBhaW50OwogICAgIExheWVyVGV4dHVyZVVwZGF0ZXI6Ok9yaWVudGF0aW9uIG1f
dGV4dHVyZU9yaWVudGF0aW9uOwogICAgIExheWVyVGV4dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhl
bEZvcm1hdCBtX3NhbXBsZWRUZXhlbEZvcm1hdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dC5jcHAKaW5kZXggMTQ1YTc5OTgwMjdkMDVmZWQyODU4ZTU4ODdmNGI0OWU2OTdiODQyZS4uNWQz
ZGVjNDBiNjY5MWIxOWU0NmI0YjkyOGNiNWRlMGUyZTBjNmYyOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3QuY3BwCkBAIC0zNDYsMTAgKzM0NiwyMyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9z
dDo6dXBkYXRlTGF5ZXJzKExheWVyQ2hyb21pdW0qIHJvb3RMYXllcikKICAgICAgICAgQ0NMYXll
clRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocm9v
dExheWVyLCByb290TGF5ZXIsIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgbV91cGRh
dGVMaXN0LCByb290UmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCksIGxheWVyUmVuZGVyZXJDYXBh
YmlsaXRpZXMoKS5tYXhUZXh0dXJlU2l6ZSk7CiAgICAgfQogCi0gICAgcGFpbnRMYXllckNvbnRl
bnRzKG1fdXBkYXRlTGlzdCk7CisgICAgcGFpbnRMYXllckNvbnRlbnRzKG1fdXBkYXRlTGlzdCwg
UGFpbnRWaXNpYmxlKTsKKyAgICAvLyBUaGUgc2Vjb25kIChpZGxlKSBwYWludCB3aWxsIGJlIGEg
bm8tb3AgaW4gbGF5ZXJzIHdoZXJlIHBhaW50aW5nIGFscmVhZHkgb2NjdXJlZCBhYm92ZS4KKyAg
ICBwYWludExheWVyQ29udGVudHMobV91cGRhdGVMaXN0LCBQYWludElkbGUpOwogfQogCi12b2lk
IENDTGF5ZXJUcmVlSG9zdDo6cGFpbnRNYXNrQW5kUmVwbGljYUZvclJlbmRlclN1cmZhY2UoTGF5
ZXJDaHJvbWl1bSogcmVuZGVyU3VyZmFjZUxheWVyKQorLy8gc3RhdGljCit2b2lkIENDTGF5ZXJU
cmVlSG9zdDo6cGFpbnRDb250ZW50c0lmRGlydHkoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIFBhaW50
VHlwZSBwYWludFR5cGUpCit7CisgICAgQVNTRVJUKGxheWVyKTsKKyAgICBBU1NFUlQoUGFpbnRW
aXNpYmxlID09IHBhaW50VHlwZSB8fCBQYWludElkbGUgPT0gcGFpbnRUeXBlKTsKKyAgICBpZiAo
UGFpbnRWaXNpYmxlID09IHBhaW50VHlwZSkKKyAgICAgICAgbGF5ZXItPnBhaW50Q29udGVudHNJ
ZkRpcnR5KCk7CisgICAgZWxzZQorICAgICAgICBsYXllci0+aWRsZVBhaW50Q29udGVudHNJZkRp
cnR5KCk7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0OjpwYWludE1hc2tBbmRSZXBsaWNhRm9y
UmVuZGVyU3VyZmFjZShMYXllckNocm9taXVtKiByZW5kZXJTdXJmYWNlTGF5ZXIsIFBhaW50VHlw
ZSBwYWludFR5cGUpCiB7CiAgICAgLy8gTm90ZTogTWFza3MgYW5kIHJlcGxpY2FzIG9ubHkgZXhp
c3QgZm9yIGxheWVycyB0aGF0IG93biByZW5kZXIgc3VyZmFjZXMuIElmIHdlIHJlYWNoIHRoaXMg
cG9pbnQKICAgICAvLyBpbiBjb2RlLCB3ZSBhbHJlYWR5IGtub3cgdGhhdCBhdCBsZWFzdCBzb21l
dGhpbmcgd2lsbCBiZSBkcmF3biBpbnRvIHRoaXMgcmVuZGVyIHN1cmZhY2UsIHNvIHRoZQpAQCAt
MzU4LDI0ICszNzEsMjQgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnBhaW50TWFza0FuZFJlcGxp
Y2FGb3JSZW5kZXJTdXJmYWNlKExheWVyQ2hyb21pdW0qIHJlbmRlclMKICAgICBpZiAocmVuZGVy
U3VyZmFjZUxheWVyLT5tYXNrTGF5ZXIoKSkgewogICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXIt
Pm1hc2tMYXllcigpLT5zZXRMYXllclRyZWVIb3N0KHRoaXMpOwogICAgICAgICByZW5kZXJTdXJm
YWNlTGF5ZXItPm1hc2tMYXllcigpLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KEludFJlY3QoSW50UG9p
bnQoKSwgcmVuZGVyU3VyZmFjZUxheWVyLT5jb250ZW50Qm91bmRzKCkpKTsKLSAgICAgICAgcmVu
ZGVyU3VyZmFjZUxheWVyLT5tYXNrTGF5ZXIoKS0+cGFpbnRDb250ZW50c0lmRGlydHkoKTsKKyAg
ICAgICAgcGFpbnRDb250ZW50c0lmRGlydHkocmVuZGVyU3VyZmFjZUxheWVyLT5tYXNrTGF5ZXIo
KSwgcGFpbnRUeXBlKTsKICAgICB9CiAKICAgICBMYXllckNocm9taXVtKiByZXBsaWNhTGF5ZXIg
PSByZW5kZXJTdXJmYWNlTGF5ZXItPnJlcGxpY2FMYXllcigpOwogICAgIGlmIChyZXBsaWNhTGF5
ZXIpIHsKIAogICAgICAgICByZXBsaWNhTGF5ZXItPnNldExheWVyVHJlZUhvc3QodGhpcyk7Ci0g
ICAgICAgIHJlcGxpY2FMYXllci0+cGFpbnRDb250ZW50c0lmRGlydHkoKTsKKyAgICAgICAgcGFp
bnRDb250ZW50c0lmRGlydHkocmVwbGljYUxheWVyLCBwYWludFR5cGUpOwogCiAgICAgICAgIGlm
IChyZXBsaWNhTGF5ZXItPm1hc2tMYXllcigpKSB7CiAgICAgICAgICAgICByZXBsaWNhTGF5ZXIt
Pm1hc2tMYXllcigpLT5zZXRMYXllclRyZWVIb3N0KHRoaXMpOwogICAgICAgICAgICAgcmVwbGlj
YUxheWVyLT5tYXNrTGF5ZXIoKS0+c2V0VmlzaWJsZUxheWVyUmVjdChJbnRSZWN0KEludFBvaW50
KCksIHJlcGxpY2FMYXllci0+bWFza0xheWVyKCktPmNvbnRlbnRCb3VuZHMoKSkpOwotICAgICAg
ICAgICAgcmVwbGljYUxheWVyLT5tYXNrTGF5ZXIoKS0+cGFpbnRDb250ZW50c0lmRGlydHkoKTsK
KyAgICAgICAgICAgIHBhaW50Q29udGVudHNJZkRpcnR5KHJlcGxpY2FMYXllci0+bWFza0xheWVy
KCksIHBhaW50VHlwZSk7CiAgICAgICAgIH0KICAgICB9CiB9CiAKLXZvaWQgQ0NMYXllclRyZWVI
b3N0OjpwYWludExheWVyQ29udGVudHMoY29uc3QgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0KQordm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnBhaW50TGF5ZXJDb250ZW50cyhjb25zdCBM
YXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIFBhaW50VHlwZSBwYWludFR5cGUpCiB7
CiAgICAgZm9yIChpbnQgc3VyZmFjZUluZGV4ID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXpl
KCkgLSAxOyBzdXJmYWNlSW5kZXggPj0gMCA7IC0tc3VyZmFjZUluZGV4KSB7CiAgICAgICAgIExh
eWVyQ2hyb21pdW0qIHJlbmRlclN1cmZhY2VMYXllciA9IHJlbmRlclN1cmZhY2VMYXllckxpc3Rb
c3VyZmFjZUluZGV4XS5nZXQoKTsKQEAgLTM4NCw3ICszOTcsNyBAQCB2b2lkIENDTGF5ZXJUcmVl
SG9zdDo6cGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdAogICAgICAgICBBU1NFUlQocmVuZGVyU3VyZmFjZS0+ZHJhd09wYWNpdHkoKSk7CiAK
ICAgICAgICAgcmVuZGVyU3VyZmFjZUxheWVyLT5zZXRMYXllclRyZWVIb3N0KHRoaXMpOwotICAg
ICAgICBwYWludE1hc2tBbmRSZXBsaWNhRm9yUmVuZGVyU3VyZmFjZShyZW5kZXJTdXJmYWNlTGF5
ZXIpOworICAgICAgICBwYWludE1hc2tBbmRSZXBsaWNhRm9yUmVuZGVyU3VyZmFjZShyZW5kZXJT
dXJmYWNlTGF5ZXIsIHBhaW50VHlwZSk7CiAKICAgICAgICAgY29uc3QgTGF5ZXJMaXN0JiBsYXll
ckxpc3QgPSByZW5kZXJTdXJmYWNlLT5sYXllckxpc3QoKTsKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBsYXllckluZGV4ID0gMDsgbGF5ZXJJbmRleCA8IGxheWVyTGlzdC5zaXplKCk7ICsrbGF5ZXJJ
bmRleCkgewpAQCAtMzk3LDEwICs0MTAsOSBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6cGFpbnRM
YXllckNvbnRlbnRzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdAogCiAg
ICAgICAgICAgICBsYXllci0+c2V0TGF5ZXJUcmVlSG9zdCh0aGlzKTsKIAotICAgICAgICAgICAg
QVNTRVJUKGxheWVyLT5vcGFjaXR5KCkpOwogICAgICAgICAgICAgQVNTRVJUKCFsYXllci0+Ym91
bmRzKCkuaXNFbXB0eSgpKTsKIAotICAgICAgICAgICAgbGF5ZXItPnBhaW50Q29udGVudHNJZkRp
cnR5KCk7CisgICAgICAgICAgICBwYWludENvbnRlbnRzSWZEaXJ0eShsYXllciwgcGFpbnRUeXBl
KTsKICAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKaW5kZXgg
NTA5MzAxMzM4M2JmYjAzNDRiMTBjYjg0NGFlY2ExNzc4YmFhMWU5ZS4uODQyMDQzYmE3YzJmYmZj
YjY2ZjYwNDdhM2FiMTdjYWY2ZWQzNmE0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgK
QEAgLTE5OCw4ICsxOTgsMTAgQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICB0eXBlZGVmIFZl
Y3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBMYXllckxpc3Q7CiAKLSAgICB2b2lkIHBhaW50
TGF5ZXJDb250ZW50cyhjb25zdCBMYXllckxpc3QmKTsKLSAgICB2b2lkIHBhaW50TWFza0FuZFJl
cGxpY2FGb3JSZW5kZXJTdXJmYWNlKExheWVyQ2hyb21pdW0qKTsKKyAgICBlbnVtIFBhaW50VHlw
ZSB7IFBhaW50VmlzaWJsZSwgUGFpbnRJZGxlIH07CisgICAgc3RhdGljIHZvaWQgcGFpbnRDb250
ZW50c0lmRGlydHkoTGF5ZXJDaHJvbWl1bSosIFBhaW50VHlwZSk7CisgICAgdm9pZCBwYWludExh
eWVyQ29udGVudHMoY29uc3QgTGF5ZXJMaXN0JiwgUGFpbnRUeXBlKTsKKyAgICB2b2lkIHBhaW50
TWFza0FuZFJlcGxpY2FGb3JSZW5kZXJTdXJmYWNlKExheWVyQ2hyb21pdW0qLCBQYWludFR5cGUp
OwogCiAgICAgdm9pZCB1cGRhdGVMYXllcnMoTGF5ZXJDaHJvbWl1bSopOwogICAgIHZvaWQgY2xl
YXJQZW5kaW5nVXBkYXRlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcAppbmRleCBlMjIwODgwODVkN2VkMGQ2NTAyOTVjNjk1
Nzk4MDA5ZjcyZTdiZWUzLi41ODhkOTU5M2RkZGE0N2NjMTlhYmY4Y2EyZTUxNDYwODcyYWUwOTVl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9z
dFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVI
b3N0VGVzdC5jcHAKQEAgLTk0OCw3ICs5NDgsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8Q29udGVudExheWVyQ2hyb21pdW1XaXRoVXBkYXRlVHJhY2tpbmc+IGNyZWF0ZShDQ0xh
eWVyRGVsZWdhdGUgKmRlbGVnYXRlKSB7IHJldHVybiBhZG9wdFJlZihuZXcgQ29udGVudExheWVy
Q2hyb21pdW1XaXRoVXBkYXRlVHJhY2tpbmcoZGVsZWdhdGUpKTsgfQogCiAgICAgaW50IHBhaW50
Q29udGVudHNDb3VudCgpIHsgcmV0dXJuIG1fcGFpbnRDb250ZW50c0NvdW50OyB9Ci0gICAgdm9p
ZCByZXNldFBhaW50Q29udGVudHNDb3VudCgpIHsgbV9wYWludENvbnRlbnRzQ291bnQgPSAwOyB9
CisgICAgaW50IGlkbGVQYWludENvbnRlbnRzQ291bnQoKSB7IHJldHVybiBtX2lkbGVQYWludENv
bnRlbnRzQ291bnQ7IH0KKyAgICB2b2lkIHJlc2V0UGFpbnRDb250ZW50c0NvdW50KCkgeyBtX3Bh
aW50Q29udGVudHNDb3VudCA9IDA7IG1faWRsZVBhaW50Q29udGVudHNDb3VudCA9IDA7fQogCiAg
ICAgaW50IHVwZGF0ZUNvdW50KCkgeyByZXR1cm4gbV91cGRhdGVDb3VudDsgfQogICAgIHZvaWQg
cmVzZXRVcGRhdGVDb3VudCgpIHsgbV91cGRhdGVDb3VudCA9IDA7IH0KQEAgLTk1OSw2ICs5NjAs
MTIgQEAgcHVibGljOgogICAgICAgICBtX3BhaW50Q29udGVudHNDb3VudCsrOwogICAgIH0KIAor
ICAgIHZpcnR1YWwgdm9pZCBpZGxlUGFpbnRDb250ZW50c0lmRGlydHkoKQorICAgIHsKKyAgICAg
ICAgQ29udGVudExheWVyQ2hyb21pdW06OmlkbGVQYWludENvbnRlbnRzSWZEaXJ0eSgpOworICAg
ICAgICBtX2lkbGVQYWludENvbnRlbnRzQ291bnQrKzsKKyAgICB9CisKICAgICB2aXJ0dWFsIHZv
aWQgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwg
Q0NUZXh0dXJlVXBkYXRlciYgdXBkYXRlcikKICAgICB7CiAgICAgICAgIENvbnRlbnRMYXllckNo
cm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGNvbnRleHQsIHVwZGF0ZXIpOwpAQCAt
OTY5LDEyICs5NzYsMTQgQEAgcHJpdmF0ZToKICAgICBleHBsaWNpdCBDb250ZW50TGF5ZXJDaHJv
bWl1bVdpdGhVcGRhdGVUcmFja2luZyhDQ0xheWVyRGVsZWdhdGUgKmRlbGVnYXRlKQogICAgICAg
ICA6IENvbnRlbnRMYXllckNocm9taXVtKGRlbGVnYXRlKQogICAgICAgICAsIG1fcGFpbnRDb250
ZW50c0NvdW50KDApCisgICAgICAgICwgbV9pZGxlUGFpbnRDb250ZW50c0NvdW50KDApCiAgICAg
ICAgICwgbV91cGRhdGVDb3VudCgwKQogICAgIHsKICAgICAgICAgc2V0Qm91bmRzKEludFNpemUo
MTAsIDEwKSk7CiAgICAgfQogCiAgICAgaW50IG1fcGFpbnRDb250ZW50c0NvdW50OworICAgIGlu
dCBtX2lkbGVQYWludENvbnRlbnRzQ291bnQ7CiAgICAgaW50IG1fdXBkYXRlQ291bnQ7CiB9Owog
CkBAIC0xMDA1LDYgKzEwMTQsOSBAQCBwdWJsaWM6CiAgICAgICAgIC8vIHBhaW50Q29udGVudHNJ
ZkRpcnR5KCkgc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQgb25jZS4KICAgICAgICAgRVhQRUNUX0VR
KDEsIG1fdXBkYXRlQ2hlY2tMYXllci0+cGFpbnRDb250ZW50c0NvdW50KCkpOwogCisgICAgICAg
IC8vIGlkbGVQYWludENvbnRlbnRzSWZEaXJ0eSgpIHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkIG9u
Y2UKKyAgICAgICAgRVhQRUNUX0VRKDEsIG1fdXBkYXRlQ2hlY2tMYXllci0+aWRsZVBhaW50Q29u
dGVudHNDb3VudCgpKTsKKwogICAgICAgICAvLyB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKCkg
c2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQgdGhlIHNhbWUKICAgICAgICAgLy8gYW1vdXQgb2YgdGlt
ZXMgYXMgcGFpbnRDb250ZW50c0lmRGlydHkoKS4KICAgICAgICAgRVhQRUNUX0VRKG1fdXBkYXRl
Q2hlY2tMYXllci0+cGFpbnRDb250ZW50c0NvdW50KCksCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL1RpbGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3BwIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0LmNwcAppbmRleCBhOTE4
ZjdkNTdmNGI4ODU1NGZlNmM5NzdhMjgyMmRiZDI1YWRhYmM4Li41NjdhOTNlNWFiM2Q3OWJmNzZi
YzVlMGI1NDQ1ZGRlYzg5YWI3ZDVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL1RpbGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvVGlsZWRMYXllckNocm9taXVtVGVzdC5jcHAKQEAgLTk4LDYgKzk4LDE2IEBA
IHB1YmxpYzoKICAgICAgICAgVGlsZWRMYXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGUocmVj
dCk7CiAgICAgfQogCisgICAgdm9pZCBwcmVwYXJlVG9VcGRhdGVJZGxlKGNvbnN0IEludFJlY3Qm
IHJlY3QpCisgICAgeworICAgICAgICBUaWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVUb1VwZGF0
ZUlkbGUocmVjdCk7CisgICAgfQorCisgICAgYm9vbCBuZWVkc0lkbGVQYWludChjb25zdCBJbnRS
ZWN0JiByZWN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIFRpbGVkTGF5ZXJDaHJvbWl1bTo6bmVl
ZHNJZGxlUGFpbnQocmVjdCk7CisgICAgfQorCiAgICAgdmlydHVhbCBUZXh0dXJlTWFuYWdlciog
dGV4dHVyZU1hbmFnZXIoKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmVNYW5hZ2VyOyB9CiAKIHBy
aXZhdGU6CkBAIC0xNDYsNSArMTU2LDEwNyBAQCBURVNUKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3Qs
IHB1c2hEaXJ0eVRpbGVzKQogICAgIEVYUEVDVF9GQUxTRShsYXllckltcGwtPmhhc1RpbGVBdCgw
LCAxKSk7CiB9CiAKK1RFU1QoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaElkbGVQYWludFRp
bGVzKQoreworICAgIE93blB0cjxUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBUZXh0
dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAyNCoxMDI0LCAxMDI0KTsKKyAgICBSZWZQdHI8RmFrZVRp
bGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJv
bWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOworICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVh
ZCBpbXBsVGhyZWFkOworICAgIFJlZlB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBs
ID0gYWRvcHRSZWYobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDApKTsKKworICAgIEZha2VUZXh0
dXJlQWxsb2NhdG9yIHRleHR1cmVBbGxvY2F0b3I7CisgICAgQ0NUZXh0dXJlVXBkYXRlciB1cGRh
dGVyKCZ0ZXh0dXJlQWxsb2NhdG9yKTsKKworICAgIC8vIFRoZSB0aWxlIHNpemUgaXMgMTAweDEw
MC4gU2V0dXAgNXg1IHRpbGVzIHdpdGggb25lIHZpc2libGUgdGlsZSBpbiB0aGUgY2VudGVyLgor
ICAgIEludFNpemUgY29udGVudEJvdW5kcyg1MDAsIDUwMCk7CisgICAgSW50UmVjdCBjb250ZW50
UmVjdChJbnRQb2ludDo6emVybygpLCBjb250ZW50Qm91bmRzKTsKKyAgICBJbnRSZWN0IHZpc2li
bGVSZWN0KDIwMCwgMjAwLCAxMDAsIDEwMCk7CisKKyAgICAvLyBUaGlzIGludmFsaWRhdGVzIDI1
IHRpbGVzIGFuZCB0aGVuIHBhaW50cyBvbmUgdmlzaWJsZSB0aWxlLgorICAgIGxheWVyLT5zZXRC
b3VuZHMoY29udGVudEJvdW5kcyk7CisgICAgbGF5ZXItPnNldFZpc2libGVMYXllclJlY3Qodmlz
aWJsZVJlY3QpOworICAgIGxheWVyLT5pbnZhbGlkYXRlUmVjdChjb250ZW50UmVjdCk7CisgICAg
bGF5ZXItPnByZXBhcmVUb1VwZGF0ZSh2aXNpYmxlUmVjdCk7CisKKyAgICAvLyBXZSBzaG91bGQg
bmVlZCBpZGxlLXBhaW50aW5nIGZvciAzeDMgdGlsZXMgaW4gdGhlIGNlbnRlci4KKyAgICBFWFBF
Q1RfVFJVRShsYXllci0+bmVlZHNJZGxlUGFpbnQodmlzaWJsZVJlY3QpKTsKKworICAgIGxheWVy
LT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKDAsIHVwZGF0ZXIpOworICAgIGxheWVyLT5wdXNo
UHJvcGVydGllc1RvKGxheWVySW1wbC5nZXQoKSk7CisKKyAgICAvLyBXZSBzaG91bGQgaGF2ZSBv
bmUgdGlsZSBvbiB0aGUgaW1wbCBzaWRlLgorICAgIEVYUEVDVF9UUlVFKGxheWVySW1wbC0+aGFz
VGlsZUF0KDIsIDIpKTsKKworICAgIHRleHR1cmVNYW5hZ2VyLT51bnByb3RlY3RBbGxUZXh0dXJl
cygpOworCisgICAgLy8gRm9yIHRoZSBuZXh0IGZvdXIgdXBkYXRlcywgd2Ugc2hvdWxkIGRldGVj
dCB3ZSBzdGlsbCBuZWVkIGlkbGUgcGFpbnRpbmcuCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0
OyBpKyspIHsKKyAgICAgICAgbGF5ZXItPnByZXBhcmVUb1VwZGF0ZSh2aXNpYmxlUmVjdCk7Cisg
ICAgICAgIEVYUEVDVF9UUlVFKGxheWVyLT5uZWVkc0lkbGVQYWludCh2aXNpYmxlUmVjdCkpOwor
ICAgICAgICBsYXllci0+cHJlcGFyZVRvVXBkYXRlSWRsZSh2aXNpYmxlUmVjdCk7CisgICAgICAg
IGxheWVyLT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKDAsIHVwZGF0ZXIpOworICAgICAgICBs
YXllci0+cHVzaFByb3BlcnRpZXNUbyhsYXllckltcGwuZ2V0KCkpOworICAgICAgICB0ZXh0dXJl
TWFuYWdlci0+dW5wcm90ZWN0QWxsVGV4dHVyZXMoKTsKKyAgICB9CisKKyAgICAvLyBBZnRlciBm
b3VyIHBhc3NlcyBvZiBpZGxlIHBhaW50aW5nLCB3ZSBzaG91bGQgYmUgZmluaXNoZWQgcGFpbnRp
bmcKKyAgICBFWFBFQ1RfRkFMU0UobGF5ZXItPm5lZWRzSWRsZVBhaW50KHZpc2libGVSZWN0KSk7
CisKKyAgICAvLyBXZSBzaG91bGQgaGF2ZSBvbmUgdGlsZSBzdXJyb3VuZGluZyB0aGUgdmlzaWJs
ZSB0aWxlIG9uIGFsbCBzaWRlcywgYnV0IG5vIG90aGVyIHRpbGVzLgorICAgIEludFJlY3QgaWRs
ZVBhaW50VGlsZXMoMSwgMSwgMywgMyk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA1OyBpKysp
IHsKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCA1OyBqKyspIHsKKyAgICAgICAgICAgIGlm
IChpZGxlUGFpbnRUaWxlcy5jb250YWlucyhpLCBqKSkKKyAgICAgICAgICAgICAgICBFWFBFQ1Rf
VFJVRShsYXllckltcGwtPmhhc1RpbGVBdChpLCBqKSk7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKGxheWVySW1wbC0+aGFzVGlsZUF0KGksIGopKTsKKyAg
ICAgICAgfQorICAgIH0KK30KKworCitURVNUKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIGlkbGVQ
YWludE91dE9mTWVtb3J5KQoreworICAgIC8vIFRoZSB0aWxlIHNpemUgaXMgMTAweDEwMC4gU2V0
dXAgNXg1IHRpbGVzIHdpdGggb25lIDF4MSB2aXNpYmxlIHRpbGUgaW4gdGhlIGNlbnRlci4KKyAg
ICBJbnRTaXplIGNvbnRlbnRCb3VuZHMoMzAwLCAzMDApOworICAgIEludFJlY3QgY29udGVudFJl
Y3QoSW50UG9pbnQ6Onplcm8oKSwgY29udGVudEJvdW5kcyk7CisgICAgSW50UmVjdCB2aXNpYmxl
UmVjdCgxMDAsIDEwMCwgMTAwLCAxMDApOworCisgICAgLy8gV2UgaGF2ZSBlbm91Z2ggbWVtb3J5
IGZvciBvbmx5IHRoZSB2aXNpYmxlIHJlY3QsIHNvIHdlIHdpbGwgcnVuIG91dCBvZiBtZW1vcnkg
aW4gZmlyc3QgaWRsZSBwYWludC4KKyAgICBpbnQgbWVtb3J5TGltaXQgPSA0ICogMTAwICogMTAw
OyAvLyAyIHRpbGVzLCA0IGJ5dGVzIHBlciBwaXhlbC4KKworICAgIE93blB0cjxUZXh0dXJlTWFu
YWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKG1lbW9yeUxpbWl0
LCAxMDI0KTsKKyAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9w
dFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwor
ICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOworICAgIFJlZlB0cjxGYWtl
Q0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsID0gYWRvcHRSZWYobmV3IEZha2VDQ1RpbGVkTGF5
ZXJJbXBsKDApKTsKKworICAgIEZha2VUZXh0dXJlQWxsb2NhdG9yIHRleHR1cmVBbGxvY2F0b3I7
CisgICAgQ0NUZXh0dXJlVXBkYXRlciB1cGRhdGVyKCZ0ZXh0dXJlQWxsb2NhdG9yKTsKKworICAg
IC8vIFRoaXMgaW52YWxpZGF0ZXMgOSB0aWxlcyBhbmQgdGhlbiBwYWludHMgb25lIHZpc2libGUg
dGlsZS4KKyAgICBsYXllci0+c2V0Qm91bmRzKGNvbnRlbnRCb3VuZHMpOworICAgIGxheWVyLT5z
ZXRWaXNpYmxlTGF5ZXJSZWN0KHZpc2libGVSZWN0KTsKKyAgICBsYXllci0+aW52YWxpZGF0ZVJl
Y3QoY29udGVudFJlY3QpOworICAgIGxheWVyLT5wcmVwYXJlVG9VcGRhdGUodmlzaWJsZVJlY3Qp
OworCisgICAgLy8gV2Ugc2hvdWxkIG5lZWQgaWRsZS1wYWludGluZyBmb3IgM3gzIHRpbGVzIHN1
cm91bmRpbmcgdmlzaWJsZSB0aWxlLgorICAgIEVYUEVDVF9UUlVFKGxheWVyLT5uZWVkc0lkbGVQ
YWludCh2aXNpYmxlUmVjdCkpOworCisgICAgbGF5ZXItPnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJj
ZXMoMCwgdXBkYXRlcik7CisgICAgbGF5ZXItPnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXJJbXBsLmdl
dCgpKTsKKworICAgIC8vIFdlIHNob3VsZCBoYXZlIG9uZSB0aWxlIG9uIHRoZSBpbXBsIHNpZGUu
CisgICAgRVhQRUNUX1RSVUUobGF5ZXJJbXBsLT5oYXNUaWxlQXQoMSwgMSkpOworCisgICAgdGV4
dHVyZU1hbmFnZXItPnVucHJvdGVjdEFsbFRleHR1cmVzKCk7CisgICAgbGF5ZXItPnByZXBhcmVU
b1VwZGF0ZSh2aXNpYmxlUmVjdCk7CisgICAgbGF5ZXItPnByZXBhcmVUb1VwZGF0ZUlkbGUodmlz
aWJsZVJlY3QpOworCisgICAgLy8gV2Ugc2hvdWxkbid0IHNpZ25hbCB3ZSBuZWVkIGFub3RoZXIg
aWRsZSBwYWludCBhZnRlciB3ZSBydW4gb3V0IG9mIG1lbW9yeS4KKyAgICBFWFBFQ1RfRkFMU0Uo
bGF5ZXItPm5lZWRzSWRsZVBhaW50KHZpc2libGVSZWN0KSk7CisKKyAgICBsYXllci0+dXBkYXRl
Q29tcG9zaXRvclJlc291cmNlcygwLCB1cGRhdGVyKTsKKyAgICBsYXllci0+cHVzaFByb3BlcnRp
ZXNUbyhsYXllckltcGwuZ2V0KCkpOworfQorCiB9IC8vIG5hbWVzcGFjZQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118421</attachid>
            <date>2011-12-08 10:50:05 -0800</date>
            <delta_ts>2011-12-08 11:49:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72686-20111208105004.patch</filename>
            <type>text/plain</type>
            <size>34540</size>
            <attacher name="Eric Penner">epenner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyMjk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWQ0YjMwNGE3NGU0NjQ1
NjRiOTE5YTUxNTdlZTRiOGQ2ZTNjZDk3Mi4uZDk3NTQ4YmMyMjE2NGU1N2MyZWIxYjVlZmU4Y2Q5
YzEwZjg2MDMyNCAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDExLTEyLTA4ICBFcmlj
IFBlbm5lciAgPGVwZW5uZXJAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIE5lZWQg
dG8gcHJlcGFpbnQgdGlsZXMgaW4gVGlsZWRMYXllckNocm9taXVtCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjY4NgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExh
eWVyQ2hyb21pdW06OmlkbGVQYWludENvbnRlbnRzSWZEaXJ0eSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmg6CisgICAgICAgIChXZWJD
b3JlOjpMYXllckNocm9taXVtOjppZGxlUGFpbnRDb250ZW50c0lmRGlydHkpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYW5hZ2VyOjpwcm90ZWN0VGV4dHVyZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6VGlsZWRMYXllckNocm9taXVtKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6Y2xlYW51cFJlc291cmNlcyk6CisgICAg
ICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJj
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRh
dGVUaWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVU
b1VwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVU
b1VwZGF0ZUlkbGUpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjpuZWVk
c0lkbGVQYWludCk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OmlkbGVQ
YWludFJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5
ZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnVw
ZGF0ZUxheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnBhaW50Q29u
dGVudHNJZkRpcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6cGFpbnRN
YXNrQW5kUmVwbGljYUZvclJlbmRlclN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
clRyZWVIb3N0OjpwYWludExheWVyQ29udGVudHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6Y29tcG9zaXRlQW5kUmVhZGJhY2spOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6Y29tcG9zaXRlSW1tZWRpYXRlbHkpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6Y29tbWl0SWZOZWVkZWQpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJv
eHkuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFBy
b3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OmJlZ2luRnJhbWVBbmRD
b21taXQpOgorCiAyMDExLTEyLTA3ICBTaGF3biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gQ2xlYXJpbmcgcm9vdCBzdXJmYWNlIHNob3VsZCBo
YXBwZW4gYWZ0ZXIgZGFtYWdlIHRyYWNraW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IGY4ZGVjMjI5MGViZjNmZWMzNGVjYzZkZDZmZTZmZDk0YzI5ZGRmZWMuLjBmOTE3ODNjOWVmMmVk
YTVmMDdjYjFhZWIxZjQ1MmQ2YzhmZDI2MDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjEgQEAKKzIwMTEtMTItMDggIEVyaWMgUGVubmVyICA8ZXBlbm5lckBnb29nbGUu
Y29tPgorCisgICAgICAgIFtjaHJvbWl1bV0gTmVlZCB0byBwcmVwYWludCB0aWxlcyBpbiBUaWxl
ZExheWVyQ2hyb21pdW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTcyNjg2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiB0ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcDoKKyAgICAgICAgKFdURjo6Q29u
dGVudExheWVyQ2hyb21pdW1XaXRoVXBkYXRlVHJhY2tpbmc6OmlkbGVQYWludENvbnRlbnRzQ291
bnQpOgorICAgICAgICAoV1RGOjpDb250ZW50TGF5ZXJDaHJvbWl1bVdpdGhVcGRhdGVUcmFja2lu
Zzo6cmVzZXRQYWludENvbnRlbnRzQ291bnQpOgorICAgICAgICAoV1RGOjpDb250ZW50TGF5ZXJD
aHJvbWl1bVdpdGhVcGRhdGVUcmFja2luZzo6aWRsZVBhaW50Q29udGVudHNJZkRpcnR5KToKKyAg
ICAgICAgKFdURjo6Q29udGVudExheWVyQ2hyb21pdW1XaXRoVXBkYXRlVHJhY2tpbmc6OkNvbnRl
bnRMYXllckNocm9taXVtV2l0aFVwZGF0ZVRyYWNraW5nKToKKyAgICAgICAgKFdURjo6Q0NMYXll
clRyZWVIb3N0VGVzdE9wYWNpdHlDaGFuZ2U6OmFmdGVyVGVzdCk6CisgICAgICAgICogdGVzdHMv
VGlsZWRMYXllckNocm9taXVtVGVzdC5jcHA6CisgICAgICAgIChXVEY6OkZha2VUaWxlZExheWVy
Q2hyb21pdW06OnByZXBhcmVUb1VwZGF0ZUlkbGUpOgorICAgICAgICAoV1RGOjpGYWtlVGlsZWRM
YXllckNocm9taXVtOjpuZWVkc0lkbGVQYWludCk6CisgICAgICAgIChXVEY6OlRFU1QpOgorCiAy
MDExLTEyLTA3ICBBbGV4YW5kcmUgRWxpYXMgIDxhZWxpYXNAZ29vZ2xlLmNvbT4KIAogICAgICAg
ICBbY2hyb21pdW1dIFByZXNlcnZlIG9yaWdpbmFsIHBhZ2VTY2FsZSBsaW1pdHMgaW4gV2ViVmll
d0ltcGwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcAppbmRleCAyYTI0NjZkOTEy
OWFlYzM2NDA5MzIyOWNiOTM1YWY4MmQ1MDcyNGI2Li5jMjg0ZWVhMzFhNDAwZTNlOTI1MzI5NWI1
ZjI2MDM0NDlmOWQ4MGRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCkBA
IC0xMDksNiArMTA5LDIwIEBAIHZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OnBhaW50Q29udGVu
dHNJZkRpcnR5KCkKICAgICBtX25lZWRzRGlzcGxheSA9IGZhbHNlOwogfQogCit2b2lkIENvbnRl
bnRMYXllckNocm9taXVtOjppZGxlUGFpbnRDb250ZW50c0lmRGlydHkoKQoreworICAgIGlmICgh
ZHJhd3NDb250ZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IEludFJlY3QmIGxh
eWVyUmVjdCA9IHZpc2libGVMYXllclJlY3QoKTsKKyAgICBpZiAobGF5ZXJSZWN0LmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcHJlcGFyZVRvVXBkYXRlSWRsZShsYXllclJlY3Qp
OworICAgIGlmIChuZWVkc0lkbGVQYWludChsYXllclJlY3QpKQorICAgICAgICBzZXROZWVkc0Nv
bW1pdCgpOworfQorCiBib29sIENvbnRlbnRMYXllckNocm9taXVtOjpkcmF3c0NvbnRlbnQoKSBj
b25zdAogewogICAgIHJldHVybiBtX2RlbGVnYXRlICYmIG1fZGVsZWdhdGUtPmRyYXdzQ29udGVu
dCgpICYmIFRpbGVkTGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJv
bWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVu
dExheWVyQ2hyb21pdW0uaAppbmRleCBiODM0ZTY3NmJkNjM0NDVhYTQ1M2IzNjVlZWUyODAyNDBm
MzgwOWMxLi4wYzU3NGI1ZGZkYzBhNTcxYjgxMWJlMDM5NzY0YWM3NWIxYzJlM2VlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5
ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0NvbnRlbnRMYXllckNocm9taXVtLmgKQEAgLTUwLDYgKzUwLDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgfkNvbnRlbnRMYXllckNocm9taXVtKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFp
bnRDb250ZW50c0lmRGlydHkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgaWRsZVBhaW50Q29udGVudHNJ
ZkRpcnR5KCk7CiAKIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBDb250ZW50TGF5ZXJDaHJvbWl1
bShDQ0xheWVyRGVsZWdhdGUqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAppbmRleCA1ZTA1YzE1N2M3OTVj
ZTFlMDY0ZGYyZGY5NjQ0MDdhZGJmZTU1MGIwLi5lOGM3MmFiNDQ5YTFlM2Y1Nzk3YjgyNDExZWRh
OWJiNDEwNDUwZTdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCkBAIC0xNjEsNiArMTYxLDcgQEAgcHVi
bGljOgogICAgIC8vIFRoZXNlIG1ldGhvZHMgdHlwaWNhbGx5IG5lZWQgdG8gYmUgb3ZlcndyaXR0
ZW4gYnkgZGVyaXZlZCBjbGFzc2VzLgogICAgIHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzSWZE
aXJ0eSgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBpZGxlUGFpbnRDb250ZW50c0lmRGlydHkoKSB7
IH0KICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0Nv
bnRleHQzRCosIENDVGV4dHVyZVVwZGF0ZXImKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0SXNN
YXNrKGJvb2wpIHsgfQogICAgIHZpcnR1YWwgdm9pZCB1bnJlc2VydmVDb250ZW50c1RleHR1cmUo
KSB7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1RleHR1cmVNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmNwcAppbmRleCBkNjZiMDZhZTNkMjBkYTliZDE1MTMx
ZjU3MGUzYTY3MzY1YzYzOGQyLi5lZGQxZjY4MDljNGU5MWUzMDdjM2IyOGYwOGUwN2JkZjgxMTg5
MTQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9UZXh0dXJlTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuY3BwCkBAIC0xNDEsNyArMTQxLDYgQEAgYm9vbCBU
ZXh0dXJlTWFuYWdlcjo6aXNQcm90ZWN0ZWQoVGV4dHVyZVRva2VuIHRva2VuKQogdm9pZCBUZXh0
dXJlTWFuYWdlcjo6cHJvdGVjdFRleHR1cmUoVGV4dHVyZVRva2VuIHRva2VuKQogewogICAgIEFT
U0VSVChoYXNUZXh0dXJlKHRva2VuKSk7Ci0gICAgQVNTRVJUKCFtX3RleHR1cmVzLmdldCh0b2tl
bikuaXNQcm90ZWN0ZWQpOwogICAgIFRleHR1cmVJbmZvIGluZm8gPSBtX3RleHR1cmVzLnRha2Uo
dG9rZW4pOwogICAgIGluZm8uaXNQcm90ZWN0ZWQgPSB0cnVlOwogICAgIG1fdGV4dHVyZXMuYWRk
KHRva2VuLCBpbmZvKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCmluZGV4IDVjNTVm
NTliZjNlNzM3MmZlOWVjNTEyZWY2MzYxMTAxYWM1YTA1ZTUuLmUzMThjYjE1N2E0MWVhZTM5YjZk
Y2MzYjFkZjVmZDZmZDY2ZjFjMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcApA
QCAtNzIsNiArNzIsNyBAQCBUaWxlZExheWVyQ2hyb21pdW06OlRpbGVkTGF5ZXJDaHJvbWl1bShD
Q0xheWVyRGVsZWdhdGUqIGRlbGVnYXRlKQogICAgIDogTGF5ZXJDaHJvbWl1bShkZWxlZ2F0ZSkK
ICAgICAsIG1fdGV4dHVyZUZvcm1hdChHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNKQog
ICAgICwgbV9za2lwc0RyYXcoZmFsc2UpCisgICAgLCBtX3NraXBzSWRsZVBhaW50KGZhbHNlKQog
ICAgICwgbV90ZXh0dXJlT3JpZW50YXRpb24oTGF5ZXJUZXh0dXJlVXBkYXRlcjo6SW52YWxpZE9y
aWVudGF0aW9uKQogICAgICwgbV9zYW1wbGVkVGV4ZWxGb3JtYXQoTGF5ZXJUZXh0dXJlVXBkYXRl
cjo6U2FtcGxlZFRleGVsRm9ybWF0SW52YWxpZCkKICAgICAsIG1fdGlsaW5nT3B0aW9uKEF1dG9U
aWxlKQpAQCAtOTMsNyArOTQsNyBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6Y2xlYW51cFJl
c291cmNlcygpCiAKICAgICBtX3RpbGVyLmNsZWFyKCk7CiAgICAgbV9wYWludFJlY3QgPSBJbnRS
ZWN0KCk7Ci0gICAgbV9yZXF1ZXN0ZWRVcGRhdGVSZWN0ID0gSW50UmVjdCgpOworICAgIG1fcmVx
dWVzdGVkVXBkYXRlVGlsZXNSZWN0ID0gSW50UmVjdCgpOwogfQogCiB2b2lkIFRpbGVkTGF5ZXJD
aHJvbWl1bTo6dXBkYXRlVGlsZVNpemVBbmRUaWxpbmdPcHRpb24oKQpAQCAtMTc5LDExICsxODAs
MTMgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMo
R3JhcGhpY3NDb250ZXh0M0QqLCBDQ1RleHR1cmUKICAgICBBU1NFUlQobV90aWxlcik7CiAKICAg
ICAvLyBQYWludGluZyBjb3VsZCBjYXVzZSBjb21wb3NpdGluZyB0byBnZXQgdHVybmVkIG9mZiwg
d2hpY2ggbWF5IGNhdXNlIHRoZSB0aWxlciB0byBiZWNvbWUgaW52YWxpZGF0ZWQgbWlkLXVwZGF0
ZS4KLSAgICBpZiAobV9za2lwc0RyYXcgfHwgbV9yZXF1ZXN0ZWRVcGRhdGVSZWN0LmlzRW1wdHko
KSB8fCAhbV90aWxlciB8fCAhbV90aWxlci0+bnVtVGlsZXMoKSkKKyAgICBpZiAobV9za2lwc0Ry
YXcgfHwgbV9yZXF1ZXN0ZWRVcGRhdGVUaWxlc1JlY3QuaXNFbXB0eSgpIHx8ICFtX3RpbGVyIHx8
ICFtX3RpbGVyLT5udW1UaWxlcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpbnQgbGVmdCwg
dG9wLCByaWdodCwgYm90dG9tOwotICAgIG1fdGlsZXItPmNvbnRlbnRSZWN0VG9UaWxlSW5kaWNl
cyhtX3JlcXVlc3RlZFVwZGF0ZVJlY3QsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CisgICAg
aW50IGxlZnQgPSBtX3JlcXVlc3RlZFVwZGF0ZVRpbGVzUmVjdC54KCk7CisgICAgaW50IHRvcCA9
IG1fcmVxdWVzdGVkVXBkYXRlVGlsZXNSZWN0LnkoKTsKKyAgICBpbnQgcmlnaHQgPSBtX3JlcXVl
c3RlZFVwZGF0ZVRpbGVzUmVjdC5tYXhYKCkgLSAxOworICAgIGludCBib3R0b20gPSBtX3JlcXVl
c3RlZFVwZGF0ZVRpbGVzUmVjdC5tYXhZKCkgLSAxOwogICAgIGZvciAoaW50IGogPSB0b3A7IGog
PD0gYm90dG9tOyArK2opIHsKICAgICAgICAgZm9yIChpbnQgaSA9IGxlZnQ7IGkgPD0gcmlnaHQ7
ICsraSkgewogICAgICAgICAgICAgVXBkYXRhYmxlVGlsZSogdGlsZSA9IHRpbGVBdChpLCBqKTsK
QEAgLTM0MiwzOCArMzQ1LDE3IEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpwcm90ZWN0VGls
ZVRleHR1cmVzKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQogICAgIH0KIH0KIAotdm9pZCBU
aWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50
UmVjdCkKK3ZvaWQgVGlsZWRMYXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGVUaWxlcyhib29s
IGlkbGUsIGludCBsZWZ0LCBpbnQgdG9wLCBpbnQgcmlnaHQsIGludCBib3R0b20pCiB7Ci0gICAg
aWYgKCFtX3RpbGVyKQotICAgICAgICBjcmVhdGVUaWxlcihpc05vbkNvbXBvc2l0ZWRDb250ZW50
KCkgPyBDQ0xheWVyVGlsaW5nRGF0YTo6Tm9Cb3JkZXJUZXhlbHMgOiBDQ0xheWVyVGlsaW5nRGF0
YTo6SGFzQm9yZGVyVGV4ZWxzKTsKLQotICAgIEFTU0VSVChtX3RpbGVyKTsKLQotICAgIG1fc2tp
cHNEcmF3ID0gZmFsc2U7Ci0KICAgICAvLyBSZXNldCBtX3VwZGF0ZVJlY3QgZm9yIGFsbCB0aWxl
cy4KICAgICBmb3IgKENDTGF5ZXJUaWxpbmdEYXRhOjpUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBp
dGVyID0gbV90aWxlci0+dGlsZXMoKS5iZWdpbigpOyBpdGVyICE9IG1fdGlsZXItPnRpbGVzKCku
ZW5kKCk7ICsraXRlcikgewogICAgICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0gc3RhdGljX2Nh
c3Q8VXBkYXRhYmxlVGlsZSo+KGl0ZXItPnNlY29uZC5nZXQoKSk7CiAgICAgICAgIHRpbGUtPm1f
dXBkYXRlUmVjdCA9IEludFJlY3QoKTsKICAgICB9CiAKLSAgICBpZiAoY29udGVudFJlY3QuaXNF
bXB0eSgpKSB7Ci0gICAgICAgIG1fcmVxdWVzdGVkVXBkYXRlUmVjdCA9IEludFJlY3QoKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fdGlsZXItPmdyb3dMYXllclRvQ29udGFpbihj
b250ZW50UmVjdCk7Ci0KLSAgICBpZiAoIW1fdGlsZXItPm51bVRpbGVzKCkpIHsKLSAgICAgICAg
bV9yZXF1ZXN0ZWRVcGRhdGVSZWN0ID0gSW50UmVjdCgpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCiAgICAgLy8gQ3JlYXRlIHRpbGVzIGFzIG5lZWRlZCwgZXhwYW5kaW5nIGEgZGlydHkgcmVj
dCB0byBjb250YWluIGFsbAogICAgIC8vIHRoZSBkaXJ0eSByZWdpb25zIGN1cnJlbnRseSBiZWlu
ZyBkcmF3bi4KICAgICBJbnRSZWN0IGRpcnR5TGF5ZXJSZWN0OwotICAgIGludCBsZWZ0LCB0b3As
IHJpZ2h0LCBib3R0b207Ci0gICAgbV90aWxlci0+Y29udGVudFJlY3RUb1RpbGVJbmRpY2VzKGNv
bnRlbnRSZWN0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOwogICAgIGZvciAoaW50IGogPSB0
b3A7IGogPD0gYm90dG9tOyArK2opIHsKICAgICAgICAgZm9yIChpbnQgaSA9IGxlZnQ7IGkgPD0g
cmlnaHQ7ICsraSkgewogICAgICAgICAgICAgVXBkYXRhYmxlVGlsZSogdGlsZSA9IHRpbGVBdChp
LCBqKTsKQEAgLTM4NCw4ICszNjYsMTEgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnByZXBh
cmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKICAgICAgICAgICAgICAgICB0
aWxlLT5tX2RpcnR5TGF5ZXJSZWN0ID0gbV90aWxlci0+dGlsZUxheWVyUmVjdCh0aWxlKTsKIAog
ICAgICAgICAgICAgaWYgKCF0aWxlLT5tYW5hZ2VkVGV4dHVyZSgpLT5yZXNlcnZlKG1fdGlsZXIt
PnRpbGVTaXplKCksIG1fdGV4dHVyZUZvcm1hdCkpIHsKLSAgICAgICAgICAgICAgICBtX3NraXBz
RHJhdyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgY2xlYW51cFJlc291cmNlcygpOworICAgICAg
ICAgICAgICAgIG1fc2tpcHNJZGxlUGFpbnQgPSB0cnVlOworICAgICAgICAgICAgICAgIGlmICgh
aWRsZSkgeworICAgICAgICAgICAgICAgICAgICBtX3NraXBzRHJhdyA9IHRydWU7CisgICAgICAg
ICAgICAgICAgICAgIGNsZWFudXBSZXNvdXJjZXMoKTsKKyAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCkBAIC0zOTMsMjIgKzM3OCwyMiBA
QCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3Qm
IGNvbnRlbnRSZWN0KQogICAgICAgICB9CiAgICAgfQogCi0gICAgLy8gRHVlIHRvIGJvcmRlcnMs
IHdoZW4gdGhlIHBhaW50IHJlY3QgaXMgZXh0ZW5kZWQgdG8gdGlsZSBib3VuZGFyaWVzLCBpdAot
ICAgIC8vIG1heSBlbmQgdXAgb3ZlcmxhcHBpbmcgbW9yZSB0aWxlcyB0aGFuIHRoZSBvcmlnaW5h
bCBjb250ZW50IHJlY3QuIFJlY29yZAotICAgIC8vIHRoYXQgb3JpZ2luYWwgcmVjdCBzbyB3ZSBk
b24ndCB1cGxvYWQgbW9yZSB0aWxlcyB0aGFuIG5lY2Vzc2FyeS4KLSAgICBtX3JlcXVlc3RlZFVw
ZGF0ZVJlY3QgPSBjb250ZW50UmVjdDsKLQogICAgIG1fcGFpbnRSZWN0ID0gbV90aWxlci0+bGF5
ZXJSZWN0VG9Db250ZW50UmVjdChkaXJ0eUxheWVyUmVjdCk7CiAgICAgaWYgKGRpcnR5TGF5ZXJS
ZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgLy8gRHVlIHRvIGJvcmRlcnMs
IHdoZW4gdGhlIHBhaW50IHJlY3QgaXMgZXh0ZW5kZWQgdG8gdGlsZSBib3VuZGFyaWVzLCBpdAor
ICAgIC8vIG1heSBlbmQgdXAgb3ZlcmxhcHBpbmcgbW9yZSB0aWxlcyB0aGFuIHRoZSBvcmlnaW5h
bCBjb250ZW50IHJlY3QuIFJlY29yZAorICAgIC8vIHRoZSBvcmlnaW5hbCB0aWxlcyBzbyB3ZSBk
b24ndCB1cGxvYWQgbW9yZSB0aWxlcyB0aGFuIG5lY2Vzc2FyeS4KKyAgICBpZiAoIW1fcGFpbnRS
ZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgbV9yZXF1ZXN0ZWRVcGRhdGVUaWxlc1JlY3QgPSBJbnRS
ZWN0KGxlZnQsIHRvcCwgcmlnaHQgLSBsZWZ0ICsgMSwgYm90dG9tIC0gdG9wICsgMSk7CisKICAg
ICAvLyBDYWxsaW5nIHByZXBhcmVUb1VwZGF0ZSgpIGNhbGxzIGludG8gV2ViS2l0IHRvIHBhaW50
LCB3aGljaCBtYXkgaGF2ZSB0aGUgc2lkZQogICAgIC8vIGVmZmVjdCBvZiBkaXNhYmxpbmcgY29t
cG9zaXRpbmcsIHdoaWNoIGNhdXNlcyBvdXIgcmVmZXJlbmNlIHRvIHRoZSB0ZXh0dXJlIHVwZGF0
ZXIgdG8gYmUgZGVsZXRlZC4KICAgICAvLyBIb3dldmVyLCB3ZSBjYW4ndCBmcmVlIHRoZSBtZW1v
cnkgYmFja2luZyB0aGUgR3JhcGhpY3NDb250ZXh0IHVudGlsIHRoZSBwYWludCBmaW5pc2hlcywK
ICAgICAvLyBzbyB3ZSBncmFiIGEgbG9jYWwgcmVmZXJlbmNlIGhlcmUgdG8gaG9sZCB0aGUgdXBk
YXRlciBhbGl2ZSB1bnRpbCB0aGUgcGFpbnQgY29tcGxldGVzLgogICAgIFJlZlB0cjxMYXllclRl
eHR1cmVVcGRhdGVyPiBwcm90ZWN0b3IodGV4dHVyZVVwZGF0ZXIoKSk7CiAgICAgdGV4dHVyZVVw
ZGF0ZXIoKS0+cHJlcGFyZVRvVXBkYXRlKG1fcGFpbnRSZWN0LCBtX3RpbGVyLT50aWxlU2l6ZSgp
LCBtX3RpbGVyLT5oYXNCb3JkZXJUZXhlbHMoKSwgY29udGVudHNTY2FsZSgpKTsKLSAgICBtX3Rp
bGVyLT5jb250ZW50UmVjdFRvVGlsZUluZGljZXMobV9yZXF1ZXN0ZWRVcGRhdGVSZWN0LCBsZWZ0
LCB0b3AsIHJpZ2h0LCBib3R0b20pOwogICAgIGZvciAoaW50IGogPSB0b3A7IGogPD0gYm90dG9t
OyArK2opIHsKICAgICAgICAgZm9yIChpbnQgaSA9IGxlZnQ7IGkgPD0gcmlnaHQ7ICsraSkgewog
ICAgICAgICAgICAgVXBkYXRhYmxlVGlsZSogdGlsZSA9IHRpbGVBdChpLCBqKTsKQEAgLTQ0MCw1
ICs0MjUsMTIwIEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGUoY29u
c3QgSW50UmVjdCYgY29udGVudFJlY3QpCiAgICAgfQogfQogCisKK3ZvaWQgVGlsZWRMYXllckNo
cm9taXVtOjpwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCit7Cisg
ICAgaWYgKCFtX3RpbGVyKQorICAgICAgICBjcmVhdGVUaWxlcihpc05vbkNvbXBvc2l0ZWRDb250
ZW50KCkgPyBDQ0xheWVyVGlsaW5nRGF0YTo6Tm9Cb3JkZXJUZXhlbHMgOiBDQ0xheWVyVGlsaW5n
RGF0YTo6SGFzQm9yZGVyVGV4ZWxzKTsKKworICAgIEFTU0VSVChtX3RpbGVyKTsKKworICAgIG1f
c2tpcHNEcmF3ID0gZmFsc2U7CisgICAgbV9za2lwc0lkbGVQYWludCA9IGZhbHNlOworICAgIG1f
cmVxdWVzdGVkVXBkYXRlVGlsZXNSZWN0ID0gSW50UmVjdCgpOworICAgIG1fcGFpbnRSZWN0ID0g
SW50UmVjdCgpOworCisgICAgaWYgKGNvbnRlbnRSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgbV90aWxlci0+Z3Jvd0xheWVyVG9Db250YWluKGNvbnRlbnRSZWN0KTsKKwor
ICAgIGlmICghbV90aWxlci0+bnVtVGlsZXMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50
IGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbTsKKyAgICBtX3RpbGVyLT5jb250ZW50UmVjdFRvVGls
ZUluZGljZXMoY29udGVudFJlY3QsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CisKKyAgICBw
cmVwYXJlVG9VcGRhdGVUaWxlcyhmYWxzZSwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKK30K
Kwordm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVUb1VwZGF0ZUlkbGUoY29uc3QgSW50
UmVjdCYgY29udGVudFJlY3QpCit7CisgICAgLy8gQWJvcnQgaWYgd2UgaGF2ZSBhbHJlYWR5IHBy
ZXBhcmVkIGEgcGFpbnQgb3IgcnVuIG91dCBvZiBtZW1vcnkuCisgICAgaWYgKG1fc2tpcHNJZGxl
UGFpbnQgfHwgIW1fcGFpbnRSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
QVNTRVJUKG1fdGlsZXIpOworCisgICAgSW50UmVjdCBpZGxlUGFpbnRDb250ZW50UmVjdCA9IGlk
bGVQYWludFJlY3QoY29udGVudFJlY3QpOworICAgIG1fdGlsZXItPmdyb3dMYXllclRvQ29udGFp
bihpZGxlUGFpbnRDb250ZW50UmVjdCk7CisKKyAgICBpZiAoIW1fdGlsZXItPm51bVRpbGVzKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIC8vIFByb3RlY3QgYW55IHRleHR1cmVzIGluIHRoZSBw
cmUtcGFpbnQgYXJlYSBzbyB3ZSBkb24ndCBlbmQgdXAganVzdAorICAgIC8vIHJlY2xhaW1pbmcg
dGhlbSBiZWxvdy4KKyAgICBwcm90ZWN0VGlsZVRleHR1cmVzKGlkbGVQYWludENvbnRlbnRSZWN0
KTsKKworICAgIC8vIEV4cGFuZCBvdXR3YXJkcyB1bnRpbCB3ZSBmaW5kIGEgZGlydHkgcm93IG9y
IGNvbHVtbiB0byB1cGRhdGUuCisgICAgaW50IGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbTsKKyAg
ICBtX3RpbGVyLT5jb250ZW50UmVjdFRvVGlsZUluZGljZXMoY29udGVudFJlY3QsIGxlZnQsIHRv
cCwgcmlnaHQsIGJvdHRvbSk7CisgICAgaW50IHByZXBhaW50TGVmdCwgcHJlcGFpbnRUb3AsIHBy
ZXBhaW50UmlnaHQsIHByZXBhaW50Qm90dG9tOworICAgIG1fdGlsZXItPmNvbnRlbnRSZWN0VG9U
aWxlSW5kaWNlcyhpZGxlUGFpbnRDb250ZW50UmVjdCwgcHJlcGFpbnRMZWZ0LCBwcmVwYWludFRv
cCwgcHJlcGFpbnRSaWdodCwgcHJlcGFpbnRCb3R0b20pOworICAgIHdoaWxlICghbV9za2lwc0lk
bGVQYWludCAmJiAobGVmdCA+IHByZXBhaW50TGVmdCB8fCB0b3AgPiBwcmVwYWludFRvcCB8fCBy
aWdodCA8IHByZXBhaW50UmlnaHQgfHwgYm90dG9tIDwgcHJlcGFpbnRCb3R0b20pKSB7CisgICAg
ICAgIGlmIChib3R0b20gPCBwcmVwYWludEJvdHRvbSkgeworICAgICAgICAgICAgKytib3R0b207
CisgICAgICAgICAgICBwcmVwYXJlVG9VcGRhdGVUaWxlcyh0cnVlLCBsZWZ0LCBib3R0b20sIHJp
Z2h0LCBib3R0b20pOworICAgICAgICAgICAgaWYgKCFtX3BhaW50UmVjdC5pc0VtcHR5KCkgfHwg
bV9za2lwc0lkbGVQYWludCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBpZiAodG9wID4gcHJlcGFpbnRUb3ApIHsKKyAgICAgICAgICAgIC0tdG9wOworICAgICAg
ICAgICAgcHJlcGFyZVRvVXBkYXRlVGlsZXModHJ1ZSwgbGVmdCwgdG9wLCByaWdodCwgdG9wKTsK
KyAgICAgICAgICAgIGlmICghbV9wYWludFJlY3QuaXNFbXB0eSgpIHx8IG1fc2tpcHNJZGxlUGFp
bnQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGxlZnQg
PiBwcmVwYWludExlZnQpIHsKKyAgICAgICAgICAgIC0tbGVmdDsKKyAgICAgICAgICAgIHByZXBh
cmVUb1VwZGF0ZVRpbGVzKHRydWUsIGxlZnQsIHRvcCwgbGVmdCwgYm90dG9tKTsKKyAgICAgICAg
ICAgIGlmICghbV9wYWludFJlY3QuaXNFbXB0eSgpIHx8IG1fc2tpcHNJZGxlUGFpbnQpCisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJpZ2h0IDwgcHJlcGFp
bnRSaWdodCkgeworICAgICAgICAgICAgKytyaWdodDsKKyAgICAgICAgICAgIHByZXBhcmVUb1Vw
ZGF0ZVRpbGVzKHRydWUsIHJpZ2h0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworICAgICAgICAgICAg
aWYgKCFtX3BhaW50UmVjdC5pc0VtcHR5KCkgfHwgbV9za2lwc0lkbGVQYWludCkKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKworYm9vbCBUaWxlZExheWVyQ2hy
b21pdW06Om5lZWRzSWRsZVBhaW50KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQoreworICAg
IGlmIChtX3NraXBzSWRsZVBhaW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBBU1NF
UlQobV90aWxlcik7CisKKyAgICBJbnRSZWN0IGlkbGVQYWludENvbnRlbnRSZWN0ID0gaWRsZVBh
aW50UmVjdChjb250ZW50UmVjdCk7CisKKyAgICBpbnQgbGVmdCwgdG9wLCByaWdodCwgYm90dG9t
OworICAgIG1fdGlsZXItPmNvbnRlbnRSZWN0VG9UaWxlSW5kaWNlcyhpZGxlUGFpbnRDb250ZW50
UmVjdCwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKKyAgICBmb3IgKGludCBqID0gdG9wOyBq
IDw9IGJvdHRvbTsgKytqKSB7CisgICAgICAgIGZvciAoaW50IGkgPSBsZWZ0OyBpIDw9IHJpZ2h0
OyArK2kpIHsKKyAgICAgICAgICAgIGlmIChtX3JlcXVlc3RlZFVwZGF0ZVRpbGVzUmVjdC5jb250
YWlucyhJbnRQb2ludChpLCBqKSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0gdGlsZUF0KGksIGopOworICAgICAgICAgICAgaWYg
KCF0aWxlIHx8ICF0aWxlLT5tYW5hZ2VkVGV4dHVyZSgpLT5pc1ZhbGlkKG1fdGlsZXItPnRpbGVT
aXplKCksIG1fdGV4dHVyZUZvcm1hdCkgfHwgdGlsZS0+aXNEaXJ0eSgpKQorICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30K
KworSW50UmVjdCBUaWxlZExheWVyQ2hyb21pdW06OmlkbGVQYWludFJlY3QoY29uc3QgSW50UmVj
dCYgdmlzaWJsZUNvbnRlbnRSZWN0KQoreworICAgIEFTU0VSVChtX3RpbGVyKTsKKyAgICBJbnRS
ZWN0IHByZXBhaW50UmVjdCA9IHZpc2libGVDb250ZW50UmVjdDsKKyAgICAvLyBGSVhNRTogVGhp
cyBjYW4gYmUgbWFkZSBhIGxvdCBsYXJnZXIgaWYgd2UgY2FuOgorICAgIC8vIC0gcmVzZXJ2ZSBt
ZW1vcnkgYXQgYSBsb3dlciBwcmlvcml0eSB0aGFuIGZvciB2aXNpYmxlIGNvbnRlbnQKKyAgICAv
LyAtIG9ubHkgcmVzZXJ2ZSBpZGxlIHBhaW50IHRpbGVzIHVwIHRvIGEgbWVtb3J5IHJlY2xhaW0g
dGhyZXNob2xkIGFuZAorICAgIC8vIC0gaW5zdXJlIHdlIHBsYXkgbmljZWx5IHdpdGggb3RoZXIg
bGF5ZXJzCisgICAgcHJlcGFpbnRSZWN0LmluZmxhdGVYKG1fdGlsZXItPnRpbGVTaXplKCkud2lk
dGgoKSk7CisgICAgcHJlcGFpbnRSZWN0LmluZmxhdGVZKG1fdGlsZXItPnRpbGVTaXplKCkuaGVp
Z2h0KCkpOworICAgIHByZXBhaW50UmVjdC5pbnRlcnNlY3QoSW50UmVjdChJbnRQb2ludDo6emVy
bygpLCBjb250ZW50Qm91bmRzKCkpKTsKKyAgICByZXR1cm4gcHJlcGFpbnRSZWN0OworfQorCiB9
CiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVt
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVy
Q2hyb21pdW0uaAppbmRleCAyOGU3ZDFkMGM1Njk2ODAwZjNkNjIxMjQwOGRkOGQxOGJjZWRiZWMy
Li43NGViZmVjZWU2ZWM3YTFiOTQzOWY3ODZlNzYxNDQ1ZGNjNTk3ZmU0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21p
dW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxl
ZExheWVyQ2hyb21pdW0uaApAQCAtNzUsOSArNzUsMTYgQEAgcHJvdGVjdGVkOgogCiAgICAgLy8g
U2V0IGludmFsaWRhdGlvbnMgdG8gYmUgcG90ZW50aWFsbHkgcmVwYWludGVkIGR1cmluZyB1cGRh
dGUoKS4KICAgICB2b2lkIGludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0
KTsKKwogICAgIC8vIFByZXBhcmUgZGF0YSBuZWVkZWQgdG8gdXBkYXRlIHRleHR1cmVzIHRoYXQg
aW50ZXJzZWN0IHdpdGggY29udGVudFJlY3QuCiAgICAgdm9pZCBwcmVwYXJlVG9VcGRhdGUoY29u
c3QgSW50UmVjdCYgY29udGVudFJlY3QpOwogCisgICAgLy8gU2FtZSBhcyBhYm92ZSwgYnV0IHRo
aXMgd2lsbCB0cnkgdG8gcGFpbnQgYWRkaXRpb25hbCBzdXJyb3VuZGluZyBjb250ZW50IGlmIGlk
bGUuCisgICAgdm9pZCBwcmVwYXJlVG9VcGRhdGVJZGxlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRS
ZWN0KTsKKworICAgIC8vIEFmdGVyIHByZXBhcmluZyBhbiB1cGRhdGUsIHJldHVybnMgdHJ1ZSBp
ZiBtb3JlIHByZS1wYWludGluZyBpcyBuZWVkZWQuCisgICAgYm9vbCBuZWVkc0lkbGVQYWludChj
b25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCk7CisKICAgICB2aXJ0dWFsIHZvaWQgcHJvdGVjdFZp
c2libGVUaWxlVGV4dHVyZXMoKTsKIAogICAgIHZpcnR1YWwgVGV4dHVyZU1hbmFnZXIqIHRleHR1
cmVNYW5hZ2VyKCkgY29uc3Q7CkBAIC05MCwxNyArOTcsMjIgQEAgcHJpdmF0ZToKICAgICB2b2lk
IGNyZWF0ZVRpbGVySWZOZWVkZWQoKTsKICAgICB2b2lkIHNldFRpbGluZ09wdGlvbihUaWxpbmdP
cHRpb24pOwogCisgICAgdm9pZCBwcmVwYXJlVG9VcGRhdGVUaWxlcyhib29sIGlkbGUsIGludCBs
ZWZ0LCBpbnQgdG9wLCBpbnQgcmlnaHQsIGludCBib3R0b20pOworICAgIEludFJlY3QgaWRsZVBh
aW50UmVjdChjb25zdCBJbnRSZWN0JiB2aXNpYmxlQ29udGVudFJlY3QpOworCiAgICAgVXBkYXRh
YmxlVGlsZSogdGlsZUF0KGludCwgaW50KSBjb25zdDsKICAgICBVcGRhdGFibGVUaWxlKiBjcmVh
dGVUaWxlKGludCwgaW50KTsKIAogICAgIC8vIFRlbXBvcmFyeSBzdGF0ZSBoZWxkIGJldHdlZW4g
cHJlcGFyZVRvVXBkYXRlKCkgYW5kIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoKS4KLSAgICBJ
bnRSZWN0IG1fcmVxdWVzdGVkVXBkYXRlUmVjdDsKKyAgICBJbnRSZWN0IG1fcmVxdWVzdGVkVXBk
YXRlVGlsZXNSZWN0OworCiAgICAgLy8gU3RhdGUgaGVsZCBiZXR3ZWVuIHByZXBhcmVUb1VwZGF0
ZSgpIGFuZCBwdXNoUHJvcGVydGllc1RvKCkuIFRoaXMgcmVwcmVzZW50cyB0aGUgYXJlYQogICAg
IC8vIG9mIHRoZSBsYXllciB0aGF0IGlzIGFjdHVhbGx5IHJlLXBhaW50ZWQgYnkgV2ViS2l0Lgog
ICAgIEludFJlY3QgbV9wYWludFJlY3Q7CiAKICAgICBHQzNEZW51bSBtX3RleHR1cmVGb3JtYXQ7
CiAgICAgYm9vbCBtX3NraXBzRHJhdzsKKyAgICBib29sIG1fc2tpcHNJZGxlUGFpbnQ7CiAgICAg
TGF5ZXJUZXh0dXJlVXBkYXRlcjo6T3JpZW50YXRpb24gbV90ZXh0dXJlT3JpZW50YXRpb247CiAg
ICAgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0IG1fc2FtcGxlZFRleGVs
Rm9ybWF0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAppbmRleCAyN2Q5NTZhN2M3
YWZiZDA5NWRiOTQ1YjkzNGExNjZlZmE1NWYzNzRmLi5hYjI3YjIyZTkxYjQ3ZDVjOTNlYWMxYzc2
MjUyOGUxM2FhZmM3MTQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTMx
NCw3ICszMTQsNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6Y29tcG9zaXRlKCkKICAgICBzdGF0
aWNfY2FzdDxDQ1NpbmdsZVRocmVhZFByb3h5Kj4obV9wcm94eS5nZXQoKSktPmNvbXBvc2l0ZUlt
bWVkaWF0ZWx5KCk7CiB9CiAKLXZvaWQgQ0NMYXllclRyZWVIb3N0Ojp1cGRhdGVMYXllcnMoKQor
dm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnVwZGF0ZUxheWVycyhib29sIHRyaWdnZXJJZGxlUGFpbnRz
KQogewogICAgIGlmICghcm9vdExheWVyKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTMyMiwxMCAr
MzIyLDEwIEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0Ojp1cGRhdGVMYXllcnMoKQogICAgIGlmICh2
aWV3cG9ydFNpemUoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHVwZGF0ZUxh
eWVycyhyb290TGF5ZXIoKSk7CisgICAgdXBkYXRlTGF5ZXJzKHRyaWdnZXJJZGxlUGFpbnRzLCBy
b290TGF5ZXIoKSk7CiB9CiAKLXZvaWQgQ0NMYXllclRyZWVIb3N0Ojp1cGRhdGVMYXllcnMoTGF5
ZXJDaHJvbWl1bSogcm9vdExheWVyKQordm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnVwZGF0ZUxheWVy
cyhib29sIHRyaWdnZXJJZGxlUGFpbnRzLCBMYXllckNocm9taXVtKiByb290TGF5ZXIpCiB7CiAg
ICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdDo6dXBkYXRlTGF5ZXJzIiwgdGhpcywgMCk7
CiAKQEAgLTM1MCwxMCArMzUwLDI0IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0Ojp1cGRhdGVMYXll
cnMoTGF5ZXJDaHJvbWl1bSogcm9vdExheWVyKQogICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21t
b246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShyb290TGF5ZXIsIHJvb3RM
YXllciwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBtX3VwZGF0ZUxpc3QsIHJvb3RS
ZW5kZXJTdXJmYWNlLT5sYXllckxpc3QoKSwgbGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLm1h
eFRleHR1cmVTaXplKTsKICAgICB9CiAKLSAgICBwYWludExheWVyQ29udGVudHMobV91cGRhdGVM
aXN0KTsKKyAgICBwYWludExheWVyQ29udGVudHMobV91cGRhdGVMaXN0LCBQYWludFZpc2libGUp
OworICAgIC8vIFRoZSBzZWNvbmQgKGlkbGUpIHBhaW50IHdpbGwgYmUgYSBuby1vcCBpbiBsYXll
cnMgd2hlcmUgcGFpbnRpbmcgYWxyZWFkeSBvY2N1cmVkIGFib3ZlLgorICAgIGlmICh0cmlnZ2Vy
SWRsZVBhaW50cykKKyAgICAgICAgcGFpbnRMYXllckNvbnRlbnRzKG1fdXBkYXRlTGlzdCwgUGFp
bnRJZGxlKTsKIH0KIAotdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnBhaW50TWFza0FuZFJlcGxpY2FG
b3JSZW5kZXJTdXJmYWNlKExheWVyQ2hyb21pdW0qIHJlbmRlclN1cmZhY2VMYXllcikKKy8vIHN0
YXRpYwordm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnBhaW50Q29udGVudHNJZkRpcnR5KExheWVyQ2hy
b21pdW0qIGxheWVyLCBQYWludFR5cGUgcGFpbnRUeXBlKQoreworICAgIEFTU0VSVChsYXllcik7
CisgICAgQVNTRVJUKFBhaW50VmlzaWJsZSA9PSBwYWludFR5cGUgfHwgUGFpbnRJZGxlID09IHBh
aW50VHlwZSk7CisgICAgaWYgKFBhaW50VmlzaWJsZSA9PSBwYWludFR5cGUpCisgICAgICAgIGxh
eWVyLT5wYWludENvbnRlbnRzSWZEaXJ0eSgpOworICAgIGVsc2UKKyAgICAgICAgbGF5ZXItPmlk
bGVQYWludENvbnRlbnRzSWZEaXJ0eSgpOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6cGFp
bnRNYXNrQW5kUmVwbGljYUZvclJlbmRlclN1cmZhY2UoTGF5ZXJDaHJvbWl1bSogcmVuZGVyU3Vy
ZmFjZUxheWVyLCBQYWludFR5cGUgcGFpbnRUeXBlKQogewogICAgIC8vIE5vdGU6IE1hc2tzIGFu
ZCByZXBsaWNhcyBvbmx5IGV4aXN0IGZvciBsYXllcnMgdGhhdCBvd24gcmVuZGVyIHN1cmZhY2Vz
LiBJZiB3ZSByZWFjaCB0aGlzIHBvaW50CiAgICAgLy8gaW4gY29kZSwgd2UgYWxyZWFkeSBrbm93
IHRoYXQgYXQgbGVhc3Qgc29tZXRoaW5nIHdpbGwgYmUgZHJhd24gaW50byB0aGlzIHJlbmRlciBz
dXJmYWNlLCBzbyB0aGUKQEAgLTM2MiwyNCArMzc2LDI0IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0
OjpwYWludE1hc2tBbmRSZXBsaWNhRm9yUmVuZGVyU3VyZmFjZShMYXllckNocm9taXVtKiByZW5k
ZXJTCiAgICAgaWYgKHJlbmRlclN1cmZhY2VMYXllci0+bWFza0xheWVyKCkpIHsKICAgICAgICAg
cmVuZGVyU3VyZmFjZUxheWVyLT5tYXNrTGF5ZXIoKS0+c2V0TGF5ZXJUcmVlSG9zdCh0aGlzKTsK
ICAgICAgICAgcmVuZGVyU3VyZmFjZUxheWVyLT5tYXNrTGF5ZXIoKS0+c2V0VmlzaWJsZUxheWVy
UmVjdChJbnRSZWN0KEludFBvaW50KCksIHJlbmRlclN1cmZhY2VMYXllci0+Y29udGVudEJvdW5k
cygpKSk7Ci0gICAgICAgIHJlbmRlclN1cmZhY2VMYXllci0+bWFza0xheWVyKCktPnBhaW50Q29u
dGVudHNJZkRpcnR5KCk7CisgICAgICAgIHBhaW50Q29udGVudHNJZkRpcnR5KHJlbmRlclN1cmZh
Y2VMYXllci0+bWFza0xheWVyKCksIHBhaW50VHlwZSk7CiAgICAgfQogCiAgICAgTGF5ZXJDaHJv
bWl1bSogcmVwbGljYUxheWVyID0gcmVuZGVyU3VyZmFjZUxheWVyLT5yZXBsaWNhTGF5ZXIoKTsK
ICAgICBpZiAocmVwbGljYUxheWVyKSB7CiAKICAgICAgICAgcmVwbGljYUxheWVyLT5zZXRMYXll
clRyZWVIb3N0KHRoaXMpOwotICAgICAgICByZXBsaWNhTGF5ZXItPnBhaW50Q29udGVudHNJZkRp
cnR5KCk7CisgICAgICAgIHBhaW50Q29udGVudHNJZkRpcnR5KHJlcGxpY2FMYXllciwgcGFpbnRU
eXBlKTsKIAogICAgICAgICBpZiAocmVwbGljYUxheWVyLT5tYXNrTGF5ZXIoKSkgewogICAgICAg
ICAgICAgcmVwbGljYUxheWVyLT5tYXNrTGF5ZXIoKS0+c2V0TGF5ZXJUcmVlSG9zdCh0aGlzKTsK
ICAgICAgICAgICAgIHJlcGxpY2FMYXllci0+bWFza0xheWVyKCktPnNldFZpc2libGVMYXllclJl
Y3QoSW50UmVjdChJbnRQb2ludCgpLCByZXBsaWNhTGF5ZXItPm1hc2tMYXllcigpLT5jb250ZW50
Qm91bmRzKCkpKTsKLSAgICAgICAgICAgIHJlcGxpY2FMYXllci0+bWFza0xheWVyKCktPnBhaW50
Q29udGVudHNJZkRpcnR5KCk7CisgICAgICAgICAgICBwYWludENvbnRlbnRzSWZEaXJ0eShyZXBs
aWNhTGF5ZXItPm1hc2tMYXllcigpLCBwYWludFR5cGUpOwogICAgICAgICB9CiAgICAgfQogfQog
Ci12b2lkIENDTGF5ZXJUcmVlSG9zdDo6cGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExheWVyTGlz
dCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkKK3ZvaWQgQ0NMYXllclRyZWVIb3N0OjpwYWludExh
eWVyQ29udGVudHMoY29uc3QgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBQYWlu
dFR5cGUgcGFpbnRUeXBlKQogewogICAgIGZvciAoaW50IHN1cmZhY2VJbmRleCA9IHJlbmRlclN1
cmZhY2VMYXllckxpc3Quc2l6ZSgpIC0gMTsgc3VyZmFjZUluZGV4ID49IDAgOyAtLXN1cmZhY2VJ
bmRleCkgewogICAgICAgICBMYXllckNocm9taXVtKiByZW5kZXJTdXJmYWNlTGF5ZXIgPSByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0W3N1cmZhY2VJbmRleF0uZ2V0KCk7CkBAIC0zODgsNyArNDAyLDcg
QEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnBhaW50TGF5ZXJDb250ZW50cyhjb25zdCBMYXllckxp
c3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QKICAgICAgICAgQVNTRVJUKHJlbmRlclN1cmZhY2Ut
PmRyYXdPcGFjaXR5KCkpOwogCiAgICAgICAgIHJlbmRlclN1cmZhY2VMYXllci0+c2V0TGF5ZXJU
cmVlSG9zdCh0aGlzKTsKLSAgICAgICAgcGFpbnRNYXNrQW5kUmVwbGljYUZvclJlbmRlclN1cmZh
Y2UocmVuZGVyU3VyZmFjZUxheWVyKTsKKyAgICAgICAgcGFpbnRNYXNrQW5kUmVwbGljYUZvclJl
bmRlclN1cmZhY2UocmVuZGVyU3VyZmFjZUxheWVyLCBwYWludFR5cGUpOwogCiAgICAgICAgIGNv
bnN0IExheWVyTGlzdCYgbGF5ZXJMaXN0ID0gcmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCk7CiAg
ICAgICAgIGZvciAodW5zaWduZWQgbGF5ZXJJbmRleCA9IDA7IGxheWVySW5kZXggPCBsYXllckxp
c3Quc2l6ZSgpOyArK2xheWVySW5kZXgpIHsKQEAgLTQwMSwxMCArNDE1LDkgQEAgdm9pZCBDQ0xh
eWVyVHJlZUhvc3Q6OnBhaW50TGF5ZXJDb250ZW50cyhjb25zdCBMYXllckxpc3QmIHJlbmRlclN1
cmZhY2VMYXllckxpc3QKIAogICAgICAgICAgICAgbGF5ZXItPnNldExheWVyVHJlZUhvc3QodGhp
cyk7CiAKLSAgICAgICAgICAgIEFTU0VSVChsYXllci0+b3BhY2l0eSgpKTsKICAgICAgICAgICAg
IEFTU0VSVCghbGF5ZXItPmJvdW5kcygpLmlzRW1wdHkoKSk7CiAKLSAgICAgICAgICAgIGxheWVy
LT5wYWludENvbnRlbnRzSWZEaXJ0eSgpOworICAgICAgICAgICAgcGFpbnRDb250ZW50c0lmRGly
dHkobGF5ZXIsIHBhaW50VHlwZSk7CiAgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdC5oCmluZGV4IGFhYWQxNDIyOWQzNTEwZWUxOTEwMjFjNzY0Yzc1YjRmYjQ3M2Fi
NTUuLmFjM2UzZmVjOTNhZjk1ZWZmODAwN2IxNjYxMWMwNDg3NzMwMDkxZTQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdC5oCkBAIC0xODYsNyArMTg2LDcgQEAgcHVibGljOgogCiAgICAgdm9p
ZCBzZXRIYXZlV2hlZWxFdmVudEhhbmRsZXJzKGJvb2wpOwogCi0gICAgdm9pZCB1cGRhdGVMYXll
cnMoKTsKKyAgICB2b2lkIHVwZGF0ZUxheWVycyhib29sIHRyaWdnZXJJZGxlUGFpbnRzKTsKIAog
ICAgIHZvaWQgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCosIEND
VGV4dHVyZVVwZGF0ZXImKTsKICAgICB2b2lkIGFwcGx5U2Nyb2xsQW5kU2NhbGUoY29uc3QgQ0NT
Y3JvbGxBbmRTY2FsZVNldCYpOwpAQCAtMjAwLDEwICsyMDAsMTIgQEAgcHJvdGVjdGVkOgogcHJp
dmF0ZToKICAgICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBMYXllckxp
c3Q7CiAKLSAgICB2b2lkIHBhaW50TGF5ZXJDb250ZW50cyhjb25zdCBMYXllckxpc3QmKTsKLSAg
ICB2b2lkIHBhaW50TWFza0FuZFJlcGxpY2FGb3JSZW5kZXJTdXJmYWNlKExheWVyQ2hyb21pdW0q
KTsKKyAgICBlbnVtIFBhaW50VHlwZSB7IFBhaW50VmlzaWJsZSwgUGFpbnRJZGxlIH07CisgICAg
c3RhdGljIHZvaWQgcGFpbnRDb250ZW50c0lmRGlydHkoTGF5ZXJDaHJvbWl1bSosIFBhaW50VHlw
ZSk7CisgICAgdm9pZCBwYWludExheWVyQ29udGVudHMoY29uc3QgTGF5ZXJMaXN0JiwgUGFpbnRU
eXBlKTsKKyAgICB2b2lkIHBhaW50TWFza0FuZFJlcGxpY2FGb3JSZW5kZXJTdXJmYWNlKExheWVy
Q2hyb21pdW0qLCBQYWludFR5cGUpOwogCi0gICAgdm9pZCB1cGRhdGVMYXllcnMoTGF5ZXJDaHJv
bWl1bSopOworICAgIHZvaWQgdXBkYXRlTGF5ZXJzKGJvb2wgdHJpZ2dlcklkbGVQYWludHMsIExh
eWVyQ2hyb21pdW0qKTsKICAgICB2b2lkIGNsZWFyUGVuZGluZ1VwZGF0ZSgpOwogCiAgICAgaW50
IG1fY29tcG9zaXRvcklkZW50aWZpZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJv
eHkuY3BwCmluZGV4IDcyYmVjMmE3MTY2NGFmNDNjZDY0ZDAxNGQyOGI4NDI2NTA5NWIyMDMuLjk4
ZGRjYzJmMWQyYTE1YTNhYzk5N2NmODc4YzQwNjY1ZTVkOGY5Y2MgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJv
eHkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwCkBAIC03NCw3ICs3NCw3IEBAIGJvb2wgQ0NTaW5nbGVU
aHJlYWRQcm94eTo6Y29tcG9zaXRlQW5kUmVhZGJhY2sodm9pZCAqcGl4ZWxzLCBjb25zdCBJbnRS
ZWN0JiByZWN0CiAgICAgaWYgKCFyZWNyZWF0ZUNvbnRleHRJZk5lZWRlZCgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBjb21taXRJZk5lZWRlZCgpOworICAgIGNvbW1pdElmTmVlZGVk
KGZhbHNlKTsKIAogICAgIGlmICghZG9Db21wb3NpdGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwpAQCAtMjE0LDcgKzIxNCw3IEBAIHZvaWQgQ0NTaW5nbGVUaHJlYWRQcm94eTo6Y29tcG9zaXRl
SW1tZWRpYXRlbHkoKQogICAgIGlmICghcmVjcmVhdGVDb250ZXh0SWZOZWVkZWQoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgY29tbWl0SWZOZWVkZWQoKTsKKyAgICBjb21taXRJZk5lZWRlZCh0
cnVlKTsKIAogICAgIGlmIChkb0NvbXBvc2l0ZSgpKQogICAgICAgICBtX2xheWVyVHJlZUhvc3RJ
bXBsLT5zd2FwQnVmZmVycygpOwpAQCAtMjY4LDExICsyNjgsMTEgQEAgYm9vbCBDQ1NpbmdsZVRo
cmVhZFByb3h5OjpyZWNyZWF0ZUNvbnRleHRJZk5lZWRlZCgpCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi12b2lkIENDU2luZ2xlVGhyZWFkUHJveHk6OmNvbW1pdElmTmVlZGVkKCkKK3ZvaWQgQ0NT
aW5nbGVUaHJlYWRQcm94eTo6Y29tbWl0SWZOZWVkZWQoYm9vbCB0cmlnZ2VySWRsZVBhaW50cykK
IHsKICAgICBBU1NFUlQoQ0NQcm94eTo6aXNNYWluVGhyZWFkKCkpOwogCi0gICAgbV9sYXllclRy
ZWVIb3N0LT51cGRhdGVMYXllcnMoKTsKKyAgICBtX2xheWVyVHJlZUhvc3QtPnVwZGF0ZUxheWVy
cyh0cmlnZ2VySWRsZVBhaW50cyk7CiAKICAgICBkb0NvbW1pdCgpOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJl
YWRQcm94eS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NTaW5nbGVUaHJlYWRQcm94eS5oCmluZGV4IDBkNWE0YTJkOGE1MTZiMWQ3YmNmOTkxYTk5ZTFj
Nzg3ODk5NDNlYzUuLjk0ZGY4ZDBjNmY0YWMxYzZjMWUzMGMxNDIzOTU0ODc0ZTc5OWZmMTMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
U2luZ2xlVGhyZWFkUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmgKQEAgLTY2LDcgKzY2LDcgQEAgcHVi
bGljOgogcHJpdmF0ZToKICAgICBleHBsaWNpdCBDQ1NpbmdsZVRocmVhZFByb3h5KENDTGF5ZXJU
cmVlSG9zdCopOwogICAgIGJvb2wgcmVjcmVhdGVDb250ZXh0SWZOZWVkZWQoKTsKLSAgICB2b2lk
IGNvbW1pdElmTmVlZGVkKCk7CisgICAgdm9pZCBjb21taXRJZk5lZWRlZChib29sIHRyaWdnZXJJ
ZGxlUGFpbnRzKTsKICAgICB2b2lkIGRvQ29tbWl0KCk7CiAgICAgYm9vbCBkb0NvbXBvc2l0ZSgp
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1RocmVhZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCmluZGV4IDhlNzc0MjVlNDQwYTRlZGNmMjlm
MjY1YWMzZTllZWZkYmUyMTVkODcuLmIyNjY5OWJhYTU3OGRlYTQyYjkyNWE1ZDBiMWZiODQ0MDM2
OGY3OTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCkBAIC0zNzMsNyArMzczLDcgQEAg
dm9pZCBDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lQW5kQ29tbWl0KGludCBzZXF1ZW5jZU51bWJl
ciwgZG91YmxlIGZyYW1lQmVnaW5UaW0KICAgICAvLyB1cGRhdGVMYXllcnMuCiAgICAgbV9jb21t
aXRSZXF1ZXN0ZWQgPSBmYWxzZTsKIAotICAgIG1fbGF5ZXJUcmVlSG9zdC0+dXBkYXRlTGF5ZXJz
KCk7CisgICAgbV9sYXllclRyZWVIb3N0LT51cGRhdGVMYXllcnModHJ1ZSk7CiAKICAgICAvLyBC
ZWZvcmUgYXBwbHlpbmcgc2Nyb2xscyBhbmQgY2FsbGluZyBhbmltYXRlLCB3ZSBzZXQgbV9hbmlt
YXRlUmVxdWVzdGVkIHRvIGZhbHNlLgogICAgIC8vIElmIGl0IGlzIHRydWUgbm93LCBpdCBtZWFu
cyBzZXROZWVkQW5pbWF0ZSB3YXMgY2FsbGVkIGFnYWluLiBDYWxsIHNldE5lZWRzQ29tbWl0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRl
c3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0
LmNwcAppbmRleCAzNmZkN2RiZDA3YmRjN2NmMWM4NjFmZDgyYWViYzJiMDg0YTAzYTMzLi5hNjY3
ZWRjMDY0NWQ1OWFhODg5OTNmNmEzNjcwZDc3Mzg4MjY5MTYyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKQEAgLTk0OCw3
ICs5NDgsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q29udGVudExheWVyQ2hy
b21pdW1XaXRoVXBkYXRlVHJhY2tpbmc+IGNyZWF0ZShDQ0xheWVyRGVsZWdhdGUgKmRlbGVnYXRl
KSB7IHJldHVybiBhZG9wdFJlZihuZXcgQ29udGVudExheWVyQ2hyb21pdW1XaXRoVXBkYXRlVHJh
Y2tpbmcoZGVsZWdhdGUpKTsgfQogCiAgICAgaW50IHBhaW50Q29udGVudHNDb3VudCgpIHsgcmV0
dXJuIG1fcGFpbnRDb250ZW50c0NvdW50OyB9Ci0gICAgdm9pZCByZXNldFBhaW50Q29udGVudHND
b3VudCgpIHsgbV9wYWludENvbnRlbnRzQ291bnQgPSAwOyB9CisgICAgaW50IGlkbGVQYWludENv
bnRlbnRzQ291bnQoKSB7IHJldHVybiBtX2lkbGVQYWludENvbnRlbnRzQ291bnQ7IH0KKyAgICB2
b2lkIHJlc2V0UGFpbnRDb250ZW50c0NvdW50KCkgeyBtX3BhaW50Q29udGVudHNDb3VudCA9IDA7
IG1faWRsZVBhaW50Q29udGVudHNDb3VudCA9IDA7fQogCiAgICAgaW50IHVwZGF0ZUNvdW50KCkg
eyByZXR1cm4gbV91cGRhdGVDb3VudDsgfQogICAgIHZvaWQgcmVzZXRVcGRhdGVDb3VudCgpIHsg
bV91cGRhdGVDb3VudCA9IDA7IH0KQEAgLTk1OSw2ICs5NjAsMTIgQEAgcHVibGljOgogICAgICAg
ICBtX3BhaW50Q29udGVudHNDb3VudCsrOwogICAgIH0KIAorICAgIHZpcnR1YWwgdm9pZCBpZGxl
UGFpbnRDb250ZW50c0lmRGlydHkoKQorICAgIHsKKyAgICAgICAgQ29udGVudExheWVyQ2hyb21p
dW06OmlkbGVQYWludENvbnRlbnRzSWZEaXJ0eSgpOworICAgICAgICBtX2lkbGVQYWludENvbnRl
bnRzQ291bnQrKzsKKyAgICB9CisKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29tcG9zaXRvclJl
c291cmNlcyhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgQ0NUZXh0dXJlVXBkYXRlciYgdXBk
YXRlcikKICAgICB7CiAgICAgICAgIENvbnRlbnRMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3Np
dG9yUmVzb3VyY2VzKGNvbnRleHQsIHVwZGF0ZXIpOwpAQCAtOTY5LDEyICs5NzYsMTQgQEAgcHJp
dmF0ZToKICAgICBleHBsaWNpdCBDb250ZW50TGF5ZXJDaHJvbWl1bVdpdGhVcGRhdGVUcmFja2lu
ZyhDQ0xheWVyRGVsZWdhdGUgKmRlbGVnYXRlKQogICAgICAgICA6IENvbnRlbnRMYXllckNocm9t
aXVtKGRlbGVnYXRlKQogICAgICAgICAsIG1fcGFpbnRDb250ZW50c0NvdW50KDApCisgICAgICAg
ICwgbV9pZGxlUGFpbnRDb250ZW50c0NvdW50KDApCiAgICAgICAgICwgbV91cGRhdGVDb3VudCgw
KQogICAgIHsKICAgICAgICAgc2V0Qm91bmRzKEludFNpemUoMTAsIDEwKSk7CiAgICAgfQogCiAg
ICAgaW50IG1fcGFpbnRDb250ZW50c0NvdW50OworICAgIGludCBtX2lkbGVQYWludENvbnRlbnRz
Q291bnQ7CiAgICAgaW50IG1fdXBkYXRlQ291bnQ7CiB9OwogCkBAIC0xMDA1LDYgKzEwMTQsOSBA
QCBwdWJsaWM6CiAgICAgICAgIC8vIHBhaW50Q29udGVudHNJZkRpcnR5KCkgc2hvdWxkIGhhdmUg
YmVlbiBjYWxsZWQgb25jZS4KICAgICAgICAgRVhQRUNUX0VRKDEsIG1fdXBkYXRlQ2hlY2tMYXll
ci0+cGFpbnRDb250ZW50c0NvdW50KCkpOwogCisgICAgICAgIC8vIGlkbGVQYWludENvbnRlbnRz
SWZEaXJ0eSgpIHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkIG9uY2UKKyAgICAgICAgRVhQRUNUX0VR
KDEsIG1fdXBkYXRlQ2hlY2tMYXllci0+aWRsZVBhaW50Q29udGVudHNDb3VudCgpKTsKKwogICAg
ICAgICAvLyB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKCkgc2hvdWxkIGhhdmUgYmVlbiBjYWxs
ZWQgdGhlIHNhbWUKICAgICAgICAgLy8gYW1vdXQgb2YgdGltZXMgYXMgcGFpbnRDb250ZW50c0lm
RGlydHkoKS4KICAgICAgICAgRVhQRUNUX0VRKG1fdXBkYXRlQ2hlY2tMYXllci0+cGFpbnRDb250
ZW50c0NvdW50KCksCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1Rp
bGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9U
aWxlZExheWVyQ2hyb21pdW1UZXN0LmNwcAppbmRleCA2M2FhNDU2YWQ4ZDhjY2IzZmUwNGZhZmMx
NjIwYmYwZjI0ZTY3ZjQzLi4yMjllNDViZWMzYjJhMDdiMzBiMjgyMDQ4YzM5NzY3YmQwYjZkYmUy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RpbGVkTGF5ZXJDaHJv
bWl1bVRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsZWRMYXll
ckNocm9taXVtVGVzdC5jcHAKQEAgLTk4LDYgKzk4LDE2IEBAIHB1YmxpYzoKICAgICAgICAgVGls
ZWRMYXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGUocmVjdCk7CiAgICAgfQogCisgICAgdm9p
ZCBwcmVwYXJlVG9VcGRhdGVJZGxlKGNvbnN0IEludFJlY3QmIHJlY3QpCisgICAgeworICAgICAg
ICBUaWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVUb1VwZGF0ZUlkbGUocmVjdCk7CisgICAgfQor
CisgICAgYm9vbCBuZWVkc0lkbGVQYWludChjb25zdCBJbnRSZWN0JiByZWN0KQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIFRpbGVkTGF5ZXJDaHJvbWl1bTo6bmVlZHNJZGxlUGFpbnQocmVjdCk7Cisg
ICAgfQorCiAgICAgdmlydHVhbCBUZXh0dXJlTWFuYWdlciogdGV4dHVyZU1hbmFnZXIoKSBjb25z
dCB7IHJldHVybiBtX3RleHR1cmVNYW5hZ2VyOyB9CiAKIHByaXZhdGU6CkBAIC0xNDYsNSArMTU2
LDEwNyBAQCBURVNUKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hEaXJ0eVRpbGVzKQogICAg
IEVYUEVDVF9GQUxTRShsYXllckltcGwtPmhhc1RpbGVBdCgwLCAxKSk7CiB9CiAKK1RFU1QoVGls
ZWRMYXllckNocm9taXVtVGVzdCwgcHVzaElkbGVQYWludFRpbGVzKQoreworICAgIE93blB0cjxU
ZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQq
MTAyNCoxMDI0LCAyKjEwMjQqMTAyNCwgMTAyNCk7CisgICAgUmVmUHRyPEZha2VUaWxlZExheWVy
Q2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0odGV4
dHVyZU1hbmFnZXIuZ2V0KCkpKTsKKyAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRo
cmVhZDsKKyAgICBSZWZQdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1wbCA9IGFkb3B0
UmVmKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgwKSk7CisKKyAgICBGYWtlVGV4dHVyZUFsbG9j
YXRvciB0ZXh0dXJlQWxsb2NhdG9yOworICAgIENDVGV4dHVyZVVwZGF0ZXIgdXBkYXRlcigmdGV4
dHVyZUFsbG9jYXRvcik7CisKKyAgICAvLyBUaGUgdGlsZSBzaXplIGlzIDEwMHgxMDAuIFNldHVw
IDV4NSB0aWxlcyB3aXRoIG9uZSB2aXNpYmxlIHRpbGUgaW4gdGhlIGNlbnRlci4KKyAgICBJbnRT
aXplIGNvbnRlbnRCb3VuZHMoNTAwLCA1MDApOworICAgIEludFJlY3QgY29udGVudFJlY3QoSW50
UG9pbnQ6Onplcm8oKSwgY29udGVudEJvdW5kcyk7CisgICAgSW50UmVjdCB2aXNpYmxlUmVjdCgy
MDAsIDIwMCwgMTAwLCAxMDApOworCisgICAgLy8gVGhpcyBpbnZhbGlkYXRlcyAyNSB0aWxlcyBh
bmQgdGhlbiBwYWludHMgb25lIHZpc2libGUgdGlsZS4KKyAgICBsYXllci0+c2V0Qm91bmRzKGNv
bnRlbnRCb3VuZHMpOworICAgIGxheWVyLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KHZpc2libGVSZWN0
KTsKKyAgICBsYXllci0+aW52YWxpZGF0ZVJlY3QoY29udGVudFJlY3QpOworICAgIGxheWVyLT5w
cmVwYXJlVG9VcGRhdGUodmlzaWJsZVJlY3QpOworCisgICAgLy8gV2Ugc2hvdWxkIG5lZWQgaWRs
ZS1wYWludGluZyBmb3IgM3gzIHRpbGVzIGluIHRoZSBjZW50ZXIuCisgICAgRVhQRUNUX1RSVUUo
bGF5ZXItPm5lZWRzSWRsZVBhaW50KHZpc2libGVSZWN0KSk7CisKKyAgICBsYXllci0+dXBkYXRl
Q29tcG9zaXRvclJlc291cmNlcygwLCB1cGRhdGVyKTsKKyAgICBsYXllci0+cHVzaFByb3BlcnRp
ZXNUbyhsYXllckltcGwuZ2V0KCkpOworCisgICAgLy8gV2Ugc2hvdWxkIGhhdmUgb25lIHRpbGUg
b24gdGhlIGltcGwgc2lkZS4KKyAgICBFWFBFQ1RfVFJVRShsYXllckltcGwtPmhhc1RpbGVBdCgy
LCAyKSk7CisKKyAgICB0ZXh0dXJlTWFuYWdlci0+dW5wcm90ZWN0QWxsVGV4dHVyZXMoKTsKKwor
ICAgIC8vIEZvciB0aGUgbmV4dCBmb3VyIHVwZGF0ZXMsIHdlIHNob3VsZCBkZXRlY3Qgd2Ugc3Rp
bGwgbmVlZCBpZGxlIHBhaW50aW5nLgorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7
CisgICAgICAgIGxheWVyLT5wcmVwYXJlVG9VcGRhdGUodmlzaWJsZVJlY3QpOworICAgICAgICBF
WFBFQ1RfVFJVRShsYXllci0+bmVlZHNJZGxlUGFpbnQodmlzaWJsZVJlY3QpKTsKKyAgICAgICAg
bGF5ZXItPnByZXBhcmVUb1VwZGF0ZUlkbGUodmlzaWJsZVJlY3QpOworICAgICAgICBsYXllci0+
dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcygwLCB1cGRhdGVyKTsKKyAgICAgICAgbGF5ZXItPnB1
c2hQcm9wZXJ0aWVzVG8obGF5ZXJJbXBsLmdldCgpKTsKKyAgICAgICAgdGV4dHVyZU1hbmFnZXIt
PnVucHJvdGVjdEFsbFRleHR1cmVzKCk7CisgICAgfQorCisgICAgLy8gQWZ0ZXIgZm91ciBwYXNz
ZXMgb2YgaWRsZSBwYWludGluZywgd2Ugc2hvdWxkIGJlIGZpbmlzaGVkIHBhaW50aW5nCisgICAg
RVhQRUNUX0ZBTFNFKGxheWVyLT5uZWVkc0lkbGVQYWludCh2aXNpYmxlUmVjdCkpOworCisgICAg
Ly8gV2Ugc2hvdWxkIGhhdmUgb25lIHRpbGUgc3Vycm91bmRpbmcgdGhlIHZpc2libGUgdGlsZSBv
biBhbGwgc2lkZXMsIGJ1dCBubyBvdGhlciB0aWxlcy4KKyAgICBJbnRSZWN0IGlkbGVQYWludFRp
bGVzKDEsIDEsIDMsIDMpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNTsgaSsrKSB7CisgICAg
ICAgIGZvciAoaW50IGogPSAwOyBqIDwgNTsgaisrKSB7CisgICAgICAgICAgICBpZiAoaWRsZVBh
aW50VGlsZXMuY29udGFpbnMoaSwgaikpCisgICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUobGF5
ZXJJbXBsLT5oYXNUaWxlQXQoaSwgaikpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIEVYUEVDVF9GQUxTRShsYXllckltcGwtPmhhc1RpbGVBdChpLCBqKSk7CisgICAgICAgIH0K
KyAgICB9Cit9CisKKworVEVTVChUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBpZGxlUGFpbnRPdXRP
Zk1lbW9yeSkKK3sKKyAgICAvLyBUaGUgdGlsZSBzaXplIGlzIDEwMHgxMDAuIFNldHVwIDV4NSB0
aWxlcyB3aXRoIG9uZSAxeDEgdmlzaWJsZSB0aWxlIGluIHRoZSBjZW50ZXIuCisgICAgSW50U2l6
ZSBjb250ZW50Qm91bmRzKDMwMCwgMzAwKTsKKyAgICBJbnRSZWN0IGNvbnRlbnRSZWN0KEludFBv
aW50Ojp6ZXJvKCksIGNvbnRlbnRCb3VuZHMpOworICAgIEludFJlY3QgdmlzaWJsZVJlY3QoMTAw
LCAxMDAsIDEwMCwgMTAwKTsKKworICAgIC8vIFdlIGhhdmUgZW5vdWdoIG1lbW9yeSBmb3Igb25s
eSB0aGUgdmlzaWJsZSByZWN0LCBzbyB3ZSB3aWxsIHJ1biBvdXQgb2YgbWVtb3J5IGluIGZpcnN0
IGlkbGUgcGFpbnQuCisgICAgaW50IG1lbW9yeUxpbWl0ID0gNCAqIDEwMCAqIDEwMDsgLy8gMiB0
aWxlcywgNCBieXRlcyBwZXIgcGl4ZWwuCisKKyAgICBPd25QdHI8VGV4dHVyZU1hbmFnZXI+IHRl
eHR1cmVNYW5hZ2VyID0gVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZShtZW1vcnlMaW1pdCwgbWVtb3J5
TGltaXQgLyAyLCAxMDI0KTsKKyAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5
ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5n
ZXQoKSkpOworICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOworICAgIFJl
ZlB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsID0gYWRvcHRSZWYobmV3IEZha2VD
Q1RpbGVkTGF5ZXJJbXBsKDApKTsKKworICAgIEZha2VUZXh0dXJlQWxsb2NhdG9yIHRleHR1cmVB
bGxvY2F0b3I7CisgICAgQ0NUZXh0dXJlVXBkYXRlciB1cGRhdGVyKCZ0ZXh0dXJlQWxsb2NhdG9y
KTsKKworICAgIC8vIFRoaXMgaW52YWxpZGF0ZXMgOSB0aWxlcyBhbmQgdGhlbiBwYWludHMgb25l
IHZpc2libGUgdGlsZS4KKyAgICBsYXllci0+c2V0Qm91bmRzKGNvbnRlbnRCb3VuZHMpOworICAg
IGxheWVyLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KHZpc2libGVSZWN0KTsKKyAgICBsYXllci0+aW52
YWxpZGF0ZVJlY3QoY29udGVudFJlY3QpOworICAgIGxheWVyLT5wcmVwYXJlVG9VcGRhdGUodmlz
aWJsZVJlY3QpOworCisgICAgLy8gV2Ugc2hvdWxkIG5lZWQgaWRsZS1wYWludGluZyBmb3IgM3gz
IHRpbGVzIHN1cm91bmRpbmcgdmlzaWJsZSB0aWxlLgorICAgIEVYUEVDVF9UUlVFKGxheWVyLT5u
ZWVkc0lkbGVQYWludCh2aXNpYmxlUmVjdCkpOworCisgICAgbGF5ZXItPnVwZGF0ZUNvbXBvc2l0
b3JSZXNvdXJjZXMoMCwgdXBkYXRlcik7CisgICAgbGF5ZXItPnB1c2hQcm9wZXJ0aWVzVG8obGF5
ZXJJbXBsLmdldCgpKTsKKworICAgIC8vIFdlIHNob3VsZCBoYXZlIG9uZSB0aWxlIG9uIHRoZSBp
bXBsIHNpZGUuCisgICAgRVhQRUNUX1RSVUUobGF5ZXJJbXBsLT5oYXNUaWxlQXQoMSwgMSkpOwor
CisgICAgdGV4dHVyZU1hbmFnZXItPnVucHJvdGVjdEFsbFRleHR1cmVzKCk7CisgICAgbGF5ZXIt
PnByZXBhcmVUb1VwZGF0ZSh2aXNpYmxlUmVjdCk7CisgICAgbGF5ZXItPnByZXBhcmVUb1VwZGF0
ZUlkbGUodmlzaWJsZVJlY3QpOworCisgICAgLy8gV2Ugc2hvdWxkbid0IHNpZ25hbCB3ZSBuZWVk
IGFub3RoZXIgaWRsZSBwYWludCBhZnRlciB3ZSBydW4gb3V0IG9mIG1lbW9yeS4KKyAgICBFWFBF
Q1RfRkFMU0UobGF5ZXItPm5lZWRzSWRsZVBhaW50KHZpc2libGVSZWN0KSk7CisKKyAgICBsYXll
ci0+dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcygwLCB1cGRhdGVyKTsKKyAgICBsYXllci0+cHVz
aFByb3BlcnRpZXNUbyhsYXllckltcGwuZ2V0KCkpOworfQorCiB9IC8vIG5hbWVzcGFjZQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118436</attachid>
            <date>2011-12-08 11:49:26 -0800</date>
            <delta_ts>2011-12-08 13:19:02 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72686-20111208114925.patch</filename>
            <type>text/plain</type>
            <size>39231</size>
            <attacher name="Eric Penner">epenner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyMjk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWQ0YjMwNGE3NGU0NjQ1
NjRiOTE5YTUxNTdlZTRiOGQ2ZTNjZDk3Mi4uMTc0Nzg2MmY0NmEyNDYxZjU3YTQwY2UzNGQwNzdm
MTFkNThkNWM0NCAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDExLTEyLTA4ICBFcmlj
IFBlbm5lciAgPGVwZW5uZXJAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIE5lZWQg
dG8gcHJlcGFpbnQgdGlsZXMgaW4gVGlsZWRMYXllckNocm9taXVtCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjY4NgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExh
eWVyQ2hyb21pdW06OmlkbGVQYWludENvbnRlbnRzSWZEaXJ0eSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmg6CisgICAgICAgIChXZWJD
b3JlOjpMYXllckNocm9taXVtOjppZGxlUGFpbnRDb250ZW50c0lmRGlydHkpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYW5hZ2VyOjpwcm90ZWN0VGV4dHVyZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6VGlsZWRMYXllckNocm9taXVtKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6Y2xlYW51cFJlc291cmNlcyk6CisgICAg
ICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJj
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRh
dGVUaWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVU
b1VwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVU
b1VwZGF0ZUlkbGUpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjpuZWVk
c0lkbGVQYWludCk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OmlkbGVQ
YWludFJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5
ZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnVw
ZGF0ZUxheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnBhaW50Q29u
dGVudHNJZkRpcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6cGFpbnRN
YXNrQW5kUmVwbGljYUZvclJlbmRlclN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
clRyZWVIb3N0OjpwYWludExheWVyQ29udGVudHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6Y29tcG9zaXRlQW5kUmVhZGJhY2spOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6Y29tcG9zaXRlSW1tZWRpYXRlbHkpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6Y29tbWl0SWZOZWVkZWQpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJv
eHkuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFBy
b3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OmNvbXBvc2l0ZUFuZFJl
YWRiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OnNjaGVkdWxlZEFjdGlv
bkJlZ2luRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6b2J0YWluQmVn
aW5GcmFtZUFuZENvbW1pdFRhc2tGcm9tQ0NUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NU
aHJlYWRQcm94eTo6Y3JlYXRlQmVnaW5GcmFtZUFuZENvbW1pdFRhc2tPbkltcGxUaHJlYWQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZUFuZENvbW1pdCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oOgor
CiAyMDExLTEyLTA3ICBTaGF3biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFtjaHJvbWl1bV0gQ2xlYXJpbmcgcm9vdCBzdXJmYWNlIHNob3VsZCBoYXBwZW4gYWZ0
ZXIgZGFtYWdlIHRyYWNraW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGY4ZGVjMjI5
MGViZjNmZWMzNGVjYzZkZDZmZTZmZDk0YzI5ZGRmZWMuLjBmOTE3ODNjOWVmMmVkYTVmMDdjYjFh
ZWIxZjQ1MmQ2YzhmZDI2MDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MjEgQEAKKzIwMTEtMTItMDggIEVyaWMgUGVubmVyICA8ZXBlbm5lckBnb29nbGUuY29tPgorCisg
ICAgICAgIFtjaHJvbWl1bV0gTmVlZCB0byBwcmVwYWludCB0aWxlcyBpbiBUaWxlZExheWVyQ2hy
b21pdW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcy
Njg2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB0
ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcDoKKyAgICAgICAgKFdURjo6Q29udGVudExheWVy
Q2hyb21pdW1XaXRoVXBkYXRlVHJhY2tpbmc6OmlkbGVQYWludENvbnRlbnRzQ291bnQpOgorICAg
ICAgICAoV1RGOjpDb250ZW50TGF5ZXJDaHJvbWl1bVdpdGhVcGRhdGVUcmFja2luZzo6cmVzZXRQ
YWludENvbnRlbnRzQ291bnQpOgorICAgICAgICAoV1RGOjpDb250ZW50TGF5ZXJDaHJvbWl1bVdp
dGhVcGRhdGVUcmFja2luZzo6aWRsZVBhaW50Q29udGVudHNJZkRpcnR5KToKKyAgICAgICAgKFdU
Rjo6Q29udGVudExheWVyQ2hyb21pdW1XaXRoVXBkYXRlVHJhY2tpbmc6OkNvbnRlbnRMYXllckNo
cm9taXVtV2l0aFVwZGF0ZVRyYWNraW5nKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0
VGVzdE9wYWNpdHlDaGFuZ2U6OmFmdGVyVGVzdCk6CisgICAgICAgICogdGVzdHMvVGlsZWRMYXll
ckNocm9taXVtVGVzdC5jcHA6CisgICAgICAgIChXVEY6OkZha2VUaWxlZExheWVyQ2hyb21pdW06
OnByZXBhcmVUb1VwZGF0ZUlkbGUpOgorICAgICAgICAoV1RGOjpGYWtlVGlsZWRMYXllckNocm9t
aXVtOjpuZWVkc0lkbGVQYWludCk6CisgICAgICAgIChXVEY6OlRFU1QpOgorCiAyMDExLTEyLTA3
ICBBbGV4YW5kcmUgRWxpYXMgIDxhZWxpYXNAZ29vZ2xlLmNvbT4KIAogICAgICAgICBbY2hyb21p
dW1dIFByZXNlcnZlIG9yaWdpbmFsIHBhZ2VTY2FsZSBsaW1pdHMgaW4gV2ViVmlld0ltcGwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRl
bnRMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcAppbmRleCAyYTI0NjZkOTEyOWFlYzM2NDA5
MzIyOWNiOTM1YWY4MmQ1MDcyNGI2Li5jMjg0ZWVhMzFhNDAwZTNlOTI1MzI5NWI1ZjI2MDM0NDlm
OWQ4MGRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCkBAIC0xMDksNiAr
MTA5LDIwIEBAIHZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHNJZkRpcnR5
KCkKICAgICBtX25lZWRzRGlzcGxheSA9IGZhbHNlOwogfQogCit2b2lkIENvbnRlbnRMYXllckNo
cm9taXVtOjppZGxlUGFpbnRDb250ZW50c0lmRGlydHkoKQoreworICAgIGlmICghZHJhd3NDb250
ZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCA9
IHZpc2libGVMYXllclJlY3QoKTsKKyAgICBpZiAobGF5ZXJSZWN0LmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgcHJlcGFyZVRvVXBkYXRlSWRsZShsYXllclJlY3QpOworICAgIGlm
IChuZWVkc0lkbGVQYWludChsYXllclJlY3QpKQorICAgICAgICBzZXROZWVkc0NvbW1pdCgpOwor
fQorCiBib29sIENvbnRlbnRMYXllckNocm9taXVtOjpkcmF3c0NvbnRlbnQoKSBjb25zdAogewog
ICAgIHJldHVybiBtX2RlbGVnYXRlICYmIG1fZGVsZWdhdGUtPmRyYXdzQ29udGVudCgpICYmIFRp
bGVkTGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hy
b21pdW0uaAppbmRleCBiODM0ZTY3NmJkNjM0NDVhYTQ1M2IzNjVlZWUyODAyNDBmMzgwOWMxLi4w
YzU3NGI1ZGZkYzBhNTcxYjgxMWJlMDM5NzY0YWM3NWIxYzJlM2VlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1
bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRl
bnRMYXllckNocm9taXVtLmgKQEAgLTUwLDYgKzUwLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
fkNvbnRlbnRMYXllckNocm9taXVtKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50
c0lmRGlydHkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgaWRsZVBhaW50Q29udGVudHNJZkRpcnR5KCk7
CiAKIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBDb250ZW50TGF5ZXJDaHJvbWl1bShDQ0xheWVy
RGVsZWdhdGUqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAppbmRleCA1ZTA1YzE1N2M3OTVjZTFlMDY0ZGYy
ZGY5NjQ0MDdhZGJmZTU1MGIwLi5lOGM3MmFiNDQ5YTFlM2Y1Nzk3YjgyNDExZWRhOWJiNDEwNDUw
ZTdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCkBAIC0xNjEsNiArMTYxLDcgQEAgcHVibGljOgogICAg
IC8vIFRoZXNlIG1ldGhvZHMgdHlwaWNhbGx5IG5lZWQgdG8gYmUgb3ZlcndyaXR0ZW4gYnkgZGVy
aXZlZCBjbGFzc2VzLgogICAgIHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzSWZEaXJ0eSgpIHsg
fQorICAgIHZpcnR1YWwgdm9pZCBpZGxlUGFpbnRDb250ZW50c0lmRGlydHkoKSB7IH0KICAgICB2
aXJ0dWFsIHZvaWQgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCos
IENDVGV4dHVyZVVwZGF0ZXImKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0SXNNYXNrKGJvb2wp
IHsgfQogICAgIHZpcnR1YWwgdm9pZCB1bnJlc2VydmVDb250ZW50c1RleHR1cmUoKSB7IH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1
cmVNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1RleHR1cmVNYW5hZ2VyLmNwcAppbmRleCBkNjZiMDZhZTNkMjBkYTliZDE1MTMxZjU3MGUzYTY3
MzY1YzYzOGQyLi5lZGQxZjY4MDljNGU5MWUzMDdjM2IyOGYwOGUwN2JkZjgxMTg5MTQ3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJl
TWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vVGV4dHVyZU1hbmFnZXIuY3BwCkBAIC0xNDEsNyArMTQxLDYgQEAgYm9vbCBUZXh0dXJlTWFu
YWdlcjo6aXNQcm90ZWN0ZWQoVGV4dHVyZVRva2VuIHRva2VuKQogdm9pZCBUZXh0dXJlTWFuYWdl
cjo6cHJvdGVjdFRleHR1cmUoVGV4dHVyZVRva2VuIHRva2VuKQogewogICAgIEFTU0VSVChoYXNU
ZXh0dXJlKHRva2VuKSk7Ci0gICAgQVNTRVJUKCFtX3RleHR1cmVzLmdldCh0b2tlbikuaXNQcm90
ZWN0ZWQpOwogICAgIFRleHR1cmVJbmZvIGluZm8gPSBtX3RleHR1cmVzLnRha2UodG9rZW4pOwog
ICAgIGluZm8uaXNQcm90ZWN0ZWQgPSB0cnVlOwogICAgIG1fdGV4dHVyZXMuYWRkKHRva2VuLCBp
bmZvKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCmluZGV4IDVjNTVmNTliZjNlNzM3
MmZlOWVjNTEyZWY2MzYxMTAxYWM1YTA1ZTUuLmUzMThjYjE1N2E0MWVhZTM5YjZkY2MzYjFkZjVm
ZDZmZDY2ZjFjMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcApAQCAtNzIsNiAr
NzIsNyBAQCBUaWxlZExheWVyQ2hyb21pdW06OlRpbGVkTGF5ZXJDaHJvbWl1bShDQ0xheWVyRGVs
ZWdhdGUqIGRlbGVnYXRlKQogICAgIDogTGF5ZXJDaHJvbWl1bShkZWxlZ2F0ZSkKICAgICAsIG1f
dGV4dHVyZUZvcm1hdChHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNKQogICAgICwgbV9z
a2lwc0RyYXcoZmFsc2UpCisgICAgLCBtX3NraXBzSWRsZVBhaW50KGZhbHNlKQogICAgICwgbV90
ZXh0dXJlT3JpZW50YXRpb24oTGF5ZXJUZXh0dXJlVXBkYXRlcjo6SW52YWxpZE9yaWVudGF0aW9u
KQogICAgICwgbV9zYW1wbGVkVGV4ZWxGb3JtYXQoTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxl
ZFRleGVsRm9ybWF0SW52YWxpZCkKICAgICAsIG1fdGlsaW5nT3B0aW9uKEF1dG9UaWxlKQpAQCAt
OTMsNyArOTQsNyBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6Y2xlYW51cFJlc291cmNlcygp
CiAKICAgICBtX3RpbGVyLmNsZWFyKCk7CiAgICAgbV9wYWludFJlY3QgPSBJbnRSZWN0KCk7Ci0g
ICAgbV9yZXF1ZXN0ZWRVcGRhdGVSZWN0ID0gSW50UmVjdCgpOworICAgIG1fcmVxdWVzdGVkVXBk
YXRlVGlsZXNSZWN0ID0gSW50UmVjdCgpOwogfQogCiB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6
dXBkYXRlVGlsZVNpemVBbmRUaWxpbmdPcHRpb24oKQpAQCAtMTc5LDExICsxODAsMTMgQEAgdm9p
ZCBUaWxlZExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhpY3ND
b250ZXh0M0QqLCBDQ1RleHR1cmUKICAgICBBU1NFUlQobV90aWxlcik7CiAKICAgICAvLyBQYWlu
dGluZyBjb3VsZCBjYXVzZSBjb21wb3NpdGluZyB0byBnZXQgdHVybmVkIG9mZiwgd2hpY2ggbWF5
IGNhdXNlIHRoZSB0aWxlciB0byBiZWNvbWUgaW52YWxpZGF0ZWQgbWlkLXVwZGF0ZS4KLSAgICBp
ZiAobV9za2lwc0RyYXcgfHwgbV9yZXF1ZXN0ZWRVcGRhdGVSZWN0LmlzRW1wdHkoKSB8fCAhbV90
aWxlciB8fCAhbV90aWxlci0+bnVtVGlsZXMoKSkKKyAgICBpZiAobV9za2lwc0RyYXcgfHwgbV9y
ZXF1ZXN0ZWRVcGRhdGVUaWxlc1JlY3QuaXNFbXB0eSgpIHx8ICFtX3RpbGVyIHx8ICFtX3RpbGVy
LT5udW1UaWxlcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpbnQgbGVmdCwgdG9wLCByaWdo
dCwgYm90dG9tOwotICAgIG1fdGlsZXItPmNvbnRlbnRSZWN0VG9UaWxlSW5kaWNlcyhtX3JlcXVl
c3RlZFVwZGF0ZVJlY3QsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CisgICAgaW50IGxlZnQg
PSBtX3JlcXVlc3RlZFVwZGF0ZVRpbGVzUmVjdC54KCk7CisgICAgaW50IHRvcCA9IG1fcmVxdWVz
dGVkVXBkYXRlVGlsZXNSZWN0LnkoKTsKKyAgICBpbnQgcmlnaHQgPSBtX3JlcXVlc3RlZFVwZGF0
ZVRpbGVzUmVjdC5tYXhYKCkgLSAxOworICAgIGludCBib3R0b20gPSBtX3JlcXVlc3RlZFVwZGF0
ZVRpbGVzUmVjdC5tYXhZKCkgLSAxOwogICAgIGZvciAoaW50IGogPSB0b3A7IGogPD0gYm90dG9t
OyArK2opIHsKICAgICAgICAgZm9yIChpbnQgaSA9IGxlZnQ7IGkgPD0gcmlnaHQ7ICsraSkgewog
ICAgICAgICAgICAgVXBkYXRhYmxlVGlsZSogdGlsZSA9IHRpbGVBdChpLCBqKTsKQEAgLTM0Miwz
OCArMzQ1LDE3IEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpwcm90ZWN0VGlsZVRleHR1cmVz
KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQogICAgIH0KIH0KIAotdm9pZCBUaWxlZExheWVy
Q2hyb21pdW06OnByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKK3Zv
aWQgVGlsZWRMYXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGVUaWxlcyhib29sIGlkbGUsIGlu
dCBsZWZ0LCBpbnQgdG9wLCBpbnQgcmlnaHQsIGludCBib3R0b20pCiB7Ci0gICAgaWYgKCFtX3Rp
bGVyKQotICAgICAgICBjcmVhdGVUaWxlcihpc05vbkNvbXBvc2l0ZWRDb250ZW50KCkgPyBDQ0xh
eWVyVGlsaW5nRGF0YTo6Tm9Cb3JkZXJUZXhlbHMgOiBDQ0xheWVyVGlsaW5nRGF0YTo6SGFzQm9y
ZGVyVGV4ZWxzKTsKLQotICAgIEFTU0VSVChtX3RpbGVyKTsKLQotICAgIG1fc2tpcHNEcmF3ID0g
ZmFsc2U7Ci0KICAgICAvLyBSZXNldCBtX3VwZGF0ZVJlY3QgZm9yIGFsbCB0aWxlcy4KICAgICBm
b3IgKENDTGF5ZXJUaWxpbmdEYXRhOjpUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbV90
aWxlci0+dGlsZXMoKS5iZWdpbigpOyBpdGVyICE9IG1fdGlsZXItPnRpbGVzKCkuZW5kKCk7ICsr
aXRlcikgewogICAgICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0gc3RhdGljX2Nhc3Q8VXBkYXRh
YmxlVGlsZSo+KGl0ZXItPnNlY29uZC5nZXQoKSk7CiAgICAgICAgIHRpbGUtPm1fdXBkYXRlUmVj
dCA9IEludFJlY3QoKTsKICAgICB9CiAKLSAgICBpZiAoY29udGVudFJlY3QuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIG1fcmVxdWVzdGVkVXBkYXRlUmVjdCA9IEludFJlY3QoKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIG1fdGlsZXItPmdyb3dMYXllclRvQ29udGFpbihjb250ZW50UmVj
dCk7Ci0KLSAgICBpZiAoIW1fdGlsZXItPm51bVRpbGVzKCkpIHsKLSAgICAgICAgbV9yZXF1ZXN0
ZWRVcGRhdGVSZWN0ID0gSW50UmVjdCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAg
Ly8gQ3JlYXRlIHRpbGVzIGFzIG5lZWRlZCwgZXhwYW5kaW5nIGEgZGlydHkgcmVjdCB0byBjb250
YWluIGFsbAogICAgIC8vIHRoZSBkaXJ0eSByZWdpb25zIGN1cnJlbnRseSBiZWluZyBkcmF3bi4K
ICAgICBJbnRSZWN0IGRpcnR5TGF5ZXJSZWN0OwotICAgIGludCBsZWZ0LCB0b3AsIHJpZ2h0LCBi
b3R0b207Ci0gICAgbV90aWxlci0+Y29udGVudFJlY3RUb1RpbGVJbmRpY2VzKGNvbnRlbnRSZWN0
LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOwogICAgIGZvciAoaW50IGogPSB0b3A7IGogPD0g
Ym90dG9tOyArK2opIHsKICAgICAgICAgZm9yIChpbnQgaSA9IGxlZnQ7IGkgPD0gcmlnaHQ7ICsr
aSkgewogICAgICAgICAgICAgVXBkYXRhYmxlVGlsZSogdGlsZSA9IHRpbGVBdChpLCBqKTsKQEAg
LTM4NCw4ICszNjYsMTEgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVUb1VwZGF0
ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKICAgICAgICAgICAgICAgICB0aWxlLT5tX2Rp
cnR5TGF5ZXJSZWN0ID0gbV90aWxlci0+dGlsZUxheWVyUmVjdCh0aWxlKTsKIAogICAgICAgICAg
ICAgaWYgKCF0aWxlLT5tYW5hZ2VkVGV4dHVyZSgpLT5yZXNlcnZlKG1fdGlsZXItPnRpbGVTaXpl
KCksIG1fdGV4dHVyZUZvcm1hdCkpIHsKLSAgICAgICAgICAgICAgICBtX3NraXBzRHJhdyA9IHRy
dWU7Ci0gICAgICAgICAgICAgICAgY2xlYW51cFJlc291cmNlcygpOworICAgICAgICAgICAgICAg
IG1fc2tpcHNJZGxlUGFpbnQgPSB0cnVlOworICAgICAgICAgICAgICAgIGlmICghaWRsZSkgewor
ICAgICAgICAgICAgICAgICAgICBtX3NraXBzRHJhdyA9IHRydWU7CisgICAgICAgICAgICAgICAg
ICAgIGNsZWFudXBSZXNvdXJjZXMoKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCkBAIC0zOTMsMjIgKzM3OCwyMiBAQCB2b2lkIFRp
bGVkTGF5ZXJDaHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRS
ZWN0KQogICAgICAgICB9CiAgICAgfQogCi0gICAgLy8gRHVlIHRvIGJvcmRlcnMsIHdoZW4gdGhl
IHBhaW50IHJlY3QgaXMgZXh0ZW5kZWQgdG8gdGlsZSBib3VuZGFyaWVzLCBpdAotICAgIC8vIG1h
eSBlbmQgdXAgb3ZlcmxhcHBpbmcgbW9yZSB0aWxlcyB0aGFuIHRoZSBvcmlnaW5hbCBjb250ZW50
IHJlY3QuIFJlY29yZAotICAgIC8vIHRoYXQgb3JpZ2luYWwgcmVjdCBzbyB3ZSBkb24ndCB1cGxv
YWQgbW9yZSB0aWxlcyB0aGFuIG5lY2Vzc2FyeS4KLSAgICBtX3JlcXVlc3RlZFVwZGF0ZVJlY3Qg
PSBjb250ZW50UmVjdDsKLQogICAgIG1fcGFpbnRSZWN0ID0gbV90aWxlci0+bGF5ZXJSZWN0VG9D
b250ZW50UmVjdChkaXJ0eUxheWVyUmVjdCk7CiAgICAgaWYgKGRpcnR5TGF5ZXJSZWN0LmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgLy8gRHVlIHRvIGJvcmRlcnMsIHdoZW4gdGhl
IHBhaW50IHJlY3QgaXMgZXh0ZW5kZWQgdG8gdGlsZSBib3VuZGFyaWVzLCBpdAorICAgIC8vIG1h
eSBlbmQgdXAgb3ZlcmxhcHBpbmcgbW9yZSB0aWxlcyB0aGFuIHRoZSBvcmlnaW5hbCBjb250ZW50
IHJlY3QuIFJlY29yZAorICAgIC8vIHRoZSBvcmlnaW5hbCB0aWxlcyBzbyB3ZSBkb24ndCB1cGxv
YWQgbW9yZSB0aWxlcyB0aGFuIG5lY2Vzc2FyeS4KKyAgICBpZiAoIW1fcGFpbnRSZWN0LmlzRW1w
dHkoKSkKKyAgICAgICAgbV9yZXF1ZXN0ZWRVcGRhdGVUaWxlc1JlY3QgPSBJbnRSZWN0KGxlZnQs
IHRvcCwgcmlnaHQgLSBsZWZ0ICsgMSwgYm90dG9tIC0gdG9wICsgMSk7CisKICAgICAvLyBDYWxs
aW5nIHByZXBhcmVUb1VwZGF0ZSgpIGNhbGxzIGludG8gV2ViS2l0IHRvIHBhaW50LCB3aGljaCBt
YXkgaGF2ZSB0aGUgc2lkZQogICAgIC8vIGVmZmVjdCBvZiBkaXNhYmxpbmcgY29tcG9zaXRpbmcs
IHdoaWNoIGNhdXNlcyBvdXIgcmVmZXJlbmNlIHRvIHRoZSB0ZXh0dXJlIHVwZGF0ZXIgdG8gYmUg
ZGVsZXRlZC4KICAgICAvLyBIb3dldmVyLCB3ZSBjYW4ndCBmcmVlIHRoZSBtZW1vcnkgYmFja2lu
ZyB0aGUgR3JhcGhpY3NDb250ZXh0IHVudGlsIHRoZSBwYWludCBmaW5pc2hlcywKICAgICAvLyBz
byB3ZSBncmFiIGEgbG9jYWwgcmVmZXJlbmNlIGhlcmUgdG8gaG9sZCB0aGUgdXBkYXRlciBhbGl2
ZSB1bnRpbCB0aGUgcGFpbnQgY29tcGxldGVzLgogICAgIFJlZlB0cjxMYXllclRleHR1cmVVcGRh
dGVyPiBwcm90ZWN0b3IodGV4dHVyZVVwZGF0ZXIoKSk7CiAgICAgdGV4dHVyZVVwZGF0ZXIoKS0+
cHJlcGFyZVRvVXBkYXRlKG1fcGFpbnRSZWN0LCBtX3RpbGVyLT50aWxlU2l6ZSgpLCBtX3RpbGVy
LT5oYXNCb3JkZXJUZXhlbHMoKSwgY29udGVudHNTY2FsZSgpKTsKLSAgICBtX3RpbGVyLT5jb250
ZW50UmVjdFRvVGlsZUluZGljZXMobV9yZXF1ZXN0ZWRVcGRhdGVSZWN0LCBsZWZ0LCB0b3AsIHJp
Z2h0LCBib3R0b20pOwogICAgIGZvciAoaW50IGogPSB0b3A7IGogPD0gYm90dG9tOyArK2opIHsK
ICAgICAgICAgZm9yIChpbnQgaSA9IGxlZnQ7IGkgPD0gcmlnaHQ7ICsraSkgewogICAgICAgICAg
ICAgVXBkYXRhYmxlVGlsZSogdGlsZSA9IHRpbGVBdChpLCBqKTsKQEAgLTQ0MCw1ICs0MjUsMTIw
IEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVj
dCYgY29udGVudFJlY3QpCiAgICAgfQogfQogCisKK3ZvaWQgVGlsZWRMYXllckNocm9taXVtOjpw
cmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCit7CisgICAgaWYgKCFt
X3RpbGVyKQorICAgICAgICBjcmVhdGVUaWxlcihpc05vbkNvbXBvc2l0ZWRDb250ZW50KCkgPyBD
Q0xheWVyVGlsaW5nRGF0YTo6Tm9Cb3JkZXJUZXhlbHMgOiBDQ0xheWVyVGlsaW5nRGF0YTo6SGFz
Qm9yZGVyVGV4ZWxzKTsKKworICAgIEFTU0VSVChtX3RpbGVyKTsKKworICAgIG1fc2tpcHNEcmF3
ID0gZmFsc2U7CisgICAgbV9za2lwc0lkbGVQYWludCA9IGZhbHNlOworICAgIG1fcmVxdWVzdGVk
VXBkYXRlVGlsZXNSZWN0ID0gSW50UmVjdCgpOworICAgIG1fcGFpbnRSZWN0ID0gSW50UmVjdCgp
OworCisgICAgaWYgKGNvbnRlbnRSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV90aWxlci0+Z3Jvd0xheWVyVG9Db250YWluKGNvbnRlbnRSZWN0KTsKKworICAgIGlmICgh
bV90aWxlci0+bnVtVGlsZXMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50IGxlZnQsIHRv
cCwgcmlnaHQsIGJvdHRvbTsKKyAgICBtX3RpbGVyLT5jb250ZW50UmVjdFRvVGlsZUluZGljZXMo
Y29udGVudFJlY3QsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CisKKyAgICBwcmVwYXJlVG9V
cGRhdGVUaWxlcyhmYWxzZSwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKK30KKwordm9pZCBU
aWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVUb1VwZGF0ZUlkbGUoY29uc3QgSW50UmVjdCYgY29u
dGVudFJlY3QpCit7CisgICAgLy8gQWJvcnQgaWYgd2UgaGF2ZSBhbHJlYWR5IHByZXBhcmVkIGEg
cGFpbnQgb3IgcnVuIG91dCBvZiBtZW1vcnkuCisgICAgaWYgKG1fc2tpcHNJZGxlUGFpbnQgfHwg
IW1fcGFpbnRSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1f
dGlsZXIpOworCisgICAgSW50UmVjdCBpZGxlUGFpbnRDb250ZW50UmVjdCA9IGlkbGVQYWludFJl
Y3QoY29udGVudFJlY3QpOworICAgIG1fdGlsZXItPmdyb3dMYXllclRvQ29udGFpbihpZGxlUGFp
bnRDb250ZW50UmVjdCk7CisKKyAgICBpZiAoIW1fdGlsZXItPm51bVRpbGVzKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIC8vIFByb3RlY3QgYW55IHRleHR1cmVzIGluIHRoZSBwcmUtcGFpbnQg
YXJlYSBzbyB3ZSBkb24ndCBlbmQgdXAganVzdAorICAgIC8vIHJlY2xhaW1pbmcgdGhlbSBiZWxv
dy4KKyAgICBwcm90ZWN0VGlsZVRleHR1cmVzKGlkbGVQYWludENvbnRlbnRSZWN0KTsKKworICAg
IC8vIEV4cGFuZCBvdXR3YXJkcyB1bnRpbCB3ZSBmaW5kIGEgZGlydHkgcm93IG9yIGNvbHVtbiB0
byB1cGRhdGUuCisgICAgaW50IGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbTsKKyAgICBtX3RpbGVy
LT5jb250ZW50UmVjdFRvVGlsZUluZGljZXMoY29udGVudFJlY3QsIGxlZnQsIHRvcCwgcmlnaHQs
IGJvdHRvbSk7CisgICAgaW50IHByZXBhaW50TGVmdCwgcHJlcGFpbnRUb3AsIHByZXBhaW50Umln
aHQsIHByZXBhaW50Qm90dG9tOworICAgIG1fdGlsZXItPmNvbnRlbnRSZWN0VG9UaWxlSW5kaWNl
cyhpZGxlUGFpbnRDb250ZW50UmVjdCwgcHJlcGFpbnRMZWZ0LCBwcmVwYWludFRvcCwgcHJlcGFp
bnRSaWdodCwgcHJlcGFpbnRCb3R0b20pOworICAgIHdoaWxlICghbV9za2lwc0lkbGVQYWludCAm
JiAobGVmdCA+IHByZXBhaW50TGVmdCB8fCB0b3AgPiBwcmVwYWludFRvcCB8fCByaWdodCA8IHBy
ZXBhaW50UmlnaHQgfHwgYm90dG9tIDwgcHJlcGFpbnRCb3R0b20pKSB7CisgICAgICAgIGlmIChi
b3R0b20gPCBwcmVwYWludEJvdHRvbSkgeworICAgICAgICAgICAgKytib3R0b207CisgICAgICAg
ICAgICBwcmVwYXJlVG9VcGRhdGVUaWxlcyh0cnVlLCBsZWZ0LCBib3R0b20sIHJpZ2h0LCBib3R0
b20pOworICAgICAgICAgICAgaWYgKCFtX3BhaW50UmVjdC5pc0VtcHR5KCkgfHwgbV9za2lwc0lk
bGVQYWludCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAo
dG9wID4gcHJlcGFpbnRUb3ApIHsKKyAgICAgICAgICAgIC0tdG9wOworICAgICAgICAgICAgcHJl
cGFyZVRvVXBkYXRlVGlsZXModHJ1ZSwgbGVmdCwgdG9wLCByaWdodCwgdG9wKTsKKyAgICAgICAg
ICAgIGlmICghbV9wYWludFJlY3QuaXNFbXB0eSgpIHx8IG1fc2tpcHNJZGxlUGFpbnQpCisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGxlZnQgPiBwcmVwYWlu
dExlZnQpIHsKKyAgICAgICAgICAgIC0tbGVmdDsKKyAgICAgICAgICAgIHByZXBhcmVUb1VwZGF0
ZVRpbGVzKHRydWUsIGxlZnQsIHRvcCwgbGVmdCwgYm90dG9tKTsKKyAgICAgICAgICAgIGlmICgh
bV9wYWludFJlY3QuaXNFbXB0eSgpIHx8IG1fc2tpcHNJZGxlUGFpbnQpCisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJpZ2h0IDwgcHJlcGFpbnRSaWdodCkg
eworICAgICAgICAgICAgKytyaWdodDsKKyAgICAgICAgICAgIHByZXBhcmVUb1VwZGF0ZVRpbGVz
KHRydWUsIHJpZ2h0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworICAgICAgICAgICAgaWYgKCFtX3Bh
aW50UmVjdC5pc0VtcHR5KCkgfHwgbV9za2lwc0lkbGVQYWludCkKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKworYm9vbCBUaWxlZExheWVyQ2hyb21pdW06Om5l
ZWRzSWRsZVBhaW50KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQoreworICAgIGlmIChtX3Nr
aXBzSWRsZVBhaW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBBU1NFUlQobV90aWxl
cik7CisKKyAgICBJbnRSZWN0IGlkbGVQYWludENvbnRlbnRSZWN0ID0gaWRsZVBhaW50UmVjdChj
b250ZW50UmVjdCk7CisKKyAgICBpbnQgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tOworICAgIG1f
dGlsZXItPmNvbnRlbnRSZWN0VG9UaWxlSW5kaWNlcyhpZGxlUGFpbnRDb250ZW50UmVjdCwgbGVm
dCwgdG9wLCByaWdodCwgYm90dG9tKTsKKyAgICBmb3IgKGludCBqID0gdG9wOyBqIDw9IGJvdHRv
bTsgKytqKSB7CisgICAgICAgIGZvciAoaW50IGkgPSBsZWZ0OyBpIDw9IHJpZ2h0OyArK2kpIHsK
KyAgICAgICAgICAgIGlmIChtX3JlcXVlc3RlZFVwZGF0ZVRpbGVzUmVjdC5jb250YWlucyhJbnRQ
b2ludChpLCBqKSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBVcGRh
dGFibGVUaWxlKiB0aWxlID0gdGlsZUF0KGksIGopOworICAgICAgICAgICAgaWYgKCF0aWxlIHx8
ICF0aWxlLT5tYW5hZ2VkVGV4dHVyZSgpLT5pc1ZhbGlkKG1fdGlsZXItPnRpbGVTaXplKCksIG1f
dGV4dHVyZUZvcm1hdCkgfHwgdGlsZS0+aXNEaXJ0eSgpKQorICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworSW50UmVj
dCBUaWxlZExheWVyQ2hyb21pdW06OmlkbGVQYWludFJlY3QoY29uc3QgSW50UmVjdCYgdmlzaWJs
ZUNvbnRlbnRSZWN0KQoreworICAgIEFTU0VSVChtX3RpbGVyKTsKKyAgICBJbnRSZWN0IHByZXBh
aW50UmVjdCA9IHZpc2libGVDb250ZW50UmVjdDsKKyAgICAvLyBGSVhNRTogVGhpcyBjYW4gYmUg
bWFkZSBhIGxvdCBsYXJnZXIgaWYgd2UgY2FuOgorICAgIC8vIC0gcmVzZXJ2ZSBtZW1vcnkgYXQg
YSBsb3dlciBwcmlvcml0eSB0aGFuIGZvciB2aXNpYmxlIGNvbnRlbnQKKyAgICAvLyAtIG9ubHkg
cmVzZXJ2ZSBpZGxlIHBhaW50IHRpbGVzIHVwIHRvIGEgbWVtb3J5IHJlY2xhaW0gdGhyZXNob2xk
IGFuZAorICAgIC8vIC0gaW5zdXJlIHdlIHBsYXkgbmljZWx5IHdpdGggb3RoZXIgbGF5ZXJzCisg
ICAgcHJlcGFpbnRSZWN0LmluZmxhdGVYKG1fdGlsZXItPnRpbGVTaXplKCkud2lkdGgoKSk7Cisg
ICAgcHJlcGFpbnRSZWN0LmluZmxhdGVZKG1fdGlsZXItPnRpbGVTaXplKCkuaGVpZ2h0KCkpOwor
ICAgIHByZXBhaW50UmVjdC5pbnRlcnNlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBjb250
ZW50Qm91bmRzKCkpKTsKKyAgICByZXR1cm4gcHJlcGFpbnRSZWN0OworfQorCiB9CiAjZW5kaWYg
Ly8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0u
aAppbmRleCAyOGU3ZDFkMGM1Njk2ODAwZjNkNjIxMjQwOGRkOGQxOGJjZWRiZWMyLi43NGViZmVj
ZWU2ZWM3YTFiOTQzOWY3ODZlNzYxNDQ1ZGNjNTk3ZmU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hy
b21pdW0uaApAQCAtNzUsOSArNzUsMTYgQEAgcHJvdGVjdGVkOgogCiAgICAgLy8gU2V0IGludmFs
aWRhdGlvbnMgdG8gYmUgcG90ZW50aWFsbHkgcmVwYWludGVkIGR1cmluZyB1cGRhdGUoKS4KICAg
ICB2b2lkIGludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KTsKKwogICAg
IC8vIFByZXBhcmUgZGF0YSBuZWVkZWQgdG8gdXBkYXRlIHRleHR1cmVzIHRoYXQgaW50ZXJzZWN0
IHdpdGggY29udGVudFJlY3QuCiAgICAgdm9pZCBwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVj
dCYgY29udGVudFJlY3QpOwogCisgICAgLy8gU2FtZSBhcyBhYm92ZSwgYnV0IHRoaXMgd2lsbCB0
cnkgdG8gcGFpbnQgYWRkaXRpb25hbCBzdXJyb3VuZGluZyBjb250ZW50IGlmIGlkbGUuCisgICAg
dm9pZCBwcmVwYXJlVG9VcGRhdGVJZGxlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KTsKKwor
ICAgIC8vIEFmdGVyIHByZXBhcmluZyBhbiB1cGRhdGUsIHJldHVybnMgdHJ1ZSBpZiBtb3JlIHBy
ZS1wYWludGluZyBpcyBuZWVkZWQuCisgICAgYm9vbCBuZWVkc0lkbGVQYWludChjb25zdCBJbnRS
ZWN0JiBjb250ZW50UmVjdCk7CisKICAgICB2aXJ0dWFsIHZvaWQgcHJvdGVjdFZpc2libGVUaWxl
VGV4dHVyZXMoKTsKIAogICAgIHZpcnR1YWwgVGV4dHVyZU1hbmFnZXIqIHRleHR1cmVNYW5hZ2Vy
KCkgY29uc3Q7CkBAIC05MCwxNyArOTcsMjIgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNyZWF0ZVRp
bGVySWZOZWVkZWQoKTsKICAgICB2b2lkIHNldFRpbGluZ09wdGlvbihUaWxpbmdPcHRpb24pOwog
CisgICAgdm9pZCBwcmVwYXJlVG9VcGRhdGVUaWxlcyhib29sIGlkbGUsIGludCBsZWZ0LCBpbnQg
dG9wLCBpbnQgcmlnaHQsIGludCBib3R0b20pOworICAgIEludFJlY3QgaWRsZVBhaW50UmVjdChj
b25zdCBJbnRSZWN0JiB2aXNpYmxlQ29udGVudFJlY3QpOworCiAgICAgVXBkYXRhYmxlVGlsZSog
dGlsZUF0KGludCwgaW50KSBjb25zdDsKICAgICBVcGRhdGFibGVUaWxlKiBjcmVhdGVUaWxlKGlu
dCwgaW50KTsKIAogICAgIC8vIFRlbXBvcmFyeSBzdGF0ZSBoZWxkIGJldHdlZW4gcHJlcGFyZVRv
VXBkYXRlKCkgYW5kIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoKS4KLSAgICBJbnRSZWN0IG1f
cmVxdWVzdGVkVXBkYXRlUmVjdDsKKyAgICBJbnRSZWN0IG1fcmVxdWVzdGVkVXBkYXRlVGlsZXNS
ZWN0OworCiAgICAgLy8gU3RhdGUgaGVsZCBiZXR3ZWVuIHByZXBhcmVUb1VwZGF0ZSgpIGFuZCBw
dXNoUHJvcGVydGllc1RvKCkuIFRoaXMgcmVwcmVzZW50cyB0aGUgYXJlYQogICAgIC8vIG9mIHRo
ZSBsYXllciB0aGF0IGlzIGFjdHVhbGx5IHJlLXBhaW50ZWQgYnkgV2ViS2l0LgogICAgIEludFJl
Y3QgbV9wYWludFJlY3Q7CiAKICAgICBHQzNEZW51bSBtX3RleHR1cmVGb3JtYXQ7CiAgICAgYm9v
bCBtX3NraXBzRHJhdzsKKyAgICBib29sIG1fc2tpcHNJZGxlUGFpbnQ7CiAgICAgTGF5ZXJUZXh0
dXJlVXBkYXRlcjo6T3JpZW50YXRpb24gbV90ZXh0dXJlT3JpZW50YXRpb247CiAgICAgTGF5ZXJU
ZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0IG1fc2FtcGxlZFRleGVsRm9ybWF0Owog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAppbmRleCAyN2Q5NTZhN2M3YWZiZDA5NWRi
OTQ1YjkzNGExNjZlZmE1NWYzNzRmLi5hYjI3YjIyZTkxYjQ3ZDVjOTNlYWMxYzc2MjUyOGUxM2Fh
ZmM3MTQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTMxNCw3ICszMTQs
NyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6Y29tcG9zaXRlKCkKICAgICBzdGF0aWNfY2FzdDxD
Q1NpbmdsZVRocmVhZFByb3h5Kj4obV9wcm94eS5nZXQoKSktPmNvbXBvc2l0ZUltbWVkaWF0ZWx5
KCk7CiB9CiAKLXZvaWQgQ0NMYXllclRyZWVIb3N0Ojp1cGRhdGVMYXllcnMoKQordm9pZCBDQ0xh
eWVyVHJlZUhvc3Q6OnVwZGF0ZUxheWVycyhib29sIHRyaWdnZXJJZGxlUGFpbnRzKQogewogICAg
IGlmICghcm9vdExheWVyKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTMyMiwxMCArMzIyLDEwIEBA
IHZvaWQgQ0NMYXllclRyZWVIb3N0Ojp1cGRhdGVMYXllcnMoKQogICAgIGlmICh2aWV3cG9ydFNp
emUoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHVwZGF0ZUxheWVycyhyb290
TGF5ZXIoKSk7CisgICAgdXBkYXRlTGF5ZXJzKHRyaWdnZXJJZGxlUGFpbnRzLCByb290TGF5ZXIo
KSk7CiB9CiAKLXZvaWQgQ0NMYXllclRyZWVIb3N0Ojp1cGRhdGVMYXllcnMoTGF5ZXJDaHJvbWl1
bSogcm9vdExheWVyKQordm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnVwZGF0ZUxheWVycyhib29sIHRy
aWdnZXJJZGxlUGFpbnRzLCBMYXllckNocm9taXVtKiByb290TGF5ZXIpCiB7CiAgICAgVFJBQ0Vf
RVZFTlQoIkNDTGF5ZXJUcmVlSG9zdDo6dXBkYXRlTGF5ZXJzIiwgdGhpcywgMCk7CiAKQEAgLTM1
MCwxMCArMzUwLDI0IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0Ojp1cGRhdGVMYXllcnMoTGF5ZXJD
aHJvbWl1bSogcm9vdExheWVyKQogICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1
bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShyb290TGF5ZXIsIHJvb3RMYXllciwgaWRl
bnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBtX3VwZGF0ZUxpc3QsIHJvb3RSZW5kZXJTdXJm
YWNlLT5sYXllckxpc3QoKSwgbGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLm1heFRleHR1cmVT
aXplKTsKICAgICB9CiAKLSAgICBwYWludExheWVyQ29udGVudHMobV91cGRhdGVMaXN0KTsKKyAg
ICBwYWludExheWVyQ29udGVudHMobV91cGRhdGVMaXN0LCBQYWludFZpc2libGUpOworICAgIC8v
IFRoZSBzZWNvbmQgKGlkbGUpIHBhaW50IHdpbGwgYmUgYSBuby1vcCBpbiBsYXllcnMgd2hlcmUg
cGFpbnRpbmcgYWxyZWFkeSBvY2N1cmVkIGFib3ZlLgorICAgIGlmICh0cmlnZ2VySWRsZVBhaW50
cykKKyAgICAgICAgcGFpbnRMYXllckNvbnRlbnRzKG1fdXBkYXRlTGlzdCwgUGFpbnRJZGxlKTsK
IH0KIAotdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnBhaW50TWFza0FuZFJlcGxpY2FGb3JSZW5kZXJT
dXJmYWNlKExheWVyQ2hyb21pdW0qIHJlbmRlclN1cmZhY2VMYXllcikKKy8vIHN0YXRpYwordm9p
ZCBDQ0xheWVyVHJlZUhvc3Q6OnBhaW50Q29udGVudHNJZkRpcnR5KExheWVyQ2hyb21pdW0qIGxh
eWVyLCBQYWludFR5cGUgcGFpbnRUeXBlKQoreworICAgIEFTU0VSVChsYXllcik7CisgICAgQVNT
RVJUKFBhaW50VmlzaWJsZSA9PSBwYWludFR5cGUgfHwgUGFpbnRJZGxlID09IHBhaW50VHlwZSk7
CisgICAgaWYgKFBhaW50VmlzaWJsZSA9PSBwYWludFR5cGUpCisgICAgICAgIGxheWVyLT5wYWlu
dENvbnRlbnRzSWZEaXJ0eSgpOworICAgIGVsc2UKKyAgICAgICAgbGF5ZXItPmlkbGVQYWludENv
bnRlbnRzSWZEaXJ0eSgpOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6cGFpbnRNYXNrQW5k
UmVwbGljYUZvclJlbmRlclN1cmZhY2UoTGF5ZXJDaHJvbWl1bSogcmVuZGVyU3VyZmFjZUxheWVy
LCBQYWludFR5cGUgcGFpbnRUeXBlKQogewogICAgIC8vIE5vdGU6IE1hc2tzIGFuZCByZXBsaWNh
cyBvbmx5IGV4aXN0IGZvciBsYXllcnMgdGhhdCBvd24gcmVuZGVyIHN1cmZhY2VzLiBJZiB3ZSBy
ZWFjaCB0aGlzIHBvaW50CiAgICAgLy8gaW4gY29kZSwgd2UgYWxyZWFkeSBrbm93IHRoYXQgYXQg
bGVhc3Qgc29tZXRoaW5nIHdpbGwgYmUgZHJhd24gaW50byB0aGlzIHJlbmRlciBzdXJmYWNlLCBz
byB0aGUKQEAgLTM2MiwyNCArMzc2LDI0IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpwYWludE1h
c2tBbmRSZXBsaWNhRm9yUmVuZGVyU3VyZmFjZShMYXllckNocm9taXVtKiByZW5kZXJTCiAgICAg
aWYgKHJlbmRlclN1cmZhY2VMYXllci0+bWFza0xheWVyKCkpIHsKICAgICAgICAgcmVuZGVyU3Vy
ZmFjZUxheWVyLT5tYXNrTGF5ZXIoKS0+c2V0TGF5ZXJUcmVlSG9zdCh0aGlzKTsKICAgICAgICAg
cmVuZGVyU3VyZmFjZUxheWVyLT5tYXNrTGF5ZXIoKS0+c2V0VmlzaWJsZUxheWVyUmVjdChJbnRS
ZWN0KEludFBvaW50KCksIHJlbmRlclN1cmZhY2VMYXllci0+Y29udGVudEJvdW5kcygpKSk7Ci0g
ICAgICAgIHJlbmRlclN1cmZhY2VMYXllci0+bWFza0xheWVyKCktPnBhaW50Q29udGVudHNJZkRp
cnR5KCk7CisgICAgICAgIHBhaW50Q29udGVudHNJZkRpcnR5KHJlbmRlclN1cmZhY2VMYXllci0+
bWFza0xheWVyKCksIHBhaW50VHlwZSk7CiAgICAgfQogCiAgICAgTGF5ZXJDaHJvbWl1bSogcmVw
bGljYUxheWVyID0gcmVuZGVyU3VyZmFjZUxheWVyLT5yZXBsaWNhTGF5ZXIoKTsKICAgICBpZiAo
cmVwbGljYUxheWVyKSB7CiAKICAgICAgICAgcmVwbGljYUxheWVyLT5zZXRMYXllclRyZWVIb3N0
KHRoaXMpOwotICAgICAgICByZXBsaWNhTGF5ZXItPnBhaW50Q29udGVudHNJZkRpcnR5KCk7Cisg
ICAgICAgIHBhaW50Q29udGVudHNJZkRpcnR5KHJlcGxpY2FMYXllciwgcGFpbnRUeXBlKTsKIAog
ICAgICAgICBpZiAocmVwbGljYUxheWVyLT5tYXNrTGF5ZXIoKSkgewogICAgICAgICAgICAgcmVw
bGljYUxheWVyLT5tYXNrTGF5ZXIoKS0+c2V0TGF5ZXJUcmVlSG9zdCh0aGlzKTsKICAgICAgICAg
ICAgIHJlcGxpY2FMYXllci0+bWFza0xheWVyKCktPnNldFZpc2libGVMYXllclJlY3QoSW50UmVj
dChJbnRQb2ludCgpLCByZXBsaWNhTGF5ZXItPm1hc2tMYXllcigpLT5jb250ZW50Qm91bmRzKCkp
KTsKLSAgICAgICAgICAgIHJlcGxpY2FMYXllci0+bWFza0xheWVyKCktPnBhaW50Q29udGVudHNJ
ZkRpcnR5KCk7CisgICAgICAgICAgICBwYWludENvbnRlbnRzSWZEaXJ0eShyZXBsaWNhTGF5ZXIt
Pm1hc2tMYXllcigpLCBwYWludFR5cGUpOwogICAgICAgICB9CiAgICAgfQogfQogCi12b2lkIEND
TGF5ZXJUcmVlSG9zdDo6cGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVy
U3VyZmFjZUxheWVyTGlzdCkKK3ZvaWQgQ0NMYXllclRyZWVIb3N0OjpwYWludExheWVyQ29udGVu
dHMoY29uc3QgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBQYWludFR5cGUgcGFp
bnRUeXBlKQogewogICAgIGZvciAoaW50IHN1cmZhY2VJbmRleCA9IHJlbmRlclN1cmZhY2VMYXll
ckxpc3Quc2l6ZSgpIC0gMTsgc3VyZmFjZUluZGV4ID49IDAgOyAtLXN1cmZhY2VJbmRleCkgewog
ICAgICAgICBMYXllckNocm9taXVtKiByZW5kZXJTdXJmYWNlTGF5ZXIgPSByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0W3N1cmZhY2VJbmRleF0uZ2V0KCk7CkBAIC0zODgsNyArNDAyLDcgQEAgdm9pZCBD
Q0xheWVyVHJlZUhvc3Q6OnBhaW50TGF5ZXJDb250ZW50cyhjb25zdCBMYXllckxpc3QmIHJlbmRl
clN1cmZhY2VMYXllckxpc3QKICAgICAgICAgQVNTRVJUKHJlbmRlclN1cmZhY2UtPmRyYXdPcGFj
aXR5KCkpOwogCiAgICAgICAgIHJlbmRlclN1cmZhY2VMYXllci0+c2V0TGF5ZXJUcmVlSG9zdCh0
aGlzKTsKLSAgICAgICAgcGFpbnRNYXNrQW5kUmVwbGljYUZvclJlbmRlclN1cmZhY2UocmVuZGVy
U3VyZmFjZUxheWVyKTsKKyAgICAgICAgcGFpbnRNYXNrQW5kUmVwbGljYUZvclJlbmRlclN1cmZh
Y2UocmVuZGVyU3VyZmFjZUxheWVyLCBwYWludFR5cGUpOwogCiAgICAgICAgIGNvbnN0IExheWVy
TGlzdCYgbGF5ZXJMaXN0ID0gcmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCk7CiAgICAgICAgIGZv
ciAodW5zaWduZWQgbGF5ZXJJbmRleCA9IDA7IGxheWVySW5kZXggPCBsYXllckxpc3Quc2l6ZSgp
OyArK2xheWVySW5kZXgpIHsKQEAgLTQwMSwxMCArNDE1LDkgQEAgdm9pZCBDQ0xheWVyVHJlZUhv
c3Q6OnBhaW50TGF5ZXJDb250ZW50cyhjb25zdCBMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXll
ckxpc3QKIAogICAgICAgICAgICAgbGF5ZXItPnNldExheWVyVHJlZUhvc3QodGhpcyk7CiAKLSAg
ICAgICAgICAgIEFTU0VSVChsYXllci0+b3BhY2l0eSgpKTsKICAgICAgICAgICAgIEFTU0VSVCgh
bGF5ZXItPmJvdW5kcygpLmlzRW1wdHkoKSk7CiAKLSAgICAgICAgICAgIGxheWVyLT5wYWludENv
bnRlbnRzSWZEaXJ0eSgpOworICAgICAgICAgICAgcGFpbnRDb250ZW50c0lmRGlydHkobGF5ZXIs
IHBhaW50VHlwZSk7CiAgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dC5oCmluZGV4IGFhYWQxNDIyOWQzNTEwZWUxOTEwMjFjNzY0Yzc1YjRmYjQ3M2FiNTUuLmFjM2Uz
ZmVjOTNhZjk1ZWZmODAwN2IxNjYxMWMwNDg3NzMwMDkxZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdC5oCkBAIC0xODYsNyArMTg2LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRIYXZl
V2hlZWxFdmVudEhhbmRsZXJzKGJvb2wpOwogCi0gICAgdm9pZCB1cGRhdGVMYXllcnMoKTsKKyAg
ICB2b2lkIHVwZGF0ZUxheWVycyhib29sIHRyaWdnZXJJZGxlUGFpbnRzKTsKIAogICAgIHZvaWQg
dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCosIENDVGV4dHVyZVVw
ZGF0ZXImKTsKICAgICB2b2lkIGFwcGx5U2Nyb2xsQW5kU2NhbGUoY29uc3QgQ0NTY3JvbGxBbmRT
Y2FsZVNldCYpOwpAQCAtMjAwLDEwICsyMDAsMTIgQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAg
ICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBMYXllckxpc3Q7CiAKLSAg
ICB2b2lkIHBhaW50TGF5ZXJDb250ZW50cyhjb25zdCBMYXllckxpc3QmKTsKLSAgICB2b2lkIHBh
aW50TWFza0FuZFJlcGxpY2FGb3JSZW5kZXJTdXJmYWNlKExheWVyQ2hyb21pdW0qKTsKKyAgICBl
bnVtIFBhaW50VHlwZSB7IFBhaW50VmlzaWJsZSwgUGFpbnRJZGxlIH07CisgICAgc3RhdGljIHZv
aWQgcGFpbnRDb250ZW50c0lmRGlydHkoTGF5ZXJDaHJvbWl1bSosIFBhaW50VHlwZSk7CisgICAg
dm9pZCBwYWludExheWVyQ29udGVudHMoY29uc3QgTGF5ZXJMaXN0JiwgUGFpbnRUeXBlKTsKKyAg
ICB2b2lkIHBhaW50TWFza0FuZFJlcGxpY2FGb3JSZW5kZXJTdXJmYWNlKExheWVyQ2hyb21pdW0q
LCBQYWludFR5cGUpOwogCi0gICAgdm9pZCB1cGRhdGVMYXllcnMoTGF5ZXJDaHJvbWl1bSopOwor
ICAgIHZvaWQgdXBkYXRlTGF5ZXJzKGJvb2wgdHJpZ2dlcklkbGVQYWludHMsIExheWVyQ2hyb21p
dW0qKTsKICAgICB2b2lkIGNsZWFyUGVuZGluZ1VwZGF0ZSgpOwogCiAgICAgaW50IG1fY29tcG9z
aXRvcklkZW50aWZpZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwCmlu
ZGV4IDcyYmVjMmE3MTY2NGFmNDNjZDY0ZDAxNGQyOGI4NDI2NTA5NWIyMDMuLjk4ZGRjYzJmMWQy
YTE1YTNhYzk5N2NmODc4YzQwNjY1ZTVkOGY5Y2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xl
VGhyZWFkUHJveHkuY3BwCkBAIC03NCw3ICs3NCw3IEBAIGJvb2wgQ0NTaW5nbGVUaHJlYWRQcm94
eTo6Y29tcG9zaXRlQW5kUmVhZGJhY2sodm9pZCAqcGl4ZWxzLCBjb25zdCBJbnRSZWN0JiByZWN0
CiAgICAgaWYgKCFyZWNyZWF0ZUNvbnRleHRJZk5lZWRlZCgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBjb21taXRJZk5lZWRlZCgpOworICAgIGNvbW1pdElmTmVlZGVkKGZhbHNlKTsK
IAogICAgIGlmICghZG9Db21wb3NpdGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjE0
LDcgKzIxNCw3IEBAIHZvaWQgQ0NTaW5nbGVUaHJlYWRQcm94eTo6Y29tcG9zaXRlSW1tZWRpYXRl
bHkoKQogICAgIGlmICghcmVjcmVhdGVDb250ZXh0SWZOZWVkZWQoKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgY29tbWl0SWZOZWVkZWQoKTsKKyAgICBjb21taXRJZk5lZWRlZCh0cnVlKTsKIAog
ICAgIGlmIChkb0NvbXBvc2l0ZSgpKQogICAgICAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5zd2Fw
QnVmZmVycygpOwpAQCAtMjY4LDExICsyNjgsMTEgQEAgYm9vbCBDQ1NpbmdsZVRocmVhZFByb3h5
OjpyZWNyZWF0ZUNvbnRleHRJZk5lZWRlZCgpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lk
IENDU2luZ2xlVGhyZWFkUHJveHk6OmNvbW1pdElmTmVlZGVkKCkKK3ZvaWQgQ0NTaW5nbGVUaHJl
YWRQcm94eTo6Y29tbWl0SWZOZWVkZWQoYm9vbCB0cmlnZ2VySWRsZVBhaW50cykKIHsKICAgICBB
U1NFUlQoQ0NQcm94eTo6aXNNYWluVGhyZWFkKCkpOwogCi0gICAgbV9sYXllclRyZWVIb3N0LT51
cGRhdGVMYXllcnMoKTsKKyAgICBtX2xheWVyVHJlZUhvc3QtPnVwZGF0ZUxheWVycyh0cmlnZ2Vy
SWRsZVBhaW50cyk7CiAKICAgICBkb0NvbW1pdCgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVU
aHJlYWRQcm94eS5oCmluZGV4IDBkNWE0YTJkOGE1MTZiMWQ3YmNmOTkxYTk5ZTFjNzg3ODk5NDNl
YzUuLjk0ZGY4ZDBjNmY0YWMxYzZjMWUzMGMxNDIzOTU0ODc0ZTc5OWZmMTMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhy
ZWFkUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmgKQEAgLTY2LDcgKzY2LDcgQEAgcHVibGljOgogcHJp
dmF0ZToKICAgICBleHBsaWNpdCBDQ1NpbmdsZVRocmVhZFByb3h5KENDTGF5ZXJUcmVlSG9zdCop
OwogICAgIGJvb2wgcmVjcmVhdGVDb250ZXh0SWZOZWVkZWQoKTsKLSAgICB2b2lkIGNvbW1pdElm
TmVlZGVkKCk7CisgICAgdm9pZCBjb21taXRJZk5lZWRlZChib29sIHRyaWdnZXJJZGxlUGFpbnRz
KTsKICAgICB2b2lkIGRvQ29tbWl0KCk7CiAgICAgYm9vbCBkb0NvbXBvc2l0ZSgpOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Ro
cmVhZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDVGhyZWFkUHJveHkuY3BwCmluZGV4IDhlNzc0MjVlNDQwYTRlZGNmMjlmMjY1YWMzZTll
ZWZkYmUyMTVkODcuLmNiY2VmZjIyZTk0YWMyZDQ1OTg3ZjI0OTVkZWZiYWY5Mjg5NTM5NDkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
VGhyZWFkUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCkBAIC04OSw3ICs4OSw3IEBAIGJvb2wgQ0NUaHJl
YWRQcm94eTo6Y29tcG9zaXRlQW5kUmVhZGJhY2sodm9pZCAqcGl4ZWxzLCBjb25zdCBJbnRSZWN0
JiByZWN0KQogICAgICAgICB7CiAgICAgICAgICAgICBDQ1RocmVhZDo6VGFzayogdGFza1B0ciA9
IDA7CiAgICAgICAgICAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9uOwotICAgICAgICAg
ICAgQ0NQcm94eTo6aW1wbFRocmVhZCgpLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhp
cywgJkNDVGhyZWFkUHJveHk6Om9idGFpbkJlZ2luRnJhbWVBbmRDb21taXRUYXNrRnJvbUNDVGhy
ZWFkLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZjb21wbGV0aW9uKSwgQWxsb3dDcm9zc1RocmVh
ZEFjY2VzcygmdGFza1B0cikpKTsKKyAgICAgICAgICAgIENDUHJveHk6OmltcGxUaHJlYWQoKS0+
cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5OjpvYnRhaW5C
ZWdpbkZyYW1lQW5kQ29tbWl0VGFza0Zyb21DQ1RocmVhZCwgZmFsc2UsIEFsbG93Q3Jvc3NUaHJl
YWRBY2Nlc3MoJmNvbXBsZXRpb24pLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZ0YXNrUHRyKSkp
OwogICAgICAgICAgICAgY29tcGxldGlvbi53YWl0KCk7CiAgICAgICAgICAgICBiZWdpbkZyYW1l
QW5kQ29tbWl0VGFzayA9IGFkb3B0UHRyKHRhc2tQdHIpOwogICAgICAgICB9CkBAIC0yOTgsMTcg
KzI5OCwxNyBAQCB2b2lkIENDVGhyZWFkUHJveHk6OmZpbmlzaEFsbFJlbmRlcmluZ09uSW1wbFRo
cmVhZChDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvbgogdm9pZCBDQ1RocmVhZFByb3h5Ojpz
Y2hlZHVsZWRBY3Rpb25CZWdpbkZyYW1lKCkKIHsKICAgICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQ
cm94eTo6c2NoZWR1bGVkQWN0aW9uQmVnaW5GcmFtZSIsIHRoaXMsIDApOwotICAgIG1fbWFpblRo
cmVhZFByb3h5LT5wb3N0VGFzayhjcmVhdGVCZWdpbkZyYW1lQW5kQ29tbWl0VGFza09uSW1wbFRo
cmVhZCgpKTsKKyAgICBtX21haW5UaHJlYWRQcm94eS0+cG9zdFRhc2soY3JlYXRlQmVnaW5GcmFt
ZUFuZENvbW1pdFRhc2tPbkltcGxUaHJlYWQodHJ1ZSkpOwogfQogCi12b2lkIENDVGhyZWFkUHJv
eHk6Om9idGFpbkJlZ2luRnJhbWVBbmRDb21taXRUYXNrRnJvbUNDVGhyZWFkKENDQ29tcGxldGlv
bkV2ZW50KiBjb21wbGV0aW9uLCBDQ1RocmVhZDo6VGFzayoqIHRhc2tQdHIpCit2b2lkIENDVGhy
ZWFkUHJveHk6Om9idGFpbkJlZ2luRnJhbWVBbmRDb21taXRUYXNrRnJvbUNDVGhyZWFkKGJvb2wg
dHJpZ2dlcklkbGVQYWludHMsIENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0aW9uLCBDQ1RocmVh
ZDo6VGFzayoqIHRhc2tQdHIpCiB7Ci0gICAgT3duUHRyPENDVGhyZWFkOjpUYXNrPiB0YXNrID0g
Y3JlYXRlQmVnaW5GcmFtZUFuZENvbW1pdFRhc2tPbkltcGxUaHJlYWQoKTsKKyAgICBPd25QdHI8
Q0NUaHJlYWQ6OlRhc2s+IHRhc2sgPSBjcmVhdGVCZWdpbkZyYW1lQW5kQ29tbWl0VGFza09uSW1w
bFRocmVhZCh0cmlnZ2VySWRsZVBhaW50cyk7CiAgICAgKnRhc2tQdHIgPSB0YXNrLmxlYWtQdHIo
KTsKICAgICBjb21wbGV0aW9uLT5zaWduYWwoKTsKIH0KIAotUGFzc093blB0cjxDQ1RocmVhZDo6
VGFzaz4gQ0NUaHJlYWRQcm94eTo6Y3JlYXRlQmVnaW5GcmFtZUFuZENvbW1pdFRhc2tPbkltcGxU
aHJlYWQoKQorUGFzc093blB0cjxDQ1RocmVhZDo6VGFzaz4gQ0NUaHJlYWRQcm94eTo6Y3JlYXRl
QmVnaW5GcmFtZUFuZENvbW1pdFRhc2tPbkltcGxUaHJlYWQoYm9vbCB0cmlnZ2VySWRsZVBhaW50
cykKIHsKICAgICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6Y3JlYXRlQmVnaW5GcmFtZUFu
ZENvbW1pdFRhc2tPbkltcGxUaHJlYWQiLCB0aGlzLCAwKTsKICAgICBBU1NFUlQoaXNJbXBsVGhy
ZWFkKCkpOwpAQCAtMzI2LDEwICszMjYsMTAgQEAgUGFzc093blB0cjxDQ1RocmVhZDo6VGFzaz4g
Q0NUaHJlYWRQcm94eTo6Y3JlYXRlQmVnaW5GcmFtZUFuZENvbW1pdFRhc2tPbkltcGxUaHIKICAg
ICBpbnQgdGhpc1Rhc2tTZXF1ZW5jZU51bWJlciA9IG1fbnVtQmVnaW5GcmFtZUFuZENvbW1pdHNJ
c3N1ZWRPbkltcGxUaHJlYWQ7CiAgICAgbV9udW1CZWdpbkZyYW1lQW5kQ29tbWl0c0lzc3VlZE9u
SW1wbFRocmVhZCsrOwogICAgIE93blB0cjxDQ1Njcm9sbEFuZFNjYWxlU2V0PiBzY3JvbGxJbmZv
ID0gbV9sYXllclRyZWVIb3N0SW1wbC0+cHJvY2Vzc1Njcm9sbERlbHRhcygpOwotICAgIHJldHVy
biBjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDVGhyZWFkUHJveHk6OmJlZ2luRnJhbWVBbmRD
b21taXQsIHRoaXNUYXNrU2VxdWVuY2VOdW1iZXIsIGZyYW1lQmVnaW5UaW1lLCBzY3JvbGxJbmZv
LnJlbGVhc2UoKSk7CisgICAgcmV0dXJuIGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJl
YWRQcm94eTo6YmVnaW5GcmFtZUFuZENvbW1pdCwgdGhpc1Rhc2tTZXF1ZW5jZU51bWJlciwgZnJh
bWVCZWdpblRpbWUsIHNjcm9sbEluZm8ucmVsZWFzZSgpLCB0cmlnZ2VySWRsZVBhaW50cyk7CiB9
CiAKLXZvaWQgQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZUFuZENvbW1pdChpbnQgc2VxdWVuY2VO
dW1iZXIsIGRvdWJsZSBmcmFtZUJlZ2luVGltZSwgUGFzc093blB0cjxDQ1Njcm9sbEFuZFNjYWxl
U2V0PiBzY3JvbGxJbmZvKQordm9pZCBDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lQW5kQ29tbWl0
KGludCBzZXF1ZW5jZU51bWJlciwgZG91YmxlIGZyYW1lQmVnaW5UaW1lLCBQYXNzT3duUHRyPEND
U2Nyb2xsQW5kU2NhbGVTZXQ+IHNjcm9sbEluZm8sIGJvb2wgdHJpZ2dlcklkbGVQYWludHMpCiB7
CiAgICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6OmJlZ2luRnJhbWVBbmRDb21taXQiLCB0
aGlzLCAwKTsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwpAQCAtMzczLDcgKzM3Myw3IEBA
IHZvaWQgQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZUFuZENvbW1pdChpbnQgc2VxdWVuY2VOdW1i
ZXIsIGRvdWJsZSBmcmFtZUJlZ2luVGltCiAgICAgLy8gdXBkYXRlTGF5ZXJzLgogICAgIG1fY29t
bWl0UmVxdWVzdGVkID0gZmFsc2U7CiAKLSAgICBtX2xheWVyVHJlZUhvc3QtPnVwZGF0ZUxheWVy
cygpOworICAgIG1fbGF5ZXJUcmVlSG9zdC0+dXBkYXRlTGF5ZXJzKHRyaWdnZXJJZGxlUGFpbnRz
KTsKIAogICAgIC8vIEJlZm9yZSBhcHBseWluZyBzY3JvbGxzIGFuZCBjYWxsaW5nIGFuaW1hdGUs
IHdlIHNldCBtX2FuaW1hdGVSZXF1ZXN0ZWQgdG8gZmFsc2UuCiAgICAgLy8gSWYgaXQgaXMgdHJ1
ZSBub3csIGl0IG1lYW5zIHNldE5lZWRBbmltYXRlIHdhcyBjYWxsZWQgYWdhaW4uIENhbGwgc2V0
TmVlZHNDb21taXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuaAppbmRleCAxZGYzNzQ2YzVkYzAxMzRh
MzI0ZTRhYzg2NDIzMDQ1MjkzM2E5OGZiLi4xYjViODIwNWVhZTc3MjVlY2NiZDRlN2ZkNmU1YzIz
OTg1ZDE4NGVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oCkBAIC03OSw3ICs3OSw3IEBAIHBy
aXZhdGU6CiAgICAgZXhwbGljaXQgQ0NUaHJlYWRQcm94eShDQ0xheWVyVHJlZUhvc3QqKTsKIAog
ICAgIC8vIENhbGxlZCBvbiBtYWluIHRocmVhZAotICAgIHZvaWQgYmVnaW5GcmFtZUFuZENvbW1p
dChpbnQgc2VxdWVuY2VOdW1iZXIsIGRvdWJsZSBmcmFtZUJlZ2luVGltZSwgUGFzc093blB0cjxD
Q1Njcm9sbEFuZFNjYWxlU2V0Pik7CisgICAgdm9pZCBiZWdpbkZyYW1lQW5kQ29tbWl0KGludCBz
ZXF1ZW5jZU51bWJlciwgZG91YmxlIGZyYW1lQmVnaW5UaW1lLCBQYXNzT3duUHRyPENDU2Nyb2xs
QW5kU2NhbGVTZXQ+LCBib29sIHRyaWdnZXJJZGxlUGFpbnRzKTsKICAgICB2b2lkIGRpZENvbW1p
dEFuZERyYXdGcmFtZSgpOwogICAgIHZvaWQgZGlkQ29tcGxldGVTd2FwQnVmZmVycygpOwogCkBA
IC05MCw4ICs5MCw4IEBAIHByaXZhdGU6CiAgICAgICAgIHZvaWQqIHBpeGVsczsKICAgICAgICAg
SW50UmVjdCByZWN0OwogICAgIH07Ci0gICAgUGFzc093blB0cjxDQ1RocmVhZDo6VGFzaz4gY3Jl
YXRlQmVnaW5GcmFtZUFuZENvbW1pdFRhc2tPbkltcGxUaHJlYWQoKTsKLSAgICB2b2lkIG9idGFp
bkJlZ2luRnJhbWVBbmRDb21taXRUYXNrRnJvbUNDVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50Kiwg
Q0NUaHJlYWQ6OlRhc2sqKik7CisgICAgUGFzc093blB0cjxDQ1RocmVhZDo6VGFzaz4gY3JlYXRl
QmVnaW5GcmFtZUFuZENvbW1pdFRhc2tPbkltcGxUaHJlYWQoYm9vbCB0cmlnZ2VySWRsZVBhaW50
cyk7CisgICAgdm9pZCBvYnRhaW5CZWdpbkZyYW1lQW5kQ29tbWl0VGFza0Zyb21DQ1RocmVhZChi
b29sIHRyaWdnZXJJZGxlUGFpbnRzLCBDQ0NvbXBsZXRpb25FdmVudCosIENDVGhyZWFkOjpUYXNr
KiopOwogICAgIHZvaWQgYmVnaW5GcmFtZUNvbXBsZXRlT25JbXBsVGhyZWFkKENDQ29tcGxldGlv
bkV2ZW50Kik7CiAgICAgdm9pZCByZXF1ZXN0UmVhZGJhY2tPbkltcGxUaHJlYWQoUmVhZGJhY2tS
ZXF1ZXN0Kik7CiAgICAgdm9pZCBmaW5pc2hBbGxSZW5kZXJpbmdPbkltcGxUaHJlYWQoQ0NDb21w
bGV0aW9uRXZlbnQqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
Q0NMYXllclRyZWVIb3N0VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ND
TGF5ZXJUcmVlSG9zdFRlc3QuY3BwCmluZGV4IDM2ZmQ3ZGJkMDdiZGM3Y2YxYzg2MWZkODJhZWJj
MmIwODRhMDNhMzMuLmE2NjdlZGMwNjQ1ZDU5YWE4ODk5M2Y2YTM2NzBkNzczODgyNjkxNjIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVz
dC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RU
ZXN0LmNwcApAQCAtOTQ4LDcgKzk0OCw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxDb250ZW50TGF5ZXJDaHJvbWl1bVdpdGhVcGRhdGVUcmFja2luZz4gY3JlYXRlKENDTGF5ZXJE
ZWxlZ2F0ZSAqZGVsZWdhdGUpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBDb250ZW50TGF5ZXJDaHJv
bWl1bVdpdGhVcGRhdGVUcmFja2luZyhkZWxlZ2F0ZSkpOyB9CiAKICAgICBpbnQgcGFpbnRDb250
ZW50c0NvdW50KCkgeyByZXR1cm4gbV9wYWludENvbnRlbnRzQ291bnQ7IH0KLSAgICB2b2lkIHJl
c2V0UGFpbnRDb250ZW50c0NvdW50KCkgeyBtX3BhaW50Q29udGVudHNDb3VudCA9IDA7IH0KKyAg
ICBpbnQgaWRsZVBhaW50Q29udGVudHNDb3VudCgpIHsgcmV0dXJuIG1faWRsZVBhaW50Q29udGVu
dHNDb3VudDsgfQorICAgIHZvaWQgcmVzZXRQYWludENvbnRlbnRzQ291bnQoKSB7IG1fcGFpbnRD
b250ZW50c0NvdW50ID0gMDsgbV9pZGxlUGFpbnRDb250ZW50c0NvdW50ID0gMDt9CiAKICAgICBp
bnQgdXBkYXRlQ291bnQoKSB7IHJldHVybiBtX3VwZGF0ZUNvdW50OyB9CiAgICAgdm9pZCByZXNl
dFVwZGF0ZUNvdW50KCkgeyBtX3VwZGF0ZUNvdW50ID0gMDsgfQpAQCAtOTU5LDYgKzk2MCwxMiBA
QCBwdWJsaWM6CiAgICAgICAgIG1fcGFpbnRDb250ZW50c0NvdW50Kys7CiAgICAgfQogCisgICAg
dmlydHVhbCB2b2lkIGlkbGVQYWludENvbnRlbnRzSWZEaXJ0eSgpCisgICAgeworICAgICAgICBD
b250ZW50TGF5ZXJDaHJvbWl1bTo6aWRsZVBhaW50Q29udGVudHNJZkRpcnR5KCk7CisgICAgICAg
IG1faWRsZVBhaW50Q29udGVudHNDb3VudCsrOworICAgIH0KKwogICAgIHZpcnR1YWwgdm9pZCB1
cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBDQ1Rl
eHR1cmVVcGRhdGVyJiB1cGRhdGVyKQogICAgIHsKICAgICAgICAgQ29udGVudExheWVyQ2hyb21p
dW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoY29udGV4dCwgdXBkYXRlcik7CkBAIC05Njks
MTIgKzk3NiwxNCBAQCBwcml2YXRlOgogICAgIGV4cGxpY2l0IENvbnRlbnRMYXllckNocm9taXVt
V2l0aFVwZGF0ZVRyYWNraW5nKENDTGF5ZXJEZWxlZ2F0ZSAqZGVsZWdhdGUpCiAgICAgICAgIDog
Q29udGVudExheWVyQ2hyb21pdW0oZGVsZWdhdGUpCiAgICAgICAgICwgbV9wYWludENvbnRlbnRz
Q291bnQoMCkKKyAgICAgICAgLCBtX2lkbGVQYWludENvbnRlbnRzQ291bnQoMCkKICAgICAgICAg
LCBtX3VwZGF0ZUNvdW50KDApCiAgICAgewogICAgICAgICBzZXRCb3VuZHMoSW50U2l6ZSgxMCwg
MTApKTsKICAgICB9CiAKICAgICBpbnQgbV9wYWludENvbnRlbnRzQ291bnQ7CisgICAgaW50IG1f
aWRsZVBhaW50Q29udGVudHNDb3VudDsKICAgICBpbnQgbV91cGRhdGVDb3VudDsKIH07CiAKQEAg
LTEwMDUsNiArMTAxNCw5IEBAIHB1YmxpYzoKICAgICAgICAgLy8gcGFpbnRDb250ZW50c0lmRGly
dHkoKSBzaG91bGQgaGF2ZSBiZWVuIGNhbGxlZCBvbmNlLgogICAgICAgICBFWFBFQ1RfRVEoMSwg
bV91cGRhdGVDaGVja0xheWVyLT5wYWludENvbnRlbnRzQ291bnQoKSk7CiAKKyAgICAgICAgLy8g
aWRsZVBhaW50Q29udGVudHNJZkRpcnR5KCkgc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQgb25jZQor
ICAgICAgICBFWFBFQ1RfRVEoMSwgbV91cGRhdGVDaGVja0xheWVyLT5pZGxlUGFpbnRDb250ZW50
c0NvdW50KCkpOworCiAgICAgICAgIC8vIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoKSBzaG91
bGQgaGF2ZSBiZWVuIGNhbGxlZCB0aGUgc2FtZQogICAgICAgICAvLyBhbW91dCBvZiB0aW1lcyBh
cyBwYWludENvbnRlbnRzSWZEaXJ0eSgpLgogICAgICAgICBFWFBFQ1RfRVEobV91cGRhdGVDaGVj
a0xheWVyLT5wYWludENvbnRlbnRzQ291bnQoKSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvVGlsZWRMYXllckNocm9taXVtVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL1RpbGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCmluZGV4IDYzYWE0NTZh
ZDhkOGNjYjNmZTA0ZmFmYzE2MjBiZjBmMjRlNjdmNDMuLjIyOWU0NWJlYzNiMmEwN2IzMGIyODIw
NDhjMzk3NjdiZDBiNmRiZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvVGlsZWRMYXllckNocm9taXVtVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0LmNwcApAQCAtOTgsNiArOTgsMTYgQEAgcHVi
bGljOgogICAgICAgICBUaWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVUb1VwZGF0ZShyZWN0KTsK
ICAgICB9CiAKKyAgICB2b2lkIHByZXBhcmVUb1VwZGF0ZUlkbGUoY29uc3QgSW50UmVjdCYgcmVj
dCkKKyAgICB7CisgICAgICAgIFRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlSWRs
ZShyZWN0KTsKKyAgICB9CisKKyAgICBib29sIG5lZWRzSWRsZVBhaW50KGNvbnN0IEludFJlY3Qm
IHJlY3QpCisgICAgeworICAgICAgICByZXR1cm4gVGlsZWRMYXllckNocm9taXVtOjpuZWVkc0lk
bGVQYWludChyZWN0KTsKKyAgICB9CisKICAgICB2aXJ0dWFsIFRleHR1cmVNYW5hZ2VyKiB0ZXh0
dXJlTWFuYWdlcigpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZU1hbmFnZXI7IH0KIAogcHJpdmF0
ZToKQEAgLTE0Niw1ICsxNTYsMTA3IEBAIFRFU1QoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVz
aERpcnR5VGlsZXMpCiAgICAgRVhQRUNUX0ZBTFNFKGxheWVySW1wbC0+aGFzVGlsZUF0KDAsIDEp
KTsKIH0KIAorVEVTVChUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoSWRsZVBhaW50VGlsZXMp
Cit7CisgICAgT3duUHRyPFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IFRleHR1cmVN
YW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQsIDIqMTAyNCoxMDI0LCAxMDI0KTsKKyAgICBSZWZQ
dHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVk
TGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOworICAgIERlYnVnU2NvcGVkU2V0
SW1wbFRocmVhZCBpbXBsVGhyZWFkOworICAgIFJlZlB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4g
bGF5ZXJJbXBsID0gYWRvcHRSZWYobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDApKTsKKworICAg
IEZha2VUZXh0dXJlQWxsb2NhdG9yIHRleHR1cmVBbGxvY2F0b3I7CisgICAgQ0NUZXh0dXJlVXBk
YXRlciB1cGRhdGVyKCZ0ZXh0dXJlQWxsb2NhdG9yKTsKKworICAgIC8vIFRoZSB0aWxlIHNpemUg
aXMgMTAweDEwMC4gU2V0dXAgNXg1IHRpbGVzIHdpdGggb25lIHZpc2libGUgdGlsZSBpbiB0aGUg
Y2VudGVyLgorICAgIEludFNpemUgY29udGVudEJvdW5kcyg1MDAsIDUwMCk7CisgICAgSW50UmVj
dCBjb250ZW50UmVjdChJbnRQb2ludDo6emVybygpLCBjb250ZW50Qm91bmRzKTsKKyAgICBJbnRS
ZWN0IHZpc2libGVSZWN0KDIwMCwgMjAwLCAxMDAsIDEwMCk7CisKKyAgICAvLyBUaGlzIGludmFs
aWRhdGVzIDI1IHRpbGVzIGFuZCB0aGVuIHBhaW50cyBvbmUgdmlzaWJsZSB0aWxlLgorICAgIGxh
eWVyLT5zZXRCb3VuZHMoY29udGVudEJvdW5kcyk7CisgICAgbGF5ZXItPnNldFZpc2libGVMYXll
clJlY3QodmlzaWJsZVJlY3QpOworICAgIGxheWVyLT5pbnZhbGlkYXRlUmVjdChjb250ZW50UmVj
dCk7CisgICAgbGF5ZXItPnByZXBhcmVUb1VwZGF0ZSh2aXNpYmxlUmVjdCk7CisKKyAgICAvLyBX
ZSBzaG91bGQgbmVlZCBpZGxlLXBhaW50aW5nIGZvciAzeDMgdGlsZXMgaW4gdGhlIGNlbnRlci4K
KyAgICBFWFBFQ1RfVFJVRShsYXllci0+bmVlZHNJZGxlUGFpbnQodmlzaWJsZVJlY3QpKTsKKwor
ICAgIGxheWVyLT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKDAsIHVwZGF0ZXIpOworICAgIGxh
eWVyLT5wdXNoUHJvcGVydGllc1RvKGxheWVySW1wbC5nZXQoKSk7CisKKyAgICAvLyBXZSBzaG91
bGQgaGF2ZSBvbmUgdGlsZSBvbiB0aGUgaW1wbCBzaWRlLgorICAgIEVYUEVDVF9UUlVFKGxheWVy
SW1wbC0+aGFzVGlsZUF0KDIsIDIpKTsKKworICAgIHRleHR1cmVNYW5hZ2VyLT51bnByb3RlY3RB
bGxUZXh0dXJlcygpOworCisgICAgLy8gRm9yIHRoZSBuZXh0IGZvdXIgdXBkYXRlcywgd2Ugc2hv
dWxkIGRldGVjdCB3ZSBzdGlsbCBuZWVkIGlkbGUgcGFpbnRpbmcuCisgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCA0OyBpKyspIHsKKyAgICAgICAgbGF5ZXItPnByZXBhcmVUb1VwZGF0ZSh2aXNpYmxl
UmVjdCk7CisgICAgICAgIEVYUEVDVF9UUlVFKGxheWVyLT5uZWVkc0lkbGVQYWludCh2aXNpYmxl
UmVjdCkpOworICAgICAgICBsYXllci0+cHJlcGFyZVRvVXBkYXRlSWRsZSh2aXNpYmxlUmVjdCk7
CisgICAgICAgIGxheWVyLT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKDAsIHVwZGF0ZXIpOwor
ICAgICAgICBsYXllci0+cHVzaFByb3BlcnRpZXNUbyhsYXllckltcGwuZ2V0KCkpOworICAgICAg
ICB0ZXh0dXJlTWFuYWdlci0+dW5wcm90ZWN0QWxsVGV4dHVyZXMoKTsKKyAgICB9CisKKyAgICAv
LyBBZnRlciBmb3VyIHBhc3NlcyBvZiBpZGxlIHBhaW50aW5nLCB3ZSBzaG91bGQgYmUgZmluaXNo
ZWQgcGFpbnRpbmcKKyAgICBFWFBFQ1RfRkFMU0UobGF5ZXItPm5lZWRzSWRsZVBhaW50KHZpc2li
bGVSZWN0KSk7CisKKyAgICAvLyBXZSBzaG91bGQgaGF2ZSBvbmUgdGlsZSBzdXJyb3VuZGluZyB0
aGUgdmlzaWJsZSB0aWxlIG9uIGFsbCBzaWRlcywgYnV0IG5vIG90aGVyIHRpbGVzLgorICAgIElu
dFJlY3QgaWRsZVBhaW50VGlsZXMoMSwgMSwgMywgMyk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCA1OyBpKyspIHsKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCA1OyBqKyspIHsKKyAgICAg
ICAgICAgIGlmIChpZGxlUGFpbnRUaWxlcy5jb250YWlucyhpLCBqKSkKKyAgICAgICAgICAgICAg
ICBFWFBFQ1RfVFJVRShsYXllckltcGwtPmhhc1RpbGVBdChpLCBqKSk7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKGxheWVySW1wbC0+aGFzVGlsZUF0KGks
IGopKTsKKyAgICAgICAgfQorICAgIH0KK30KKworCitURVNUKFRpbGVkTGF5ZXJDaHJvbWl1bVRl
c3QsIGlkbGVQYWludE91dE9mTWVtb3J5KQoreworICAgIC8vIFRoZSB0aWxlIHNpemUgaXMgMTAw
eDEwMC4gU2V0dXAgNXg1IHRpbGVzIHdpdGggb25lIDF4MSB2aXNpYmxlIHRpbGUgaW4gdGhlIGNl
bnRlci4KKyAgICBJbnRTaXplIGNvbnRlbnRCb3VuZHMoMzAwLCAzMDApOworICAgIEludFJlY3Qg
Y29udGVudFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgY29udGVudEJvdW5kcyk7CisgICAgSW50UmVj
dCB2aXNpYmxlUmVjdCgxMDAsIDEwMCwgMTAwLCAxMDApOworCisgICAgLy8gV2UgaGF2ZSBlbm91
Z2ggbWVtb3J5IGZvciBvbmx5IHRoZSB2aXNpYmxlIHJlY3QsIHNvIHdlIHdpbGwgcnVuIG91dCBv
ZiBtZW1vcnkgaW4gZmlyc3QgaWRsZSBwYWludC4KKyAgICBpbnQgbWVtb3J5TGltaXQgPSA0ICog
MTAwICogMTAwOyAvLyAyIHRpbGVzLCA0IGJ5dGVzIHBlciBwaXhlbC4KKworICAgIE93blB0cjxU
ZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKG1l
bW9yeUxpbWl0LCBtZW1vcnlMaW1pdCAvIDIsIDEwMjQpOworICAgIFJlZlB0cjxGYWtlVGlsZWRM
YXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVt
KHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CisgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGlt
cGxUaHJlYWQ7CisgICAgUmVmUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllckltcGwgPSBh
ZG9wdFJlZihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMCkpOworCisgICAgRmFrZVRleHR1cmVB
bGxvY2F0b3IgdGV4dHVyZUFsbG9jYXRvcjsKKyAgICBDQ1RleHR1cmVVcGRhdGVyIHVwZGF0ZXIo
JnRleHR1cmVBbGxvY2F0b3IpOworCisgICAgLy8gVGhpcyBpbnZhbGlkYXRlcyA5IHRpbGVzIGFu
ZCB0aGVuIHBhaW50cyBvbmUgdmlzaWJsZSB0aWxlLgorICAgIGxheWVyLT5zZXRCb3VuZHMoY29u
dGVudEJvdW5kcyk7CisgICAgbGF5ZXItPnNldFZpc2libGVMYXllclJlY3QodmlzaWJsZVJlY3Qp
OworICAgIGxheWVyLT5pbnZhbGlkYXRlUmVjdChjb250ZW50UmVjdCk7CisgICAgbGF5ZXItPnBy
ZXBhcmVUb1VwZGF0ZSh2aXNpYmxlUmVjdCk7CisKKyAgICAvLyBXZSBzaG91bGQgbmVlZCBpZGxl
LXBhaW50aW5nIGZvciAzeDMgdGlsZXMgc3Vyb3VuZGluZyB2aXNpYmxlIHRpbGUuCisgICAgRVhQ
RUNUX1RSVUUobGF5ZXItPm5lZWRzSWRsZVBhaW50KHZpc2libGVSZWN0KSk7CisKKyAgICBsYXll
ci0+dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcygwLCB1cGRhdGVyKTsKKyAgICBsYXllci0+cHVz
aFByb3BlcnRpZXNUbyhsYXllckltcGwuZ2V0KCkpOworCisgICAgLy8gV2Ugc2hvdWxkIGhhdmUg
b25lIHRpbGUgb24gdGhlIGltcGwgc2lkZS4KKyAgICBFWFBFQ1RfVFJVRShsYXllckltcGwtPmhh
c1RpbGVBdCgxLCAxKSk7CisKKyAgICB0ZXh0dXJlTWFuYWdlci0+dW5wcm90ZWN0QWxsVGV4dHVy
ZXMoKTsKKyAgICBsYXllci0+cHJlcGFyZVRvVXBkYXRlKHZpc2libGVSZWN0KTsKKyAgICBsYXll
ci0+cHJlcGFyZVRvVXBkYXRlSWRsZSh2aXNpYmxlUmVjdCk7CisKKyAgICAvLyBXZSBzaG91bGRu
J3Qgc2lnbmFsIHdlIG5lZWQgYW5vdGhlciBpZGxlIHBhaW50IGFmdGVyIHdlIHJ1biBvdXQgb2Yg
bWVtb3J5LgorICAgIEVYUEVDVF9GQUxTRShsYXllci0+bmVlZHNJZGxlUGFpbnQodmlzaWJsZVJl
Y3QpKTsKKworICAgIGxheWVyLT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKDAsIHVwZGF0ZXIp
OworICAgIGxheWVyLT5wdXNoUHJvcGVydGllc1RvKGxheWVySW1wbC5nZXQoKSk7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118457</attachid>
            <date>2011-12-08 13:19:11 -0800</date>
            <delta_ts>2011-12-09 18:52:55 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72686-20111208131910.patch</filename>
            <type>text/plain</type>
            <size>32039</size>
            <attacher name="Eric Penner">epenner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyMjk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWQ0YjMwNGE3NGU0NjQ1
NjRiOTE5YTUxNTdlZTRiOGQ2ZTNjZDk3Mi4uYWMxYTZhM2JmMzFlZmUyYTcyNWMxMTI5NDBlOTli
NmMyNWE2YmYyMSAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDExLTEyLTA4ICBFcmlj
IFBlbm5lciAgPGVwZW5uZXJAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIE5lZWQg
dG8gcHJlcGFpbnQgdGlsZXMgaW4gVGlsZWRMYXllckNocm9taXVtCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjY4NgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExh
eWVyQ2hyb21pdW06OmlkbGVQYWludENvbnRlbnRzSWZEaXJ0eSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmg6CisgICAgICAgIChXZWJD
b3JlOjpMYXllckNocm9taXVtOjppZGxlUGFpbnRDb250ZW50c0lmRGlydHkpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYW5hZ2VyOjpwcm90ZWN0VGV4dHVyZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6VGlsZWRMYXllckNocm9taXVtKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6Y2xlYW51cFJlc291cmNlcyk6CisgICAg
ICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJj
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRh
dGVUaWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVU
b1VwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVU
b1VwZGF0ZUlkbGUpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjpuZWVk
c0lkbGVQYWludCk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OmlkbGVQ
YWludFJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5
ZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OkND
TGF5ZXJUcmVlSG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmRpZENv
bW1pdEFuZERyYXdGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmNv
bXBvc2l0ZUFuZFJlYWRiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6
dXBkYXRlTGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6cGFpbnRD
b250ZW50c0lmRGlydHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpwYWlu
dE1hc2tBbmRSZXBsaWNhRm9yUmVuZGVyU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyVHJlZUhvc3Q6OnBhaW50TGF5ZXJDb250ZW50cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Lmg6CisKIDIwMTEtMTItMDcgIFNoYXdu
IFNpbmdoICA8c2hhd25zaW5naEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBD
bGVhcmluZyByb290IHN1cmZhY2Ugc2hvdWxkIGhhcHBlbiBhZnRlciBkYW1hZ2UgdHJhY2tpbmcK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggZjhkZWMyMjkwZWJmM2ZlYzM0ZWNjNmRkNmZl
NmZkOTRjMjlkZGZlYy4uMGY5MTc4M2M5ZWYyZWRhNWYwN2NiMWFlYjFmNDUyZDZjOGZkMjYwOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMSBAQAorMjAxMS0xMi0wOCAg
RXJpYyBQZW5uZXIgIDxlcGVubmVyQGdvb2dsZS5jb20+CisKKyAgICAgICAgW2Nocm9taXVtXSBO
ZWVkIHRvIHByZXBhaW50IHRpbGVzIGluIFRpbGVkTGF5ZXJDaHJvbWl1bQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI2ODYKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9z
dFRlc3QuY3BwOgorICAgICAgICAoV1RGOjpDb250ZW50TGF5ZXJDaHJvbWl1bVdpdGhVcGRhdGVU
cmFja2luZzo6aWRsZVBhaW50Q29udGVudHNDb3VudCk6CisgICAgICAgIChXVEY6OkNvbnRlbnRM
YXllckNocm9taXVtV2l0aFVwZGF0ZVRyYWNraW5nOjpyZXNldFBhaW50Q29udGVudHNDb3VudCk6
CisgICAgICAgIChXVEY6OkNvbnRlbnRMYXllckNocm9taXVtV2l0aFVwZGF0ZVRyYWNraW5nOjpp
ZGxlUGFpbnRDb250ZW50c0lmRGlydHkpOgorICAgICAgICAoV1RGOjpDb250ZW50TGF5ZXJDaHJv
bWl1bVdpdGhVcGRhdGVUcmFja2luZzo6Q29udGVudExheWVyQ2hyb21pdW1XaXRoVXBkYXRlVHJh
Y2tpbmcpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0T3BhY2l0eUNoYW5nZTo6
YWZ0ZXJUZXN0KToKKyAgICAgICAgKiB0ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0LmNwcDoK
KyAgICAgICAgKFdURjo6RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlSWRs
ZSk6CisgICAgICAgIChXVEY6OkZha2VUaWxlZExheWVyQ2hyb21pdW06Om5lZWRzSWRsZVBhaW50
KToKKyAgICAgICAgKFdURjo6VEVTVCk6CisKIDIwMTEtMTItMDcgIEFsZXhhbmRyZSBFbGlhcyAg
PGFlbGlhc0Bnb29nbGUuY29tPgogCiAgICAgICAgIFtjaHJvbWl1bV0gUHJlc2VydmUgb3JpZ2lu
YWwgcGFnZVNjYWxlIGxpbWl0cyBpbiBXZWJWaWV3SW1wbApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVy
Q2hyb21pdW0uY3BwCmluZGV4IDJhMjQ2NmQ5MTI5YWVjMzY0MDkzMjI5Y2I5MzVhZjgyZDUwNzI0
YjYuLmMyODRlZWEzMWE0MDBlM2U5MjUzMjk1YjVmMjYwMzQ0OWY5ZDgwZGEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNo
cm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTEwOSw2ICsxMDksMjAgQEAgdm9pZCBDb250
ZW50TGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c0lmRGlydHkoKQogICAgIG1fbmVlZHNEaXNw
bGF5ID0gZmFsc2U7CiB9CiAKK3ZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OmlkbGVQYWludENv
bnRlbnRzSWZEaXJ0eSgpCit7CisgICAgaWYgKCFkcmF3c0NvbnRlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0ID0gdmlzaWJsZUxheWVyUmVjdCgp
OworICAgIGlmIChsYXllclJlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBw
cmVwYXJlVG9VcGRhdGVJZGxlKGxheWVyUmVjdCk7CisgICAgaWYgKG5lZWRzSWRsZVBhaW50KGxh
eWVyUmVjdCkpCisgICAgICAgIHNldE5lZWRzQ29tbWl0KCk7Cit9CisKIGJvb2wgQ29udGVudExh
eWVyQ2hyb21pdW06OmRyYXdzQ29udGVudCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fZGVsZWdh
dGUgJiYgbV9kZWxlZ2F0ZS0+ZHJhd3NDb250ZW50KCkgJiYgVGlsZWRMYXllckNocm9taXVtOjpk
cmF3c0NvbnRlbnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oCmluZGV4IGI4MzRl
Njc2YmQ2MzQ0NWFhNDUzYjM2NWVlZTI4MDI0MGYzODA5YzEuLjBjNTc0YjVkZmRjMGE1NzFiODEx
YmUwMzk3NjRhYzc1YjFjMmUzZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaApA
QCAtNTAsNiArNTAsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+Q29udGVudExheWVyQ2hyb21p
dW0oKTsKIAogICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzSWZEaXJ0eSgpOworICAgIHZp
cnR1YWwgdm9pZCBpZGxlUGFpbnRDb250ZW50c0lmRGlydHkoKTsKIAogcHJvdGVjdGVkOgogICAg
IGV4cGxpY2l0IENvbnRlbnRMYXllckNocm9taXVtKENDTGF5ZXJEZWxlZ2F0ZSopOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJv
bWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJD
aHJvbWl1bS5oCmluZGV4IDVlMDVjMTU3Yzc5NWNlMWUwNjRkZjJkZjk2NDQwN2FkYmZlNTUwYjAu
LmU4YzcyYWI0NDlhMWUzZjU3OTdiODI0MTFlZGE5YmI0MTA0NTBlN2IgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9t
aXVtLmgKQEAgLTE2MSw2ICsxNjEsNyBAQCBwdWJsaWM6CiAgICAgLy8gVGhlc2UgbWV0aG9kcyB0
eXBpY2FsbHkgbmVlZCB0byBiZSBvdmVyd3JpdHRlbiBieSBkZXJpdmVkIGNsYXNzZXMuCiAgICAg
dmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAg
dmlydHVhbCB2b2lkIHBhaW50Q29udGVudHNJZkRpcnR5KCkgeyB9CisgICAgdmlydHVhbCB2b2lk
IGlkbGVQYWludENvbnRlbnRzSWZEaXJ0eSgpIHsgfQogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVD
b21wb3NpdG9yUmVzb3VyY2VzKEdyYXBoaWNzQ29udGV4dDNEKiwgQ0NUZXh0dXJlVXBkYXRlciYp
IHsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRJc01hc2soYm9vbCkgeyB9CiAgICAgdmlydHVhbCB2
b2lkIHVucmVzZXJ2ZUNvbnRlbnRzVGV4dHVyZSgpIHsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuY3Bw
CmluZGV4IGQ2NmIwNmFlM2QyMGRhOWJkMTUxMzFmNTcwZTNhNjczNjVjNjM4ZDIuLmVkZDFmNjgw
OWM0ZTkxZTMwN2MzYjI4ZjA4ZTA3YmRmODExODkxNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5j
cHAKQEAgLTE0MSw3ICsxNDEsNiBAQCBib29sIFRleHR1cmVNYW5hZ2VyOjppc1Byb3RlY3RlZChU
ZXh0dXJlVG9rZW4gdG9rZW4pCiB2b2lkIFRleHR1cmVNYW5hZ2VyOjpwcm90ZWN0VGV4dHVyZShU
ZXh0dXJlVG9rZW4gdG9rZW4pCiB7CiAgICAgQVNTRVJUKGhhc1RleHR1cmUodG9rZW4pKTsKLSAg
ICBBU1NFUlQoIW1fdGV4dHVyZXMuZ2V0KHRva2VuKS5pc1Byb3RlY3RlZCk7CiAgICAgVGV4dHVy
ZUluZm8gaW5mbyA9IG1fdGV4dHVyZXMudGFrZSh0b2tlbik7CiAgICAgaW5mby5pc1Byb3RlY3Rl
ZCA9IHRydWU7CiAgICAgbV90ZXh0dXJlcy5hZGQodG9rZW4sIGluZm8pOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9t
aXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVk
TGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggNWM1NWY1OWJmM2U3MzcyZmU5ZWM1MTJlZjYzNjExMDFh
YzVhMDVlNS4uZTMxOGNiMTU3YTQxZWFlMzliNmRjYzNiMWRmNWZkNmZkNjZmMWMzMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXll
ckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCkBAIC03Miw2ICs3Miw3IEBAIFRpbGVkTGF5ZXJD
aHJvbWl1bTo6VGlsZWRMYXllckNocm9taXVtKENDTGF5ZXJEZWxlZ2F0ZSogZGVsZWdhdGUpCiAg
ICAgOiBMYXllckNocm9taXVtKGRlbGVnYXRlKQogICAgICwgbV90ZXh0dXJlRm9ybWF0KEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0pCiAgICAgLCBtX3NraXBzRHJhdyhmYWxzZSkKKyAg
ICAsIG1fc2tpcHNJZGxlUGFpbnQoZmFsc2UpCiAgICAgLCBtX3RleHR1cmVPcmllbnRhdGlvbihM
YXllclRleHR1cmVVcGRhdGVyOjpJbnZhbGlkT3JpZW50YXRpb24pCiAgICAgLCBtX3NhbXBsZWRU
ZXhlbEZvcm1hdChMYXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXRJbnZhbGlk
KQogICAgICwgbV90aWxpbmdPcHRpb24oQXV0b1RpbGUpCkBAIC05Myw3ICs5NCw3IEBAIHZvaWQg
VGlsZWRMYXllckNocm9taXVtOjpjbGVhbnVwUmVzb3VyY2VzKCkKIAogICAgIG1fdGlsZXIuY2xl
YXIoKTsKICAgICBtX3BhaW50UmVjdCA9IEludFJlY3QoKTsKLSAgICBtX3JlcXVlc3RlZFVwZGF0
ZVJlY3QgPSBJbnRSZWN0KCk7CisgICAgbV9yZXF1ZXN0ZWRVcGRhdGVUaWxlc1JlY3QgPSBJbnRS
ZWN0KCk7CiB9CiAKIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjp1cGRhdGVUaWxlU2l6ZUFuZFRp
bGluZ09wdGlvbigpCkBAIC0xNzksMTEgKzE4MCwxMyBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1
bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCosIENDVGV4dHVy
ZQogICAgIEFTU0VSVChtX3RpbGVyKTsKIAogICAgIC8vIFBhaW50aW5nIGNvdWxkIGNhdXNlIGNv
bXBvc2l0aW5nIHRvIGdldCB0dXJuZWQgb2ZmLCB3aGljaCBtYXkgY2F1c2UgdGhlIHRpbGVyIHRv
IGJlY29tZSBpbnZhbGlkYXRlZCBtaWQtdXBkYXRlLgotICAgIGlmIChtX3NraXBzRHJhdyB8fCBt
X3JlcXVlc3RlZFVwZGF0ZVJlY3QuaXNFbXB0eSgpIHx8ICFtX3RpbGVyIHx8ICFtX3RpbGVyLT5u
dW1UaWxlcygpKQorICAgIGlmIChtX3NraXBzRHJhdyB8fCBtX3JlcXVlc3RlZFVwZGF0ZVRpbGVz
UmVjdC5pc0VtcHR5KCkgfHwgIW1fdGlsZXIgfHwgIW1fdGlsZXItPm51bVRpbGVzKCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGludCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b207Ci0gICAgbV90
aWxlci0+Y29udGVudFJlY3RUb1RpbGVJbmRpY2VzKG1fcmVxdWVzdGVkVXBkYXRlUmVjdCwgbGVm
dCwgdG9wLCByaWdodCwgYm90dG9tKTsKKyAgICBpbnQgbGVmdCA9IG1fcmVxdWVzdGVkVXBkYXRl
VGlsZXNSZWN0LngoKTsKKyAgICBpbnQgdG9wID0gbV9yZXF1ZXN0ZWRVcGRhdGVUaWxlc1JlY3Qu
eSgpOworICAgIGludCByaWdodCA9IG1fcmVxdWVzdGVkVXBkYXRlVGlsZXNSZWN0Lm1heFgoKSAt
IDE7CisgICAgaW50IGJvdHRvbSA9IG1fcmVxdWVzdGVkVXBkYXRlVGlsZXNSZWN0Lm1heFkoKSAt
IDE7CiAgICAgZm9yIChpbnQgaiA9IHRvcDsgaiA8PSBib3R0b207ICsraikgewogICAgICAgICBm
b3IgKGludCBpID0gbGVmdDsgaSA8PSByaWdodDsgKytpKSB7CiAgICAgICAgICAgICBVcGRhdGFi
bGVUaWxlKiB0aWxlID0gdGlsZUF0KGksIGopOwpAQCAtMzQyLDM4ICszNDUsMTcgQEAgdm9pZCBU
aWxlZExheWVyQ2hyb21pdW06OnByb3RlY3RUaWxlVGV4dHVyZXMoY29uc3QgSW50UmVjdCYgY29u
dGVudFJlY3QpCiAgICAgfQogfQogCi12b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJlcGFyZVRv
VXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQordm9pZCBUaWxlZExheWVyQ2hyb21p
dW06OnByZXBhcmVUb1VwZGF0ZVRpbGVzKGJvb2wgaWRsZSwgaW50IGxlZnQsIGludCB0b3AsIGlu
dCByaWdodCwgaW50IGJvdHRvbSkKIHsKLSAgICBpZiAoIW1fdGlsZXIpCi0gICAgICAgIGNyZWF0
ZVRpbGVyKGlzTm9uQ29tcG9zaXRlZENvbnRlbnQoKSA/IENDTGF5ZXJUaWxpbmdEYXRhOjpOb0Jv
cmRlclRleGVscyA6IENDTGF5ZXJUaWxpbmdEYXRhOjpIYXNCb3JkZXJUZXhlbHMpOwotCi0gICAg
QVNTRVJUKG1fdGlsZXIpOwotCi0gICAgbV9za2lwc0RyYXcgPSBmYWxzZTsKLQogICAgIC8vIFJl
c2V0IG1fdXBkYXRlUmVjdCBmb3IgYWxsIHRpbGVzLgogICAgIGZvciAoQ0NMYXllclRpbGluZ0Rh
dGE6OlRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX3RpbGVyLT50aWxlcygpLmJlZ2lu
KCk7IGl0ZXIgIT0gbV90aWxlci0+dGlsZXMoKS5lbmQoKTsgKytpdGVyKSB7CiAgICAgICAgIFVw
ZGF0YWJsZVRpbGUqIHRpbGUgPSBzdGF0aWNfY2FzdDxVcGRhdGFibGVUaWxlKj4oaXRlci0+c2Vj
b25kLmdldCgpKTsKICAgICAgICAgdGlsZS0+bV91cGRhdGVSZWN0ID0gSW50UmVjdCgpOwogICAg
IH0KIAotICAgIGlmIChjb250ZW50UmVjdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9yZXF1ZXN0
ZWRVcGRhdGVSZWN0ID0gSW50UmVjdCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
bV90aWxlci0+Z3Jvd0xheWVyVG9Db250YWluKGNvbnRlbnRSZWN0KTsKLQotICAgIGlmICghbV90
aWxlci0+bnVtVGlsZXMoKSkgewotICAgICAgICBtX3JlcXVlc3RlZFVwZGF0ZVJlY3QgPSBJbnRS
ZWN0KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICAvLyBDcmVhdGUgdGlsZXMgYXMg
bmVlZGVkLCBleHBhbmRpbmcgYSBkaXJ0eSByZWN0IHRvIGNvbnRhaW4gYWxsCiAgICAgLy8gdGhl
IGRpcnR5IHJlZ2lvbnMgY3VycmVudGx5IGJlaW5nIGRyYXduLgogICAgIEludFJlY3QgZGlydHlM
YXllclJlY3Q7Ci0gICAgaW50IGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbTsKLSAgICBtX3RpbGVy
LT5jb250ZW50UmVjdFRvVGlsZUluZGljZXMoY29udGVudFJlY3QsIGxlZnQsIHRvcCwgcmlnaHQs
IGJvdHRvbSk7CiAgICAgZm9yIChpbnQgaiA9IHRvcDsgaiA8PSBib3R0b207ICsraikgewogICAg
ICAgICBmb3IgKGludCBpID0gbGVmdDsgaSA8PSByaWdodDsgKytpKSB7CiAgICAgICAgICAgICBV
cGRhdGFibGVUaWxlKiB0aWxlID0gdGlsZUF0KGksIGopOwpAQCAtMzg0LDggKzM2NiwxMSBAQCB2
b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNv
bnRlbnRSZWN0KQogICAgICAgICAgICAgICAgIHRpbGUtPm1fZGlydHlMYXllclJlY3QgPSBtX3Rp
bGVyLT50aWxlTGF5ZXJSZWN0KHRpbGUpOwogCiAgICAgICAgICAgICBpZiAoIXRpbGUtPm1hbmFn
ZWRUZXh0dXJlKCktPnJlc2VydmUobV90aWxlci0+dGlsZVNpemUoKSwgbV90ZXh0dXJlRm9ybWF0
KSkgewotICAgICAgICAgICAgICAgIG1fc2tpcHNEcmF3ID0gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICBjbGVhbnVwUmVzb3VyY2VzKCk7CisgICAgICAgICAgICAgICAgbV9za2lwc0lkbGVQYWludCA9
IHRydWU7CisgICAgICAgICAgICAgICAgaWYgKCFpZGxlKSB7CisgICAgICAgICAgICAgICAgICAg
IG1fc2tpcHNEcmF3ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgY2xlYW51cFJlc291cmNl
cygpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICB9CiAKQEAgLTM5MywyMiArMzc4LDIyIEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpw
cmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCiAgICAgICAgIH0KICAg
ICB9CiAKLSAgICAvLyBEdWUgdG8gYm9yZGVycywgd2hlbiB0aGUgcGFpbnQgcmVjdCBpcyBleHRl
bmRlZCB0byB0aWxlIGJvdW5kYXJpZXMsIGl0Ci0gICAgLy8gbWF5IGVuZCB1cCBvdmVybGFwcGlu
ZyBtb3JlIHRpbGVzIHRoYW4gdGhlIG9yaWdpbmFsIGNvbnRlbnQgcmVjdC4gUmVjb3JkCi0gICAg
Ly8gdGhhdCBvcmlnaW5hbCByZWN0IHNvIHdlIGRvbid0IHVwbG9hZCBtb3JlIHRpbGVzIHRoYW4g
bmVjZXNzYXJ5LgotICAgIG1fcmVxdWVzdGVkVXBkYXRlUmVjdCA9IGNvbnRlbnRSZWN0OwotCiAg
ICAgbV9wYWludFJlY3QgPSBtX3RpbGVyLT5sYXllclJlY3RUb0NvbnRlbnRSZWN0KGRpcnR5TGF5
ZXJSZWN0KTsKICAgICBpZiAoZGlydHlMYXllclJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1
cm47CiAKKyAgICAvLyBEdWUgdG8gYm9yZGVycywgd2hlbiB0aGUgcGFpbnQgcmVjdCBpcyBleHRl
bmRlZCB0byB0aWxlIGJvdW5kYXJpZXMsIGl0CisgICAgLy8gbWF5IGVuZCB1cCBvdmVybGFwcGlu
ZyBtb3JlIHRpbGVzIHRoYW4gdGhlIG9yaWdpbmFsIGNvbnRlbnQgcmVjdC4gUmVjb3JkCisgICAg
Ly8gdGhlIG9yaWdpbmFsIHRpbGVzIHNvIHdlIGRvbid0IHVwbG9hZCBtb3JlIHRpbGVzIHRoYW4g
bmVjZXNzYXJ5LgorICAgIGlmICghbV9wYWludFJlY3QuaXNFbXB0eSgpKQorICAgICAgICBtX3Jl
cXVlc3RlZFVwZGF0ZVRpbGVzUmVjdCA9IEludFJlY3QobGVmdCwgdG9wLCByaWdodCAtIGxlZnQg
KyAxLCBib3R0b20gLSB0b3AgKyAxKTsKKwogICAgIC8vIENhbGxpbmcgcHJlcGFyZVRvVXBkYXRl
KCkgY2FsbHMgaW50byBXZWJLaXQgdG8gcGFpbnQsIHdoaWNoIG1heSBoYXZlIHRoZSBzaWRlCiAg
ICAgLy8gZWZmZWN0IG9mIGRpc2FibGluZyBjb21wb3NpdGluZywgd2hpY2ggY2F1c2VzIG91ciBy
ZWZlcmVuY2UgdG8gdGhlIHRleHR1cmUgdXBkYXRlciB0byBiZSBkZWxldGVkLgogICAgIC8vIEhv
d2V2ZXIsIHdlIGNhbid0IGZyZWUgdGhlIG1lbW9yeSBiYWNraW5nIHRoZSBHcmFwaGljc0NvbnRl
eHQgdW50aWwgdGhlIHBhaW50IGZpbmlzaGVzLAogICAgIC8vIHNvIHdlIGdyYWIgYSBsb2NhbCBy
ZWZlcmVuY2UgaGVyZSB0byBob2xkIHRoZSB1cGRhdGVyIGFsaXZlIHVudGlsIHRoZSBwYWludCBj
b21wbGV0ZXMuCiAgICAgUmVmUHRyPExheWVyVGV4dHVyZVVwZGF0ZXI+IHByb3RlY3Rvcih0ZXh0
dXJlVXBkYXRlcigpKTsKICAgICB0ZXh0dXJlVXBkYXRlcigpLT5wcmVwYXJlVG9VcGRhdGUobV9w
YWludFJlY3QsIG1fdGlsZXItPnRpbGVTaXplKCksIG1fdGlsZXItPmhhc0JvcmRlclRleGVscygp
LCBjb250ZW50c1NjYWxlKCkpOwotICAgIG1fdGlsZXItPmNvbnRlbnRSZWN0VG9UaWxlSW5kaWNl
cyhtX3JlcXVlc3RlZFVwZGF0ZVJlY3QsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CiAgICAg
Zm9yIChpbnQgaiA9IHRvcDsgaiA8PSBib3R0b207ICsraikgewogICAgICAgICBmb3IgKGludCBp
ID0gbGVmdDsgaSA8PSByaWdodDsgKytpKSB7CiAgICAgICAgICAgICBVcGRhdGFibGVUaWxlKiB0
aWxlID0gdGlsZUF0KGksIGopOwpAQCAtNDQwLDUgKzQyNSwxMjAgQEAgdm9pZCBUaWxlZExheWVy
Q2hyb21pdW06OnByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKICAg
ICB9CiB9CiAKKwordm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVUb1VwZGF0ZShjb25z
dCBJbnRSZWN0JiBjb250ZW50UmVjdCkKK3sKKyAgICBpZiAoIW1fdGlsZXIpCisgICAgICAgIGNy
ZWF0ZVRpbGVyKGlzTm9uQ29tcG9zaXRlZENvbnRlbnQoKSA/IENDTGF5ZXJUaWxpbmdEYXRhOjpO
b0JvcmRlclRleGVscyA6IENDTGF5ZXJUaWxpbmdEYXRhOjpIYXNCb3JkZXJUZXhlbHMpOworCisg
ICAgQVNTRVJUKG1fdGlsZXIpOworCisgICAgbV9za2lwc0RyYXcgPSBmYWxzZTsKKyAgICBtX3Nr
aXBzSWRsZVBhaW50ID0gZmFsc2U7CisgICAgbV9yZXF1ZXN0ZWRVcGRhdGVUaWxlc1JlY3QgPSBJ
bnRSZWN0KCk7CisgICAgbV9wYWludFJlY3QgPSBJbnRSZWN0KCk7CisKKyAgICBpZiAoY29udGVu
dFJlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3RpbGVyLT5ncm93TGF5
ZXJUb0NvbnRhaW4oY29udGVudFJlY3QpOworCisgICAgaWYgKCFtX3RpbGVyLT5udW1UaWxlcygp
KQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tOwor
ICAgIG1fdGlsZXItPmNvbnRlbnRSZWN0VG9UaWxlSW5kaWNlcyhjb250ZW50UmVjdCwgbGVmdCwg
dG9wLCByaWdodCwgYm90dG9tKTsKKworICAgIHByZXBhcmVUb1VwZGF0ZVRpbGVzKGZhbHNlLCBs
ZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworfQorCit2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6
cHJlcGFyZVRvVXBkYXRlSWRsZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKK3sKKyAgICAv
LyBBYm9ydCBpZiB3ZSBoYXZlIGFscmVhZHkgcHJlcGFyZWQgYSBwYWludCBvciBydW4gb3V0IG9m
IG1lbW9yeS4KKyAgICBpZiAobV9za2lwc0lkbGVQYWludCB8fCAhbV9wYWludFJlY3QuaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobV90aWxlcik7CisKKyAgICBJbnRS
ZWN0IGlkbGVQYWludENvbnRlbnRSZWN0ID0gaWRsZVBhaW50UmVjdChjb250ZW50UmVjdCk7Cisg
ICAgbV90aWxlci0+Z3Jvd0xheWVyVG9Db250YWluKGlkbGVQYWludENvbnRlbnRSZWN0KTsKKwor
ICAgIGlmICghbV90aWxlci0+bnVtVGlsZXMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8g
UHJvdGVjdCBhbnkgdGV4dHVyZXMgaW4gdGhlIHByZS1wYWludCBhcmVhIHNvIHdlIGRvbid0IGVu
ZCB1cCBqdXN0CisgICAgLy8gcmVjbGFpbWluZyB0aGVtIGJlbG93LgorICAgIHByb3RlY3RUaWxl
VGV4dHVyZXMoaWRsZVBhaW50Q29udGVudFJlY3QpOworCisgICAgLy8gRXhwYW5kIG91dHdhcmRz
IHVudGlsIHdlIGZpbmQgYSBkaXJ0eSByb3cgb3IgY29sdW1uIHRvIHVwZGF0ZS4KKyAgICBpbnQg
bGVmdCwgdG9wLCByaWdodCwgYm90dG9tOworICAgIG1fdGlsZXItPmNvbnRlbnRSZWN0VG9UaWxl
SW5kaWNlcyhjb250ZW50UmVjdCwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKKyAgICBpbnQg
cHJlcGFpbnRMZWZ0LCBwcmVwYWludFRvcCwgcHJlcGFpbnRSaWdodCwgcHJlcGFpbnRCb3R0b207
CisgICAgbV90aWxlci0+Y29udGVudFJlY3RUb1RpbGVJbmRpY2VzKGlkbGVQYWludENvbnRlbnRS
ZWN0LCBwcmVwYWludExlZnQsIHByZXBhaW50VG9wLCBwcmVwYWludFJpZ2h0LCBwcmVwYWludEJv
dHRvbSk7CisgICAgd2hpbGUgKCFtX3NraXBzSWRsZVBhaW50ICYmIChsZWZ0ID4gcHJlcGFpbnRM
ZWZ0IHx8IHRvcCA+IHByZXBhaW50VG9wIHx8IHJpZ2h0IDwgcHJlcGFpbnRSaWdodCB8fCBib3R0
b20gPCBwcmVwYWludEJvdHRvbSkpIHsKKyAgICAgICAgaWYgKGJvdHRvbSA8IHByZXBhaW50Qm90
dG9tKSB7CisgICAgICAgICAgICArK2JvdHRvbTsKKyAgICAgICAgICAgIHByZXBhcmVUb1VwZGF0
ZVRpbGVzKHRydWUsIGxlZnQsIGJvdHRvbSwgcmlnaHQsIGJvdHRvbSk7CisgICAgICAgICAgICBp
ZiAoIW1fcGFpbnRSZWN0LmlzRW1wdHkoKSB8fCBtX3NraXBzSWRsZVBhaW50KQorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmICh0b3AgPiBwcmVwYWludFRvcCkg
eworICAgICAgICAgICAgLS10b3A7CisgICAgICAgICAgICBwcmVwYXJlVG9VcGRhdGVUaWxlcyh0
cnVlLCBsZWZ0LCB0b3AsIHJpZ2h0LCB0b3ApOworICAgICAgICAgICAgaWYgKCFtX3BhaW50UmVj
dC5pc0VtcHR5KCkgfHwgbV9za2lwc0lkbGVQYWludCkKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBpZiAobGVmdCA+IHByZXBhaW50TGVmdCkgeworICAgICAgICAg
ICAgLS1sZWZ0OworICAgICAgICAgICAgcHJlcGFyZVRvVXBkYXRlVGlsZXModHJ1ZSwgbGVmdCwg
dG9wLCBsZWZ0LCBib3R0b20pOworICAgICAgICAgICAgaWYgKCFtX3BhaW50UmVjdC5pc0VtcHR5
KCkgfHwgbV9za2lwc0lkbGVQYWludCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBpZiAocmlnaHQgPCBwcmVwYWludFJpZ2h0KSB7CisgICAgICAgICAgICArK3Jp
Z2h0OworICAgICAgICAgICAgcHJlcGFyZVRvVXBkYXRlVGlsZXModHJ1ZSwgcmlnaHQsIHRvcCwg
cmlnaHQsIGJvdHRvbSk7CisgICAgICAgICAgICBpZiAoIW1fcGFpbnRSZWN0LmlzRW1wdHkoKSB8
fCBtX3NraXBzSWRsZVBhaW50KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgfQorfQorCitib29sIFRpbGVkTGF5ZXJDaHJvbWl1bTo6bmVlZHNJZGxlUGFpbnQoY29uc3Qg
SW50UmVjdCYgY29udGVudFJlY3QpCit7CisgICAgaWYgKG1fc2tpcHNJZGxlUGFpbnQpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIEFTU0VSVChtX3RpbGVyKTsKKworICAgIEludFJlY3Qg
aWRsZVBhaW50Q29udGVudFJlY3QgPSBpZGxlUGFpbnRSZWN0KGNvbnRlbnRSZWN0KTsKKworICAg
IGludCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b207CisgICAgbV90aWxlci0+Y29udGVudFJlY3RU
b1RpbGVJbmRpY2VzKGlkbGVQYWludENvbnRlbnRSZWN0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0
b20pOworICAgIGZvciAoaW50IGogPSB0b3A7IGogPD0gYm90dG9tOyArK2opIHsKKyAgICAgICAg
Zm9yIChpbnQgaSA9IGxlZnQ7IGkgPD0gcmlnaHQ7ICsraSkgeworICAgICAgICAgICAgaWYgKG1f
cmVxdWVzdGVkVXBkYXRlVGlsZXNSZWN0LmNvbnRhaW5zKEludFBvaW50KGksIGopKSkKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIFVwZGF0YWJsZVRpbGUqIHRpbGUgPSB0
aWxlQXQoaSwgaik7CisgICAgICAgICAgICBpZiAoIXRpbGUgfHwgIXRpbGUtPm1hbmFnZWRUZXh0
dXJlKCktPmlzVmFsaWQobV90aWxlci0+dGlsZVNpemUoKSwgbV90ZXh0dXJlRm9ybWF0KSB8fCB0
aWxlLT5pc0RpcnR5KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
KyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitJbnRSZWN0IFRpbGVkTGF5ZXJDaHJvbWl1
bTo6aWRsZVBhaW50UmVjdChjb25zdCBJbnRSZWN0JiB2aXNpYmxlQ29udGVudFJlY3QpCit7Cisg
ICAgQVNTRVJUKG1fdGlsZXIpOworICAgIEludFJlY3QgcHJlcGFpbnRSZWN0ID0gdmlzaWJsZUNv
bnRlbnRSZWN0OworICAgIC8vIEZJWE1FOiBUaGlzIGNhbiBiZSBtYWRlIGEgbG90IGxhcmdlciBp
ZiB3ZSBjYW46CisgICAgLy8gLSByZXNlcnZlIG1lbW9yeSBhdCBhIGxvd2VyIHByaW9yaXR5IHRo
YW4gZm9yIHZpc2libGUgY29udGVudAorICAgIC8vIC0gb25seSByZXNlcnZlIGlkbGUgcGFpbnQg
dGlsZXMgdXAgdG8gYSBtZW1vcnkgcmVjbGFpbSB0aHJlc2hvbGQgYW5kCisgICAgLy8gLSBpbnN1
cmUgd2UgcGxheSBuaWNlbHkgd2l0aCBvdGhlciBsYXllcnMKKyAgICBwcmVwYWludFJlY3QuaW5m
bGF0ZVgobV90aWxlci0+dGlsZVNpemUoKS53aWR0aCgpKTsKKyAgICBwcmVwYWludFJlY3QuaW5m
bGF0ZVkobV90aWxlci0+dGlsZVNpemUoKS5oZWlnaHQoKSk7CisgICAgcHJlcGFpbnRSZWN0Lmlu
dGVyc2VjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIGNvbnRlbnRCb3VuZHMoKSkpOworICAg
IHJldHVybiBwcmVwYWludFJlY3Q7Cit9CisKIH0KICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDI4ZTdkMWQwYzU2
OTY4MDBmM2Q2MjEyNDA4ZGQ4ZDE4YmNlZGJlYzIuLjc0ZWJmZWNlZTZlYzdhMWI5NDM5Zjc4NmU3
NjE0NDVkY2M1OTdmZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oCkBAIC03NSw5ICs3
NSwxNiBAQCBwcm90ZWN0ZWQ6CiAKICAgICAvLyBTZXQgaW52YWxpZGF0aW9ucyB0byBiZSBwb3Rl
bnRpYWxseSByZXBhaW50ZWQgZHVyaW5nIHVwZGF0ZSgpLgogICAgIHZvaWQgaW52YWxpZGF0ZVJl
Y3QoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpOworCiAgICAgLy8gUHJlcGFyZSBkYXRhIG5l
ZWRlZCB0byB1cGRhdGUgdGV4dHVyZXMgdGhhdCBpbnRlcnNlY3Qgd2l0aCBjb250ZW50UmVjdC4K
ICAgICB2b2lkIHByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCk7CiAK
KyAgICAvLyBTYW1lIGFzIGFib3ZlLCBidXQgdGhpcyB3aWxsIHRyeSB0byBwYWludCBhZGRpdGlv
bmFsIHN1cnJvdW5kaW5nIGNvbnRlbnQgaWYgaWRsZS4KKyAgICB2b2lkIHByZXBhcmVUb1VwZGF0
ZUlkbGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpOworCisgICAgLy8gQWZ0ZXIgcHJlcGFy
aW5nIGFuIHVwZGF0ZSwgcmV0dXJucyB0cnVlIGlmIG1vcmUgcHJlLXBhaW50aW5nIGlzIG5lZWRl
ZC4KKyAgICBib29sIG5lZWRzSWRsZVBhaW50KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KTsK
KwogICAgIHZpcnR1YWwgdm9pZCBwcm90ZWN0VmlzaWJsZVRpbGVUZXh0dXJlcygpOwogCiAgICAg
dmlydHVhbCBUZXh0dXJlTWFuYWdlciogdGV4dHVyZU1hbmFnZXIoKSBjb25zdDsKQEAgLTkwLDE3
ICs5NywyMiBAQCBwcml2YXRlOgogICAgIHZvaWQgY3JlYXRlVGlsZXJJZk5lZWRlZCgpOwogICAg
IHZvaWQgc2V0VGlsaW5nT3B0aW9uKFRpbGluZ09wdGlvbik7CiAKKyAgICB2b2lkIHByZXBhcmVU
b1VwZGF0ZVRpbGVzKGJvb2wgaWRsZSwgaW50IGxlZnQsIGludCB0b3AsIGludCByaWdodCwgaW50
IGJvdHRvbSk7CisgICAgSW50UmVjdCBpZGxlUGFpbnRSZWN0KGNvbnN0IEludFJlY3QmIHZpc2li
bGVDb250ZW50UmVjdCk7CisKICAgICBVcGRhdGFibGVUaWxlKiB0aWxlQXQoaW50LCBpbnQpIGNv
bnN0OwogICAgIFVwZGF0YWJsZVRpbGUqIGNyZWF0ZVRpbGUoaW50LCBpbnQpOwogCiAgICAgLy8g
VGVtcG9yYXJ5IHN0YXRlIGhlbGQgYmV0d2VlbiBwcmVwYXJlVG9VcGRhdGUoKSBhbmQgdXBkYXRl
Q29tcG9zaXRvclJlc291cmNlcygpLgotICAgIEludFJlY3QgbV9yZXF1ZXN0ZWRVcGRhdGVSZWN0
OworICAgIEludFJlY3QgbV9yZXF1ZXN0ZWRVcGRhdGVUaWxlc1JlY3Q7CisKICAgICAvLyBTdGF0
ZSBoZWxkIGJldHdlZW4gcHJlcGFyZVRvVXBkYXRlKCkgYW5kIHB1c2hQcm9wZXJ0aWVzVG8oKS4g
VGhpcyByZXByZXNlbnRzIHRoZSBhcmVhCiAgICAgLy8gb2YgdGhlIGxheWVyIHRoYXQgaXMgYWN0
dWFsbHkgcmUtcGFpbnRlZCBieSBXZWJLaXQuCiAgICAgSW50UmVjdCBtX3BhaW50UmVjdDsKIAog
ICAgIEdDM0RlbnVtIG1fdGV4dHVyZUZvcm1hdDsKICAgICBib29sIG1fc2tpcHNEcmF3OworICAg
IGJvb2wgbV9za2lwc0lkbGVQYWludDsKICAgICBMYXllclRleHR1cmVVcGRhdGVyOjpPcmllbnRh
dGlvbiBtX3RleHR1cmVPcmllbnRhdGlvbjsKICAgICBMYXllclRleHR1cmVVcGRhdGVyOjpTYW1w
bGVkVGV4ZWxGb3JtYXQgbV9zYW1wbGVkVGV4ZWxGb3JtYXQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3QuY3BwCmluZGV4IDI3ZDk1NmE3YzdhZmJkMDk1ZGI5NDViOTM0YTE2NmVmYTU1ZjM3
NGYuLmU4NWVkMWE1ZmY2MzdmOTBjOWMwNWRmZmJhMWU1YWE5MTM3N2NlMTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0LmNwcApAQCAtNjcsNiArNjcsNyBAQCBDQ0xheWVyVHJlZUhvc3Q6
OkNDTGF5ZXJUcmVlSG9zdChDQ0xheWVyVHJlZUhvc3RDbGllbnQqIGNsaWVudCwgY29uc3QgQ0NT
ZXR0aW5ncwogICAgICwgbV9wYWdlU2NhbGUoMSkKICAgICAsIG1fbWluUGFnZVNjYWxlKDEpCiAg
ICAgLCBtX21heFBhZ2VTY2FsZSgxKQorICAgICwgbV90cmlnZ2VySWRsZVBhaW50cyh0cnVlKQog
ewogICAgIEFTU0VSVChDQ1Byb3h5Ojppc01haW5UaHJlYWQoKSk7CiAgICAgbnVtTGF5ZXJUcmVl
SW5zdGFuY2VzKys7CkBAIC0xNzksNiArMTgwLDEyIEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0Ojpk
aWRSZWNyZWF0ZUdyYXBoaWNzQ29udGV4dChib29sIHN1Y2Nlc3MpCiAgICAgbV9jbGllbnQtPmRp
ZFJlY3JlYXRlR3JhcGhpY3NDb250ZXh0KHN1Y2Nlc3MpOwogfQogCit2b2lkIENDTGF5ZXJUcmVl
SG9zdDo6ZGlkQ29tbWl0QW5kRHJhd0ZyYW1lKCkKK3sgCisgICAgbV9jbGllbnQtPmRpZENvbW1p
dEFuZERyYXdGcmFtZSgpOworICAgIG1fdHJpZ2dlcklkbGVQYWludHMgPSB0cnVlOworfQorCiAv
LyBUZW1wb3JhcnkgaGFjayB1bnRpbCBXZWJWaWV3SW1wbCBjb250ZXh0IGNyZWF0aW9uIGdldHMg
c2ltcGxpZmllZAogR3JhcGhpY3NDb250ZXh0M0QqIENDTGF5ZXJUcmVlSG9zdDo6Y29udGV4dCgp
CiB7CkBAIC0xODgsNiArMTk1LDcgQEAgR3JhcGhpY3NDb250ZXh0M0QqIENDTGF5ZXJUcmVlSG9z
dDo6Y29udGV4dCgpCiAKIGJvb2wgQ0NMYXllclRyZWVIb3N0Ojpjb21wb3NpdGVBbmRSZWFkYmFj
ayh2b2lkICpwaXhlbHMsIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CisgICAgbV90cmlnZ2VySWRs
ZVBhaW50cyA9IGZhbHNlOwogICAgIHJldHVybiBtX3Byb3h5LT5jb21wb3NpdGVBbmRSZWFkYmFj
ayhwaXhlbHMsIHJlY3QpOwogfQogCkBAIC0zNTAsMTAgKzM1OCwyNCBAQCB2b2lkIENDTGF5ZXJU
cmVlSG9zdDo6dXBkYXRlTGF5ZXJzKExheWVyQ2hyb21pdW0qIHJvb3RMYXllcikKICAgICAgICAg
Q0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxp
dHkocm9vdExheWVyLCByb290TGF5ZXIsIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwg
bV91cGRhdGVMaXN0LCByb290UmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCksIGxheWVyUmVuZGVy
ZXJDYXBhYmlsaXRpZXMoKS5tYXhUZXh0dXJlU2l6ZSk7CiAgICAgfQogCi0gICAgcGFpbnRMYXll
ckNvbnRlbnRzKG1fdXBkYXRlTGlzdCk7CisgICAgcGFpbnRMYXllckNvbnRlbnRzKG1fdXBkYXRl
TGlzdCwgUGFpbnRWaXNpYmxlKTsKKyAgICAvLyBUaGUgc2Vjb25kIChpZGxlKSBwYWludCB3aWxs
IGJlIGEgbm8tb3AgaW4gbGF5ZXJzIHdoZXJlIHBhaW50aW5nIGFscmVhZHkgb2NjdXJlZCBhYm92
ZS4KKyAgICBpZiAobV90cmlnZ2VySWRsZVBhaW50cykKKyAgICAgICAgcGFpbnRMYXllckNvbnRl
bnRzKG1fdXBkYXRlTGlzdCwgUGFpbnRJZGxlKTsKK30KKworLy8gc3RhdGljCit2b2lkIENDTGF5
ZXJUcmVlSG9zdDo6cGFpbnRDb250ZW50c0lmRGlydHkoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIFBh
aW50VHlwZSBwYWludFR5cGUpCit7CisgICAgQVNTRVJUKGxheWVyKTsKKyAgICBBU1NFUlQoUGFp
bnRWaXNpYmxlID09IHBhaW50VHlwZSB8fCBQYWludElkbGUgPT0gcGFpbnRUeXBlKTsKKyAgICBp
ZiAoUGFpbnRWaXNpYmxlID09IHBhaW50VHlwZSkKKyAgICAgICAgbGF5ZXItPnBhaW50Q29udGVu
dHNJZkRpcnR5KCk7CisgICAgZWxzZQorICAgICAgICBsYXllci0+aWRsZVBhaW50Q29udGVudHNJ
ZkRpcnR5KCk7CiB9CiAKLXZvaWQgQ0NMYXllclRyZWVIb3N0OjpwYWludE1hc2tBbmRSZXBsaWNh
Rm9yUmVuZGVyU3VyZmFjZShMYXllckNocm9taXVtKiByZW5kZXJTdXJmYWNlTGF5ZXIpCit2b2lk
IENDTGF5ZXJUcmVlSG9zdDo6cGFpbnRNYXNrQW5kUmVwbGljYUZvclJlbmRlclN1cmZhY2UoTGF5
ZXJDaHJvbWl1bSogcmVuZGVyU3VyZmFjZUxheWVyLCBQYWludFR5cGUgcGFpbnRUeXBlKQogewog
ICAgIC8vIE5vdGU6IE1hc2tzIGFuZCByZXBsaWNhcyBvbmx5IGV4aXN0IGZvciBsYXllcnMgdGhh
dCBvd24gcmVuZGVyIHN1cmZhY2VzLiBJZiB3ZSByZWFjaCB0aGlzIHBvaW50CiAgICAgLy8gaW4g
Y29kZSwgd2UgYWxyZWFkeSBrbm93IHRoYXQgYXQgbGVhc3Qgc29tZXRoaW5nIHdpbGwgYmUgZHJh
d24gaW50byB0aGlzIHJlbmRlciBzdXJmYWNlLCBzbyB0aGUKQEAgLTM2MiwyNCArMzg0LDI0IEBA
IHZvaWQgQ0NMYXllclRyZWVIb3N0OjpwYWludE1hc2tBbmRSZXBsaWNhRm9yUmVuZGVyU3VyZmFj
ZShMYXllckNocm9taXVtKiByZW5kZXJTCiAgICAgaWYgKHJlbmRlclN1cmZhY2VMYXllci0+bWFz
a0xheWVyKCkpIHsKICAgICAgICAgcmVuZGVyU3VyZmFjZUxheWVyLT5tYXNrTGF5ZXIoKS0+c2V0
TGF5ZXJUcmVlSG9zdCh0aGlzKTsKICAgICAgICAgcmVuZGVyU3VyZmFjZUxheWVyLT5tYXNrTGF5
ZXIoKS0+c2V0VmlzaWJsZUxheWVyUmVjdChJbnRSZWN0KEludFBvaW50KCksIHJlbmRlclN1cmZh
Y2VMYXllci0+Y29udGVudEJvdW5kcygpKSk7Ci0gICAgICAgIHJlbmRlclN1cmZhY2VMYXllci0+
bWFza0xheWVyKCktPnBhaW50Q29udGVudHNJZkRpcnR5KCk7CisgICAgICAgIHBhaW50Q29udGVu
dHNJZkRpcnR5KHJlbmRlclN1cmZhY2VMYXllci0+bWFza0xheWVyKCksIHBhaW50VHlwZSk7CiAg
ICAgfQogCiAgICAgTGF5ZXJDaHJvbWl1bSogcmVwbGljYUxheWVyID0gcmVuZGVyU3VyZmFjZUxh
eWVyLT5yZXBsaWNhTGF5ZXIoKTsKICAgICBpZiAocmVwbGljYUxheWVyKSB7CiAKICAgICAgICAg
cmVwbGljYUxheWVyLT5zZXRMYXllclRyZWVIb3N0KHRoaXMpOwotICAgICAgICByZXBsaWNhTGF5
ZXItPnBhaW50Q29udGVudHNJZkRpcnR5KCk7CisgICAgICAgIHBhaW50Q29udGVudHNJZkRpcnR5
KHJlcGxpY2FMYXllciwgcGFpbnRUeXBlKTsKIAogICAgICAgICBpZiAocmVwbGljYUxheWVyLT5t
YXNrTGF5ZXIoKSkgewogICAgICAgICAgICAgcmVwbGljYUxheWVyLT5tYXNrTGF5ZXIoKS0+c2V0
TGF5ZXJUcmVlSG9zdCh0aGlzKTsKICAgICAgICAgICAgIHJlcGxpY2FMYXllci0+bWFza0xheWVy
KCktPnNldFZpc2libGVMYXllclJlY3QoSW50UmVjdChJbnRQb2ludCgpLCByZXBsaWNhTGF5ZXIt
Pm1hc2tMYXllcigpLT5jb250ZW50Qm91bmRzKCkpKTsKLSAgICAgICAgICAgIHJlcGxpY2FMYXll
ci0+bWFza0xheWVyKCktPnBhaW50Q29udGVudHNJZkRpcnR5KCk7CisgICAgICAgICAgICBwYWlu
dENvbnRlbnRzSWZEaXJ0eShyZXBsaWNhTGF5ZXItPm1hc2tMYXllcigpLCBwYWludFR5cGUpOwog
ICAgICAgICB9CiAgICAgfQogfQogCi12b2lkIENDTGF5ZXJUcmVlSG9zdDo6cGFpbnRMYXllckNv
bnRlbnRzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkKK3ZvaWQgQ0NM
YXllclRyZWVIb3N0OjpwYWludExheWVyQ29udGVudHMoY29uc3QgTGF5ZXJMaXN0JiByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0LCBQYWludFR5cGUgcGFpbnRUeXBlKQogewogICAgIGZvciAoaW50IHN1
cmZhY2VJbmRleCA9IHJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpIC0gMTsgc3VyZmFjZUlu
ZGV4ID49IDAgOyAtLXN1cmZhY2VJbmRleCkgewogICAgICAgICBMYXllckNocm9taXVtKiByZW5k
ZXJTdXJmYWNlTGF5ZXIgPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0W3N1cmZhY2VJbmRleF0uZ2V0
KCk7CkBAIC0zODgsNyArNDEwLDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnBhaW50TGF5ZXJD
b250ZW50cyhjb25zdCBMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QKICAgICAgICAg
QVNTRVJUKHJlbmRlclN1cmZhY2UtPmRyYXdPcGFjaXR5KCkpOwogCiAgICAgICAgIHJlbmRlclN1
cmZhY2VMYXllci0+c2V0TGF5ZXJUcmVlSG9zdCh0aGlzKTsKLSAgICAgICAgcGFpbnRNYXNrQW5k
UmVwbGljYUZvclJlbmRlclN1cmZhY2UocmVuZGVyU3VyZmFjZUxheWVyKTsKKyAgICAgICAgcGFp
bnRNYXNrQW5kUmVwbGljYUZvclJlbmRlclN1cmZhY2UocmVuZGVyU3VyZmFjZUxheWVyLCBwYWlu
dFR5cGUpOwogCiAgICAgICAgIGNvbnN0IExheWVyTGlzdCYgbGF5ZXJMaXN0ID0gcmVuZGVyU3Vy
ZmFjZS0+bGF5ZXJMaXN0KCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgbGF5ZXJJbmRleCA9IDA7
IGxheWVySW5kZXggPCBsYXllckxpc3Quc2l6ZSgpOyArK2xheWVySW5kZXgpIHsKQEAgLTQwMSwx
MCArNDIzLDkgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnBhaW50TGF5ZXJDb250ZW50cyhjb25z
dCBMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QKIAogICAgICAgICAgICAgbGF5ZXIt
PnNldExheWVyVHJlZUhvc3QodGhpcyk7CiAKLSAgICAgICAgICAgIEFTU0VSVChsYXllci0+b3Bh
Y2l0eSgpKTsKICAgICAgICAgICAgIEFTU0VSVCghbGF5ZXItPmJvdW5kcygpLmlzRW1wdHkoKSk7
CiAKLSAgICAgICAgICAgIGxheWVyLT5wYWludENvbnRlbnRzSWZEaXJ0eSgpOworICAgICAgICAg
ICAgcGFpbnRDb250ZW50c0lmRGlydHkobGF5ZXIsIHBhaW50VHlwZSk7CiAgICAgICAgIH0KICAg
ICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCmluZGV4IGFhYWQxNDIyOWQzNTEwZWUx
OTEwMjFjNzY0Yzc1YjRmYjQ3M2FiNTUuLjVlNWFlZGQ5MDU0ZmQ1YjZkNjI2ZWZjZDVjYmQyNGNi
NTQzYmVmM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCkBAIC0xMjcsNyArMTI3LDcg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgUGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBj
cmVhdGVMYXllclRyZWVIb3N0SW1wbChDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50Kik7CiAgICAg
dm9pZCBkaWRCZWNvbWVJbnZpc2libGVPbkltcGxUaHJlYWQoQ0NMYXllclRyZWVIb3N0SW1wbCop
OwogICAgIHZvaWQgZGlkUmVjcmVhdGVHcmFwaGljc0NvbnRleHQoYm9vbCBzdWNjZXNzKTsKLSAg
ICB2b2lkIGRpZENvbW1pdEFuZERyYXdGcmFtZSgpIHsgbV9jbGllbnQtPmRpZENvbW1pdEFuZERy
YXdGcmFtZSgpOyB9CisgICAgdm9pZCBkaWRDb21taXRBbmREcmF3RnJhbWUoKTsKICAgICB2b2lk
IGRpZENvbXBsZXRlU3dhcEJ1ZmZlcnMoKSB7IG1fY2xpZW50LT5kaWRDb21wbGV0ZVN3YXBCdWZm
ZXJzKCk7IH0KICAgICB2b2lkIGRlbGV0ZUNvbnRlbnRzVGV4dHVyZXNPbkltcGxUaHJlYWQoVGV4
dHVyZUFsbG9jYXRvciopOwogCkBAIC0yMDAsOCArMjAwLDEwIEBAIHByb3RlY3RlZDoKIHByaXZh
dGU6CiAgICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gTGF5ZXJMaXN0
OwogCi0gICAgdm9pZCBwYWludExheWVyQ29udGVudHMoY29uc3QgTGF5ZXJMaXN0Jik7Ci0gICAg
dm9pZCBwYWludE1hc2tBbmRSZXBsaWNhRm9yUmVuZGVyU3VyZmFjZShMYXllckNocm9taXVtKik7
CisgICAgZW51bSBQYWludFR5cGUgeyBQYWludFZpc2libGUsIFBhaW50SWRsZSB9OworICAgIHN0
YXRpYyB2b2lkIHBhaW50Q29udGVudHNJZkRpcnR5KExheWVyQ2hyb21pdW0qLCBQYWludFR5cGUp
OworICAgIHZvaWQgcGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExheWVyTGlzdCYsIFBhaW50VHlw
ZSk7CisgICAgdm9pZCBwYWludE1hc2tBbmRSZXBsaWNhRm9yUmVuZGVyU3VyZmFjZShMYXllckNo
cm9taXVtKiwgUGFpbnRUeXBlKTsKIAogICAgIHZvaWQgdXBkYXRlTGF5ZXJzKExheWVyQ2hyb21p
dW0qKTsKICAgICB2b2lkIGNsZWFyUGVuZGluZ1VwZGF0ZSgpOwpAQCAtMjMyLDYgKzIzNCw3IEBA
IHByaXZhdGU6CiAKICAgICBmbG9hdCBtX3BhZ2VTY2FsZTsKICAgICBmbG9hdCBtX21pblBhZ2VT
Y2FsZSwgbV9tYXhQYWdlU2NhbGU7CisgICAgYm9vbCBtX3RyaWdnZXJJZGxlUGFpbnRzOwogfTsK
IAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJl
ZUhvc3RUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVI
b3N0VGVzdC5jcHAKaW5kZXggMzZmZDdkYmQwN2JkYzdjZjFjODYxZmQ4MmFlYmMyYjA4NGEwM2Ez
My4uYTY2N2VkYzA2NDVkNTlhYTg4OTkzZjZhMzY3MGQ3NzM4ODI2OTE2MiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCkBA
IC05NDgsNyArOTQ4LDggQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPENvbnRlbnRM
YXllckNocm9taXVtV2l0aFVwZGF0ZVRyYWNraW5nPiBjcmVhdGUoQ0NMYXllckRlbGVnYXRlICpk
ZWxlZ2F0ZSkgeyByZXR1cm4gYWRvcHRSZWYobmV3IENvbnRlbnRMYXllckNocm9taXVtV2l0aFVw
ZGF0ZVRyYWNraW5nKGRlbGVnYXRlKSk7IH0KIAogICAgIGludCBwYWludENvbnRlbnRzQ291bnQo
KSB7IHJldHVybiBtX3BhaW50Q29udGVudHNDb3VudDsgfQotICAgIHZvaWQgcmVzZXRQYWludENv
bnRlbnRzQ291bnQoKSB7IG1fcGFpbnRDb250ZW50c0NvdW50ID0gMDsgfQorICAgIGludCBpZGxl
UGFpbnRDb250ZW50c0NvdW50KCkgeyByZXR1cm4gbV9pZGxlUGFpbnRDb250ZW50c0NvdW50OyB9
CisgICAgdm9pZCByZXNldFBhaW50Q29udGVudHNDb3VudCgpIHsgbV9wYWludENvbnRlbnRzQ291
bnQgPSAwOyBtX2lkbGVQYWludENvbnRlbnRzQ291bnQgPSAwO30KIAogICAgIGludCB1cGRhdGVD
b3VudCgpIHsgcmV0dXJuIG1fdXBkYXRlQ291bnQ7IH0KICAgICB2b2lkIHJlc2V0VXBkYXRlQ291
bnQoKSB7IG1fdXBkYXRlQ291bnQgPSAwOyB9CkBAIC05NTksNiArOTYwLDEyIEBAIHB1YmxpYzoK
ICAgICAgICAgbV9wYWludENvbnRlbnRzQ291bnQrKzsKICAgICB9CiAKKyAgICB2aXJ0dWFsIHZv
aWQgaWRsZVBhaW50Q29udGVudHNJZkRpcnR5KCkKKyAgICB7CisgICAgICAgIENvbnRlbnRMYXll
ckNocm9taXVtOjppZGxlUGFpbnRDb250ZW50c0lmRGlydHkoKTsKKyAgICAgICAgbV9pZGxlUGFp
bnRDb250ZW50c0NvdW50Kys7CisgICAgfQorCiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbXBv
c2l0b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIENDVGV4dHVyZVVwZGF0
ZXImIHVwZGF0ZXIpCiAgICAgewogICAgICAgICBDb250ZW50TGF5ZXJDaHJvbWl1bTo6dXBkYXRl
Q29tcG9zaXRvclJlc291cmNlcyhjb250ZXh0LCB1cGRhdGVyKTsKQEAgLTk2OSwxMiArOTc2LDE0
IEBAIHByaXZhdGU6CiAgICAgZXhwbGljaXQgQ29udGVudExheWVyQ2hyb21pdW1XaXRoVXBkYXRl
VHJhY2tpbmcoQ0NMYXllckRlbGVnYXRlICpkZWxlZ2F0ZSkKICAgICAgICAgOiBDb250ZW50TGF5
ZXJDaHJvbWl1bShkZWxlZ2F0ZSkKICAgICAgICAgLCBtX3BhaW50Q29udGVudHNDb3VudCgwKQor
ICAgICAgICAsIG1faWRsZVBhaW50Q29udGVudHNDb3VudCgwKQogICAgICAgICAsIG1fdXBkYXRl
Q291bnQoMCkKICAgICB7CiAgICAgICAgIHNldEJvdW5kcyhJbnRTaXplKDEwLCAxMCkpOwogICAg
IH0KIAogICAgIGludCBtX3BhaW50Q29udGVudHNDb3VudDsKKyAgICBpbnQgbV9pZGxlUGFpbnRD
b250ZW50c0NvdW50OwogICAgIGludCBtX3VwZGF0ZUNvdW50OwogfTsKIApAQCAtMTAwNSw2ICsx
MDE0LDkgQEAgcHVibGljOgogICAgICAgICAvLyBwYWludENvbnRlbnRzSWZEaXJ0eSgpIHNob3Vs
ZCBoYXZlIGJlZW4gY2FsbGVkIG9uY2UuCiAgICAgICAgIEVYUEVDVF9FUSgxLCBtX3VwZGF0ZUNo
ZWNrTGF5ZXItPnBhaW50Q29udGVudHNDb3VudCgpKTsKIAorICAgICAgICAvLyBpZGxlUGFpbnRD
b250ZW50c0lmRGlydHkoKSBzaG91bGQgaGF2ZSBiZWVuIGNhbGxlZCBvbmNlCisgICAgICAgIEVY
UEVDVF9FUSgxLCBtX3VwZGF0ZUNoZWNrTGF5ZXItPmlkbGVQYWludENvbnRlbnRzQ291bnQoKSk7
CisKICAgICAgICAgLy8gdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcygpIHNob3VsZCBoYXZlIGJl
ZW4gY2FsbGVkIHRoZSBzYW1lCiAgICAgICAgIC8vIGFtb3V0IG9mIHRpbWVzIGFzIHBhaW50Q29u
dGVudHNJZkRpcnR5KCkuCiAgICAgICAgIEVYUEVDVF9FUShtX3VwZGF0ZUNoZWNrTGF5ZXItPnBh
aW50Q29udGVudHNDb3VudCgpLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvVGlsZWRMYXllckNocm9taXVtVGVzdC5jcHAKaW5kZXggNjNhYTQ1NmFkOGQ4Y2NiM2Zl
MDRmYWZjMTYyMGJmMGYyNGU2N2Y0My4uMjI5ZTQ1YmVjM2IyYTA3YjMwYjI4MjA0OGMzOTc2N2Jk
MGI2ZGJlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UaWxlZExh
eWVyQ2hyb21pdW1UZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1Rp
bGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCkBAIC05OCw2ICs5OCwxNiBAQCBwdWJsaWM6CiAgICAg
ICAgIFRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlKHJlY3QpOwogICAgIH0KIAor
ICAgIHZvaWQgcHJlcGFyZVRvVXBkYXRlSWRsZShjb25zdCBJbnRSZWN0JiByZWN0KQorICAgIHsK
KyAgICAgICAgVGlsZWRMYXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGVJZGxlKHJlY3QpOwor
ICAgIH0KKworICAgIGJvb2wgbmVlZHNJZGxlUGFpbnQoY29uc3QgSW50UmVjdCYgcmVjdCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBUaWxlZExheWVyQ2hyb21pdW06Om5lZWRzSWRsZVBhaW50KHJl
Y3QpOworICAgIH0KKwogICAgIHZpcnR1YWwgVGV4dHVyZU1hbmFnZXIqIHRleHR1cmVNYW5hZ2Vy
KCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJlTWFuYWdlcjsgfQogCiBwcml2YXRlOgpAQCAtMTQ2
LDUgKzE1NiwxMDcgQEAgVEVTVChUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoRGlydHlUaWxl
cykKICAgICBFWFBFQ1RfRkFMU0UobGF5ZXJJbXBsLT5oYXNUaWxlQXQoMCwgMSkpOwogfQogCitU
RVNUKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hJZGxlUGFpbnRUaWxlcykKK3sKKyAgICBP
d25QdHI8VGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gVGV4dHVyZU1hbmFnZXI6OmNy
ZWF0ZSg0KjEwMjQqMTAyNCwgMioxMDI0KjEwMjQsIDEwMjQpOworICAgIFJlZlB0cjxGYWtlVGls
ZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9t
aXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CisgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFk
IGltcGxUaHJlYWQ7CisgICAgUmVmUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllckltcGwg
PSBhZG9wdFJlZihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMCkpOworCisgICAgRmFrZVRleHR1
cmVBbGxvY2F0b3IgdGV4dHVyZUFsbG9jYXRvcjsKKyAgICBDQ1RleHR1cmVVcGRhdGVyIHVwZGF0
ZXIoJnRleHR1cmVBbGxvY2F0b3IpOworCisgICAgLy8gVGhlIHRpbGUgc2l6ZSBpcyAxMDB4MTAw
LiBTZXR1cCA1eDUgdGlsZXMgd2l0aCBvbmUgdmlzaWJsZSB0aWxlIGluIHRoZSBjZW50ZXIuCisg
ICAgSW50U2l6ZSBjb250ZW50Qm91bmRzKDUwMCwgNTAwKTsKKyAgICBJbnRSZWN0IGNvbnRlbnRS
ZWN0KEludFBvaW50Ojp6ZXJvKCksIGNvbnRlbnRCb3VuZHMpOworICAgIEludFJlY3QgdmlzaWJs
ZVJlY3QoMjAwLCAyMDAsIDEwMCwgMTAwKTsKKworICAgIC8vIFRoaXMgaW52YWxpZGF0ZXMgMjUg
dGlsZXMgYW5kIHRoZW4gcGFpbnRzIG9uZSB2aXNpYmxlIHRpbGUuCisgICAgbGF5ZXItPnNldEJv
dW5kcyhjb250ZW50Qm91bmRzKTsKKyAgICBsYXllci0+c2V0VmlzaWJsZUxheWVyUmVjdCh2aXNp
YmxlUmVjdCk7CisgICAgbGF5ZXItPmludmFsaWRhdGVSZWN0KGNvbnRlbnRSZWN0KTsKKyAgICBs
YXllci0+cHJlcGFyZVRvVXBkYXRlKHZpc2libGVSZWN0KTsKKworICAgIC8vIFdlIHNob3VsZCBu
ZWVkIGlkbGUtcGFpbnRpbmcgZm9yIDN4MyB0aWxlcyBpbiB0aGUgY2VudGVyLgorICAgIEVYUEVD
VF9UUlVFKGxheWVyLT5uZWVkc0lkbGVQYWludCh2aXNpYmxlUmVjdCkpOworCisgICAgbGF5ZXIt
PnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoMCwgdXBkYXRlcik7CisgICAgbGF5ZXItPnB1c2hQ
cm9wZXJ0aWVzVG8obGF5ZXJJbXBsLmdldCgpKTsKKworICAgIC8vIFdlIHNob3VsZCBoYXZlIG9u
ZSB0aWxlIG9uIHRoZSBpbXBsIHNpZGUuCisgICAgRVhQRUNUX1RSVUUobGF5ZXJJbXBsLT5oYXNU
aWxlQXQoMiwgMikpOworCisgICAgdGV4dHVyZU1hbmFnZXItPnVucHJvdGVjdEFsbFRleHR1cmVz
KCk7CisKKyAgICAvLyBGb3IgdGhlIG5leHQgZm91ciB1cGRhdGVzLCB3ZSBzaG91bGQgZGV0ZWN0
IHdlIHN0aWxsIG5lZWQgaWRsZSBwYWludGluZy4KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7
IGkrKykgeworICAgICAgICBsYXllci0+cHJlcGFyZVRvVXBkYXRlKHZpc2libGVSZWN0KTsKKyAg
ICAgICAgRVhQRUNUX1RSVUUobGF5ZXItPm5lZWRzSWRsZVBhaW50KHZpc2libGVSZWN0KSk7Cisg
ICAgICAgIGxheWVyLT5wcmVwYXJlVG9VcGRhdGVJZGxlKHZpc2libGVSZWN0KTsKKyAgICAgICAg
bGF5ZXItPnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoMCwgdXBkYXRlcik7CisgICAgICAgIGxh
eWVyLT5wdXNoUHJvcGVydGllc1RvKGxheWVySW1wbC5nZXQoKSk7CisgICAgICAgIHRleHR1cmVN
YW5hZ2VyLT51bnByb3RlY3RBbGxUZXh0dXJlcygpOworICAgIH0KKworICAgIC8vIEFmdGVyIGZv
dXIgcGFzc2VzIG9mIGlkbGUgcGFpbnRpbmcsIHdlIHNob3VsZCBiZSBmaW5pc2hlZCBwYWludGlu
ZworICAgIEVYUEVDVF9GQUxTRShsYXllci0+bmVlZHNJZGxlUGFpbnQodmlzaWJsZVJlY3QpKTsK
KworICAgIC8vIFdlIHNob3VsZCBoYXZlIG9uZSB0aWxlIHN1cnJvdW5kaW5nIHRoZSB2aXNpYmxl
IHRpbGUgb24gYWxsIHNpZGVzLCBidXQgbm8gb3RoZXIgdGlsZXMuCisgICAgSW50UmVjdCBpZGxl
UGFpbnRUaWxlcygxLCAxLCAzLCAzKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDU7IGkrKykg
eworICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDU7IGorKykgeworICAgICAgICAgICAgaWYg
KGlkbGVQYWludFRpbGVzLmNvbnRhaW5zKGksIGopKQorICAgICAgICAgICAgICAgIEVYUEVDVF9U
UlVFKGxheWVySW1wbC0+aGFzVGlsZUF0KGksIGopKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBFWFBFQ1RfRkFMU0UobGF5ZXJJbXBsLT5oYXNUaWxlQXQoaSwgaikpOworICAg
ICAgICB9CisgICAgfQorfQorCisKK1RFU1QoVGlsZWRMYXllckNocm9taXVtVGVzdCwgaWRsZVBh
aW50T3V0T2ZNZW1vcnkpCit7CisgICAgLy8gVGhlIHRpbGUgc2l6ZSBpcyAxMDB4MTAwLiBTZXR1
cCA1eDUgdGlsZXMgd2l0aCBvbmUgMXgxIHZpc2libGUgdGlsZSBpbiB0aGUgY2VudGVyLgorICAg
IEludFNpemUgY29udGVudEJvdW5kcygzMDAsIDMwMCk7CisgICAgSW50UmVjdCBjb250ZW50UmVj
dChJbnRQb2ludDo6emVybygpLCBjb250ZW50Qm91bmRzKTsKKyAgICBJbnRSZWN0IHZpc2libGVS
ZWN0KDEwMCwgMTAwLCAxMDAsIDEwMCk7CisKKyAgICAvLyBXZSBoYXZlIGVub3VnaCBtZW1vcnkg
Zm9yIG9ubHkgdGhlIHZpc2libGUgcmVjdCwgc28gd2Ugd2lsbCBydW4gb3V0IG9mIG1lbW9yeSBp
biBmaXJzdCBpZGxlIHBhaW50LgorICAgIGludCBtZW1vcnlMaW1pdCA9IDQgKiAxMDAgKiAxMDA7
IC8vIDIgdGlsZXMsIDQgYnl0ZXMgcGVyIHBpeGVsLgorCisgICAgT3duUHRyPFRleHR1cmVNYW5h
Z2VyPiB0ZXh0dXJlTWFuYWdlciA9IFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUobWVtb3J5TGltaXQs
IG1lbW9yeUxpbWl0IC8gMiwgMTAyNCk7CisgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21p
dW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1h
bmFnZXIuZ2V0KCkpKTsKKyAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsK
KyAgICBSZWZQdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1wbCA9IGFkb3B0UmVmKG5l
dyBGYWtlQ0NUaWxlZExheWVySW1wbCgwKSk7CisKKyAgICBGYWtlVGV4dHVyZUFsbG9jYXRvciB0
ZXh0dXJlQWxsb2NhdG9yOworICAgIENDVGV4dHVyZVVwZGF0ZXIgdXBkYXRlcigmdGV4dHVyZUFs
bG9jYXRvcik7CisKKyAgICAvLyBUaGlzIGludmFsaWRhdGVzIDkgdGlsZXMgYW5kIHRoZW4gcGFp
bnRzIG9uZSB2aXNpYmxlIHRpbGUuCisgICAgbGF5ZXItPnNldEJvdW5kcyhjb250ZW50Qm91bmRz
KTsKKyAgICBsYXllci0+c2V0VmlzaWJsZUxheWVyUmVjdCh2aXNpYmxlUmVjdCk7CisgICAgbGF5
ZXItPmludmFsaWRhdGVSZWN0KGNvbnRlbnRSZWN0KTsKKyAgICBsYXllci0+cHJlcGFyZVRvVXBk
YXRlKHZpc2libGVSZWN0KTsKKworICAgIC8vIFdlIHNob3VsZCBuZWVkIGlkbGUtcGFpbnRpbmcg
Zm9yIDN4MyB0aWxlcyBzdXJvdW5kaW5nIHZpc2libGUgdGlsZS4KKyAgICBFWFBFQ1RfVFJVRShs
YXllci0+bmVlZHNJZGxlUGFpbnQodmlzaWJsZVJlY3QpKTsKKworICAgIGxheWVyLT51cGRhdGVD
b21wb3NpdG9yUmVzb3VyY2VzKDAsIHVwZGF0ZXIpOworICAgIGxheWVyLT5wdXNoUHJvcGVydGll
c1RvKGxheWVySW1wbC5nZXQoKSk7CisKKyAgICAvLyBXZSBzaG91bGQgaGF2ZSBvbmUgdGlsZSBv
biB0aGUgaW1wbCBzaWRlLgorICAgIEVYUEVDVF9UUlVFKGxheWVySW1wbC0+aGFzVGlsZUF0KDEs
IDEpKTsKKworICAgIHRleHR1cmVNYW5hZ2VyLT51bnByb3RlY3RBbGxUZXh0dXJlcygpOworICAg
IGxheWVyLT5wcmVwYXJlVG9VcGRhdGUodmlzaWJsZVJlY3QpOworICAgIGxheWVyLT5wcmVwYXJl
VG9VcGRhdGVJZGxlKHZpc2libGVSZWN0KTsKKworICAgIC8vIFdlIHNob3VsZG4ndCBzaWduYWwg
d2UgbmVlZCBhbm90aGVyIGlkbGUgcGFpbnQgYWZ0ZXIgd2UgcnVuIG91dCBvZiBtZW1vcnkuCisg
ICAgRVhQRUNUX0ZBTFNFKGxheWVyLT5uZWVkc0lkbGVQYWludCh2aXNpYmxlUmVjdCkpOworCisg
ICAgbGF5ZXItPnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoMCwgdXBkYXRlcik7CisgICAgbGF5
ZXItPnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXJJbXBsLmdldCgpKTsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118678</attachid>
            <date>2011-12-09 18:52:58 -0800</date>
            <delta_ts>2011-12-15 17:16:25 -0800</delta_ts>
            <desc>Minor_Tweak_Plus_Rebase</desc>
            <filename>bug-72686-20111209185257.patch</filename>
            <type>text/plain</type>
            <size>31533</size>
            <attacher name="Eric Penner">epenner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyMzgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2NmMmNiM2YzNDEzNGVm
OWUxNzYyYjBhNWQzZjZiMTZmZTE1MTE5YS4uMzA2YTE4NTUxODJhNGJhMzJlNzBlYWQwZTE3ZjI1
NDdlODliYTA0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDExLTEyLTA5ICBFcmlj
IFBlbm5lciAgPGVwZW5uZXJAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIE5lZWQg
dG8gcHJlcGFpbnQgdGlsZXMgaW4gVGlsZWRMYXllckNocm9taXVtCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjY4NgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExh
eWVyQ2hyb21pdW06OmlkbGVQYWludENvbnRlbnRzSWZEaXJ0eSk6IGFkZGVkIGlkbGUgcGFpbnQg
ZnVuY3Rpb24KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5
ZXJDaHJvbWl1bS5oOiBkaXR0bworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyQ2hyb21pdW0uaDogZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06
OmlkbGVQYWludENvbnRlbnRzSWZEaXJ0eSk6IGRpdHRvCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuY3BwOiAKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHR1cmVNYW5hZ2VyOjpwcm90ZWN0VGV4dHVyZSk6IHJlbW92ZWQgYXNzZXJ0IGZvciBwcm90ZWN0
aW5nIGEgdGV4dHVyZSB0d2ljZQorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hy
b21pdW06OlRpbGVkTGF5ZXJDaHJvbWl1bSk6IGluaXQgdmFyaWFibGUKKyAgICAgICAgKFdlYkNv
cmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6Y2xlYW51cFJlc291cmNlcyk6IHJlc2V0IHNvbWUgbWVt
YmVyIHZhcmlhYmxlcworICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjp1cGRh
dGVDb21wb3NpdG9yUmVzb3VyY2VzKTogcmVmYWN0b3JpbmcgdG8gdXNlIHRpbGUgaW5kaWNlcwor
ICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGVUaWxl
cyk6IHJlZmFjdG9yZWQgY29tbW9uIGNvZGUgYW5kIG1hZGUgaWRsZS92aXNpYmxlIHZlcnNpb25z
CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVUb1VwZGF0ZSk6
IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVUb1Vw
ZGF0ZUlkbGUpOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjpu
ZWVkc0lkbGVQYWludCk6IGFkZGVkIGZ1bmN0aW9uCisgICAgICAgIChXZWJDb3JlOjpUaWxlZExh
eWVyQ2hyb21pdW06OmlkbGVQYWludFJlY3QpOiBhZGRlZCBmdW5jdGlvbgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OkNDTGF5ZXJUcmVlSG9zdCk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmNvbXBvc2l0ZUFuZFJlYWRiYWNrKTogc2V0IGZs
YWcgdG8gYXZvaWQgaWRsZSBwYWludCBkdXJyaW5nIGNvbXBvc2l0ZSBhbmQgcmVhZGJhY2sKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6dXBkYXRlTGF5ZXJzKTogYWRkZWQgaWRs
ZSBmbGFnIHBhcmFtZXRlcgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpwYWlu
dENvbnRlbnRzSWZEaXJ0eSk6IGRpdHRvIAorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVI
b3N0OjpwYWludE1hc2tBbmRSZXBsaWNhRm9yUmVuZGVyU3VyZmFjZSk6IGRpdHRvCisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnBhaW50TGF5ZXJDb250ZW50cyk6IGNob29zZXMg
aWRsZSBvciB2aXNpYmxlIHBhaW50CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0Lmg6CisKIDIwMTEtMTItMDggIEVyaWsgQXJ2aWRzc29uICA8
YXJ2QGNocm9taXVtLm9yZz4KIAogICAgICAgICBDb2RlR2VuZXJhdG9yVjg6IEZpeCBpc3N1ZSB3
aXRoIG92ZXJsb2FkZWQgc3RhdGljIGNvbmRpdGlvbmFsIG1ldGhvZHMKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKaW5kZXggNjliY2FjZWQzNWNjYWZkNTQ4YTFhNmMzOTZkY2EwZTFjMzExMTllZC4u
ODc1YjIwZDg0ZDUxMThhMzlkNzE5MjgwMTIyY2U0ZWU0ZWRlNzE4MiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMSBAQAorMjAxMS0xMi0wOSAgRXJpYyBQZW5uZXIgIDxl
cGVubmVyQGdvb2dsZS5jb20+CisKKyAgICAgICAgW2Nocm9taXVtXSBOZWVkIHRvIHByZXBhaW50
IHRpbGVzIGluIFRpbGVkTGF5ZXJDaHJvbWl1bQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI2ODYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwOgorICAg
ICAgICAoV1RGOjpDb250ZW50TGF5ZXJDaHJvbWl1bVdpdGhVcGRhdGVUcmFja2luZzo6aWRsZVBh
aW50Q29udGVudHNDb3VudCk6CisgICAgICAgIChXVEY6OkNvbnRlbnRMYXllckNocm9taXVtV2l0
aFVwZGF0ZVRyYWNraW5nOjpyZXNldFBhaW50Q29udGVudHNDb3VudCk6CisgICAgICAgIChXVEY6
OkNvbnRlbnRMYXllckNocm9taXVtV2l0aFVwZGF0ZVRyYWNraW5nOjppZGxlUGFpbnRDb250ZW50
c0lmRGlydHkpOgorICAgICAgICAoV1RGOjpDb250ZW50TGF5ZXJDaHJvbWl1bVdpdGhVcGRhdGVU
cmFja2luZzo6Q29udGVudExheWVyQ2hyb21pdW1XaXRoVXBkYXRlVHJhY2tpbmcpOgorICAgICAg
ICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0T3BhY2l0eUNoYW5nZTo6YWZ0ZXJUZXN0KToKKyAg
ICAgICAgKiB0ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0LmNwcDoKKyAgICAgICAgKFdURjo6
RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlSWRsZSk6CisgICAgICAgIChX
VEY6OkZha2VUaWxlZExheWVyQ2hyb21pdW06Om5lZWRzSWRsZVBhaW50KToKKyAgICAgICAgKFdU
Rjo6VEVTVCk6CisKIDIwMTEtMTItMDggIEVsbGlvdCBQb2dlciAgPGVwb2dlckBnb29nbGUuY29t
PgogCiAgICAgICAgIENocm9taXVtIERFUFMgcm9sbCAxMTI5NzQgLT4gMTEzNjAzCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5
ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggMmEyNDY2ZDkxMjlhZWMzNjQwOTMyMjlj
YjkzNWFmODJkNTA3MjRiNi4uYzI4NGVlYTMxYTQwMGUzZTkyNTMyOTViNWYyNjAzNDQ5ZjlkODBk
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Q29udGVudExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcApAQCAtMTA5LDYgKzEwOSwy
MCBAQCB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eSgpCiAg
ICAgbV9uZWVkc0Rpc3BsYXkgPSBmYWxzZTsKIH0KIAordm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1
bTo6aWRsZVBhaW50Q29udGVudHNJZkRpcnR5KCkKK3sKKyAgICBpZiAoIWRyYXdzQ29udGVudCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBJbnRSZWN0JiBsYXllclJlY3QgPSB2aXNp
YmxlTGF5ZXJSZWN0KCk7CisgICAgaWYgKGxheWVyUmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIHByZXBhcmVUb1VwZGF0ZUlkbGUobGF5ZXJSZWN0KTsKKyAgICBpZiAobmVl
ZHNJZGxlUGFpbnQobGF5ZXJSZWN0KSkKKyAgICAgICAgc2V0TmVlZHNDb21taXQoKTsKK30KKwog
Ym9vbCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KCkgY29uc3QKIHsKICAgICBy
ZXR1cm4gbV9kZWxlZ2F0ZSAmJiBtX2RlbGVnYXRlLT5kcmF3c0NvbnRlbnQoKSAmJiBUaWxlZExh
eWVyQ2hyb21pdW06OmRyYXdzQ29udGVudCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVt
LmgKaW5kZXggYjgzNGU2NzZiZDYzNDQ1YWE0NTNiMzY1ZWVlMjgwMjQwZjM4MDljMS4uMGM1NzRi
NWRmZGMwYTU3MWI4MTFiZTAzOTc2NGFjNzViMWMyZTNlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5
ZXJDaHJvbWl1bS5oCkBAIC01MCw2ICs1MCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5Db250
ZW50TGF5ZXJDaHJvbWl1bSgpOwogCiAgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHNJZkRp
cnR5KCk7CisgICAgdmlydHVhbCB2b2lkIGlkbGVQYWludENvbnRlbnRzSWZEaXJ0eSgpOwogCiBw
cm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgQ29udGVudExheWVyQ2hyb21pdW0oQ0NMYXllckRlbGVn
YXRlKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllckNocm9taXVtLmgKaW5kZXggOWM3YTRmOGY0NzkyODlkYTA1OTEzN2I3OWJi
MTVkNmJkMTdkNTFlZS4uMTczNDM0ZTk4ZWI5MjMwNTVhYjc4NjYwMzQzZDc0NjA5MDc5OWUxYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyQ2hyb21pdW0uaApAQCAtMTYxLDYgKzE2MSw3IEBAIHB1YmxpYzoKICAgICAvLyBU
aGVzZSBtZXRob2RzIHR5cGljYWxseSBuZWVkIHRvIGJlIG92ZXJ3cml0dGVuIGJ5IGRlcml2ZWQg
Y2xhc3Nlcy4KICAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50c0lmRGlydHkoKSB7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgaWRsZVBhaW50Q29udGVudHNJZkRpcnR5KCkgeyB9CiAgICAgdmlydHVh
bCB2b2lkIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0M0QqLCBDQ1Rl
eHR1cmVVcGRhdGVyJikgeyB9CiAgICAgdmlydHVhbCB2b2lkIHNldElzTWFzayhib29sKSB7IH0K
ICAgICB2aXJ0dWFsIHZvaWQgdW5yZXNlcnZlQ29udGVudHNUZXh0dXJlKCkgeyB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFu
YWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0
dXJlTWFuYWdlci5jcHAKaW5kZXggMTE4NzUzN2ZiOTJhYzBiZWM3ODkzODI1ZTNhYjZlM2UyNWY5
NzAzNi4uMzAyMDdiZTM4MmViNDQ0M2FiYWQ0MzEzYmMxNTQ3ZGQwNjViMGFjOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFn
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Rl
eHR1cmVNYW5hZ2VyLmNwcApAQCAtMTQxLDcgKzE0MSw2IEBAIGJvb2wgVGV4dHVyZU1hbmFnZXI6
OmlzUHJvdGVjdGVkKFRleHR1cmVUb2tlbiB0b2tlbikKIHZvaWQgVGV4dHVyZU1hbmFnZXI6OnBy
b3RlY3RUZXh0dXJlKFRleHR1cmVUb2tlbiB0b2tlbikKIHsKICAgICBBU1NFUlQoaGFzVGV4dHVy
ZSh0b2tlbikpOwotICAgIEFTU0VSVCghbV90ZXh0dXJlcy5nZXQodG9rZW4pLmlzUHJvdGVjdGVk
KTsKICAgICBUZXh0dXJlSW5mbyBpbmZvID0gbV90ZXh0dXJlcy50YWtlKHRva2VuKTsKICAgICBp
bmZvLmlzUHJvdGVjdGVkID0gdHJ1ZTsKICAgICBtX3RleHR1cmVzLmFkZCh0b2tlbiwgaW5mbyk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9U
aWxlZExheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcAppbmRleCA1YzU1ZjU5YmYzZTczNzJmZTll
YzUxMmVmNjM2MTEwMWFjNWEwNWU1Li5lMzE4Y2IxNTdhNDFlYWUzOWI2ZGNjM2IxZGY1ZmQ2ZmQ2
NmYxYzMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTcyLDYgKzcyLDcg
QEAgVGlsZWRMYXllckNocm9taXVtOjpUaWxlZExheWVyQ2hyb21pdW0oQ0NMYXllckRlbGVnYXRl
KiBkZWxlZ2F0ZSkKICAgICA6IExheWVyQ2hyb21pdW0oZGVsZWdhdGUpCiAgICAgLCBtX3RleHR1
cmVGb3JtYXQoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSkKICAgICAsIG1fc2tpcHNE
cmF3KGZhbHNlKQorICAgICwgbV9za2lwc0lkbGVQYWludChmYWxzZSkKICAgICAsIG1fdGV4dHVy
ZU9yaWVudGF0aW9uKExheWVyVGV4dHVyZVVwZGF0ZXI6OkludmFsaWRPcmllbnRhdGlvbikKICAg
ICAsIG1fc2FtcGxlZFRleGVsRm9ybWF0KExheWVyVGV4dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhl
bEZvcm1hdEludmFsaWQpCiAgICAgLCBtX3RpbGluZ09wdGlvbihBdXRvVGlsZSkKQEAgLTkzLDcg
Kzk0LDcgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OmNsZWFudXBSZXNvdXJjZXMoKQogCiAg
ICAgbV90aWxlci5jbGVhcigpOwogICAgIG1fcGFpbnRSZWN0ID0gSW50UmVjdCgpOwotICAgIG1f
cmVxdWVzdGVkVXBkYXRlUmVjdCA9IEludFJlY3QoKTsKKyAgICBtX3JlcXVlc3RlZFVwZGF0ZVRp
bGVzUmVjdCA9IEludFJlY3QoKTsKIH0KIAogdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnVwZGF0
ZVRpbGVTaXplQW5kVGlsaW5nT3B0aW9uKCkKQEAgLTE3OSwxMSArMTgwLDEzIEBAIHZvaWQgVGls
ZWRMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKEdyYXBoaWNzQ29udGV4
dDNEKiwgQ0NUZXh0dXJlCiAgICAgQVNTRVJUKG1fdGlsZXIpOwogCiAgICAgLy8gUGFpbnRpbmcg
Y291bGQgY2F1c2UgY29tcG9zaXRpbmcgdG8gZ2V0IHR1cm5lZCBvZmYsIHdoaWNoIG1heSBjYXVz
ZSB0aGUgdGlsZXIgdG8gYmVjb21lIGludmFsaWRhdGVkIG1pZC11cGRhdGUuCi0gICAgaWYgKG1f
c2tpcHNEcmF3IHx8IG1fcmVxdWVzdGVkVXBkYXRlUmVjdC5pc0VtcHR5KCkgfHwgIW1fdGlsZXIg
fHwgIW1fdGlsZXItPm51bVRpbGVzKCkpCisgICAgaWYgKG1fc2tpcHNEcmF3IHx8IG1fcmVxdWVz
dGVkVXBkYXRlVGlsZXNSZWN0LmlzRW1wdHkoKSB8fCAhbV90aWxlciB8fCAhbV90aWxlci0+bnVt
VGlsZXMoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaW50IGxlZnQsIHRvcCwgcmlnaHQsIGJv
dHRvbTsKLSAgICBtX3RpbGVyLT5jb250ZW50UmVjdFRvVGlsZUluZGljZXMobV9yZXF1ZXN0ZWRV
cGRhdGVSZWN0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworICAgIGludCBsZWZ0ID0gbV9y
ZXF1ZXN0ZWRVcGRhdGVUaWxlc1JlY3QueCgpOworICAgIGludCB0b3AgPSBtX3JlcXVlc3RlZFVw
ZGF0ZVRpbGVzUmVjdC55KCk7CisgICAgaW50IHJpZ2h0ID0gbV9yZXF1ZXN0ZWRVcGRhdGVUaWxl
c1JlY3QubWF4WCgpIC0gMTsKKyAgICBpbnQgYm90dG9tID0gbV9yZXF1ZXN0ZWRVcGRhdGVUaWxl
c1JlY3QubWF4WSgpIC0gMTsKICAgICBmb3IgKGludCBqID0gdG9wOyBqIDw9IGJvdHRvbTsgKytq
KSB7CiAgICAgICAgIGZvciAoaW50IGkgPSBsZWZ0OyBpIDw9IHJpZ2h0OyArK2kpIHsKICAgICAg
ICAgICAgIFVwZGF0YWJsZVRpbGUqIHRpbGUgPSB0aWxlQXQoaSwgaik7CkBAIC0zNDIsMzggKzM0
NSwxNyBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJvdGVjdFRpbGVUZXh0dXJlcyhjb25z
dCBJbnRSZWN0JiBjb250ZW50UmVjdCkKICAgICB9CiB9CiAKLXZvaWQgVGlsZWRMYXllckNocm9t
aXVtOjpwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCit2b2lkIFRp
bGVkTGF5ZXJDaHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlVGlsZXMoYm9vbCBpZGxlLCBpbnQgbGVm
dCwgaW50IHRvcCwgaW50IHJpZ2h0LCBpbnQgYm90dG9tKQogewotICAgIGlmICghbV90aWxlcikK
LSAgICAgICAgY3JlYXRlVGlsZXIoaXNOb25Db21wb3NpdGVkQ29udGVudCgpID8gQ0NMYXllclRp
bGluZ0RhdGE6Ok5vQm9yZGVyVGV4ZWxzIDogQ0NMYXllclRpbGluZ0RhdGE6Okhhc0JvcmRlclRl
eGVscyk7Ci0KLSAgICBBU1NFUlQobV90aWxlcik7Ci0KLSAgICBtX3NraXBzRHJhdyA9IGZhbHNl
OwotCiAgICAgLy8gUmVzZXQgbV91cGRhdGVSZWN0IGZvciBhbGwgdGlsZXMuCiAgICAgZm9yIChD
Q0xheWVyVGlsaW5nRGF0YTo6VGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1fdGlsZXIt
PnRpbGVzKCkuYmVnaW4oKTsgaXRlciAhPSBtX3RpbGVyLT50aWxlcygpLmVuZCgpOyArK2l0ZXIp
IHsKICAgICAgICAgVXBkYXRhYmxlVGlsZSogdGlsZSA9IHN0YXRpY19jYXN0PFVwZGF0YWJsZVRp
bGUqPihpdGVyLT5zZWNvbmQuZ2V0KCkpOwogICAgICAgICB0aWxlLT5tX3VwZGF0ZVJlY3QgPSBJ
bnRSZWN0KCk7CiAgICAgfQogCi0gICAgaWYgKGNvbnRlbnRSZWN0LmlzRW1wdHkoKSkgewotICAg
ICAgICBtX3JlcXVlc3RlZFVwZGF0ZVJlY3QgPSBJbnRSZWN0KCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBtX3RpbGVyLT5ncm93TGF5ZXJUb0NvbnRhaW4oY29udGVudFJlY3QpOwot
Ci0gICAgaWYgKCFtX3RpbGVyLT5udW1UaWxlcygpKSB7Ci0gICAgICAgIG1fcmVxdWVzdGVkVXBk
YXRlUmVjdCA9IEludFJlY3QoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIC8vIENy
ZWF0ZSB0aWxlcyBhcyBuZWVkZWQsIGV4cGFuZGluZyBhIGRpcnR5IHJlY3QgdG8gY29udGFpbiBh
bGwKICAgICAvLyB0aGUgZGlydHkgcmVnaW9ucyBjdXJyZW50bHkgYmVpbmcgZHJhd24uCiAgICAg
SW50UmVjdCBkaXJ0eUxheWVyUmVjdDsKLSAgICBpbnQgbGVmdCwgdG9wLCByaWdodCwgYm90dG9t
OwotICAgIG1fdGlsZXItPmNvbnRlbnRSZWN0VG9UaWxlSW5kaWNlcyhjb250ZW50UmVjdCwgbGVm
dCwgdG9wLCByaWdodCwgYm90dG9tKTsKICAgICBmb3IgKGludCBqID0gdG9wOyBqIDw9IGJvdHRv
bTsgKytqKSB7CiAgICAgICAgIGZvciAoaW50IGkgPSBsZWZ0OyBpIDw9IHJpZ2h0OyArK2kpIHsK
ICAgICAgICAgICAgIFVwZGF0YWJsZVRpbGUqIHRpbGUgPSB0aWxlQXQoaSwgaik7CkBAIC0zODQs
OCArMzY2LDExIEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGUoY29u
c3QgSW50UmVjdCYgY29udGVudFJlY3QpCiAgICAgICAgICAgICAgICAgdGlsZS0+bV9kaXJ0eUxh
eWVyUmVjdCA9IG1fdGlsZXItPnRpbGVMYXllclJlY3QodGlsZSk7CiAKICAgICAgICAgICAgIGlm
ICghdGlsZS0+bWFuYWdlZFRleHR1cmUoKS0+cmVzZXJ2ZShtX3RpbGVyLT50aWxlU2l6ZSgpLCBt
X3RleHR1cmVGb3JtYXQpKSB7Ci0gICAgICAgICAgICAgICAgbV9za2lwc0RyYXcgPSB0cnVlOwot
ICAgICAgICAgICAgICAgIGNsZWFudXBSZXNvdXJjZXMoKTsKKyAgICAgICAgICAgICAgICBtX3Nr
aXBzSWRsZVBhaW50ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpZiAoIWlkbGUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgbV9za2lwc0RyYXcgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBj
bGVhbnVwUmVzb3VyY2VzKCk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgIH0KIApAQCAtMzkzLDIyICszNzgsMjIgQEAgdm9pZCBUaWxlZExh
eWVyQ2hyb21pdW06OnByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkK
ICAgICAgICAgfQogICAgIH0KIAotICAgIC8vIER1ZSB0byBib3JkZXJzLCB3aGVuIHRoZSBwYWlu
dCByZWN0IGlzIGV4dGVuZGVkIHRvIHRpbGUgYm91bmRhcmllcywgaXQKLSAgICAvLyBtYXkgZW5k
IHVwIG92ZXJsYXBwaW5nIG1vcmUgdGlsZXMgdGhhbiB0aGUgb3JpZ2luYWwgY29udGVudCByZWN0
LiBSZWNvcmQKLSAgICAvLyB0aGF0IG9yaWdpbmFsIHJlY3Qgc28gd2UgZG9uJ3QgdXBsb2FkIG1v
cmUgdGlsZXMgdGhhbiBuZWNlc3NhcnkuCi0gICAgbV9yZXF1ZXN0ZWRVcGRhdGVSZWN0ID0gY29u
dGVudFJlY3Q7Ci0KICAgICBtX3BhaW50UmVjdCA9IG1fdGlsZXItPmxheWVyUmVjdFRvQ29udGVu
dFJlY3QoZGlydHlMYXllclJlY3QpOwogICAgIGlmIChkaXJ0eUxheWVyUmVjdC5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybjsKIAorICAgIC8vIER1ZSB0byBib3JkZXJzLCB3aGVuIHRoZSBwYWlu
dCByZWN0IGlzIGV4dGVuZGVkIHRvIHRpbGUgYm91bmRhcmllcywgaXQKKyAgICAvLyBtYXkgZW5k
IHVwIG92ZXJsYXBwaW5nIG1vcmUgdGlsZXMgdGhhbiB0aGUgb3JpZ2luYWwgY29udGVudCByZWN0
LiBSZWNvcmQKKyAgICAvLyB0aGUgb3JpZ2luYWwgdGlsZXMgc28gd2UgZG9uJ3QgdXBsb2FkIG1v
cmUgdGlsZXMgdGhhbiBuZWNlc3NhcnkuCisgICAgaWYgKCFtX3BhaW50UmVjdC5pc0VtcHR5KCkp
CisgICAgICAgIG1fcmVxdWVzdGVkVXBkYXRlVGlsZXNSZWN0ID0gSW50UmVjdChsZWZ0LCB0b3As
IHJpZ2h0IC0gbGVmdCArIDEsIGJvdHRvbSAtIHRvcCArIDEpOworCiAgICAgLy8gQ2FsbGluZyBw
cmVwYXJlVG9VcGRhdGUoKSBjYWxscyBpbnRvIFdlYktpdCB0byBwYWludCwgd2hpY2ggbWF5IGhh
dmUgdGhlIHNpZGUKICAgICAvLyBlZmZlY3Qgb2YgZGlzYWJsaW5nIGNvbXBvc2l0aW5nLCB3aGlj
aCBjYXVzZXMgb3VyIHJlZmVyZW5jZSB0byB0aGUgdGV4dHVyZSB1cGRhdGVyIHRvIGJlIGRlbGV0
ZWQuCiAgICAgLy8gSG93ZXZlciwgd2UgY2FuJ3QgZnJlZSB0aGUgbWVtb3J5IGJhY2tpbmcgdGhl
IEdyYXBoaWNzQ29udGV4dCB1bnRpbCB0aGUgcGFpbnQgZmluaXNoZXMsCiAgICAgLy8gc28gd2Ug
Z3JhYiBhIGxvY2FsIHJlZmVyZW5jZSBoZXJlIHRvIGhvbGQgdGhlIHVwZGF0ZXIgYWxpdmUgdW50
aWwgdGhlIHBhaW50IGNvbXBsZXRlcy4KICAgICBSZWZQdHI8TGF5ZXJUZXh0dXJlVXBkYXRlcj4g
cHJvdGVjdG9yKHRleHR1cmVVcGRhdGVyKCkpOwogICAgIHRleHR1cmVVcGRhdGVyKCktPnByZXBh
cmVUb1VwZGF0ZShtX3BhaW50UmVjdCwgbV90aWxlci0+dGlsZVNpemUoKSwgbV90aWxlci0+aGFz
Qm9yZGVyVGV4ZWxzKCksIGNvbnRlbnRzU2NhbGUoKSk7Ci0gICAgbV90aWxlci0+Y29udGVudFJl
Y3RUb1RpbGVJbmRpY2VzKG1fcmVxdWVzdGVkVXBkYXRlUmVjdCwgbGVmdCwgdG9wLCByaWdodCwg
Ym90dG9tKTsKICAgICBmb3IgKGludCBqID0gdG9wOyBqIDw9IGJvdHRvbTsgKytqKSB7CiAgICAg
ICAgIGZvciAoaW50IGkgPSBsZWZ0OyBpIDw9IHJpZ2h0OyArK2kpIHsKICAgICAgICAgICAgIFVw
ZGF0YWJsZVRpbGUqIHRpbGUgPSB0aWxlQXQoaSwgaik7CkBAIC00NDAsNSArNDI1LDEyMCBAQCB2
b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNv
bnRlbnRSZWN0KQogICAgIH0KIH0KIAorCit2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJlcGFy
ZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQoreworICAgIGlmICghbV90aWxl
cikKKyAgICAgICAgY3JlYXRlVGlsZXIoaXNOb25Db21wb3NpdGVkQ29udGVudCgpID8gQ0NMYXll
clRpbGluZ0RhdGE6Ok5vQm9yZGVyVGV4ZWxzIDogQ0NMYXllclRpbGluZ0RhdGE6Okhhc0JvcmRl
clRleGVscyk7CisKKyAgICBBU1NFUlQobV90aWxlcik7CisKKyAgICBtX3NraXBzRHJhdyA9IGZh
bHNlOworICAgIG1fc2tpcHNJZGxlUGFpbnQgPSBmYWxzZTsKKyAgICBtX3JlcXVlc3RlZFVwZGF0
ZVRpbGVzUmVjdCA9IEludFJlY3QoKTsKKyAgICBtX3BhaW50UmVjdCA9IEludFJlY3QoKTsKKwor
ICAgIGlmIChjb250ZW50UmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1f
dGlsZXItPmdyb3dMYXllclRvQ29udGFpbihjb250ZW50UmVjdCk7CisKKyAgICBpZiAoIW1fdGls
ZXItPm51bVRpbGVzKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGludCBsZWZ0LCB0b3AsIHJp
Z2h0LCBib3R0b207CisgICAgbV90aWxlci0+Y29udGVudFJlY3RUb1RpbGVJbmRpY2VzKGNvbnRl
bnRSZWN0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworCisgICAgcHJlcGFyZVRvVXBkYXRl
VGlsZXMoZmFsc2UsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7Cit9CisKK3ZvaWQgVGlsZWRM
YXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGVJZGxlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRS
ZWN0KQoreworICAgIC8vIEFib3J0IGlmIHdlIGhhdmUgYWxyZWFkeSBwcmVwYXJlZCBhIHBhaW50
IG9yIHJ1biBvdXQgb2YgbWVtb3J5LgorICAgIGlmIChtX3NraXBzSWRsZVBhaW50IHx8ICFtX3Bh
aW50UmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChtX3RpbGVy
KTsKKworICAgIEludFJlY3QgaWRsZVBhaW50Q29udGVudFJlY3QgPSBpZGxlUGFpbnRSZWN0KGNv
bnRlbnRSZWN0KTsKKyAgICBtX3RpbGVyLT5ncm93TGF5ZXJUb0NvbnRhaW4oaWRsZVBhaW50Q29u
dGVudFJlY3QpOworCisgICAgaWYgKCFtX3RpbGVyLT5udW1UaWxlcygpKQorICAgICAgICByZXR1
cm47CisKKyAgICAvLyBQcm90ZWN0IGFueSB0ZXh0dXJlcyBpbiB0aGUgcHJlLXBhaW50IGFyZWEg
c28gd2UgZG9uJ3QgZW5kIHVwIGp1c3QKKyAgICAvLyByZWNsYWltaW5nIHRoZW0gYmVsb3cuCisg
ICAgcHJvdGVjdFRpbGVUZXh0dXJlcyhpZGxlUGFpbnRDb250ZW50UmVjdCk7CisKKyAgICAvLyBF
eHBhbmQgb3V0d2FyZHMgdW50aWwgd2UgZmluZCBhIGRpcnR5IHJvdyBvciBjb2x1bW4gdG8gdXBk
YXRlLgorICAgIGludCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b207CisgICAgbV90aWxlci0+Y29u
dGVudFJlY3RUb1RpbGVJbmRpY2VzKGNvbnRlbnRSZWN0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0
b20pOworICAgIGludCBwcmVwYWludExlZnQsIHByZXBhaW50VG9wLCBwcmVwYWludFJpZ2h0LCBw
cmVwYWludEJvdHRvbTsKKyAgICBtX3RpbGVyLT5jb250ZW50UmVjdFRvVGlsZUluZGljZXMoaWRs
ZVBhaW50Q29udGVudFJlY3QsIHByZXBhaW50TGVmdCwgcHJlcGFpbnRUb3AsIHByZXBhaW50Umln
aHQsIHByZXBhaW50Qm90dG9tKTsKKyAgICB3aGlsZSAoIW1fc2tpcHNJZGxlUGFpbnQgJiYgKGxl
ZnQgPiBwcmVwYWludExlZnQgfHwgdG9wID4gcHJlcGFpbnRUb3AgfHwgcmlnaHQgPCBwcmVwYWlu
dFJpZ2h0IHx8IGJvdHRvbSA8IHByZXBhaW50Qm90dG9tKSkgeworICAgICAgICBpZiAoYm90dG9t
IDwgcHJlcGFpbnRCb3R0b20pIHsKKyAgICAgICAgICAgICsrYm90dG9tOworICAgICAgICAgICAg
cHJlcGFyZVRvVXBkYXRlVGlsZXModHJ1ZSwgbGVmdCwgYm90dG9tLCByaWdodCwgYm90dG9tKTsK
KyAgICAgICAgICAgIGlmICghbV9wYWludFJlY3QuaXNFbXB0eSgpIHx8IG1fc2tpcHNJZGxlUGFp
bnQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRvcCA+
IHByZXBhaW50VG9wKSB7CisgICAgICAgICAgICAtLXRvcDsKKyAgICAgICAgICAgIHByZXBhcmVU
b1VwZGF0ZVRpbGVzKHRydWUsIGxlZnQsIHRvcCwgcmlnaHQsIHRvcCk7CisgICAgICAgICAgICBp
ZiAoIW1fcGFpbnRSZWN0LmlzRW1wdHkoKSB8fCBtX3NraXBzSWRsZVBhaW50KQorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChsZWZ0ID4gcHJlcGFpbnRMZWZ0
KSB7CisgICAgICAgICAgICAtLWxlZnQ7CisgICAgICAgICAgICBwcmVwYXJlVG9VcGRhdGVUaWxl
cyh0cnVlLCBsZWZ0LCB0b3AsIGxlZnQsIGJvdHRvbSk7CisgICAgICAgICAgICBpZiAoIW1fcGFp
bnRSZWN0LmlzRW1wdHkoKSB8fCBtX3NraXBzSWRsZVBhaW50KQorICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChyaWdodCA8IHByZXBhaW50UmlnaHQpIHsKKyAg
ICAgICAgICAgICsrcmlnaHQ7CisgICAgICAgICAgICBwcmVwYXJlVG9VcGRhdGVUaWxlcyh0cnVl
LCByaWdodCwgdG9wLCByaWdodCwgYm90dG9tKTsKKyAgICAgICAgICAgIGlmICghbV9wYWludFJl
Y3QuaXNFbXB0eSgpIHx8IG1fc2tpcHNJZGxlUGFpbnQpCisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgVGlsZWRMYXllckNocm9taXVtOjpuZWVkc0lk
bGVQYWludChjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKK3sKKyAgICBpZiAobV9za2lwc0lk
bGVQYWludCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQVNTRVJUKG1fdGlsZXIpOwor
CisgICAgSW50UmVjdCBpZGxlUGFpbnRDb250ZW50UmVjdCA9IGlkbGVQYWludFJlY3QoY29udGVu
dFJlY3QpOworCisgICAgaW50IGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbTsKKyAgICBtX3RpbGVy
LT5jb250ZW50UmVjdFRvVGlsZUluZGljZXMoaWRsZVBhaW50Q29udGVudFJlY3QsIGxlZnQsIHRv
cCwgcmlnaHQsIGJvdHRvbSk7CisgICAgZm9yIChpbnQgaiA9IHRvcDsgaiA8PSBib3R0b207ICsr
aikgeworICAgICAgICBmb3IgKGludCBpID0gbGVmdDsgaSA8PSByaWdodDsgKytpKSB7CisgICAg
ICAgICAgICBpZiAobV9yZXF1ZXN0ZWRVcGRhdGVUaWxlc1JlY3QuY29udGFpbnMoSW50UG9pbnQo
aSwgaikpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgVXBkYXRhYmxl
VGlsZSogdGlsZSA9IHRpbGVBdChpLCBqKTsKKyAgICAgICAgICAgIGlmICghdGlsZSB8fCAhdGls
ZS0+bWFuYWdlZFRleHR1cmUoKS0+aXNWYWxpZChtX3RpbGVyLT50aWxlU2l6ZSgpLCBtX3RleHR1
cmVGb3JtYXQpIHx8IHRpbGUtPmlzRGlydHkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0ludFJlY3QgVGls
ZWRMYXllckNocm9taXVtOjppZGxlUGFpbnRSZWN0KGNvbnN0IEludFJlY3QmIHZpc2libGVDb250
ZW50UmVjdCkKK3sKKyAgICBBU1NFUlQobV90aWxlcik7CisgICAgSW50UmVjdCBwcmVwYWludFJl
Y3QgPSB2aXNpYmxlQ29udGVudFJlY3Q7CisgICAgLy8gRklYTUU6IFRoaXMgY2FuIGJlIG1hZGUg
YSBsb3QgbGFyZ2VyIGlmIHdlIGNhbjoKKyAgICAvLyAtIHJlc2VydmUgbWVtb3J5IGF0IGEgbG93
ZXIgcHJpb3JpdHkgdGhhbiBmb3IgdmlzaWJsZSBjb250ZW50CisgICAgLy8gLSBvbmx5IHJlc2Vy
dmUgaWRsZSBwYWludCB0aWxlcyB1cCB0byBhIG1lbW9yeSByZWNsYWltIHRocmVzaG9sZCBhbmQK
KyAgICAvLyAtIGluc3VyZSB3ZSBwbGF5IG5pY2VseSB3aXRoIG90aGVyIGxheWVycworICAgIHBy
ZXBhaW50UmVjdC5pbmZsYXRlWChtX3RpbGVyLT50aWxlU2l6ZSgpLndpZHRoKCkpOworICAgIHBy
ZXBhaW50UmVjdC5pbmZsYXRlWShtX3RpbGVyLT50aWxlU2l6ZSgpLmhlaWdodCgpKTsKKyAgICBw
cmVwYWludFJlY3QuaW50ZXJzZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgY29udGVudEJv
dW5kcygpKSk7CisgICAgcmV0dXJuIHByZXBhaW50UmVjdDsKK30KKwogfQogI2VuZGlmIC8vIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmgKaW5k
ZXggMjhlN2QxZDBjNTY5NjgwMGYzZDYyMTI0MDhkZDhkMThiY2VkYmVjMi4uNzRlYmZlY2VlNmVj
N2ExYjk0MzlmNzg2ZTc2MTQ0NWRjYzU5N2ZlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVt
LmgKQEAgLTc1LDkgKzc1LDE2IEBAIHByb3RlY3RlZDoKIAogICAgIC8vIFNldCBpbnZhbGlkYXRp
b25zIHRvIGJlIHBvdGVudGlhbGx5IHJlcGFpbnRlZCBkdXJpbmcgdXBkYXRlKCkuCiAgICAgdm9p
ZCBpbnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCk7CisKICAgICAvLyBQ
cmVwYXJlIGRhdGEgbmVlZGVkIHRvIHVwZGF0ZSB0ZXh0dXJlcyB0aGF0IGludGVyc2VjdCB3aXRo
IGNvbnRlbnRSZWN0LgogICAgIHZvaWQgcHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNv
bnRlbnRSZWN0KTsKIAorICAgIC8vIFNhbWUgYXMgYWJvdmUsIGJ1dCB0aGlzIHdpbGwgdHJ5IHRv
IHBhaW50IGFkZGl0aW9uYWwgc3Vycm91bmRpbmcgY29udGVudCBpZiBpZGxlLgorICAgIHZvaWQg
cHJlcGFyZVRvVXBkYXRlSWRsZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCk7CisKKyAgICAv
LyBBZnRlciBwcmVwYXJpbmcgYW4gdXBkYXRlLCByZXR1cm5zIHRydWUgaWYgbW9yZSBwcmUtcGFp
bnRpbmcgaXMgbmVlZGVkLgorICAgIGJvb2wgbmVlZHNJZGxlUGFpbnQoY29uc3QgSW50UmVjdCYg
Y29udGVudFJlY3QpOworCiAgICAgdmlydHVhbCB2b2lkIHByb3RlY3RWaXNpYmxlVGlsZVRleHR1
cmVzKCk7CiAKICAgICB2aXJ0dWFsIFRleHR1cmVNYW5hZ2VyKiB0ZXh0dXJlTWFuYWdlcigpIGNv
bnN0OwpAQCAtOTAsMTcgKzk3LDIyIEBAIHByaXZhdGU6CiAgICAgdm9pZCBjcmVhdGVUaWxlcklm
TmVlZGVkKCk7CiAgICAgdm9pZCBzZXRUaWxpbmdPcHRpb24oVGlsaW5nT3B0aW9uKTsKIAorICAg
IHZvaWQgcHJlcGFyZVRvVXBkYXRlVGlsZXMoYm9vbCBpZGxlLCBpbnQgbGVmdCwgaW50IHRvcCwg
aW50IHJpZ2h0LCBpbnQgYm90dG9tKTsKKyAgICBJbnRSZWN0IGlkbGVQYWludFJlY3QoY29uc3Qg
SW50UmVjdCYgdmlzaWJsZUNvbnRlbnRSZWN0KTsKKwogICAgIFVwZGF0YWJsZVRpbGUqIHRpbGVB
dChpbnQsIGludCkgY29uc3Q7CiAgICAgVXBkYXRhYmxlVGlsZSogY3JlYXRlVGlsZShpbnQsIGlu
dCk7CiAKICAgICAvLyBUZW1wb3Jhcnkgc3RhdGUgaGVsZCBiZXR3ZWVuIHByZXBhcmVUb1VwZGF0
ZSgpIGFuZCB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKCkuCi0gICAgSW50UmVjdCBtX3JlcXVl
c3RlZFVwZGF0ZVJlY3Q7CisgICAgSW50UmVjdCBtX3JlcXVlc3RlZFVwZGF0ZVRpbGVzUmVjdDsK
KwogICAgIC8vIFN0YXRlIGhlbGQgYmV0d2VlbiBwcmVwYXJlVG9VcGRhdGUoKSBhbmQgcHVzaFBy
b3BlcnRpZXNUbygpLiBUaGlzIHJlcHJlc2VudHMgdGhlIGFyZWEKICAgICAvLyBvZiB0aGUgbGF5
ZXIgdGhhdCBpcyBhY3R1YWxseSByZS1wYWludGVkIGJ5IFdlYktpdC4KICAgICBJbnRSZWN0IG1f
cGFpbnRSZWN0OwogCiAgICAgR0MzRGVudW0gbV90ZXh0dXJlRm9ybWF0OwogICAgIGJvb2wgbV9z
a2lwc0RyYXc7CisgICAgYm9vbCBtX3NraXBzSWRsZVBhaW50OwogICAgIExheWVyVGV4dHVyZVVw
ZGF0ZXI6Ok9yaWVudGF0aW9uIG1fdGV4dHVyZU9yaWVudGF0aW9uOwogICAgIExheWVyVGV4dHVy
ZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZvcm1hdCBtX3NhbXBsZWRUZXhlbEZvcm1hdDsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggMjdkOTU2YTdjN2FmYmQwOTVkYjk0NWI5
MzRhMTY2ZWZhNTVmMzc0Zi4uNjA4OGUwYWUxZTA4MDA4ZDc2NTg2OTI3NDBkZWM3ZjdiMWQxZWI3
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCkBAIC02Nyw2ICs2Nyw3IEBAIEND
TGF5ZXJUcmVlSG9zdDo6Q0NMYXllclRyZWVIb3N0KENDTGF5ZXJUcmVlSG9zdENsaWVudCogY2xp
ZW50LCBjb25zdCBDQ1NldHRpbmdzCiAgICAgLCBtX3BhZ2VTY2FsZSgxKQogICAgICwgbV9taW5Q
YWdlU2NhbGUoMSkKICAgICAsIG1fbWF4UGFnZVNjYWxlKDEpCisgICAgLCBtX3RyaWdnZXJJZGxl
UGFpbnRzKHRydWUpCiB7CiAgICAgQVNTRVJUKENDUHJveHk6OmlzTWFpblRocmVhZCgpKTsKICAg
ICBudW1MYXllclRyZWVJbnN0YW5jZXMrKzsKQEAgLTE4OCw3ICsxODksOSBAQCBHcmFwaGljc0Nv
bnRleHQzRCogQ0NMYXllclRyZWVIb3N0Ojpjb250ZXh0KCkKIAogYm9vbCBDQ0xheWVyVHJlZUhv
c3Q6OmNvbXBvc2l0ZUFuZFJlYWRiYWNrKHZvaWQgKnBpeGVscywgY29uc3QgSW50UmVjdCYgcmVj
dCkKIHsKKyAgICBtX3RyaWdnZXJJZGxlUGFpbnRzID0gZmFsc2U7CiAgICAgcmV0dXJuIG1fcHJv
eHktPmNvbXBvc2l0ZUFuZFJlYWRiYWNrKHBpeGVscywgcmVjdCk7CisgICAgbV90cmlnZ2VySWRs
ZVBhaW50cyA9IHRydWU7CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpmaW5pc2hBbGxSZW5k
ZXJpbmcoKQpAQCAtMzUwLDEwICszNTMsMjQgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnVwZGF0
ZUxheWVycyhMYXllckNocm9taXVtKiByb290TGF5ZXIpCiAgICAgICAgIENDTGF5ZXJUcmVlSG9z
dENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3RMYXllciwg
cm9vdExheWVyLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIG1fdXBkYXRlTGlzdCwg
cm9vdFJlbmRlclN1cmZhY2UtPmxheWVyTGlzdCgpLCBsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVz
KCkubWF4VGV4dHVyZVNpemUpOwogICAgIH0KIAotICAgIHBhaW50TGF5ZXJDb250ZW50cyhtX3Vw
ZGF0ZUxpc3QpOworICAgIHBhaW50TGF5ZXJDb250ZW50cyhtX3VwZGF0ZUxpc3QsIFBhaW50Vmlz
aWJsZSk7CisgICAgLy8gVGhlIHNlY29uZCAoaWRsZSkgcGFpbnQgd2lsbCBiZSBhIG5vLW9wIGlu
IGxheWVycyB3aGVyZSBwYWludGluZyBhbHJlYWR5IG9jY3VyZWQgYWJvdmUuCisgICAgaWYgKG1f
dHJpZ2dlcklkbGVQYWludHMpCisgICAgICAgIHBhaW50TGF5ZXJDb250ZW50cyhtX3VwZGF0ZUxp
c3QsIFBhaW50SWRsZSk7CiB9CiAKLXZvaWQgQ0NMYXllclRyZWVIb3N0OjpwYWludE1hc2tBbmRS
ZXBsaWNhRm9yUmVuZGVyU3VyZmFjZShMYXllckNocm9taXVtKiByZW5kZXJTdXJmYWNlTGF5ZXIp
CisvLyBzdGF0aWMKK3ZvaWQgQ0NMYXllclRyZWVIb3N0OjpwYWludENvbnRlbnRzSWZEaXJ0eShM
YXllckNocm9taXVtKiBsYXllciwgUGFpbnRUeXBlIHBhaW50VHlwZSkKK3sKKyAgICBBU1NFUlQo
bGF5ZXIpOworICAgIEFTU0VSVChQYWludFZpc2libGUgPT0gcGFpbnRUeXBlIHx8IFBhaW50SWRs
ZSA9PSBwYWludFR5cGUpOworICAgIGlmIChQYWludFZpc2libGUgPT0gcGFpbnRUeXBlKQorICAg
ICAgICBsYXllci0+cGFpbnRDb250ZW50c0lmRGlydHkoKTsKKyAgICBlbHNlCisgICAgICAgIGxh
eWVyLT5pZGxlUGFpbnRDb250ZW50c0lmRGlydHkoKTsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhv
c3Q6OnBhaW50TWFza0FuZFJlcGxpY2FGb3JSZW5kZXJTdXJmYWNlKExheWVyQ2hyb21pdW0qIHJl
bmRlclN1cmZhY2VMYXllciwgUGFpbnRUeXBlIHBhaW50VHlwZSkKIHsKICAgICAvLyBOb3RlOiBN
YXNrcyBhbmQgcmVwbGljYXMgb25seSBleGlzdCBmb3IgbGF5ZXJzIHRoYXQgb3duIHJlbmRlciBz
dXJmYWNlcy4gSWYgd2UgcmVhY2ggdGhpcyBwb2ludAogICAgIC8vIGluIGNvZGUsIHdlIGFscmVh
ZHkga25vdyB0aGF0IGF0IGxlYXN0IHNvbWV0aGluZyB3aWxsIGJlIGRyYXduIGludG8gdGhpcyBy
ZW5kZXIgc3VyZmFjZSwgc28gdGhlCkBAIC0zNjIsMjQgKzM3OSwyNCBAQCB2b2lkIENDTGF5ZXJU
cmVlSG9zdDo6cGFpbnRNYXNrQW5kUmVwbGljYUZvclJlbmRlclN1cmZhY2UoTGF5ZXJDaHJvbWl1
bSogcmVuZGVyUwogICAgIGlmIChyZW5kZXJTdXJmYWNlTGF5ZXItPm1hc2tMYXllcigpKSB7CiAg
ICAgICAgIHJlbmRlclN1cmZhY2VMYXllci0+bWFza0xheWVyKCktPnNldExheWVyVHJlZUhvc3Qo
dGhpcyk7CiAgICAgICAgIHJlbmRlclN1cmZhY2VMYXllci0+bWFza0xheWVyKCktPnNldFZpc2li
bGVMYXllclJlY3QoSW50UmVjdChJbnRQb2ludCgpLCByZW5kZXJTdXJmYWNlTGF5ZXItPmNvbnRl
bnRCb3VuZHMoKSkpOwotICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXItPm1hc2tMYXllcigpLT5w
YWludENvbnRlbnRzSWZEaXJ0eSgpOworICAgICAgICBwYWludENvbnRlbnRzSWZEaXJ0eShyZW5k
ZXJTdXJmYWNlTGF5ZXItPm1hc2tMYXllcigpLCBwYWludFR5cGUpOwogICAgIH0KIAogICAgIExh
eWVyQ2hyb21pdW0qIHJlcGxpY2FMYXllciA9IHJlbmRlclN1cmZhY2VMYXllci0+cmVwbGljYUxh
eWVyKCk7CiAgICAgaWYgKHJlcGxpY2FMYXllcikgewogCiAgICAgICAgIHJlcGxpY2FMYXllci0+
c2V0TGF5ZXJUcmVlSG9zdCh0aGlzKTsKLSAgICAgICAgcmVwbGljYUxheWVyLT5wYWludENvbnRl
bnRzSWZEaXJ0eSgpOworICAgICAgICBwYWludENvbnRlbnRzSWZEaXJ0eShyZXBsaWNhTGF5ZXIs
IHBhaW50VHlwZSk7CiAKICAgICAgICAgaWYgKHJlcGxpY2FMYXllci0+bWFza0xheWVyKCkpIHsK
ICAgICAgICAgICAgIHJlcGxpY2FMYXllci0+bWFza0xheWVyKCktPnNldExheWVyVHJlZUhvc3Qo
dGhpcyk7CiAgICAgICAgICAgICByZXBsaWNhTGF5ZXItPm1hc2tMYXllcigpLT5zZXRWaXNpYmxl
TGF5ZXJSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgcmVwbGljYUxheWVyLT5tYXNrTGF5ZXIoKS0+
Y29udGVudEJvdW5kcygpKSk7Ci0gICAgICAgICAgICByZXBsaWNhTGF5ZXItPm1hc2tMYXllcigp
LT5wYWludENvbnRlbnRzSWZEaXJ0eSgpOworICAgICAgICAgICAgcGFpbnRDb250ZW50c0lmRGly
dHkocmVwbGljYUxheWVyLT5tYXNrTGF5ZXIoKSwgcGFpbnRUeXBlKTsKICAgICAgICAgfQogICAg
IH0KIH0KIAotdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnBhaW50TGF5ZXJDb250ZW50cyhjb25zdCBM
YXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QpCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6
cGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dCwgUGFpbnRUeXBlIHBhaW50VHlwZSkKIHsKICAgICBmb3IgKGludCBzdXJmYWNlSW5kZXggPSBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSAtIDE7IHN1cmZhY2VJbmRleCA+PSAwIDsgLS1z
dXJmYWNlSW5kZXgpIHsKICAgICAgICAgTGF5ZXJDaHJvbWl1bSogcmVuZGVyU3VyZmFjZUxheWVy
ID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdFtzdXJmYWNlSW5kZXhdLmdldCgpOwpAQCAtMzg4LDcg
KzQwNSw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpwYWludExheWVyQ29udGVudHMoY29uc3Qg
TGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0CiAgICAgICAgIEFTU0VSVChyZW5kZXJT
dXJmYWNlLT5kcmF3T3BhY2l0eSgpKTsKIAogICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXItPnNl
dExheWVyVHJlZUhvc3QodGhpcyk7Ci0gICAgICAgIHBhaW50TWFza0FuZFJlcGxpY2FGb3JSZW5k
ZXJTdXJmYWNlKHJlbmRlclN1cmZhY2VMYXllcik7CisgICAgICAgIHBhaW50TWFza0FuZFJlcGxp
Y2FGb3JSZW5kZXJTdXJmYWNlKHJlbmRlclN1cmZhY2VMYXllciwgcGFpbnRUeXBlKTsKIAogICAg
ICAgICBjb25zdCBMYXllckxpc3QmIGxheWVyTGlzdCA9IHJlbmRlclN1cmZhY2UtPmxheWVyTGlz
dCgpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGxheWVySW5kZXggPSAwOyBsYXllckluZGV4IDwg
bGF5ZXJMaXN0LnNpemUoKTsgKytsYXllckluZGV4KSB7CkBAIC00MDEsMTAgKzQxOCw5IEBAIHZv
aWQgQ0NMYXllclRyZWVIb3N0OjpwYWludExheWVyQ29udGVudHMoY29uc3QgTGF5ZXJMaXN0JiBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0CiAKICAgICAgICAgICAgIGxheWVyLT5zZXRMYXllclRyZWVI
b3N0KHRoaXMpOwogCi0gICAgICAgICAgICBBU1NFUlQobGF5ZXItPm9wYWNpdHkoKSk7CiAgICAg
ICAgICAgICBBU1NFUlQoIWxheWVyLT5ib3VuZHMoKS5pc0VtcHR5KCkpOwogCi0gICAgICAgICAg
ICBsYXllci0+cGFpbnRDb250ZW50c0lmRGlydHkoKTsKKyAgICAgICAgICAgIHBhaW50Q29udGVu
dHNJZkRpcnR5KGxheWVyLCBwYWludFR5cGUpOwogICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3QuaAppbmRleCBhYWFkMTQyMjlkMzUxMGVlMTkxMDIxYzc2NGM3NWI0
ZmI0NzNhYjU1Li5lYjVjNjQ2ZmQ5NDU5NjNkZTFmYmQ2OGUxMDdmZGQxM2U1MjBhNzQ0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaApAQCAtMjAwLDggKzIwMCwxMCBAQCBwcm90ZWN0ZWQ6
CiBwcml2YXRlOgogICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IExh
eWVyTGlzdDsKIAotICAgIHZvaWQgcGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExheWVyTGlzdCYp
OwotICAgIHZvaWQgcGFpbnRNYXNrQW5kUmVwbGljYUZvclJlbmRlclN1cmZhY2UoTGF5ZXJDaHJv
bWl1bSopOworICAgIGVudW0gUGFpbnRUeXBlIHsgUGFpbnRWaXNpYmxlLCBQYWludElkbGUgfTsK
KyAgICBzdGF0aWMgdm9pZCBwYWludENvbnRlbnRzSWZEaXJ0eShMYXllckNocm9taXVtKiwgUGFp
bnRUeXBlKTsKKyAgICB2b2lkIHBhaW50TGF5ZXJDb250ZW50cyhjb25zdCBMYXllckxpc3QmLCBQ
YWludFR5cGUpOworICAgIHZvaWQgcGFpbnRNYXNrQW5kUmVwbGljYUZvclJlbmRlclN1cmZhY2Uo
TGF5ZXJDaHJvbWl1bSosIFBhaW50VHlwZSk7CiAKICAgICB2b2lkIHVwZGF0ZUxheWVycyhMYXll
ckNocm9taXVtKik7CiAgICAgdm9pZCBjbGVhclBlbmRpbmdVcGRhdGUoKTsKQEAgLTIzMiw2ICsy
MzQsNyBAQCBwcml2YXRlOgogCiAgICAgZmxvYXQgbV9wYWdlU2NhbGU7CiAgICAgZmxvYXQgbV9t
aW5QYWdlU2NhbGUsIG1fbWF4UGFnZVNjYWxlOworICAgIGJvb2wgbV90cmlnZ2VySWRsZVBhaW50
czsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NM
YXllclRyZWVIb3N0VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5
ZXJUcmVlSG9zdFRlc3QuY3BwCmluZGV4IDM2ZmQ3ZGJkMDdiZGM3Y2YxYzg2MWZkODJhZWJjMmIw
ODRhMDNhMzMuLmE2NjdlZGMwNjQ1ZDU5YWE4ODk5M2Y2YTM2NzBkNzczODgyNjkxNjIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0
LmNwcApAQCAtOTQ4LDcgKzk0OCw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxD
b250ZW50TGF5ZXJDaHJvbWl1bVdpdGhVcGRhdGVUcmFja2luZz4gY3JlYXRlKENDTGF5ZXJEZWxl
Z2F0ZSAqZGVsZWdhdGUpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBDb250ZW50TGF5ZXJDaHJvbWl1
bVdpdGhVcGRhdGVUcmFja2luZyhkZWxlZ2F0ZSkpOyB9CiAKICAgICBpbnQgcGFpbnRDb250ZW50
c0NvdW50KCkgeyByZXR1cm4gbV9wYWludENvbnRlbnRzQ291bnQ7IH0KLSAgICB2b2lkIHJlc2V0
UGFpbnRDb250ZW50c0NvdW50KCkgeyBtX3BhaW50Q29udGVudHNDb3VudCA9IDA7IH0KKyAgICBp
bnQgaWRsZVBhaW50Q29udGVudHNDb3VudCgpIHsgcmV0dXJuIG1faWRsZVBhaW50Q29udGVudHND
b3VudDsgfQorICAgIHZvaWQgcmVzZXRQYWludENvbnRlbnRzQ291bnQoKSB7IG1fcGFpbnRDb250
ZW50c0NvdW50ID0gMDsgbV9pZGxlUGFpbnRDb250ZW50c0NvdW50ID0gMDt9CiAKICAgICBpbnQg
dXBkYXRlQ291bnQoKSB7IHJldHVybiBtX3VwZGF0ZUNvdW50OyB9CiAgICAgdm9pZCByZXNldFVw
ZGF0ZUNvdW50KCkgeyBtX3VwZGF0ZUNvdW50ID0gMDsgfQpAQCAtOTU5LDYgKzk2MCwxMiBAQCBw
dWJsaWM6CiAgICAgICAgIG1fcGFpbnRDb250ZW50c0NvdW50Kys7CiAgICAgfQogCisgICAgdmly
dHVhbCB2b2lkIGlkbGVQYWludENvbnRlbnRzSWZEaXJ0eSgpCisgICAgeworICAgICAgICBDb250
ZW50TGF5ZXJDaHJvbWl1bTo6aWRsZVBhaW50Q29udGVudHNJZkRpcnR5KCk7CisgICAgICAgIG1f
aWRsZVBhaW50Q29udGVudHNDb3VudCsrOworICAgIH0KKwogICAgIHZpcnR1YWwgdm9pZCB1cGRh
dGVDb21wb3NpdG9yUmVzb3VyY2VzKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBDQ1RleHR1
cmVVcGRhdGVyJiB1cGRhdGVyKQogICAgIHsKICAgICAgICAgQ29udGVudExheWVyQ2hyb21pdW06
OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoY29udGV4dCwgdXBkYXRlcik7CkBAIC05NjksMTIg
Kzk3NiwxNCBAQCBwcml2YXRlOgogICAgIGV4cGxpY2l0IENvbnRlbnRMYXllckNocm9taXVtV2l0
aFVwZGF0ZVRyYWNraW5nKENDTGF5ZXJEZWxlZ2F0ZSAqZGVsZWdhdGUpCiAgICAgICAgIDogQ29u
dGVudExheWVyQ2hyb21pdW0oZGVsZWdhdGUpCiAgICAgICAgICwgbV9wYWludENvbnRlbnRzQ291
bnQoMCkKKyAgICAgICAgLCBtX2lkbGVQYWludENvbnRlbnRzQ291bnQoMCkKICAgICAgICAgLCBt
X3VwZGF0ZUNvdW50KDApCiAgICAgewogICAgICAgICBzZXRCb3VuZHMoSW50U2l6ZSgxMCwgMTAp
KTsKICAgICB9CiAKICAgICBpbnQgbV9wYWludENvbnRlbnRzQ291bnQ7CisgICAgaW50IG1faWRs
ZVBhaW50Q29udGVudHNDb3VudDsKICAgICBpbnQgbV91cGRhdGVDb3VudDsKIH07CiAKQEAgLTEw
MDUsNiArMTAxNCw5IEBAIHB1YmxpYzoKICAgICAgICAgLy8gcGFpbnRDb250ZW50c0lmRGlydHko
KSBzaG91bGQgaGF2ZSBiZWVuIGNhbGxlZCBvbmNlLgogICAgICAgICBFWFBFQ1RfRVEoMSwgbV91
cGRhdGVDaGVja0xheWVyLT5wYWludENvbnRlbnRzQ291bnQoKSk7CiAKKyAgICAgICAgLy8gaWRs
ZVBhaW50Q29udGVudHNJZkRpcnR5KCkgc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQgb25jZQorICAg
ICAgICBFWFBFQ1RfRVEoMSwgbV91cGRhdGVDaGVja0xheWVyLT5pZGxlUGFpbnRDb250ZW50c0Nv
dW50KCkpOworCiAgICAgICAgIC8vIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoKSBzaG91bGQg
aGF2ZSBiZWVuIGNhbGxlZCB0aGUgc2FtZQogICAgICAgICAvLyBhbW91dCBvZiB0aW1lcyBhcyBw
YWludENvbnRlbnRzSWZEaXJ0eSgpLgogICAgICAgICBFWFBFQ1RfRVEobV91cGRhdGVDaGVja0xh
eWVyLT5wYWludENvbnRlbnRzQ291bnQoKSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvVGlsZWRMYXllckNocm9taXVtVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL1RpbGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCmluZGV4IDYzYWE0NTZhZDhk
OGNjYjNmZTA0ZmFmYzE2MjBiZjBmMjRlNjdmNDMuLjIyOWU0NWJlYzNiMmEwN2IzMGIyODIwNDhj
Mzk3NjdiZDBiNmRiZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
VGlsZWRMYXllckNocm9taXVtVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0LmNwcApAQCAtOTgsNiArOTgsMTYgQEAgcHVibGlj
OgogICAgICAgICBUaWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVUb1VwZGF0ZShyZWN0KTsKICAg
ICB9CiAKKyAgICB2b2lkIHByZXBhcmVUb1VwZGF0ZUlkbGUoY29uc3QgSW50UmVjdCYgcmVjdCkK
KyAgICB7CisgICAgICAgIFRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlSWRsZShy
ZWN0KTsKKyAgICB9CisKKyAgICBib29sIG5lZWRzSWRsZVBhaW50KGNvbnN0IEludFJlY3QmIHJl
Y3QpCisgICAgeworICAgICAgICByZXR1cm4gVGlsZWRMYXllckNocm9taXVtOjpuZWVkc0lkbGVQ
YWludChyZWN0KTsKKyAgICB9CisKICAgICB2aXJ0dWFsIFRleHR1cmVNYW5hZ2VyKiB0ZXh0dXJl
TWFuYWdlcigpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZU1hbmFnZXI7IH0KIAogcHJpdmF0ZToK
QEAgLTE0Niw1ICsxNTYsMTA3IEBAIFRFU1QoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaERp
cnR5VGlsZXMpCiAgICAgRVhQRUNUX0ZBTFNFKGxheWVySW1wbC0+aGFzVGlsZUF0KDAsIDEpKTsK
IH0KIAorVEVTVChUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoSWRsZVBhaW50VGlsZXMpCit7
CisgICAgT3duUHRyPFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IFRleHR1cmVNYW5h
Z2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQsIDIqMTAyNCoxMDI0LCAxMDI0KTsKKyAgICBSZWZQdHI8
RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5
ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOworICAgIERlYnVnU2NvcGVkU2V0SW1w
bFRocmVhZCBpbXBsVGhyZWFkOworICAgIFJlZlB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5
ZXJJbXBsID0gYWRvcHRSZWYobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDApKTsKKworICAgIEZh
a2VUZXh0dXJlQWxsb2NhdG9yIHRleHR1cmVBbGxvY2F0b3I7CisgICAgQ0NUZXh0dXJlVXBkYXRl
ciB1cGRhdGVyKCZ0ZXh0dXJlQWxsb2NhdG9yKTsKKworICAgIC8vIFRoZSB0aWxlIHNpemUgaXMg
MTAweDEwMC4gU2V0dXAgNXg1IHRpbGVzIHdpdGggb25lIHZpc2libGUgdGlsZSBpbiB0aGUgY2Vu
dGVyLgorICAgIEludFNpemUgY29udGVudEJvdW5kcyg1MDAsIDUwMCk7CisgICAgSW50UmVjdCBj
b250ZW50UmVjdChJbnRQb2ludDo6emVybygpLCBjb250ZW50Qm91bmRzKTsKKyAgICBJbnRSZWN0
IHZpc2libGVSZWN0KDIwMCwgMjAwLCAxMDAsIDEwMCk7CisKKyAgICAvLyBUaGlzIGludmFsaWRh
dGVzIDI1IHRpbGVzIGFuZCB0aGVuIHBhaW50cyBvbmUgdmlzaWJsZSB0aWxlLgorICAgIGxheWVy
LT5zZXRCb3VuZHMoY29udGVudEJvdW5kcyk7CisgICAgbGF5ZXItPnNldFZpc2libGVMYXllclJl
Y3QodmlzaWJsZVJlY3QpOworICAgIGxheWVyLT5pbnZhbGlkYXRlUmVjdChjb250ZW50UmVjdCk7
CisgICAgbGF5ZXItPnByZXBhcmVUb1VwZGF0ZSh2aXNpYmxlUmVjdCk7CisKKyAgICAvLyBXZSBz
aG91bGQgbmVlZCBpZGxlLXBhaW50aW5nIGZvciAzeDMgdGlsZXMgaW4gdGhlIGNlbnRlci4KKyAg
ICBFWFBFQ1RfVFJVRShsYXllci0+bmVlZHNJZGxlUGFpbnQodmlzaWJsZVJlY3QpKTsKKworICAg
IGxheWVyLT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKDAsIHVwZGF0ZXIpOworICAgIGxheWVy
LT5wdXNoUHJvcGVydGllc1RvKGxheWVySW1wbC5nZXQoKSk7CisKKyAgICAvLyBXZSBzaG91bGQg
aGF2ZSBvbmUgdGlsZSBvbiB0aGUgaW1wbCBzaWRlLgorICAgIEVYUEVDVF9UUlVFKGxheWVySW1w
bC0+aGFzVGlsZUF0KDIsIDIpKTsKKworICAgIHRleHR1cmVNYW5hZ2VyLT51bnByb3RlY3RBbGxU
ZXh0dXJlcygpOworCisgICAgLy8gRm9yIHRoZSBuZXh0IGZvdXIgdXBkYXRlcywgd2Ugc2hvdWxk
IGRldGVjdCB3ZSBzdGlsbCBuZWVkIGlkbGUgcGFpbnRpbmcuCisgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCA0OyBpKyspIHsKKyAgICAgICAgbGF5ZXItPnByZXBhcmVUb1VwZGF0ZSh2aXNpYmxlUmVj
dCk7CisgICAgICAgIEVYUEVDVF9UUlVFKGxheWVyLT5uZWVkc0lkbGVQYWludCh2aXNpYmxlUmVj
dCkpOworICAgICAgICBsYXllci0+cHJlcGFyZVRvVXBkYXRlSWRsZSh2aXNpYmxlUmVjdCk7Cisg
ICAgICAgIGxheWVyLT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKDAsIHVwZGF0ZXIpOworICAg
ICAgICBsYXllci0+cHVzaFByb3BlcnRpZXNUbyhsYXllckltcGwuZ2V0KCkpOworICAgICAgICB0
ZXh0dXJlTWFuYWdlci0+dW5wcm90ZWN0QWxsVGV4dHVyZXMoKTsKKyAgICB9CisKKyAgICAvLyBB
ZnRlciBmb3VyIHBhc3NlcyBvZiBpZGxlIHBhaW50aW5nLCB3ZSBzaG91bGQgYmUgZmluaXNoZWQg
cGFpbnRpbmcKKyAgICBFWFBFQ1RfRkFMU0UobGF5ZXItPm5lZWRzSWRsZVBhaW50KHZpc2libGVS
ZWN0KSk7CisKKyAgICAvLyBXZSBzaG91bGQgaGF2ZSBvbmUgdGlsZSBzdXJyb3VuZGluZyB0aGUg
dmlzaWJsZSB0aWxlIG9uIGFsbCBzaWRlcywgYnV0IG5vIG90aGVyIHRpbGVzLgorICAgIEludFJl
Y3QgaWRsZVBhaW50VGlsZXMoMSwgMSwgMywgMyk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA1
OyBpKyspIHsKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCA1OyBqKyspIHsKKyAgICAgICAg
ICAgIGlmIChpZGxlUGFpbnRUaWxlcy5jb250YWlucyhpLCBqKSkKKyAgICAgICAgICAgICAgICBF
WFBFQ1RfVFJVRShsYXllckltcGwtPmhhc1RpbGVBdChpLCBqKSk7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKGxheWVySW1wbC0+aGFzVGlsZUF0KGksIGop
KTsKKyAgICAgICAgfQorICAgIH0KK30KKworCitURVNUKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3Qs
IGlkbGVQYWludE91dE9mTWVtb3J5KQoreworICAgIC8vIFRoZSB0aWxlIHNpemUgaXMgMTAweDEw
MC4gU2V0dXAgNXg1IHRpbGVzIHdpdGggb25lIDF4MSB2aXNpYmxlIHRpbGUgaW4gdGhlIGNlbnRl
ci4KKyAgICBJbnRTaXplIGNvbnRlbnRCb3VuZHMoMzAwLCAzMDApOworICAgIEludFJlY3QgY29u
dGVudFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgY29udGVudEJvdW5kcyk7CisgICAgSW50UmVjdCB2
aXNpYmxlUmVjdCgxMDAsIDEwMCwgMTAwLCAxMDApOworCisgICAgLy8gV2UgaGF2ZSBlbm91Z2gg
bWVtb3J5IGZvciBvbmx5IHRoZSB2aXNpYmxlIHJlY3QsIHNvIHdlIHdpbGwgcnVuIG91dCBvZiBt
ZW1vcnkgaW4gZmlyc3QgaWRsZSBwYWludC4KKyAgICBpbnQgbWVtb3J5TGltaXQgPSA0ICogMTAw
ICogMTAwOyAvLyAyIHRpbGVzLCA0IGJ5dGVzIHBlciBwaXhlbC4KKworICAgIE93blB0cjxUZXh0
dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKG1lbW9y
eUxpbWl0LCBtZW1vcnlMaW1pdCAvIDIsIDEwMjQpOworICAgIFJlZlB0cjxGYWtlVGlsZWRMYXll
ckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRl
eHR1cmVNYW5hZ2VyLmdldCgpKSk7CisgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxU
aHJlYWQ7CisgICAgUmVmUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllckltcGwgPSBhZG9w
dFJlZihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMCkpOworCisgICAgRmFrZVRleHR1cmVBbGxv
Y2F0b3IgdGV4dHVyZUFsbG9jYXRvcjsKKyAgICBDQ1RleHR1cmVVcGRhdGVyIHVwZGF0ZXIoJnRl
eHR1cmVBbGxvY2F0b3IpOworCisgICAgLy8gVGhpcyBpbnZhbGlkYXRlcyA5IHRpbGVzIGFuZCB0
aGVuIHBhaW50cyBvbmUgdmlzaWJsZSB0aWxlLgorICAgIGxheWVyLT5zZXRCb3VuZHMoY29udGVu
dEJvdW5kcyk7CisgICAgbGF5ZXItPnNldFZpc2libGVMYXllclJlY3QodmlzaWJsZVJlY3QpOwor
ICAgIGxheWVyLT5pbnZhbGlkYXRlUmVjdChjb250ZW50UmVjdCk7CisgICAgbGF5ZXItPnByZXBh
cmVUb1VwZGF0ZSh2aXNpYmxlUmVjdCk7CisKKyAgICAvLyBXZSBzaG91bGQgbmVlZCBpZGxlLXBh
aW50aW5nIGZvciAzeDMgdGlsZXMgc3Vyb3VuZGluZyB2aXNpYmxlIHRpbGUuCisgICAgRVhQRUNU
X1RSVUUobGF5ZXItPm5lZWRzSWRsZVBhaW50KHZpc2libGVSZWN0KSk7CisKKyAgICBsYXllci0+
dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcygwLCB1cGRhdGVyKTsKKyAgICBsYXllci0+cHVzaFBy
b3BlcnRpZXNUbyhsYXllckltcGwuZ2V0KCkpOworCisgICAgLy8gV2Ugc2hvdWxkIGhhdmUgb25l
IHRpbGUgb24gdGhlIGltcGwgc2lkZS4KKyAgICBFWFBFQ1RfVFJVRShsYXllckltcGwtPmhhc1Rp
bGVBdCgxLCAxKSk7CisKKyAgICB0ZXh0dXJlTWFuYWdlci0+dW5wcm90ZWN0QWxsVGV4dHVyZXMo
KTsKKyAgICBsYXllci0+cHJlcGFyZVRvVXBkYXRlKHZpc2libGVSZWN0KTsKKyAgICBsYXllci0+
cHJlcGFyZVRvVXBkYXRlSWRsZSh2aXNpYmxlUmVjdCk7CisKKyAgICAvLyBXZSBzaG91bGRuJ3Qg
c2lnbmFsIHdlIG5lZWQgYW5vdGhlciBpZGxlIHBhaW50IGFmdGVyIHdlIHJ1biBvdXQgb2YgbWVt
b3J5LgorICAgIEVYUEVDVF9GQUxTRShsYXllci0+bmVlZHNJZGxlUGFpbnQodmlzaWJsZVJlY3Qp
KTsKKworICAgIGxheWVyLT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKDAsIHVwZGF0ZXIpOwor
ICAgIGxheWVyLT5wdXNoUHJvcGVydGllc1RvKGxheWVySW1wbC5nZXQoKSk7Cit9CisKIH0gLy8g
bmFtZXNwYWNlCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119526</attachid>
            <date>2011-12-15 17:16:28 -0800</date>
            <delta_ts>2011-12-15 19:24:07 -0800</delta_ts>
            <desc>Set memory limit for prepainting</desc>
            <filename>bug-72686-20111215171627.patch</filename>
            <type>text/plain</type>
            <size>32066</size>
            <attacher name="Eric Penner">epenner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyOTExCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmY5N2NjNzExNmNlM2Qz
NTA4ZjYxYTQ0ZDM5Nzk1ZTc1ZGEzZTUxYi4uOGU4NjU3ZTNmZGRhM2FmZGZhMGY2YWZiZTA4ZTBl
OTYwNTY5NGJmOSAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDExLTEyLTE1ICBFcmlj
IFBlbm5lciAgPGVwZW5uZXJAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIE5lZWQg
dG8gcHJlcGFpbnQgdGlsZXMgaW4gVGlsZWRMYXllckNocm9taXVtCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjY4NgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExh
eWVyQ2hyb21pdW06OmlkbGVQYWludENvbnRlbnRzSWZEaXJ0eSk6IGFkZGVkIGlkbGUgcGFpbnQg
ZnVuY3Rpb24KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5
ZXJDaHJvbWl1bS5oOiBkaXR0bworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyQ2hyb21pdW0uaDogZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06
OmlkbGVQYWludENvbnRlbnRzSWZEaXJ0eSk6IGRpdHRvCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dHVyZU1hbmFnZXI6OnByb3RlY3RUZXh0dXJlKTogcmVtb3ZlZCBhc3NlcnQgZm9yIHByb3RlY3Rp
bmcgYSB0ZXh0dXJlIHR3aWNlCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
VGlsZWRMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJv
bWl1bTo6VGlsZWRMYXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJD
aHJvbWl1bTo6Y2xlYW51cFJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVy
Q2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMpOiByZWZhY3RvcmluZyB0byB1c2Ug
dGlsZSBpbmRpY2VzCisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnByZXBh
cmVUb1VwZGF0ZVRpbGVzKTogcmVmYWN0b3JlZCBjb21tb24gY29kZSBhbmQgbWFkZSBpZGxlL3Zp
c2libGUgdmVyc2lvbnMKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJl
cGFyZVRvVXBkYXRlKTogZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1
bTo6cHJlcGFyZVRvVXBkYXRlSWRsZSk6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpUaWxlZExh
eWVyQ2hyb21pdW06Om5lZWRzSWRsZVBhaW50KTogCisgICAgICAgIChXZWJDb3JlOjpUaWxlZExh
eWVyQ2hyb21pdW06OmlkbGVQYWludFJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyVHJlZUhvc3Q6OkNDTGF5ZXJUcmVlSG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyVHJlZUhvc3Q6OmNvbXBvc2l0ZUFuZFJlYWRiYWNrKTogc2V0IGZsYWcgdG8gYXZvaWQgaWRs
ZSBwYWludCBkdXJyaW5nIGNvbXBvc2l0ZSBhbmQgcmVhZGJhY2sKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJUcmVlSG9zdDo6dXBkYXRlTGF5ZXJzKTogYWRkZWQgaWRsZSBmbGFnIHBhcmFtZXRl
cgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpwYWludENvbnRlbnRzSWZEaXJ0
eSk6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnBhaW50TWFza0Fu
ZFJlcGxpY2FGb3JSZW5kZXJTdXJmYWNlKTogZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJUcmVlSG9zdDo6cGFpbnRMYXllckNvbnRlbnRzKTogY2hvb3NlcyBpZGxlIG9yIHZpc2libGUg
cGFpbnQKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3QuaDoKKwogMjAxMS0xMi0xNSAgSGFqaW1lIE1vcnJpdGEgIDxtb3JyaXRhQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkIGJ1aWxkIGZpeCBhdHRlbXB0IGZvciBDaHJvbWl1
bSBNYWMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDI5OTBkYzdkMmExNzQ1MjZmY2Q5
OTExMDlmMzYyM2RmZGM4ZDc3YzcuLmEzYWZiNzg1ZDU4YmZlOTMyZGEyMDU0ZTRjMTM5YmE5MjQ4
OTAzY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTEt
MTItMTUgIEVyaWMgUGVubmVyICA8ZXBlbm5lckBnb29nbGUuY29tPgorCisgICAgICAgIFtjaHJv
bWl1bV0gTmVlZCB0byBwcmVwYWludCB0aWxlcyBpbiBUaWxlZExheWVyQ2hyb21pdW0KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcyNjg2CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVy
VHJlZUhvc3RUZXN0LmNwcDoKKyAgICAgICAgKFdURjo6Q29udGVudExheWVyQ2hyb21pdW1XaXRo
VXBkYXRlVHJhY2tpbmc6OmlkbGVQYWludENvbnRlbnRzQ291bnQpOgorICAgICAgICAoV1RGOjpD
b250ZW50TGF5ZXJDaHJvbWl1bVdpdGhVcGRhdGVUcmFja2luZzo6cmVzZXRQYWludENvbnRlbnRz
Q291bnQpOgorICAgICAgICAoV1RGOjpDb250ZW50TGF5ZXJDaHJvbWl1bVdpdGhVcGRhdGVUcmFj
a2luZzo6aWRsZVBhaW50Q29udGVudHNJZkRpcnR5KToKKyAgICAgICAgKFdURjo6Q29udGVudExh
eWVyQ2hyb21pdW1XaXRoVXBkYXRlVHJhY2tpbmc6OkNvbnRlbnRMYXllckNocm9taXVtV2l0aFVw
ZGF0ZVRyYWNraW5nKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdE9wYWNpdHlD
aGFuZ2U6OmFmdGVyVGVzdCk6CisgICAgICAgICogdGVzdHMvVGlsZWRMYXllckNocm9taXVtVGVz
dC5jcHA6CisgICAgICAgIChXVEY6OkZha2VUaWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVUb1Vw
ZGF0ZUlkbGUpOgorICAgICAgICAoV1RGOjpGYWtlVGlsZWRMYXllckNocm9taXVtOjpuZWVkc0lk
bGVQYWludCk6CisgICAgICAgIChXVEY6OlRFU1QpOgorCiAyMDExLTEyLTE0ICBEYXZpZCBMZXZp
biAgPGxldmluQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIERhdGFiYXNlT2Jz
ZXJ2ZXIgbmVlZHMgdGhyZWFkc2FmZSBmaXhlcyBhbmQgb3RoZXIgY2xlYW4tdXAuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5
ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggMmEyNDY2ZDkxMjlhZWMzNjQwOTMyMjlj
YjkzNWFmODJkNTA3MjRiNi4uYzI4NGVlYTMxYTQwMGUzZTkyNTMyOTViNWYyNjAzNDQ5ZjlkODBk
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Q29udGVudExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcApAQCAtMTA5LDYgKzEwOSwy
MCBAQCB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eSgpCiAg
ICAgbV9uZWVkc0Rpc3BsYXkgPSBmYWxzZTsKIH0KIAordm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1
bTo6aWRsZVBhaW50Q29udGVudHNJZkRpcnR5KCkKK3sKKyAgICBpZiAoIWRyYXdzQ29udGVudCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBJbnRSZWN0JiBsYXllclJlY3QgPSB2aXNp
YmxlTGF5ZXJSZWN0KCk7CisgICAgaWYgKGxheWVyUmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIHByZXBhcmVUb1VwZGF0ZUlkbGUobGF5ZXJSZWN0KTsKKyAgICBpZiAobmVl
ZHNJZGxlUGFpbnQobGF5ZXJSZWN0KSkKKyAgICAgICAgc2V0TmVlZHNDb21taXQoKTsKK30KKwog
Ym9vbCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KCkgY29uc3QKIHsKICAgICBy
ZXR1cm4gbV9kZWxlZ2F0ZSAmJiBtX2RlbGVnYXRlLT5kcmF3c0NvbnRlbnQoKSAmJiBUaWxlZExh
eWVyQ2hyb21pdW06OmRyYXdzQ29udGVudCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVt
LmgKaW5kZXggYjgzNGU2NzZiZDYzNDQ1YWE0NTNiMzY1ZWVlMjgwMjQwZjM4MDljMS4uMGM1NzRi
NWRmZGMwYTU3MWI4MTFiZTAzOTc2NGFjNzViMWMyZTNlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5
ZXJDaHJvbWl1bS5oCkBAIC01MCw2ICs1MCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5Db250
ZW50TGF5ZXJDaHJvbWl1bSgpOwogCiAgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHNJZkRp
cnR5KCk7CisgICAgdmlydHVhbCB2b2lkIGlkbGVQYWludENvbnRlbnRzSWZEaXJ0eSgpOwogCiBw
cm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgQ29udGVudExheWVyQ2hyb21pdW0oQ0NMYXllckRlbGVn
YXRlKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllckNocm9taXVtLmgKaW5kZXggOWM3YTRmOGY0NzkyODlkYTA1OTEzN2I3OWJi
MTVkNmJkMTdkNTFlZS4uMTczNDM0ZTk4ZWI5MjMwNTVhYjc4NjYwMzQzZDc0NjA5MDc5OWUxYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyQ2hyb21pdW0uaApAQCAtMTYxLDYgKzE2MSw3IEBAIHB1YmxpYzoKICAgICAvLyBU
aGVzZSBtZXRob2RzIHR5cGljYWxseSBuZWVkIHRvIGJlIG92ZXJ3cml0dGVuIGJ5IGRlcml2ZWQg
Y2xhc3Nlcy4KICAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50c0lmRGlydHkoKSB7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgaWRsZVBhaW50Q29udGVudHNJZkRpcnR5KCkgeyB9CiAgICAgdmlydHVh
bCB2b2lkIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0M0QqLCBDQ1Rl
eHR1cmVVcGRhdGVyJikgeyB9CiAgICAgdmlydHVhbCB2b2lkIHNldElzTWFzayhib29sKSB7IH0K
ICAgICB2aXJ0dWFsIHZvaWQgdW5yZXNlcnZlQ29udGVudHNUZXh0dXJlKCkgeyB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFu
YWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0
dXJlTWFuYWdlci5jcHAKaW5kZXggMTE4NzUzN2ZiOTJhYzBiZWM3ODkzODI1ZTNhYjZlM2UyNWY5
NzAzNi4uMzAyMDdiZTM4MmViNDQ0M2FiYWQ0MzEzYmMxNTQ3ZGQwNjViMGFjOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFn
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Rl
eHR1cmVNYW5hZ2VyLmNwcApAQCAtMTQxLDcgKzE0MSw2IEBAIGJvb2wgVGV4dHVyZU1hbmFnZXI6
OmlzUHJvdGVjdGVkKFRleHR1cmVUb2tlbiB0b2tlbikKIHZvaWQgVGV4dHVyZU1hbmFnZXI6OnBy
b3RlY3RUZXh0dXJlKFRleHR1cmVUb2tlbiB0b2tlbikKIHsKICAgICBBU1NFUlQoaGFzVGV4dHVy
ZSh0b2tlbikpOwotICAgIEFTU0VSVCghbV90ZXh0dXJlcy5nZXQodG9rZW4pLmlzUHJvdGVjdGVk
KTsKICAgICBUZXh0dXJlSW5mbyBpbmZvID0gbV90ZXh0dXJlcy50YWtlKHRva2VuKTsKICAgICBp
bmZvLmlzUHJvdGVjdGVkID0gdHJ1ZTsKICAgICBtX3RleHR1cmVzLmFkZCh0b2tlbiwgaW5mbyk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9U
aWxlZExheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcAppbmRleCAwN2JhYjIwMjhmMTM0OWZlYzIw
NWE3MzQwYzMzZmQ2OWU1NzllMWNiLi45N2M5NTI1M2QwNjljZTFhMDRmMzBiOGJkOWUxZjIxOTk2
NzYxODVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTcyLDYgKzcyLDcg
QEAgVGlsZWRMYXllckNocm9taXVtOjpUaWxlZExheWVyQ2hyb21pdW0oQ0NMYXllckRlbGVnYXRl
KiBkZWxlZ2F0ZSkKICAgICA6IExheWVyQ2hyb21pdW0oZGVsZWdhdGUpCiAgICAgLCBtX3RleHR1
cmVGb3JtYXQoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSkKICAgICAsIG1fc2tpcHNE
cmF3KGZhbHNlKQorICAgICwgbV9za2lwc0lkbGVQYWludChmYWxzZSkKICAgICAsIG1fc2FtcGxl
ZFRleGVsRm9ybWF0KExheWVyVGV4dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZvcm1hdEludmFs
aWQpCiAgICAgLCBtX3RpbGluZ09wdGlvbihBdXRvVGlsZSkKIHsKQEAgLTkyLDcgKzkzLDcgQEAg
dm9pZCBUaWxlZExheWVyQ2hyb21pdW06OmNsZWFudXBSZXNvdXJjZXMoKQogCiAgICAgbV90aWxl
ci5jbGVhcigpOwogICAgIG1fcGFpbnRSZWN0ID0gSW50UmVjdCgpOwotICAgIG1fcmVxdWVzdGVk
VXBkYXRlUmVjdCA9IEludFJlY3QoKTsKKyAgICBtX3JlcXVlc3RlZFVwZGF0ZVRpbGVzUmVjdCA9
IEludFJlY3QoKTsKIH0KIAogdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnVwZGF0ZVRpbGVTaXpl
QW5kVGlsaW5nT3B0aW9uKCkKQEAgLTE3NywxMSArMTc4LDEzIEBAIHZvaWQgVGlsZWRMYXllckNo
cm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKEdyYXBoaWNzQ29udGV4dDNEKiwgQ0NU
ZXh0dXJlCiAgICAgQVNTRVJUKG1fc2tpcHNEcmF3IHx8IG1fdGlsZXIpOwogCiAgICAgLy8gUGFp
bnRpbmcgY291bGQgY2F1c2UgY29tcG9zaXRpbmcgdG8gZ2V0IHR1cm5lZCBvZmYsIHdoaWNoIG1h
eSBjYXVzZSB0aGUgdGlsZXIgdG8gYmVjb21lIGludmFsaWRhdGVkIG1pZC11cGRhdGUuCi0gICAg
aWYgKG1fc2tpcHNEcmF3IHx8IG1fcmVxdWVzdGVkVXBkYXRlUmVjdC5pc0VtcHR5KCkgfHwgIW1f
dGlsZXIgfHwgIW1fdGlsZXItPm51bVRpbGVzKCkpCisgICAgaWYgKG1fc2tpcHNEcmF3IHx8IG1f
cmVxdWVzdGVkVXBkYXRlVGlsZXNSZWN0LmlzRW1wdHkoKSB8fCAhbV90aWxlciB8fCAhbV90aWxl
ci0+bnVtVGlsZXMoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaW50IGxlZnQsIHRvcCwgcmln
aHQsIGJvdHRvbTsKLSAgICBtX3RpbGVyLT5jb250ZW50UmVjdFRvVGlsZUluZGljZXMobV9yZXF1
ZXN0ZWRVcGRhdGVSZWN0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworICAgIGludCBsZWZ0
ID0gbV9yZXF1ZXN0ZWRVcGRhdGVUaWxlc1JlY3QueCgpOworICAgIGludCB0b3AgPSBtX3JlcXVl
c3RlZFVwZGF0ZVRpbGVzUmVjdC55KCk7CisgICAgaW50IHJpZ2h0ID0gbV9yZXF1ZXN0ZWRVcGRh
dGVUaWxlc1JlY3QubWF4WCgpIC0gMTsKKyAgICBpbnQgYm90dG9tID0gbV9yZXF1ZXN0ZWRVcGRh
dGVUaWxlc1JlY3QubWF4WSgpIC0gMTsKICAgICBmb3IgKGludCBqID0gdG9wOyBqIDw9IGJvdHRv
bTsgKytqKSB7CiAgICAgICAgIGZvciAoaW50IGkgPSBsZWZ0OyBpIDw9IHJpZ2h0OyArK2kpIHsK
ICAgICAgICAgICAgIFVwZGF0YWJsZVRpbGUqIHRpbGUgPSB0aWxlQXQoaSwgaik7CkBAIC0zMzks
MzggKzM0MiwxNyBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJvdGVjdFRpbGVUZXh0dXJl
cyhjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKICAgICB9CiB9CiAKLXZvaWQgVGlsZWRMYXll
ckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCit2
b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlVGlsZXMoYm9vbCBpZGxlLCBp
bnQgbGVmdCwgaW50IHRvcCwgaW50IHJpZ2h0LCBpbnQgYm90dG9tKQogewotICAgIGlmICghbV90
aWxlcikKLSAgICAgICAgY3JlYXRlVGlsZXIoaXNOb25Db21wb3NpdGVkQ29udGVudCgpID8gQ0NM
YXllclRpbGluZ0RhdGE6Ok5vQm9yZGVyVGV4ZWxzIDogQ0NMYXllclRpbGluZ0RhdGE6Okhhc0Jv
cmRlclRleGVscyk7Ci0KLSAgICBBU1NFUlQobV90aWxlcik7Ci0KLSAgICBtX3NraXBzRHJhdyA9
IGZhbHNlOwotCiAgICAgLy8gUmVzZXQgbV91cGRhdGVSZWN0IGZvciBhbGwgdGlsZXMuCiAgICAg
Zm9yIChDQ0xheWVyVGlsaW5nRGF0YTo6VGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1f
dGlsZXItPnRpbGVzKCkuYmVnaW4oKTsgaXRlciAhPSBtX3RpbGVyLT50aWxlcygpLmVuZCgpOyAr
K2l0ZXIpIHsKICAgICAgICAgVXBkYXRhYmxlVGlsZSogdGlsZSA9IHN0YXRpY19jYXN0PFVwZGF0
YWJsZVRpbGUqPihpdGVyLT5zZWNvbmQuZ2V0KCkpOwogICAgICAgICB0aWxlLT5tX3VwZGF0ZVJl
Y3QgPSBJbnRSZWN0KCk7CiAgICAgfQogCi0gICAgaWYgKGNvbnRlbnRSZWN0LmlzRW1wdHkoKSkg
ewotICAgICAgICBtX3JlcXVlc3RlZFVwZGF0ZVJlY3QgPSBJbnRSZWN0KCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBtX3RpbGVyLT5ncm93TGF5ZXJUb0NvbnRhaW4oY29udGVudFJl
Y3QpOwotCi0gICAgaWYgKCFtX3RpbGVyLT5udW1UaWxlcygpKSB7Ci0gICAgICAgIG1fcmVxdWVz
dGVkVXBkYXRlUmVjdCA9IEludFJlY3QoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAg
IC8vIENyZWF0ZSB0aWxlcyBhcyBuZWVkZWQsIGV4cGFuZGluZyBhIGRpcnR5IHJlY3QgdG8gY29u
dGFpbiBhbGwKICAgICAvLyB0aGUgZGlydHkgcmVnaW9ucyBjdXJyZW50bHkgYmVpbmcgZHJhd24u
CiAgICAgSW50UmVjdCBkaXJ0eUxheWVyUmVjdDsKLSAgICBpbnQgbGVmdCwgdG9wLCByaWdodCwg
Ym90dG9tOwotICAgIG1fdGlsZXItPmNvbnRlbnRSZWN0VG9UaWxlSW5kaWNlcyhjb250ZW50UmVj
dCwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKICAgICBmb3IgKGludCBqID0gdG9wOyBqIDw9
IGJvdHRvbTsgKytqKSB7CiAgICAgICAgIGZvciAoaW50IGkgPSBsZWZ0OyBpIDw9IHJpZ2h0OyAr
K2kpIHsKICAgICAgICAgICAgIFVwZGF0YWJsZVRpbGUqIHRpbGUgPSB0aWxlQXQoaSwgaik7CkBA
IC0zODEsOCArMzYzLDExIEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRh
dGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCiAgICAgICAgICAgICAgICAgdGlsZS0+bV9k
aXJ0eUxheWVyUmVjdCA9IG1fdGlsZXItPnRpbGVMYXllclJlY3QodGlsZSk7CiAKICAgICAgICAg
ICAgIGlmICghdGlsZS0+bWFuYWdlZFRleHR1cmUoKS0+cmVzZXJ2ZShtX3RpbGVyLT50aWxlU2l6
ZSgpLCBtX3RleHR1cmVGb3JtYXQpKSB7Ci0gICAgICAgICAgICAgICAgbV9za2lwc0RyYXcgPSB0
cnVlOwotICAgICAgICAgICAgICAgIGNsZWFudXBSZXNvdXJjZXMoKTsKKyAgICAgICAgICAgICAg
ICBtX3NraXBzSWRsZVBhaW50ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpZiAoIWlkbGUpIHsK
KyAgICAgICAgICAgICAgICAgICAgbV9za2lwc0RyYXcgPSB0cnVlOworICAgICAgICAgICAgICAg
ICAgICBjbGVhbnVwUmVzb3VyY2VzKCk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIApAQCAtMzkwLDIyICszNzUsMjIgQEAgdm9pZCBU
aWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50
UmVjdCkKICAgICAgICAgfQogICAgIH0KIAotICAgIC8vIER1ZSB0byBib3JkZXJzLCB3aGVuIHRo
ZSBwYWludCByZWN0IGlzIGV4dGVuZGVkIHRvIHRpbGUgYm91bmRhcmllcywgaXQKLSAgICAvLyBt
YXkgZW5kIHVwIG92ZXJsYXBwaW5nIG1vcmUgdGlsZXMgdGhhbiB0aGUgb3JpZ2luYWwgY29udGVu
dCByZWN0LiBSZWNvcmQKLSAgICAvLyB0aGF0IG9yaWdpbmFsIHJlY3Qgc28gd2UgZG9uJ3QgdXBs
b2FkIG1vcmUgdGlsZXMgdGhhbiBuZWNlc3NhcnkuCi0gICAgbV9yZXF1ZXN0ZWRVcGRhdGVSZWN0
ID0gY29udGVudFJlY3Q7Ci0KICAgICBtX3BhaW50UmVjdCA9IG1fdGlsZXItPmxheWVyUmVjdFRv
Q29udGVudFJlY3QoZGlydHlMYXllclJlY3QpOwogICAgIGlmIChkaXJ0eUxheWVyUmVjdC5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIC8vIER1ZSB0byBib3JkZXJzLCB3aGVuIHRo
ZSBwYWludCByZWN0IGlzIGV4dGVuZGVkIHRvIHRpbGUgYm91bmRhcmllcywgaXQKKyAgICAvLyBt
YXkgZW5kIHVwIG92ZXJsYXBwaW5nIG1vcmUgdGlsZXMgdGhhbiB0aGUgb3JpZ2luYWwgY29udGVu
dCByZWN0LiBSZWNvcmQKKyAgICAvLyB0aGUgb3JpZ2luYWwgdGlsZXMgc28gd2UgZG9uJ3QgdXBs
b2FkIG1vcmUgdGlsZXMgdGhhbiBuZWNlc3NhcnkuCisgICAgaWYgKCFtX3BhaW50UmVjdC5pc0Vt
cHR5KCkpCisgICAgICAgIG1fcmVxdWVzdGVkVXBkYXRlVGlsZXNSZWN0ID0gSW50UmVjdChsZWZ0
LCB0b3AsIHJpZ2h0IC0gbGVmdCArIDEsIGJvdHRvbSAtIHRvcCArIDEpOworCiAgICAgLy8gQ2Fs
bGluZyBwcmVwYXJlVG9VcGRhdGUoKSBjYWxscyBpbnRvIFdlYktpdCB0byBwYWludCwgd2hpY2gg
bWF5IGhhdmUgdGhlIHNpZGUKICAgICAvLyBlZmZlY3Qgb2YgZGlzYWJsaW5nIGNvbXBvc2l0aW5n
LCB3aGljaCBjYXVzZXMgb3VyIHJlZmVyZW5jZSB0byB0aGUgdGV4dHVyZSB1cGRhdGVyIHRvIGJl
IGRlbGV0ZWQuCiAgICAgLy8gSG93ZXZlciwgd2UgY2FuJ3QgZnJlZSB0aGUgbWVtb3J5IGJhY2tp
bmcgdGhlIEdyYXBoaWNzQ29udGV4dCB1bnRpbCB0aGUgcGFpbnQgZmluaXNoZXMsCiAgICAgLy8g
c28gd2UgZ3JhYiBhIGxvY2FsIHJlZmVyZW5jZSBoZXJlIHRvIGhvbGQgdGhlIHVwZGF0ZXIgYWxp
dmUgdW50aWwgdGhlIHBhaW50IGNvbXBsZXRlcy4KICAgICBSZWZQdHI8TGF5ZXJUZXh0dXJlVXBk
YXRlcj4gcHJvdGVjdG9yKHRleHR1cmVVcGRhdGVyKCkpOwogICAgIHRleHR1cmVVcGRhdGVyKCkt
PnByZXBhcmVUb1VwZGF0ZShtX3BhaW50UmVjdCwgbV90aWxlci0+dGlsZVNpemUoKSwgbV90aWxl
ci0+aGFzQm9yZGVyVGV4ZWxzKCksIGNvbnRlbnRzU2NhbGUoKSk7Ci0gICAgbV90aWxlci0+Y29u
dGVudFJlY3RUb1RpbGVJbmRpY2VzKG1fcmVxdWVzdGVkVXBkYXRlUmVjdCwgbGVmdCwgdG9wLCBy
aWdodCwgYm90dG9tKTsKICAgICBmb3IgKGludCBqID0gdG9wOyBqIDw9IGJvdHRvbTsgKytqKSB7
CiAgICAgICAgIGZvciAoaW50IGkgPSBsZWZ0OyBpIDw9IHJpZ2h0OyArK2kpIHsKICAgICAgICAg
ICAgIFVwZGF0YWJsZVRpbGUqIHRpbGUgPSB0aWxlQXQoaSwgaik7CkBAIC00MzcsNSArNDIyLDEx
NyBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJl
Y3QmIGNvbnRlbnRSZWN0KQogICAgIH0KIH0KIAorCit2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6
cHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQoreworICAgIGlmICgh
bV90aWxlcikKKyAgICAgICAgY3JlYXRlVGlsZXIoaXNOb25Db21wb3NpdGVkQ29udGVudCgpID8g
Q0NMYXllclRpbGluZ0RhdGE6Ok5vQm9yZGVyVGV4ZWxzIDogQ0NMYXllclRpbGluZ0RhdGE6Okhh
c0JvcmRlclRleGVscyk7CisKKyAgICBBU1NFUlQobV90aWxlcik7CisKKyAgICBtX3NraXBzRHJh
dyA9IGZhbHNlOworICAgIG1fc2tpcHNJZGxlUGFpbnQgPSBmYWxzZTsKKyAgICBtX3JlcXVlc3Rl
ZFVwZGF0ZVRpbGVzUmVjdCA9IEludFJlY3QoKTsKKyAgICBtX3BhaW50UmVjdCA9IEludFJlY3Qo
KTsKKworICAgIG1fdGlsZXItPmdyb3dMYXllclRvQ29udGFpbihJbnRSZWN0KEludFBvaW50Ojp6
ZXJvKCksIGNvbnRlbnRCb3VuZHMoKSkpOworCisgICAgaWYgKGNvbnRlbnRSZWN0LmlzRW1wdHko
KSB8fCAhbV90aWxlci0+bnVtVGlsZXMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50IGxl
ZnQsIHRvcCwgcmlnaHQsIGJvdHRvbTsKKyAgICBtX3RpbGVyLT5jb250ZW50UmVjdFRvVGlsZUlu
ZGljZXMoY29udGVudFJlY3QsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CisKKyAgICBwcmVw
YXJlVG9VcGRhdGVUaWxlcyhmYWxzZSwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKK30KKwor
dm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVUb1VwZGF0ZUlkbGUoY29uc3QgSW50UmVj
dCYgY29udGVudFJlY3QpCit7CisgICAgLy8gQWJvcnQgaWYgd2UgaGF2ZSBhbHJlYWR5IHByZXBh
cmVkIGEgcGFpbnQgb3IgcnVuIG91dCBvZiBtZW1vcnkuCisgICAgaWYgKG1fc2tpcHNJZGxlUGFp
bnQgfHwgIW1fcGFpbnRSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNT
RVJUKG1fdGlsZXIpOworCisgICAgbV90aWxlci0+Z3Jvd0xheWVyVG9Db250YWluKEludFJlY3Qo
SW50UG9pbnQ6Onplcm8oKSwgY29udGVudEJvdW5kcygpKSk7CisKKyAgICBpZiAoIW1fdGlsZXIt
Pm51bVRpbGVzKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFByb3RlY3QgYW55IHRleHR1
cmVzIGluIHRoZSBwcmUtcGFpbnQgYXJlYSBzbyB3ZSBkb24ndCBlbmQgdXAganVzdAorICAgIC8v
IHJlY2xhaW1pbmcgdGhlbSBiZWxvdy4KKyAgICBJbnRSZWN0IGlkbGVQYWludENvbnRlbnRSZWN0
ID0gaWRsZVBhaW50UmVjdChjb250ZW50UmVjdCk7CisgICAgcHJvdGVjdFRpbGVUZXh0dXJlcyhp
ZGxlUGFpbnRDb250ZW50UmVjdCk7CisKKyAgICAvLyBFeHBhbmQgb3V0d2FyZHMgdW50aWwgd2Ug
ZmluZCBhIGRpcnR5IHJvdyBvciBjb2x1bW4gdG8gdXBkYXRlLgorICAgIGludCBsZWZ0LCB0b3As
IHJpZ2h0LCBib3R0b207CisgICAgbV90aWxlci0+Y29udGVudFJlY3RUb1RpbGVJbmRpY2VzKGNv
bnRlbnRSZWN0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworICAgIGludCBwcmVwYWludExl
ZnQsIHByZXBhaW50VG9wLCBwcmVwYWludFJpZ2h0LCBwcmVwYWludEJvdHRvbTsKKyAgICBtX3Rp
bGVyLT5jb250ZW50UmVjdFRvVGlsZUluZGljZXMoaWRsZVBhaW50Q29udGVudFJlY3QsIHByZXBh
aW50TGVmdCwgcHJlcGFpbnRUb3AsIHByZXBhaW50UmlnaHQsIHByZXBhaW50Qm90dG9tKTsKKyAg
ICB3aGlsZSAoIW1fc2tpcHNJZGxlUGFpbnQgJiYgKGxlZnQgPiBwcmVwYWludExlZnQgfHwgdG9w
ID4gcHJlcGFpbnRUb3AgfHwgcmlnaHQgPCBwcmVwYWludFJpZ2h0IHx8IGJvdHRvbSA8IHByZXBh
aW50Qm90dG9tKSkgeworICAgICAgICBpZiAoYm90dG9tIDwgcHJlcGFpbnRCb3R0b20pIHsKKyAg
ICAgICAgICAgICsrYm90dG9tOworICAgICAgICAgICAgcHJlcGFyZVRvVXBkYXRlVGlsZXModHJ1
ZSwgbGVmdCwgYm90dG9tLCByaWdodCwgYm90dG9tKTsKKyAgICAgICAgICAgIGlmICghbV9wYWlu
dFJlY3QuaXNFbXB0eSgpIHx8IG1fc2tpcHNJZGxlUGFpbnQpCisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRvcCA+IHByZXBhaW50VG9wKSB7CisgICAgICAg
ICAgICAtLXRvcDsKKyAgICAgICAgICAgIHByZXBhcmVUb1VwZGF0ZVRpbGVzKHRydWUsIGxlZnQs
IHRvcCwgcmlnaHQsIHRvcCk7CisgICAgICAgICAgICBpZiAoIW1fcGFpbnRSZWN0LmlzRW1wdHko
KSB8fCBtX3NraXBzSWRsZVBhaW50KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGlmIChsZWZ0ID4gcHJlcGFpbnRMZWZ0KSB7CisgICAgICAgICAgICAtLWxlZnQ7
CisgICAgICAgICAgICBwcmVwYXJlVG9VcGRhdGVUaWxlcyh0cnVlLCBsZWZ0LCB0b3AsIGxlZnQs
IGJvdHRvbSk7CisgICAgICAgICAgICBpZiAoIW1fcGFpbnRSZWN0LmlzRW1wdHkoKSB8fCBtX3Nr
aXBzSWRsZVBhaW50KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGlmIChyaWdodCA8IHByZXBhaW50UmlnaHQpIHsKKyAgICAgICAgICAgICsrcmlnaHQ7CisgICAg
ICAgICAgICBwcmVwYXJlVG9VcGRhdGVUaWxlcyh0cnVlLCByaWdodCwgdG9wLCByaWdodCwgYm90
dG9tKTsKKyAgICAgICAgICAgIGlmICghbV9wYWludFJlY3QuaXNFbXB0eSgpIHx8IG1fc2tpcHNJ
ZGxlUGFpbnQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9CisK
K2Jvb2wgVGlsZWRMYXllckNocm9taXVtOjpuZWVkc0lkbGVQYWludChjb25zdCBJbnRSZWN0JiBj
b250ZW50UmVjdCkKK3sKKyAgICBpZiAobV9za2lwc0lkbGVQYWludCkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgQVNTRVJUKG1fdGlsZXIpOworCisgICAgSW50UmVjdCBpZGxlUGFpbnRD
b250ZW50UmVjdCA9IGlkbGVQYWludFJlY3QoY29udGVudFJlY3QpOworCisgICAgaW50IGxlZnQs
IHRvcCwgcmlnaHQsIGJvdHRvbTsKKyAgICBtX3RpbGVyLT5jb250ZW50UmVjdFRvVGlsZUluZGlj
ZXMoaWRsZVBhaW50Q29udGVudFJlY3QsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CisgICAg
Zm9yIChpbnQgaiA9IHRvcDsgaiA8PSBib3R0b207ICsraikgeworICAgICAgICBmb3IgKGludCBp
ID0gbGVmdDsgaSA8PSByaWdodDsgKytpKSB7CisgICAgICAgICAgICBpZiAobV9yZXF1ZXN0ZWRV
cGRhdGVUaWxlc1JlY3QuY29udGFpbnMoSW50UG9pbnQoaSwgaikpKQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgVXBkYXRhYmxlVGlsZSogdGlsZSA9IHRpbGVBdChpLCBq
KTsKKyAgICAgICAgICAgIGlmICghdGlsZSB8fCAhdGlsZS0+bWFuYWdlZFRleHR1cmUoKS0+aXNW
YWxpZChtX3RpbGVyLT50aWxlU2l6ZSgpLCBtX3RleHR1cmVGb3JtYXQpIHx8IHRpbGUtPmlzRGly
dHkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK0ludFJlY3QgVGlsZWRMYXllckNocm9taXVtOjppZGxlUGFp
bnRSZWN0KGNvbnN0IEludFJlY3QmIHZpc2libGVDb250ZW50UmVjdCkKK3sKKyAgICBBU1NFUlQo
bV90aWxlcik7CisgICAgSW50UmVjdCBwcmVwYWludFJlY3QgPSB2aXNpYmxlQ29udGVudFJlY3Q7
CisgICAgLy8gRklYTUU6IFRoaXMgY2FuIGJlIG1hZGUgYSBsb3QgbGFyZ2VyIGlmIHdlIGNhbjoK
KyAgICAvLyAtIHJlc2VydmUgbWVtb3J5IGF0IGEgbG93ZXIgcHJpb3JpdHkgdGhhbiBmb3Igdmlz
aWJsZSBjb250ZW50CisgICAgLy8gLSBvbmx5IHJlc2VydmUgaWRsZSBwYWludCB0aWxlcyB1cCB0
byBhIG1lbW9yeSByZWNsYWltIHRocmVzaG9sZCBhbmQKKyAgICAvLyAtIGluc3VyZSB3ZSBwbGF5
IG5pY2VseSB3aXRoIG90aGVyIGxheWVycworICAgIHByZXBhaW50UmVjdC5pbmZsYXRlWChtX3Rp
bGVyLT50aWxlU2l6ZSgpLndpZHRoKCkpOworICAgIHByZXBhaW50UmVjdC5pbmZsYXRlWShtX3Rp
bGVyLT50aWxlU2l6ZSgpLmhlaWdodCgpKTsKKyAgICBwcmVwYWludFJlY3QuaW50ZXJzZWN0KElu
dFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgY29udGVudEJvdW5kcygpKSk7CisgICAgcmV0dXJuIHBy
ZXBhaW50UmVjdDsKK30KKwogfQogI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1RpbGVkTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmgKaW5kZXggNzdhOWVjOTE0MWZiZmI4NWZjYzVj
Y2MyYjU5MDVkYTQwNTlkMGJhYS4uNGIwY2M1NTUxY2JhMDI2OGM4NGVlMWY5NGQ1MWY1Y2Q1ZmY2
MGNlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vVGlsZWRMYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmgKQEAgLTc1LDkgKzc1LDE2IEBAIHBy
b3RlY3RlZDoKIAogICAgIC8vIFNldCBpbnZhbGlkYXRpb25zIHRvIGJlIHBvdGVudGlhbGx5IHJl
cGFpbnRlZCBkdXJpbmcgdXBkYXRlKCkuCiAgICAgdm9pZCBpbnZhbGlkYXRlUmVjdChjb25zdCBJ
bnRSZWN0JiBjb250ZW50UmVjdCk7CisKICAgICAvLyBQcmVwYXJlIGRhdGEgbmVlZGVkIHRvIHVw
ZGF0ZSB0ZXh0dXJlcyB0aGF0IGludGVyc2VjdCB3aXRoIGNvbnRlbnRSZWN0LgogICAgIHZvaWQg
cHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KTsKIAorICAgIC8vIFNh
bWUgYXMgYWJvdmUsIGJ1dCB0aGlzIHdpbGwgdHJ5IHRvIHBhaW50IGFkZGl0aW9uYWwgc3Vycm91
bmRpbmcgY29udGVudCBpZiBpZGxlLgorICAgIHZvaWQgcHJlcGFyZVRvVXBkYXRlSWRsZShjb25z
dCBJbnRSZWN0JiBjb250ZW50UmVjdCk7CisKKyAgICAvLyBBZnRlciBwcmVwYXJpbmcgYW4gdXBk
YXRlLCByZXR1cm5zIHRydWUgaWYgbW9yZSBwcmUtcGFpbnRpbmcgaXMgbmVlZGVkLgorICAgIGJv
b2wgbmVlZHNJZGxlUGFpbnQoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpOworCiAgICAgdmly
dHVhbCB2b2lkIHByb3RlY3RWaXNpYmxlVGlsZVRleHR1cmVzKCk7CiAKICAgICB2aXJ0dWFsIFRl
eHR1cmVNYW5hZ2VyKiB0ZXh0dXJlTWFuYWdlcigpIGNvbnN0OwpAQCAtOTAsMTcgKzk3LDIyIEBA
IHByaXZhdGU6CiAgICAgdm9pZCBjcmVhdGVUaWxlcklmTmVlZGVkKCk7CiAgICAgdm9pZCBzZXRU
aWxpbmdPcHRpb24oVGlsaW5nT3B0aW9uKTsKIAorICAgIHZvaWQgcHJlcGFyZVRvVXBkYXRlVGls
ZXMoYm9vbCBpZGxlLCBpbnQgbGVmdCwgaW50IHRvcCwgaW50IHJpZ2h0LCBpbnQgYm90dG9tKTsK
KyAgICBJbnRSZWN0IGlkbGVQYWludFJlY3QoY29uc3QgSW50UmVjdCYgdmlzaWJsZUNvbnRlbnRS
ZWN0KTsKKwogICAgIFVwZGF0YWJsZVRpbGUqIHRpbGVBdChpbnQsIGludCkgY29uc3Q7CiAgICAg
VXBkYXRhYmxlVGlsZSogY3JlYXRlVGlsZShpbnQsIGludCk7CiAKICAgICAvLyBUZW1wb3Jhcnkg
c3RhdGUgaGVsZCBiZXR3ZWVuIHByZXBhcmVUb1VwZGF0ZSgpIGFuZCB1cGRhdGVDb21wb3NpdG9y
UmVzb3VyY2VzKCkuCi0gICAgSW50UmVjdCBtX3JlcXVlc3RlZFVwZGF0ZVJlY3Q7CisgICAgSW50
UmVjdCBtX3JlcXVlc3RlZFVwZGF0ZVRpbGVzUmVjdDsKKwogICAgIC8vIFN0YXRlIGhlbGQgYmV0
d2VlbiBwcmVwYXJlVG9VcGRhdGUoKSBhbmQgcHVzaFByb3BlcnRpZXNUbygpLiBUaGlzIHJlcHJl
c2VudHMgdGhlIGFyZWEKICAgICAvLyBvZiB0aGUgbGF5ZXIgdGhhdCBpcyBhY3R1YWxseSByZS1w
YWludGVkIGJ5IFdlYktpdC4KICAgICBJbnRSZWN0IG1fcGFpbnRSZWN0OwogCiAgICAgR0MzRGVu
dW0gbV90ZXh0dXJlRm9ybWF0OwogICAgIGJvb2wgbV9za2lwc0RyYXc7CisgICAgYm9vbCBtX3Nr
aXBzSWRsZVBhaW50OwogICAgIExheWVyVGV4dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZvcm1h
dCBtX3NhbXBsZWRUZXhlbEZvcm1hdDsKIAogICAgIFRpbGluZ09wdGlvbiBtX3RpbGluZ09wdGlv
bjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCmluZGV4IDQ1ZmY2NmZkN2MwM2VmOTEx
YjQ0NTQ4YzJlNmI4MmM2YjlhZjg4NGUuLjY0NGY0MjljMjVjNjc1YTEwZGYyZWFkZjA1MWE2MDJh
NzVlNWI2NDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcApAQCAtNjcsNiArNjcs
NyBAQCBDQ0xheWVyVHJlZUhvc3Q6OkNDTGF5ZXJUcmVlSG9zdChDQ0xheWVyVHJlZUhvc3RDbGll
bnQqIGNsaWVudCwgY29uc3QgQ0NTZXR0aW5ncwogICAgICwgbV9wYWdlU2NhbGUoMSkKICAgICAs
IG1fbWluUGFnZVNjYWxlKDEpCiAgICAgLCBtX21heFBhZ2VTY2FsZSgxKQorICAgICwgbV90cmln
Z2VySWRsZVBhaW50cyh0cnVlKQogewogICAgIEFTU0VSVChDQ1Byb3h5Ojppc01haW5UaHJlYWQo
KSk7CiAgICAgbnVtTGF5ZXJUcmVlSW5zdGFuY2VzKys7CkBAIC0xODgsNyArMTg5LDkgQEAgR3Jh
cGhpY3NDb250ZXh0M0QqIENDTGF5ZXJUcmVlSG9zdDo6Y29udGV4dCgpCiAKIGJvb2wgQ0NMYXll
clRyZWVIb3N0Ojpjb21wb3NpdGVBbmRSZWFkYmFjayh2b2lkICpwaXhlbHMsIGNvbnN0IEludFJl
Y3QmIHJlY3QpCiB7CisgICAgbV90cmlnZ2VySWRsZVBhaW50cyA9IGZhbHNlOwogICAgIHJldHVy
biBtX3Byb3h5LT5jb21wb3NpdGVBbmRSZWFkYmFjayhwaXhlbHMsIHJlY3QpOworICAgIG1fdHJp
Z2dlcklkbGVQYWludHMgPSB0cnVlOwogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6ZmluaXNo
QWxsUmVuZGVyaW5nKCkKQEAgLTM2MSwxMCArMzY0LDM2IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0
Ojp1cGRhdGVMYXllcnMoTGF5ZXJDaHJvbWl1bSogcm9vdExheWVyKQogICAgICAgICBDQ0xheWVy
VHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShyb290
TGF5ZXIsIHJvb3RMYXllciwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBtX3VwZGF0
ZUxpc3QsIHJvb3RSZW5kZXJTdXJmYWNlLT5sYXllckxpc3QoKSwgbGF5ZXJSZW5kZXJlckNhcGFi
aWxpdGllcygpLm1heFRleHR1cmVTaXplKTsKICAgICB9CiAKLSAgICBwYWludExheWVyQ29udGVu
dHMobV91cGRhdGVMaXN0KTsKKyAgICBwYWludExheWVyQ29udGVudHMobV91cGRhdGVMaXN0LCBQ
YWludFZpc2libGUpOworICAgIGlmICghbV90cmlnZ2VySWRsZVBhaW50cykKKyAgICAgICAgcmV0
dXJuOworCisgICAgc2l6ZV90IHByZWZlcnJlZExpbWl0Qnl0ZXMgPSBUZXh0dXJlTWFuYWdlcjo6
cmVjbGFpbUxpbWl0Qnl0ZXMobV92aWV3cG9ydFNpemUpOworICAgIHNpemVfdCBtYXhMaW1pdEJ5
dGVzID0gVGV4dHVyZU1hbmFnZXI6OmhpZ2hMaW1pdEJ5dGVzKG1fdmlld3BvcnRTaXplKTsKKyAg
ICBjb250ZW50c1RleHR1cmVNYW5hZ2VyKCktPnJlZHVjZU1lbW9yeVRvTGltaXQocHJlZmVycmVk
TGltaXRCeXRlcyk7CisgICAgaWYgKGNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKS0+Y3VycmVudE1l
bW9yeVVzZUJ5dGVzKCkgPj0gcHJlZmVycmVkTGltaXRCeXRlcykKKyAgICAgICAgcmV0dXJuOwor
CisgICAgLy8gSWRsZSBwYWludGluZyBzaG91bGQgZmFpbCB3aGVuIHdlIGhpdCB0aGUgcHJlZmVy
cmVkIG1lbW9yeSBsaW1pdCwKKyAgICAvLyBvdGhlcndpc2UgaXQgd2lsbCBhbHdheXMgcHVzaCB1
cyB0b3dhcmRzIHRoZSBtYXhpbXVtIGxpbWl0LgorICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdl
ci0+c2V0TWF4TWVtb3J5TGltaXRCeXRlcyhwcmVmZXJyZWRMaW1pdEJ5dGVzKTsKKyAgICAvLyBU
aGUgc2Vjb25kIChpZGxlKSBwYWludCB3aWxsIGJlIGEgbm8tb3AgaW4gbGF5ZXJzIHdoZXJlIHBh
aW50aW5nIGFscmVhZHkgb2NjdXJlZCBhYm92ZS4KKyAgICBwYWludExheWVyQ29udGVudHMobV91
cGRhdGVMaXN0LCBQYWludElkbGUpOworICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+c2V0
TWF4TWVtb3J5TGltaXRCeXRlcyhtYXhMaW1pdEJ5dGVzKTsKK30KKworLy8gc3RhdGljCit2b2lk
IENDTGF5ZXJUcmVlSG9zdDo6cGFpbnRDb250ZW50c0lmRGlydHkoTGF5ZXJDaHJvbWl1bSogbGF5
ZXIsIFBhaW50VHlwZSBwYWludFR5cGUpCit7CisgICAgQVNTRVJUKGxheWVyKTsKKyAgICBBU1NF
UlQoUGFpbnRWaXNpYmxlID09IHBhaW50VHlwZSB8fCBQYWludElkbGUgPT0gcGFpbnRUeXBlKTsK
KyAgICBpZiAoUGFpbnRWaXNpYmxlID09IHBhaW50VHlwZSkKKyAgICAgICAgbGF5ZXItPnBhaW50
Q29udGVudHNJZkRpcnR5KCk7CisgICAgZWxzZQorICAgICAgICBsYXllci0+aWRsZVBhaW50Q29u
dGVudHNJZkRpcnR5KCk7CiB9CiAKLXZvaWQgQ0NMYXllclRyZWVIb3N0OjpwYWludE1hc2tBbmRS
ZXBsaWNhRm9yUmVuZGVyU3VyZmFjZShMYXllckNocm9taXVtKiByZW5kZXJTdXJmYWNlTGF5ZXIp
Cit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6cGFpbnRNYXNrQW5kUmVwbGljYUZvclJlbmRlclN1cmZh
Y2UoTGF5ZXJDaHJvbWl1bSogcmVuZGVyU3VyZmFjZUxheWVyLCBQYWludFR5cGUgcGFpbnRUeXBl
KQogewogICAgIC8vIE5vdGU6IE1hc2tzIGFuZCByZXBsaWNhcyBvbmx5IGV4aXN0IGZvciBsYXll
cnMgdGhhdCBvd24gcmVuZGVyIHN1cmZhY2VzLiBJZiB3ZSByZWFjaCB0aGlzIHBvaW50CiAgICAg
Ly8gaW4gY29kZSwgd2UgYWxyZWFkeSBrbm93IHRoYXQgYXQgbGVhc3Qgc29tZXRoaW5nIHdpbGwg
YmUgZHJhd24gaW50byB0aGlzIHJlbmRlciBzdXJmYWNlLCBzbyB0aGUKQEAgLTM3MywyNCArNDAy
LDI0IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpwYWludE1hc2tBbmRSZXBsaWNhRm9yUmVuZGVy
U3VyZmFjZShMYXllckNocm9taXVtKiByZW5kZXJTCiAgICAgaWYgKHJlbmRlclN1cmZhY2VMYXll
ci0+bWFza0xheWVyKCkpIHsKICAgICAgICAgcmVuZGVyU3VyZmFjZUxheWVyLT5tYXNrTGF5ZXIo
KS0+c2V0TGF5ZXJUcmVlSG9zdCh0aGlzKTsKICAgICAgICAgcmVuZGVyU3VyZmFjZUxheWVyLT5t
YXNrTGF5ZXIoKS0+c2V0VmlzaWJsZUxheWVyUmVjdChJbnRSZWN0KEludFBvaW50KCksIHJlbmRl
clN1cmZhY2VMYXllci0+Y29udGVudEJvdW5kcygpKSk7Ci0gICAgICAgIHJlbmRlclN1cmZhY2VM
YXllci0+bWFza0xheWVyKCktPnBhaW50Q29udGVudHNJZkRpcnR5KCk7CisgICAgICAgIHBhaW50
Q29udGVudHNJZkRpcnR5KHJlbmRlclN1cmZhY2VMYXllci0+bWFza0xheWVyKCksIHBhaW50VHlw
ZSk7CiAgICAgfQogCiAgICAgTGF5ZXJDaHJvbWl1bSogcmVwbGljYUxheWVyID0gcmVuZGVyU3Vy
ZmFjZUxheWVyLT5yZXBsaWNhTGF5ZXIoKTsKICAgICBpZiAocmVwbGljYUxheWVyKSB7CiAKICAg
ICAgICAgcmVwbGljYUxheWVyLT5zZXRMYXllclRyZWVIb3N0KHRoaXMpOwotICAgICAgICByZXBs
aWNhTGF5ZXItPnBhaW50Q29udGVudHNJZkRpcnR5KCk7CisgICAgICAgIHBhaW50Q29udGVudHNJ
ZkRpcnR5KHJlcGxpY2FMYXllciwgcGFpbnRUeXBlKTsKIAogICAgICAgICBpZiAocmVwbGljYUxh
eWVyLT5tYXNrTGF5ZXIoKSkgewogICAgICAgICAgICAgcmVwbGljYUxheWVyLT5tYXNrTGF5ZXIo
KS0+c2V0TGF5ZXJUcmVlSG9zdCh0aGlzKTsKICAgICAgICAgICAgIHJlcGxpY2FMYXllci0+bWFz
a0xheWVyKCktPnNldFZpc2libGVMYXllclJlY3QoSW50UmVjdChJbnRQb2ludCgpLCByZXBsaWNh
TGF5ZXItPm1hc2tMYXllcigpLT5jb250ZW50Qm91bmRzKCkpKTsKLSAgICAgICAgICAgIHJlcGxp
Y2FMYXllci0+bWFza0xheWVyKCktPnBhaW50Q29udGVudHNJZkRpcnR5KCk7CisgICAgICAgICAg
ICBwYWludENvbnRlbnRzSWZEaXJ0eShyZXBsaWNhTGF5ZXItPm1hc2tMYXllcigpLCBwYWludFR5
cGUpOwogICAgICAgICB9CiAgICAgfQogfQogCi12b2lkIENDTGF5ZXJUcmVlSG9zdDo6cGFpbnRM
YXllckNvbnRlbnRzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkKK3Zv
aWQgQ0NMYXllclRyZWVIb3N0OjpwYWludExheWVyQ29udGVudHMoY29uc3QgTGF5ZXJMaXN0JiBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBQYWludFR5cGUgcGFpbnRUeXBlKQogewogICAgIGZvciAo
aW50IHN1cmZhY2VJbmRleCA9IHJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpIC0gMTsgc3Vy
ZmFjZUluZGV4ID49IDAgOyAtLXN1cmZhY2VJbmRleCkgewogICAgICAgICBMYXllckNocm9taXVt
KiByZW5kZXJTdXJmYWNlTGF5ZXIgPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0W3N1cmZhY2VJbmRl
eF0uZ2V0KCk7CkBAIC0zOTksNyArNDI4LDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnBhaW50
TGF5ZXJDb250ZW50cyhjb25zdCBMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QKICAg
ICAgICAgQVNTRVJUKHJlbmRlclN1cmZhY2UtPmRyYXdPcGFjaXR5KCkpOwogCiAgICAgICAgIHJl
bmRlclN1cmZhY2VMYXllci0+c2V0TGF5ZXJUcmVlSG9zdCh0aGlzKTsKLSAgICAgICAgcGFpbnRN
YXNrQW5kUmVwbGljYUZvclJlbmRlclN1cmZhY2UocmVuZGVyU3VyZmFjZUxheWVyKTsKKyAgICAg
ICAgcGFpbnRNYXNrQW5kUmVwbGljYUZvclJlbmRlclN1cmZhY2UocmVuZGVyU3VyZmFjZUxheWVy
LCBwYWludFR5cGUpOwogCiAgICAgICAgIGNvbnN0IExheWVyTGlzdCYgbGF5ZXJMaXN0ID0gcmVu
ZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgbGF5ZXJJbmRl
eCA9IDA7IGxheWVySW5kZXggPCBsYXllckxpc3Quc2l6ZSgpOyArK2xheWVySW5kZXgpIHsKQEAg
LTQxMiwxMCArNDQxLDkgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnBhaW50TGF5ZXJDb250ZW50
cyhjb25zdCBMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QKIAogICAgICAgICAgICAg
bGF5ZXItPnNldExheWVyVHJlZUhvc3QodGhpcyk7CiAKLSAgICAgICAgICAgIEFTU0VSVChsYXll
ci0+b3BhY2l0eSgpKTsKICAgICAgICAgICAgIEFTU0VSVCghbGF5ZXItPmJvdW5kcygpLmlzRW1w
dHkoKSk7CiAKLSAgICAgICAgICAgIGxheWVyLT5wYWludENvbnRlbnRzSWZEaXJ0eSgpOworICAg
ICAgICAgICAgcGFpbnRDb250ZW50c0lmRGlydHkobGF5ZXIsIHBhaW50VHlwZSk7CiAgICAgICAg
IH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCmluZGV4IDg2MDVmMGRlY2Mw
YTZmOWY0MmNjZGIyYzBmNGM3NmNlNGU4N2U4ZjEuLjJkZGI5YWRlMmY0YzcxY2ViNWE3NTUwMjM4
MmY0Nzk0YzkyMTA5MDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCkBAIC0yMDIsOCAr
MjAyLDEwIEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRy
PExheWVyQ2hyb21pdW0+ID4gTGF5ZXJMaXN0OwogCi0gICAgdm9pZCBwYWludExheWVyQ29udGVu
dHMoY29uc3QgTGF5ZXJMaXN0Jik7Ci0gICAgdm9pZCBwYWludE1hc2tBbmRSZXBsaWNhRm9yUmVu
ZGVyU3VyZmFjZShMYXllckNocm9taXVtKik7CisgICAgZW51bSBQYWludFR5cGUgeyBQYWludFZp
c2libGUsIFBhaW50SWRsZSB9OworICAgIHN0YXRpYyB2b2lkIHBhaW50Q29udGVudHNJZkRpcnR5
KExheWVyQ2hyb21pdW0qLCBQYWludFR5cGUpOworICAgIHZvaWQgcGFpbnRMYXllckNvbnRlbnRz
KGNvbnN0IExheWVyTGlzdCYsIFBhaW50VHlwZSk7CisgICAgdm9pZCBwYWludE1hc2tBbmRSZXBs
aWNhRm9yUmVuZGVyU3VyZmFjZShMYXllckNocm9taXVtKiwgUGFpbnRUeXBlKTsKIAogICAgIHZv
aWQgdXBkYXRlTGF5ZXJzKExheWVyQ2hyb21pdW0qKTsKICAgICB2b2lkIGNsZWFyUGVuZGluZ1Vw
ZGF0ZSgpOwpAQCAtMjM0LDYgKzIzNiw3IEBAIHByaXZhdGU6CiAKICAgICBmbG9hdCBtX3BhZ2VT
Y2FsZTsKICAgICBmbG9hdCBtX21pblBhZ2VTY2FsZSwgbV9tYXhQYWdlU2NhbGU7CisgICAgYm9v
bCBtX3RyaWdnZXJJZGxlUGFpbnRzOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKaW5kZXggZDZhNzI5YTBkMjNi
MzY2ZTViMzM2ZjU2NjcxMjJkMDQ2NWI5MDQ0Mi4uMGVjYmVhNjkyNDk3NWU1MmJkMTg4MTU1NzQ1
MzMxMGUyZjE0MTFlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q0xheWVyVHJlZUhvc3RUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCkBAIC05NTMsNyArOTUzLDggQEAgcHVibGljOgogICAg
IHN0YXRpYyBQYXNzUmVmUHRyPENvbnRlbnRMYXllckNocm9taXVtV2l0aFVwZGF0ZVRyYWNraW5n
PiBjcmVhdGUoQ0NMYXllckRlbGVnYXRlICpkZWxlZ2F0ZSkgeyByZXR1cm4gYWRvcHRSZWYobmV3
IENvbnRlbnRMYXllckNocm9taXVtV2l0aFVwZGF0ZVRyYWNraW5nKGRlbGVnYXRlKSk7IH0KIAog
ICAgIGludCBwYWludENvbnRlbnRzQ291bnQoKSB7IHJldHVybiBtX3BhaW50Q29udGVudHNDb3Vu
dDsgfQotICAgIHZvaWQgcmVzZXRQYWludENvbnRlbnRzQ291bnQoKSB7IG1fcGFpbnRDb250ZW50
c0NvdW50ID0gMDsgfQorICAgIGludCBpZGxlUGFpbnRDb250ZW50c0NvdW50KCkgeyByZXR1cm4g
bV9pZGxlUGFpbnRDb250ZW50c0NvdW50OyB9CisgICAgdm9pZCByZXNldFBhaW50Q29udGVudHND
b3VudCgpIHsgbV9wYWludENvbnRlbnRzQ291bnQgPSAwOyBtX2lkbGVQYWludENvbnRlbnRzQ291
bnQgPSAwO30KIAogICAgIGludCB1cGRhdGVDb3VudCgpIHsgcmV0dXJuIG1fdXBkYXRlQ291bnQ7
IH0KICAgICB2b2lkIHJlc2V0VXBkYXRlQ291bnQoKSB7IG1fdXBkYXRlQ291bnQgPSAwOyB9CkBA
IC05NjQsNiArOTY1LDEyIEBAIHB1YmxpYzoKICAgICAgICAgbV9wYWludENvbnRlbnRzQ291bnQr
KzsKICAgICB9CiAKKyAgICB2aXJ0dWFsIHZvaWQgaWRsZVBhaW50Q29udGVudHNJZkRpcnR5KCkK
KyAgICB7CisgICAgICAgIENvbnRlbnRMYXllckNocm9taXVtOjppZGxlUGFpbnRDb250ZW50c0lm
RGlydHkoKTsKKyAgICAgICAgbV9pZGxlUGFpbnRDb250ZW50c0NvdW50Kys7CisgICAgfQorCiAg
ICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQsIENDVGV4dHVyZVVwZGF0ZXImIHVwZGF0ZXIpCiAgICAgewogICAgICAgICBD
b250ZW50TGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhjb250ZXh0LCB1
cGRhdGVyKTsKQEAgLTk3NCwxMiArOTgxLDE0IEBAIHByaXZhdGU6CiAgICAgZXhwbGljaXQgQ29u
dGVudExheWVyQ2hyb21pdW1XaXRoVXBkYXRlVHJhY2tpbmcoQ0NMYXllckRlbGVnYXRlICpkZWxl
Z2F0ZSkKICAgICAgICAgOiBDb250ZW50TGF5ZXJDaHJvbWl1bShkZWxlZ2F0ZSkKICAgICAgICAg
LCBtX3BhaW50Q29udGVudHNDb3VudCgwKQorICAgICAgICAsIG1faWRsZVBhaW50Q29udGVudHND
b3VudCgwKQogICAgICAgICAsIG1fdXBkYXRlQ291bnQoMCkKICAgICB7CiAgICAgICAgIHNldEJv
dW5kcyhJbnRTaXplKDEwLCAxMCkpOwogICAgIH0KIAogICAgIGludCBtX3BhaW50Q29udGVudHND
b3VudDsKKyAgICBpbnQgbV9pZGxlUGFpbnRDb250ZW50c0NvdW50OwogICAgIGludCBtX3VwZGF0
ZUNvdW50OwogfTsKIApAQCAtMTAxMCw2ICsxMDE5LDkgQEAgcHVibGljOgogICAgICAgICAvLyBw
YWludENvbnRlbnRzSWZEaXJ0eSgpIHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkIG9uY2UuCiAgICAg
ICAgIEVYUEVDVF9FUSgxLCBtX3VwZGF0ZUNoZWNrTGF5ZXItPnBhaW50Q29udGVudHNDb3VudCgp
KTsKIAorICAgICAgICAvLyBpZGxlUGFpbnRDb250ZW50c0lmRGlydHkoKSBzaG91bGQgaGF2ZSBi
ZWVuIGNhbGxlZCBvbmNlCisgICAgICAgIEVYUEVDVF9FUSgxLCBtX3VwZGF0ZUNoZWNrTGF5ZXIt
PmlkbGVQYWludENvbnRlbnRzQ291bnQoKSk7CisKICAgICAgICAgLy8gdXBkYXRlQ29tcG9zaXRv
clJlc291cmNlcygpIHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkIHRoZSBzYW1lCiAgICAgICAgIC8v
IGFtb3V0IG9mIHRpbWVzIGFzIHBhaW50Q29udGVudHNJZkRpcnR5KCkuCiAgICAgICAgIEVYUEVD
VF9FUShtX3VwZGF0ZUNoZWNrTGF5ZXItPnBhaW50Q29udGVudHNDb3VudCgpLApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0LmNw
cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsZWRMYXllckNocm9taXVtVGVzdC5j
cHAKaW5kZXggNDljZThkZjhkODljZjBlOGMyODg1MmYyZjM3OTIyYmVmODE4YTE1Mi4uMmVhMmEz
ZjE5ZjYxMTM5MzFiYzA1ODMxZjk1OGUyNjhiNDg2NzYxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RpbGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCkBAIC05
Nyw2ICs5NywxNiBAQCBwdWJsaWM6CiAgICAgICAgIFRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJlcGFy
ZVRvVXBkYXRlKHJlY3QpOwogICAgIH0KIAorICAgIHZvaWQgcHJlcGFyZVRvVXBkYXRlSWRsZShj
b25zdCBJbnRSZWN0JiByZWN0KQorICAgIHsKKyAgICAgICAgVGlsZWRMYXllckNocm9taXVtOjpw
cmVwYXJlVG9VcGRhdGVJZGxlKHJlY3QpOworICAgIH0KKworICAgIGJvb2wgbmVlZHNJZGxlUGFp
bnQoY29uc3QgSW50UmVjdCYgcmVjdCkKKyAgICB7CisgICAgICAgIHJldHVybiBUaWxlZExheWVy
Q2hyb21pdW06Om5lZWRzSWRsZVBhaW50KHJlY3QpOworICAgIH0KKwogICAgIHZpcnR1YWwgVGV4
dHVyZU1hbmFnZXIqIHRleHR1cmVNYW5hZ2VyKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJlTWFu
YWdlcjsgfQogCiBwcml2YXRlOgpAQCAtMTQ1LDUgKzE1NSwxMDcgQEAgVEVTVChUaWxlZExheWVy
Q2hyb21pdW1UZXN0LCBwdXNoRGlydHlUaWxlcykKICAgICBFWFBFQ1RfRkFMU0UobGF5ZXJJbXBs
LT5oYXNUaWxlQXQoMCwgMSkpOwogfQogCitURVNUKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1
c2hJZGxlUGFpbnRUaWxlcykKK3sKKyAgICBPd25QdHI8VGV4dHVyZU1hbmFnZXI+IHRleHR1cmVN
YW5hZ2VyID0gVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMioxMDI0KjEwMjQs
IDEwMjQpOworICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0
UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7Cisg
ICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CisgICAgUmVmUHRyPEZha2VD
Q1RpbGVkTGF5ZXJJbXBsPiBsYXllckltcGwgPSBhZG9wdFJlZihuZXcgRmFrZUNDVGlsZWRMYXll
ckltcGwoMCkpOworCisgICAgRmFrZVRleHR1cmVBbGxvY2F0b3IgdGV4dHVyZUFsbG9jYXRvcjsK
KyAgICBDQ1RleHR1cmVVcGRhdGVyIHVwZGF0ZXIoJnRleHR1cmVBbGxvY2F0b3IpOworCisgICAg
Ly8gVGhlIHRpbGUgc2l6ZSBpcyAxMDB4MTAwLiBTZXR1cCA1eDUgdGlsZXMgd2l0aCBvbmUgdmlz
aWJsZSB0aWxlIGluIHRoZSBjZW50ZXIuCisgICAgSW50U2l6ZSBjb250ZW50Qm91bmRzKDUwMCwg
NTAwKTsKKyAgICBJbnRSZWN0IGNvbnRlbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIGNvbnRlbnRC
b3VuZHMpOworICAgIEludFJlY3QgdmlzaWJsZVJlY3QoMjAwLCAyMDAsIDEwMCwgMTAwKTsKKwor
ICAgIC8vIFRoaXMgaW52YWxpZGF0ZXMgMjUgdGlsZXMgYW5kIHRoZW4gcGFpbnRzIG9uZSB2aXNp
YmxlIHRpbGUuCisgICAgbGF5ZXItPnNldEJvdW5kcyhjb250ZW50Qm91bmRzKTsKKyAgICBsYXll
ci0+c2V0VmlzaWJsZUxheWVyUmVjdCh2aXNpYmxlUmVjdCk7CisgICAgbGF5ZXItPmludmFsaWRh
dGVSZWN0KGNvbnRlbnRSZWN0KTsKKyAgICBsYXllci0+cHJlcGFyZVRvVXBkYXRlKHZpc2libGVS
ZWN0KTsKKworICAgIC8vIFdlIHNob3VsZCBuZWVkIGlkbGUtcGFpbnRpbmcgZm9yIDN4MyB0aWxl
cyBpbiB0aGUgY2VudGVyLgorICAgIEVYUEVDVF9UUlVFKGxheWVyLT5uZWVkc0lkbGVQYWludCh2
aXNpYmxlUmVjdCkpOworCisgICAgbGF5ZXItPnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoMCwg
dXBkYXRlcik7CisgICAgbGF5ZXItPnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXJJbXBsLmdldCgpKTsK
KworICAgIC8vIFdlIHNob3VsZCBoYXZlIG9uZSB0aWxlIG9uIHRoZSBpbXBsIHNpZGUuCisgICAg
RVhQRUNUX1RSVUUobGF5ZXJJbXBsLT5oYXNUaWxlQXQoMiwgMikpOworCisgICAgdGV4dHVyZU1h
bmFnZXItPnVucHJvdGVjdEFsbFRleHR1cmVzKCk7CisKKyAgICAvLyBGb3IgdGhlIG5leHQgZm91
ciB1cGRhdGVzLCB3ZSBzaG91bGQgZGV0ZWN0IHdlIHN0aWxsIG5lZWQgaWRsZSBwYWludGluZy4K
KyAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykgeworICAgICAgICBsYXllci0+cHJlcGFy
ZVRvVXBkYXRlKHZpc2libGVSZWN0KTsKKyAgICAgICAgRVhQRUNUX1RSVUUobGF5ZXItPm5lZWRz
SWRsZVBhaW50KHZpc2libGVSZWN0KSk7CisgICAgICAgIGxheWVyLT5wcmVwYXJlVG9VcGRhdGVJ
ZGxlKHZpc2libGVSZWN0KTsKKyAgICAgICAgbGF5ZXItPnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJj
ZXMoMCwgdXBkYXRlcik7CisgICAgICAgIGxheWVyLT5wdXNoUHJvcGVydGllc1RvKGxheWVySW1w
bC5nZXQoKSk7CisgICAgICAgIHRleHR1cmVNYW5hZ2VyLT51bnByb3RlY3RBbGxUZXh0dXJlcygp
OworICAgIH0KKworICAgIC8vIEFmdGVyIGZvdXIgcGFzc2VzIG9mIGlkbGUgcGFpbnRpbmcsIHdl
IHNob3VsZCBiZSBmaW5pc2hlZCBwYWludGluZworICAgIEVYUEVDVF9GQUxTRShsYXllci0+bmVl
ZHNJZGxlUGFpbnQodmlzaWJsZVJlY3QpKTsKKworICAgIC8vIFdlIHNob3VsZCBoYXZlIG9uZSB0
aWxlIHN1cnJvdW5kaW5nIHRoZSB2aXNpYmxlIHRpbGUgb24gYWxsIHNpZGVzLCBidXQgbm8gb3Ro
ZXIgdGlsZXMuCisgICAgSW50UmVjdCBpZGxlUGFpbnRUaWxlcygxLCAxLCAzLCAzKTsKKyAgICBm
b3IgKGludCBpID0gMDsgaSA8IDU7IGkrKykgeworICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8
IDU7IGorKykgeworICAgICAgICAgICAgaWYgKGlkbGVQYWludFRpbGVzLmNvbnRhaW5zKGksIGop
KQorICAgICAgICAgICAgICAgIEVYUEVDVF9UUlVFKGxheWVySW1wbC0+aGFzVGlsZUF0KGksIGop
KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBFWFBFQ1RfRkFMU0UobGF5ZXJJ
bXBsLT5oYXNUaWxlQXQoaSwgaikpOworICAgICAgICB9CisgICAgfQorfQorCisKK1RFU1QoVGls
ZWRMYXllckNocm9taXVtVGVzdCwgaWRsZVBhaW50T3V0T2ZNZW1vcnkpCit7CisgICAgLy8gVGhl
IHRpbGUgc2l6ZSBpcyAxMDB4MTAwLiBTZXR1cCA1eDUgdGlsZXMgd2l0aCBvbmUgMXgxIHZpc2li
bGUgdGlsZSBpbiB0aGUgY2VudGVyLgorICAgIEludFNpemUgY29udGVudEJvdW5kcygzMDAsIDMw
MCk7CisgICAgSW50UmVjdCBjb250ZW50UmVjdChJbnRQb2ludDo6emVybygpLCBjb250ZW50Qm91
bmRzKTsKKyAgICBJbnRSZWN0IHZpc2libGVSZWN0KDEwMCwgMTAwLCAxMDAsIDEwMCk7CisKKyAg
ICAvLyBXZSBoYXZlIGVub3VnaCBtZW1vcnkgZm9yIG9ubHkgdGhlIHZpc2libGUgcmVjdCwgc28g
d2Ugd2lsbCBydW4gb3V0IG9mIG1lbW9yeSBpbiBmaXJzdCBpZGxlIHBhaW50LgorICAgIGludCBt
ZW1vcnlMaW1pdCA9IDQgKiAxMDAgKiAxMDA7IC8vIDIgdGlsZXMsIDQgYnl0ZXMgcGVyIHBpeGVs
LgorCisgICAgT3duUHRyPFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IFRleHR1cmVN
YW5hZ2VyOjpjcmVhdGUobWVtb3J5TGltaXQsIG1lbW9yeUxpbWl0IC8gMiwgMTAyNCk7CisgICAg
UmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VU
aWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKKyAgICBEZWJ1Z1Njb3Bl
ZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKKyAgICBSZWZQdHI8RmFrZUNDVGlsZWRMYXllcklt
cGw+IGxheWVySW1wbCA9IGFkb3B0UmVmKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgwKSk7CisK
KyAgICBGYWtlVGV4dHVyZUFsbG9jYXRvciB0ZXh0dXJlQWxsb2NhdG9yOworICAgIENDVGV4dHVy
ZVVwZGF0ZXIgdXBkYXRlcigmdGV4dHVyZUFsbG9jYXRvcik7CisKKyAgICAvLyBUaGlzIGludmFs
aWRhdGVzIDkgdGlsZXMgYW5kIHRoZW4gcGFpbnRzIG9uZSB2aXNpYmxlIHRpbGUuCisgICAgbGF5
ZXItPnNldEJvdW5kcyhjb250ZW50Qm91bmRzKTsKKyAgICBsYXllci0+c2V0VmlzaWJsZUxheWVy
UmVjdCh2aXNpYmxlUmVjdCk7CisgICAgbGF5ZXItPmludmFsaWRhdGVSZWN0KGNvbnRlbnRSZWN0
KTsKKyAgICBsYXllci0+cHJlcGFyZVRvVXBkYXRlKHZpc2libGVSZWN0KTsKKworICAgIC8vIFdl
IHNob3VsZCBuZWVkIGlkbGUtcGFpbnRpbmcgZm9yIDN4MyB0aWxlcyBzdXJvdW5kaW5nIHZpc2li
bGUgdGlsZS4KKyAgICBFWFBFQ1RfVFJVRShsYXllci0+bmVlZHNJZGxlUGFpbnQodmlzaWJsZVJl
Y3QpKTsKKworICAgIGxheWVyLT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKDAsIHVwZGF0ZXIp
OworICAgIGxheWVyLT5wdXNoUHJvcGVydGllc1RvKGxheWVySW1wbC5nZXQoKSk7CisKKyAgICAv
LyBXZSBzaG91bGQgaGF2ZSBvbmUgdGlsZSBvbiB0aGUgaW1wbCBzaWRlLgorICAgIEVYUEVDVF9U
UlVFKGxheWVySW1wbC0+aGFzVGlsZUF0KDEsIDEpKTsKKworICAgIHRleHR1cmVNYW5hZ2VyLT51
bnByb3RlY3RBbGxUZXh0dXJlcygpOworICAgIGxheWVyLT5wcmVwYXJlVG9VcGRhdGUodmlzaWJs
ZVJlY3QpOworICAgIGxheWVyLT5wcmVwYXJlVG9VcGRhdGVJZGxlKHZpc2libGVSZWN0KTsKKwor
ICAgIC8vIFdlIHNob3VsZG4ndCBzaWduYWwgd2UgbmVlZCBhbm90aGVyIGlkbGUgcGFpbnQgYWZ0
ZXIgd2UgcnVuIG91dCBvZiBtZW1vcnkuCisgICAgRVhQRUNUX0ZBTFNFKGxheWVyLT5uZWVkc0lk
bGVQYWludCh2aXNpYmxlUmVjdCkpOworCisgICAgbGF5ZXItPnVwZGF0ZUNvbXBvc2l0b3JSZXNv
dXJjZXMoMCwgdXBkYXRlcik7CisgICAgbGF5ZXItPnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXJJbXBs
LmdldCgpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119542</attachid>
            <date>2011-12-15 19:24:12 -0800</date>
            <delta_ts>2011-12-15 19:48:16 -0800</delta_ts>
            <desc>Added fix from 74471 and fixed unit tests</desc>
            <filename>bug-72686-20111215192411.patch</filename>
            <type>text/plain</type>
            <size>32464</size>
            <attacher name="Eric Penner">epenner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyOTExCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmY5N2NjNzExNmNlM2Qz
NTA4ZjYxYTQ0ZDM5Nzk1ZTc1ZGEzZTUxYi4uOGU4NjU3ZTNmZGRhM2FmZGZhMGY2YWZiZTA4ZTBl
OTYwNTY5NGJmOSAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDExLTEyLTE1ICBFcmlj
IFBlbm5lciAgPGVwZW5uZXJAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIE5lZWQg
dG8gcHJlcGFpbnQgdGlsZXMgaW4gVGlsZWRMYXllckNocm9taXVtCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjY4NgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExh
eWVyQ2hyb21pdW06OmlkbGVQYWludENvbnRlbnRzSWZEaXJ0eSk6IGFkZGVkIGlkbGUgcGFpbnQg
ZnVuY3Rpb24KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5
ZXJDaHJvbWl1bS5oOiBkaXR0bworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyQ2hyb21pdW0uaDogZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06
OmlkbGVQYWludENvbnRlbnRzSWZEaXJ0eSk6IGRpdHRvCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dHVyZU1hbmFnZXI6OnByb3RlY3RUZXh0dXJlKTogcmVtb3ZlZCBhc3NlcnQgZm9yIHByb3RlY3Rp
bmcgYSB0ZXh0dXJlIHR3aWNlCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
VGlsZWRMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJv
bWl1bTo6VGlsZWRMYXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJD
aHJvbWl1bTo6Y2xlYW51cFJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVy
Q2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMpOiByZWZhY3RvcmluZyB0byB1c2Ug
dGlsZSBpbmRpY2VzCisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnByZXBh
cmVUb1VwZGF0ZVRpbGVzKTogcmVmYWN0b3JlZCBjb21tb24gY29kZSBhbmQgbWFkZSBpZGxlL3Zp
c2libGUgdmVyc2lvbnMKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJl
cGFyZVRvVXBkYXRlKTogZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1
bTo6cHJlcGFyZVRvVXBkYXRlSWRsZSk6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpUaWxlZExh
eWVyQ2hyb21pdW06Om5lZWRzSWRsZVBhaW50KTogCisgICAgICAgIChXZWJDb3JlOjpUaWxlZExh
eWVyQ2hyb21pdW06OmlkbGVQYWludFJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyVHJlZUhvc3Q6OkNDTGF5ZXJUcmVlSG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyVHJlZUhvc3Q6OmNvbXBvc2l0ZUFuZFJlYWRiYWNrKTogc2V0IGZsYWcgdG8gYXZvaWQgaWRs
ZSBwYWludCBkdXJyaW5nIGNvbXBvc2l0ZSBhbmQgcmVhZGJhY2sKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJUcmVlSG9zdDo6dXBkYXRlTGF5ZXJzKTogYWRkZWQgaWRsZSBmbGFnIHBhcmFtZXRl
cgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpwYWludENvbnRlbnRzSWZEaXJ0
eSk6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnBhaW50TWFza0Fu
ZFJlcGxpY2FGb3JSZW5kZXJTdXJmYWNlKTogZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJUcmVlSG9zdDo6cGFpbnRMYXllckNvbnRlbnRzKTogY2hvb3NlcyBpZGxlIG9yIHZpc2libGUg
cGFpbnQKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3QuaDoKKwogMjAxMS0xMi0xNSAgSGFqaW1lIE1vcnJpdGEgIDxtb3JyaXRhQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkIGJ1aWxkIGZpeCBhdHRlbXB0IGZvciBDaHJvbWl1
bSBNYWMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDI5OTBkYzdkMmExNzQ1MjZmY2Q5
OTExMDlmMzYyM2RmZGM4ZDc3YzcuLmEzYWZiNzg1ZDU4YmZlOTMyZGEyMDU0ZTRjMTM5YmE5MjQ4
OTAzY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTEt
MTItMTUgIEVyaWMgUGVubmVyICA8ZXBlbm5lckBnb29nbGUuY29tPgorCisgICAgICAgIFtjaHJv
bWl1bV0gTmVlZCB0byBwcmVwYWludCB0aWxlcyBpbiBUaWxlZExheWVyQ2hyb21pdW0KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcyNjg2CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVy
VHJlZUhvc3RUZXN0LmNwcDoKKyAgICAgICAgKFdURjo6Q29udGVudExheWVyQ2hyb21pdW1XaXRo
VXBkYXRlVHJhY2tpbmc6OmlkbGVQYWludENvbnRlbnRzQ291bnQpOgorICAgICAgICAoV1RGOjpD
b250ZW50TGF5ZXJDaHJvbWl1bVdpdGhVcGRhdGVUcmFja2luZzo6cmVzZXRQYWludENvbnRlbnRz
Q291bnQpOgorICAgICAgICAoV1RGOjpDb250ZW50TGF5ZXJDaHJvbWl1bVdpdGhVcGRhdGVUcmFj
a2luZzo6aWRsZVBhaW50Q29udGVudHNJZkRpcnR5KToKKyAgICAgICAgKFdURjo6Q29udGVudExh
eWVyQ2hyb21pdW1XaXRoVXBkYXRlVHJhY2tpbmc6OkNvbnRlbnRMYXllckNocm9taXVtV2l0aFVw
ZGF0ZVRyYWNraW5nKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdE9wYWNpdHlD
aGFuZ2U6OmFmdGVyVGVzdCk6CisgICAgICAgICogdGVzdHMvVGlsZWRMYXllckNocm9taXVtVGVz
dC5jcHA6CisgICAgICAgIChXVEY6OkZha2VUaWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVUb1Vw
ZGF0ZUlkbGUpOgorICAgICAgICAoV1RGOjpGYWtlVGlsZWRMYXllckNocm9taXVtOjpuZWVkc0lk
bGVQYWludCk6CisgICAgICAgIChXVEY6OlRFU1QpOgorCiAyMDExLTEyLTE0ICBEYXZpZCBMZXZp
biAgPGxldmluQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIERhdGFiYXNlT2Jz
ZXJ2ZXIgbmVlZHMgdGhyZWFkc2FmZSBmaXhlcyBhbmQgb3RoZXIgY2xlYW4tdXAuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5
ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggMmEyNDY2ZDkxMjlhZWMzNjQwOTMyMjlj
YjkzNWFmODJkNTA3MjRiNi4uYzI4NGVlYTMxYTQwMGUzZTkyNTMyOTViNWYyNjAzNDQ5ZjlkODBk
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Q29udGVudExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcApAQCAtMTA5LDYgKzEwOSwy
MCBAQCB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eSgpCiAg
ICAgbV9uZWVkc0Rpc3BsYXkgPSBmYWxzZTsKIH0KIAordm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1
bTo6aWRsZVBhaW50Q29udGVudHNJZkRpcnR5KCkKK3sKKyAgICBpZiAoIWRyYXdzQ29udGVudCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBJbnRSZWN0JiBsYXllclJlY3QgPSB2aXNp
YmxlTGF5ZXJSZWN0KCk7CisgICAgaWYgKGxheWVyUmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIHByZXBhcmVUb1VwZGF0ZUlkbGUobGF5ZXJSZWN0KTsKKyAgICBpZiAobmVl
ZHNJZGxlUGFpbnQobGF5ZXJSZWN0KSkKKyAgICAgICAgc2V0TmVlZHNDb21taXQoKTsKK30KKwog
Ym9vbCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KCkgY29uc3QKIHsKICAgICBy
ZXR1cm4gbV9kZWxlZ2F0ZSAmJiBtX2RlbGVnYXRlLT5kcmF3c0NvbnRlbnQoKSAmJiBUaWxlZExh
eWVyQ2hyb21pdW06OmRyYXdzQ29udGVudCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVt
LmgKaW5kZXggYjgzNGU2NzZiZDYzNDQ1YWE0NTNiMzY1ZWVlMjgwMjQwZjM4MDljMS4uMGM1NzRi
NWRmZGMwYTU3MWI4MTFiZTAzOTc2NGFjNzViMWMyZTNlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5
ZXJDaHJvbWl1bS5oCkBAIC01MCw2ICs1MCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5Db250
ZW50TGF5ZXJDaHJvbWl1bSgpOwogCiAgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHNJZkRp
cnR5KCk7CisgICAgdmlydHVhbCB2b2lkIGlkbGVQYWludENvbnRlbnRzSWZEaXJ0eSgpOwogCiBw
cm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgQ29udGVudExheWVyQ2hyb21pdW0oQ0NMYXllckRlbGVn
YXRlKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllckNocm9taXVtLmgKaW5kZXggOWM3YTRmOGY0NzkyODlkYTA1OTEzN2I3OWJi
MTVkNmJkMTdkNTFlZS4uMTczNDM0ZTk4ZWI5MjMwNTVhYjc4NjYwMzQzZDc0NjA5MDc5OWUxYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyQ2hyb21pdW0uaApAQCAtMTYxLDYgKzE2MSw3IEBAIHB1YmxpYzoKICAgICAvLyBU
aGVzZSBtZXRob2RzIHR5cGljYWxseSBuZWVkIHRvIGJlIG92ZXJ3cml0dGVuIGJ5IGRlcml2ZWQg
Y2xhc3Nlcy4KICAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50c0lmRGlydHkoKSB7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgaWRsZVBhaW50Q29udGVudHNJZkRpcnR5KCkgeyB9CiAgICAgdmlydHVh
bCB2b2lkIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0M0QqLCBDQ1Rl
eHR1cmVVcGRhdGVyJikgeyB9CiAgICAgdmlydHVhbCB2b2lkIHNldElzTWFzayhib29sKSB7IH0K
ICAgICB2aXJ0dWFsIHZvaWQgdW5yZXNlcnZlQ29udGVudHNUZXh0dXJlKCkgeyB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFu
YWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0
dXJlTWFuYWdlci5jcHAKaW5kZXggMTE4NzUzN2ZiOTJhYzBiZWM3ODkzODI1ZTNhYjZlM2UyNWY5
NzAzNi4uMzAyMDdiZTM4MmViNDQ0M2FiYWQ0MzEzYmMxNTQ3ZGQwNjViMGFjOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFn
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Rl
eHR1cmVNYW5hZ2VyLmNwcApAQCAtMTQxLDcgKzE0MSw2IEBAIGJvb2wgVGV4dHVyZU1hbmFnZXI6
OmlzUHJvdGVjdGVkKFRleHR1cmVUb2tlbiB0b2tlbikKIHZvaWQgVGV4dHVyZU1hbmFnZXI6OnBy
b3RlY3RUZXh0dXJlKFRleHR1cmVUb2tlbiB0b2tlbikKIHsKICAgICBBU1NFUlQoaGFzVGV4dHVy
ZSh0b2tlbikpOwotICAgIEFTU0VSVCghbV90ZXh0dXJlcy5nZXQodG9rZW4pLmlzUHJvdGVjdGVk
KTsKICAgICBUZXh0dXJlSW5mbyBpbmZvID0gbV90ZXh0dXJlcy50YWtlKHRva2VuKTsKICAgICBp
bmZvLmlzUHJvdGVjdGVkID0gdHJ1ZTsKICAgICBtX3RleHR1cmVzLmFkZCh0b2tlbiwgaW5mbyk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9U
aWxlZExheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcAppbmRleCAwN2JhYjIwMjhmMTM0OWZlYzIw
NWE3MzQwYzMzZmQ2OWU1NzllMWNiLi45N2M5NTI1M2QwNjljZTFhMDRmMzBiOGJkOWUxZjIxOTk2
NzYxODVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTcyLDYgKzcyLDcg
QEAgVGlsZWRMYXllckNocm9taXVtOjpUaWxlZExheWVyQ2hyb21pdW0oQ0NMYXllckRlbGVnYXRl
KiBkZWxlZ2F0ZSkKICAgICA6IExheWVyQ2hyb21pdW0oZGVsZWdhdGUpCiAgICAgLCBtX3RleHR1
cmVGb3JtYXQoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSkKICAgICAsIG1fc2tpcHNE
cmF3KGZhbHNlKQorICAgICwgbV9za2lwc0lkbGVQYWludChmYWxzZSkKICAgICAsIG1fc2FtcGxl
ZFRleGVsRm9ybWF0KExheWVyVGV4dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZvcm1hdEludmFs
aWQpCiAgICAgLCBtX3RpbGluZ09wdGlvbihBdXRvVGlsZSkKIHsKQEAgLTkyLDcgKzkzLDcgQEAg
dm9pZCBUaWxlZExheWVyQ2hyb21pdW06OmNsZWFudXBSZXNvdXJjZXMoKQogCiAgICAgbV90aWxl
ci5jbGVhcigpOwogICAgIG1fcGFpbnRSZWN0ID0gSW50UmVjdCgpOwotICAgIG1fcmVxdWVzdGVk
VXBkYXRlUmVjdCA9IEludFJlY3QoKTsKKyAgICBtX3JlcXVlc3RlZFVwZGF0ZVRpbGVzUmVjdCA9
IEludFJlY3QoKTsKIH0KIAogdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnVwZGF0ZVRpbGVTaXpl
QW5kVGlsaW5nT3B0aW9uKCkKQEAgLTE3NywxMSArMTc4LDEzIEBAIHZvaWQgVGlsZWRMYXllckNo
cm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKEdyYXBoaWNzQ29udGV4dDNEKiwgQ0NU
ZXh0dXJlCiAgICAgQVNTRVJUKG1fc2tpcHNEcmF3IHx8IG1fdGlsZXIpOwogCiAgICAgLy8gUGFp
bnRpbmcgY291bGQgY2F1c2UgY29tcG9zaXRpbmcgdG8gZ2V0IHR1cm5lZCBvZmYsIHdoaWNoIG1h
eSBjYXVzZSB0aGUgdGlsZXIgdG8gYmVjb21lIGludmFsaWRhdGVkIG1pZC11cGRhdGUuCi0gICAg
aWYgKG1fc2tpcHNEcmF3IHx8IG1fcmVxdWVzdGVkVXBkYXRlUmVjdC5pc0VtcHR5KCkgfHwgIW1f
dGlsZXIgfHwgIW1fdGlsZXItPm51bVRpbGVzKCkpCisgICAgaWYgKG1fc2tpcHNEcmF3IHx8IG1f
cmVxdWVzdGVkVXBkYXRlVGlsZXNSZWN0LmlzRW1wdHkoKSB8fCAhbV90aWxlciB8fCAhbV90aWxl
ci0+bnVtVGlsZXMoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaW50IGxlZnQsIHRvcCwgcmln
aHQsIGJvdHRvbTsKLSAgICBtX3RpbGVyLT5jb250ZW50UmVjdFRvVGlsZUluZGljZXMobV9yZXF1
ZXN0ZWRVcGRhdGVSZWN0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworICAgIGludCBsZWZ0
ID0gbV9yZXF1ZXN0ZWRVcGRhdGVUaWxlc1JlY3QueCgpOworICAgIGludCB0b3AgPSBtX3JlcXVl
c3RlZFVwZGF0ZVRpbGVzUmVjdC55KCk7CisgICAgaW50IHJpZ2h0ID0gbV9yZXF1ZXN0ZWRVcGRh
dGVUaWxlc1JlY3QubWF4WCgpIC0gMTsKKyAgICBpbnQgYm90dG9tID0gbV9yZXF1ZXN0ZWRVcGRh
dGVUaWxlc1JlY3QubWF4WSgpIC0gMTsKICAgICBmb3IgKGludCBqID0gdG9wOyBqIDw9IGJvdHRv
bTsgKytqKSB7CiAgICAgICAgIGZvciAoaW50IGkgPSBsZWZ0OyBpIDw9IHJpZ2h0OyArK2kpIHsK
ICAgICAgICAgICAgIFVwZGF0YWJsZVRpbGUqIHRpbGUgPSB0aWxlQXQoaSwgaik7CkBAIC0zMzks
MzggKzM0MiwxNyBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJvdGVjdFRpbGVUZXh0dXJl
cyhjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKICAgICB9CiB9CiAKLXZvaWQgVGlsZWRMYXll
ckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCit2
b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlVGlsZXMoYm9vbCBpZGxlLCBp
bnQgbGVmdCwgaW50IHRvcCwgaW50IHJpZ2h0LCBpbnQgYm90dG9tKQogewotICAgIGlmICghbV90
aWxlcikKLSAgICAgICAgY3JlYXRlVGlsZXIoaXNOb25Db21wb3NpdGVkQ29udGVudCgpID8gQ0NM
YXllclRpbGluZ0RhdGE6Ok5vQm9yZGVyVGV4ZWxzIDogQ0NMYXllclRpbGluZ0RhdGE6Okhhc0Jv
cmRlclRleGVscyk7Ci0KLSAgICBBU1NFUlQobV90aWxlcik7Ci0KLSAgICBtX3NraXBzRHJhdyA9
IGZhbHNlOwotCiAgICAgLy8gUmVzZXQgbV91cGRhdGVSZWN0IGZvciBhbGwgdGlsZXMuCiAgICAg
Zm9yIChDQ0xheWVyVGlsaW5nRGF0YTo6VGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1f
dGlsZXItPnRpbGVzKCkuYmVnaW4oKTsgaXRlciAhPSBtX3RpbGVyLT50aWxlcygpLmVuZCgpOyAr
K2l0ZXIpIHsKICAgICAgICAgVXBkYXRhYmxlVGlsZSogdGlsZSA9IHN0YXRpY19jYXN0PFVwZGF0
YWJsZVRpbGUqPihpdGVyLT5zZWNvbmQuZ2V0KCkpOwogICAgICAgICB0aWxlLT5tX3VwZGF0ZVJl
Y3QgPSBJbnRSZWN0KCk7CiAgICAgfQogCi0gICAgaWYgKGNvbnRlbnRSZWN0LmlzRW1wdHkoKSkg
ewotICAgICAgICBtX3JlcXVlc3RlZFVwZGF0ZVJlY3QgPSBJbnRSZWN0KCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBtX3RpbGVyLT5ncm93TGF5ZXJUb0NvbnRhaW4oY29udGVudFJl
Y3QpOwotCi0gICAgaWYgKCFtX3RpbGVyLT5udW1UaWxlcygpKSB7Ci0gICAgICAgIG1fcmVxdWVz
dGVkVXBkYXRlUmVjdCA9IEludFJlY3QoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAg
IC8vIENyZWF0ZSB0aWxlcyBhcyBuZWVkZWQsIGV4cGFuZGluZyBhIGRpcnR5IHJlY3QgdG8gY29u
dGFpbiBhbGwKICAgICAvLyB0aGUgZGlydHkgcmVnaW9ucyBjdXJyZW50bHkgYmVpbmcgZHJhd24u
CiAgICAgSW50UmVjdCBkaXJ0eUxheWVyUmVjdDsKLSAgICBpbnQgbGVmdCwgdG9wLCByaWdodCwg
Ym90dG9tOwotICAgIG1fdGlsZXItPmNvbnRlbnRSZWN0VG9UaWxlSW5kaWNlcyhjb250ZW50UmVj
dCwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKICAgICBmb3IgKGludCBqID0gdG9wOyBqIDw9
IGJvdHRvbTsgKytqKSB7CiAgICAgICAgIGZvciAoaW50IGkgPSBsZWZ0OyBpIDw9IHJpZ2h0OyAr
K2kpIHsKICAgICAgICAgICAgIFVwZGF0YWJsZVRpbGUqIHRpbGUgPSB0aWxlQXQoaSwgaik7CkBA
IC0zODEsOCArMzYzLDExIEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRh
dGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCiAgICAgICAgICAgICAgICAgdGlsZS0+bV9k
aXJ0eUxheWVyUmVjdCA9IG1fdGlsZXItPnRpbGVMYXllclJlY3QodGlsZSk7CiAKICAgICAgICAg
ICAgIGlmICghdGlsZS0+bWFuYWdlZFRleHR1cmUoKS0+cmVzZXJ2ZShtX3RpbGVyLT50aWxlU2l6
ZSgpLCBtX3RleHR1cmVGb3JtYXQpKSB7Ci0gICAgICAgICAgICAgICAgbV9za2lwc0RyYXcgPSB0
cnVlOwotICAgICAgICAgICAgICAgIGNsZWFudXBSZXNvdXJjZXMoKTsKKyAgICAgICAgICAgICAg
ICBtX3NraXBzSWRsZVBhaW50ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpZiAoIWlkbGUpIHsK
KyAgICAgICAgICAgICAgICAgICAgbV9za2lwc0RyYXcgPSB0cnVlOworICAgICAgICAgICAgICAg
ICAgICBjbGVhbnVwUmVzb3VyY2VzKCk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIApAQCAtMzkwLDIyICszNzUsMjIgQEAgdm9pZCBU
aWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50
UmVjdCkKICAgICAgICAgfQogICAgIH0KIAotICAgIC8vIER1ZSB0byBib3JkZXJzLCB3aGVuIHRo
ZSBwYWludCByZWN0IGlzIGV4dGVuZGVkIHRvIHRpbGUgYm91bmRhcmllcywgaXQKLSAgICAvLyBt
YXkgZW5kIHVwIG92ZXJsYXBwaW5nIG1vcmUgdGlsZXMgdGhhbiB0aGUgb3JpZ2luYWwgY29udGVu
dCByZWN0LiBSZWNvcmQKLSAgICAvLyB0aGF0IG9yaWdpbmFsIHJlY3Qgc28gd2UgZG9uJ3QgdXBs
b2FkIG1vcmUgdGlsZXMgdGhhbiBuZWNlc3NhcnkuCi0gICAgbV9yZXF1ZXN0ZWRVcGRhdGVSZWN0
ID0gY29udGVudFJlY3Q7Ci0KICAgICBtX3BhaW50UmVjdCA9IG1fdGlsZXItPmxheWVyUmVjdFRv
Q29udGVudFJlY3QoZGlydHlMYXllclJlY3QpOwogICAgIGlmIChkaXJ0eUxheWVyUmVjdC5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIC8vIER1ZSB0byBib3JkZXJzLCB3aGVuIHRo
ZSBwYWludCByZWN0IGlzIGV4dGVuZGVkIHRvIHRpbGUgYm91bmRhcmllcywgaXQKKyAgICAvLyBt
YXkgZW5kIHVwIG92ZXJsYXBwaW5nIG1vcmUgdGlsZXMgdGhhbiB0aGUgb3JpZ2luYWwgY29udGVu
dCByZWN0LiBSZWNvcmQKKyAgICAvLyB0aGUgb3JpZ2luYWwgdGlsZXMgc28gd2UgZG9uJ3QgdXBs
b2FkIG1vcmUgdGlsZXMgdGhhbiBuZWNlc3NhcnkuCisgICAgaWYgKCFtX3BhaW50UmVjdC5pc0Vt
cHR5KCkpCisgICAgICAgIG1fcmVxdWVzdGVkVXBkYXRlVGlsZXNSZWN0ID0gSW50UmVjdChsZWZ0
LCB0b3AsIHJpZ2h0IC0gbGVmdCArIDEsIGJvdHRvbSAtIHRvcCArIDEpOworCiAgICAgLy8gQ2Fs
bGluZyBwcmVwYXJlVG9VcGRhdGUoKSBjYWxscyBpbnRvIFdlYktpdCB0byBwYWludCwgd2hpY2gg
bWF5IGhhdmUgdGhlIHNpZGUKICAgICAvLyBlZmZlY3Qgb2YgZGlzYWJsaW5nIGNvbXBvc2l0aW5n
LCB3aGljaCBjYXVzZXMgb3VyIHJlZmVyZW5jZSB0byB0aGUgdGV4dHVyZSB1cGRhdGVyIHRvIGJl
IGRlbGV0ZWQuCiAgICAgLy8gSG93ZXZlciwgd2UgY2FuJ3QgZnJlZSB0aGUgbWVtb3J5IGJhY2tp
bmcgdGhlIEdyYXBoaWNzQ29udGV4dCB1bnRpbCB0aGUgcGFpbnQgZmluaXNoZXMsCiAgICAgLy8g
c28gd2UgZ3JhYiBhIGxvY2FsIHJlZmVyZW5jZSBoZXJlIHRvIGhvbGQgdGhlIHVwZGF0ZXIgYWxp
dmUgdW50aWwgdGhlIHBhaW50IGNvbXBsZXRlcy4KICAgICBSZWZQdHI8TGF5ZXJUZXh0dXJlVXBk
YXRlcj4gcHJvdGVjdG9yKHRleHR1cmVVcGRhdGVyKCkpOwogICAgIHRleHR1cmVVcGRhdGVyKCkt
PnByZXBhcmVUb1VwZGF0ZShtX3BhaW50UmVjdCwgbV90aWxlci0+dGlsZVNpemUoKSwgbV90aWxl
ci0+aGFzQm9yZGVyVGV4ZWxzKCksIGNvbnRlbnRzU2NhbGUoKSk7Ci0gICAgbV90aWxlci0+Y29u
dGVudFJlY3RUb1RpbGVJbmRpY2VzKG1fcmVxdWVzdGVkVXBkYXRlUmVjdCwgbGVmdCwgdG9wLCBy
aWdodCwgYm90dG9tKTsKICAgICBmb3IgKGludCBqID0gdG9wOyBqIDw9IGJvdHRvbTsgKytqKSB7
CiAgICAgICAgIGZvciAoaW50IGkgPSBsZWZ0OyBpIDw9IHJpZ2h0OyArK2kpIHsKICAgICAgICAg
ICAgIFVwZGF0YWJsZVRpbGUqIHRpbGUgPSB0aWxlQXQoaSwgaik7CkBAIC00MzcsNSArNDIyLDEx
NyBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJl
Y3QmIGNvbnRlbnRSZWN0KQogICAgIH0KIH0KIAorCit2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6
cHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQoreworICAgIGlmICgh
bV90aWxlcikKKyAgICAgICAgY3JlYXRlVGlsZXIoaXNOb25Db21wb3NpdGVkQ29udGVudCgpID8g
Q0NMYXllclRpbGluZ0RhdGE6Ok5vQm9yZGVyVGV4ZWxzIDogQ0NMYXllclRpbGluZ0RhdGE6Okhh
c0JvcmRlclRleGVscyk7CisKKyAgICBBU1NFUlQobV90aWxlcik7CisKKyAgICBtX3NraXBzRHJh
dyA9IGZhbHNlOworICAgIG1fc2tpcHNJZGxlUGFpbnQgPSBmYWxzZTsKKyAgICBtX3JlcXVlc3Rl
ZFVwZGF0ZVRpbGVzUmVjdCA9IEludFJlY3QoKTsKKyAgICBtX3BhaW50UmVjdCA9IEludFJlY3Qo
KTsKKworICAgIG1fdGlsZXItPmdyb3dMYXllclRvQ29udGFpbihJbnRSZWN0KEludFBvaW50Ojp6
ZXJvKCksIGNvbnRlbnRCb3VuZHMoKSkpOworCisgICAgaWYgKGNvbnRlbnRSZWN0LmlzRW1wdHko
KSB8fCAhbV90aWxlci0+bnVtVGlsZXMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50IGxl
ZnQsIHRvcCwgcmlnaHQsIGJvdHRvbTsKKyAgICBtX3RpbGVyLT5jb250ZW50UmVjdFRvVGlsZUlu
ZGljZXMoY29udGVudFJlY3QsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CisKKyAgICBwcmVw
YXJlVG9VcGRhdGVUaWxlcyhmYWxzZSwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKK30KKwor
dm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVUb1VwZGF0ZUlkbGUoY29uc3QgSW50UmVj
dCYgY29udGVudFJlY3QpCit7CisgICAgLy8gQWJvcnQgaWYgd2UgaGF2ZSBhbHJlYWR5IHByZXBh
cmVkIGEgcGFpbnQgb3IgcnVuIG91dCBvZiBtZW1vcnkuCisgICAgaWYgKG1fc2tpcHNJZGxlUGFp
bnQgfHwgIW1fcGFpbnRSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNT
RVJUKG1fdGlsZXIpOworCisgICAgbV90aWxlci0+Z3Jvd0xheWVyVG9Db250YWluKEludFJlY3Qo
SW50UG9pbnQ6Onplcm8oKSwgY29udGVudEJvdW5kcygpKSk7CisKKyAgICBpZiAoIW1fdGlsZXIt
Pm51bVRpbGVzKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFByb3RlY3QgYW55IHRleHR1
cmVzIGluIHRoZSBwcmUtcGFpbnQgYXJlYSBzbyB3ZSBkb24ndCBlbmQgdXAganVzdAorICAgIC8v
IHJlY2xhaW1pbmcgdGhlbSBiZWxvdy4KKyAgICBJbnRSZWN0IGlkbGVQYWludENvbnRlbnRSZWN0
ID0gaWRsZVBhaW50UmVjdChjb250ZW50UmVjdCk7CisgICAgcHJvdGVjdFRpbGVUZXh0dXJlcyhp
ZGxlUGFpbnRDb250ZW50UmVjdCk7CisKKyAgICAvLyBFeHBhbmQgb3V0d2FyZHMgdW50aWwgd2Ug
ZmluZCBhIGRpcnR5IHJvdyBvciBjb2x1bW4gdG8gdXBkYXRlLgorICAgIGludCBsZWZ0LCB0b3As
IHJpZ2h0LCBib3R0b207CisgICAgbV90aWxlci0+Y29udGVudFJlY3RUb1RpbGVJbmRpY2VzKGNv
bnRlbnRSZWN0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworICAgIGludCBwcmVwYWludExl
ZnQsIHByZXBhaW50VG9wLCBwcmVwYWludFJpZ2h0LCBwcmVwYWludEJvdHRvbTsKKyAgICBtX3Rp
bGVyLT5jb250ZW50UmVjdFRvVGlsZUluZGljZXMoaWRsZVBhaW50Q29udGVudFJlY3QsIHByZXBh
aW50TGVmdCwgcHJlcGFpbnRUb3AsIHByZXBhaW50UmlnaHQsIHByZXBhaW50Qm90dG9tKTsKKyAg
ICB3aGlsZSAoIW1fc2tpcHNJZGxlUGFpbnQgJiYgKGxlZnQgPiBwcmVwYWludExlZnQgfHwgdG9w
ID4gcHJlcGFpbnRUb3AgfHwgcmlnaHQgPCBwcmVwYWludFJpZ2h0IHx8IGJvdHRvbSA8IHByZXBh
aW50Qm90dG9tKSkgeworICAgICAgICBpZiAoYm90dG9tIDwgcHJlcGFpbnRCb3R0b20pIHsKKyAg
ICAgICAgICAgICsrYm90dG9tOworICAgICAgICAgICAgcHJlcGFyZVRvVXBkYXRlVGlsZXModHJ1
ZSwgbGVmdCwgYm90dG9tLCByaWdodCwgYm90dG9tKTsKKyAgICAgICAgICAgIGlmICghbV9wYWlu
dFJlY3QuaXNFbXB0eSgpIHx8IG1fc2tpcHNJZGxlUGFpbnQpCisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRvcCA+IHByZXBhaW50VG9wKSB7CisgICAgICAg
ICAgICAtLXRvcDsKKyAgICAgICAgICAgIHByZXBhcmVUb1VwZGF0ZVRpbGVzKHRydWUsIGxlZnQs
IHRvcCwgcmlnaHQsIHRvcCk7CisgICAgICAgICAgICBpZiAoIW1fcGFpbnRSZWN0LmlzRW1wdHko
KSB8fCBtX3NraXBzSWRsZVBhaW50KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGlmIChsZWZ0ID4gcHJlcGFpbnRMZWZ0KSB7CisgICAgICAgICAgICAtLWxlZnQ7
CisgICAgICAgICAgICBwcmVwYXJlVG9VcGRhdGVUaWxlcyh0cnVlLCBsZWZ0LCB0b3AsIGxlZnQs
IGJvdHRvbSk7CisgICAgICAgICAgICBpZiAoIW1fcGFpbnRSZWN0LmlzRW1wdHkoKSB8fCBtX3Nr
aXBzSWRsZVBhaW50KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGlmIChyaWdodCA8IHByZXBhaW50UmlnaHQpIHsKKyAgICAgICAgICAgICsrcmlnaHQ7CisgICAg
ICAgICAgICBwcmVwYXJlVG9VcGRhdGVUaWxlcyh0cnVlLCByaWdodCwgdG9wLCByaWdodCwgYm90
dG9tKTsKKyAgICAgICAgICAgIGlmICghbV9wYWludFJlY3QuaXNFbXB0eSgpIHx8IG1fc2tpcHNJ
ZGxlUGFpbnQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9CisK
K2Jvb2wgVGlsZWRMYXllckNocm9taXVtOjpuZWVkc0lkbGVQYWludChjb25zdCBJbnRSZWN0JiBj
b250ZW50UmVjdCkKK3sKKyAgICBpZiAobV9za2lwc0lkbGVQYWludCkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgQVNTRVJUKG1fdGlsZXIpOworCisgICAgSW50UmVjdCBpZGxlUGFpbnRD
b250ZW50UmVjdCA9IGlkbGVQYWludFJlY3QoY29udGVudFJlY3QpOworCisgICAgaW50IGxlZnQs
IHRvcCwgcmlnaHQsIGJvdHRvbTsKKyAgICBtX3RpbGVyLT5jb250ZW50UmVjdFRvVGlsZUluZGlj
ZXMoaWRsZVBhaW50Q29udGVudFJlY3QsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CisgICAg
Zm9yIChpbnQgaiA9IHRvcDsgaiA8PSBib3R0b207ICsraikgeworICAgICAgICBmb3IgKGludCBp
ID0gbGVmdDsgaSA8PSByaWdodDsgKytpKSB7CisgICAgICAgICAgICBpZiAobV9yZXF1ZXN0ZWRV
cGRhdGVUaWxlc1JlY3QuY29udGFpbnMoSW50UG9pbnQoaSwgaikpKQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgVXBkYXRhYmxlVGlsZSogdGlsZSA9IHRpbGVBdChpLCBq
KTsKKyAgICAgICAgICAgIGlmICghdGlsZSB8fCAhdGlsZS0+bWFuYWdlZFRleHR1cmUoKS0+aXNW
YWxpZChtX3RpbGVyLT50aWxlU2l6ZSgpLCBtX3RleHR1cmVGb3JtYXQpIHx8IHRpbGUtPmlzRGly
dHkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK0ludFJlY3QgVGlsZWRMYXllckNocm9taXVtOjppZGxlUGFp
bnRSZWN0KGNvbnN0IEludFJlY3QmIHZpc2libGVDb250ZW50UmVjdCkKK3sKKyAgICBBU1NFUlQo
bV90aWxlcik7CisgICAgSW50UmVjdCBwcmVwYWludFJlY3QgPSB2aXNpYmxlQ29udGVudFJlY3Q7
CisgICAgLy8gRklYTUU6IFRoaXMgY2FuIGJlIG1hZGUgYSBsb3QgbGFyZ2VyIGlmIHdlIGNhbjoK
KyAgICAvLyAtIHJlc2VydmUgbWVtb3J5IGF0IGEgbG93ZXIgcHJpb3JpdHkgdGhhbiBmb3Igdmlz
aWJsZSBjb250ZW50CisgICAgLy8gLSBvbmx5IHJlc2VydmUgaWRsZSBwYWludCB0aWxlcyB1cCB0
byBhIG1lbW9yeSByZWNsYWltIHRocmVzaG9sZCBhbmQKKyAgICAvLyAtIGluc3VyZSB3ZSBwbGF5
IG5pY2VseSB3aXRoIG90aGVyIGxheWVycworICAgIHByZXBhaW50UmVjdC5pbmZsYXRlWChtX3Rp
bGVyLT50aWxlU2l6ZSgpLndpZHRoKCkpOworICAgIHByZXBhaW50UmVjdC5pbmZsYXRlWShtX3Rp
bGVyLT50aWxlU2l6ZSgpLmhlaWdodCgpKTsKKyAgICBwcmVwYWludFJlY3QuaW50ZXJzZWN0KElu
dFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgY29udGVudEJvdW5kcygpKSk7CisgICAgcmV0dXJuIHBy
ZXBhaW50UmVjdDsKK30KKwogfQogI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1RpbGVkTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmgKaW5kZXggNzdhOWVjOTE0MWZiZmI4NWZjYzVj
Y2MyYjU5MDVkYTQwNTlkMGJhYS4uNGIwY2M1NTUxY2JhMDI2OGM4NGVlMWY5NGQ1MWY1Y2Q1ZmY2
MGNlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vVGlsZWRMYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmgKQEAgLTc1LDkgKzc1LDE2IEBAIHBy
b3RlY3RlZDoKIAogICAgIC8vIFNldCBpbnZhbGlkYXRpb25zIHRvIGJlIHBvdGVudGlhbGx5IHJl
cGFpbnRlZCBkdXJpbmcgdXBkYXRlKCkuCiAgICAgdm9pZCBpbnZhbGlkYXRlUmVjdChjb25zdCBJ
bnRSZWN0JiBjb250ZW50UmVjdCk7CisKICAgICAvLyBQcmVwYXJlIGRhdGEgbmVlZGVkIHRvIHVw
ZGF0ZSB0ZXh0dXJlcyB0aGF0IGludGVyc2VjdCB3aXRoIGNvbnRlbnRSZWN0LgogICAgIHZvaWQg
cHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KTsKIAorICAgIC8vIFNh
bWUgYXMgYWJvdmUsIGJ1dCB0aGlzIHdpbGwgdHJ5IHRvIHBhaW50IGFkZGl0aW9uYWwgc3Vycm91
bmRpbmcgY29udGVudCBpZiBpZGxlLgorICAgIHZvaWQgcHJlcGFyZVRvVXBkYXRlSWRsZShjb25z
dCBJbnRSZWN0JiBjb250ZW50UmVjdCk7CisKKyAgICAvLyBBZnRlciBwcmVwYXJpbmcgYW4gdXBk
YXRlLCByZXR1cm5zIHRydWUgaWYgbW9yZSBwcmUtcGFpbnRpbmcgaXMgbmVlZGVkLgorICAgIGJv
b2wgbmVlZHNJZGxlUGFpbnQoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpOworCiAgICAgdmly
dHVhbCB2b2lkIHByb3RlY3RWaXNpYmxlVGlsZVRleHR1cmVzKCk7CiAKICAgICB2aXJ0dWFsIFRl
eHR1cmVNYW5hZ2VyKiB0ZXh0dXJlTWFuYWdlcigpIGNvbnN0OwpAQCAtOTAsMTcgKzk3LDIyIEBA
IHByaXZhdGU6CiAgICAgdm9pZCBjcmVhdGVUaWxlcklmTmVlZGVkKCk7CiAgICAgdm9pZCBzZXRU
aWxpbmdPcHRpb24oVGlsaW5nT3B0aW9uKTsKIAorICAgIHZvaWQgcHJlcGFyZVRvVXBkYXRlVGls
ZXMoYm9vbCBpZGxlLCBpbnQgbGVmdCwgaW50IHRvcCwgaW50IHJpZ2h0LCBpbnQgYm90dG9tKTsK
KyAgICBJbnRSZWN0IGlkbGVQYWludFJlY3QoY29uc3QgSW50UmVjdCYgdmlzaWJsZUNvbnRlbnRS
ZWN0KTsKKwogICAgIFVwZGF0YWJsZVRpbGUqIHRpbGVBdChpbnQsIGludCkgY29uc3Q7CiAgICAg
VXBkYXRhYmxlVGlsZSogY3JlYXRlVGlsZShpbnQsIGludCk7CiAKICAgICAvLyBUZW1wb3Jhcnkg
c3RhdGUgaGVsZCBiZXR3ZWVuIHByZXBhcmVUb1VwZGF0ZSgpIGFuZCB1cGRhdGVDb21wb3NpdG9y
UmVzb3VyY2VzKCkuCi0gICAgSW50UmVjdCBtX3JlcXVlc3RlZFVwZGF0ZVJlY3Q7CisgICAgSW50
UmVjdCBtX3JlcXVlc3RlZFVwZGF0ZVRpbGVzUmVjdDsKKwogICAgIC8vIFN0YXRlIGhlbGQgYmV0
d2VlbiBwcmVwYXJlVG9VcGRhdGUoKSBhbmQgcHVzaFByb3BlcnRpZXNUbygpLiBUaGlzIHJlcHJl
c2VudHMgdGhlIGFyZWEKICAgICAvLyBvZiB0aGUgbGF5ZXIgdGhhdCBpcyBhY3R1YWxseSByZS1w
YWludGVkIGJ5IFdlYktpdC4KICAgICBJbnRSZWN0IG1fcGFpbnRSZWN0OwogCiAgICAgR0MzRGVu
dW0gbV90ZXh0dXJlRm9ybWF0OwogICAgIGJvb2wgbV9za2lwc0RyYXc7CisgICAgYm9vbCBtX3Nr
aXBzSWRsZVBhaW50OwogICAgIExheWVyVGV4dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZvcm1h
dCBtX3NhbXBsZWRUZXhlbEZvcm1hdDsKIAogICAgIFRpbGluZ09wdGlvbiBtX3RpbGluZ09wdGlv
bjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCmluZGV4IDQ1ZmY2NmZkN2MwM2VmOTEx
YjQ0NTQ4YzJlNmI4MmM2YjlhZjg4NGUuLjY0NGY0MjljMjVjNjc1YTEwZGYyZWFkZjA1MWE2MDJh
NzVlNWI2NDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcApAQCAtNjcsNiArNjcs
NyBAQCBDQ0xheWVyVHJlZUhvc3Q6OkNDTGF5ZXJUcmVlSG9zdChDQ0xheWVyVHJlZUhvc3RDbGll
bnQqIGNsaWVudCwgY29uc3QgQ0NTZXR0aW5ncwogICAgICwgbV9wYWdlU2NhbGUoMSkKICAgICAs
IG1fbWluUGFnZVNjYWxlKDEpCiAgICAgLCBtX21heFBhZ2VTY2FsZSgxKQorICAgICwgbV90cmln
Z2VySWRsZVBhaW50cyh0cnVlKQogewogICAgIEFTU0VSVChDQ1Byb3h5Ojppc01haW5UaHJlYWQo
KSk7CiAgICAgbnVtTGF5ZXJUcmVlSW5zdGFuY2VzKys7CkBAIC0xODgsNyArMTg5LDkgQEAgR3Jh
cGhpY3NDb250ZXh0M0QqIENDTGF5ZXJUcmVlSG9zdDo6Y29udGV4dCgpCiAKIGJvb2wgQ0NMYXll
clRyZWVIb3N0Ojpjb21wb3NpdGVBbmRSZWFkYmFjayh2b2lkICpwaXhlbHMsIGNvbnN0IEludFJl
Y3QmIHJlY3QpCiB7CisgICAgbV90cmlnZ2VySWRsZVBhaW50cyA9IGZhbHNlOwogICAgIHJldHVy
biBtX3Byb3h5LT5jb21wb3NpdGVBbmRSZWFkYmFjayhwaXhlbHMsIHJlY3QpOworICAgIG1fdHJp
Z2dlcklkbGVQYWludHMgPSB0cnVlOwogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6ZmluaXNo
QWxsUmVuZGVyaW5nKCkKQEAgLTM2MSwxMCArMzY0LDM2IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0
Ojp1cGRhdGVMYXllcnMoTGF5ZXJDaHJvbWl1bSogcm9vdExheWVyKQogICAgICAgICBDQ0xheWVy
VHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShyb290
TGF5ZXIsIHJvb3RMYXllciwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBtX3VwZGF0
ZUxpc3QsIHJvb3RSZW5kZXJTdXJmYWNlLT5sYXllckxpc3QoKSwgbGF5ZXJSZW5kZXJlckNhcGFi
aWxpdGllcygpLm1heFRleHR1cmVTaXplKTsKICAgICB9CiAKLSAgICBwYWludExheWVyQ29udGVu
dHMobV91cGRhdGVMaXN0KTsKKyAgICBwYWludExheWVyQ29udGVudHMobV91cGRhdGVMaXN0LCBQ
YWludFZpc2libGUpOworICAgIGlmICghbV90cmlnZ2VySWRsZVBhaW50cykKKyAgICAgICAgcmV0
dXJuOworCisgICAgc2l6ZV90IHByZWZlcnJlZExpbWl0Qnl0ZXMgPSBUZXh0dXJlTWFuYWdlcjo6
cmVjbGFpbUxpbWl0Qnl0ZXMobV92aWV3cG9ydFNpemUpOworICAgIHNpemVfdCBtYXhMaW1pdEJ5
dGVzID0gVGV4dHVyZU1hbmFnZXI6OmhpZ2hMaW1pdEJ5dGVzKG1fdmlld3BvcnRTaXplKTsKKyAg
ICBjb250ZW50c1RleHR1cmVNYW5hZ2VyKCktPnJlZHVjZU1lbW9yeVRvTGltaXQocHJlZmVycmVk
TGltaXRCeXRlcyk7CisgICAgaWYgKGNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKS0+Y3VycmVudE1l
bW9yeVVzZUJ5dGVzKCkgPj0gcHJlZmVycmVkTGltaXRCeXRlcykKKyAgICAgICAgcmV0dXJuOwor
CisgICAgLy8gSWRsZSBwYWludGluZyBzaG91bGQgZmFpbCB3aGVuIHdlIGhpdCB0aGUgcHJlZmVy
cmVkIG1lbW9yeSBsaW1pdCwKKyAgICAvLyBvdGhlcndpc2UgaXQgd2lsbCBhbHdheXMgcHVzaCB1
cyB0b3dhcmRzIHRoZSBtYXhpbXVtIGxpbWl0LgorICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdl
ci0+c2V0TWF4TWVtb3J5TGltaXRCeXRlcyhwcmVmZXJyZWRMaW1pdEJ5dGVzKTsKKyAgICAvLyBU
aGUgc2Vjb25kIChpZGxlKSBwYWludCB3aWxsIGJlIGEgbm8tb3AgaW4gbGF5ZXJzIHdoZXJlIHBh
aW50aW5nIGFscmVhZHkgb2NjdXJlZCBhYm92ZS4KKyAgICBwYWludExheWVyQ29udGVudHMobV91
cGRhdGVMaXN0LCBQYWludElkbGUpOworICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+c2V0
TWF4TWVtb3J5TGltaXRCeXRlcyhtYXhMaW1pdEJ5dGVzKTsKK30KKworLy8gc3RhdGljCit2b2lk
IENDTGF5ZXJUcmVlSG9zdDo6cGFpbnRDb250ZW50c0lmRGlydHkoTGF5ZXJDaHJvbWl1bSogbGF5
ZXIsIFBhaW50VHlwZSBwYWludFR5cGUpCit7CisgICAgQVNTRVJUKGxheWVyKTsKKyAgICBBU1NF
UlQoUGFpbnRWaXNpYmxlID09IHBhaW50VHlwZSB8fCBQYWludElkbGUgPT0gcGFpbnRUeXBlKTsK
KyAgICBpZiAoUGFpbnRWaXNpYmxlID09IHBhaW50VHlwZSkKKyAgICAgICAgbGF5ZXItPnBhaW50
Q29udGVudHNJZkRpcnR5KCk7CisgICAgZWxzZQorICAgICAgICBsYXllci0+aWRsZVBhaW50Q29u
dGVudHNJZkRpcnR5KCk7CiB9CiAKLXZvaWQgQ0NMYXllclRyZWVIb3N0OjpwYWludE1hc2tBbmRS
ZXBsaWNhRm9yUmVuZGVyU3VyZmFjZShMYXllckNocm9taXVtKiByZW5kZXJTdXJmYWNlTGF5ZXIp
Cit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6cGFpbnRNYXNrQW5kUmVwbGljYUZvclJlbmRlclN1cmZh
Y2UoTGF5ZXJDaHJvbWl1bSogcmVuZGVyU3VyZmFjZUxheWVyLCBQYWludFR5cGUgcGFpbnRUeXBl
KQogewogICAgIC8vIE5vdGU6IE1hc2tzIGFuZCByZXBsaWNhcyBvbmx5IGV4aXN0IGZvciBsYXll
cnMgdGhhdCBvd24gcmVuZGVyIHN1cmZhY2VzLiBJZiB3ZSByZWFjaCB0aGlzIHBvaW50CiAgICAg
Ly8gaW4gY29kZSwgd2UgYWxyZWFkeSBrbm93IHRoYXQgYXQgbGVhc3Qgc29tZXRoaW5nIHdpbGwg
YmUgZHJhd24gaW50byB0aGlzIHJlbmRlciBzdXJmYWNlLCBzbyB0aGUKQEAgLTM3MywyNCArNDAy
LDI0IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpwYWludE1hc2tBbmRSZXBsaWNhRm9yUmVuZGVy
U3VyZmFjZShMYXllckNocm9taXVtKiByZW5kZXJTCiAgICAgaWYgKHJlbmRlclN1cmZhY2VMYXll
ci0+bWFza0xheWVyKCkpIHsKICAgICAgICAgcmVuZGVyU3VyZmFjZUxheWVyLT5tYXNrTGF5ZXIo
KS0+c2V0TGF5ZXJUcmVlSG9zdCh0aGlzKTsKICAgICAgICAgcmVuZGVyU3VyZmFjZUxheWVyLT5t
YXNrTGF5ZXIoKS0+c2V0VmlzaWJsZUxheWVyUmVjdChJbnRSZWN0KEludFBvaW50KCksIHJlbmRl
clN1cmZhY2VMYXllci0+Y29udGVudEJvdW5kcygpKSk7Ci0gICAgICAgIHJlbmRlclN1cmZhY2VM
YXllci0+bWFza0xheWVyKCktPnBhaW50Q29udGVudHNJZkRpcnR5KCk7CisgICAgICAgIHBhaW50
Q29udGVudHNJZkRpcnR5KHJlbmRlclN1cmZhY2VMYXllci0+bWFza0xheWVyKCksIHBhaW50VHlw
ZSk7CiAgICAgfQogCiAgICAgTGF5ZXJDaHJvbWl1bSogcmVwbGljYUxheWVyID0gcmVuZGVyU3Vy
ZmFjZUxheWVyLT5yZXBsaWNhTGF5ZXIoKTsKICAgICBpZiAocmVwbGljYUxheWVyKSB7CiAKICAg
ICAgICAgcmVwbGljYUxheWVyLT5zZXRMYXllclRyZWVIb3N0KHRoaXMpOwotICAgICAgICByZXBs
aWNhTGF5ZXItPnBhaW50Q29udGVudHNJZkRpcnR5KCk7CisgICAgICAgIHBhaW50Q29udGVudHNJ
ZkRpcnR5KHJlcGxpY2FMYXllciwgcGFpbnRUeXBlKTsKIAogICAgICAgICBpZiAocmVwbGljYUxh
eWVyLT5tYXNrTGF5ZXIoKSkgewogICAgICAgICAgICAgcmVwbGljYUxheWVyLT5tYXNrTGF5ZXIo
KS0+c2V0TGF5ZXJUcmVlSG9zdCh0aGlzKTsKICAgICAgICAgICAgIHJlcGxpY2FMYXllci0+bWFz
a0xheWVyKCktPnNldFZpc2libGVMYXllclJlY3QoSW50UmVjdChJbnRQb2ludCgpLCByZXBsaWNh
TGF5ZXItPm1hc2tMYXllcigpLT5jb250ZW50Qm91bmRzKCkpKTsKLSAgICAgICAgICAgIHJlcGxp
Y2FMYXllci0+bWFza0xheWVyKCktPnBhaW50Q29udGVudHNJZkRpcnR5KCk7CisgICAgICAgICAg
ICBwYWludENvbnRlbnRzSWZEaXJ0eShyZXBsaWNhTGF5ZXItPm1hc2tMYXllcigpLCBwYWludFR5
cGUpOwogICAgICAgICB9CiAgICAgfQogfQogCi12b2lkIENDTGF5ZXJUcmVlSG9zdDo6cGFpbnRM
YXllckNvbnRlbnRzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkKK3Zv
aWQgQ0NMYXllclRyZWVIb3N0OjpwYWludExheWVyQ29udGVudHMoY29uc3QgTGF5ZXJMaXN0JiBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBQYWludFR5cGUgcGFpbnRUeXBlKQogewogICAgIGZvciAo
aW50IHN1cmZhY2VJbmRleCA9IHJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpIC0gMTsgc3Vy
ZmFjZUluZGV4ID49IDAgOyAtLXN1cmZhY2VJbmRleCkgewogICAgICAgICBMYXllckNocm9taXVt
KiByZW5kZXJTdXJmYWNlTGF5ZXIgPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0W3N1cmZhY2VJbmRl
eF0uZ2V0KCk7CkBAIC0zOTksNyArNDI4LDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnBhaW50
TGF5ZXJDb250ZW50cyhjb25zdCBMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QKICAg
ICAgICAgQVNTRVJUKHJlbmRlclN1cmZhY2UtPmRyYXdPcGFjaXR5KCkpOwogCiAgICAgICAgIHJl
bmRlclN1cmZhY2VMYXllci0+c2V0TGF5ZXJUcmVlSG9zdCh0aGlzKTsKLSAgICAgICAgcGFpbnRN
YXNrQW5kUmVwbGljYUZvclJlbmRlclN1cmZhY2UocmVuZGVyU3VyZmFjZUxheWVyKTsKKyAgICAg
ICAgcGFpbnRNYXNrQW5kUmVwbGljYUZvclJlbmRlclN1cmZhY2UocmVuZGVyU3VyZmFjZUxheWVy
LCBwYWludFR5cGUpOwogCiAgICAgICAgIGNvbnN0IExheWVyTGlzdCYgbGF5ZXJMaXN0ID0gcmVu
ZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgbGF5ZXJJbmRl
eCA9IDA7IGxheWVySW5kZXggPCBsYXllckxpc3Quc2l6ZSgpOyArK2xheWVySW5kZXgpIHsKQEAg
LTQxMiwxMCArNDQxLDkgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnBhaW50TGF5ZXJDb250ZW50
cyhjb25zdCBMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QKIAogICAgICAgICAgICAg
bGF5ZXItPnNldExheWVyVHJlZUhvc3QodGhpcyk7CiAKLSAgICAgICAgICAgIEFTU0VSVChsYXll
ci0+b3BhY2l0eSgpKTsKICAgICAgICAgICAgIEFTU0VSVCghbGF5ZXItPmJvdW5kcygpLmlzRW1w
dHkoKSk7CiAKLSAgICAgICAgICAgIGxheWVyLT5wYWludENvbnRlbnRzSWZEaXJ0eSgpOworICAg
ICAgICAgICAgcGFpbnRDb250ZW50c0lmRGlydHkobGF5ZXIsIHBhaW50VHlwZSk7CiAgICAgICAg
IH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCmluZGV4IDg2MDVmMGRlY2Mw
YTZmOWY0MmNjZGIyYzBmNGM3NmNlNGU4N2U4ZjEuLjJkZGI5YWRlMmY0YzcxY2ViNWE3NTUwMjM4
MmY0Nzk0YzkyMTA5MDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCkBAIC0yMDIsOCAr
MjAyLDEwIEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRy
PExheWVyQ2hyb21pdW0+ID4gTGF5ZXJMaXN0OwogCi0gICAgdm9pZCBwYWludExheWVyQ29udGVu
dHMoY29uc3QgTGF5ZXJMaXN0Jik7Ci0gICAgdm9pZCBwYWludE1hc2tBbmRSZXBsaWNhRm9yUmVu
ZGVyU3VyZmFjZShMYXllckNocm9taXVtKik7CisgICAgZW51bSBQYWludFR5cGUgeyBQYWludFZp
c2libGUsIFBhaW50SWRsZSB9OworICAgIHN0YXRpYyB2b2lkIHBhaW50Q29udGVudHNJZkRpcnR5
KExheWVyQ2hyb21pdW0qLCBQYWludFR5cGUpOworICAgIHZvaWQgcGFpbnRMYXllckNvbnRlbnRz
KGNvbnN0IExheWVyTGlzdCYsIFBhaW50VHlwZSk7CisgICAgdm9pZCBwYWludE1hc2tBbmRSZXBs
aWNhRm9yUmVuZGVyU3VyZmFjZShMYXllckNocm9taXVtKiwgUGFpbnRUeXBlKTsKIAogICAgIHZv
aWQgdXBkYXRlTGF5ZXJzKExheWVyQ2hyb21pdW0qKTsKICAgICB2b2lkIGNsZWFyUGVuZGluZ1Vw
ZGF0ZSgpOwpAQCAtMjM0LDYgKzIzNiw3IEBAIHByaXZhdGU6CiAKICAgICBmbG9hdCBtX3BhZ2VT
Y2FsZTsKICAgICBmbG9hdCBtX21pblBhZ2VTY2FsZSwgbV9tYXhQYWdlU2NhbGU7CisgICAgYm9v
bCBtX3RyaWdnZXJJZGxlUGFpbnRzOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKaW5kZXggZDZhNzI5YTBkMjNi
MzY2ZTViMzM2ZjU2NjcxMjJkMDQ2NWI5MDQ0Mi4uMGVjYmVhNjkyNDk3NWU1MmJkMTg4MTU1NzQ1
MzMxMGUyZjE0MTFlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q0xheWVyVHJlZUhvc3RUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCkBAIC05NTMsNyArOTUzLDggQEAgcHVibGljOgogICAg
IHN0YXRpYyBQYXNzUmVmUHRyPENvbnRlbnRMYXllckNocm9taXVtV2l0aFVwZGF0ZVRyYWNraW5n
PiBjcmVhdGUoQ0NMYXllckRlbGVnYXRlICpkZWxlZ2F0ZSkgeyByZXR1cm4gYWRvcHRSZWYobmV3
IENvbnRlbnRMYXllckNocm9taXVtV2l0aFVwZGF0ZVRyYWNraW5nKGRlbGVnYXRlKSk7IH0KIAog
ICAgIGludCBwYWludENvbnRlbnRzQ291bnQoKSB7IHJldHVybiBtX3BhaW50Q29udGVudHNDb3Vu
dDsgfQotICAgIHZvaWQgcmVzZXRQYWludENvbnRlbnRzQ291bnQoKSB7IG1fcGFpbnRDb250ZW50
c0NvdW50ID0gMDsgfQorICAgIGludCBpZGxlUGFpbnRDb250ZW50c0NvdW50KCkgeyByZXR1cm4g
bV9pZGxlUGFpbnRDb250ZW50c0NvdW50OyB9CisgICAgdm9pZCByZXNldFBhaW50Q29udGVudHND
b3VudCgpIHsgbV9wYWludENvbnRlbnRzQ291bnQgPSAwOyBtX2lkbGVQYWludENvbnRlbnRzQ291
bnQgPSAwO30KIAogICAgIGludCB1cGRhdGVDb3VudCgpIHsgcmV0dXJuIG1fdXBkYXRlQ291bnQ7
IH0KICAgICB2b2lkIHJlc2V0VXBkYXRlQ291bnQoKSB7IG1fdXBkYXRlQ291bnQgPSAwOyB9CkBA
IC05NjQsNiArOTY1LDEyIEBAIHB1YmxpYzoKICAgICAgICAgbV9wYWludENvbnRlbnRzQ291bnQr
KzsKICAgICB9CiAKKyAgICB2aXJ0dWFsIHZvaWQgaWRsZVBhaW50Q29udGVudHNJZkRpcnR5KCkK
KyAgICB7CisgICAgICAgIENvbnRlbnRMYXllckNocm9taXVtOjppZGxlUGFpbnRDb250ZW50c0lm
RGlydHkoKTsKKyAgICAgICAgbV9pZGxlUGFpbnRDb250ZW50c0NvdW50Kys7CisgICAgfQorCiAg
ICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQsIENDVGV4dHVyZVVwZGF0ZXImIHVwZGF0ZXIpCiAgICAgewogICAgICAgICBD
b250ZW50TGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhjb250ZXh0LCB1
cGRhdGVyKTsKQEAgLTk3NCwxMiArOTgxLDE0IEBAIHByaXZhdGU6CiAgICAgZXhwbGljaXQgQ29u
dGVudExheWVyQ2hyb21pdW1XaXRoVXBkYXRlVHJhY2tpbmcoQ0NMYXllckRlbGVnYXRlICpkZWxl
Z2F0ZSkKICAgICAgICAgOiBDb250ZW50TGF5ZXJDaHJvbWl1bShkZWxlZ2F0ZSkKICAgICAgICAg
LCBtX3BhaW50Q29udGVudHNDb3VudCgwKQorICAgICAgICAsIG1faWRsZVBhaW50Q29udGVudHND
b3VudCgwKQogICAgICAgICAsIG1fdXBkYXRlQ291bnQoMCkKICAgICB7CiAgICAgICAgIHNldEJv
dW5kcyhJbnRTaXplKDEwLCAxMCkpOwogICAgIH0KIAogICAgIGludCBtX3BhaW50Q29udGVudHND
b3VudDsKKyAgICBpbnQgbV9pZGxlUGFpbnRDb250ZW50c0NvdW50OwogICAgIGludCBtX3VwZGF0
ZUNvdW50OwogfTsKIApAQCAtMTAxMCw2ICsxMDE5LDkgQEAgcHVibGljOgogICAgICAgICAvLyBw
YWludENvbnRlbnRzSWZEaXJ0eSgpIHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkIG9uY2UuCiAgICAg
ICAgIEVYUEVDVF9FUSgxLCBtX3VwZGF0ZUNoZWNrTGF5ZXItPnBhaW50Q29udGVudHNDb3VudCgp
KTsKIAorICAgICAgICAvLyBpZGxlUGFpbnRDb250ZW50c0lmRGlydHkoKSBzaG91bGQgaGF2ZSBi
ZWVuIGNhbGxlZCBvbmNlCisgICAgICAgIEVYUEVDVF9FUSgxLCBtX3VwZGF0ZUNoZWNrTGF5ZXIt
PmlkbGVQYWludENvbnRlbnRzQ291bnQoKSk7CisKICAgICAgICAgLy8gdXBkYXRlQ29tcG9zaXRv
clJlc291cmNlcygpIHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkIHRoZSBzYW1lCiAgICAgICAgIC8v
IGFtb3V0IG9mIHRpbWVzIGFzIHBhaW50Q29udGVudHNJZkRpcnR5KCkuCiAgICAgICAgIEVYUEVD
VF9FUShtX3VwZGF0ZUNoZWNrTGF5ZXItPnBhaW50Q29udGVudHNDb3VudCgpLApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0LmNw
cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsZWRMYXllckNocm9taXVtVGVzdC5j
cHAKaW5kZXggNDljZThkZjhkODljZjBlOGMyODg1MmYyZjM3OTIyYmVmODE4YTE1Mi4uOGFiNjNj
ODc2YmI2NWFkMWI1Y2U1NDA1NzdkYTUwMmFiOTkwOGVlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RpbGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCkBAIC05
Nyw2ICs5NywxNiBAQCBwdWJsaWM6CiAgICAgICAgIFRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJlcGFy
ZVRvVXBkYXRlKHJlY3QpOwogICAgIH0KIAorICAgIHZvaWQgcHJlcGFyZVRvVXBkYXRlSWRsZShj
b25zdCBJbnRSZWN0JiByZWN0KQorICAgIHsKKyAgICAgICAgVGlsZWRMYXllckNocm9taXVtOjpw
cmVwYXJlVG9VcGRhdGVJZGxlKHJlY3QpOworICAgIH0KKworICAgIGJvb2wgbmVlZHNJZGxlUGFp
bnQoY29uc3QgSW50UmVjdCYgcmVjdCkKKyAgICB7CisgICAgICAgIHJldHVybiBUaWxlZExheWVy
Q2hyb21pdW06Om5lZWRzSWRsZVBhaW50KHJlY3QpOworICAgIH0KKwogICAgIHZpcnR1YWwgVGV4
dHVyZU1hbmFnZXIqIHRleHR1cmVNYW5hZ2VyKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJlTWFu
YWdlcjsgfQogCiBwcml2YXRlOgpAQCAtMTIyLDYgKzEzMiw3IEBAIFRFU1QoVGlsZWRMYXllckNo
cm9taXVtVGVzdCwgcHVzaERpcnR5VGlsZXMpCiAgICAgQ0NUZXh0dXJlVXBkYXRlciB1cGRhdGVy
KCZ0ZXh0dXJlQWxsb2NhdG9yKTsKIAogICAgIC8vIFRoZSB0aWxlIHNpemUgaXMgMTAweDEwMCwg
c28gdGhpcyBpbnZhbGlkYXRlcyBhbmQgdGhlbiBwYWludHMgdHdvIHRpbGVzLgorICAgIGxheWVy
LT5zZXRCb3VuZHMoSW50U2l6ZSgxMDAsIDIwMCkpOwogICAgIGxheWVyLT5pbnZhbGlkYXRlUmVj
dChJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSk7CiAgICAgbGF5ZXItPnByZXBhcmVUb1VwZGF0ZShJ
bnRSZWN0KDAsIDAsIDEwMCwgMjAwKSk7CiAgICAgbGF5ZXItPnVwZGF0ZUNvbXBvc2l0b3JSZXNv
dXJjZXMoMCwgdXBkYXRlcik7CkBAIC0xNDUsNSArMTU2LDEwNyBAQCBURVNUKFRpbGVkTGF5ZXJD
aHJvbWl1bVRlc3QsIHB1c2hEaXJ0eVRpbGVzKQogICAgIEVYUEVDVF9GQUxTRShsYXllckltcGwt
Pmhhc1RpbGVBdCgwLCAxKSk7CiB9CiAKK1RFU1QoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVz
aElkbGVQYWludFRpbGVzKQoreworICAgIE93blB0cjxUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1h
bmFnZXIgPSBUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAyNCoxMDI0LCAyKjEwMjQqMTAyNCwg
MTAyNCk7CisgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRS
ZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKKyAg
ICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKKyAgICBSZWZQdHI8RmFrZUND
VGlsZWRMYXllckltcGw+IGxheWVySW1wbCA9IGFkb3B0UmVmKG5ldyBGYWtlQ0NUaWxlZExheWVy
SW1wbCgwKSk7CisKKyAgICBGYWtlVGV4dHVyZUFsbG9jYXRvciB0ZXh0dXJlQWxsb2NhdG9yOwor
ICAgIENDVGV4dHVyZVVwZGF0ZXIgdXBkYXRlcigmdGV4dHVyZUFsbG9jYXRvcik7CisKKyAgICAv
LyBUaGUgdGlsZSBzaXplIGlzIDEwMHgxMDAuIFNldHVwIDV4NSB0aWxlcyB3aXRoIG9uZSB2aXNp
YmxlIHRpbGUgaW4gdGhlIGNlbnRlci4KKyAgICBJbnRTaXplIGNvbnRlbnRCb3VuZHMoNTAwLCA1
MDApOworICAgIEludFJlY3QgY29udGVudFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgY29udGVudEJv
dW5kcyk7CisgICAgSW50UmVjdCB2aXNpYmxlUmVjdCgyMDAsIDIwMCwgMTAwLCAxMDApOworCisg
ICAgLy8gVGhpcyBpbnZhbGlkYXRlcyAyNSB0aWxlcyBhbmQgdGhlbiBwYWludHMgb25lIHZpc2li
bGUgdGlsZS4KKyAgICBsYXllci0+c2V0Qm91bmRzKGNvbnRlbnRCb3VuZHMpOworICAgIGxheWVy
LT5zZXRWaXNpYmxlTGF5ZXJSZWN0KHZpc2libGVSZWN0KTsKKyAgICBsYXllci0+aW52YWxpZGF0
ZVJlY3QoY29udGVudFJlY3QpOworICAgIGxheWVyLT5wcmVwYXJlVG9VcGRhdGUodmlzaWJsZVJl
Y3QpOworCisgICAgLy8gV2Ugc2hvdWxkIG5lZWQgaWRsZS1wYWludGluZyBmb3IgM3gzIHRpbGVz
IGluIHRoZSBjZW50ZXIuCisgICAgRVhQRUNUX1RSVUUobGF5ZXItPm5lZWRzSWRsZVBhaW50KHZp
c2libGVSZWN0KSk7CisKKyAgICBsYXllci0+dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcygwLCB1
cGRhdGVyKTsKKyAgICBsYXllci0+cHVzaFByb3BlcnRpZXNUbyhsYXllckltcGwuZ2V0KCkpOwor
CisgICAgLy8gV2Ugc2hvdWxkIGhhdmUgb25lIHRpbGUgb24gdGhlIGltcGwgc2lkZS4KKyAgICBF
WFBFQ1RfVFJVRShsYXllckltcGwtPmhhc1RpbGVBdCgyLCAyKSk7CisKKyAgICB0ZXh0dXJlTWFu
YWdlci0+dW5wcm90ZWN0QWxsVGV4dHVyZXMoKTsKKworICAgIC8vIEZvciB0aGUgbmV4dCBmb3Vy
IHVwZGF0ZXMsIHdlIHNob3VsZCBkZXRlY3Qgd2Ugc3RpbGwgbmVlZCBpZGxlIHBhaW50aW5nLgor
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7CisgICAgICAgIGxheWVyLT5wcmVwYXJl
VG9VcGRhdGUodmlzaWJsZVJlY3QpOworICAgICAgICBFWFBFQ1RfVFJVRShsYXllci0+bmVlZHNJ
ZGxlUGFpbnQodmlzaWJsZVJlY3QpKTsKKyAgICAgICAgbGF5ZXItPnByZXBhcmVUb1VwZGF0ZUlk
bGUodmlzaWJsZVJlY3QpOworICAgICAgICBsYXllci0+dXBkYXRlQ29tcG9zaXRvclJlc291cmNl
cygwLCB1cGRhdGVyKTsKKyAgICAgICAgbGF5ZXItPnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXJJbXBs
LmdldCgpKTsKKyAgICAgICAgdGV4dHVyZU1hbmFnZXItPnVucHJvdGVjdEFsbFRleHR1cmVzKCk7
CisgICAgfQorCisgICAgLy8gQWZ0ZXIgZm91ciBwYXNzZXMgb2YgaWRsZSBwYWludGluZywgd2Ug
c2hvdWxkIGJlIGZpbmlzaGVkIHBhaW50aW5nCisgICAgRVhQRUNUX0ZBTFNFKGxheWVyLT5uZWVk
c0lkbGVQYWludCh2aXNpYmxlUmVjdCkpOworCisgICAgLy8gV2Ugc2hvdWxkIGhhdmUgb25lIHRp
bGUgc3Vycm91bmRpbmcgdGhlIHZpc2libGUgdGlsZSBvbiBhbGwgc2lkZXMsIGJ1dCBubyBvdGhl
ciB0aWxlcy4KKyAgICBJbnRSZWN0IGlkbGVQYWludFRpbGVzKDEsIDEsIDMsIDMpOworICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgNTsgaSsrKSB7CisgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwg
NTsgaisrKSB7CisgICAgICAgICAgICBpZiAoaWRsZVBhaW50VGlsZXMuY29udGFpbnMoaSwgaikp
CisgICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUobGF5ZXJJbXBsLT5oYXNUaWxlQXQoaSwgaikp
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIEVYUEVDVF9GQUxTRShsYXllcklt
cGwtPmhhc1RpbGVBdChpLCBqKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKKworVEVTVChUaWxl
ZExheWVyQ2hyb21pdW1UZXN0LCBpZGxlUGFpbnRPdXRPZk1lbW9yeSkKK3sKKyAgICAvLyBUaGUg
dGlsZSBzaXplIGlzIDEwMHgxMDAuIFNldHVwIDV4NSB0aWxlcyB3aXRoIG9uZSAxeDEgdmlzaWJs
ZSB0aWxlIGluIHRoZSBjZW50ZXIuCisgICAgSW50U2l6ZSBjb250ZW50Qm91bmRzKDMwMCwgMzAw
KTsKKyAgICBJbnRSZWN0IGNvbnRlbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIGNvbnRlbnRCb3Vu
ZHMpOworICAgIEludFJlY3QgdmlzaWJsZVJlY3QoMTAwLCAxMDAsIDEwMCwgMTAwKTsKKworICAg
IC8vIFdlIGhhdmUgZW5vdWdoIG1lbW9yeSBmb3Igb25seSB0aGUgdmlzaWJsZSByZWN0LCBzbyB3
ZSB3aWxsIHJ1biBvdXQgb2YgbWVtb3J5IGluIGZpcnN0IGlkbGUgcGFpbnQuCisgICAgaW50IG1l
bW9yeUxpbWl0ID0gNCAqIDEwMCAqIDEwMDsgLy8gMiB0aWxlcywgNCBieXRlcyBwZXIgcGl4ZWwu
CisKKyAgICBPd25QdHI8VGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gVGV4dHVyZU1h
bmFnZXI6OmNyZWF0ZShtZW1vcnlMaW1pdCwgbWVtb3J5TGltaXQgLyAyLCAxMDI0KTsKKyAgICBS
ZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRp
bGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOworICAgIERlYnVnU2NvcGVk
U2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOworICAgIFJlZlB0cjxGYWtlQ0NUaWxlZExheWVySW1w
bD4gbGF5ZXJJbXBsID0gYWRvcHRSZWYobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDApKTsKKwor
ICAgIEZha2VUZXh0dXJlQWxsb2NhdG9yIHRleHR1cmVBbGxvY2F0b3I7CisgICAgQ0NUZXh0dXJl
VXBkYXRlciB1cGRhdGVyKCZ0ZXh0dXJlQWxsb2NhdG9yKTsKKworICAgIC8vIFRoaXMgaW52YWxp
ZGF0ZXMgOSB0aWxlcyBhbmQgdGhlbiBwYWludHMgb25lIHZpc2libGUgdGlsZS4KKyAgICBsYXll
ci0+c2V0Qm91bmRzKGNvbnRlbnRCb3VuZHMpOworICAgIGxheWVyLT5zZXRWaXNpYmxlTGF5ZXJS
ZWN0KHZpc2libGVSZWN0KTsKKyAgICBsYXllci0+aW52YWxpZGF0ZVJlY3QoY29udGVudFJlY3Qp
OworICAgIGxheWVyLT5wcmVwYXJlVG9VcGRhdGUodmlzaWJsZVJlY3QpOworCisgICAgLy8gV2Ug
c2hvdWxkIG5lZWQgaWRsZS1wYWludGluZyBmb3IgM3gzIHRpbGVzIHN1cm91bmRpbmcgdmlzaWJs
ZSB0aWxlLgorICAgIEVYUEVDVF9UUlVFKGxheWVyLT5uZWVkc0lkbGVQYWludCh2aXNpYmxlUmVj
dCkpOworCisgICAgbGF5ZXItPnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoMCwgdXBkYXRlcik7
CisgICAgbGF5ZXItPnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXJJbXBsLmdldCgpKTsKKworICAgIC8v
IFdlIHNob3VsZCBoYXZlIG9uZSB0aWxlIG9uIHRoZSBpbXBsIHNpZGUuCisgICAgRVhQRUNUX1RS
VUUobGF5ZXJJbXBsLT5oYXNUaWxlQXQoMSwgMSkpOworCisgICAgdGV4dHVyZU1hbmFnZXItPnVu
cHJvdGVjdEFsbFRleHR1cmVzKCk7CisgICAgbGF5ZXItPnByZXBhcmVUb1VwZGF0ZSh2aXNpYmxl
UmVjdCk7CisgICAgbGF5ZXItPnByZXBhcmVUb1VwZGF0ZUlkbGUodmlzaWJsZVJlY3QpOworCisg
ICAgLy8gV2Ugc2hvdWxkbid0IHNpZ25hbCB3ZSBuZWVkIGFub3RoZXIgaWRsZSBwYWludCBhZnRl
ciB3ZSBydW4gb3V0IG9mIG1lbW9yeS4KKyAgICBFWFBFQ1RfRkFMU0UobGF5ZXItPm5lZWRzSWRs
ZVBhaW50KHZpc2libGVSZWN0KSk7CisKKyAgICBsYXllci0+dXBkYXRlQ29tcG9zaXRvclJlc291
cmNlcygwLCB1cGRhdGVyKTsKKyAgICBsYXllci0+cHVzaFByb3BlcnRpZXNUbyhsYXllckltcGwu
Z2V0KCkpOworfQorCiB9IC8vIG5hbWVzcGFjZQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119545</attachid>
            <date>2011-12-15 19:48:20 -0800</date>
            <delta_ts>2011-12-16 11:12:24 -0800</delta_ts>
            <desc>Rebasing</desc>
            <filename>bug-72686-20111215194819.patch</filename>
            <type>text/plain</type>
            <size>32472</size>
            <attacher name="Eric Penner">epenner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyOTg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWNkMTI3NjgyZTA1Yjkz
MDFiZTljY2I5YjJkNmZhMjJmMDllNDg0Yy4uYzA2ZmNkMjA3OWZlOTI2YjhmNzJjODA0MDNmMDgw
MGE2MGU3NmFjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDExLTEyLTE1ICBFcmlj
IFBlbm5lciAgPGVwZW5uZXJAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIE5lZWQg
dG8gcHJlcGFpbnQgdGlsZXMgaW4gVGlsZWRMYXllckNocm9taXVtCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjY4NgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExh
eWVyQ2hyb21pdW06OmlkbGVQYWludENvbnRlbnRzSWZEaXJ0eSk6IGFkZGVkIGlkbGUgcGFpbnQg
ZnVuY3Rpb24KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5
ZXJDaHJvbWl1bS5oOiBkaXR0bworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyQ2hyb21pdW0uaDogZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06
OmlkbGVQYWludENvbnRlbnRzSWZEaXJ0eSk6IGRpdHRvCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dHVyZU1hbmFnZXI6OnByb3RlY3RUZXh0dXJlKTogcmVtb3ZlZCBhc3NlcnQgZm9yIHByb3RlY3Rp
bmcgYSB0ZXh0dXJlIHR3aWNlCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
VGlsZWRMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJv
bWl1bTo6VGlsZWRMYXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJD
aHJvbWl1bTo6Y2xlYW51cFJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVy
Q2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMpOiByZWZhY3RvcmluZyB0byB1c2Ug
dGlsZSBpbmRpY2VzCisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnByZXBh
cmVUb1VwZGF0ZVRpbGVzKTogcmVmYWN0b3JlZCBjb21tb24gY29kZSBhbmQgbWFkZSBpZGxlL3Zp
c2libGUgdmVyc2lvbnMKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJl
cGFyZVRvVXBkYXRlKTogZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1
bTo6cHJlcGFyZVRvVXBkYXRlSWRsZSk6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpUaWxlZExh
eWVyQ2hyb21pdW06Om5lZWRzSWRsZVBhaW50KTogCisgICAgICAgIChXZWJDb3JlOjpUaWxlZExh
eWVyQ2hyb21pdW06OmlkbGVQYWludFJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyVHJlZUhvc3Q6OkNDTGF5ZXJUcmVlSG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyVHJlZUhvc3Q6OmNvbXBvc2l0ZUFuZFJlYWRiYWNrKTogc2V0IGZsYWcgdG8gYXZvaWQgaWRs
ZSBwYWludCBkdXJyaW5nIGNvbXBvc2l0ZSBhbmQgcmVhZGJhY2sKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJUcmVlSG9zdDo6dXBkYXRlTGF5ZXJzKTogYWRkZWQgaWRsZSBmbGFnIHBhcmFtZXRl
cgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpwYWludENvbnRlbnRzSWZEaXJ0
eSk6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnBhaW50TWFza0Fu
ZFJlcGxpY2FGb3JSZW5kZXJTdXJmYWNlKTogZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJUcmVlSG9zdDo6cGFpbnRMYXllckNvbnRlbnRzKTogY2hvb3NlcyBpZGxlIG9yIHZpc2libGUg
cGFpbnQKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3QuaDoKKwogMjAxMS0xMi0xNSAgS2VudGFybyBIYXJhICA8aGFyYWtlbkBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgUkVHUkVTU0lPTihyMTAyNjYzKTogZ2VuZXJhdGUtYmluZGluZ3MucGwg
cnVucyBldmVyeSB0aW1lCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDRlYzEyZmM4NmNl
MmY2MDI1MDk5OGJiNjAyMDEyNGVlNDA3ZjM2Y2QuLjY5MjY2OGQwNDQyODAwZDY3MTcxMzY5ZDc3
MzcxMTEyMTgxYjU1M2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEg
QEAKKzIwMTEtMTItMTUgIEVyaWMgUGVubmVyICA8ZXBlbm5lckBnb29nbGUuY29tPgorCisgICAg
ICAgIFtjaHJvbWl1bV0gTmVlZCB0byBwcmVwYWludCB0aWxlcyBpbiBUaWxlZExheWVyQ2hyb21p
dW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcyNjg2
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB0ZXN0
cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcDoKKyAgICAgICAgKFdURjo6Q29udGVudExheWVyQ2hy
b21pdW1XaXRoVXBkYXRlVHJhY2tpbmc6OmlkbGVQYWludENvbnRlbnRzQ291bnQpOgorICAgICAg
ICAoV1RGOjpDb250ZW50TGF5ZXJDaHJvbWl1bVdpdGhVcGRhdGVUcmFja2luZzo6cmVzZXRQYWlu
dENvbnRlbnRzQ291bnQpOgorICAgICAgICAoV1RGOjpDb250ZW50TGF5ZXJDaHJvbWl1bVdpdGhV
cGRhdGVUcmFja2luZzo6aWRsZVBhaW50Q29udGVudHNJZkRpcnR5KToKKyAgICAgICAgKFdURjo6
Q29udGVudExheWVyQ2hyb21pdW1XaXRoVXBkYXRlVHJhY2tpbmc6OkNvbnRlbnRMYXllckNocm9t
aXVtV2l0aFVwZGF0ZVRyYWNraW5nKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVz
dE9wYWNpdHlDaGFuZ2U6OmFmdGVyVGVzdCk6CisgICAgICAgICogdGVzdHMvVGlsZWRMYXllckNo
cm9taXVtVGVzdC5jcHA6CisgICAgICAgIChXVEY6OkZha2VUaWxlZExheWVyQ2hyb21pdW06OnBy
ZXBhcmVUb1VwZGF0ZUlkbGUpOgorICAgICAgICAoV1RGOjpGYWtlVGlsZWRMYXllckNocm9taXVt
OjpuZWVkc0lkbGVQYWludCk6CisgICAgICAgIChXVEY6OlRFU1QpOgorCiAyMDExLTEyLTE1ICBO
YXQgRHVjYSAgPG5kdWNhQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIEFkZCBm
b3JVc2VPbkFub3RoZXJUaHJlYWQgdG8gV2ViR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Nv
bnRlbnRMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcAppbmRleCAyYTI0NjZkOTEyOWFlYzM2
NDA5MzIyOWNiOTM1YWY4MmQ1MDcyNGI2Li5jMjg0ZWVhMzFhNDAwZTNlOTI1MzI5NWI1ZjI2MDM0
NDlmOWQ4MGRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCkBAIC0xMDks
NiArMTA5LDIwIEBAIHZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHNJZkRp
cnR5KCkKICAgICBtX25lZWRzRGlzcGxheSA9IGZhbHNlOwogfQogCit2b2lkIENvbnRlbnRMYXll
ckNocm9taXVtOjppZGxlUGFpbnRDb250ZW50c0lmRGlydHkoKQoreworICAgIGlmICghZHJhd3ND
b250ZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IEludFJlY3QmIGxheWVyUmVj
dCA9IHZpc2libGVMYXllclJlY3QoKTsKKyAgICBpZiAobGF5ZXJSZWN0LmlzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgcHJlcGFyZVRvVXBkYXRlSWRsZShsYXllclJlY3QpOworICAg
IGlmIChuZWVkc0lkbGVQYWludChsYXllclJlY3QpKQorICAgICAgICBzZXROZWVkc0NvbW1pdCgp
OworfQorCiBib29sIENvbnRlbnRMYXllckNocm9taXVtOjpkcmF3c0NvbnRlbnQoKSBjb25zdAog
ewogICAgIHJldHVybiBtX2RlbGVnYXRlICYmIG1fZGVsZWdhdGUtPmRyYXdzQ29udGVudCgpICYm
IFRpbGVkTGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVy
Q2hyb21pdW0uaAppbmRleCBiODM0ZTY3NmJkNjM0NDVhYTQ1M2IzNjVlZWUyODAyNDBmMzgwOWMx
Li4wYzU3NGI1ZGZkYzBhNTcxYjgxMWJlMDM5NzY0YWM3NWIxYzJlM2VlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJv
bWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Nv
bnRlbnRMYXllckNocm9taXVtLmgKQEAgLTUwLDYgKzUwLDcgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgfkNvbnRlbnRMYXllckNocm9taXVtKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250
ZW50c0lmRGlydHkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgaWRsZVBhaW50Q29udGVudHNJZkRpcnR5
KCk7CiAKIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBDb250ZW50TGF5ZXJDaHJvbWl1bShDQ0xh
eWVyRGVsZWdhdGUqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAppbmRleCA5YzdhNGY4ZjQ3OTI4OWRhMDU5
MTM3Yjc5YmIxNWQ2YmQxN2Q1MWVlLi4xNzM0MzRlOThlYjkyMzA1NWFiNzg2NjAzNDNkNzQ2MDkw
Nzk5ZTFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCkBAIC0xNjEsNiArMTYxLDcgQEAgcHVibGljOgog
ICAgIC8vIFRoZXNlIG1ldGhvZHMgdHlwaWNhbGx5IG5lZWQgdG8gYmUgb3ZlcndyaXR0ZW4gYnkg
ZGVyaXZlZCBjbGFzc2VzLgogICAgIHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzSWZEaXJ0eSgp
IHsgfQorICAgIHZpcnR1YWwgdm9pZCBpZGxlUGFpbnRDb250ZW50c0lmRGlydHkoKSB7IH0KICAg
ICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQz
RCosIENDVGV4dHVyZVVwZGF0ZXImKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0SXNNYXNrKGJv
b2wpIHsgfQogICAgIHZpcnR1YWwgdm9pZCB1bnJlc2VydmVDb250ZW50c1RleHR1cmUoKSB7IH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Rl
eHR1cmVNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1RleHR1cmVNYW5hZ2VyLmNwcAppbmRleCAxMTg3NTM3ZmI5MmFjMGJlYzc4OTM4MjVlM2Fi
NmUzZTI1Zjk3MDM2Li4zMDIwN2JlMzgyZWI0NDQzYWJhZDQzMTNiYzE1NDdkZDA2NWIwYWM4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0
dXJlTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vVGV4dHVyZU1hbmFnZXIuY3BwCkBAIC0xNDEsNyArMTQxLDYgQEAgYm9vbCBUZXh0dXJl
TWFuYWdlcjo6aXNQcm90ZWN0ZWQoVGV4dHVyZVRva2VuIHRva2VuKQogdm9pZCBUZXh0dXJlTWFu
YWdlcjo6cHJvdGVjdFRleHR1cmUoVGV4dHVyZVRva2VuIHRva2VuKQogewogICAgIEFTU0VSVCho
YXNUZXh0dXJlKHRva2VuKSk7Ci0gICAgQVNTRVJUKCFtX3RleHR1cmVzLmdldCh0b2tlbikuaXNQ
cm90ZWN0ZWQpOwogICAgIFRleHR1cmVJbmZvIGluZm8gPSBtX3RleHR1cmVzLnRha2UodG9rZW4p
OwogICAgIGluZm8uaXNQcm90ZWN0ZWQgPSB0cnVlOwogICAgIG1fdGV4dHVyZXMuYWRkKHRva2Vu
LCBpbmZvKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCmluZGV4IDA3YmFiMjAyOGYx
MzQ5ZmVjMjA1YTczNDBjMzNmZDY5ZTU3OWUxY2IuLjk3Yzk1MjUzZDA2OWNlMWEwNGYzMGI4YmQ5
ZTFmMjE5OTY3NjE4NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcApAQCAtNzIs
NiArNzIsNyBAQCBUaWxlZExheWVyQ2hyb21pdW06OlRpbGVkTGF5ZXJDaHJvbWl1bShDQ0xheWVy
RGVsZWdhdGUqIGRlbGVnYXRlKQogICAgIDogTGF5ZXJDaHJvbWl1bShkZWxlZ2F0ZSkKICAgICAs
IG1fdGV4dHVyZUZvcm1hdChHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNKQogICAgICwg
bV9za2lwc0RyYXcoZmFsc2UpCisgICAgLCBtX3NraXBzSWRsZVBhaW50KGZhbHNlKQogICAgICwg
bV9zYW1wbGVkVGV4ZWxGb3JtYXQoTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9y
bWF0SW52YWxpZCkKICAgICAsIG1fdGlsaW5nT3B0aW9uKEF1dG9UaWxlKQogewpAQCAtOTIsNyAr
OTMsNyBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6Y2xlYW51cFJlc291cmNlcygpCiAKICAg
ICBtX3RpbGVyLmNsZWFyKCk7CiAgICAgbV9wYWludFJlY3QgPSBJbnRSZWN0KCk7Ci0gICAgbV9y
ZXF1ZXN0ZWRVcGRhdGVSZWN0ID0gSW50UmVjdCgpOworICAgIG1fcmVxdWVzdGVkVXBkYXRlVGls
ZXNSZWN0ID0gSW50UmVjdCgpOwogfQogCiB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6dXBkYXRl
VGlsZVNpemVBbmRUaWxpbmdPcHRpb24oKQpAQCAtMTc3LDExICsxNzgsMTMgQEAgdm9pZCBUaWxl
ZExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0
M0QqLCBDQ1RleHR1cmUKICAgICBBU1NFUlQobV9za2lwc0RyYXcgfHwgbV90aWxlcik7CiAKICAg
ICAvLyBQYWludGluZyBjb3VsZCBjYXVzZSBjb21wb3NpdGluZyB0byBnZXQgdHVybmVkIG9mZiwg
d2hpY2ggbWF5IGNhdXNlIHRoZSB0aWxlciB0byBiZWNvbWUgaW52YWxpZGF0ZWQgbWlkLXVwZGF0
ZS4KLSAgICBpZiAobV9za2lwc0RyYXcgfHwgbV9yZXF1ZXN0ZWRVcGRhdGVSZWN0LmlzRW1wdHko
KSB8fCAhbV90aWxlciB8fCAhbV90aWxlci0+bnVtVGlsZXMoKSkKKyAgICBpZiAobV9za2lwc0Ry
YXcgfHwgbV9yZXF1ZXN0ZWRVcGRhdGVUaWxlc1JlY3QuaXNFbXB0eSgpIHx8ICFtX3RpbGVyIHx8
ICFtX3RpbGVyLT5udW1UaWxlcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpbnQgbGVmdCwg
dG9wLCByaWdodCwgYm90dG9tOwotICAgIG1fdGlsZXItPmNvbnRlbnRSZWN0VG9UaWxlSW5kaWNl
cyhtX3JlcXVlc3RlZFVwZGF0ZVJlY3QsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CisgICAg
aW50IGxlZnQgPSBtX3JlcXVlc3RlZFVwZGF0ZVRpbGVzUmVjdC54KCk7CisgICAgaW50IHRvcCA9
IG1fcmVxdWVzdGVkVXBkYXRlVGlsZXNSZWN0LnkoKTsKKyAgICBpbnQgcmlnaHQgPSBtX3JlcXVl
c3RlZFVwZGF0ZVRpbGVzUmVjdC5tYXhYKCkgLSAxOworICAgIGludCBib3R0b20gPSBtX3JlcXVl
c3RlZFVwZGF0ZVRpbGVzUmVjdC5tYXhZKCkgLSAxOwogICAgIGZvciAoaW50IGogPSB0b3A7IGog
PD0gYm90dG9tOyArK2opIHsKICAgICAgICAgZm9yIChpbnQgaSA9IGxlZnQ7IGkgPD0gcmlnaHQ7
ICsraSkgewogICAgICAgICAgICAgVXBkYXRhYmxlVGlsZSogdGlsZSA9IHRpbGVBdChpLCBqKTsK
QEAgLTMzOSwzOCArMzQyLDE3IEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpwcm90ZWN0VGls
ZVRleHR1cmVzKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQogICAgIH0KIH0KIAotdm9pZCBU
aWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50
UmVjdCkKK3ZvaWQgVGlsZWRMYXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGVUaWxlcyhib29s
IGlkbGUsIGludCBsZWZ0LCBpbnQgdG9wLCBpbnQgcmlnaHQsIGludCBib3R0b20pCiB7Ci0gICAg
aWYgKCFtX3RpbGVyKQotICAgICAgICBjcmVhdGVUaWxlcihpc05vbkNvbXBvc2l0ZWRDb250ZW50
KCkgPyBDQ0xheWVyVGlsaW5nRGF0YTo6Tm9Cb3JkZXJUZXhlbHMgOiBDQ0xheWVyVGlsaW5nRGF0
YTo6SGFzQm9yZGVyVGV4ZWxzKTsKLQotICAgIEFTU0VSVChtX3RpbGVyKTsKLQotICAgIG1fc2tp
cHNEcmF3ID0gZmFsc2U7Ci0KICAgICAvLyBSZXNldCBtX3VwZGF0ZVJlY3QgZm9yIGFsbCB0aWxl
cy4KICAgICBmb3IgKENDTGF5ZXJUaWxpbmdEYXRhOjpUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBp
dGVyID0gbV90aWxlci0+dGlsZXMoKS5iZWdpbigpOyBpdGVyICE9IG1fdGlsZXItPnRpbGVzKCku
ZW5kKCk7ICsraXRlcikgewogICAgICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0gc3RhdGljX2Nh
c3Q8VXBkYXRhYmxlVGlsZSo+KGl0ZXItPnNlY29uZC5nZXQoKSk7CiAgICAgICAgIHRpbGUtPm1f
dXBkYXRlUmVjdCA9IEludFJlY3QoKTsKICAgICB9CiAKLSAgICBpZiAoY29udGVudFJlY3QuaXNF
bXB0eSgpKSB7Ci0gICAgICAgIG1fcmVxdWVzdGVkVXBkYXRlUmVjdCA9IEludFJlY3QoKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fdGlsZXItPmdyb3dMYXllclRvQ29udGFpbihj
b250ZW50UmVjdCk7Ci0KLSAgICBpZiAoIW1fdGlsZXItPm51bVRpbGVzKCkpIHsKLSAgICAgICAg
bV9yZXF1ZXN0ZWRVcGRhdGVSZWN0ID0gSW50UmVjdCgpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCiAgICAgLy8gQ3JlYXRlIHRpbGVzIGFzIG5lZWRlZCwgZXhwYW5kaW5nIGEgZGlydHkgcmVj
dCB0byBjb250YWluIGFsbAogICAgIC8vIHRoZSBkaXJ0eSByZWdpb25zIGN1cnJlbnRseSBiZWlu
ZyBkcmF3bi4KICAgICBJbnRSZWN0IGRpcnR5TGF5ZXJSZWN0OwotICAgIGludCBsZWZ0LCB0b3As
IHJpZ2h0LCBib3R0b207Ci0gICAgbV90aWxlci0+Y29udGVudFJlY3RUb1RpbGVJbmRpY2VzKGNv
bnRlbnRSZWN0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOwogICAgIGZvciAoaW50IGogPSB0
b3A7IGogPD0gYm90dG9tOyArK2opIHsKICAgICAgICAgZm9yIChpbnQgaSA9IGxlZnQ7IGkgPD0g
cmlnaHQ7ICsraSkgewogICAgICAgICAgICAgVXBkYXRhYmxlVGlsZSogdGlsZSA9IHRpbGVBdChp
LCBqKTsKQEAgLTM4MSw4ICszNjMsMTEgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnByZXBh
cmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKICAgICAgICAgICAgICAgICB0
aWxlLT5tX2RpcnR5TGF5ZXJSZWN0ID0gbV90aWxlci0+dGlsZUxheWVyUmVjdCh0aWxlKTsKIAog
ICAgICAgICAgICAgaWYgKCF0aWxlLT5tYW5hZ2VkVGV4dHVyZSgpLT5yZXNlcnZlKG1fdGlsZXIt
PnRpbGVTaXplKCksIG1fdGV4dHVyZUZvcm1hdCkpIHsKLSAgICAgICAgICAgICAgICBtX3NraXBz
RHJhdyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgY2xlYW51cFJlc291cmNlcygpOworICAgICAg
ICAgICAgICAgIG1fc2tpcHNJZGxlUGFpbnQgPSB0cnVlOworICAgICAgICAgICAgICAgIGlmICgh
aWRsZSkgeworICAgICAgICAgICAgICAgICAgICBtX3NraXBzRHJhdyA9IHRydWU7CisgICAgICAg
ICAgICAgICAgICAgIGNsZWFudXBSZXNvdXJjZXMoKTsKKyAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCkBAIC0zOTAsMjIgKzM3NSwyMiBA
QCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3Qm
IGNvbnRlbnRSZWN0KQogICAgICAgICB9CiAgICAgfQogCi0gICAgLy8gRHVlIHRvIGJvcmRlcnMs
IHdoZW4gdGhlIHBhaW50IHJlY3QgaXMgZXh0ZW5kZWQgdG8gdGlsZSBib3VuZGFyaWVzLCBpdAot
ICAgIC8vIG1heSBlbmQgdXAgb3ZlcmxhcHBpbmcgbW9yZSB0aWxlcyB0aGFuIHRoZSBvcmlnaW5h
bCBjb250ZW50IHJlY3QuIFJlY29yZAotICAgIC8vIHRoYXQgb3JpZ2luYWwgcmVjdCBzbyB3ZSBk
b24ndCB1cGxvYWQgbW9yZSB0aWxlcyB0aGFuIG5lY2Vzc2FyeS4KLSAgICBtX3JlcXVlc3RlZFVw
ZGF0ZVJlY3QgPSBjb250ZW50UmVjdDsKLQogICAgIG1fcGFpbnRSZWN0ID0gbV90aWxlci0+bGF5
ZXJSZWN0VG9Db250ZW50UmVjdChkaXJ0eUxheWVyUmVjdCk7CiAgICAgaWYgKGRpcnR5TGF5ZXJS
ZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgLy8gRHVlIHRvIGJvcmRlcnMs
IHdoZW4gdGhlIHBhaW50IHJlY3QgaXMgZXh0ZW5kZWQgdG8gdGlsZSBib3VuZGFyaWVzLCBpdAor
ICAgIC8vIG1heSBlbmQgdXAgb3ZlcmxhcHBpbmcgbW9yZSB0aWxlcyB0aGFuIHRoZSBvcmlnaW5h
bCBjb250ZW50IHJlY3QuIFJlY29yZAorICAgIC8vIHRoZSBvcmlnaW5hbCB0aWxlcyBzbyB3ZSBk
b24ndCB1cGxvYWQgbW9yZSB0aWxlcyB0aGFuIG5lY2Vzc2FyeS4KKyAgICBpZiAoIW1fcGFpbnRS
ZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgbV9yZXF1ZXN0ZWRVcGRhdGVUaWxlc1JlY3QgPSBJbnRS
ZWN0KGxlZnQsIHRvcCwgcmlnaHQgLSBsZWZ0ICsgMSwgYm90dG9tIC0gdG9wICsgMSk7CisKICAg
ICAvLyBDYWxsaW5nIHByZXBhcmVUb1VwZGF0ZSgpIGNhbGxzIGludG8gV2ViS2l0IHRvIHBhaW50
LCB3aGljaCBtYXkgaGF2ZSB0aGUgc2lkZQogICAgIC8vIGVmZmVjdCBvZiBkaXNhYmxpbmcgY29t
cG9zaXRpbmcsIHdoaWNoIGNhdXNlcyBvdXIgcmVmZXJlbmNlIHRvIHRoZSB0ZXh0dXJlIHVwZGF0
ZXIgdG8gYmUgZGVsZXRlZC4KICAgICAvLyBIb3dldmVyLCB3ZSBjYW4ndCBmcmVlIHRoZSBtZW1v
cnkgYmFja2luZyB0aGUgR3JhcGhpY3NDb250ZXh0IHVudGlsIHRoZSBwYWludCBmaW5pc2hlcywK
ICAgICAvLyBzbyB3ZSBncmFiIGEgbG9jYWwgcmVmZXJlbmNlIGhlcmUgdG8gaG9sZCB0aGUgdXBk
YXRlciBhbGl2ZSB1bnRpbCB0aGUgcGFpbnQgY29tcGxldGVzLgogICAgIFJlZlB0cjxMYXllclRl
eHR1cmVVcGRhdGVyPiBwcm90ZWN0b3IodGV4dHVyZVVwZGF0ZXIoKSk7CiAgICAgdGV4dHVyZVVw
ZGF0ZXIoKS0+cHJlcGFyZVRvVXBkYXRlKG1fcGFpbnRSZWN0LCBtX3RpbGVyLT50aWxlU2l6ZSgp
LCBtX3RpbGVyLT5oYXNCb3JkZXJUZXhlbHMoKSwgY29udGVudHNTY2FsZSgpKTsKLSAgICBtX3Rp
bGVyLT5jb250ZW50UmVjdFRvVGlsZUluZGljZXMobV9yZXF1ZXN0ZWRVcGRhdGVSZWN0LCBsZWZ0
LCB0b3AsIHJpZ2h0LCBib3R0b20pOwogICAgIGZvciAoaW50IGogPSB0b3A7IGogPD0gYm90dG9t
OyArK2opIHsKICAgICAgICAgZm9yIChpbnQgaSA9IGxlZnQ7IGkgPD0gcmlnaHQ7ICsraSkgewog
ICAgICAgICAgICAgVXBkYXRhYmxlVGlsZSogdGlsZSA9IHRpbGVBdChpLCBqKTsKQEAgLTQzNyw1
ICs0MjIsMTE3IEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGUoY29u
c3QgSW50UmVjdCYgY29udGVudFJlY3QpCiAgICAgfQogfQogCisKK3ZvaWQgVGlsZWRMYXllckNo
cm9taXVtOjpwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCit7Cisg
ICAgaWYgKCFtX3RpbGVyKQorICAgICAgICBjcmVhdGVUaWxlcihpc05vbkNvbXBvc2l0ZWRDb250
ZW50KCkgPyBDQ0xheWVyVGlsaW5nRGF0YTo6Tm9Cb3JkZXJUZXhlbHMgOiBDQ0xheWVyVGlsaW5n
RGF0YTo6SGFzQm9yZGVyVGV4ZWxzKTsKKworICAgIEFTU0VSVChtX3RpbGVyKTsKKworICAgIG1f
c2tpcHNEcmF3ID0gZmFsc2U7CisgICAgbV9za2lwc0lkbGVQYWludCA9IGZhbHNlOworICAgIG1f
cmVxdWVzdGVkVXBkYXRlVGlsZXNSZWN0ID0gSW50UmVjdCgpOworICAgIG1fcGFpbnRSZWN0ID0g
SW50UmVjdCgpOworCisgICAgbV90aWxlci0+Z3Jvd0xheWVyVG9Db250YWluKEludFJlY3QoSW50
UG9pbnQ6Onplcm8oKSwgY29udGVudEJvdW5kcygpKSk7CisKKyAgICBpZiAoY29udGVudFJlY3Qu
aXNFbXB0eSgpIHx8ICFtX3RpbGVyLT5udW1UaWxlcygpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBpbnQgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tOworICAgIG1fdGlsZXItPmNvbnRlbnRSZWN0
VG9UaWxlSW5kaWNlcyhjb250ZW50UmVjdCwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKKwor
ICAgIHByZXBhcmVUb1VwZGF0ZVRpbGVzKGZhbHNlLCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20p
OworfQorCit2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlSWRsZShjb25z
dCBJbnRSZWN0JiBjb250ZW50UmVjdCkKK3sKKyAgICAvLyBBYm9ydCBpZiB3ZSBoYXZlIGFscmVh
ZHkgcHJlcGFyZWQgYSBwYWludCBvciBydW4gb3V0IG9mIG1lbW9yeS4KKyAgICBpZiAobV9za2lw
c0lkbGVQYWludCB8fCAhbV9wYWludFJlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBBU1NFUlQobV90aWxlcik7CisKKyAgICBtX3RpbGVyLT5ncm93TGF5ZXJUb0NvbnRhaW4o
SW50UmVjdChJbnRQb2ludDo6emVybygpLCBjb250ZW50Qm91bmRzKCkpKTsKKworICAgIGlmICgh
bV90aWxlci0+bnVtVGlsZXMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gUHJvdGVjdCBh
bnkgdGV4dHVyZXMgaW4gdGhlIHByZS1wYWludCBhcmVhIHNvIHdlIGRvbid0IGVuZCB1cCBqdXN0
CisgICAgLy8gcmVjbGFpbWluZyB0aGVtIGJlbG93LgorICAgIEludFJlY3QgaWRsZVBhaW50Q29u
dGVudFJlY3QgPSBpZGxlUGFpbnRSZWN0KGNvbnRlbnRSZWN0KTsKKyAgICBwcm90ZWN0VGlsZVRl
eHR1cmVzKGlkbGVQYWludENvbnRlbnRSZWN0KTsKKworICAgIC8vIEV4cGFuZCBvdXR3YXJkcyB1
bnRpbCB3ZSBmaW5kIGEgZGlydHkgcm93IG9yIGNvbHVtbiB0byB1cGRhdGUuCisgICAgaW50IGxl
ZnQsIHRvcCwgcmlnaHQsIGJvdHRvbTsKKyAgICBtX3RpbGVyLT5jb250ZW50UmVjdFRvVGlsZUlu
ZGljZXMoY29udGVudFJlY3QsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CisgICAgaW50IHBy
ZXBhaW50TGVmdCwgcHJlcGFpbnRUb3AsIHByZXBhaW50UmlnaHQsIHByZXBhaW50Qm90dG9tOwor
ICAgIG1fdGlsZXItPmNvbnRlbnRSZWN0VG9UaWxlSW5kaWNlcyhpZGxlUGFpbnRDb250ZW50UmVj
dCwgcHJlcGFpbnRMZWZ0LCBwcmVwYWludFRvcCwgcHJlcGFpbnRSaWdodCwgcHJlcGFpbnRCb3R0
b20pOworICAgIHdoaWxlICghbV9za2lwc0lkbGVQYWludCAmJiAobGVmdCA+IHByZXBhaW50TGVm
dCB8fCB0b3AgPiBwcmVwYWludFRvcCB8fCByaWdodCA8IHByZXBhaW50UmlnaHQgfHwgYm90dG9t
IDwgcHJlcGFpbnRCb3R0b20pKSB7CisgICAgICAgIGlmIChib3R0b20gPCBwcmVwYWludEJvdHRv
bSkgeworICAgICAgICAgICAgKytib3R0b207CisgICAgICAgICAgICBwcmVwYXJlVG9VcGRhdGVU
aWxlcyh0cnVlLCBsZWZ0LCBib3R0b20sIHJpZ2h0LCBib3R0b20pOworICAgICAgICAgICAgaWYg
KCFtX3BhaW50UmVjdC5pc0VtcHR5KCkgfHwgbV9za2lwc0lkbGVQYWludCkKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAodG9wID4gcHJlcGFpbnRUb3ApIHsK
KyAgICAgICAgICAgIC0tdG9wOworICAgICAgICAgICAgcHJlcGFyZVRvVXBkYXRlVGlsZXModHJ1
ZSwgbGVmdCwgdG9wLCByaWdodCwgdG9wKTsKKyAgICAgICAgICAgIGlmICghbV9wYWludFJlY3Qu
aXNFbXB0eSgpIHx8IG1fc2tpcHNJZGxlUGFpbnQpCisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKGxlZnQgPiBwcmVwYWludExlZnQpIHsKKyAgICAgICAgICAg
IC0tbGVmdDsKKyAgICAgICAgICAgIHByZXBhcmVUb1VwZGF0ZVRpbGVzKHRydWUsIGxlZnQsIHRv
cCwgbGVmdCwgYm90dG9tKTsKKyAgICAgICAgICAgIGlmICghbV9wYWludFJlY3QuaXNFbXB0eSgp
IHx8IG1fc2tpcHNJZGxlUGFpbnQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKHJpZ2h0IDwgcHJlcGFpbnRSaWdodCkgeworICAgICAgICAgICAgKytyaWdo
dDsKKyAgICAgICAgICAgIHByZXBhcmVUb1VwZGF0ZVRpbGVzKHRydWUsIHJpZ2h0LCB0b3AsIHJp
Z2h0LCBib3R0b20pOworICAgICAgICAgICAgaWYgKCFtX3BhaW50UmVjdC5pc0VtcHR5KCkgfHwg
bV9za2lwc0lkbGVQYWludCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
IH0KK30KKworYm9vbCBUaWxlZExheWVyQ2hyb21pdW06Om5lZWRzSWRsZVBhaW50KGNvbnN0IElu
dFJlY3QmIGNvbnRlbnRSZWN0KQoreworICAgIGlmIChtX3NraXBzSWRsZVBhaW50KQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBBU1NFUlQobV90aWxlcik7CisKKyAgICBJbnRSZWN0IGlk
bGVQYWludENvbnRlbnRSZWN0ID0gaWRsZVBhaW50UmVjdChjb250ZW50UmVjdCk7CisKKyAgICBp
bnQgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tOworICAgIG1fdGlsZXItPmNvbnRlbnRSZWN0VG9U
aWxlSW5kaWNlcyhpZGxlUGFpbnRDb250ZW50UmVjdCwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9t
KTsKKyAgICBmb3IgKGludCBqID0gdG9wOyBqIDw9IGJvdHRvbTsgKytqKSB7CisgICAgICAgIGZv
ciAoaW50IGkgPSBsZWZ0OyBpIDw9IHJpZ2h0OyArK2kpIHsKKyAgICAgICAgICAgIGlmIChtX3Jl
cXVlc3RlZFVwZGF0ZVRpbGVzUmVjdC5jb250YWlucyhJbnRQb2ludChpLCBqKSkpCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0gdGls
ZUF0KGksIGopOworICAgICAgICAgICAgaWYgKCF0aWxlIHx8ICF0aWxlLT5tYW5hZ2VkVGV4dHVy
ZSgpLT5pc1ZhbGlkKG1fdGlsZXItPnRpbGVTaXplKCksIG1fdGV4dHVyZUZvcm1hdCkgfHwgdGls
ZS0+aXNEaXJ0eSgpKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9Cisg
ICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworSW50UmVjdCBUaWxlZExheWVyQ2hyb21pdW06
OmlkbGVQYWludFJlY3QoY29uc3QgSW50UmVjdCYgdmlzaWJsZUNvbnRlbnRSZWN0KQoreworICAg
IEFTU0VSVChtX3RpbGVyKTsKKyAgICBJbnRSZWN0IHByZXBhaW50UmVjdCA9IHZpc2libGVDb250
ZW50UmVjdDsKKyAgICAvLyBGSVhNRTogVGhpcyBjYW4gYmUgbWFkZSBhIGxvdCBsYXJnZXIgaWYg
d2UgY2FuOgorICAgIC8vIC0gcmVzZXJ2ZSBtZW1vcnkgYXQgYSBsb3dlciBwcmlvcml0eSB0aGFu
IGZvciB2aXNpYmxlIGNvbnRlbnQKKyAgICAvLyAtIG9ubHkgcmVzZXJ2ZSBpZGxlIHBhaW50IHRp
bGVzIHVwIHRvIGEgbWVtb3J5IHJlY2xhaW0gdGhyZXNob2xkIGFuZAorICAgIC8vIC0gaW5zdXJl
IHdlIHBsYXkgbmljZWx5IHdpdGggb3RoZXIgbGF5ZXJzCisgICAgcHJlcGFpbnRSZWN0LmluZmxh
dGVYKG1fdGlsZXItPnRpbGVTaXplKCkud2lkdGgoKSk7CisgICAgcHJlcGFpbnRSZWN0LmluZmxh
dGVZKG1fdGlsZXItPnRpbGVTaXplKCkuaGVpZ2h0KCkpOworICAgIHByZXBhaW50UmVjdC5pbnRl
cnNlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBjb250ZW50Qm91bmRzKCkpKTsKKyAgICBy
ZXR1cm4gcHJlcGFpbnRSZWN0OworfQorCiB9CiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaAppbmRleCA3N2E5ZWM5MTQxZmJm
Yjg1ZmNjNWNjYzJiNTkwNWRhNDA1OWQwYmFhLi40YjBjYzU1NTFjYmEwMjY4Yzg0ZWUxZjk0ZDUx
ZjVjZDVmZjYwY2U1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaApAQCAtNzUsOSArNzUs
MTYgQEAgcHJvdGVjdGVkOgogCiAgICAgLy8gU2V0IGludmFsaWRhdGlvbnMgdG8gYmUgcG90ZW50
aWFsbHkgcmVwYWludGVkIGR1cmluZyB1cGRhdGUoKS4KICAgICB2b2lkIGludmFsaWRhdGVSZWN0
KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KTsKKwogICAgIC8vIFByZXBhcmUgZGF0YSBuZWVk
ZWQgdG8gdXBkYXRlIHRleHR1cmVzIHRoYXQgaW50ZXJzZWN0IHdpdGggY29udGVudFJlY3QuCiAg
ICAgdm9pZCBwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpOwogCisg
ICAgLy8gU2FtZSBhcyBhYm92ZSwgYnV0IHRoaXMgd2lsbCB0cnkgdG8gcGFpbnQgYWRkaXRpb25h
bCBzdXJyb3VuZGluZyBjb250ZW50IGlmIGlkbGUuCisgICAgdm9pZCBwcmVwYXJlVG9VcGRhdGVJ
ZGxlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KTsKKworICAgIC8vIEFmdGVyIHByZXBhcmlu
ZyBhbiB1cGRhdGUsIHJldHVybnMgdHJ1ZSBpZiBtb3JlIHByZS1wYWludGluZyBpcyBuZWVkZWQu
CisgICAgYm9vbCBuZWVkc0lkbGVQYWludChjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCk7CisK
ICAgICB2aXJ0dWFsIHZvaWQgcHJvdGVjdFZpc2libGVUaWxlVGV4dHVyZXMoKTsKIAogICAgIHZp
cnR1YWwgVGV4dHVyZU1hbmFnZXIqIHRleHR1cmVNYW5hZ2VyKCkgY29uc3Q7CkBAIC05MCwxNyAr
OTcsMjIgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNyZWF0ZVRpbGVySWZOZWVkZWQoKTsKICAgICB2
b2lkIHNldFRpbGluZ09wdGlvbihUaWxpbmdPcHRpb24pOwogCisgICAgdm9pZCBwcmVwYXJlVG9V
cGRhdGVUaWxlcyhib29sIGlkbGUsIGludCBsZWZ0LCBpbnQgdG9wLCBpbnQgcmlnaHQsIGludCBi
b3R0b20pOworICAgIEludFJlY3QgaWRsZVBhaW50UmVjdChjb25zdCBJbnRSZWN0JiB2aXNpYmxl
Q29udGVudFJlY3QpOworCiAgICAgVXBkYXRhYmxlVGlsZSogdGlsZUF0KGludCwgaW50KSBjb25z
dDsKICAgICBVcGRhdGFibGVUaWxlKiBjcmVhdGVUaWxlKGludCwgaW50KTsKIAogICAgIC8vIFRl
bXBvcmFyeSBzdGF0ZSBoZWxkIGJldHdlZW4gcHJlcGFyZVRvVXBkYXRlKCkgYW5kIHVwZGF0ZUNv
bXBvc2l0b3JSZXNvdXJjZXMoKS4KLSAgICBJbnRSZWN0IG1fcmVxdWVzdGVkVXBkYXRlUmVjdDsK
KyAgICBJbnRSZWN0IG1fcmVxdWVzdGVkVXBkYXRlVGlsZXNSZWN0OworCiAgICAgLy8gU3RhdGUg
aGVsZCBiZXR3ZWVuIHByZXBhcmVUb1VwZGF0ZSgpIGFuZCBwdXNoUHJvcGVydGllc1RvKCkuIFRo
aXMgcmVwcmVzZW50cyB0aGUgYXJlYQogICAgIC8vIG9mIHRoZSBsYXllciB0aGF0IGlzIGFjdHVh
bGx5IHJlLXBhaW50ZWQgYnkgV2ViS2l0LgogICAgIEludFJlY3QgbV9wYWludFJlY3Q7CiAKICAg
ICBHQzNEZW51bSBtX3RleHR1cmVGb3JtYXQ7CiAgICAgYm9vbCBtX3NraXBzRHJhdzsKKyAgICBi
b29sIG1fc2tpcHNJZGxlUGFpbnQ7CiAgICAgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRl
eGVsRm9ybWF0IG1fc2FtcGxlZFRleGVsRm9ybWF0OwogCiAgICAgVGlsaW5nT3B0aW9uIG1fdGls
aW5nT3B0aW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggNDVmZjY2ZmQ3
YzAzZWY5MTFiNDQ1NDhjMmU2YjgyYzZiOWFmODg0ZS4uNjQ0ZjQyOWMyNWM2NzVhMTBkZjJlYWRm
MDUxYTYwMmE3NWU1YjY0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCkBAIC02
Nyw2ICs2Nyw3IEBAIENDTGF5ZXJUcmVlSG9zdDo6Q0NMYXllclRyZWVIb3N0KENDTGF5ZXJUcmVl
SG9zdENsaWVudCogY2xpZW50LCBjb25zdCBDQ1NldHRpbmdzCiAgICAgLCBtX3BhZ2VTY2FsZSgx
KQogICAgICwgbV9taW5QYWdlU2NhbGUoMSkKICAgICAsIG1fbWF4UGFnZVNjYWxlKDEpCisgICAg
LCBtX3RyaWdnZXJJZGxlUGFpbnRzKHRydWUpCiB7CiAgICAgQVNTRVJUKENDUHJveHk6OmlzTWFp
blRocmVhZCgpKTsKICAgICBudW1MYXllclRyZWVJbnN0YW5jZXMrKzsKQEAgLTE4OCw3ICsxODks
OSBAQCBHcmFwaGljc0NvbnRleHQzRCogQ0NMYXllclRyZWVIb3N0Ojpjb250ZXh0KCkKIAogYm9v
bCBDQ0xheWVyVHJlZUhvc3Q6OmNvbXBvc2l0ZUFuZFJlYWRiYWNrKHZvaWQgKnBpeGVscywgY29u
c3QgSW50UmVjdCYgcmVjdCkKIHsKKyAgICBtX3RyaWdnZXJJZGxlUGFpbnRzID0gZmFsc2U7CiAg
ICAgcmV0dXJuIG1fcHJveHktPmNvbXBvc2l0ZUFuZFJlYWRiYWNrKHBpeGVscywgcmVjdCk7Cisg
ICAgbV90cmlnZ2VySWRsZVBhaW50cyA9IHRydWU7CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0
OjpmaW5pc2hBbGxSZW5kZXJpbmcoKQpAQCAtMzYxLDEwICszNjQsMzYgQEAgdm9pZCBDQ0xheWVy
VHJlZUhvc3Q6OnVwZGF0ZUxheWVycyhMYXllckNocm9taXVtKiByb290TGF5ZXIpCiAgICAgICAg
IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmls
aXR5KHJvb3RMYXllciwgcm9vdExheWVyLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgs
IG1fdXBkYXRlTGlzdCwgcm9vdFJlbmRlclN1cmZhY2UtPmxheWVyTGlzdCgpLCBsYXllclJlbmRl
cmVyQ2FwYWJpbGl0aWVzKCkubWF4VGV4dHVyZVNpemUpOwogICAgIH0KIAotICAgIHBhaW50TGF5
ZXJDb250ZW50cyhtX3VwZGF0ZUxpc3QpOworICAgIHBhaW50TGF5ZXJDb250ZW50cyhtX3VwZGF0
ZUxpc3QsIFBhaW50VmlzaWJsZSk7CisgICAgaWYgKCFtX3RyaWdnZXJJZGxlUGFpbnRzKQorICAg
ICAgICByZXR1cm47CisKKyAgICBzaXplX3QgcHJlZmVycmVkTGltaXRCeXRlcyA9IFRleHR1cmVN
YW5hZ2VyOjpyZWNsYWltTGltaXRCeXRlcyhtX3ZpZXdwb3J0U2l6ZSk7CisgICAgc2l6ZV90IG1h
eExpbWl0Qnl0ZXMgPSBUZXh0dXJlTWFuYWdlcjo6aGlnaExpbWl0Qnl0ZXMobV92aWV3cG9ydFNp
emUpOworICAgIGNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKS0+cmVkdWNlTWVtb3J5VG9MaW1pdChw
cmVmZXJyZWRMaW1pdEJ5dGVzKTsKKyAgICBpZiAoY29udGVudHNUZXh0dXJlTWFuYWdlcigpLT5j
dXJyZW50TWVtb3J5VXNlQnl0ZXMoKSA+PSBwcmVmZXJyZWRMaW1pdEJ5dGVzKQorICAgICAgICBy
ZXR1cm47CisKKyAgICAvLyBJZGxlIHBhaW50aW5nIHNob3VsZCBmYWlsIHdoZW4gd2UgaGl0IHRo
ZSBwcmVmZXJyZWQgbWVtb3J5IGxpbWl0LAorICAgIC8vIG90aGVyd2lzZSBpdCB3aWxsIGFsd2F5
cyBwdXNoIHVzIHRvd2FyZHMgdGhlIG1heGltdW0gbGltaXQuCisgICAgbV9jb250ZW50c1RleHR1
cmVNYW5hZ2VyLT5zZXRNYXhNZW1vcnlMaW1pdEJ5dGVzKHByZWZlcnJlZExpbWl0Qnl0ZXMpOwor
ICAgIC8vIFRoZSBzZWNvbmQgKGlkbGUpIHBhaW50IHdpbGwgYmUgYSBuby1vcCBpbiBsYXllcnMg
d2hlcmUgcGFpbnRpbmcgYWxyZWFkeSBvY2N1cmVkIGFib3ZlLgorICAgIHBhaW50TGF5ZXJDb250
ZW50cyhtX3VwZGF0ZUxpc3QsIFBhaW50SWRsZSk7CisgICAgbV9jb250ZW50c1RleHR1cmVNYW5h
Z2VyLT5zZXRNYXhNZW1vcnlMaW1pdEJ5dGVzKG1heExpbWl0Qnl0ZXMpOworfQorCisvLyBzdGF0
aWMKK3ZvaWQgQ0NMYXllclRyZWVIb3N0OjpwYWludENvbnRlbnRzSWZEaXJ0eShMYXllckNocm9t
aXVtKiBsYXllciwgUGFpbnRUeXBlIHBhaW50VHlwZSkKK3sKKyAgICBBU1NFUlQobGF5ZXIpOwor
ICAgIEFTU0VSVChQYWludFZpc2libGUgPT0gcGFpbnRUeXBlIHx8IFBhaW50SWRsZSA9PSBwYWlu
dFR5cGUpOworICAgIGlmIChQYWludFZpc2libGUgPT0gcGFpbnRUeXBlKQorICAgICAgICBsYXll
ci0+cGFpbnRDb250ZW50c0lmRGlydHkoKTsKKyAgICBlbHNlCisgICAgICAgIGxheWVyLT5pZGxl
UGFpbnRDb250ZW50c0lmRGlydHkoKTsKIH0KIAotdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnBhaW50
TWFza0FuZFJlcGxpY2FGb3JSZW5kZXJTdXJmYWNlKExheWVyQ2hyb21pdW0qIHJlbmRlclN1cmZh
Y2VMYXllcikKK3ZvaWQgQ0NMYXllclRyZWVIb3N0OjpwYWludE1hc2tBbmRSZXBsaWNhRm9yUmVu
ZGVyU3VyZmFjZShMYXllckNocm9taXVtKiByZW5kZXJTdXJmYWNlTGF5ZXIsIFBhaW50VHlwZSBw
YWludFR5cGUpCiB7CiAgICAgLy8gTm90ZTogTWFza3MgYW5kIHJlcGxpY2FzIG9ubHkgZXhpc3Qg
Zm9yIGxheWVycyB0aGF0IG93biByZW5kZXIgc3VyZmFjZXMuIElmIHdlIHJlYWNoIHRoaXMgcG9p
bnQKICAgICAvLyBpbiBjb2RlLCB3ZSBhbHJlYWR5IGtub3cgdGhhdCBhdCBsZWFzdCBzb21ldGhp
bmcgd2lsbCBiZSBkcmF3biBpbnRvIHRoaXMgcmVuZGVyIHN1cmZhY2UsIHNvIHRoZQpAQCAtMzcz
LDI0ICs0MDIsMjQgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnBhaW50TWFza0FuZFJlcGxpY2FG
b3JSZW5kZXJTdXJmYWNlKExheWVyQ2hyb21pdW0qIHJlbmRlclMKICAgICBpZiAocmVuZGVyU3Vy
ZmFjZUxheWVyLT5tYXNrTGF5ZXIoKSkgewogICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXItPm1h
c2tMYXllcigpLT5zZXRMYXllclRyZWVIb3N0KHRoaXMpOwogICAgICAgICByZW5kZXJTdXJmYWNl
TGF5ZXItPm1hc2tMYXllcigpLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KEludFJlY3QoSW50UG9pbnQo
KSwgcmVuZGVyU3VyZmFjZUxheWVyLT5jb250ZW50Qm91bmRzKCkpKTsKLSAgICAgICAgcmVuZGVy
U3VyZmFjZUxheWVyLT5tYXNrTGF5ZXIoKS0+cGFpbnRDb250ZW50c0lmRGlydHkoKTsKKyAgICAg
ICAgcGFpbnRDb250ZW50c0lmRGlydHkocmVuZGVyU3VyZmFjZUxheWVyLT5tYXNrTGF5ZXIoKSwg
cGFpbnRUeXBlKTsKICAgICB9CiAKICAgICBMYXllckNocm9taXVtKiByZXBsaWNhTGF5ZXIgPSBy
ZW5kZXJTdXJmYWNlTGF5ZXItPnJlcGxpY2FMYXllcigpOwogICAgIGlmIChyZXBsaWNhTGF5ZXIp
IHsKIAogICAgICAgICByZXBsaWNhTGF5ZXItPnNldExheWVyVHJlZUhvc3QodGhpcyk7Ci0gICAg
ICAgIHJlcGxpY2FMYXllci0+cGFpbnRDb250ZW50c0lmRGlydHkoKTsKKyAgICAgICAgcGFpbnRD
b250ZW50c0lmRGlydHkocmVwbGljYUxheWVyLCBwYWludFR5cGUpOwogCiAgICAgICAgIGlmIChy
ZXBsaWNhTGF5ZXItPm1hc2tMYXllcigpKSB7CiAgICAgICAgICAgICByZXBsaWNhTGF5ZXItPm1h
c2tMYXllcigpLT5zZXRMYXllclRyZWVIb3N0KHRoaXMpOwogICAgICAgICAgICAgcmVwbGljYUxh
eWVyLT5tYXNrTGF5ZXIoKS0+c2V0VmlzaWJsZUxheWVyUmVjdChJbnRSZWN0KEludFBvaW50KCks
IHJlcGxpY2FMYXllci0+bWFza0xheWVyKCktPmNvbnRlbnRCb3VuZHMoKSkpOwotICAgICAgICAg
ICAgcmVwbGljYUxheWVyLT5tYXNrTGF5ZXIoKS0+cGFpbnRDb250ZW50c0lmRGlydHkoKTsKKyAg
ICAgICAgICAgIHBhaW50Q29udGVudHNJZkRpcnR5KHJlcGxpY2FMYXllci0+bWFza0xheWVyKCks
IHBhaW50VHlwZSk7CiAgICAgICAgIH0KICAgICB9CiB9CiAKLXZvaWQgQ0NMYXllclRyZWVIb3N0
OjpwYWludExheWVyQ29udGVudHMoY29uc3QgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0KQordm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnBhaW50TGF5ZXJDb250ZW50cyhjb25zdCBMYXll
ckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIFBhaW50VHlwZSBwYWludFR5cGUpCiB7CiAg
ICAgZm9yIChpbnQgc3VyZmFjZUluZGV4ID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCkg
LSAxOyBzdXJmYWNlSW5kZXggPj0gMCA7IC0tc3VyZmFjZUluZGV4KSB7CiAgICAgICAgIExheWVy
Q2hyb21pdW0qIHJlbmRlclN1cmZhY2VMYXllciA9IHJlbmRlclN1cmZhY2VMYXllckxpc3Rbc3Vy
ZmFjZUluZGV4XS5nZXQoKTsKQEAgLTM5OSw3ICs0MjgsNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9z
dDo6cGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVy
TGlzdAogICAgICAgICBBU1NFUlQocmVuZGVyU3VyZmFjZS0+ZHJhd09wYWNpdHkoKSk7CiAKICAg
ICAgICAgcmVuZGVyU3VyZmFjZUxheWVyLT5zZXRMYXllclRyZWVIb3N0KHRoaXMpOwotICAgICAg
ICBwYWludE1hc2tBbmRSZXBsaWNhRm9yUmVuZGVyU3VyZmFjZShyZW5kZXJTdXJmYWNlTGF5ZXIp
OworICAgICAgICBwYWludE1hc2tBbmRSZXBsaWNhRm9yUmVuZGVyU3VyZmFjZShyZW5kZXJTdXJm
YWNlTGF5ZXIsIHBhaW50VHlwZSk7CiAKICAgICAgICAgY29uc3QgTGF5ZXJMaXN0JiBsYXllckxp
c3QgPSByZW5kZXJTdXJmYWNlLT5sYXllckxpc3QoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBs
YXllckluZGV4ID0gMDsgbGF5ZXJJbmRleCA8IGxheWVyTGlzdC5zaXplKCk7ICsrbGF5ZXJJbmRl
eCkgewpAQCAtNDEyLDEwICs0NDEsOSBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6cGFpbnRMYXll
ckNvbnRlbnRzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdAogCiAgICAg
ICAgICAgICBsYXllci0+c2V0TGF5ZXJUcmVlSG9zdCh0aGlzKTsKIAotICAgICAgICAgICAgQVNT
RVJUKGxheWVyLT5vcGFjaXR5KCkpOwogICAgICAgICAgICAgQVNTRVJUKCFsYXllci0+Ym91bmRz
KCkuaXNFbXB0eSgpKTsKIAotICAgICAgICAgICAgbGF5ZXItPnBhaW50Q29udGVudHNJZkRpcnR5
KCk7CisgICAgICAgICAgICBwYWludENvbnRlbnRzSWZEaXJ0eShsYXllciwgcGFpbnRUeXBlKTsK
ICAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKaW5kZXggODYw
NWYwZGVjYzBhNmY5ZjQyY2NkYjJjMGY0Yzc2Y2U0ZTg3ZThmMS4uMmRkYjlhZGUyZjRjNzFjZWI1
YTc1NTAyMzgyZjQ3OTRjOTIxMDkwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKQEAg
LTIwMiw4ICsyMDIsMTAgQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICB0eXBlZGVmIFZlY3Rv
cjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBMYXllckxpc3Q7CiAKLSAgICB2b2lkIHBhaW50TGF5
ZXJDb250ZW50cyhjb25zdCBMYXllckxpc3QmKTsKLSAgICB2b2lkIHBhaW50TWFza0FuZFJlcGxp
Y2FGb3JSZW5kZXJTdXJmYWNlKExheWVyQ2hyb21pdW0qKTsKKyAgICBlbnVtIFBhaW50VHlwZSB7
IFBhaW50VmlzaWJsZSwgUGFpbnRJZGxlIH07CisgICAgc3RhdGljIHZvaWQgcGFpbnRDb250ZW50
c0lmRGlydHkoTGF5ZXJDaHJvbWl1bSosIFBhaW50VHlwZSk7CisgICAgdm9pZCBwYWludExheWVy
Q29udGVudHMoY29uc3QgTGF5ZXJMaXN0JiwgUGFpbnRUeXBlKTsKKyAgICB2b2lkIHBhaW50TWFz
a0FuZFJlcGxpY2FGb3JSZW5kZXJTdXJmYWNlKExheWVyQ2hyb21pdW0qLCBQYWludFR5cGUpOwog
CiAgICAgdm9pZCB1cGRhdGVMYXllcnMoTGF5ZXJDaHJvbWl1bSopOwogICAgIHZvaWQgY2xlYXJQ
ZW5kaW5nVXBkYXRlKCk7CkBAIC0yMzQsNiArMjM2LDcgQEAgcHJpdmF0ZToKIAogICAgIGZsb2F0
IG1fcGFnZVNjYWxlOwogICAgIGZsb2F0IG1fbWluUGFnZVNjYWxlLCBtX21heFBhZ2VTY2FsZTsK
KyAgICBib29sIG1fdHJpZ2dlcklkbGVQYWludHM7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcAppbmRleCBmZDI1
NjM2YTJiMTcwZDdlYjZhOTc5NzRhNTQ1NGVkM2E5MzBiNTAxLi5hM2MxYmEwYmEzNTUxNWViZDdm
NGM1YThlNmZiMTEzYTViNWM4ZWM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKQEAgLTk1Myw3ICs5NTMsOCBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q29udGVudExheWVyQ2hyb21pdW1XaXRoVXBkYXRl
VHJhY2tpbmc+IGNyZWF0ZShDQ0xheWVyRGVsZWdhdGUgKmRlbGVnYXRlKSB7IHJldHVybiBhZG9w
dFJlZihuZXcgQ29udGVudExheWVyQ2hyb21pdW1XaXRoVXBkYXRlVHJhY2tpbmcoZGVsZWdhdGUp
KTsgfQogCiAgICAgaW50IHBhaW50Q29udGVudHNDb3VudCgpIHsgcmV0dXJuIG1fcGFpbnRDb250
ZW50c0NvdW50OyB9Ci0gICAgdm9pZCByZXNldFBhaW50Q29udGVudHNDb3VudCgpIHsgbV9wYWlu
dENvbnRlbnRzQ291bnQgPSAwOyB9CisgICAgaW50IGlkbGVQYWludENvbnRlbnRzQ291bnQoKSB7
IHJldHVybiBtX2lkbGVQYWludENvbnRlbnRzQ291bnQ7IH0KKyAgICB2b2lkIHJlc2V0UGFpbnRD
b250ZW50c0NvdW50KCkgeyBtX3BhaW50Q29udGVudHNDb3VudCA9IDA7IG1faWRsZVBhaW50Q29u
dGVudHNDb3VudCA9IDA7fQogCiAgICAgaW50IHVwZGF0ZUNvdW50KCkgeyByZXR1cm4gbV91cGRh
dGVDb3VudDsgfQogICAgIHZvaWQgcmVzZXRVcGRhdGVDb3VudCgpIHsgbV91cGRhdGVDb3VudCA9
IDA7IH0KQEAgLTk2NCw2ICs5NjUsMTIgQEAgcHVibGljOgogICAgICAgICBtX3BhaW50Q29udGVu
dHNDb3VudCsrOwogICAgIH0KIAorICAgIHZpcnR1YWwgdm9pZCBpZGxlUGFpbnRDb250ZW50c0lm
RGlydHkoKQorICAgIHsKKyAgICAgICAgQ29udGVudExheWVyQ2hyb21pdW06OmlkbGVQYWludENv
bnRlbnRzSWZEaXJ0eSgpOworICAgICAgICBtX2lkbGVQYWludENvbnRlbnRzQ291bnQrKzsKKyAg
ICB9CisKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGlj
c0NvbnRleHQzRCogY29udGV4dCwgQ0NUZXh0dXJlVXBkYXRlciYgdXBkYXRlcikKICAgICB7CiAg
ICAgICAgIENvbnRlbnRMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGNv
bnRleHQsIHVwZGF0ZXIpOwpAQCAtOTc0LDEyICs5ODEsMTQgQEAgcHJpdmF0ZToKICAgICBleHBs
aWNpdCBDb250ZW50TGF5ZXJDaHJvbWl1bVdpdGhVcGRhdGVUcmFja2luZyhDQ0xheWVyRGVsZWdh
dGUgKmRlbGVnYXRlKQogICAgICAgICA6IENvbnRlbnRMYXllckNocm9taXVtKGRlbGVnYXRlKQog
ICAgICAgICAsIG1fcGFpbnRDb250ZW50c0NvdW50KDApCisgICAgICAgICwgbV9pZGxlUGFpbnRD
b250ZW50c0NvdW50KDApCiAgICAgICAgICwgbV91cGRhdGVDb3VudCgwKQogICAgIHsKICAgICAg
ICAgc2V0Qm91bmRzKEludFNpemUoMTAsIDEwKSk7CiAgICAgfQogCiAgICAgaW50IG1fcGFpbnRD
b250ZW50c0NvdW50OworICAgIGludCBtX2lkbGVQYWludENvbnRlbnRzQ291bnQ7CiAgICAgaW50
IG1fdXBkYXRlQ291bnQ7CiB9OwogCkBAIC0xMDEwLDYgKzEwMTksOSBAQCBwdWJsaWM6CiAgICAg
ICAgIC8vIHBhaW50Q29udGVudHNJZkRpcnR5KCkgc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQgb25j
ZS4KICAgICAgICAgRVhQRUNUX0VRKDEsIG1fdXBkYXRlQ2hlY2tMYXllci0+cGFpbnRDb250ZW50
c0NvdW50KCkpOwogCisgICAgICAgIC8vIGlkbGVQYWludENvbnRlbnRzSWZEaXJ0eSgpIHNob3Vs
ZCBoYXZlIGJlZW4gY2FsbGVkIG9uY2UKKyAgICAgICAgRVhQRUNUX0VRKDEsIG1fdXBkYXRlQ2hl
Y2tMYXllci0+aWRsZVBhaW50Q29udGVudHNDb3VudCgpKTsKKwogICAgICAgICAvLyB1cGRhdGVD
b21wb3NpdG9yUmVzb3VyY2VzKCkgc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQgdGhlIHNhbWUKICAg
ICAgICAgLy8gYW1vdXQgb2YgdGltZXMgYXMgcGFpbnRDb250ZW50c0lmRGlydHkoKS4KICAgICAg
ICAgRVhQRUNUX0VRKG1fdXBkYXRlQ2hlY2tMYXllci0+cGFpbnRDb250ZW50c0NvdW50KCksCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RpbGVkTGF5ZXJDaHJvbWl1
bVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UaWxlZExheWVyQ2hyb21p
dW1UZXN0LmNwcAppbmRleCA0OWNlOGRmOGQ4OWNmMGU4YzI4ODUyZjJmMzc5MjJiZWY4MThhMTUy
Li44YWI2M2M4NzZiYjY1YWQxYjVjZTU0MDU3N2RhNTAyYWI5OTA4ZWUzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RpbGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsZWRMYXllckNocm9taXVtVGVzdC5j
cHAKQEAgLTk3LDYgKzk3LDE2IEBAIHB1YmxpYzoKICAgICAgICAgVGlsZWRMYXllckNocm9taXVt
OjpwcmVwYXJlVG9VcGRhdGUocmVjdCk7CiAgICAgfQogCisgICAgdm9pZCBwcmVwYXJlVG9VcGRh
dGVJZGxlKGNvbnN0IEludFJlY3QmIHJlY3QpCisgICAgeworICAgICAgICBUaWxlZExheWVyQ2hy
b21pdW06OnByZXBhcmVUb1VwZGF0ZUlkbGUocmVjdCk7CisgICAgfQorCisgICAgYm9vbCBuZWVk
c0lkbGVQYWludChjb25zdCBJbnRSZWN0JiByZWN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIFRp
bGVkTGF5ZXJDaHJvbWl1bTo6bmVlZHNJZGxlUGFpbnQocmVjdCk7CisgICAgfQorCiAgICAgdmly
dHVhbCBUZXh0dXJlTWFuYWdlciogdGV4dHVyZU1hbmFnZXIoKSBjb25zdCB7IHJldHVybiBtX3Rl
eHR1cmVNYW5hZ2VyOyB9CiAKIHByaXZhdGU6CkBAIC0xMjIsNiArMTMyLDcgQEAgVEVTVChUaWxl
ZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoRGlydHlUaWxlcykKICAgICBDQ1RleHR1cmVVcGRhdGVy
IHVwZGF0ZXIoJnRleHR1cmVBbGxvY2F0b3IpOwogCiAgICAgLy8gVGhlIHRpbGUgc2l6ZSBpcyAx
MDB4MTAwLCBzbyB0aGlzIGludmFsaWRhdGVzIGFuZCB0aGVuIHBhaW50cyB0d28gdGlsZXMuCisg
ICAgbGF5ZXItPnNldEJvdW5kcyhJbnRTaXplKDEwMCwgMjAwKSk7CiAgICAgbGF5ZXItPmludmFs
aWRhdGVSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsKICAgICBsYXllci0+cHJlcGFyZVRv
VXBkYXRlKEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsKICAgICBsYXllci0+dXBkYXRlQ29tcG9z
aXRvclJlc291cmNlcygwLCB1cGRhdGVyKTsKQEAgLTE0NSw1ICsxNTYsMTA3IEBAIFRFU1QoVGls
ZWRMYXllckNocm9taXVtVGVzdCwgcHVzaERpcnR5VGlsZXMpCiAgICAgRVhQRUNUX0ZBTFNFKGxh
eWVySW1wbC0+aGFzVGlsZUF0KDAsIDEpKTsKIH0KIAorVEVTVChUaWxlZExheWVyQ2hyb21pdW1U
ZXN0LCBwdXNoSWRsZVBhaW50VGlsZXMpCit7CisgICAgT3duUHRyPFRleHR1cmVNYW5hZ2VyPiB0
ZXh0dXJlTWFuYWdlciA9IFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQsIDIqMTAy
NCoxMDI0LCAxMDI0KTsKKyAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIg
PSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQo
KSkpOworICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOworICAgIFJlZlB0
cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsID0gYWRvcHRSZWYobmV3IEZha2VDQ1Rp
bGVkTGF5ZXJJbXBsKDApKTsKKworICAgIEZha2VUZXh0dXJlQWxsb2NhdG9yIHRleHR1cmVBbGxv
Y2F0b3I7CisgICAgQ0NUZXh0dXJlVXBkYXRlciB1cGRhdGVyKCZ0ZXh0dXJlQWxsb2NhdG9yKTsK
KworICAgIC8vIFRoZSB0aWxlIHNpemUgaXMgMTAweDEwMC4gU2V0dXAgNXg1IHRpbGVzIHdpdGgg
b25lIHZpc2libGUgdGlsZSBpbiB0aGUgY2VudGVyLgorICAgIEludFNpemUgY29udGVudEJvdW5k
cyg1MDAsIDUwMCk7CisgICAgSW50UmVjdCBjb250ZW50UmVjdChJbnRQb2ludDo6emVybygpLCBj
b250ZW50Qm91bmRzKTsKKyAgICBJbnRSZWN0IHZpc2libGVSZWN0KDIwMCwgMjAwLCAxMDAsIDEw
MCk7CisKKyAgICAvLyBUaGlzIGludmFsaWRhdGVzIDI1IHRpbGVzIGFuZCB0aGVuIHBhaW50cyBv
bmUgdmlzaWJsZSB0aWxlLgorICAgIGxheWVyLT5zZXRCb3VuZHMoY29udGVudEJvdW5kcyk7Cisg
ICAgbGF5ZXItPnNldFZpc2libGVMYXllclJlY3QodmlzaWJsZVJlY3QpOworICAgIGxheWVyLT5p
bnZhbGlkYXRlUmVjdChjb250ZW50UmVjdCk7CisgICAgbGF5ZXItPnByZXBhcmVUb1VwZGF0ZSh2
aXNpYmxlUmVjdCk7CisKKyAgICAvLyBXZSBzaG91bGQgbmVlZCBpZGxlLXBhaW50aW5nIGZvciAz
eDMgdGlsZXMgaW4gdGhlIGNlbnRlci4KKyAgICBFWFBFQ1RfVFJVRShsYXllci0+bmVlZHNJZGxl
UGFpbnQodmlzaWJsZVJlY3QpKTsKKworICAgIGxheWVyLT51cGRhdGVDb21wb3NpdG9yUmVzb3Vy
Y2VzKDAsIHVwZGF0ZXIpOworICAgIGxheWVyLT5wdXNoUHJvcGVydGllc1RvKGxheWVySW1wbC5n
ZXQoKSk7CisKKyAgICAvLyBXZSBzaG91bGQgaGF2ZSBvbmUgdGlsZSBvbiB0aGUgaW1wbCBzaWRl
LgorICAgIEVYUEVDVF9UUlVFKGxheWVySW1wbC0+aGFzVGlsZUF0KDIsIDIpKTsKKworICAgIHRl
eHR1cmVNYW5hZ2VyLT51bnByb3RlY3RBbGxUZXh0dXJlcygpOworCisgICAgLy8gRm9yIHRoZSBu
ZXh0IGZvdXIgdXBkYXRlcywgd2Ugc2hvdWxkIGRldGVjdCB3ZSBzdGlsbCBuZWVkIGlkbGUgcGFp
bnRpbmcuCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspIHsKKyAgICAgICAgbGF5ZXIt
PnByZXBhcmVUb1VwZGF0ZSh2aXNpYmxlUmVjdCk7CisgICAgICAgIEVYUEVDVF9UUlVFKGxheWVy
LT5uZWVkc0lkbGVQYWludCh2aXNpYmxlUmVjdCkpOworICAgICAgICBsYXllci0+cHJlcGFyZVRv
VXBkYXRlSWRsZSh2aXNpYmxlUmVjdCk7CisgICAgICAgIGxheWVyLT51cGRhdGVDb21wb3NpdG9y
UmVzb3VyY2VzKDAsIHVwZGF0ZXIpOworICAgICAgICBsYXllci0+cHVzaFByb3BlcnRpZXNUbyhs
YXllckltcGwuZ2V0KCkpOworICAgICAgICB0ZXh0dXJlTWFuYWdlci0+dW5wcm90ZWN0QWxsVGV4
dHVyZXMoKTsKKyAgICB9CisKKyAgICAvLyBBZnRlciBmb3VyIHBhc3NlcyBvZiBpZGxlIHBhaW50
aW5nLCB3ZSBzaG91bGQgYmUgZmluaXNoZWQgcGFpbnRpbmcKKyAgICBFWFBFQ1RfRkFMU0UobGF5
ZXItPm5lZWRzSWRsZVBhaW50KHZpc2libGVSZWN0KSk7CisKKyAgICAvLyBXZSBzaG91bGQgaGF2
ZSBvbmUgdGlsZSBzdXJyb3VuZGluZyB0aGUgdmlzaWJsZSB0aWxlIG9uIGFsbCBzaWRlcywgYnV0
IG5vIG90aGVyIHRpbGVzLgorICAgIEludFJlY3QgaWRsZVBhaW50VGlsZXMoMSwgMSwgMywgMyk7
CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA1OyBpKyspIHsKKyAgICAgICAgZm9yIChpbnQgaiA9
IDA7IGogPCA1OyBqKyspIHsKKyAgICAgICAgICAgIGlmIChpZGxlUGFpbnRUaWxlcy5jb250YWlu
cyhpLCBqKSkKKyAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRShsYXllckltcGwtPmhhc1RpbGVB
dChpLCBqKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgRVhQRUNUX0ZBTFNF
KGxheWVySW1wbC0+aGFzVGlsZUF0KGksIGopKTsKKyAgICAgICAgfQorICAgIH0KK30KKworCitU
RVNUKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIGlkbGVQYWludE91dE9mTWVtb3J5KQoreworICAg
IC8vIFRoZSB0aWxlIHNpemUgaXMgMTAweDEwMC4gU2V0dXAgNXg1IHRpbGVzIHdpdGggb25lIDF4
MSB2aXNpYmxlIHRpbGUgaW4gdGhlIGNlbnRlci4KKyAgICBJbnRTaXplIGNvbnRlbnRCb3VuZHMo
MzAwLCAzMDApOworICAgIEludFJlY3QgY29udGVudFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgY29u
dGVudEJvdW5kcyk7CisgICAgSW50UmVjdCB2aXNpYmxlUmVjdCgxMDAsIDEwMCwgMTAwLCAxMDAp
OworCisgICAgLy8gV2UgaGF2ZSBlbm91Z2ggbWVtb3J5IGZvciBvbmx5IHRoZSB2aXNpYmxlIHJl
Y3QsIHNvIHdlIHdpbGwgcnVuIG91dCBvZiBtZW1vcnkgaW4gZmlyc3QgaWRsZSBwYWludC4KKyAg
ICBpbnQgbWVtb3J5TGltaXQgPSA0ICogMTAwICogMTAwOyAvLyAyIHRpbGVzLCA0IGJ5dGVzIHBl
ciBwaXhlbC4KKworICAgIE93blB0cjxUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBU
ZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKG1lbW9yeUxpbWl0LCBtZW1vcnlMaW1pdCAvIDIsIDEwMjQp
OworICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5l
dyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CisgICAgRGVi
dWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CisgICAgUmVmUHRyPEZha2VDQ1RpbGVk
TGF5ZXJJbXBsPiBsYXllckltcGwgPSBhZG9wdFJlZihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwo
MCkpOworCisgICAgRmFrZVRleHR1cmVBbGxvY2F0b3IgdGV4dHVyZUFsbG9jYXRvcjsKKyAgICBD
Q1RleHR1cmVVcGRhdGVyIHVwZGF0ZXIoJnRleHR1cmVBbGxvY2F0b3IpOworCisgICAgLy8gVGhp
cyBpbnZhbGlkYXRlcyA5IHRpbGVzIGFuZCB0aGVuIHBhaW50cyBvbmUgdmlzaWJsZSB0aWxlLgor
ICAgIGxheWVyLT5zZXRCb3VuZHMoY29udGVudEJvdW5kcyk7CisgICAgbGF5ZXItPnNldFZpc2li
bGVMYXllclJlY3QodmlzaWJsZVJlY3QpOworICAgIGxheWVyLT5pbnZhbGlkYXRlUmVjdChjb250
ZW50UmVjdCk7CisgICAgbGF5ZXItPnByZXBhcmVUb1VwZGF0ZSh2aXNpYmxlUmVjdCk7CisKKyAg
ICAvLyBXZSBzaG91bGQgbmVlZCBpZGxlLXBhaW50aW5nIGZvciAzeDMgdGlsZXMgc3Vyb3VuZGlu
ZyB2aXNpYmxlIHRpbGUuCisgICAgRVhQRUNUX1RSVUUobGF5ZXItPm5lZWRzSWRsZVBhaW50KHZp
c2libGVSZWN0KSk7CisKKyAgICBsYXllci0+dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcygwLCB1
cGRhdGVyKTsKKyAgICBsYXllci0+cHVzaFByb3BlcnRpZXNUbyhsYXllckltcGwuZ2V0KCkpOwor
CisgICAgLy8gV2Ugc2hvdWxkIGhhdmUgb25lIHRpbGUgb24gdGhlIGltcGwgc2lkZS4KKyAgICBF
WFBFQ1RfVFJVRShsYXllckltcGwtPmhhc1RpbGVBdCgxLCAxKSk7CisKKyAgICB0ZXh0dXJlTWFu
YWdlci0+dW5wcm90ZWN0QWxsVGV4dHVyZXMoKTsKKyAgICBsYXllci0+cHJlcGFyZVRvVXBkYXRl
KHZpc2libGVSZWN0KTsKKyAgICBsYXllci0+cHJlcGFyZVRvVXBkYXRlSWRsZSh2aXNpYmxlUmVj
dCk7CisKKyAgICAvLyBXZSBzaG91bGRuJ3Qgc2lnbmFsIHdlIG5lZWQgYW5vdGhlciBpZGxlIHBh
aW50IGFmdGVyIHdlIHJ1biBvdXQgb2YgbWVtb3J5LgorICAgIEVYUEVDVF9GQUxTRShsYXllci0+
bmVlZHNJZGxlUGFpbnQodmlzaWJsZVJlY3QpKTsKKworICAgIGxheWVyLT51cGRhdGVDb21wb3Np
dG9yUmVzb3VyY2VzKDAsIHVwZGF0ZXIpOworICAgIGxheWVyLT5wdXNoUHJvcGVydGllc1RvKGxh
eWVySW1wbC5nZXQoKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119637</attachid>
            <date>2011-12-16 11:12:28 -0800</date>
            <delta_ts>2011-12-16 14:04:41 -0800</delta_ts>
            <desc>rebasing</desc>
            <filename>bug-72686-20111216111227.patch</filename>
            <type>text/plain</type>
            <size>32466</size>
            <attacher name="Eric Penner">epenner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzMDgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2QwODc1MWIxM2EyZGM0
MzUwMDU4N2Y2OTlmY2ZhMmQ3ZTgwN2M4NC4uMjU1N2VmNmMzZjIwZTM1Mzk5MzRlMGNmMDZmMTdm
ZTNmZjFhNTVkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDExLTEyLTE2ICBFcmlj
IFBlbm5lciAgPGVwZW5uZXJAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIE5lZWQg
dG8gcHJlcGFpbnQgdGlsZXMgaW4gVGlsZWRMYXllckNocm9taXVtCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjY4NgorCisgICAgICAgIE5vIG5ldyB0
ZXN0cy4gKE9PUFMhKQorCitUaGlzIHBhdGNoIHByZS1wYWludHMgYSBvbmUgdGlsZSBib3JkZXIg
YXJvdW5kIHRoZSB2aXNpYmxlIHRpbGVzIHdoZW4KK25vIG90aGVyIHZpc2libGUgcGFpbnRpbmcg
b2NjdXJzLCBhbmQgd2hlbiBtZW1vcnkgaXMgYXZhaWxhYmxlLgorCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OmlkbGVQYWludENvbnRlbnRzSWZEaXJ0eSk6
IGFkZGVkIGlkbGUgcGFpbnQgZnVuY3Rpb24KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oOiBkaXR0bworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaDogZGl0dG8KKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyQ2hyb21pdW06OmlkbGVQYWludENvbnRlbnRzSWZEaXJ0eSk6IGRpdHRvCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hbmFnZXI6OnByb3RlY3RUZXh0dXJlKTogcmVtb3ZlZCBh
c3NlcnQgZm9yIHByb3RlY3RpbmcgYSB0ZXh0dXJlIHR3aWNlCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6VGlsZWRMYXllckNocm9taXVtKToKKyAgICAgICAgKFdl
YkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6Y2xlYW51cFJlc291cmNlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMpOiBy
ZWZhY3RvcmluZyB0byB1c2UgdGlsZSBpbmRpY2VzCisgICAgICAgIChXZWJDb3JlOjpUaWxlZExh
eWVyQ2hyb21pdW06OnByZXBhcmVUb1VwZGF0ZVRpbGVzKTogcmVmYWN0b3JlZCBjb21tb24gY29k
ZSBhbmQgbWFkZSBpZGxlL3Zpc2libGUgdmVyc2lvbnMKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVk
TGF5ZXJDaHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlKTogZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6
OlRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlSWRsZSk6IGRpdHRvCisgICAgICAg
IChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06Om5lZWRzSWRsZVBhaW50KTogCisgICAgICAg
IChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OmlkbGVQYWludFJlY3QpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OkNDTGF5ZXJUcmVlSG9zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmNvbXBvc2l0ZUFuZFJlYWRiYWNrKTogc2V0
IGZsYWcgdG8gYXZvaWQgaWRsZSBwYWludCBkdXJyaW5nIGNvbXBvc2l0ZSBhbmQgcmVhZGJhY2sK
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6dXBkYXRlTGF5ZXJzKTogYWRkZWQg
aWRsZSBmbGFnIHBhcmFtZXRlcgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Ojpw
YWludENvbnRlbnRzSWZEaXJ0eSk6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJl
ZUhvc3Q6OnBhaW50TWFza0FuZFJlcGxpY2FGb3JSZW5kZXJTdXJmYWNlKTogZGl0dG8KKyAgICAg
ICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6cGFpbnRMYXllckNvbnRlbnRzKTogY2hvb3Nl
cyBpZGxlIG9yIHZpc2libGUgcGFpbnQKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaDoKKwogMjAxMS0xMi0xNSAgQW50dGkgS29pdmlzdG8g
IDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTc0Njc3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDA3NGNkZjg4
YTQ4ZDAwZWRjYmZiODVkOWE1N2YyODRkZmQ0YmMwYjUuLjg3YjUxZWI1ZTQ1NDcwNjliMTQwYjJi
ZTVmMmMwYjY4OWNkOTdkOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MjEgQEAKKzIwMTEtMTItMTYgIEVyaWMgUGVubmVyICA8ZXBlbm5lckBnb29nbGUuY29tPgorCisg
ICAgICAgIFtjaHJvbWl1bV0gTmVlZCB0byBwcmVwYWludCB0aWxlcyBpbiBUaWxlZExheWVyQ2hy
b21pdW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcy
Njg2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB0
ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcDoKKyAgICAgICAgKFdURjo6Q29udGVudExheWVy
Q2hyb21pdW1XaXRoVXBkYXRlVHJhY2tpbmc6OmlkbGVQYWludENvbnRlbnRzQ291bnQpOgorICAg
ICAgICAoV1RGOjpDb250ZW50TGF5ZXJDaHJvbWl1bVdpdGhVcGRhdGVUcmFja2luZzo6cmVzZXRQ
YWludENvbnRlbnRzQ291bnQpOgorICAgICAgICAoV1RGOjpDb250ZW50TGF5ZXJDaHJvbWl1bVdp
dGhVcGRhdGVUcmFja2luZzo6aWRsZVBhaW50Q29udGVudHNJZkRpcnR5KToKKyAgICAgICAgKFdU
Rjo6Q29udGVudExheWVyQ2hyb21pdW1XaXRoVXBkYXRlVHJhY2tpbmc6OkNvbnRlbnRMYXllckNo
cm9taXVtV2l0aFVwZGF0ZVRyYWNraW5nKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0
VGVzdE9wYWNpdHlDaGFuZ2U6OmFmdGVyVGVzdCk6CisgICAgICAgICogdGVzdHMvVGlsZWRMYXll
ckNocm9taXVtVGVzdC5jcHA6CisgICAgICAgIChXVEY6OkZha2VUaWxlZExheWVyQ2hyb21pdW06
OnByZXBhcmVUb1VwZGF0ZUlkbGUpOgorICAgICAgICAoV1RGOjpGYWtlVGlsZWRMYXllckNocm9t
aXVtOjpuZWVkc0lkbGVQYWludCk6CisgICAgICAgIChXVEY6OlRFU1QpOgorCiAyMDExLTEyLTE1
ICBTdGVwaGVuIFdoaXRlICA8c2Vub3JibGFuY29AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEVu
YWJsZSBDU1NfRklMVEVSUyBpbiBDaHJvbWl1bS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9t
aXVtLmNwcAppbmRleCA3OGViN2M4MDdhZDc1NDhkZmFiMjU4YTI1YTc5YzFkNGM2YmZmOTIyLi5j
NjM5NTYzNmQ0YzM3MzIxODZiMGNlZWUxNmEzMTIxOTdkMGM5NmEwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1
bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29u
dGVudExheWVyQ2hyb21pdW0uY3BwCkBAIC0xMDgsNiArMTA4LDIwIEBAIHZvaWQgQ29udGVudExh
eWVyQ2hyb21pdW06OnBhaW50Q29udGVudHNJZkRpcnR5KCkKICAgICBtX25lZWRzRGlzcGxheSA9
IGZhbHNlOwogfQogCit2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjppZGxlUGFpbnRDb250ZW50
c0lmRGlydHkoKQoreworICAgIGlmICghZHJhd3NDb250ZW50KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCA9IHZpc2libGVMYXllclJlY3QoKTsKKyAg
ICBpZiAobGF5ZXJSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcHJlcGFy
ZVRvVXBkYXRlSWRsZShsYXllclJlY3QpOworICAgIGlmIChuZWVkc0lkbGVQYWludChsYXllclJl
Y3QpKQorICAgICAgICBzZXROZWVkc0NvbW1pdCgpOworfQorCiBib29sIENvbnRlbnRMYXllckNo
cm9taXVtOjpkcmF3c0NvbnRlbnQoKSBjb25zdAogewogICAgIHJldHVybiBtX2RlbGVnYXRlICYm
IG1fZGVsZWdhdGUtPmRyYXdzQ29udGVudCgpICYmIFRpbGVkTGF5ZXJDaHJvbWl1bTo6ZHJhd3ND
b250ZW50KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaAppbmRleCBiODM0ZTY3NmJk
NjM0NDVhYTQ1M2IzNjVlZWUyODAyNDBmMzgwOWMxLi4wYzU3NGI1ZGZkYzBhNTcxYjgxMWJlMDM5
NzY0YWM3NWIxYzJlM2VlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmgKQEAgLTUw
LDYgKzUwLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfkNvbnRlbnRMYXllckNocm9taXVtKCk7
CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50c0lmRGlydHkoKTsKKyAgICB2aXJ0dWFs
IHZvaWQgaWRsZVBhaW50Q29udGVudHNJZkRpcnR5KCk7CiAKIHByb3RlY3RlZDoKICAgICBleHBs
aWNpdCBDb250ZW50TGF5ZXJDaHJvbWl1bShDQ0xheWVyRGVsZWdhdGUqKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0u
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21p
dW0uaAppbmRleCBjMmIyNzQ3NzBjMWQwZGE2MWEyMDMzYzVlZTZhNGJlN2FiOGNiYzQ2Li43NjJh
Nzg3ZDg2MDVlMGZiMDQyOTIyOTQxMjI1MGVmYzhhYmI3ZDZjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5o
CkBAIC0xNjEsNiArMTYxLDcgQEAgcHVibGljOgogICAgIC8vIFRoZXNlIG1ldGhvZHMgdHlwaWNh
bGx5IG5lZWQgdG8gYmUgb3ZlcndyaXR0ZW4gYnkgZGVyaXZlZCBjbGFzc2VzLgogICAgIHZpcnR1
YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1
YWwgdm9pZCBwYWludENvbnRlbnRzSWZEaXJ0eSgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBpZGxl
UGFpbnRDb250ZW50c0lmRGlydHkoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29tcG9z
aXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCosIENDVGV4dHVyZVVwZGF0ZXImKSB7IH0K
ICAgICB2aXJ0dWFsIHZvaWQgc2V0SXNNYXNrKGJvb2wpIHsgfQogICAgIHZpcnR1YWwgdm9pZCB1
bnJlc2VydmVDb250ZW50c1RleHR1cmUoKSB7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmNwcAppbmRl
eCAxMTg3NTM3ZmI5MmFjMGJlYzc4OTM4MjVlM2FiNmUzZTI1Zjk3MDM2Li4zMDIwN2JlMzgyZWI0
NDQzYWJhZDQzMTNiYzE1NDdkZDA2NWIwYWM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuY3BwCkBA
IC0xNDEsNyArMTQxLDYgQEAgYm9vbCBUZXh0dXJlTWFuYWdlcjo6aXNQcm90ZWN0ZWQoVGV4dHVy
ZVRva2VuIHRva2VuKQogdm9pZCBUZXh0dXJlTWFuYWdlcjo6cHJvdGVjdFRleHR1cmUoVGV4dHVy
ZVRva2VuIHRva2VuKQogewogICAgIEFTU0VSVChoYXNUZXh0dXJlKHRva2VuKSk7Ci0gICAgQVNT
RVJUKCFtX3RleHR1cmVzLmdldCh0b2tlbikuaXNQcm90ZWN0ZWQpOwogICAgIFRleHR1cmVJbmZv
IGluZm8gPSBtX3RleHR1cmVzLnRha2UodG9rZW4pOwogICAgIGluZm8uaXNQcm90ZWN0ZWQgPSB0
cnVlOwogICAgIG1fdGV4dHVyZXMuYWRkKHRva2VuLCBpbmZvKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVy
Q2hyb21pdW0uY3BwCmluZGV4IDg3Y2JhODg4MTE2NzcxNTU3Yzg1ZDYyZTcxZTU2ZTIxYzNlNDg0
MTkuLmEwZTkxMDJiOGUxYWM5ZTBmYjkyOThiNTVjNzhiNTMzY2IxMjFhMmUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJv
bWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
VGlsZWRMYXllckNocm9taXVtLmNwcApAQCAtNzIsNiArNzIsNyBAQCBUaWxlZExheWVyQ2hyb21p
dW06OlRpbGVkTGF5ZXJDaHJvbWl1bShDQ0xheWVyRGVsZWdhdGUqIGRlbGVnYXRlKQogICAgIDog
TGF5ZXJDaHJvbWl1bShkZWxlZ2F0ZSkKICAgICAsIG1fdGV4dHVyZUZvcm1hdChHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9FTlVNKQogICAgICwgbV9za2lwc0RyYXcoZmFsc2UpCisgICAgLCBt
X3NraXBzSWRsZVBhaW50KGZhbHNlKQogICAgICwgbV9zYW1wbGVkVGV4ZWxGb3JtYXQoTGF5ZXJU
ZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0SW52YWxpZCkKICAgICAsIG1fdGlsaW5n
T3B0aW9uKEF1dG9UaWxlKQogewpAQCAtOTIsNyArOTMsNyBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJv
bWl1bTo6Y2xlYW51cFJlc291cmNlcygpCiAKICAgICBtX3RpbGVyLmNsZWFyKCk7CiAgICAgbV9w
YWludFJlY3QgPSBJbnRSZWN0KCk7Ci0gICAgbV9yZXF1ZXN0ZWRVcGRhdGVSZWN0ID0gSW50UmVj
dCgpOworICAgIG1fcmVxdWVzdGVkVXBkYXRlVGlsZXNSZWN0ID0gSW50UmVjdCgpOwogfQogCiB2
b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6dXBkYXRlVGlsZVNpemVBbmRUaWxpbmdPcHRpb24oKQpA
QCAtMTgyLDExICsxODMsMTMgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBv
c2l0b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0M0QqLCBDQ1RleHR1cmUKICAgICBBU1NFUlQo
bV9za2lwc0RyYXcgfHwgbV90aWxlcik7CiAKICAgICAvLyBQYWludGluZyBjb3VsZCBjYXVzZSBj
b21wb3NpdGluZyB0byBnZXQgdHVybmVkIG9mZiwgd2hpY2ggbWF5IGNhdXNlIHRoZSB0aWxlciB0
byBiZWNvbWUgaW52YWxpZGF0ZWQgbWlkLXVwZGF0ZS4KLSAgICBpZiAobV9za2lwc0RyYXcgfHwg
bV9yZXF1ZXN0ZWRVcGRhdGVSZWN0LmlzRW1wdHkoKSB8fCAhbV90aWxlciB8fCAhbV90aWxlci0+
bnVtVGlsZXMoKSkKKyAgICBpZiAobV9za2lwc0RyYXcgfHwgbV9yZXF1ZXN0ZWRVcGRhdGVUaWxl
c1JlY3QuaXNFbXB0eSgpIHx8ICFtX3RpbGVyIHx8ICFtX3RpbGVyLT5udW1UaWxlcygpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBpbnQgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tOwotICAgIG1f
dGlsZXItPmNvbnRlbnRSZWN0VG9UaWxlSW5kaWNlcyhtX3JlcXVlc3RlZFVwZGF0ZVJlY3QsIGxl
ZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CisgICAgaW50IGxlZnQgPSBtX3JlcXVlc3RlZFVwZGF0
ZVRpbGVzUmVjdC54KCk7CisgICAgaW50IHRvcCA9IG1fcmVxdWVzdGVkVXBkYXRlVGlsZXNSZWN0
LnkoKTsKKyAgICBpbnQgcmlnaHQgPSBtX3JlcXVlc3RlZFVwZGF0ZVRpbGVzUmVjdC5tYXhYKCkg
LSAxOworICAgIGludCBib3R0b20gPSBtX3JlcXVlc3RlZFVwZGF0ZVRpbGVzUmVjdC5tYXhZKCkg
LSAxOwogICAgIGZvciAoaW50IGogPSB0b3A7IGogPD0gYm90dG9tOyArK2opIHsKICAgICAgICAg
Zm9yIChpbnQgaSA9IGxlZnQ7IGkgPD0gcmlnaHQ7ICsraSkgewogICAgICAgICAgICAgVXBkYXRh
YmxlVGlsZSogdGlsZSA9IHRpbGVBdChpLCBqKTsKQEAgLTM0NCwzOCArMzQ3LDE3IEBAIHZvaWQg
VGlsZWRMYXllckNocm9taXVtOjpwcm90ZWN0VGlsZVRleHR1cmVzKGNvbnN0IEludFJlY3QmIGNv
bnRlbnRSZWN0KQogICAgIH0KIH0KIAotdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVU
b1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKK3ZvaWQgVGlsZWRMYXllckNocm9t
aXVtOjpwcmVwYXJlVG9VcGRhdGVUaWxlcyhib29sIGlkbGUsIGludCBsZWZ0LCBpbnQgdG9wLCBp
bnQgcmlnaHQsIGludCBib3R0b20pCiB7Ci0gICAgaWYgKCFtX3RpbGVyKQotICAgICAgICBjcmVh
dGVUaWxlcihpc05vbkNvbXBvc2l0ZWRDb250ZW50KCkgPyBDQ0xheWVyVGlsaW5nRGF0YTo6Tm9C
b3JkZXJUZXhlbHMgOiBDQ0xheWVyVGlsaW5nRGF0YTo6SGFzQm9yZGVyVGV4ZWxzKTsKLQotICAg
IEFTU0VSVChtX3RpbGVyKTsKLQotICAgIG1fc2tpcHNEcmF3ID0gZmFsc2U7Ci0KICAgICAvLyBS
ZXNldCBtX3VwZGF0ZVJlY3QgZm9yIGFsbCB0aWxlcy4KICAgICBmb3IgKENDTGF5ZXJUaWxpbmdE
YXRhOjpUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbV90aWxlci0+dGlsZXMoKS5iZWdp
bigpOyBpdGVyICE9IG1fdGlsZXItPnRpbGVzKCkuZW5kKCk7ICsraXRlcikgewogICAgICAgICBV
cGRhdGFibGVUaWxlKiB0aWxlID0gc3RhdGljX2Nhc3Q8VXBkYXRhYmxlVGlsZSo+KGl0ZXItPnNl
Y29uZC5nZXQoKSk7CiAgICAgICAgIHRpbGUtPm1fdXBkYXRlUmVjdCA9IEludFJlY3QoKTsKICAg
ICB9CiAKLSAgICBpZiAoY29udGVudFJlY3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fcmVxdWVz
dGVkVXBkYXRlUmVjdCA9IEludFJlY3QoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IG1fdGlsZXItPmdyb3dMYXllclRvQ29udGFpbihjb250ZW50UmVjdCk7Ci0KLSAgICBpZiAoIW1f
dGlsZXItPm51bVRpbGVzKCkpIHsKLSAgICAgICAgbV9yZXF1ZXN0ZWRVcGRhdGVSZWN0ID0gSW50
UmVjdCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgLy8gQ3JlYXRlIHRpbGVzIGFz
IG5lZWRlZCwgZXhwYW5kaW5nIGEgZGlydHkgcmVjdCB0byBjb250YWluIGFsbAogICAgIC8vIHRo
ZSBkaXJ0eSByZWdpb25zIGN1cnJlbnRseSBiZWluZyBkcmF3bi4KICAgICBJbnRSZWN0IGRpcnR5
TGF5ZXJSZWN0OwotICAgIGludCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b207Ci0gICAgbV90aWxl
ci0+Y29udGVudFJlY3RUb1RpbGVJbmRpY2VzKGNvbnRlbnRSZWN0LCBsZWZ0LCB0b3AsIHJpZ2h0
LCBib3R0b20pOwogICAgIGZvciAoaW50IGogPSB0b3A7IGogPD0gYm90dG9tOyArK2opIHsKICAg
ICAgICAgZm9yIChpbnQgaSA9IGxlZnQ7IGkgPD0gcmlnaHQ7ICsraSkgewogICAgICAgICAgICAg
VXBkYXRhYmxlVGlsZSogdGlsZSA9IHRpbGVBdChpLCBqKTsKQEAgLTM4Niw4ICszNjgsMTEgQEAg
dm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBj
b250ZW50UmVjdCkKICAgICAgICAgICAgICAgICB0aWxlLT5tX2RpcnR5TGF5ZXJSZWN0ID0gbV90
aWxlci0+dGlsZUxheWVyUmVjdCh0aWxlKTsKIAogICAgICAgICAgICAgaWYgKCF0aWxlLT5tYW5h
Z2VkVGV4dHVyZSgpLT5yZXNlcnZlKG1fdGlsZXItPnRpbGVTaXplKCksIG1fdGV4dHVyZUZvcm1h
dCkpIHsKLSAgICAgICAgICAgICAgICBtX3NraXBzRHJhdyA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgY2xlYW51cFJlc291cmNlcygpOworICAgICAgICAgICAgICAgIG1fc2tpcHNJZGxlUGFpbnQg
PSB0cnVlOworICAgICAgICAgICAgICAgIGlmICghaWRsZSkgeworICAgICAgICAgICAgICAgICAg
ICBtX3NraXBzRHJhdyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGNsZWFudXBSZXNvdXJj
ZXMoKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgfQogCkBAIC0zOTUsMjIgKzM4MCwyMiBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6
cHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQogICAgICAgICB9CiAg
ICAgfQogCi0gICAgLy8gRHVlIHRvIGJvcmRlcnMsIHdoZW4gdGhlIHBhaW50IHJlY3QgaXMgZXh0
ZW5kZWQgdG8gdGlsZSBib3VuZGFyaWVzLCBpdAotICAgIC8vIG1heSBlbmQgdXAgb3ZlcmxhcHBp
bmcgbW9yZSB0aWxlcyB0aGFuIHRoZSBvcmlnaW5hbCBjb250ZW50IHJlY3QuIFJlY29yZAotICAg
IC8vIHRoYXQgb3JpZ2luYWwgcmVjdCBzbyB3ZSBkb24ndCB1cGxvYWQgbW9yZSB0aWxlcyB0aGFu
IG5lY2Vzc2FyeS4KLSAgICBtX3JlcXVlc3RlZFVwZGF0ZVJlY3QgPSBjb250ZW50UmVjdDsKLQog
ICAgIG1fcGFpbnRSZWN0ID0gbV90aWxlci0+bGF5ZXJSZWN0VG9Db250ZW50UmVjdChkaXJ0eUxh
eWVyUmVjdCk7CiAgICAgaWYgKGRpcnR5TGF5ZXJSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuOwogCisgICAgLy8gRHVlIHRvIGJvcmRlcnMsIHdoZW4gdGhlIHBhaW50IHJlY3QgaXMgZXh0
ZW5kZWQgdG8gdGlsZSBib3VuZGFyaWVzLCBpdAorICAgIC8vIG1heSBlbmQgdXAgb3ZlcmxhcHBp
bmcgbW9yZSB0aWxlcyB0aGFuIHRoZSBvcmlnaW5hbCBjb250ZW50IHJlY3QuIFJlY29yZAorICAg
IC8vIHRoZSBvcmlnaW5hbCB0aWxlcyBzbyB3ZSBkb24ndCB1cGxvYWQgbW9yZSB0aWxlcyB0aGFu
IG5lY2Vzc2FyeS4KKyAgICBpZiAoIW1fcGFpbnRSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgbV9y
ZXF1ZXN0ZWRVcGRhdGVUaWxlc1JlY3QgPSBJbnRSZWN0KGxlZnQsIHRvcCwgcmlnaHQgLSBsZWZ0
ICsgMSwgYm90dG9tIC0gdG9wICsgMSk7CisKICAgICAvLyBDYWxsaW5nIHByZXBhcmVUb1VwZGF0
ZSgpIGNhbGxzIGludG8gV2ViS2l0IHRvIHBhaW50LCB3aGljaCBtYXkgaGF2ZSB0aGUgc2lkZQog
ICAgIC8vIGVmZmVjdCBvZiBkaXNhYmxpbmcgY29tcG9zaXRpbmcsIHdoaWNoIGNhdXNlcyBvdXIg
cmVmZXJlbmNlIHRvIHRoZSB0ZXh0dXJlIHVwZGF0ZXIgdG8gYmUgZGVsZXRlZC4KICAgICAvLyBI
b3dldmVyLCB3ZSBjYW4ndCBmcmVlIHRoZSBtZW1vcnkgYmFja2luZyB0aGUgR3JhcGhpY3NDb250
ZXh0IHVudGlsIHRoZSBwYWludCBmaW5pc2hlcywKICAgICAvLyBzbyB3ZSBncmFiIGEgbG9jYWwg
cmVmZXJlbmNlIGhlcmUgdG8gaG9sZCB0aGUgdXBkYXRlciBhbGl2ZSB1bnRpbCB0aGUgcGFpbnQg
Y29tcGxldGVzLgogICAgIFJlZlB0cjxMYXllclRleHR1cmVVcGRhdGVyPiBwcm90ZWN0b3IodGV4
dHVyZVVwZGF0ZXIoKSk7CiAgICAgdGV4dHVyZVVwZGF0ZXIoKS0+cHJlcGFyZVRvVXBkYXRlKG1f
cGFpbnRSZWN0LCBtX3RpbGVyLT50aWxlU2l6ZSgpLCBtX3RpbGVyLT5oYXNCb3JkZXJUZXhlbHMo
KSwgY29udGVudHNTY2FsZSgpKTsKLSAgICBtX3RpbGVyLT5jb250ZW50UmVjdFRvVGlsZUluZGlj
ZXMobV9yZXF1ZXN0ZWRVcGRhdGVSZWN0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOwogICAg
IGZvciAoaW50IGogPSB0b3A7IGogPD0gYm90dG9tOyArK2opIHsKICAgICAgICAgZm9yIChpbnQg
aSA9IGxlZnQ7IGkgPD0gcmlnaHQ7ICsraSkgewogICAgICAgICAgICAgVXBkYXRhYmxlVGlsZSog
dGlsZSA9IHRpbGVBdChpLCBqKTsKQEAgLTQ0Miw1ICs0MjcsMTE3IEBAIHZvaWQgVGlsZWRMYXll
ckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCiAg
ICAgfQogfQogCisKK3ZvaWQgVGlsZWRMYXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGUoY29u
c3QgSW50UmVjdCYgY29udGVudFJlY3QpCit7CisgICAgaWYgKCFtX3RpbGVyKQorICAgICAgICBj
cmVhdGVUaWxlcihpc05vbkNvbXBvc2l0ZWRDb250ZW50KCkgPyBDQ0xheWVyVGlsaW5nRGF0YTo6
Tm9Cb3JkZXJUZXhlbHMgOiBDQ0xheWVyVGlsaW5nRGF0YTo6SGFzQm9yZGVyVGV4ZWxzKTsKKwor
ICAgIEFTU0VSVChtX3RpbGVyKTsKKworICAgIG1fc2tpcHNEcmF3ID0gZmFsc2U7CisgICAgbV9z
a2lwc0lkbGVQYWludCA9IGZhbHNlOworICAgIG1fcmVxdWVzdGVkVXBkYXRlVGlsZXNSZWN0ID0g
SW50UmVjdCgpOworICAgIG1fcGFpbnRSZWN0ID0gSW50UmVjdCgpOworCisgICAgbV90aWxlci0+
Z3Jvd0xheWVyVG9Db250YWluKEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgY29udGVudEJvdW5k
cygpKSk7CisKKyAgICBpZiAoY29udGVudFJlY3QuaXNFbXB0eSgpIHx8ICFtX3RpbGVyLT5udW1U
aWxlcygpKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQgbGVmdCwgdG9wLCByaWdodCwgYm90
dG9tOworICAgIG1fdGlsZXItPmNvbnRlbnRSZWN0VG9UaWxlSW5kaWNlcyhjb250ZW50UmVjdCwg
bGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKKworICAgIHByZXBhcmVUb1VwZGF0ZVRpbGVzKGZh
bHNlLCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworfQorCit2b2lkIFRpbGVkTGF5ZXJDaHJv
bWl1bTo6cHJlcGFyZVRvVXBkYXRlSWRsZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKK3sK
KyAgICAvLyBBYm9ydCBpZiB3ZSBoYXZlIGFscmVhZHkgcHJlcGFyZWQgYSBwYWludCBvciBydW4g
b3V0IG9mIG1lbW9yeS4KKyAgICBpZiAobV9za2lwc0lkbGVQYWludCB8fCAhbV9wYWludFJlY3Qu
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobV90aWxlcik7CisKKyAg
ICBtX3RpbGVyLT5ncm93TGF5ZXJUb0NvbnRhaW4oSW50UmVjdChJbnRQb2ludDo6emVybygpLCBj
b250ZW50Qm91bmRzKCkpKTsKKworICAgIGlmICghbV90aWxlci0+bnVtVGlsZXMoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgLy8gUHJvdGVjdCBhbnkgdGV4dHVyZXMgaW4gdGhlIHByZS1wYWlu
dCBhcmVhIHNvIHdlIGRvbid0IGVuZCB1cCBqdXN0CisgICAgLy8gcmVjbGFpbWluZyB0aGVtIGJl
bG93LgorICAgIEludFJlY3QgaWRsZVBhaW50Q29udGVudFJlY3QgPSBpZGxlUGFpbnRSZWN0KGNv
bnRlbnRSZWN0KTsKKyAgICBwcm90ZWN0VGlsZVRleHR1cmVzKGlkbGVQYWludENvbnRlbnRSZWN0
KTsKKworICAgIC8vIEV4cGFuZCBvdXR3YXJkcyB1bnRpbCB3ZSBmaW5kIGEgZGlydHkgcm93IG9y
IGNvbHVtbiB0byB1cGRhdGUuCisgICAgaW50IGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbTsKKyAg
ICBtX3RpbGVyLT5jb250ZW50UmVjdFRvVGlsZUluZGljZXMoY29udGVudFJlY3QsIGxlZnQsIHRv
cCwgcmlnaHQsIGJvdHRvbSk7CisgICAgaW50IHByZXBhaW50TGVmdCwgcHJlcGFpbnRUb3AsIHBy
ZXBhaW50UmlnaHQsIHByZXBhaW50Qm90dG9tOworICAgIG1fdGlsZXItPmNvbnRlbnRSZWN0VG9U
aWxlSW5kaWNlcyhpZGxlUGFpbnRDb250ZW50UmVjdCwgcHJlcGFpbnRMZWZ0LCBwcmVwYWludFRv
cCwgcHJlcGFpbnRSaWdodCwgcHJlcGFpbnRCb3R0b20pOworICAgIHdoaWxlICghbV9za2lwc0lk
bGVQYWludCAmJiAobGVmdCA+IHByZXBhaW50TGVmdCB8fCB0b3AgPiBwcmVwYWludFRvcCB8fCBy
aWdodCA8IHByZXBhaW50UmlnaHQgfHwgYm90dG9tIDwgcHJlcGFpbnRCb3R0b20pKSB7CisgICAg
ICAgIGlmIChib3R0b20gPCBwcmVwYWludEJvdHRvbSkgeworICAgICAgICAgICAgKytib3R0b207
CisgICAgICAgICAgICBwcmVwYXJlVG9VcGRhdGVUaWxlcyh0cnVlLCBsZWZ0LCBib3R0b20sIHJp
Z2h0LCBib3R0b20pOworICAgICAgICAgICAgaWYgKCFtX3BhaW50UmVjdC5pc0VtcHR5KCkgfHwg
bV9za2lwc0lkbGVQYWludCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBpZiAodG9wID4gcHJlcGFpbnRUb3ApIHsKKyAgICAgICAgICAgIC0tdG9wOworICAgICAg
ICAgICAgcHJlcGFyZVRvVXBkYXRlVGlsZXModHJ1ZSwgbGVmdCwgdG9wLCByaWdodCwgdG9wKTsK
KyAgICAgICAgICAgIGlmICghbV9wYWludFJlY3QuaXNFbXB0eSgpIHx8IG1fc2tpcHNJZGxlUGFp
bnQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGxlZnQg
PiBwcmVwYWludExlZnQpIHsKKyAgICAgICAgICAgIC0tbGVmdDsKKyAgICAgICAgICAgIHByZXBh
cmVUb1VwZGF0ZVRpbGVzKHRydWUsIGxlZnQsIHRvcCwgbGVmdCwgYm90dG9tKTsKKyAgICAgICAg
ICAgIGlmICghbV9wYWludFJlY3QuaXNFbXB0eSgpIHx8IG1fc2tpcHNJZGxlUGFpbnQpCisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJpZ2h0IDwgcHJlcGFp
bnRSaWdodCkgeworICAgICAgICAgICAgKytyaWdodDsKKyAgICAgICAgICAgIHByZXBhcmVUb1Vw
ZGF0ZVRpbGVzKHRydWUsIHJpZ2h0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworICAgICAgICAgICAg
aWYgKCFtX3BhaW50UmVjdC5pc0VtcHR5KCkgfHwgbV9za2lwc0lkbGVQYWludCkKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKworYm9vbCBUaWxlZExheWVyQ2hy
b21pdW06Om5lZWRzSWRsZVBhaW50KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQoreworICAg
IGlmIChtX3NraXBzSWRsZVBhaW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBBU1NF
UlQobV90aWxlcik7CisKKyAgICBJbnRSZWN0IGlkbGVQYWludENvbnRlbnRSZWN0ID0gaWRsZVBh
aW50UmVjdChjb250ZW50UmVjdCk7CisKKyAgICBpbnQgbGVmdCwgdG9wLCByaWdodCwgYm90dG9t
OworICAgIG1fdGlsZXItPmNvbnRlbnRSZWN0VG9UaWxlSW5kaWNlcyhpZGxlUGFpbnRDb250ZW50
UmVjdCwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKKyAgICBmb3IgKGludCBqID0gdG9wOyBq
IDw9IGJvdHRvbTsgKytqKSB7CisgICAgICAgIGZvciAoaW50IGkgPSBsZWZ0OyBpIDw9IHJpZ2h0
OyArK2kpIHsKKyAgICAgICAgICAgIGlmIChtX3JlcXVlc3RlZFVwZGF0ZVRpbGVzUmVjdC5jb250
YWlucyhJbnRQb2ludChpLCBqKSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0gdGlsZUF0KGksIGopOworICAgICAgICAgICAgaWYg
KCF0aWxlIHx8ICF0aWxlLT5tYW5hZ2VkVGV4dHVyZSgpLT5pc1ZhbGlkKG1fdGlsZXItPnRpbGVT
aXplKCksIG1fdGV4dHVyZUZvcm1hdCkgfHwgdGlsZS0+aXNEaXJ0eSgpKQorICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30K
KworSW50UmVjdCBUaWxlZExheWVyQ2hyb21pdW06OmlkbGVQYWludFJlY3QoY29uc3QgSW50UmVj
dCYgdmlzaWJsZUNvbnRlbnRSZWN0KQoreworICAgIEFTU0VSVChtX3RpbGVyKTsKKyAgICBJbnRS
ZWN0IHByZXBhaW50UmVjdCA9IHZpc2libGVDb250ZW50UmVjdDsKKyAgICAvLyBGSVhNRTogVGhp
cyBjYW4gYmUgbWFkZSBhIGxvdCBsYXJnZXIgaWYgd2UgY2FuOgorICAgIC8vIC0gcmVzZXJ2ZSBt
ZW1vcnkgYXQgYSBsb3dlciBwcmlvcml0eSB0aGFuIGZvciB2aXNpYmxlIGNvbnRlbnQKKyAgICAv
LyAtIG9ubHkgcmVzZXJ2ZSBpZGxlIHBhaW50IHRpbGVzIHVwIHRvIGEgbWVtb3J5IHJlY2xhaW0g
dGhyZXNob2xkIGFuZAorICAgIC8vIC0gaW5zdXJlIHdlIHBsYXkgbmljZWx5IHdpdGggb3RoZXIg
bGF5ZXJzCisgICAgcHJlcGFpbnRSZWN0LmluZmxhdGVYKG1fdGlsZXItPnRpbGVTaXplKCkud2lk
dGgoKSk7CisgICAgcHJlcGFpbnRSZWN0LmluZmxhdGVZKG1fdGlsZXItPnRpbGVTaXplKCkuaGVp
Z2h0KCkpOworICAgIHByZXBhaW50UmVjdC5pbnRlcnNlY3QoSW50UmVjdChJbnRQb2ludDo6emVy
bygpLCBjb250ZW50Qm91bmRzKCkpKTsKKyAgICByZXR1cm4gcHJlcGFpbnRSZWN0OworfQorCiB9
CiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVt
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVy
Q2hyb21pdW0uaAppbmRleCA3N2E5ZWM5MTQxZmJmYjg1ZmNjNWNjYzJiNTkwNWRhNDA1OWQwYmFh
Li40YjBjYzU1NTFjYmEwMjY4Yzg0ZWUxZjk0ZDUxZjVjZDVmZjYwY2U1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21p
dW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxl
ZExheWVyQ2hyb21pdW0uaApAQCAtNzUsOSArNzUsMTYgQEAgcHJvdGVjdGVkOgogCiAgICAgLy8g
U2V0IGludmFsaWRhdGlvbnMgdG8gYmUgcG90ZW50aWFsbHkgcmVwYWludGVkIGR1cmluZyB1cGRh
dGUoKS4KICAgICB2b2lkIGludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0
KTsKKwogICAgIC8vIFByZXBhcmUgZGF0YSBuZWVkZWQgdG8gdXBkYXRlIHRleHR1cmVzIHRoYXQg
aW50ZXJzZWN0IHdpdGggY29udGVudFJlY3QuCiAgICAgdm9pZCBwcmVwYXJlVG9VcGRhdGUoY29u
c3QgSW50UmVjdCYgY29udGVudFJlY3QpOwogCisgICAgLy8gU2FtZSBhcyBhYm92ZSwgYnV0IHRo
aXMgd2lsbCB0cnkgdG8gcGFpbnQgYWRkaXRpb25hbCBzdXJyb3VuZGluZyBjb250ZW50IGlmIGlk
bGUuCisgICAgdm9pZCBwcmVwYXJlVG9VcGRhdGVJZGxlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRS
ZWN0KTsKKworICAgIC8vIEFmdGVyIHByZXBhcmluZyBhbiB1cGRhdGUsIHJldHVybnMgdHJ1ZSBp
ZiBtb3JlIHByZS1wYWludGluZyBpcyBuZWVkZWQuCisgICAgYm9vbCBuZWVkc0lkbGVQYWludChj
b25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCk7CisKICAgICB2aXJ0dWFsIHZvaWQgcHJvdGVjdFZp
c2libGVUaWxlVGV4dHVyZXMoKTsKIAogICAgIHZpcnR1YWwgVGV4dHVyZU1hbmFnZXIqIHRleHR1
cmVNYW5hZ2VyKCkgY29uc3Q7CkBAIC05MCwxNyArOTcsMjIgQEAgcHJpdmF0ZToKICAgICB2b2lk
IGNyZWF0ZVRpbGVySWZOZWVkZWQoKTsKICAgICB2b2lkIHNldFRpbGluZ09wdGlvbihUaWxpbmdP
cHRpb24pOwogCisgICAgdm9pZCBwcmVwYXJlVG9VcGRhdGVUaWxlcyhib29sIGlkbGUsIGludCBs
ZWZ0LCBpbnQgdG9wLCBpbnQgcmlnaHQsIGludCBib3R0b20pOworICAgIEludFJlY3QgaWRsZVBh
aW50UmVjdChjb25zdCBJbnRSZWN0JiB2aXNpYmxlQ29udGVudFJlY3QpOworCiAgICAgVXBkYXRh
YmxlVGlsZSogdGlsZUF0KGludCwgaW50KSBjb25zdDsKICAgICBVcGRhdGFibGVUaWxlKiBjcmVh
dGVUaWxlKGludCwgaW50KTsKIAogICAgIC8vIFRlbXBvcmFyeSBzdGF0ZSBoZWxkIGJldHdlZW4g
cHJlcGFyZVRvVXBkYXRlKCkgYW5kIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoKS4KLSAgICBJ
bnRSZWN0IG1fcmVxdWVzdGVkVXBkYXRlUmVjdDsKKyAgICBJbnRSZWN0IG1fcmVxdWVzdGVkVXBk
YXRlVGlsZXNSZWN0OworCiAgICAgLy8gU3RhdGUgaGVsZCBiZXR3ZWVuIHByZXBhcmVUb1VwZGF0
ZSgpIGFuZCBwdXNoUHJvcGVydGllc1RvKCkuIFRoaXMgcmVwcmVzZW50cyB0aGUgYXJlYQogICAg
IC8vIG9mIHRoZSBsYXllciB0aGF0IGlzIGFjdHVhbGx5IHJlLXBhaW50ZWQgYnkgV2ViS2l0Lgog
ICAgIEludFJlY3QgbV9wYWludFJlY3Q7CiAKICAgICBHQzNEZW51bSBtX3RleHR1cmVGb3JtYXQ7
CiAgICAgYm9vbCBtX3NraXBzRHJhdzsKKyAgICBib29sIG1fc2tpcHNJZGxlUGFpbnQ7CiAgICAg
TGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0IG1fc2FtcGxlZFRleGVsRm9y
bWF0OwogCiAgICAgVGlsaW5nT3B0aW9uIG1fdGlsaW5nT3B0aW9uOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdC5jcHAKaW5kZXggNzkwNjQ0MDhlZTBiYWMxMzRlY2VhZWYzMTcyZjZlY2NiMjI5
NWEwNC4uZjhkMDYzZjg0OTc1ZjY0ZDgzZThjZWU0NmVlZGRhMTc5ZWY5YzIxMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCkBAIC02Nyw2ICs2Nyw3IEBAIENDTGF5ZXJUcmVlSG9z
dDo6Q0NMYXllclRyZWVIb3N0KENDTGF5ZXJUcmVlSG9zdENsaWVudCogY2xpZW50LCBjb25zdCBD
Q1NldHRpbmdzCiAgICAgLCBtX3BhZ2VTY2FsZSgxKQogICAgICwgbV9taW5QYWdlU2NhbGUoMSkK
ICAgICAsIG1fbWF4UGFnZVNjYWxlKDEpCisgICAgLCBtX3RyaWdnZXJJZGxlUGFpbnRzKHRydWUp
CiB7CiAgICAgQVNTRVJUKENDUHJveHk6OmlzTWFpblRocmVhZCgpKTsKICAgICBudW1MYXllclRy
ZWVJbnN0YW5jZXMrKzsKQEAgLTE5MCw3ICsxOTEsOSBAQCBHcmFwaGljc0NvbnRleHQzRCogQ0NM
YXllclRyZWVIb3N0Ojpjb250ZXh0KCkKIAogYm9vbCBDQ0xheWVyVHJlZUhvc3Q6OmNvbXBvc2l0
ZUFuZFJlYWRiYWNrKHZvaWQgKnBpeGVscywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKKyAgICBt
X3RyaWdnZXJJZGxlUGFpbnRzID0gZmFsc2U7CiAgICAgcmV0dXJuIG1fcHJveHktPmNvbXBvc2l0
ZUFuZFJlYWRiYWNrKHBpeGVscywgcmVjdCk7CisgICAgbV90cmlnZ2VySWRsZVBhaW50cyA9IHRy
dWU7CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpmaW5pc2hBbGxSZW5kZXJpbmcoKQpAQCAt
Mzc1LDEwICszNzgsMzYgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnVwZGF0ZUxheWVycyhMYXll
ckNocm9taXVtKiByb290TGF5ZXIpCiAgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2Fs
Y3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3RMYXllciwgcm9vdExheWVyLCBp
ZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIG1fdXBkYXRlTGlzdCwgcm9vdFJlbmRlclN1
cmZhY2UtPmxheWVyTGlzdCgpLCBsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkubWF4VGV4dHVy
ZVNpemUpOwogICAgIH0KIAotICAgIHBhaW50TGF5ZXJDb250ZW50cyhtX3VwZGF0ZUxpc3QpOwor
ICAgIHBhaW50TGF5ZXJDb250ZW50cyhtX3VwZGF0ZUxpc3QsIFBhaW50VmlzaWJsZSk7CisgICAg
aWYgKCFtX3RyaWdnZXJJZGxlUGFpbnRzKQorICAgICAgICByZXR1cm47CisKKyAgICBzaXplX3Qg
cHJlZmVycmVkTGltaXRCeXRlcyA9IFRleHR1cmVNYW5hZ2VyOjpyZWNsYWltTGltaXRCeXRlcyht
X3ZpZXdwb3J0U2l6ZSk7CisgICAgc2l6ZV90IG1heExpbWl0Qnl0ZXMgPSBUZXh0dXJlTWFuYWdl
cjo6aGlnaExpbWl0Qnl0ZXMobV92aWV3cG9ydFNpemUpOworICAgIGNvbnRlbnRzVGV4dHVyZU1h
bmFnZXIoKS0+cmVkdWNlTWVtb3J5VG9MaW1pdChwcmVmZXJyZWRMaW1pdEJ5dGVzKTsKKyAgICBp
ZiAoY29udGVudHNUZXh0dXJlTWFuYWdlcigpLT5jdXJyZW50TWVtb3J5VXNlQnl0ZXMoKSA+PSBw
cmVmZXJyZWRMaW1pdEJ5dGVzKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBJZGxlIHBhaW50
aW5nIHNob3VsZCBmYWlsIHdoZW4gd2UgaGl0IHRoZSBwcmVmZXJyZWQgbWVtb3J5IGxpbWl0LAor
ICAgIC8vIG90aGVyd2lzZSBpdCB3aWxsIGFsd2F5cyBwdXNoIHVzIHRvd2FyZHMgdGhlIG1heGlt
dW0gbGltaXQuCisgICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT5zZXRNYXhNZW1vcnlMaW1p
dEJ5dGVzKHByZWZlcnJlZExpbWl0Qnl0ZXMpOworICAgIC8vIFRoZSBzZWNvbmQgKGlkbGUpIHBh
aW50IHdpbGwgYmUgYSBuby1vcCBpbiBsYXllcnMgd2hlcmUgcGFpbnRpbmcgYWxyZWFkeSBvY2N1
cmVkIGFib3ZlLgorICAgIHBhaW50TGF5ZXJDb250ZW50cyhtX3VwZGF0ZUxpc3QsIFBhaW50SWRs
ZSk7CisgICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT5zZXRNYXhNZW1vcnlMaW1pdEJ5dGVz
KG1heExpbWl0Qnl0ZXMpOworfQorCisvLyBzdGF0aWMKK3ZvaWQgQ0NMYXllclRyZWVIb3N0Ojpw
YWludENvbnRlbnRzSWZEaXJ0eShMYXllckNocm9taXVtKiBsYXllciwgUGFpbnRUeXBlIHBhaW50
VHlwZSkKK3sKKyAgICBBU1NFUlQobGF5ZXIpOworICAgIEFTU0VSVChQYWludFZpc2libGUgPT0g
cGFpbnRUeXBlIHx8IFBhaW50SWRsZSA9PSBwYWludFR5cGUpOworICAgIGlmIChQYWludFZpc2li
bGUgPT0gcGFpbnRUeXBlKQorICAgICAgICBsYXllci0+cGFpbnRDb250ZW50c0lmRGlydHkoKTsK
KyAgICBlbHNlCisgICAgICAgIGxheWVyLT5pZGxlUGFpbnRDb250ZW50c0lmRGlydHkoKTsKIH0K
IAotdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnBhaW50TWFza0FuZFJlcGxpY2FGb3JSZW5kZXJTdXJm
YWNlKExheWVyQ2hyb21pdW0qIHJlbmRlclN1cmZhY2VMYXllcikKK3ZvaWQgQ0NMYXllclRyZWVI
b3N0OjpwYWludE1hc2tBbmRSZXBsaWNhRm9yUmVuZGVyU3VyZmFjZShMYXllckNocm9taXVtKiBy
ZW5kZXJTdXJmYWNlTGF5ZXIsIFBhaW50VHlwZSBwYWludFR5cGUpCiB7CiAgICAgLy8gTm90ZTog
TWFza3MgYW5kIHJlcGxpY2FzIG9ubHkgZXhpc3QgZm9yIGxheWVycyB0aGF0IG93biByZW5kZXIg
c3VyZmFjZXMuIElmIHdlIHJlYWNoIHRoaXMgcG9pbnQKICAgICAvLyBpbiBjb2RlLCB3ZSBhbHJl
YWR5IGtub3cgdGhhdCBhdCBsZWFzdCBzb21ldGhpbmcgd2lsbCBiZSBkcmF3biBpbnRvIHRoaXMg
cmVuZGVyIHN1cmZhY2UsIHNvIHRoZQpAQCAtMzg2LDIyICs0MTUsMjIgQEAgdm9pZCBDQ0xheWVy
VHJlZUhvc3Q6OnBhaW50TWFza0FuZFJlcGxpY2FGb3JSZW5kZXJTdXJmYWNlKExheWVyQ2hyb21p
dW0qIHJlbmRlclMKIAogICAgIGlmIChyZW5kZXJTdXJmYWNlTGF5ZXItPm1hc2tMYXllcigpKSB7
CiAgICAgICAgIHJlbmRlclN1cmZhY2VMYXllci0+bWFza0xheWVyKCktPnNldFZpc2libGVMYXll
clJlY3QoSW50UmVjdChJbnRQb2ludCgpLCByZW5kZXJTdXJmYWNlTGF5ZXItPmNvbnRlbnRCb3Vu
ZHMoKSkpOwotICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXItPm1hc2tMYXllcigpLT5wYWludENv
bnRlbnRzSWZEaXJ0eSgpOworICAgICAgICBwYWludENvbnRlbnRzSWZEaXJ0eShyZW5kZXJTdXJm
YWNlTGF5ZXItPm1hc2tMYXllcigpLCBwYWludFR5cGUpOwogICAgIH0KIAogICAgIExheWVyQ2hy
b21pdW0qIHJlcGxpY2FMYXllciA9IHJlbmRlclN1cmZhY2VMYXllci0+cmVwbGljYUxheWVyKCk7
CiAgICAgaWYgKHJlcGxpY2FMYXllcikgewogCi0gICAgICAgIHJlcGxpY2FMYXllci0+cGFpbnRD
b250ZW50c0lmRGlydHkoKTsKKyAgICAgICAgcGFpbnRDb250ZW50c0lmRGlydHkocmVwbGljYUxh
eWVyLCBwYWludFR5cGUpOwogCiAgICAgICAgIGlmIChyZXBsaWNhTGF5ZXItPm1hc2tMYXllcigp
KSB7CiAgICAgICAgICAgICByZXBsaWNhTGF5ZXItPm1hc2tMYXllcigpLT5zZXRWaXNpYmxlTGF5
ZXJSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgcmVwbGljYUxheWVyLT5tYXNrTGF5ZXIoKS0+Y29u
dGVudEJvdW5kcygpKSk7Ci0gICAgICAgICAgICByZXBsaWNhTGF5ZXItPm1hc2tMYXllcigpLT5w
YWludENvbnRlbnRzSWZEaXJ0eSgpOworICAgICAgICAgICAgcGFpbnRDb250ZW50c0lmRGlydHko
cmVwbGljYUxheWVyLT5tYXNrTGF5ZXIoKSwgcGFpbnRUeXBlKTsKICAgICAgICAgfQogICAgIH0K
IH0KIAotdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnBhaW50TGF5ZXJDb250ZW50cyhjb25zdCBMYXll
ckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QpCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6cGFp
bnRMYXllckNvbnRlbnRzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwg
UGFpbnRUeXBlIHBhaW50VHlwZSkKIHsKICAgICBmb3IgKGludCBzdXJmYWNlSW5kZXggPSByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSAtIDE7IHN1cmZhY2VJbmRleCA+PSAwIDsgLS1zdXJm
YWNlSW5kZXgpIHsKICAgICAgICAgTGF5ZXJDaHJvbWl1bSogcmVuZGVyU3VyZmFjZUxheWVyID0g
cmVuZGVyU3VyZmFjZUxheWVyTGlzdFtzdXJmYWNlSW5kZXhdLmdldCgpOwpAQCAtNDA5LDcgKzQz
OCw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpwYWludExheWVyQ29udGVudHMoY29uc3QgTGF5
ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0CiAgICAgICAgIEFTU0VSVChyZW5kZXJTdXJm
YWNlKTsKICAgICAgICAgQVNTRVJUKHJlbmRlclN1cmZhY2UtPmRyYXdPcGFjaXR5KCkpOwogCi0g
ICAgICAgIHBhaW50TWFza0FuZFJlcGxpY2FGb3JSZW5kZXJTdXJmYWNlKHJlbmRlclN1cmZhY2VM
YXllcik7CisgICAgICAgIHBhaW50TWFza0FuZFJlcGxpY2FGb3JSZW5kZXJTdXJmYWNlKHJlbmRl
clN1cmZhY2VMYXllciwgcGFpbnRUeXBlKTsKIAogICAgICAgICBjb25zdCBMYXllckxpc3QmIGxh
eWVyTGlzdCA9IHJlbmRlclN1cmZhY2UtPmxheWVyTGlzdCgpOwogICAgICAgICBmb3IgKHVuc2ln
bmVkIGxheWVySW5kZXggPSAwOyBsYXllckluZGV4IDwgbGF5ZXJMaXN0LnNpemUoKTsgKytsYXll
ckluZGV4KSB7CkBAIC00MjAsMTAgKzQ0OSw5IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpwYWlu
dExheWVyQ29udGVudHMoY29uc3QgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0CiAg
ICAgICAgICAgICBpZiAoQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpyZW5kZXJTdXJmYWNlQ29udHJp
YnV0ZXNUb1RhcmdldDxMYXllckNocm9taXVtPihsYXllciwgcmVuZGVyU3VyZmFjZUxheWVyLT5p
ZCgpKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgQVNTRVJUKGxh
eWVyLT5vcGFjaXR5KCkpOwogICAgICAgICAgICAgQVNTRVJUKCFsYXllci0+Ym91bmRzKCkuaXNF
bXB0eSgpKTsKIAotICAgICAgICAgICAgbGF5ZXItPnBhaW50Q29udGVudHNJZkRpcnR5KCk7Cisg
ICAgICAgICAgICBwYWludENvbnRlbnRzSWZEaXJ0eShsYXllciwgcGFpbnRUeXBlKTsKICAgICAg
ICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKaW5kZXggMmFmNDI2NjA3
NzAzNDdlNTFhOGM2MDYwZDM5ZDZlY2JiNmExNjNkNC4uNjVjZjUzODU2NTAwMzFkMzlmODNhNTNm
YTUxNjNlMTZjMTA3ZGY0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKQEAgLTIwMiw4
ICsyMDIsMTAgQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICB0eXBlZGVmIFZlY3RvcjxSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4gPiBMYXllckxpc3Q7CiAKLSAgICB2b2lkIHBhaW50TGF5ZXJDb250
ZW50cyhjb25zdCBMYXllckxpc3QmKTsKLSAgICB2b2lkIHBhaW50TWFza0FuZFJlcGxpY2FGb3JS
ZW5kZXJTdXJmYWNlKExheWVyQ2hyb21pdW0qKTsKKyAgICBlbnVtIFBhaW50VHlwZSB7IFBhaW50
VmlzaWJsZSwgUGFpbnRJZGxlIH07CisgICAgc3RhdGljIHZvaWQgcGFpbnRDb250ZW50c0lmRGly
dHkoTGF5ZXJDaHJvbWl1bSosIFBhaW50VHlwZSk7CisgICAgdm9pZCBwYWludExheWVyQ29udGVu
dHMoY29uc3QgTGF5ZXJMaXN0JiwgUGFpbnRUeXBlKTsKKyAgICB2b2lkIHBhaW50TWFza0FuZFJl
cGxpY2FGb3JSZW5kZXJTdXJmYWNlKExheWVyQ2hyb21pdW0qLCBQYWludFR5cGUpOwogCiAgICAg
dm9pZCB1cGRhdGVMYXllcnMoTGF5ZXJDaHJvbWl1bSopOwogICAgIHZvaWQgY2xlYXJQZW5kaW5n
VXBkYXRlKCk7CkBAIC0yMzQsNiArMjM2LDcgQEAgcHJpdmF0ZToKIAogICAgIGZsb2F0IG1fcGFn
ZVNjYWxlOwogICAgIGZsb2F0IG1fbWluUGFnZVNjYWxlLCBtX21heFBhZ2VTY2FsZTsKKyAgICBi
b29sIG1fdHJpZ2dlcklkbGVQYWludHM7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcAppbmRleCA5YmI3ZWRmYTQ1
MjE1MDgxZTY0OTZkMWNhMWUwYzM1OTIwYjZkOTI0Li4wMzY5ZGZkMWExZWMyYTg3MGMwYmUxN2Qw
NzBiZjg1MzQxYWRmNzk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKQEAgLTk1Myw3ICs5NTMsOCBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8Q29udGVudExheWVyQ2hyb21pdW1XaXRoVXBkYXRlVHJhY2tp
bmc+IGNyZWF0ZShDQ0xheWVyRGVsZWdhdGUgKmRlbGVnYXRlKSB7IHJldHVybiBhZG9wdFJlZihu
ZXcgQ29udGVudExheWVyQ2hyb21pdW1XaXRoVXBkYXRlVHJhY2tpbmcoZGVsZWdhdGUpKTsgfQog
CiAgICAgaW50IHBhaW50Q29udGVudHNDb3VudCgpIHsgcmV0dXJuIG1fcGFpbnRDb250ZW50c0Nv
dW50OyB9Ci0gICAgdm9pZCByZXNldFBhaW50Q29udGVudHNDb3VudCgpIHsgbV9wYWludENvbnRl
bnRzQ291bnQgPSAwOyB9CisgICAgaW50IGlkbGVQYWludENvbnRlbnRzQ291bnQoKSB7IHJldHVy
biBtX2lkbGVQYWludENvbnRlbnRzQ291bnQ7IH0KKyAgICB2b2lkIHJlc2V0UGFpbnRDb250ZW50
c0NvdW50KCkgeyBtX3BhaW50Q29udGVudHNDb3VudCA9IDA7IG1faWRsZVBhaW50Q29udGVudHND
b3VudCA9IDA7fQogCiAgICAgaW50IHVwZGF0ZUNvdW50KCkgeyByZXR1cm4gbV91cGRhdGVDb3Vu
dDsgfQogICAgIHZvaWQgcmVzZXRVcGRhdGVDb3VudCgpIHsgbV91cGRhdGVDb3VudCA9IDA7IH0K
QEAgLTk2NCw2ICs5NjUsMTIgQEAgcHVibGljOgogICAgICAgICBtX3BhaW50Q29udGVudHNDb3Vu
dCsrOwogICAgIH0KIAorICAgIHZpcnR1YWwgdm9pZCBpZGxlUGFpbnRDb250ZW50c0lmRGlydHko
KQorICAgIHsKKyAgICAgICAgQ29udGVudExheWVyQ2hyb21pdW06OmlkbGVQYWludENvbnRlbnRz
SWZEaXJ0eSgpOworICAgICAgICBtX2lkbGVQYWludENvbnRlbnRzQ291bnQrKzsKKyAgICB9CisK
ICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRl
eHQzRCogY29udGV4dCwgQ0NUZXh0dXJlVXBkYXRlciYgdXBkYXRlcikKICAgICB7CiAgICAgICAg
IENvbnRlbnRMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGNvbnRleHQs
IHVwZGF0ZXIpOwpAQCAtOTc0LDEyICs5ODEsMTQgQEAgcHJpdmF0ZToKICAgICBleHBsaWNpdCBD
b250ZW50TGF5ZXJDaHJvbWl1bVdpdGhVcGRhdGVUcmFja2luZyhDQ0xheWVyRGVsZWdhdGUgKmRl
bGVnYXRlKQogICAgICAgICA6IENvbnRlbnRMYXllckNocm9taXVtKGRlbGVnYXRlKQogICAgICAg
ICAsIG1fcGFpbnRDb250ZW50c0NvdW50KDApCisgICAgICAgICwgbV9pZGxlUGFpbnRDb250ZW50
c0NvdW50KDApCiAgICAgICAgICwgbV91cGRhdGVDb3VudCgwKQogICAgIHsKICAgICAgICAgc2V0
Qm91bmRzKEludFNpemUoMTAsIDEwKSk7CiAgICAgfQogCiAgICAgaW50IG1fcGFpbnRDb250ZW50
c0NvdW50OworICAgIGludCBtX2lkbGVQYWludENvbnRlbnRzQ291bnQ7CiAgICAgaW50IG1fdXBk
YXRlQ291bnQ7CiB9OwogCkBAIC0xMDEwLDYgKzEwMTksOSBAQCBwdWJsaWM6CiAgICAgICAgIC8v
IHBhaW50Q29udGVudHNJZkRpcnR5KCkgc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQgb25jZS4KICAg
ICAgICAgRVhQRUNUX0VRKDEsIG1fdXBkYXRlQ2hlY2tMYXllci0+cGFpbnRDb250ZW50c0NvdW50
KCkpOwogCisgICAgICAgIC8vIGlkbGVQYWludENvbnRlbnRzSWZEaXJ0eSgpIHNob3VsZCBoYXZl
IGJlZW4gY2FsbGVkIG9uY2UKKyAgICAgICAgRVhQRUNUX0VRKDEsIG1fdXBkYXRlQ2hlY2tMYXll
ci0+aWRsZVBhaW50Q29udGVudHNDb3VudCgpKTsKKwogICAgICAgICAvLyB1cGRhdGVDb21wb3Np
dG9yUmVzb3VyY2VzKCkgc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQgdGhlIHNhbWUKICAgICAgICAg
Ly8gYW1vdXQgb2YgdGltZXMgYXMgcGFpbnRDb250ZW50c0lmRGlydHkoKS4KICAgICAgICAgRVhQ
RUNUX0VRKG1fdXBkYXRlQ2hlY2tMYXllci0+cGFpbnRDb250ZW50c0NvdW50KCksCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RpbGVkTGF5ZXJDaHJvbWl1bVRlc3Qu
Y3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0
LmNwcAppbmRleCA0OWNlOGRmOGQ4OWNmMGU4YzI4ODUyZjJmMzc5MjJiZWY4MThhMTUyLi44YWI2
M2M4NzZiYjY1YWQxYjVjZTU0MDU3N2RhNTAyYWI5OTA4ZWUzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RpbGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsZWRMYXllckNocm9taXVtVGVzdC5jcHAKQEAg
LTk3LDYgKzk3LDE2IEBAIHB1YmxpYzoKICAgICAgICAgVGlsZWRMYXllckNocm9taXVtOjpwcmVw
YXJlVG9VcGRhdGUocmVjdCk7CiAgICAgfQogCisgICAgdm9pZCBwcmVwYXJlVG9VcGRhdGVJZGxl
KGNvbnN0IEludFJlY3QmIHJlY3QpCisgICAgeworICAgICAgICBUaWxlZExheWVyQ2hyb21pdW06
OnByZXBhcmVUb1VwZGF0ZUlkbGUocmVjdCk7CisgICAgfQorCisgICAgYm9vbCBuZWVkc0lkbGVQ
YWludChjb25zdCBJbnRSZWN0JiByZWN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIFRpbGVkTGF5
ZXJDaHJvbWl1bTo6bmVlZHNJZGxlUGFpbnQocmVjdCk7CisgICAgfQorCiAgICAgdmlydHVhbCBU
ZXh0dXJlTWFuYWdlciogdGV4dHVyZU1hbmFnZXIoKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmVN
YW5hZ2VyOyB9CiAKIHByaXZhdGU6CkBAIC0xMjIsNiArMTMyLDcgQEAgVEVTVChUaWxlZExheWVy
Q2hyb21pdW1UZXN0LCBwdXNoRGlydHlUaWxlcykKICAgICBDQ1RleHR1cmVVcGRhdGVyIHVwZGF0
ZXIoJnRleHR1cmVBbGxvY2F0b3IpOwogCiAgICAgLy8gVGhlIHRpbGUgc2l6ZSBpcyAxMDB4MTAw
LCBzbyB0aGlzIGludmFsaWRhdGVzIGFuZCB0aGVuIHBhaW50cyB0d28gdGlsZXMuCisgICAgbGF5
ZXItPnNldEJvdW5kcyhJbnRTaXplKDEwMCwgMjAwKSk7CiAgICAgbGF5ZXItPmludmFsaWRhdGVS
ZWN0KEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsKICAgICBsYXllci0+cHJlcGFyZVRvVXBkYXRl
KEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsKICAgICBsYXllci0+dXBkYXRlQ29tcG9zaXRvclJl
c291cmNlcygwLCB1cGRhdGVyKTsKQEAgLTE0NSw1ICsxNTYsMTA3IEBAIFRFU1QoVGlsZWRMYXll
ckNocm9taXVtVGVzdCwgcHVzaERpcnR5VGlsZXMpCiAgICAgRVhQRUNUX0ZBTFNFKGxheWVySW1w
bC0+aGFzVGlsZUF0KDAsIDEpKTsKIH0KIAorVEVTVChUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBw
dXNoSWRsZVBhaW50VGlsZXMpCit7CisgICAgT3duUHRyPFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJl
TWFuYWdlciA9IFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQsIDIqMTAyNCoxMDI0
LCAxMDI0KTsKKyAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9w
dFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwor
ICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOworICAgIFJlZlB0cjxGYWtl
Q0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsID0gYWRvcHRSZWYobmV3IEZha2VDQ1RpbGVkTGF5
ZXJJbXBsKDApKTsKKworICAgIEZha2VUZXh0dXJlQWxsb2NhdG9yIHRleHR1cmVBbGxvY2F0b3I7
CisgICAgQ0NUZXh0dXJlVXBkYXRlciB1cGRhdGVyKCZ0ZXh0dXJlQWxsb2NhdG9yKTsKKworICAg
IC8vIFRoZSB0aWxlIHNpemUgaXMgMTAweDEwMC4gU2V0dXAgNXg1IHRpbGVzIHdpdGggb25lIHZp
c2libGUgdGlsZSBpbiB0aGUgY2VudGVyLgorICAgIEludFNpemUgY29udGVudEJvdW5kcyg1MDAs
IDUwMCk7CisgICAgSW50UmVjdCBjb250ZW50UmVjdChJbnRQb2ludDo6emVybygpLCBjb250ZW50
Qm91bmRzKTsKKyAgICBJbnRSZWN0IHZpc2libGVSZWN0KDIwMCwgMjAwLCAxMDAsIDEwMCk7CisK
KyAgICAvLyBUaGlzIGludmFsaWRhdGVzIDI1IHRpbGVzIGFuZCB0aGVuIHBhaW50cyBvbmUgdmlz
aWJsZSB0aWxlLgorICAgIGxheWVyLT5zZXRCb3VuZHMoY29udGVudEJvdW5kcyk7CisgICAgbGF5
ZXItPnNldFZpc2libGVMYXllclJlY3QodmlzaWJsZVJlY3QpOworICAgIGxheWVyLT5pbnZhbGlk
YXRlUmVjdChjb250ZW50UmVjdCk7CisgICAgbGF5ZXItPnByZXBhcmVUb1VwZGF0ZSh2aXNpYmxl
UmVjdCk7CisKKyAgICAvLyBXZSBzaG91bGQgbmVlZCBpZGxlLXBhaW50aW5nIGZvciAzeDMgdGls
ZXMgaW4gdGhlIGNlbnRlci4KKyAgICBFWFBFQ1RfVFJVRShsYXllci0+bmVlZHNJZGxlUGFpbnQo
dmlzaWJsZVJlY3QpKTsKKworICAgIGxheWVyLT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKDAs
IHVwZGF0ZXIpOworICAgIGxheWVyLT5wdXNoUHJvcGVydGllc1RvKGxheWVySW1wbC5nZXQoKSk7
CisKKyAgICAvLyBXZSBzaG91bGQgaGF2ZSBvbmUgdGlsZSBvbiB0aGUgaW1wbCBzaWRlLgorICAg
IEVYUEVDVF9UUlVFKGxheWVySW1wbC0+aGFzVGlsZUF0KDIsIDIpKTsKKworICAgIHRleHR1cmVN
YW5hZ2VyLT51bnByb3RlY3RBbGxUZXh0dXJlcygpOworCisgICAgLy8gRm9yIHRoZSBuZXh0IGZv
dXIgdXBkYXRlcywgd2Ugc2hvdWxkIGRldGVjdCB3ZSBzdGlsbCBuZWVkIGlkbGUgcGFpbnRpbmcu
CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspIHsKKyAgICAgICAgbGF5ZXItPnByZXBh
cmVUb1VwZGF0ZSh2aXNpYmxlUmVjdCk7CisgICAgICAgIEVYUEVDVF9UUlVFKGxheWVyLT5uZWVk
c0lkbGVQYWludCh2aXNpYmxlUmVjdCkpOworICAgICAgICBsYXllci0+cHJlcGFyZVRvVXBkYXRl
SWRsZSh2aXNpYmxlUmVjdCk7CisgICAgICAgIGxheWVyLT51cGRhdGVDb21wb3NpdG9yUmVzb3Vy
Y2VzKDAsIHVwZGF0ZXIpOworICAgICAgICBsYXllci0+cHVzaFByb3BlcnRpZXNUbyhsYXllcklt
cGwuZ2V0KCkpOworICAgICAgICB0ZXh0dXJlTWFuYWdlci0+dW5wcm90ZWN0QWxsVGV4dHVyZXMo
KTsKKyAgICB9CisKKyAgICAvLyBBZnRlciBmb3VyIHBhc3NlcyBvZiBpZGxlIHBhaW50aW5nLCB3
ZSBzaG91bGQgYmUgZmluaXNoZWQgcGFpbnRpbmcKKyAgICBFWFBFQ1RfRkFMU0UobGF5ZXItPm5l
ZWRzSWRsZVBhaW50KHZpc2libGVSZWN0KSk7CisKKyAgICAvLyBXZSBzaG91bGQgaGF2ZSBvbmUg
dGlsZSBzdXJyb3VuZGluZyB0aGUgdmlzaWJsZSB0aWxlIG9uIGFsbCBzaWRlcywgYnV0IG5vIG90
aGVyIHRpbGVzLgorICAgIEludFJlY3QgaWRsZVBhaW50VGlsZXMoMSwgMSwgMywgMyk7CisgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCA1OyBpKyspIHsKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGog
PCA1OyBqKyspIHsKKyAgICAgICAgICAgIGlmIChpZGxlUGFpbnRUaWxlcy5jb250YWlucyhpLCBq
KSkKKyAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRShsYXllckltcGwtPmhhc1RpbGVBdChpLCBq
KSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKGxheWVy
SW1wbC0+aGFzVGlsZUF0KGksIGopKTsKKyAgICAgICAgfQorICAgIH0KK30KKworCitURVNUKFRp
bGVkTGF5ZXJDaHJvbWl1bVRlc3QsIGlkbGVQYWludE91dE9mTWVtb3J5KQoreworICAgIC8vIFRo
ZSB0aWxlIHNpemUgaXMgMTAweDEwMC4gU2V0dXAgNXg1IHRpbGVzIHdpdGggb25lIDF4MSB2aXNp
YmxlIHRpbGUgaW4gdGhlIGNlbnRlci4KKyAgICBJbnRTaXplIGNvbnRlbnRCb3VuZHMoMzAwLCAz
MDApOworICAgIEludFJlY3QgY29udGVudFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgY29udGVudEJv
dW5kcyk7CisgICAgSW50UmVjdCB2aXNpYmxlUmVjdCgxMDAsIDEwMCwgMTAwLCAxMDApOworCisg
ICAgLy8gV2UgaGF2ZSBlbm91Z2ggbWVtb3J5IGZvciBvbmx5IHRoZSB2aXNpYmxlIHJlY3QsIHNv
IHdlIHdpbGwgcnVuIG91dCBvZiBtZW1vcnkgaW4gZmlyc3QgaWRsZSBwYWludC4KKyAgICBpbnQg
bWVtb3J5TGltaXQgPSA0ICogMTAwICogMTAwOyAvLyAyIHRpbGVzLCA0IGJ5dGVzIHBlciBwaXhl
bC4KKworICAgIE93blB0cjxUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBUZXh0dXJl
TWFuYWdlcjo6Y3JlYXRlKG1lbW9yeUxpbWl0LCBtZW1vcnlMaW1pdCAvIDIsIDEwMjQpOworICAg
IFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtl
VGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CisgICAgRGVidWdTY29w
ZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CisgICAgUmVmUHRyPEZha2VDQ1RpbGVkTGF5ZXJJ
bXBsPiBsYXllckltcGwgPSBhZG9wdFJlZihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMCkpOwor
CisgICAgRmFrZVRleHR1cmVBbGxvY2F0b3IgdGV4dHVyZUFsbG9jYXRvcjsKKyAgICBDQ1RleHR1
cmVVcGRhdGVyIHVwZGF0ZXIoJnRleHR1cmVBbGxvY2F0b3IpOworCisgICAgLy8gVGhpcyBpbnZh
bGlkYXRlcyA5IHRpbGVzIGFuZCB0aGVuIHBhaW50cyBvbmUgdmlzaWJsZSB0aWxlLgorICAgIGxh
eWVyLT5zZXRCb3VuZHMoY29udGVudEJvdW5kcyk7CisgICAgbGF5ZXItPnNldFZpc2libGVMYXll
clJlY3QodmlzaWJsZVJlY3QpOworICAgIGxheWVyLT5pbnZhbGlkYXRlUmVjdChjb250ZW50UmVj
dCk7CisgICAgbGF5ZXItPnByZXBhcmVUb1VwZGF0ZSh2aXNpYmxlUmVjdCk7CisKKyAgICAvLyBX
ZSBzaG91bGQgbmVlZCBpZGxlLXBhaW50aW5nIGZvciAzeDMgdGlsZXMgc3Vyb3VuZGluZyB2aXNp
YmxlIHRpbGUuCisgICAgRVhQRUNUX1RSVUUobGF5ZXItPm5lZWRzSWRsZVBhaW50KHZpc2libGVS
ZWN0KSk7CisKKyAgICBsYXllci0+dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcygwLCB1cGRhdGVy
KTsKKyAgICBsYXllci0+cHVzaFByb3BlcnRpZXNUbyhsYXllckltcGwuZ2V0KCkpOworCisgICAg
Ly8gV2Ugc2hvdWxkIGhhdmUgb25lIHRpbGUgb24gdGhlIGltcGwgc2lkZS4KKyAgICBFWFBFQ1Rf
VFJVRShsYXllckltcGwtPmhhc1RpbGVBdCgxLCAxKSk7CisKKyAgICB0ZXh0dXJlTWFuYWdlci0+
dW5wcm90ZWN0QWxsVGV4dHVyZXMoKTsKKyAgICBsYXllci0+cHJlcGFyZVRvVXBkYXRlKHZpc2li
bGVSZWN0KTsKKyAgICBsYXllci0+cHJlcGFyZVRvVXBkYXRlSWRsZSh2aXNpYmxlUmVjdCk7CisK
KyAgICAvLyBXZSBzaG91bGRuJ3Qgc2lnbmFsIHdlIG5lZWQgYW5vdGhlciBpZGxlIHBhaW50IGFm
dGVyIHdlIHJ1biBvdXQgb2YgbWVtb3J5LgorICAgIEVYUEVDVF9GQUxTRShsYXllci0+bmVlZHNJ
ZGxlUGFpbnQodmlzaWJsZVJlY3QpKTsKKworICAgIGxheWVyLT51cGRhdGVDb21wb3NpdG9yUmVz
b3VyY2VzKDAsIHVwZGF0ZXIpOworICAgIGxheWVyLT5wdXNoUHJvcGVydGllc1RvKGxheWVySW1w
bC5nZXQoKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlCiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119666</attachid>
            <date>2011-12-16 14:04:45 -0800</date>
            <delta_ts>2011-12-16 16:27:49 -0800</delta_ts>
            <desc>Removing oops and indenting</desc>
            <filename>bug-72686-20111216140444.patch</filename>
            <type>text/plain</type>
            <size>32418</size>
            <attacher name="Eric Penner">epenner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzMDgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2QwODc1MWIxM2EyZGM0
MzUwMDU4N2Y2OTlmY2ZhMmQ3ZTgwN2M4NC4uYzg2NjBjNTRiMGU0NTBiYjc2NzNhZWNlMDNjMzg4
NGZhZTRkOTgwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDExLTEyLTE2ICBFcmlj
IFBlbm5lciAgPGVwZW5uZXJAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIE5lZWQg
dG8gcHJlcGFpbnQgdGlsZXMgaW4gVGlsZWRMYXllckNocm9taXVtCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjY4NgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3RzOiBUaWxlZExheWVyQ2hyb21pdW1U
ZXN0IChpZGxlUGFpbnRPdXRPZk1lbW9yeSwgcHVzaElkbGVQYWludFRpbGVzKQorCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OmlkbGVQYWludENvbnRlbnRz
SWZEaXJ0eSk6IGFkZGVkIGlkbGUgcGFpbnQgZnVuY3Rpb24KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oOiBkaXR0bworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaDogZGl0dG8KKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmlkbGVQYWludENvbnRlbnRzSWZEaXJ0eSk6IGRp
dHRvCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hbmFnZXI6OnByb3RlY3RUZXh0dXJlKTog
cmVtb3ZlZCBhc3NlcnQgZm9yIHByb3RlY3RpbmcgYSB0ZXh0dXJlIHR3aWNlCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6VGlsZWRMYXllckNocm9taXVtKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6Y2xlYW51cFJlc291cmNlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNv
dXJjZXMpOiByZWZhY3RvcmluZyB0byB1c2UgdGlsZSBpbmRpY2VzCisgICAgICAgIChXZWJDb3Jl
OjpUaWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVUb1VwZGF0ZVRpbGVzKTogcmVmYWN0b3JlZCBj
b21tb24gY29kZSBhbmQgbWFkZSBpZGxlL3Zpc2libGUgdmVyc2lvbnMKKyAgICAgICAgKFdlYkNv
cmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlKTogZGl0dG8KKyAgICAgICAg
KFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlSWRsZSk6IGRpdHRv
CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06Om5lZWRzSWRsZVBhaW50KTog
CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OmlkbGVQYWludFJlY3QpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OkNDTGF5ZXJUcmVlSG9z
dCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmNvbXBvc2l0ZUFuZFJlYWRi
YWNrKTogc2V0IGZsYWcgdG8gYXZvaWQgaWRsZSBwYWludCBkdXJyaW5nIGNvbXBvc2l0ZSBhbmQg
cmVhZGJhY2sKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6dXBkYXRlTGF5ZXJz
KTogYWRkZWQgaWRsZSBmbGFnIHBhcmFtZXRlcgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRy
ZWVIb3N0OjpwYWludENvbnRlbnRzSWZEaXJ0eSk6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyVHJlZUhvc3Q6OnBhaW50TWFza0FuZFJlcGxpY2FGb3JSZW5kZXJTdXJmYWNlKTogZGl0
dG8KKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6cGFpbnRMYXllckNvbnRlbnRz
KTogY2hvb3NlcyBpZGxlIG9yIHZpc2libGUgcGFpbnQKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaDoKKwogMjAxMS0xMi0xNSAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTc0Njc3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IDA3NGNkZjg4YTQ4ZDAwZWRjYmZiODVkOWE1N2YyODRkZmQ0YmMwYjUuLjg3YjUxZWI1ZTQ1NDcw
NjliMTQwYjJiZTVmMmMwYjY4OWNkOTdkOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjEgQEAKKzIwMTEtMTItMTYgIEVyaWMgUGVubmVyICA8ZXBlbm5lckBnb29nbGUu
Y29tPgorCisgICAgICAgIFtjaHJvbWl1bV0gTmVlZCB0byBwcmVwYWludCB0aWxlcyBpbiBUaWxl
ZExheWVyQ2hyb21pdW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTcyNjg2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiB0ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcDoKKyAgICAgICAgKFdURjo6Q29u
dGVudExheWVyQ2hyb21pdW1XaXRoVXBkYXRlVHJhY2tpbmc6OmlkbGVQYWludENvbnRlbnRzQ291
bnQpOgorICAgICAgICAoV1RGOjpDb250ZW50TGF5ZXJDaHJvbWl1bVdpdGhVcGRhdGVUcmFja2lu
Zzo6cmVzZXRQYWludENvbnRlbnRzQ291bnQpOgorICAgICAgICAoV1RGOjpDb250ZW50TGF5ZXJD
aHJvbWl1bVdpdGhVcGRhdGVUcmFja2luZzo6aWRsZVBhaW50Q29udGVudHNJZkRpcnR5KToKKyAg
ICAgICAgKFdURjo6Q29udGVudExheWVyQ2hyb21pdW1XaXRoVXBkYXRlVHJhY2tpbmc6OkNvbnRl
bnRMYXllckNocm9taXVtV2l0aFVwZGF0ZVRyYWNraW5nKToKKyAgICAgICAgKFdURjo6Q0NMYXll
clRyZWVIb3N0VGVzdE9wYWNpdHlDaGFuZ2U6OmFmdGVyVGVzdCk6CisgICAgICAgICogdGVzdHMv
VGlsZWRMYXllckNocm9taXVtVGVzdC5jcHA6CisgICAgICAgIChXVEY6OkZha2VUaWxlZExheWVy
Q2hyb21pdW06OnByZXBhcmVUb1VwZGF0ZUlkbGUpOgorICAgICAgICAoV1RGOjpGYWtlVGlsZWRM
YXllckNocm9taXVtOjpuZWVkc0lkbGVQYWludCk6CisgICAgICAgIChXVEY6OlRFU1QpOgorCiAy
MDExLTEyLTE1ICBTdGVwaGVuIFdoaXRlICA8c2Vub3JibGFuY29AY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIEVuYWJsZSBDU1NfRklMVEVSUyBpbiBDaHJvbWl1bS4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVt
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRM
YXllckNocm9taXVtLmNwcAppbmRleCA3OGViN2M4MDdhZDc1NDhkZmFiMjU4YTI1YTc5YzFkNGM2
YmZmOTIyLi5jNjM5NTYzNmQ0YzM3MzIxODZiMGNlZWUxNmEzMTIxOTdkMGM5NmEwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5
ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCkBAIC0xMDgsNiArMTA4LDIwIEBAIHZvaWQg
Q29udGVudExheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHNJZkRpcnR5KCkKICAgICBtX25lZWRz
RGlzcGxheSA9IGZhbHNlOwogfQogCit2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjppZGxlUGFp
bnRDb250ZW50c0lmRGlydHkoKQoreworICAgIGlmICghZHJhd3NDb250ZW50KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCA9IHZpc2libGVMYXllclJl
Y3QoKTsKKyAgICBpZiAobGF5ZXJSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgcHJlcGFyZVRvVXBkYXRlSWRsZShsYXllclJlY3QpOworICAgIGlmIChuZWVkc0lkbGVQYWlu
dChsYXllclJlY3QpKQorICAgICAgICBzZXROZWVkc0NvbW1pdCgpOworfQorCiBib29sIENvbnRl
bnRMYXllckNocm9taXVtOjpkcmF3c0NvbnRlbnQoKSBjb25zdAogewogICAgIHJldHVybiBtX2Rl
bGVnYXRlICYmIG1fZGVsZWdhdGUtPmRyYXdzQ29udGVudCgpICYmIFRpbGVkTGF5ZXJDaHJvbWl1
bTo6ZHJhd3NDb250ZW50KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaAppbmRleCBi
ODM0ZTY3NmJkNjM0NDVhYTQ1M2IzNjVlZWUyODAyNDBmMzgwOWMxLi4wYzU3NGI1ZGZkYzBhNTcx
YjgxMWJlMDM5NzY0YWM3NWIxYzJlM2VlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVt
LmgKQEAgLTUwLDYgKzUwLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfkNvbnRlbnRMYXllckNo
cm9taXVtKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50c0lmRGlydHkoKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgaWRsZVBhaW50Q29udGVudHNJZkRpcnR5KCk7CiAKIHByb3RlY3RlZDoK
ICAgICBleHBsaWNpdCBDb250ZW50TGF5ZXJDaHJvbWl1bShDQ0xheWVyRGVsZWdhdGUqKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
Q2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyQ2hyb21pdW0uaAppbmRleCBjMmIyNzQ3NzBjMWQwZGE2MWEyMDMzYzVlZTZhNGJlN2FiOGNi
YzQ2Li43NjJhNzg3ZDg2MDVlMGZiMDQyOTIyOTQxMjI1MGVmYzhhYmI3ZDZjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVt
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJD
aHJvbWl1bS5oCkBAIC0xNjEsNiArMTYxLDcgQEAgcHVibGljOgogICAgIC8vIFRoZXNlIG1ldGhv
ZHMgdHlwaWNhbGx5IG5lZWQgdG8gYmUgb3ZlcndyaXR0ZW4gYnkgZGVyaXZlZCBjbGFzc2VzLgog
ICAgIHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQog
ICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzSWZEaXJ0eSgpIHsgfQorICAgIHZpcnR1YWwg
dm9pZCBpZGxlUGFpbnRDb250ZW50c0lmRGlydHkoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgdXBk
YXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCosIENDVGV4dHVyZVVwZGF0
ZXImKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0SXNNYXNrKGJvb2wpIHsgfQogICAgIHZpcnR1
YWwgdm9pZCB1bnJlc2VydmVDb250ZW50c1RleHR1cmUoKSB7IH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2Vy
LmNwcAppbmRleCAxMTg3NTM3ZmI5MmFjMGJlYzc4OTM4MjVlM2FiNmUzZTI1Zjk3MDM2Li4zMDIw
N2JlMzgyZWI0NDQzYWJhZDQzMTNiYzE1NDdkZDA2NWIwYWM4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFn
ZXIuY3BwCkBAIC0xNDEsNyArMTQxLDYgQEAgYm9vbCBUZXh0dXJlTWFuYWdlcjo6aXNQcm90ZWN0
ZWQoVGV4dHVyZVRva2VuIHRva2VuKQogdm9pZCBUZXh0dXJlTWFuYWdlcjo6cHJvdGVjdFRleHR1
cmUoVGV4dHVyZVRva2VuIHRva2VuKQogewogICAgIEFTU0VSVChoYXNUZXh0dXJlKHRva2VuKSk7
Ci0gICAgQVNTRVJUKCFtX3RleHR1cmVzLmdldCh0b2tlbikuaXNQcm90ZWN0ZWQpOwogICAgIFRl
eHR1cmVJbmZvIGluZm8gPSBtX3RleHR1cmVzLnRha2UodG9rZW4pOwogICAgIGluZm8uaXNQcm90
ZWN0ZWQgPSB0cnVlOwogICAgIG1fdGV4dHVyZXMuYWRkKHRva2VuLCBpbmZvKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJD
aHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9U
aWxlZExheWVyQ2hyb21pdW0uY3BwCmluZGV4IDg3Y2JhODg4MTE2NzcxNTU3Yzg1ZDYyZTcxZTU2
ZTIxYzNlNDg0MTkuLmEwZTkxMDJiOGUxYWM5ZTBmYjkyOThiNTVjNzhiNTMzY2IxMjFhMmUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVk
TGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcApAQCAtNzIsNiArNzIsNyBAQCBUaWxlZExh
eWVyQ2hyb21pdW06OlRpbGVkTGF5ZXJDaHJvbWl1bShDQ0xheWVyRGVsZWdhdGUqIGRlbGVnYXRl
KQogICAgIDogTGF5ZXJDaHJvbWl1bShkZWxlZ2F0ZSkKICAgICAsIG1fdGV4dHVyZUZvcm1hdChH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNKQogICAgICwgbV9za2lwc0RyYXcoZmFsc2Up
CisgICAgLCBtX3NraXBzSWRsZVBhaW50KGZhbHNlKQogICAgICwgbV9zYW1wbGVkVGV4ZWxGb3Jt
YXQoTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0SW52YWxpZCkKICAgICAs
IG1fdGlsaW5nT3B0aW9uKEF1dG9UaWxlKQogewpAQCAtOTIsNyArOTMsNyBAQCB2b2lkIFRpbGVk
TGF5ZXJDaHJvbWl1bTo6Y2xlYW51cFJlc291cmNlcygpCiAKICAgICBtX3RpbGVyLmNsZWFyKCk7
CiAgICAgbV9wYWludFJlY3QgPSBJbnRSZWN0KCk7Ci0gICAgbV9yZXF1ZXN0ZWRVcGRhdGVSZWN0
ID0gSW50UmVjdCgpOworICAgIG1fcmVxdWVzdGVkVXBkYXRlVGlsZXNSZWN0ID0gSW50UmVjdCgp
OwogfQogCiB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6dXBkYXRlVGlsZVNpemVBbmRUaWxpbmdP
cHRpb24oKQpAQCAtMTgyLDExICsxODMsMTMgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnVw
ZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0M0QqLCBDQ1RleHR1cmUKICAg
ICBBU1NFUlQobV9za2lwc0RyYXcgfHwgbV90aWxlcik7CiAKICAgICAvLyBQYWludGluZyBjb3Vs
ZCBjYXVzZSBjb21wb3NpdGluZyB0byBnZXQgdHVybmVkIG9mZiwgd2hpY2ggbWF5IGNhdXNlIHRo
ZSB0aWxlciB0byBiZWNvbWUgaW52YWxpZGF0ZWQgbWlkLXVwZGF0ZS4KLSAgICBpZiAobV9za2lw
c0RyYXcgfHwgbV9yZXF1ZXN0ZWRVcGRhdGVSZWN0LmlzRW1wdHkoKSB8fCAhbV90aWxlciB8fCAh
bV90aWxlci0+bnVtVGlsZXMoKSkKKyAgICBpZiAobV9za2lwc0RyYXcgfHwgbV9yZXF1ZXN0ZWRV
cGRhdGVUaWxlc1JlY3QuaXNFbXB0eSgpIHx8ICFtX3RpbGVyIHx8ICFtX3RpbGVyLT5udW1UaWxl
cygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpbnQgbGVmdCwgdG9wLCByaWdodCwgYm90dG9t
OwotICAgIG1fdGlsZXItPmNvbnRlbnRSZWN0VG9UaWxlSW5kaWNlcyhtX3JlcXVlc3RlZFVwZGF0
ZVJlY3QsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CisgICAgaW50IGxlZnQgPSBtX3JlcXVl
c3RlZFVwZGF0ZVRpbGVzUmVjdC54KCk7CisgICAgaW50IHRvcCA9IG1fcmVxdWVzdGVkVXBkYXRl
VGlsZXNSZWN0LnkoKTsKKyAgICBpbnQgcmlnaHQgPSBtX3JlcXVlc3RlZFVwZGF0ZVRpbGVzUmVj
dC5tYXhYKCkgLSAxOworICAgIGludCBib3R0b20gPSBtX3JlcXVlc3RlZFVwZGF0ZVRpbGVzUmVj
dC5tYXhZKCkgLSAxOwogICAgIGZvciAoaW50IGogPSB0b3A7IGogPD0gYm90dG9tOyArK2opIHsK
ICAgICAgICAgZm9yIChpbnQgaSA9IGxlZnQ7IGkgPD0gcmlnaHQ7ICsraSkgewogICAgICAgICAg
ICAgVXBkYXRhYmxlVGlsZSogdGlsZSA9IHRpbGVBdChpLCBqKTsKQEAgLTM0NCwzOCArMzQ3LDE3
IEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpwcm90ZWN0VGlsZVRleHR1cmVzKGNvbnN0IElu
dFJlY3QmIGNvbnRlbnRSZWN0KQogICAgIH0KIH0KIAotdm9pZCBUaWxlZExheWVyQ2hyb21pdW06
OnByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKK3ZvaWQgVGlsZWRM
YXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGVUaWxlcyhib29sIGlkbGUsIGludCBsZWZ0LCBp
bnQgdG9wLCBpbnQgcmlnaHQsIGludCBib3R0b20pCiB7Ci0gICAgaWYgKCFtX3RpbGVyKQotICAg
ICAgICBjcmVhdGVUaWxlcihpc05vbkNvbXBvc2l0ZWRDb250ZW50KCkgPyBDQ0xheWVyVGlsaW5n
RGF0YTo6Tm9Cb3JkZXJUZXhlbHMgOiBDQ0xheWVyVGlsaW5nRGF0YTo6SGFzQm9yZGVyVGV4ZWxz
KTsKLQotICAgIEFTU0VSVChtX3RpbGVyKTsKLQotICAgIG1fc2tpcHNEcmF3ID0gZmFsc2U7Ci0K
ICAgICAvLyBSZXNldCBtX3VwZGF0ZVJlY3QgZm9yIGFsbCB0aWxlcy4KICAgICBmb3IgKENDTGF5
ZXJUaWxpbmdEYXRhOjpUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbV90aWxlci0+dGls
ZXMoKS5iZWdpbigpOyBpdGVyICE9IG1fdGlsZXItPnRpbGVzKCkuZW5kKCk7ICsraXRlcikgewog
ICAgICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0gc3RhdGljX2Nhc3Q8VXBkYXRhYmxlVGlsZSo+
KGl0ZXItPnNlY29uZC5nZXQoKSk7CiAgICAgICAgIHRpbGUtPm1fdXBkYXRlUmVjdCA9IEludFJl
Y3QoKTsKICAgICB9CiAKLSAgICBpZiAoY29udGVudFJlY3QuaXNFbXB0eSgpKSB7Ci0gICAgICAg
IG1fcmVxdWVzdGVkVXBkYXRlUmVjdCA9IEludFJlY3QoKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIG1fdGlsZXItPmdyb3dMYXllclRvQ29udGFpbihjb250ZW50UmVjdCk7Ci0KLSAg
ICBpZiAoIW1fdGlsZXItPm51bVRpbGVzKCkpIHsKLSAgICAgICAgbV9yZXF1ZXN0ZWRVcGRhdGVS
ZWN0ID0gSW50UmVjdCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgLy8gQ3JlYXRl
IHRpbGVzIGFzIG5lZWRlZCwgZXhwYW5kaW5nIGEgZGlydHkgcmVjdCB0byBjb250YWluIGFsbAog
ICAgIC8vIHRoZSBkaXJ0eSByZWdpb25zIGN1cnJlbnRseSBiZWluZyBkcmF3bi4KICAgICBJbnRS
ZWN0IGRpcnR5TGF5ZXJSZWN0OwotICAgIGludCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b207Ci0g
ICAgbV90aWxlci0+Y29udGVudFJlY3RUb1RpbGVJbmRpY2VzKGNvbnRlbnRSZWN0LCBsZWZ0LCB0
b3AsIHJpZ2h0LCBib3R0b20pOwogICAgIGZvciAoaW50IGogPSB0b3A7IGogPD0gYm90dG9tOyAr
K2opIHsKICAgICAgICAgZm9yIChpbnQgaSA9IGxlZnQ7IGkgPD0gcmlnaHQ7ICsraSkgewogICAg
ICAgICAgICAgVXBkYXRhYmxlVGlsZSogdGlsZSA9IHRpbGVBdChpLCBqKTsKQEAgLTM4Niw4ICsz
NjgsMTEgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVUb1VwZGF0ZShjb25zdCBJ
bnRSZWN0JiBjb250ZW50UmVjdCkKICAgICAgICAgICAgICAgICB0aWxlLT5tX2RpcnR5TGF5ZXJS
ZWN0ID0gbV90aWxlci0+dGlsZUxheWVyUmVjdCh0aWxlKTsKIAogICAgICAgICAgICAgaWYgKCF0
aWxlLT5tYW5hZ2VkVGV4dHVyZSgpLT5yZXNlcnZlKG1fdGlsZXItPnRpbGVTaXplKCksIG1fdGV4
dHVyZUZvcm1hdCkpIHsKLSAgICAgICAgICAgICAgICBtX3NraXBzRHJhdyA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgY2xlYW51cFJlc291cmNlcygpOworICAgICAgICAgICAgICAgIG1fc2tpcHNJ
ZGxlUGFpbnQgPSB0cnVlOworICAgICAgICAgICAgICAgIGlmICghaWRsZSkgeworICAgICAgICAg
ICAgICAgICAgICBtX3NraXBzRHJhdyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGNsZWFu
dXBSZXNvdXJjZXMoKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgfQogCkBAIC0zOTUsMjIgKzM4MCwyMiBAQCB2b2lkIFRpbGVkTGF5ZXJD
aHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQogICAg
ICAgICB9CiAgICAgfQogCi0gICAgLy8gRHVlIHRvIGJvcmRlcnMsIHdoZW4gdGhlIHBhaW50IHJl
Y3QgaXMgZXh0ZW5kZWQgdG8gdGlsZSBib3VuZGFyaWVzLCBpdAotICAgIC8vIG1heSBlbmQgdXAg
b3ZlcmxhcHBpbmcgbW9yZSB0aWxlcyB0aGFuIHRoZSBvcmlnaW5hbCBjb250ZW50IHJlY3QuIFJl
Y29yZAotICAgIC8vIHRoYXQgb3JpZ2luYWwgcmVjdCBzbyB3ZSBkb24ndCB1cGxvYWQgbW9yZSB0
aWxlcyB0aGFuIG5lY2Vzc2FyeS4KLSAgICBtX3JlcXVlc3RlZFVwZGF0ZVJlY3QgPSBjb250ZW50
UmVjdDsKLQogICAgIG1fcGFpbnRSZWN0ID0gbV90aWxlci0+bGF5ZXJSZWN0VG9Db250ZW50UmVj
dChkaXJ0eUxheWVyUmVjdCk7CiAgICAgaWYgKGRpcnR5TGF5ZXJSZWN0LmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuOwogCisgICAgLy8gRHVlIHRvIGJvcmRlcnMsIHdoZW4gdGhlIHBhaW50IHJl
Y3QgaXMgZXh0ZW5kZWQgdG8gdGlsZSBib3VuZGFyaWVzLCBpdAorICAgIC8vIG1heSBlbmQgdXAg
b3ZlcmxhcHBpbmcgbW9yZSB0aWxlcyB0aGFuIHRoZSBvcmlnaW5hbCBjb250ZW50IHJlY3QuIFJl
Y29yZAorICAgIC8vIHRoZSBvcmlnaW5hbCB0aWxlcyBzbyB3ZSBkb24ndCB1cGxvYWQgbW9yZSB0
aWxlcyB0aGFuIG5lY2Vzc2FyeS4KKyAgICBpZiAoIW1fcGFpbnRSZWN0LmlzRW1wdHkoKSkKKyAg
ICAgICAgbV9yZXF1ZXN0ZWRVcGRhdGVUaWxlc1JlY3QgPSBJbnRSZWN0KGxlZnQsIHRvcCwgcmln
aHQgLSBsZWZ0ICsgMSwgYm90dG9tIC0gdG9wICsgMSk7CisKICAgICAvLyBDYWxsaW5nIHByZXBh
cmVUb1VwZGF0ZSgpIGNhbGxzIGludG8gV2ViS2l0IHRvIHBhaW50LCB3aGljaCBtYXkgaGF2ZSB0
aGUgc2lkZQogICAgIC8vIGVmZmVjdCBvZiBkaXNhYmxpbmcgY29tcG9zaXRpbmcsIHdoaWNoIGNh
dXNlcyBvdXIgcmVmZXJlbmNlIHRvIHRoZSB0ZXh0dXJlIHVwZGF0ZXIgdG8gYmUgZGVsZXRlZC4K
ICAgICAvLyBIb3dldmVyLCB3ZSBjYW4ndCBmcmVlIHRoZSBtZW1vcnkgYmFja2luZyB0aGUgR3Jh
cGhpY3NDb250ZXh0IHVudGlsIHRoZSBwYWludCBmaW5pc2hlcywKICAgICAvLyBzbyB3ZSBncmFi
IGEgbG9jYWwgcmVmZXJlbmNlIGhlcmUgdG8gaG9sZCB0aGUgdXBkYXRlciBhbGl2ZSB1bnRpbCB0
aGUgcGFpbnQgY29tcGxldGVzLgogICAgIFJlZlB0cjxMYXllclRleHR1cmVVcGRhdGVyPiBwcm90
ZWN0b3IodGV4dHVyZVVwZGF0ZXIoKSk7CiAgICAgdGV4dHVyZVVwZGF0ZXIoKS0+cHJlcGFyZVRv
VXBkYXRlKG1fcGFpbnRSZWN0LCBtX3RpbGVyLT50aWxlU2l6ZSgpLCBtX3RpbGVyLT5oYXNCb3Jk
ZXJUZXhlbHMoKSwgY29udGVudHNTY2FsZSgpKTsKLSAgICBtX3RpbGVyLT5jb250ZW50UmVjdFRv
VGlsZUluZGljZXMobV9yZXF1ZXN0ZWRVcGRhdGVSZWN0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0
b20pOwogICAgIGZvciAoaW50IGogPSB0b3A7IGogPD0gYm90dG9tOyArK2opIHsKICAgICAgICAg
Zm9yIChpbnQgaSA9IGxlZnQ7IGkgPD0gcmlnaHQ7ICsraSkgewogICAgICAgICAgICAgVXBkYXRh
YmxlVGlsZSogdGlsZSA9IHRpbGVBdChpLCBqKTsKQEAgLTQ0Miw1ICs0MjcsMTE3IEBAIHZvaWQg
VGlsZWRMYXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVu
dFJlY3QpCiAgICAgfQogfQogCisKK3ZvaWQgVGlsZWRMYXllckNocm9taXVtOjpwcmVwYXJlVG9V
cGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCit7CisgICAgaWYgKCFtX3RpbGVyKQor
ICAgICAgICBjcmVhdGVUaWxlcihpc05vbkNvbXBvc2l0ZWRDb250ZW50KCkgPyBDQ0xheWVyVGls
aW5nRGF0YTo6Tm9Cb3JkZXJUZXhlbHMgOiBDQ0xheWVyVGlsaW5nRGF0YTo6SGFzQm9yZGVyVGV4
ZWxzKTsKKworICAgIEFTU0VSVChtX3RpbGVyKTsKKworICAgIG1fc2tpcHNEcmF3ID0gZmFsc2U7
CisgICAgbV9za2lwc0lkbGVQYWludCA9IGZhbHNlOworICAgIG1fcmVxdWVzdGVkVXBkYXRlVGls
ZXNSZWN0ID0gSW50UmVjdCgpOworICAgIG1fcGFpbnRSZWN0ID0gSW50UmVjdCgpOworCisgICAg
bV90aWxlci0+Z3Jvd0xheWVyVG9Db250YWluKEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgY29u
dGVudEJvdW5kcygpKSk7CisKKyAgICBpZiAoY29udGVudFJlY3QuaXNFbXB0eSgpIHx8ICFtX3Rp
bGVyLT5udW1UaWxlcygpKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQgbGVmdCwgdG9wLCBy
aWdodCwgYm90dG9tOworICAgIG1fdGlsZXItPmNvbnRlbnRSZWN0VG9UaWxlSW5kaWNlcyhjb250
ZW50UmVjdCwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKKworICAgIHByZXBhcmVUb1VwZGF0
ZVRpbGVzKGZhbHNlLCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworfQorCit2b2lkIFRpbGVk
TGF5ZXJDaHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlSWRsZShjb25zdCBJbnRSZWN0JiBjb250ZW50
UmVjdCkKK3sKKyAgICAvLyBBYm9ydCBpZiB3ZSBoYXZlIGFscmVhZHkgcHJlcGFyZWQgYSBwYWlu
dCBvciBydW4gb3V0IG9mIG1lbW9yeS4KKyAgICBpZiAobV9za2lwc0lkbGVQYWludCB8fCAhbV9w
YWludFJlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobV90aWxl
cik7CisKKyAgICBtX3RpbGVyLT5ncm93TGF5ZXJUb0NvbnRhaW4oSW50UmVjdChJbnRQb2ludDo6
emVybygpLCBjb250ZW50Qm91bmRzKCkpKTsKKworICAgIGlmICghbV90aWxlci0+bnVtVGlsZXMo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gUHJvdGVjdCBhbnkgdGV4dHVyZXMgaW4gdGhl
IHByZS1wYWludCBhcmVhIHNvIHdlIGRvbid0IGVuZCB1cCBqdXN0CisgICAgLy8gcmVjbGFpbWlu
ZyB0aGVtIGJlbG93LgorICAgIEludFJlY3QgaWRsZVBhaW50Q29udGVudFJlY3QgPSBpZGxlUGFp
bnRSZWN0KGNvbnRlbnRSZWN0KTsKKyAgICBwcm90ZWN0VGlsZVRleHR1cmVzKGlkbGVQYWludENv
bnRlbnRSZWN0KTsKKworICAgIC8vIEV4cGFuZCBvdXR3YXJkcyB1bnRpbCB3ZSBmaW5kIGEgZGly
dHkgcm93IG9yIGNvbHVtbiB0byB1cGRhdGUuCisgICAgaW50IGxlZnQsIHRvcCwgcmlnaHQsIGJv
dHRvbTsKKyAgICBtX3RpbGVyLT5jb250ZW50UmVjdFRvVGlsZUluZGljZXMoY29udGVudFJlY3Qs
IGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CisgICAgaW50IHByZXBhaW50TGVmdCwgcHJlcGFp
bnRUb3AsIHByZXBhaW50UmlnaHQsIHByZXBhaW50Qm90dG9tOworICAgIG1fdGlsZXItPmNvbnRl
bnRSZWN0VG9UaWxlSW5kaWNlcyhpZGxlUGFpbnRDb250ZW50UmVjdCwgcHJlcGFpbnRMZWZ0LCBw
cmVwYWludFRvcCwgcHJlcGFpbnRSaWdodCwgcHJlcGFpbnRCb3R0b20pOworICAgIHdoaWxlICgh
bV9za2lwc0lkbGVQYWludCAmJiAobGVmdCA+IHByZXBhaW50TGVmdCB8fCB0b3AgPiBwcmVwYWlu
dFRvcCB8fCByaWdodCA8IHByZXBhaW50UmlnaHQgfHwgYm90dG9tIDwgcHJlcGFpbnRCb3R0b20p
KSB7CisgICAgICAgIGlmIChib3R0b20gPCBwcmVwYWludEJvdHRvbSkgeworICAgICAgICAgICAg
Kytib3R0b207CisgICAgICAgICAgICBwcmVwYXJlVG9VcGRhdGVUaWxlcyh0cnVlLCBsZWZ0LCBi
b3R0b20sIHJpZ2h0LCBib3R0b20pOworICAgICAgICAgICAgaWYgKCFtX3BhaW50UmVjdC5pc0Vt
cHR5KCkgfHwgbV9za2lwc0lkbGVQYWludCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBpZiAodG9wID4gcHJlcGFpbnRUb3ApIHsKKyAgICAgICAgICAgIC0tdG9w
OworICAgICAgICAgICAgcHJlcGFyZVRvVXBkYXRlVGlsZXModHJ1ZSwgbGVmdCwgdG9wLCByaWdo
dCwgdG9wKTsKKyAgICAgICAgICAgIGlmICghbV9wYWludFJlY3QuaXNFbXB0eSgpIHx8IG1fc2tp
cHNJZGxlUGFpbnQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKGxlZnQgPiBwcmVwYWludExlZnQpIHsKKyAgICAgICAgICAgIC0tbGVmdDsKKyAgICAgICAg
ICAgIHByZXBhcmVUb1VwZGF0ZVRpbGVzKHRydWUsIGxlZnQsIHRvcCwgbGVmdCwgYm90dG9tKTsK
KyAgICAgICAgICAgIGlmICghbV9wYWludFJlY3QuaXNFbXB0eSgpIHx8IG1fc2tpcHNJZGxlUGFp
bnQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJpZ2h0
IDwgcHJlcGFpbnRSaWdodCkgeworICAgICAgICAgICAgKytyaWdodDsKKyAgICAgICAgICAgIHBy
ZXBhcmVUb1VwZGF0ZVRpbGVzKHRydWUsIHJpZ2h0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworICAg
ICAgICAgICAgaWYgKCFtX3BhaW50UmVjdC5pc0VtcHR5KCkgfHwgbV9za2lwc0lkbGVQYWludCkK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKworYm9vbCBUaWxl
ZExheWVyQ2hyb21pdW06Om5lZWRzSWRsZVBhaW50KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0
KQoreworICAgIGlmIChtX3NraXBzSWRsZVBhaW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBBU1NFUlQobV90aWxlcik7CisKKyAgICBJbnRSZWN0IGlkbGVQYWludENvbnRlbnRSZWN0
ID0gaWRsZVBhaW50UmVjdChjb250ZW50UmVjdCk7CisKKyAgICBpbnQgbGVmdCwgdG9wLCByaWdo
dCwgYm90dG9tOworICAgIG1fdGlsZXItPmNvbnRlbnRSZWN0VG9UaWxlSW5kaWNlcyhpZGxlUGFp
bnRDb250ZW50UmVjdCwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKKyAgICBmb3IgKGludCBq
ID0gdG9wOyBqIDw9IGJvdHRvbTsgKytqKSB7CisgICAgICAgIGZvciAoaW50IGkgPSBsZWZ0OyBp
IDw9IHJpZ2h0OyArK2kpIHsKKyAgICAgICAgICAgIGlmIChtX3JlcXVlc3RlZFVwZGF0ZVRpbGVz
UmVjdC5jb250YWlucyhJbnRQb2ludChpLCBqKSkpCisgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0gdGlsZUF0KGksIGopOworICAgICAg
ICAgICAgaWYgKCF0aWxlIHx8ICF0aWxlLT5tYW5hZ2VkVGV4dHVyZSgpLT5pc1ZhbGlkKG1fdGls
ZXItPnRpbGVTaXplKCksIG1fdGV4dHVyZUZvcm1hdCkgfHwgdGlsZS0+aXNEaXJ0eSgpKQorICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBm
YWxzZTsKK30KKworSW50UmVjdCBUaWxlZExheWVyQ2hyb21pdW06OmlkbGVQYWludFJlY3QoY29u
c3QgSW50UmVjdCYgdmlzaWJsZUNvbnRlbnRSZWN0KQoreworICAgIEFTU0VSVChtX3RpbGVyKTsK
KyAgICBJbnRSZWN0IHByZXBhaW50UmVjdCA9IHZpc2libGVDb250ZW50UmVjdDsKKyAgICAvLyBG
SVhNRTogVGhpcyBjYW4gYmUgbWFkZSBhIGxvdCBsYXJnZXIgaWYgd2UgY2FuOgorICAgIC8vIC0g
cmVzZXJ2ZSBtZW1vcnkgYXQgYSBsb3dlciBwcmlvcml0eSB0aGFuIGZvciB2aXNpYmxlIGNvbnRl
bnQKKyAgICAvLyAtIG9ubHkgcmVzZXJ2ZSBpZGxlIHBhaW50IHRpbGVzIHVwIHRvIGEgbWVtb3J5
IHJlY2xhaW0gdGhyZXNob2xkIGFuZAorICAgIC8vIC0gaW5zdXJlIHdlIHBsYXkgbmljZWx5IHdp
dGggb3RoZXIgbGF5ZXJzCisgICAgcHJlcGFpbnRSZWN0LmluZmxhdGVYKG1fdGlsZXItPnRpbGVT
aXplKCkud2lkdGgoKSk7CisgICAgcHJlcGFpbnRSZWN0LmluZmxhdGVZKG1fdGlsZXItPnRpbGVT
aXplKCkuaGVpZ2h0KCkpOworICAgIHByZXBhaW50UmVjdC5pbnRlcnNlY3QoSW50UmVjdChJbnRQ
b2ludDo6emVybygpLCBjb250ZW50Qm91bmRzKCkpKTsKKyAgICByZXR1cm4gcHJlcGFpbnRSZWN0
OworfQorCiB9CiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXll
ckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9U
aWxlZExheWVyQ2hyb21pdW0uaAppbmRleCA3N2E5ZWM5MTQxZmJmYjg1ZmNjNWNjYzJiNTkwNWRh
NDA1OWQwYmFhLi40YjBjYzU1NTFjYmEwMjY4Yzg0ZWUxZjk0ZDUxZjVjZDVmZjYwY2U1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExh
eWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaApAQCAtNzUsOSArNzUsMTYgQEAgcHJvdGVjdGVkOgog
CiAgICAgLy8gU2V0IGludmFsaWRhdGlvbnMgdG8gYmUgcG90ZW50aWFsbHkgcmVwYWludGVkIGR1
cmluZyB1cGRhdGUoKS4KICAgICB2b2lkIGludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmIGNv
bnRlbnRSZWN0KTsKKwogICAgIC8vIFByZXBhcmUgZGF0YSBuZWVkZWQgdG8gdXBkYXRlIHRleHR1
cmVzIHRoYXQgaW50ZXJzZWN0IHdpdGggY29udGVudFJlY3QuCiAgICAgdm9pZCBwcmVwYXJlVG9V
cGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpOwogCisgICAgLy8gU2FtZSBhcyBhYm92
ZSwgYnV0IHRoaXMgd2lsbCB0cnkgdG8gcGFpbnQgYWRkaXRpb25hbCBzdXJyb3VuZGluZyBjb250
ZW50IGlmIGlkbGUuCisgICAgdm9pZCBwcmVwYXJlVG9VcGRhdGVJZGxlKGNvbnN0IEludFJlY3Qm
IGNvbnRlbnRSZWN0KTsKKworICAgIC8vIEFmdGVyIHByZXBhcmluZyBhbiB1cGRhdGUsIHJldHVy
bnMgdHJ1ZSBpZiBtb3JlIHByZS1wYWludGluZyBpcyBuZWVkZWQuCisgICAgYm9vbCBuZWVkc0lk
bGVQYWludChjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCk7CisKICAgICB2aXJ0dWFsIHZvaWQg
cHJvdGVjdFZpc2libGVUaWxlVGV4dHVyZXMoKTsKIAogICAgIHZpcnR1YWwgVGV4dHVyZU1hbmFn
ZXIqIHRleHR1cmVNYW5hZ2VyKCkgY29uc3Q7CkBAIC05MCwxNyArOTcsMjIgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIGNyZWF0ZVRpbGVySWZOZWVkZWQoKTsKICAgICB2b2lkIHNldFRpbGluZ09wdGlv
bihUaWxpbmdPcHRpb24pOwogCisgICAgdm9pZCBwcmVwYXJlVG9VcGRhdGVUaWxlcyhib29sIGlk
bGUsIGludCBsZWZ0LCBpbnQgdG9wLCBpbnQgcmlnaHQsIGludCBib3R0b20pOworICAgIEludFJl
Y3QgaWRsZVBhaW50UmVjdChjb25zdCBJbnRSZWN0JiB2aXNpYmxlQ29udGVudFJlY3QpOworCiAg
ICAgVXBkYXRhYmxlVGlsZSogdGlsZUF0KGludCwgaW50KSBjb25zdDsKICAgICBVcGRhdGFibGVU
aWxlKiBjcmVhdGVUaWxlKGludCwgaW50KTsKIAogICAgIC8vIFRlbXBvcmFyeSBzdGF0ZSBoZWxk
IGJldHdlZW4gcHJlcGFyZVRvVXBkYXRlKCkgYW5kIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMo
KS4KLSAgICBJbnRSZWN0IG1fcmVxdWVzdGVkVXBkYXRlUmVjdDsKKyAgICBJbnRSZWN0IG1fcmVx
dWVzdGVkVXBkYXRlVGlsZXNSZWN0OworCiAgICAgLy8gU3RhdGUgaGVsZCBiZXR3ZWVuIHByZXBh
cmVUb1VwZGF0ZSgpIGFuZCBwdXNoUHJvcGVydGllc1RvKCkuIFRoaXMgcmVwcmVzZW50cyB0aGUg
YXJlYQogICAgIC8vIG9mIHRoZSBsYXllciB0aGF0IGlzIGFjdHVhbGx5IHJlLXBhaW50ZWQgYnkg
V2ViS2l0LgogICAgIEludFJlY3QgbV9wYWludFJlY3Q7CiAKICAgICBHQzNEZW51bSBtX3RleHR1
cmVGb3JtYXQ7CiAgICAgYm9vbCBtX3NraXBzRHJhdzsKKyAgICBib29sIG1fc2tpcHNJZGxlUGFp
bnQ7CiAgICAgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0IG1fc2FtcGxl
ZFRleGVsRm9ybWF0OwogCiAgICAgVGlsaW5nT3B0aW9uIG1fdGlsaW5nT3B0aW9uOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggNzkwNjQ0MDhlZTBiYWMxMzRlY2VhZWYzMTcy
ZjZlY2NiMjI5NWEwNC4uZjhkMDYzZjg0OTc1ZjY0ZDgzZThjZWU0NmVlZGRhMTc5ZWY5YzIxMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCkBAIC02Nyw2ICs2Nyw3IEBAIENDTGF5
ZXJUcmVlSG9zdDo6Q0NMYXllclRyZWVIb3N0KENDTGF5ZXJUcmVlSG9zdENsaWVudCogY2xpZW50
LCBjb25zdCBDQ1NldHRpbmdzCiAgICAgLCBtX3BhZ2VTY2FsZSgxKQogICAgICwgbV9taW5QYWdl
U2NhbGUoMSkKICAgICAsIG1fbWF4UGFnZVNjYWxlKDEpCisgICAgLCBtX3RyaWdnZXJJZGxlUGFp
bnRzKHRydWUpCiB7CiAgICAgQVNTRVJUKENDUHJveHk6OmlzTWFpblRocmVhZCgpKTsKICAgICBu
dW1MYXllclRyZWVJbnN0YW5jZXMrKzsKQEAgLTE5MCw3ICsxOTEsOSBAQCBHcmFwaGljc0NvbnRl
eHQzRCogQ0NMYXllclRyZWVIb3N0Ojpjb250ZXh0KCkKIAogYm9vbCBDQ0xheWVyVHJlZUhvc3Q6
OmNvbXBvc2l0ZUFuZFJlYWRiYWNrKHZvaWQgKnBpeGVscywgY29uc3QgSW50UmVjdCYgcmVjdCkK
IHsKKyAgICBtX3RyaWdnZXJJZGxlUGFpbnRzID0gZmFsc2U7CiAgICAgcmV0dXJuIG1fcHJveHkt
PmNvbXBvc2l0ZUFuZFJlYWRiYWNrKHBpeGVscywgcmVjdCk7CisgICAgbV90cmlnZ2VySWRsZVBh
aW50cyA9IHRydWU7CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpmaW5pc2hBbGxSZW5kZXJp
bmcoKQpAQCAtMzc1LDEwICszNzgsMzYgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnVwZGF0ZUxh
eWVycyhMYXllckNocm9taXVtKiByb290TGF5ZXIpCiAgICAgICAgIENDTGF5ZXJUcmVlSG9zdENv
bW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3RMYXllciwgcm9v
dExheWVyLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIG1fdXBkYXRlTGlzdCwgcm9v
dFJlbmRlclN1cmZhY2UtPmxheWVyTGlzdCgpLCBsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCku
bWF4VGV4dHVyZVNpemUpOwogICAgIH0KIAotICAgIHBhaW50TGF5ZXJDb250ZW50cyhtX3VwZGF0
ZUxpc3QpOworICAgIHBhaW50TGF5ZXJDb250ZW50cyhtX3VwZGF0ZUxpc3QsIFBhaW50VmlzaWJs
ZSk7CisgICAgaWYgKCFtX3RyaWdnZXJJZGxlUGFpbnRzKQorICAgICAgICByZXR1cm47CisKKyAg
ICBzaXplX3QgcHJlZmVycmVkTGltaXRCeXRlcyA9IFRleHR1cmVNYW5hZ2VyOjpyZWNsYWltTGlt
aXRCeXRlcyhtX3ZpZXdwb3J0U2l6ZSk7CisgICAgc2l6ZV90IG1heExpbWl0Qnl0ZXMgPSBUZXh0
dXJlTWFuYWdlcjo6aGlnaExpbWl0Qnl0ZXMobV92aWV3cG9ydFNpemUpOworICAgIGNvbnRlbnRz
VGV4dHVyZU1hbmFnZXIoKS0+cmVkdWNlTWVtb3J5VG9MaW1pdChwcmVmZXJyZWRMaW1pdEJ5dGVz
KTsKKyAgICBpZiAoY29udGVudHNUZXh0dXJlTWFuYWdlcigpLT5jdXJyZW50TWVtb3J5VXNlQnl0
ZXMoKSA+PSBwcmVmZXJyZWRMaW1pdEJ5dGVzKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBJ
ZGxlIHBhaW50aW5nIHNob3VsZCBmYWlsIHdoZW4gd2UgaGl0IHRoZSBwcmVmZXJyZWQgbWVtb3J5
IGxpbWl0LAorICAgIC8vIG90aGVyd2lzZSBpdCB3aWxsIGFsd2F5cyBwdXNoIHVzIHRvd2FyZHMg
dGhlIG1heGltdW0gbGltaXQuCisgICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT5zZXRNYXhN
ZW1vcnlMaW1pdEJ5dGVzKHByZWZlcnJlZExpbWl0Qnl0ZXMpOworICAgIC8vIFRoZSBzZWNvbmQg
KGlkbGUpIHBhaW50IHdpbGwgYmUgYSBuby1vcCBpbiBsYXllcnMgd2hlcmUgcGFpbnRpbmcgYWxy
ZWFkeSBvY2N1cmVkIGFib3ZlLgorICAgIHBhaW50TGF5ZXJDb250ZW50cyhtX3VwZGF0ZUxpc3Qs
IFBhaW50SWRsZSk7CisgICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT5zZXRNYXhNZW1vcnlM
aW1pdEJ5dGVzKG1heExpbWl0Qnl0ZXMpOworfQorCisvLyBzdGF0aWMKK3ZvaWQgQ0NMYXllclRy
ZWVIb3N0OjpwYWludENvbnRlbnRzSWZEaXJ0eShMYXllckNocm9taXVtKiBsYXllciwgUGFpbnRU
eXBlIHBhaW50VHlwZSkKK3sKKyAgICBBU1NFUlQobGF5ZXIpOworICAgIEFTU0VSVChQYWludFZp
c2libGUgPT0gcGFpbnRUeXBlIHx8IFBhaW50SWRsZSA9PSBwYWludFR5cGUpOworICAgIGlmIChQ
YWludFZpc2libGUgPT0gcGFpbnRUeXBlKQorICAgICAgICBsYXllci0+cGFpbnRDb250ZW50c0lm
RGlydHkoKTsKKyAgICBlbHNlCisgICAgICAgIGxheWVyLT5pZGxlUGFpbnRDb250ZW50c0lmRGly
dHkoKTsKIH0KIAotdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnBhaW50TWFza0FuZFJlcGxpY2FGb3JS
ZW5kZXJTdXJmYWNlKExheWVyQ2hyb21pdW0qIHJlbmRlclN1cmZhY2VMYXllcikKK3ZvaWQgQ0NM
YXllclRyZWVIb3N0OjpwYWludE1hc2tBbmRSZXBsaWNhRm9yUmVuZGVyU3VyZmFjZShMYXllckNo
cm9taXVtKiByZW5kZXJTdXJmYWNlTGF5ZXIsIFBhaW50VHlwZSBwYWludFR5cGUpCiB7CiAgICAg
Ly8gTm90ZTogTWFza3MgYW5kIHJlcGxpY2FzIG9ubHkgZXhpc3QgZm9yIGxheWVycyB0aGF0IG93
biByZW5kZXIgc3VyZmFjZXMuIElmIHdlIHJlYWNoIHRoaXMgcG9pbnQKICAgICAvLyBpbiBjb2Rl
LCB3ZSBhbHJlYWR5IGtub3cgdGhhdCBhdCBsZWFzdCBzb21ldGhpbmcgd2lsbCBiZSBkcmF3biBp
bnRvIHRoaXMgcmVuZGVyIHN1cmZhY2UsIHNvIHRoZQpAQCAtMzg2LDIyICs0MTUsMjIgQEAgdm9p
ZCBDQ0xheWVyVHJlZUhvc3Q6OnBhaW50TWFza0FuZFJlcGxpY2FGb3JSZW5kZXJTdXJmYWNlKExh
eWVyQ2hyb21pdW0qIHJlbmRlclMKIAogICAgIGlmIChyZW5kZXJTdXJmYWNlTGF5ZXItPm1hc2tM
YXllcigpKSB7CiAgICAgICAgIHJlbmRlclN1cmZhY2VMYXllci0+bWFza0xheWVyKCktPnNldFZp
c2libGVMYXllclJlY3QoSW50UmVjdChJbnRQb2ludCgpLCByZW5kZXJTdXJmYWNlTGF5ZXItPmNv
bnRlbnRCb3VuZHMoKSkpOwotICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXItPm1hc2tMYXllcigp
LT5wYWludENvbnRlbnRzSWZEaXJ0eSgpOworICAgICAgICBwYWludENvbnRlbnRzSWZEaXJ0eShy
ZW5kZXJTdXJmYWNlTGF5ZXItPm1hc2tMYXllcigpLCBwYWludFR5cGUpOwogICAgIH0KIAogICAg
IExheWVyQ2hyb21pdW0qIHJlcGxpY2FMYXllciA9IHJlbmRlclN1cmZhY2VMYXllci0+cmVwbGlj
YUxheWVyKCk7CiAgICAgaWYgKHJlcGxpY2FMYXllcikgewogCi0gICAgICAgIHJlcGxpY2FMYXll
ci0+cGFpbnRDb250ZW50c0lmRGlydHkoKTsKKyAgICAgICAgcGFpbnRDb250ZW50c0lmRGlydHko
cmVwbGljYUxheWVyLCBwYWludFR5cGUpOwogCiAgICAgICAgIGlmIChyZXBsaWNhTGF5ZXItPm1h
c2tMYXllcigpKSB7CiAgICAgICAgICAgICByZXBsaWNhTGF5ZXItPm1hc2tMYXllcigpLT5zZXRW
aXNpYmxlTGF5ZXJSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgcmVwbGljYUxheWVyLT5tYXNrTGF5
ZXIoKS0+Y29udGVudEJvdW5kcygpKSk7Ci0gICAgICAgICAgICByZXBsaWNhTGF5ZXItPm1hc2tM
YXllcigpLT5wYWludENvbnRlbnRzSWZEaXJ0eSgpOworICAgICAgICAgICAgcGFpbnRDb250ZW50
c0lmRGlydHkocmVwbGljYUxheWVyLT5tYXNrTGF5ZXIoKSwgcGFpbnRUeXBlKTsKICAgICAgICAg
fQogICAgIH0KIH0KIAotdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnBhaW50TGF5ZXJDb250ZW50cyhj
b25zdCBMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QpCit2b2lkIENDTGF5ZXJUcmVl
SG9zdDo6cGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdCwgUGFpbnRUeXBlIHBhaW50VHlwZSkKIHsKICAgICBmb3IgKGludCBzdXJmYWNlSW5k
ZXggPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSAtIDE7IHN1cmZhY2VJbmRleCA+PSAw
IDsgLS1zdXJmYWNlSW5kZXgpIHsKICAgICAgICAgTGF5ZXJDaHJvbWl1bSogcmVuZGVyU3VyZmFj
ZUxheWVyID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdFtzdXJmYWNlSW5kZXhdLmdldCgpOwpAQCAt
NDA5LDcgKzQzOCw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpwYWludExheWVyQ29udGVudHMo
Y29uc3QgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0CiAgICAgICAgIEFTU0VSVChy
ZW5kZXJTdXJmYWNlKTsKICAgICAgICAgQVNTRVJUKHJlbmRlclN1cmZhY2UtPmRyYXdPcGFjaXR5
KCkpOwogCi0gICAgICAgIHBhaW50TWFza0FuZFJlcGxpY2FGb3JSZW5kZXJTdXJmYWNlKHJlbmRl
clN1cmZhY2VMYXllcik7CisgICAgICAgIHBhaW50TWFza0FuZFJlcGxpY2FGb3JSZW5kZXJTdXJm
YWNlKHJlbmRlclN1cmZhY2VMYXllciwgcGFpbnRUeXBlKTsKIAogICAgICAgICBjb25zdCBMYXll
ckxpc3QmIGxheWVyTGlzdCA9IHJlbmRlclN1cmZhY2UtPmxheWVyTGlzdCgpOwogICAgICAgICBm
b3IgKHVuc2lnbmVkIGxheWVySW5kZXggPSAwOyBsYXllckluZGV4IDwgbGF5ZXJMaXN0LnNpemUo
KTsgKytsYXllckluZGV4KSB7CkBAIC00MjAsMTAgKzQ0OSw5IEBAIHZvaWQgQ0NMYXllclRyZWVI
b3N0OjpwYWludExheWVyQ29udGVudHMoY29uc3QgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0CiAgICAgICAgICAgICBpZiAoQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpyZW5kZXJTdXJm
YWNlQ29udHJpYnV0ZXNUb1RhcmdldDxMYXllckNocm9taXVtPihsYXllciwgcmVuZGVyU3VyZmFj
ZUxheWVyLT5pZCgpKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAg
QVNTRVJUKGxheWVyLT5vcGFjaXR5KCkpOwogICAgICAgICAgICAgQVNTRVJUKCFsYXllci0+Ym91
bmRzKCkuaXNFbXB0eSgpKTsKIAotICAgICAgICAgICAgbGF5ZXItPnBhaW50Q29udGVudHNJZkRp
cnR5KCk7CisgICAgICAgICAgICBwYWludENvbnRlbnRzSWZEaXJ0eShsYXllciwgcGFpbnRUeXBl
KTsKICAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKaW5kZXgg
MmFmNDI2NjA3NzAzNDdlNTFhOGM2MDYwZDM5ZDZlY2JiNmExNjNkNC4uNjVjZjUzODU2NTAwMzFk
MzlmODNhNTNmYTUxNjNlMTZjMTA3ZGY0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgK
QEAgLTIwMiw4ICsyMDIsMTAgQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICB0eXBlZGVmIFZl
Y3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBMYXllckxpc3Q7CiAKLSAgICB2b2lkIHBhaW50
TGF5ZXJDb250ZW50cyhjb25zdCBMYXllckxpc3QmKTsKLSAgICB2b2lkIHBhaW50TWFza0FuZFJl
cGxpY2FGb3JSZW5kZXJTdXJmYWNlKExheWVyQ2hyb21pdW0qKTsKKyAgICBlbnVtIFBhaW50VHlw
ZSB7IFBhaW50VmlzaWJsZSwgUGFpbnRJZGxlIH07CisgICAgc3RhdGljIHZvaWQgcGFpbnRDb250
ZW50c0lmRGlydHkoTGF5ZXJDaHJvbWl1bSosIFBhaW50VHlwZSk7CisgICAgdm9pZCBwYWludExh
eWVyQ29udGVudHMoY29uc3QgTGF5ZXJMaXN0JiwgUGFpbnRUeXBlKTsKKyAgICB2b2lkIHBhaW50
TWFza0FuZFJlcGxpY2FGb3JSZW5kZXJTdXJmYWNlKExheWVyQ2hyb21pdW0qLCBQYWludFR5cGUp
OwogCiAgICAgdm9pZCB1cGRhdGVMYXllcnMoTGF5ZXJDaHJvbWl1bSopOwogICAgIHZvaWQgY2xl
YXJQZW5kaW5nVXBkYXRlKCk7CkBAIC0yMzQsNiArMjM2LDcgQEAgcHJpdmF0ZToKIAogICAgIGZs
b2F0IG1fcGFnZVNjYWxlOwogICAgIGZsb2F0IG1fbWluUGFnZVNjYWxlLCBtX21heFBhZ2VTY2Fs
ZTsKKyAgICBib29sIG1fdHJpZ2dlcklkbGVQYWludHM7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcAppbmRleCA5
YmI3ZWRmYTQ1MjE1MDgxZTY0OTZkMWNhMWUwYzM1OTIwYjZkOTI0Li4wMzY5ZGZkMWExZWMyYTg3
MGMwYmUxN2QwNzBiZjg1MzQxYWRmNzk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKQEAgLTk1Myw3ICs5NTMsOCBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q29udGVudExheWVyQ2hyb21pdW1XaXRoVXBk
YXRlVHJhY2tpbmc+IGNyZWF0ZShDQ0xheWVyRGVsZWdhdGUgKmRlbGVnYXRlKSB7IHJldHVybiBh
ZG9wdFJlZihuZXcgQ29udGVudExheWVyQ2hyb21pdW1XaXRoVXBkYXRlVHJhY2tpbmcoZGVsZWdh
dGUpKTsgfQogCiAgICAgaW50IHBhaW50Q29udGVudHNDb3VudCgpIHsgcmV0dXJuIG1fcGFpbnRD
b250ZW50c0NvdW50OyB9Ci0gICAgdm9pZCByZXNldFBhaW50Q29udGVudHNDb3VudCgpIHsgbV9w
YWludENvbnRlbnRzQ291bnQgPSAwOyB9CisgICAgaW50IGlkbGVQYWludENvbnRlbnRzQ291bnQo
KSB7IHJldHVybiBtX2lkbGVQYWludENvbnRlbnRzQ291bnQ7IH0KKyAgICB2b2lkIHJlc2V0UGFp
bnRDb250ZW50c0NvdW50KCkgeyBtX3BhaW50Q29udGVudHNDb3VudCA9IDA7IG1faWRsZVBhaW50
Q29udGVudHNDb3VudCA9IDA7fQogCiAgICAgaW50IHVwZGF0ZUNvdW50KCkgeyByZXR1cm4gbV91
cGRhdGVDb3VudDsgfQogICAgIHZvaWQgcmVzZXRVcGRhdGVDb3VudCgpIHsgbV91cGRhdGVDb3Vu
dCA9IDA7IH0KQEAgLTk2NCw2ICs5NjUsMTIgQEAgcHVibGljOgogICAgICAgICBtX3BhaW50Q29u
dGVudHNDb3VudCsrOwogICAgIH0KIAorICAgIHZpcnR1YWwgdm9pZCBpZGxlUGFpbnRDb250ZW50
c0lmRGlydHkoKQorICAgIHsKKyAgICAgICAgQ29udGVudExheWVyQ2hyb21pdW06OmlkbGVQYWlu
dENvbnRlbnRzSWZEaXJ0eSgpOworICAgICAgICBtX2lkbGVQYWludENvbnRlbnRzQ291bnQrKzsK
KyAgICB9CisKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFw
aGljc0NvbnRleHQzRCogY29udGV4dCwgQ0NUZXh0dXJlVXBkYXRlciYgdXBkYXRlcikKICAgICB7
CiAgICAgICAgIENvbnRlbnRMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2Vz
KGNvbnRleHQsIHVwZGF0ZXIpOwpAQCAtOTc0LDEyICs5ODEsMTQgQEAgcHJpdmF0ZToKICAgICBl
eHBsaWNpdCBDb250ZW50TGF5ZXJDaHJvbWl1bVdpdGhVcGRhdGVUcmFja2luZyhDQ0xheWVyRGVs
ZWdhdGUgKmRlbGVnYXRlKQogICAgICAgICA6IENvbnRlbnRMYXllckNocm9taXVtKGRlbGVnYXRl
KQogICAgICAgICAsIG1fcGFpbnRDb250ZW50c0NvdW50KDApCisgICAgICAgICwgbV9pZGxlUGFp
bnRDb250ZW50c0NvdW50KDApCiAgICAgICAgICwgbV91cGRhdGVDb3VudCgwKQogICAgIHsKICAg
ICAgICAgc2V0Qm91bmRzKEludFNpemUoMTAsIDEwKSk7CiAgICAgfQogCiAgICAgaW50IG1fcGFp
bnRDb250ZW50c0NvdW50OworICAgIGludCBtX2lkbGVQYWludENvbnRlbnRzQ291bnQ7CiAgICAg
aW50IG1fdXBkYXRlQ291bnQ7CiB9OwogCkBAIC0xMDEwLDYgKzEwMTksOSBAQCBwdWJsaWM6CiAg
ICAgICAgIC8vIHBhaW50Q29udGVudHNJZkRpcnR5KCkgc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQg
b25jZS4KICAgICAgICAgRVhQRUNUX0VRKDEsIG1fdXBkYXRlQ2hlY2tMYXllci0+cGFpbnRDb250
ZW50c0NvdW50KCkpOwogCisgICAgICAgIC8vIGlkbGVQYWludENvbnRlbnRzSWZEaXJ0eSgpIHNo
b3VsZCBoYXZlIGJlZW4gY2FsbGVkIG9uY2UKKyAgICAgICAgRVhQRUNUX0VRKDEsIG1fdXBkYXRl
Q2hlY2tMYXllci0+aWRsZVBhaW50Q29udGVudHNDb3VudCgpKTsKKwogICAgICAgICAvLyB1cGRh
dGVDb21wb3NpdG9yUmVzb3VyY2VzKCkgc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQgdGhlIHNhbWUK
ICAgICAgICAgLy8gYW1vdXQgb2YgdGltZXMgYXMgcGFpbnRDb250ZW50c0lmRGlydHkoKS4KICAg
ICAgICAgRVhQRUNUX0VRKG1fdXBkYXRlQ2hlY2tMYXllci0+cGFpbnRDb250ZW50c0NvdW50KCks
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RpbGVkTGF5ZXJDaHJv
bWl1bVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UaWxlZExheWVyQ2hy
b21pdW1UZXN0LmNwcAppbmRleCA0OWNlOGRmOGQ4OWNmMGU4YzI4ODUyZjJmMzc5MjJiZWY4MThh
MTUyLi44YWI2M2M4NzZiYjY1YWQxYjVjZTU0MDU3N2RhNTAyYWI5OTA4ZWUzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RpbGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsZWRMYXllckNocm9taXVtVGVz
dC5jcHAKQEAgLTk3LDYgKzk3LDE2IEBAIHB1YmxpYzoKICAgICAgICAgVGlsZWRMYXllckNocm9t
aXVtOjpwcmVwYXJlVG9VcGRhdGUocmVjdCk7CiAgICAgfQogCisgICAgdm9pZCBwcmVwYXJlVG9V
cGRhdGVJZGxlKGNvbnN0IEludFJlY3QmIHJlY3QpCisgICAgeworICAgICAgICBUaWxlZExheWVy
Q2hyb21pdW06OnByZXBhcmVUb1VwZGF0ZUlkbGUocmVjdCk7CisgICAgfQorCisgICAgYm9vbCBu
ZWVkc0lkbGVQYWludChjb25zdCBJbnRSZWN0JiByZWN0KQorICAgIHsKKyAgICAgICAgcmV0dXJu
IFRpbGVkTGF5ZXJDaHJvbWl1bTo6bmVlZHNJZGxlUGFpbnQocmVjdCk7CisgICAgfQorCiAgICAg
dmlydHVhbCBUZXh0dXJlTWFuYWdlciogdGV4dHVyZU1hbmFnZXIoKSBjb25zdCB7IHJldHVybiBt
X3RleHR1cmVNYW5hZ2VyOyB9CiAKIHByaXZhdGU6CkBAIC0xMjIsNiArMTMyLDcgQEAgVEVTVChU
aWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoRGlydHlUaWxlcykKICAgICBDQ1RleHR1cmVVcGRh
dGVyIHVwZGF0ZXIoJnRleHR1cmVBbGxvY2F0b3IpOwogCiAgICAgLy8gVGhlIHRpbGUgc2l6ZSBp
cyAxMDB4MTAwLCBzbyB0aGlzIGludmFsaWRhdGVzIGFuZCB0aGVuIHBhaW50cyB0d28gdGlsZXMu
CisgICAgbGF5ZXItPnNldEJvdW5kcyhJbnRTaXplKDEwMCwgMjAwKSk7CiAgICAgbGF5ZXItPmlu
dmFsaWRhdGVSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsKICAgICBsYXllci0+cHJlcGFy
ZVRvVXBkYXRlKEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsKICAgICBsYXllci0+dXBkYXRlQ29t
cG9zaXRvclJlc291cmNlcygwLCB1cGRhdGVyKTsKQEAgLTE0NSw1ICsxNTYsMTA3IEBAIFRFU1Qo
VGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaERpcnR5VGlsZXMpCiAgICAgRVhQRUNUX0ZBTFNF
KGxheWVySW1wbC0+aGFzVGlsZUF0KDAsIDEpKTsKIH0KIAorVEVTVChUaWxlZExheWVyQ2hyb21p
dW1UZXN0LCBwdXNoSWRsZVBhaW50VGlsZXMpCit7CisgICAgT3duUHRyPFRleHR1cmVNYW5hZ2Vy
PiB0ZXh0dXJlTWFuYWdlciA9IFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQsIDIq
MTAyNCoxMDI0LCAxMDI0KTsKKyAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5
ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5n
ZXQoKSkpOworICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOworICAgIFJl
ZlB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsID0gYWRvcHRSZWYobmV3IEZha2VD
Q1RpbGVkTGF5ZXJJbXBsKDApKTsKKworICAgIEZha2VUZXh0dXJlQWxsb2NhdG9yIHRleHR1cmVB
bGxvY2F0b3I7CisgICAgQ0NUZXh0dXJlVXBkYXRlciB1cGRhdGVyKCZ0ZXh0dXJlQWxsb2NhdG9y
KTsKKworICAgIC8vIFRoZSB0aWxlIHNpemUgaXMgMTAweDEwMC4gU2V0dXAgNXg1IHRpbGVzIHdp
dGggb25lIHZpc2libGUgdGlsZSBpbiB0aGUgY2VudGVyLgorICAgIEludFNpemUgY29udGVudEJv
dW5kcyg1MDAsIDUwMCk7CisgICAgSW50UmVjdCBjb250ZW50UmVjdChJbnRQb2ludDo6emVybygp
LCBjb250ZW50Qm91bmRzKTsKKyAgICBJbnRSZWN0IHZpc2libGVSZWN0KDIwMCwgMjAwLCAxMDAs
IDEwMCk7CisKKyAgICAvLyBUaGlzIGludmFsaWRhdGVzIDI1IHRpbGVzIGFuZCB0aGVuIHBhaW50
cyBvbmUgdmlzaWJsZSB0aWxlLgorICAgIGxheWVyLT5zZXRCb3VuZHMoY29udGVudEJvdW5kcyk7
CisgICAgbGF5ZXItPnNldFZpc2libGVMYXllclJlY3QodmlzaWJsZVJlY3QpOworICAgIGxheWVy
LT5pbnZhbGlkYXRlUmVjdChjb250ZW50UmVjdCk7CisgICAgbGF5ZXItPnByZXBhcmVUb1VwZGF0
ZSh2aXNpYmxlUmVjdCk7CisKKyAgICAvLyBXZSBzaG91bGQgbmVlZCBpZGxlLXBhaW50aW5nIGZv
ciAzeDMgdGlsZXMgaW4gdGhlIGNlbnRlci4KKyAgICBFWFBFQ1RfVFJVRShsYXllci0+bmVlZHNJ
ZGxlUGFpbnQodmlzaWJsZVJlY3QpKTsKKworICAgIGxheWVyLT51cGRhdGVDb21wb3NpdG9yUmVz
b3VyY2VzKDAsIHVwZGF0ZXIpOworICAgIGxheWVyLT5wdXNoUHJvcGVydGllc1RvKGxheWVySW1w
bC5nZXQoKSk7CisKKyAgICAvLyBXZSBzaG91bGQgaGF2ZSBvbmUgdGlsZSBvbiB0aGUgaW1wbCBz
aWRlLgorICAgIEVYUEVDVF9UUlVFKGxheWVySW1wbC0+aGFzVGlsZUF0KDIsIDIpKTsKKworICAg
IHRleHR1cmVNYW5hZ2VyLT51bnByb3RlY3RBbGxUZXh0dXJlcygpOworCisgICAgLy8gRm9yIHRo
ZSBuZXh0IGZvdXIgdXBkYXRlcywgd2Ugc2hvdWxkIGRldGVjdCB3ZSBzdGlsbCBuZWVkIGlkbGUg
cGFpbnRpbmcuCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspIHsKKyAgICAgICAgbGF5
ZXItPnByZXBhcmVUb1VwZGF0ZSh2aXNpYmxlUmVjdCk7CisgICAgICAgIEVYUEVDVF9UUlVFKGxh
eWVyLT5uZWVkc0lkbGVQYWludCh2aXNpYmxlUmVjdCkpOworICAgICAgICBsYXllci0+cHJlcGFy
ZVRvVXBkYXRlSWRsZSh2aXNpYmxlUmVjdCk7CisgICAgICAgIGxheWVyLT51cGRhdGVDb21wb3Np
dG9yUmVzb3VyY2VzKDAsIHVwZGF0ZXIpOworICAgICAgICBsYXllci0+cHVzaFByb3BlcnRpZXNU
byhsYXllckltcGwuZ2V0KCkpOworICAgICAgICB0ZXh0dXJlTWFuYWdlci0+dW5wcm90ZWN0QWxs
VGV4dHVyZXMoKTsKKyAgICB9CisKKyAgICAvLyBBZnRlciBmb3VyIHBhc3NlcyBvZiBpZGxlIHBh
aW50aW5nLCB3ZSBzaG91bGQgYmUgZmluaXNoZWQgcGFpbnRpbmcKKyAgICBFWFBFQ1RfRkFMU0Uo
bGF5ZXItPm5lZWRzSWRsZVBhaW50KHZpc2libGVSZWN0KSk7CisKKyAgICAvLyBXZSBzaG91bGQg
aGF2ZSBvbmUgdGlsZSBzdXJyb3VuZGluZyB0aGUgdmlzaWJsZSB0aWxlIG9uIGFsbCBzaWRlcywg
YnV0IG5vIG90aGVyIHRpbGVzLgorICAgIEludFJlY3QgaWRsZVBhaW50VGlsZXMoMSwgMSwgMywg
Myk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA1OyBpKyspIHsKKyAgICAgICAgZm9yIChpbnQg
aiA9IDA7IGogPCA1OyBqKyspIHsKKyAgICAgICAgICAgIGlmIChpZGxlUGFpbnRUaWxlcy5jb250
YWlucyhpLCBqKSkKKyAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRShsYXllckltcGwtPmhhc1Rp
bGVBdChpLCBqKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgRVhQRUNUX0ZB
TFNFKGxheWVySW1wbC0+aGFzVGlsZUF0KGksIGopKTsKKyAgICAgICAgfQorICAgIH0KK30KKwor
CitURVNUKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIGlkbGVQYWludE91dE9mTWVtb3J5KQorewor
ICAgIC8vIFRoZSB0aWxlIHNpemUgaXMgMTAweDEwMC4gU2V0dXAgNXg1IHRpbGVzIHdpdGggb25l
IDF4MSB2aXNpYmxlIHRpbGUgaW4gdGhlIGNlbnRlci4KKyAgICBJbnRTaXplIGNvbnRlbnRCb3Vu
ZHMoMzAwLCAzMDApOworICAgIEludFJlY3QgY29udGVudFJlY3QoSW50UG9pbnQ6Onplcm8oKSwg
Y29udGVudEJvdW5kcyk7CisgICAgSW50UmVjdCB2aXNpYmxlUmVjdCgxMDAsIDEwMCwgMTAwLCAx
MDApOworCisgICAgLy8gV2UgaGF2ZSBlbm91Z2ggbWVtb3J5IGZvciBvbmx5IHRoZSB2aXNpYmxl
IHJlY3QsIHNvIHdlIHdpbGwgcnVuIG91dCBvZiBtZW1vcnkgaW4gZmlyc3QgaWRsZSBwYWludC4K
KyAgICBpbnQgbWVtb3J5TGltaXQgPSA0ICogMTAwICogMTAwOyAvLyAyIHRpbGVzLCA0IGJ5dGVz
IHBlciBwaXhlbC4KKworICAgIE93blB0cjxUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIg
PSBUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKG1lbW9yeUxpbWl0LCBtZW1vcnlMaW1pdCAvIDIsIDEw
MjQpOworICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVm
KG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CisgICAg
RGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CisgICAgUmVmUHRyPEZha2VDQ1Rp
bGVkTGF5ZXJJbXBsPiBsYXllckltcGwgPSBhZG9wdFJlZihuZXcgRmFrZUNDVGlsZWRMYXllcklt
cGwoMCkpOworCisgICAgRmFrZVRleHR1cmVBbGxvY2F0b3IgdGV4dHVyZUFsbG9jYXRvcjsKKyAg
ICBDQ1RleHR1cmVVcGRhdGVyIHVwZGF0ZXIoJnRleHR1cmVBbGxvY2F0b3IpOworCisgICAgLy8g
VGhpcyBpbnZhbGlkYXRlcyA5IHRpbGVzIGFuZCB0aGVuIHBhaW50cyBvbmUgdmlzaWJsZSB0aWxl
LgorICAgIGxheWVyLT5zZXRCb3VuZHMoY29udGVudEJvdW5kcyk7CisgICAgbGF5ZXItPnNldFZp
c2libGVMYXllclJlY3QodmlzaWJsZVJlY3QpOworICAgIGxheWVyLT5pbnZhbGlkYXRlUmVjdChj
b250ZW50UmVjdCk7CisgICAgbGF5ZXItPnByZXBhcmVUb1VwZGF0ZSh2aXNpYmxlUmVjdCk7CisK
KyAgICAvLyBXZSBzaG91bGQgbmVlZCBpZGxlLXBhaW50aW5nIGZvciAzeDMgdGlsZXMgc3Vyb3Vu
ZGluZyB2aXNpYmxlIHRpbGUuCisgICAgRVhQRUNUX1RSVUUobGF5ZXItPm5lZWRzSWRsZVBhaW50
KHZpc2libGVSZWN0KSk7CisKKyAgICBsYXllci0+dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcygw
LCB1cGRhdGVyKTsKKyAgICBsYXllci0+cHVzaFByb3BlcnRpZXNUbyhsYXllckltcGwuZ2V0KCkp
OworCisgICAgLy8gV2Ugc2hvdWxkIGhhdmUgb25lIHRpbGUgb24gdGhlIGltcGwgc2lkZS4KKyAg
ICBFWFBFQ1RfVFJVRShsYXllckltcGwtPmhhc1RpbGVBdCgxLCAxKSk7CisKKyAgICB0ZXh0dXJl
TWFuYWdlci0+dW5wcm90ZWN0QWxsVGV4dHVyZXMoKTsKKyAgICBsYXllci0+cHJlcGFyZVRvVXBk
YXRlKHZpc2libGVSZWN0KTsKKyAgICBsYXllci0+cHJlcGFyZVRvVXBkYXRlSWRsZSh2aXNpYmxl
UmVjdCk7CisKKyAgICAvLyBXZSBzaG91bGRuJ3Qgc2lnbmFsIHdlIG5lZWQgYW5vdGhlciBpZGxl
IHBhaW50IGFmdGVyIHdlIHJ1biBvdXQgb2YgbWVtb3J5LgorICAgIEVYUEVDVF9GQUxTRShsYXll
ci0+bmVlZHNJZGxlUGFpbnQodmlzaWJsZVJlY3QpKTsKKworICAgIGxheWVyLT51cGRhdGVDb21w
b3NpdG9yUmVzb3VyY2VzKDAsIHVwZGF0ZXIpOworICAgIGxheWVyLT5wdXNoUHJvcGVydGllc1Rv
KGxheWVySW1wbC5nZXQoKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlCiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>