<?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>70103</bug_id>
          
          <creation_ts>2011-10-14 05:40:24 -0700</creation_ts>
          <short_desc>[chromium] Implement position:fixed in compositor thread</short_desc>
          <delta_ts>2012-06-11 14:39:21 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</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>78864</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Hin-Chung Lam">hclam</reporter>
          <assigned_to name="Shawn Singh">shawnsingh</assigned_to>
          <cc>andersca</cc>
    
    <cc>anilsson</cc>
    
    <cc>cc-bugs</cc>
    
    <cc>danakj</cc>
    
    <cc>dglazkov</cc>
    
    <cc>enne</cc>
    
    <cc>gustavo</cc>
    
    <cc>husky</cc>
    
    <cc>jamesr</cc>
    
    <cc>noam</cc>
    
    <cc>sam</cc>
    
    <cc>shawnsingh</cc>
    
    <cc>skyostil</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>vangelis</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>483935</commentid>
    <comment_count>0</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2011-10-14 05:40:24 -0700</bug_when>
    <thetext>One of the feature missing in compositor thread is position:fixed. This needs to get implemented.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483939</commentid>
    <comment_count>1</comment_count>
      <attachid>111002</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2011-10-14 05:46:02 -0700</bug_when>
    <thetext>Created attachment 111002
Work in progress demo

This is really a work in progress as I&apos;m trying to get familiar with the code. This patch is based on Vangelis&apos;s change and added change to CCLayerTreeHostCommon.cpp that implements the idea I described.

The algorithm is pretty simple, as we recursively compute the draw transform, keep a copy with scroll delta translation, then when we hit a layer that doesn&apos;t want scrolling then it switches to the unscrolled draw transform. This will keep all the children to have maintain proper transformation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484033</commentid>
    <comment_count>2</comment_count>
      <attachid>111002</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-10-14 10:00:46 -0700</bug_when>
    <thetext>Comment on attachment 111002
Work in progress demo

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

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:136
&gt; +

I generally expect that fixed position layers will be the exception rather than the rule. In addition scroll deltas will only happen when running on the thread. I would prefer to pay the penalty of adjusting the transform only when really necessary.  In other words, as we descend the layer hierarchy, if we find a fixed position layer then walk upwards until the enclosing scrolling parent and compute the transform delta.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484747</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-16 00:52:27 -0700</bug_when>
    <thetext>Attachment 111002 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/page/Settings.cpp&apos;, u&apos;Sourc...&quot; exit_code: 1

Source/WebKit/chromium/src/WebCompositorImpl.cpp:36:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/chromium/src/WebCompositorImpl.cpp:122:  Missing spaces around &lt;  [whitespace/operators] [3]
Total errors found: 2 in 23 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484750</commentid>
    <comment_count>4</comment_count>
      <attachid>111002</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-16 01:16:32 -0700</bug_when>
    <thetext>Comment on attachment 111002
Work in progress demo

Attachment 111002 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10073578</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487607</commentid>
    <comment_count>5</comment_count>
      <attachid>111784</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2011-10-20 09:01:46 -0700</bug_when>
    <thetext>Created attachment 111784
simple fixed element</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487608</commentid>
    <comment_count>6</comment_count>
      <attachid>111785</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2011-10-20 09:02:09 -0700</bug_when>
    <thetext>Created attachment 111785
fixed element in iframe</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487609</commentid>
    <comment_count>7</comment_count>
      <attachid>111786</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2011-10-20 09:02:36 -0700</bug_when>
    <thetext>Created attachment 111786
fixed element with parent transform</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487610</commentid>
    <comment_count>8</comment_count>
      <attachid>111787</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2011-10-20 09:02:57 -0700</bug_when>
    <thetext>Created attachment 111787
fixed element with local transform</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487613</commentid>
    <comment_count>9</comment_count>
      <attachid>111788</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2011-10-20 09:06:03 -0700</bug_when>
    <thetext>Created attachment 111788
Work in progress, attempt 2

The is the second attempt for implementing position:fixed in compositor thread.

This change assumes a position:fixed layer is a direct descendant from tree root. It walks up the tree to determine the scroll delta from parent and offset the scroll delta.

I&apos;ve tested this with various test cases I&apos;ve updated in this bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487640</commentid>
    <comment_count>10</comment_count>
      <attachid>111788</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-10-20 09:33:39 -0700</bug_when>
    <thetext>Comment on attachment 111788
Work in progress, attempt 2

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

&gt; WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:91
&gt; +    return getParentScrollDelta(layer-&gt;parent()) + layer-&gt;scrollDelta();

We should only be compensating for scrollDelta of the closest enclosing scrolling frame, not all of them.

&gt; WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:184
&gt; +        position += getParentScrollDelta(layer-&gt;parent());

I&apos;m afraid I may have mislead you with my previous comments.  You&apos;ll need to first transform the frame&apos;s scroll delta to the layer&apos;s coordinate system before adjusting the position.  What you have here won&apos;t work if, for example, one of the ancestors of the fixed position layer is rotated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487652</commentid>
    <comment_count>11</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2011-10-20 09:43:39 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 111788 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=111788&amp;action=review
&gt; 
&gt; &gt; WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:91
&gt; &gt; +    return getParentScrollDelta(layer-&gt;parent()) + layer-&gt;scrollDelta();
&gt; 
&gt; We should only be compensating for scrollDelta of the closest enclosing scrolling frame, not all of them.
&gt; 
&gt; &gt; WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:184
&gt; &gt; +        position += getParentScrollDelta(layer-&gt;parent());
&gt; 
&gt; I&apos;m afraid I may have mislead you with my previous comments.  You&apos;ll need to first transform the frame&apos;s scroll delta to the layer&apos;s coordinate system before adjusting the position.  What you have here won&apos;t work if, for example, one of the ancestors of the fixed position layer is rotated.

I agree, that matches what I was expected too..

Actually I&apos;m not so sure about separating the logic for transformation of position:fixed elements (i.e. walk up the tree and walk down again to recompute transformation with scroll). I worry that we&apos;ll have to duplicate the logic for transformation in two places.. note that calculateDrawTransformsAndVisibilityInternal has side effect and I don&apos;t think it&apos;s suitable for re-computation of transformation without scroll delta.

On the other hand, if we maintain a nonscrolled transformation, most of the time it&apos;ll just be a copy of the scrolled, so we can probably shortcut the extra matrix multiplications.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>490223</commentid>
    <comment_count>12</comment_count>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-10-25 12:19:41 -0700</bug_when>
    <thetext>&gt; I agree, that matches what I was expected too..
&gt; 
&gt; Actually I&apos;m not so sure about separating the logic for transformation of position:fixed elements (i.e. walk up the tree and walk down again to recompute transformation with scroll). I worry that we&apos;ll have to duplicate the logic for transformation in two places.. note that calculateDrawTransformsAndVisibilityInternal has side effect and I don&apos;t think it&apos;s suitable for re-computation of transformation without scroll delta.
&gt; 
&gt; On the other hand, if we maintain a nonscrolled transformation, most of the time it&apos;ll just be a copy of the scrolled, so we can probably shortcut the extra matrix multiplications.

The code in CCLayerTreeHostCommon computes a &quot;screenspace&quot; transform for every layer, which accounts for the entire chain of transforms from the root to the layer.

To adjust the position of a fixed layer, we need to subtract the scroll offset of the scrolling container from the layer&apos;s current position.  However, the layer&apos;s position is expressed in the layer&apos;s parent coordinate system so we cannot apply the scroll offset directly.  We could however presumably use the screenspace transform of the parent and that of the scrolling container to compute the offset in the right space.

So if the scroll offset expressed in the container&apos;s coordinate system is given by vector o(c) and we have the following screen space matrices:

M(c) : screen space matrix for scrolling container
M(p) : screen space matrix for the parent of the fixed layer

Then: o(p) = M(p)^-1 * M(c) * o(c)

should the the scroll offset expressed in the layer&apos;s parent coordinate system.  We should be able to subtract o(p) from the current layer position to get it to stay fixed.  

This should avoid additional (and possibly unnecessary) matrix math going down the hierarchy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>492448</commentid>
    <comment_count>13</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2011-10-28 07:49:04 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; &gt; I agree, that matches what I was expected too..
&gt; &gt; 
&gt; &gt; Actually I&apos;m not so sure about separating the logic for transformation of position:fixed elements (i.e. walk up the tree and walk down again to recompute transformation with scroll). I worry that we&apos;ll have to duplicate the logic for transformation in two places.. note that calculateDrawTransformsAndVisibilityInternal has side effect and I don&apos;t think it&apos;s suitable for re-computation of transformation without scroll delta.
&gt; &gt; 
&gt; &gt; On the other hand, if we maintain a nonscrolled transformation, most of the time it&apos;ll just be a copy of the scrolled, so we can probably shortcut the extra matrix multiplications.
&gt; 
&gt; The code in CCLayerTreeHostCommon computes a &quot;screenspace&quot; transform for every layer, which accounts for the entire chain of transforms from the root to the layer.
&gt; 
&gt; To adjust the position of a fixed layer, we need to subtract the scroll offset of the scrolling container from the layer&apos;s current position.  However, the layer&apos;s position is expressed in the layer&apos;s parent coordinate system so we cannot apply the scroll offset directly.  We could however presumably use the screenspace transform of the parent and that of the scrolling container to compute the offset in the right space.
&gt; 
&gt; So if the scroll offset expressed in the container&apos;s coordinate system is given by vector o(c) and we have the following screen space matrices:
&gt; 
&gt; M(c) : screen space matrix for scrolling container
&gt; M(p) : screen space matrix for the parent of the fixed layer
&gt; 
&gt; Then: o(p) = M(p)^-1 * M(c) * o(c)
&gt; 
&gt; should the the scroll offset expressed in the layer&apos;s parent coordinate system.  We should be able to subtract o(p) from the current layer position to get it to stay fixed.  
&gt; 
&gt; This should avoid additional (and possibly unnecessary) matrix math going down the hierarchy.

I&apos;m actually thinking of a different formula to get the unscrolled screen space matrix:

M(u) : unscrolled screen matrix for the parent of the fixed layer
M(-o(c)) : local transformation matrix that reverse the scroll delta

M(u) = M(c) * M(-o(c)) * M(c)^-1 * M(p)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>493317</commentid>
    <comment_count>14</comment_count>
      <attachid>113051</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2011-10-31 08:23:51 -0700</bug_when>
    <thetext>Created attachment 113051
fixed in transformed iframe</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>493318</commentid>
    <comment_count>15</comment_count>
      <attachid>113052</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2011-10-31 08:24:22 -0700</bug_when>
    <thetext>Created attachment 113052
Patch 3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>493319</commentid>
    <comment_count>16</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2011-10-31 08:25:14 -0700</bug_when>
    <thetext>Hi Vangelis, I&apos;ve updated the patch after the discussion we had. Please take a look to see if this is ready for review or I should make more changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>493498</commentid>
    <comment_count>17</comment_count>
      <attachid>113052</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-10-31 14:29:02 -0700</bug_when>
    <thetext>Comment on attachment 113052
Patch 3

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

Patch looks good.  My main concern is the naming for the GraphicsLayer addition.  I was thinking of splitting this up to a WebKit common patch that just sets the properties on GraphicsLayer and an additional chromium-specific patch that handles scrolling.

&gt; Source/WebCore/platform/graphics/GraphicsLayer.h:362
&gt; +    bool anchorLayer() const { return m_anchorLayer; }

The word &quot;anchor&quot; is already used by &quot;anchorPoint&quot; which makes it confusing to reuse for a different purpose. Let&apos;s see what we&apos;re able to check into webkit.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:107
&gt; +template&lt;typename LayerType&gt; static IntSize enclosingAncestorScrollDelta(LayerType* layer) {

The name of this function should reflect that it adds up deltas up to the enclosing ancestor.  Maybe something like: cummulativeScrollDeltasFromEnclosingAncestor() ? 

Also, have you considered implementing it as a while() loop instead of a recursion?  It will be faster.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:209
&gt; +    // and the anchor layer.

It would be useful to add a short blurb here as to why there are no other transformations in between.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>493772</commentid>
    <comment_count>18</comment_count>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-10-31 23:53:09 -0700</bug_when>
    <thetext>One more observation:  It looks like we&apos;re not marking the right layer as a container. The scroll delta gets applied to a layer that&apos;s higher in the hierarchy so we miss it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494056</commentid>
    <comment_count>19</comment_count>
      <attachid>113199</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2011-11-01 11:57:15 -0700</bug_when>
    <thetext>Created attachment 113199
Attempt 4</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>495409</commentid>
    <comment_count>20</comment_count>
      <attachid>113475</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2011-11-03 06:28:40 -0700</bug_when>
    <thetext>Created attachment 113475
WebCore common changes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>495431</commentid>
    <comment_count>21</comment_count>
      <attachid>113481</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2011-11-03 06:58:09 -0700</bug_when>
    <thetext>Created attachment 113481
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>495433</commentid>
    <comment_count>22</comment_count>
      <attachid>113482</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2011-11-03 07:00:34 -0700</bug_when>
    <thetext>Created attachment 113482
Chromium port changes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>495480</commentid>
    <comment_count>23</comment_count>
      <attachid>113482</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-03 08:26:03 -0700</bug_when>
    <thetext>Comment on attachment 113482
Chromium port changes

Attachment 113482 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10175633</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496153</commentid>
    <comment_count>24</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2011-11-04 04:58:03 -0700</bug_when>
    <thetext>Taking reviews off since I&apos;m still making some changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>608877</commentid>
    <comment_count>25</comment_count>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2012-04-24 11:32:32 -0700</bug_when>
    <thetext>Taking over from Alpha.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>608883</commentid>
    <comment_count>26</comment_count>
      <attachid>138609</attachid>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2012-04-24 11:34:36 -0700</bug_when>
    <thetext>Created attachment 138609
Patch

WIP patch. Still missing layout tests and support for intermediate render surfaces between a fixed layer and its container. Feel free to comment, e.g., the ScrollingCoordinator integration, though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>608893</commentid>
    <comment_count>27</comment_count>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2012-04-24 11:40:12 -0700</bug_when>
    <thetext>Removing [chromium] from title since the latest patch also touches other WebCore parts. Please let me know if you&apos;d prefer me to split the patch instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>608898</commentid>
    <comment_count>28</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-24 11:44:59 -0700</bug_when>
    <thetext>Attachment 138609 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/ChangeLog:10:  You should remove the &apos;No new tests&apos; and either add and list tests, or explain why no new tests were possible.  [changelog/nonewtests] [5]
Total errors found: 1 in 17 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>608907</commentid>
    <comment_count>29</comment_count>
      <attachid>138609</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-04-24 11:56:21 -0700</bug_when>
    <thetext>Comment on attachment 138609
Patch

Attachment 138609 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/12529274</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>608916</commentid>
    <comment_count>30</comment_count>
      <attachid>138609</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-04-24 12:09:17 -0700</bug_when>
    <thetext>Comment on attachment 138609
Patch

Please at a minimum split the cross-platform bits (WebCore up to ScrollingCoordinator interface) from the chromium compositor implementation bits</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>608932</commentid>
    <comment_count>31</comment_count>
      <attachid>138609</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-04-24 12:23:13 -0700</bug_when>
    <thetext>Comment on attachment 138609
Patch

Attachment 138609 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/12523326</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>608969</commentid>
    <comment_count>32</comment_count>
      <attachid>138609</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-04-24 13:04:54 -0700</bug_when>
    <thetext>Comment on attachment 138609
Patch

Attachment 138609 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/12526346</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>608980</commentid>
    <comment_count>33</comment_count>
      <attachid>138609</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-04-24 13:14:18 -0700</bug_when>
    <thetext>Comment on attachment 138609
Patch

Attachment 138609 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/12528323</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>610593</commentid>
    <comment_count>34</comment_count>
    <who name="Iain Merrick">husky</who>
    <bug_when>2012-04-26 07:32:34 -0700</bug_when>
    <thetext>Experimenting with this patch, I found a bug: if you scroll the page, go back to the previous page, then forward again, the old scroll position is restored, but it is not taken into account in the positioning of the composited fixed-position layers. If you scroll further, the fixed-position layers pop into the correct position.

It seems like HistoryController::restoreScrollPositionAndViewState is not being propagated through to the compositor correctly. I&apos;m looking for a fix. Not sure yet if it&apos;s specific to this patch; I&apos;ll file a separate bug if it&apos;s a existing latent problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>610603</commentid>
    <comment_count>35</comment_count>
    <who name="Iain Merrick">husky</who>
    <bug_when>2012-04-26 07:49:23 -0700</bug_when>
    <thetext>OK, I think the problem is that the scroll position is restored while we&apos;re inside FrameView::layout(), and updateFixedElementsAfterScrolling() looks like this:

  void FrameView::updateFixedElementsAfterScrolling()
  {
  #if USE(ACCELERATED_COMPOSITING)
      if (!m_nestedLayoutCount &amp;&amp; hasFixedObjects()) {
          if (RenderView* root = rootRenderer(this)) {
              root-&gt;compositor()-&gt;updateCompositingLayers(CompositingUpdateOnScroll);
          }
      }
  #endif
  }

m_nestedLayoutCount is 1, so we don&apos;t call updateCompositingLayers().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>610633</commentid>
    <comment_count>36</comment_count>
    <who name="Iain Merrick">husky</who>
    <bug_when>2012-04-26 08:14:45 -0700</bug_when>
    <thetext>This bug is independent of Sami&apos;s patch. Filed as https://bugs.webkit.org/show_bug.cgi?id=84965</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611869</commentid>
    <comment_count>37</comment_count>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2012-04-27 13:55:19 -0700</bug_when>
    <thetext>This patch now depends on the WebCore changes in bug 78864.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611879</commentid>
    <comment_count>38</comment_count>
      <attachid>139271</attachid>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2012-04-27 14:03:41 -0700</bug_when>
    <thetext>Created attachment 139271
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>626799</commentid>
    <comment_count>39</comment_count>
      <attachid>142519</attachid>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2012-05-17 11:55:25 -0700</bug_when>
    <thetext>Created attachment 142519
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>626806</commentid>
    <comment_count>40</comment_count>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2012-05-17 11:56:52 -0700</bug_when>
    <thetext>N.B. the unit test in this version doesn&apos;t build since 73350 was reverted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>628156</commentid>
    <comment_count>41</comment_count>
      <attachid>142519</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-05-18 15:30:44 -0700</bug_when>
    <thetext>Comment on attachment 142519
Patch

I don&apos;t think this will even apply without 73350.  I would strongly prefer that we get 73350 landed and stabilized first so we can make sure we&apos;re on a good foundation and can test this patch as soon as landing it. Having untested and untestable code in the tree is a tax on everyone who wants to modify it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>629004</commentid>
    <comment_count>42</comment_count>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2012-05-21 05:46:07 -0700</bug_when>
    <thetext>(In reply to comment #41)
&gt; I don&apos;t think this will even apply without 73350.  I would strongly prefer that we get 73350 landed and stabilized first so we can make sure we&apos;re on a good foundation and can test this patch as soon as landing it. Having untested and untestable code in the tree is a tax on everyone who wants to modify it.

Definitely agreed. I&apos;ll get 73350 relanded before continuing with this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638314</commentid>
    <comment_count>43</comment_count>
      <attachid>145072</attachid>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2012-05-31 06:17:39 -0700</bug_when>
    <thetext>Created attachment 145072
Patch

Removed dependency on 73350 to avoid blocking this patch. Note that this still requires 78864 to be in place.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638328</commentid>
    <comment_count>44</comment_count>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2012-05-31 06:26:31 -0700</bug_when>
    <thetext>Since it&apos;s taking a while to get 73350 in shape (because I need to verify it on ChromeOS), so I opted to break the dependency between these patches. Since they are mostly orthogonal and the only linkage was in the unit tests, this didn&apos;t result in any changes in the implementation.

This latest version together with 78864 gives us compositor thread positioned fixed position layers when --enable-fixed-position-compositing is used in Chromium. Note that since I didn&apos;t change the rules for layer promotion, you also need --fixed-position-creates-stacking-context or a transform on the fixed element for this to work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638335</commentid>
    <comment_count>45</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-05-31 06:32:12 -0700</bug_when>
    <thetext>(In reply to comment #44)
&gt; Since it&apos;s taking a while to get 73350 in shape (because I need to verify it on ChromeOS), so I opted to break the dependency between these patches. Since they are mostly orthogonal and the only linkage was in the unit tests, this didn&apos;t result in any changes in the implementation.
&gt; 
&gt; This latest version together with 78864 gives us compositor thread positioned fixed position layers when --enable-fixed-position-compositing is used in Chromium. Note that since I didn&apos;t change the rules for layer promotion, you also need --fixed-position-creates-stacking-context or a transform on the fixed element for this to work.

Just curious, how do these layers behave when pageScaleFactor changes?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638421</commentid>
    <comment_count>46</comment_count>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2012-05-31 08:02:14 -0700</bug_when>
    <thetext>(In reply to comment #45)
&gt; Just curious, how do these layers behave when pageScaleFactor changes?

When page scale factor changes on the main thread, both the fixed layer and its container are scaled appropriately and the layer remains fixed relative the visible part of the container. For example, if the page scale factor increases, all layers get bigger and a fixed element starts covering a larger fraction of its container.

However, if the page scale changes as a response to a pinch gesture event on the compositor thread, it isn&apos;t applied to the fixed layers until the next commit from the main thread. Visually this means that the fixed layer drifts around while the user is pinch zooming. This isn&apos;t ideal, so I&apos;ll see if I can improve it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638797</commentid>
    <comment_count>47</comment_count>
      <attachid>145072</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2012-05-31 16:26:28 -0700</bug_when>
    <thetext>Comment on attachment 145072
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:427
&gt; +    // 2. A container layer&apos;s parent layer is a clip layer.

Do we care specifically that the parent of the container is a &quot;clip&quot; layer?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:462
&gt; +                TransformationMatrix renderSurfaceMatrix = ancestor-&gt;transform().inverse();

I&apos;m not convinced that this is correct.  It&apos;s not taking into account the anchor points of the ancestor layer which need to be used when applying the layer transform.  Should you be using the RS originTransform instead?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639586</commentid>
    <comment_count>48</comment_count>
      <attachid>145072</attachid>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2012-06-01 12:06:50 -0700</bug_when>
    <thetext>Comment on attachment 145072
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:427
&gt;&gt; +    // 2. A container layer&apos;s parent layer is a clip layer.
&gt; 
&gt; Do we care specifically that the parent of the container is a &quot;clip&quot; layer?

Not really. It is just the layer that defines the coordinate space for container layer&apos;s scroll delta. However, since scroll layers are generally contained in clip layers, I think it makes sense to call it that here.

I&apos;ve improved the comment to mention this.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:462
&gt;&gt; +                TransformationMatrix renderSurfaceMatrix = ancestor-&gt;transform().inverse();
&gt; 
&gt; I&apos;m not convinced that this is correct.  It&apos;s not taking into account the anchor points of the ancestor layer which need to be used when applying the layer transform.  Should you be using the RS originTransform instead?

originTransform() is probably more appropriate, but it cannot be used as such because we end up applying the scroll offset to the fixed layer twice.

I tried to come up with a scheme to make this work, but it needs some more thought. Essentially we need to undo the orientation of the RS relative to the screen, but how the RS&apos;s sublayer transform should be applied to the fixed position is a bit unclear. Perhaps it shouldn&apos;t apply at all, but that would break the (normal) case where the RS is the fixed position container.

Meanwhile I&apos;ll attach a test page that shows the problem with originTransform(). Note that testing other types of RS/fixed interactions interactively is a bit tricky because WebCore needs to be changed to not consider transformed elements containers for fixed position.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639593</commentid>
    <comment_count>49</comment_count>
      <attachid>145350</attachid>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2012-06-01 12:08:49 -0700</bug_when>
    <thetext>Created attachment 145350
Patch

Checkpoint, don&apos;t apply.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639594</commentid>
    <comment_count>50</comment_count>
      <attachid>145351</attachid>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2012-06-01 12:10:26 -0700</bug_when>
    <thetext>Created attachment 145351
Transformed element within a fixed element in a translucent container.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639630</commentid>
    <comment_count>51</comment_count>
      <attachid>145350</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2012-06-01 12:37:27 -0700</bug_when>
    <thetext>Comment on attachment 145350
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:465
&gt; +                // FIXME: renderSurfaceMatrix also includes the scroll offset.

I&apos;m not sure I understand.  In what cases does the RSM include the scroll offset?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>641175</commentid>
    <comment_count>52</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-06-04 21:35:36 -0700</bug_when>
    <thetext>I think the math is accidentally a little bit wrong, even for the non-renderSurface case.  The problem is that we&apos;re using clipLayer-&gt;drawTransform.  However, this does not create the intended composite matrix for what combinedTransform (the local layer&apos;s draw transform) should be.  What we really wanted was clipLayer-&gt;parentMatrix() which is actually only a temporary matrix that is never stored.  It will be extremely messy and error-prone to walk the tree and recompute that matrix - we should probably try to find a different solution first.

Writing out the math explicitly (see the huge comment in CCLayerTreeHostCommon.cpp):
   A layer&apos;s draw transform is:
   M[draw] = M[parent] * Tr[parent2origin] * compositeLayerTransform * Tr[origin2center]

  A child layer&apos;s parentMatrix is:
   M[parent]_for_child = M[parent] * Tr[parent2origin] * compositeLayerTransform * compositeSubLayerTransform

The fixed position layer, for the sake of discussion here, is the child layer.  We&apos;re trying to decompose that so that we can insert an additional translation that cancels out the scroll.

So according to the comments in this patch, we decompose M[parent]_for_child into:
   M[clip] * Tr[container] * M[descendant]

However, M[clip] is unclear here, and that&apos;s where the mistake might be.  It&apos;s not supposed to be the clip layer&apos;s draw transform.  Instead, M[clip] should probably be the parentMatrix that is inherited by the scrolling layer.  So what we really need is clipLayer-&gt;parentMatrix() which we do not actually store.

Finally, its worth pointing out that I couldn&apos;t manually test any of this yet....  even though we removed 73350 as a dependency on this patch, actually it still is a dependency in my opinion because without that patch, scrollDelta is always 0,0.  That is the only way to manually test and develop this patch further, and not having scrollDelta plumbed through just makes it impossible to reason through this math.  Tomorrow I&apos;ll try to apply that patch, to iron out the math some more.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>641184</commentid>
    <comment_count>53</comment_count>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2012-06-04 21:57:19 -0700</bug_when>
    <thetext>(In reply to comment #52)

&gt; Finally, its worth pointing out that I couldn&apos;t manually test any of this yet....  even though we removed 73350 as a dependency on this patch, actually it still is a dependency in my opinion because without that patch, scrollDelta is always 0,0. 

You should be able to get a non-zero scrollDelta with the threaded compositor by scrolling the root layer.  It may be easier though to hack in some scroll delta values directly in the code to see how the math works out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>641970</commentid>
    <comment_count>54</comment_count>
      <attachid>145886</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-06-05 15:56:50 -0700</bug_when>
    <thetext>Created attachment 145886
Another example of fixed-position with a renderSurface in-between.

the red element should be fixed, and the blue element should scroll.

the reflection behavior seems broken on stable chromium and safari, but seems correct with the new scrolling patches (probably because something gets composited/stacked differently, seems like a bug in webcore to address separately.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>641973</commentid>
    <comment_count>55</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-06-05 15:57:15 -0700</bug_when>
    <thetext>OK, I&apos;ve gotten a decently complete picture of how this works now.

Summary:
I will submit a patch that refactors this to be more intuitive and clean.  Sami&apos;s math was mostly already correct, and I&apos;ve also figured out the RenderSurface case.

Details:
In theory its slightly wrong  to use drawTransform instead of parentMatrix, but it turns out the differences are provably not going to affect the math, under current W3C specs.

There&apos;s also a much more intuitive interpretation of the math, which helps illustrate all cases in general.  Key observation: to undo the scroll, we have to apply the scroll in the space of the &quot;clip&quot; layer.  So we do the following steps (note carefully, interpreting the transforms from left-to-right):
    1. transform from fixed layer&apos;s target surface space to clip layer space.
    2. apply the &quot;undoScrollTranslation&quot;
    3. transform back to fixed layer&apos;s target surface space
    4. continue with using the normal parentMatrix, which transforms from target surface space to local layer space.

In math/code:

    scrollCompensation = clipLayerDrawTransform * undoScrollTranslation * clipLayerDrawTransform.inverse();

    if layer is fixedPosition
        combinedTransform = scrollCompensation * parentMatrix;
    else
        combinedTransform = parentMatrix;


For renderSurfaces, the same 4 steps above still apply.  But steps (1) and (3) are just a little bit more involved, because fixed layer&apos;s target surface space is not the same as clip layer&apos;s target surface space.

    localTargetSpaceToClipLayerSpace = renderSurface.originTransform.inverse() * clipLayerDrawTransform;
    scrollCompensation = localTargetSpaceToClipLayerSpace * underScrollTranslation * localTargetSpaceToClipLayerSpace.inverse();


I believe this should work correctly in all cases.

I attached my own version of the renderSurface case, too.  Both Sami&apos;s and my attachments seem to work correctly with my new patch; I&apos;ll submit the new patch after adding some more unit tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642061</commentid>
    <comment_count>56</comment_count>
      <attachid>145907</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-06-05 17:53:00 -0700</bug_when>
    <thetext>Created attachment 145907
In good condition, but still needs more unit tests

This patch passes all 7 tests attached on this bug when testing manually (using usleep() to make main thread really slow).  Changelogs and unit tests still need updating.  Compared to the previous patch, for now I only modified CCLayerTreeHostCommon.cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642066</commentid>
    <comment_count>57</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-06-05 18:00:32 -0700</bug_when>
    <thetext>(In reply to comment #56)
&gt; Created an attachment (id=145907) [details]
&gt; In good condition, but still needs more unit tests
&gt; 
&gt; This patch passes all 7 tests attached on this bug when testing manually (using usleep() to make main thread really slow).  Changelogs and unit tests still need updating.  Compared to the previous patch, for now I only modified CCLayerTreeHostCommon.cpp.

FYI, there are some test cases here that might be helpful: http://webstuff.nfshost.com/scrolling/  They are not exhaustive.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642072</commentid>
    <comment_count>58</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-06-05 18:17:58 -0700</bug_when>
    <thetext>(In reply to comment #57)
&gt; (In reply to comment #56)
&gt; &gt; Created an attachment (id=145907) [details] [details]
&gt; &gt; In good condition, but still needs more unit tests
&gt; &gt; 
&gt; &gt; This patch passes all 7 tests attached on this bug when testing manually (using usleep() to make main thread really slow).  Changelogs and unit tests still need updating.  Compared to the previous patch, for now I only modified CCLayerTreeHostCommon.cpp.
&gt; 
&gt; FYI, there are some test cases here that might be helpful: http://webstuff.nfshost.com/scrolling/  They are not exhaustive.

Thanks, those links seem to work, too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642646</commentid>
    <comment_count>59</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-06-06 11:36:25 -0700</bug_when>
    <thetext>Received Sami&apos;s go-ahead to own this bug to completion.  As I understand, he&apos;s actively working on testing/landing 78864 which this patch will depend on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>643281</commentid>
    <comment_count>60</comment_count>
      <attachid>146216</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-06-07 00:18:38 -0700</bug_when>
    <thetext>Created attachment 146216
Polished and buffed, and with unit tests

This patch is now pretty clean and robust, including unit tests. Please note that I removed the ScrollingCoordinator code from this patch; if you want, this patch could even land before 78864 (the included unit tests will cover the code in this patch even without 78864).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>643630</commentid>
    <comment_count>61</comment_count>
      <attachid>146216</attachid>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2012-06-07 09:41:17 -0700</bug_when>
    <thetext>Comment on attachment 146216
Polished and buffed, and with unit tests

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

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:352
&gt; +        // Since we&apos;re going backwards up the hierarchy, the surface&apos;s inverse originTransform should pre-multiply the accumulating transform.

I&apos;m trying to figure out whether we should also undo scroll offsets from all ancestor layers that are *not* the container. That could happen if the fixed element is embedded in a scrollable child layer but the root layer is the fixed position container.

I think one way to trigger this would be to use -webkit-overflow-scrolling: touch to cause a layer to be created for the scrollable child layer.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:425
&gt; +    if ((scrollDelta.width() || scrollDelta.height())) {

Nit: could use !scrollDelta.isZero().

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:570
&gt;      WebTransformationMatrix combinedTransform = parentMatrix;

Nit: could leave combinedTransform uninitialized at this point since we always assign to it below.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>643644</commentid>
    <comment_count>62</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-06-07 09:57:20 -0700</bug_when>
    <thetext>Thanks for the comments - I&apos;ll submit a new patch based on these.  I&apos;ll also fix a few variable names that can be clearer and clean up the unit tests a bit more.

One question below:

(In reply to comment #61)
&gt; (From update of attachment 146216 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=146216&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:352
&gt; &gt; +        // Since we&apos;re going backwards up the hierarchy, the surface&apos;s inverse originTransform should pre-multiply the accumulating transform.
&gt; 
&gt; I&apos;m trying to figure out whether we should also undo scroll offsets from all ancestor layers that are *not* the container. That could happen if the fixed element is embedded in a scrollable child layer but the root layer is the fixed position container.
&gt; 
&gt; I think one way to trigger this would be to use -webkit-overflow-scrolling: touch to cause a layer to be created for the scrollable child layer.

Are you referring to undoing the scroll offsets so that they affect the final transform of the surface?  or the final transform of the fixed-position layer?   I don&apos;t think we need to change any transforms on any other layers except the fixed-position one.  And for that layer, the scroll offsets that are embedded in intermediate renderSurfaces do not affect the actual scroll compensation we need to apply since we apply transformToContainerSpace * scroll translation * transformToContainerSpace.inverse().   Or am I misunderstanding what you&apos;re saying?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>643686</commentid>
    <comment_count>63</comment_count>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2012-06-07 10:49:35 -0700</bug_when>
    <thetext>(In reply to comment #62)
&gt; Are you referring to undoing the scroll offsets so that they affect the final transform of the surface?  or the final transform of the fixed-position layer?   I don&apos;t think we need to change any transforms on any other layers except the fixed-position one.  And for that layer, the scroll offsets that are embedded in intermediate renderSurfaces do not affect the actual scroll compensation we need to apply since we apply transformToContainerSpace * scroll translation * transformToContainerSpace.inverse().   Or am I misunderstanding what you&apos;re saying?

Ah, I meant the undoing the scroll deltas for the fixed position layer itself. Scroll deltas coming from any ancestor layer and not just render surfaces to be exact. For example:

&lt;div style=&quot;overflow: scroll; -webkit-overflow-scrolling: touch&quot;&gt;
  &lt;div style=&quot;position: fixed&quot;&gt;
  &lt;/div&gt;
&lt;/div&gt;

I think in this case the fixed element should stay fixed to the view root.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>643731</commentid>
    <comment_count>64</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-06-07 11:33:15 -0700</bug_when>
    <thetext>(In reply to comment #63)
&gt; (In reply to comment #62)
&gt; &gt; Are you referring to undoing the scroll offsets so that they affect the final transform of the surface?  or the final transform of the fixed-position layer?   I don&apos;t think we need to change any transforms on any other layers except the fixed-position one.  And for that layer, the scroll offsets that are embedded in intermediate renderSurfaces do not affect the actual scroll compensation we need to apply since we apply transformToContainerSpace * scroll translation * transformToContainerSpace.inverse().   Or am I misunderstanding what you&apos;re saying?
&gt; 
&gt; Ah, I meant the undoing the scroll deltas for the fixed position layer itself. Scroll deltas coming from any ancestor layer and not just render surfaces to be exact. For example:
&gt; 
&gt; &lt;div style=&quot;overflow: scroll; -webkit-overflow-scrolling: touch&quot;&gt;
&gt;   &lt;div style=&quot;position: fixed&quot;&gt;
&gt;   &lt;/div&gt;
&gt; &lt;/div&gt;
&gt; 
&gt; I think in this case the fixed element should stay fixed to the view root.


Is it possible to have non-zero scroll deltas on a non-container layer?  If so, then yeah we have to completely rearrange the algorithm.   If not, then its only a concern about the root layer, and I&apos;ll test and check, I think it should work.  And I suppose we need a few more debug assertions if we&apos;re allowed to assume that non-containers will always have zero scroll.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>643741</commentid>
    <comment_count>65</comment_count>
    <who name="Sami Kyostila">skyostil</who>
    <bug_when>2012-06-07 11:40:54 -0700</bug_when>
    <thetext>(In reply to comment #64)
&gt; Is it possible to have non-zero scroll deltas on a non-container layer?  If so, then yeah we have to completely rearrange the algorithm.   If not, then its only a concern about the root layer, and I&apos;ll test and check, I think it should work.  And I suppose we need a few more debug assertions if we&apos;re allowed to assume that non-containers will always have zero scroll.

I think in my example the enclosing overflow div will not be marked as a container because it doesn&apos;t have a CSS transform, and since the layer is scrollable it may indeed have a non-zero scroll delta.

Note that this doesn&apos;t happen with current master because there&apos;s ever only one scrollable layer, but with the patch from 73350 I think it&apos;s possible.

Practically I guess this could be handled by undoing all scroll deltas from the fixed layer up to the first container.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>643831</commentid>
    <comment_count>66</comment_count>
      <attachid>146365</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-06-07 13:12:04 -0700</bug_when>
    <thetext>Created attachment 146365
Patch for archival, still need to address comment 65

It looks like we definitely should wait for other patches to land so we can better test more possible things that can happen on web pages. I&apos;m just uploading this for backup and will revisit this in just a few days. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>644201</commentid>
    <comment_count>67</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-06-07 18:53:05 -0700</bug_when>
    <thetext>isContainerForFixedPositionLayers is a very sore misnomer.

in the DOM, yes technically it is an ancestor that contains the fixedPositionLayer.  But with the current approach we are taking, it is not the layer that the fixedPositionLayer is actually fixed onto.

We should either revise our approach to set this flag on the layer just above it (needs a bit more careful thought), or we should re-name this flag.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>644393</commentid>
    <comment_count>68</comment_count>
      <attachid>146492</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-06-07 23:51:18 -0700</bug_when>
    <thetext>Created attachment 146492
Rewrote from scratch, added more tests, feels solid</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>644395</commentid>
    <comment_count>69</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-06-07 23:54:11 -0700</bug_when>
    <thetext>Almost done!

Summary:

Vangelis and James, this is ready for review. I&apos;m feeling good about this new algorithm and tests in this patch.  In addition to unit tests, I manually tested a good bit, and everything seems to work as desired.  Hopefully we can land the final version tomorrow (Friday)!!

Details:

(1) Because of comment #65, and thanks to fruitful offline discussion with Vangelis, it became clear that we had to rewrite this from scratch with a new approach, so that we can remove undesirable assumptions.  This patch uses the strictly correct geometric space where scrollDelta needs to be undone.  In addition to being more correct, this way we don&apos;t have to make assumptions about the relationships between layers to ensure we&apos;re in the correct space.  It also makes the concept of the &quot;clipLayer&quot; unnecessary, and therefore it is not as fragile to walk the hierarchy.

(2) Vangelis suggested we should go ahead and try to land it ASAP, and the new unit tests on this patch already cover the scrolling possibilities that we&apos;re worried about.  It will be far easier and less risky to back-merge smaller fix after m21 if needed, rather than delaying this and needing to merge this large patch after it branches.

(3) Added more unit tests, in particular to verify that the ordering of transforms is computed correctly when compensating for the scroll, and that multiple scrollDeltas can exist before finding the container for fixed position elements.

(4) Re-named transformation matrix variables, so that the name represents the right-to-left interpretation of what the transform actually does.  This is backwards from the previous patch, apologies if this causes drastic confusion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>645109</commentid>
    <comment_count>70</comment_count>
      <attachid>146659</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-06-08 16:07:46 -0700</bug_when>
    <thetext>Created attachment 146659
Again from scratch, tested and still feels solid

Vangelis and I had another discusison about this and decided to try seeing what it would look like if we computed scrollCompensation in the recursion itself. It works just as well as the previous patch, just a different algorithm. It does seem like less scary code, but I think it depends on who you ask whether its actually more complicated or less complicated =) At any rate, both this patch and the previous one should work equally well, whichever one reviewers like better is fine with me. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>645755</commentid>
    <comment_count>71</comment_count>
      <attachid>146659</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2012-06-10 23:27:58 -0700</bug_when>
    <thetext>Comment on attachment 146659
Again from scratch, tested and still feels solid

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

I like this approach better.  Thanks for writing it up!  One comment to avoid adding unnecessary operations in the common path.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:540
&gt; +        // Special case: this layer is a composited fixed-position element; we need to

nit: I would say &quot;fixed position _layer_&quot; instead of &quot;fixed position _element_&quot; since the compositor doesn&apos;t know about HTML elements.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:703
&gt; +    WebTransformationMatrix nextScrollCompensationMatrix = computeScrollCompensationMatrixForChildren(layer, parentMatrix, currentScrollCompensationMatrix);;

Since having a scroll delta or creating a RS are somewhat rare occurrences, it would be more efficient to eliminate the above function and move the code that computes the next matrix here.  In the most common case we can pass &quot;currentScrollCompensationMatrix&quot; down the recursion (no matrix copy necessary) and overwrite it only when needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>646162</commentid>
    <comment_count>72</comment_count>
      <attachid>146659</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-06-11 12:15:35 -0700</bug_when>
    <thetext>Comment on attachment 146659
Again from scratch, tested and still feels solid

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

I like this approach a lot.

Can you add one more test where a fixed position layer is separated from its container by at least two intermediate render surfaces?

&gt; Source/WebCore/ChangeLog:8
&gt; +        Unit tests added to CCLayerTreeHostCommonTest:

nit: put the testing block below the description, like layout tests are listed.

&gt; Source/WebCore/ChangeLog:28
&gt; +        its own. This allows fixed-position elements to be composited,

Not sure what you mean by composited here.  &quot;This allows fixed position layers to be positioned correctly when scrolling in the compositor&quot; maybe?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerImpl.h:239
&gt; +    const WebKit::WebTransformationMatrix&amp; scrollDeltaSpaceToSurfaceTransform() { return m_scrollDeltaSpaceToSurfaceTransform; }
&gt; +    void setScrollDeltaSpaceToSurfaceTransform(const WebKit::WebTransformationMatrix&amp; matrix) { m_scrollDeltaSpaceToSurfaceTransform = matrix; }

Unused?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerImpl.h:337
&gt; +    // Set for the layer that has position fixed to the container layer&apos;s visible rect.

container =&gt; closest ancestor container?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:365
&gt; +    //    it is fixed to an ancsestor, and is a container for any fixed-position descendants.

ancsestor =&gt; ancestor

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:541
&gt; +        // explicitly compensate for all ancestors nonzero scrollDeltas to keep this layer

ancestors =&gt; ancestors&apos;

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:707
&gt; +    //
&gt; +    // Recursion happens here.
&gt; +    //

nit: needless comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>646226</commentid>
    <comment_count>73</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-06-11 13:54:18 -0700</bug_when>
    <thetext>
Thanks for the comments.  New patch is coming in a moment, with the following differences:
- added an early exit that avoids stack allocation and matrix initialization/copy overheads in the computeScrollCompensationMatrixForChildren() helper function. This represents the compromise Vangelis and I reached discussing offline.
- added a new unit test for multiple intermediate surfaces
- addressed reviewers&apos; nits</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>646259</commentid>
    <comment_count>74</comment_count>
      <attachid>146909</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-06-11 14:23:29 -0700</bug_when>
    <thetext>Created attachment 146909
Addressed reviewers comments

tested manually on all examples attached as well as some real pages, and passes all unit tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>646275</commentid>
    <comment_count>75</comment_count>
      <attachid>146909</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-06-11 14:33:04 -0700</bug_when>
    <thetext>Comment on attachment 146909
Addressed reviewers comments

R=me.  Thanks for the extra test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>646282</commentid>
    <comment_count>76</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-06-11 14:38:06 -0700</bug_when>
    <thetext>Committed r120008: &lt;http://trac.webkit.org/changeset/120008&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>646284</commentid>
    <comment_count>77</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-06-11 14:39:21 -0700</bug_when>
    <thetext>(In reply to comment #75)
&gt; (From update of attachment 146909 [details])
&gt; R=me.  Thanks for the extra test.

And thanks for the review =)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111002</attachid>
            <date>2011-10-14 05:46:02 -0700</date>
            <delta_ts>2011-10-20 09:06:03 -0700</delta_ts>
            <desc>Work in progress demo</desc>
            <filename>webkit-thread-fixed.patch</filename>
            <type>text/plain</type>
            <size>31890</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAKaW5kZXggN2I0YjIyNS4uNzIyZDgxZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9TZXR0aW5ncy5jcHAKQEAgLTE4Miw2ICsxODIsNyBAQCBTZXR0aW5nczo6U2V0dGluZ3Mo
UGFnZSogcGFnZSkKICAgICAsIG1fYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvclBsdWdpbnNFbmFi
bGVkKHRydWUpCiAgICAgLCBtX2FjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JDYW52YXNFbmFibGVk
KHRydWUpCiAgICAgLCBtX2FjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JBbmltYXRpb25FbmFibGVk
KHRydWUpCisgICAgLCBtX2FjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9uRW5h
YmxlZChmYWxzZSkKICAgICAsIG1fc2hvd0RlYnVnQm9yZGVycyhmYWxzZSkKICAgICAsIG1fc2hv
d1JlcGFpbnRDb3VudGVyKGZhbHNlKQogICAgICwgbV9leHBlcmltZW50YWxOb3RpZmljYXRpb25z
RW5hYmxlZChmYWxzZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3Mu
aCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaAppbmRleCBlMzU3ZGE5Li5jNDdmNDY0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5oCkBAIC0zMjEsNiArMzIxLDkgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICB2b2lkIHNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JBbmltYXRp
b25FbmFibGVkKGJvb2wpOwogICAgICAgICBib29sIGFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JB
bmltYXRpb25FbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9hY2NlbGVyYXRlZENvbXBvc2l0aW5n
Rm9yQW5pbWF0aW9uRW5hYmxlZDsgfQogCisgICAgICAgIHZvaWQgc2V0QWNjZWxlcmF0ZWRDb21w
b3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkKGJvb2wgZW5hYmxlZCkgeyBtX2FjY2VsZXJh
dGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9uRW5hYmxlZCA9IGVuYWJsZWQ7IH0KKyAgICAg
ICAgYm9vbCBhY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQoKSBj
b25zdCB7IHJldHVybiBtX2FjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9uRW5h
YmxlZDsgfQorCiAgICAgICAgIHZvaWQgc2V0U2hvd0RlYnVnQm9yZGVycyhib29sKTsKICAgICAg
ICAgYm9vbCBzaG93RGVidWdCb3JkZXJzKCkgY29uc3QgeyByZXR1cm4gbV9zaG93RGVidWdCb3Jk
ZXJzOyB9CiAKQEAgLTU1Niw2ICs1NTksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IGJvb2wgbV9hY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yUGx1Z2luc0VuYWJsZWQgOiAxOwogICAg
ICAgICBib29sIG1fYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckNhbnZhc0VuYWJsZWQgOiAxOwog
ICAgICAgICBib29sIG1fYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckFuaW1hdGlvbkVuYWJsZWQg
OiAxOworICAgICAgICBib29sIG1fYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRp
b25FbmFibGVkIDogMTsKICAgICAgICAgYm9vbCBtX3Nob3dEZWJ1Z0JvcmRlcnMgOiAxOwogICAg
ICAgICBib29sIG1fc2hvd1JlcGFpbnRDb3VudGVyIDogMTsKICAgICAgICAgYm9vbCBtX2V4cGVy
aW1lbnRhbE5vdGlmaWNhdGlvbnNFbmFibGVkIDogMTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5jcHAKaW5kZXggNjA4MDlkNS4uM2U4YTM4
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NM
YXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NM
YXllci5jcHAKQEAgLTgwLDYgKzgwLDggQEAgR3JhcGhpY3NMYXllcjo6R3JhcGhpY3NMYXllcihH
cmFwaGljc0xheWVyQ2xpZW50KiBjbGllbnQpCiAgICAgLCBtX2FjY2VsZXJhdGVzRHJhd2luZyhm
YWxzZSkKICAgICAsIG1fbWFpbnRhaW5zUGl4ZWxBbGlnbm1lbnQoZmFsc2UpCiAgICAgLCBtX2Fw
cGxpZXNQYWdlU2NhbGUoZmFsc2UpCisgICAgLCBtX2ZpeGVkUG9zaXRpb25lZChmYWxzZSkKKyAg
ICAsIG1faXNGcmFtZVJvb3QoZmFsc2UpCiAgICAgLCBtX3BhaW50aW5nUGhhc2UoR3JhcGhpY3NM
YXllclBhaW50QWxsKQogICAgICwgbV9jb250ZW50c09yaWVudGF0aW9uKENvbXBvc2l0aW5nQ29v
cmRpbmF0ZXNUb3BEb3duKQogICAgICwgbV9wYXJlbnQoMCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuaAppbmRleCBjZGExYzhjLi41M2UwMzA3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xh
eWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXll
ci5oCkBAIC0yNjcsNiArMjY3LDEzIEBAIHB1YmxpYzoKICAgICBib29sIGFjY2VsZXJhdGVzRHJh
d2luZygpIGNvbnN0IHsgcmV0dXJuIG1fYWNjZWxlcmF0ZXNEcmF3aW5nOyB9CiAgICAgdmlydHVh
bCB2b2lkIHNldEFjY2VsZXJhdGVzRHJhd2luZyhib29sIGIpIHsgbV9hY2NlbGVyYXRlc0RyYXdp
bmcgPSBiOyB9CiAKKyAgICBib29sIGZpeGVkUG9zaXRpb25lZCgpIGNvbnN0IHsgcmV0dXJuIG1f
Zml4ZWRQb3NpdGlvbmVkOyB9CisgICAgdmlydHVhbCB2b2lkIHNldEZpeGVkUG9zaXRpb25lZChi
b29sIGIpIHsgbV9maXhlZFBvc2l0aW9uZWQgPSBiOyB9CisKKyAgICAvLyBTZXQgdG8gdHJ1ZSB3
aGVuIHRoZSBsYXllciBjb3JyZXNwb25kcyB0byB0aGUgcm9vdCBsYXllciBvZiBhIEZyYW1lLgor
ICAgIGJvb2wgaXNGcmFtZVJvb3QoKSBjb25zdCB7IHJldHVybiBtX2lzRnJhbWVSb290OyB9Cisg
ICAgdmlydHVhbCB2b2lkIHNldElzRnJhbWVSb290KGJvb2wgYikgeyBtX2lzRnJhbWVSb290ID0g
YjsgfQorCiAgICAgLy8gVGhlIGNvbG9yIHVzZWQgdG8gcGFpbnQgdGhlIGxheWVyIGJhY2tncm91
bmRzCiAgICAgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1f
YmFja2dyb3VuZENvbG9yOyB9CiAgICAgdmlydHVhbCB2b2lkIHNldEJhY2tncm91bmRDb2xvcihj
b25zdCBDb2xvciYpOwpAQCAtNDI3LDYgKzQzNCw4IEBAIHByb3RlY3RlZDoKICAgICBib29sIG1f
YWNjZWxlcmF0ZXNEcmF3aW5nIDogMTsKICAgICBib29sIG1fbWFpbnRhaW5zUGl4ZWxBbGlnbm1l
bnQgOiAxOwogICAgIGJvb2wgbV9hcHBsaWVzUGFnZVNjYWxlIDogMTsgLy8gU2V0IGZvciB0aGUg
bGF5ZXIgd2hpY2ggaGFzIHRoZSBwYWdlIHNjYWxlIGFwcGxpZWQgdG8gaXQuCisgICAgYm9vbCBt
X2ZpeGVkUG9zaXRpb25lZCA6IDE7CisgICAgYm9vbCBtX2lzRnJhbWVSb290IDogMTsKIAogICAg
IEdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlIG1fcGFpbnRpbmdQaGFzZTsKICAgICBDb21wb3Np
dGluZ0Nvb3JkaW5hdGVzT3JpZW50YXRpb24gbV9jb250ZW50c09yaWVudGF0aW9uOyAvLyBhZmZl
Y3RzIG9yaWVudGF0aW9uIG9mIGxheWVyIGNvbnRlbnRzCkBAIC00NjEsNCArNDcwLDMgQEAgdm9p
ZCBzaG93R3JhcGhpY3NMYXllclRyZWUoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciogbGF5
ZXIpOwogI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIAogI2VuZGlmIC8v
IEdyYXBoaWNzTGF5ZXJfaAotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcApp
bmRleCA5NmE5Y2E2Li4zZmQ5MWViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1
bS5jcHAKQEAgLTIzNCw2ICsyMzQsMTUgQEAgdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNl
dERyYXdzQ29udGVudChib29sIGRyYXdzQ29udGVudCkKICAgICB1cGRhdGVMYXllckRyYXdzQ29u
dGVudCgpOwogfQogCit2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0Rml4ZWRQb3NpdGlv
bmVkKGJvb2wgZml4ZWRQb3NpdGlvbmVkKQoreworICAgIGlmIChmaXhlZFBvc2l0aW9uZWQgPT0g
bV9maXhlZFBvc2l0aW9uZWQpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzTGF5ZXI6
OnNldEZpeGVkUG9zaXRpb25lZChmaXhlZFBvc2l0aW9uZWQpOworICAgIHVwZGF0ZUxheWVyUG9z
aXRpb24oKTsKK30KKwogdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldEJhY2tncm91bmRD
b2xvcihjb25zdCBDb2xvciYgY29sb3IpCiB7CiAgICAgaWYgKG1fYmFja2dyb3VuZENvbG9yU2V0
ICYmIG1fYmFja2dyb3VuZENvbG9yID09IGNvbG9yKQpAQCAtNDkxLDYgKzUwMCw3IEBAIHZvaWQg
R3JhcGhpY3NMYXllckNocm9taXVtOjp1cGRhdGVMYXllclBvc2l0aW9uKCkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV9wb3NpdGlvbi55KCkgKyBtX2FuY2hvclBvaW50LnkoKSAqIG1f
c2l6ZS5oZWlnaHQoKSk7CiAKICAgICBwcmltYXJ5TGF5ZXIoKS0+c2V0UG9zaXRpb24obGF5ZXJQ
b3NpdGlvbik7CisgICAgcHJpbWFyeUxheWVyKCktPnNldERpc3JlZ2FyZFNjcm9sbERlbHRhKG1f
Zml4ZWRQb3NpdGlvbmVkKTsKIH0KIAogdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0
ZUxheWVyU2l6ZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDcxOTBl
NTAuLmQ0MDkyY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oCkBAIC02OCw2
ICs2OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0UHJlc2VydmVzM0QoYm9vbCk7
CiAgICAgdmlydHVhbCB2b2lkIHNldE1hc2tzVG9Cb3VuZHMoYm9vbCk7CiAgICAgdmlydHVhbCB2
b2lkIHNldERyYXdzQ29udGVudChib29sKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Rml4ZWRQb3Np
dGlvbmVkKGJvb2wpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRNYXNrTGF5ZXIoR3JhcGhpY3NMYXll
ciopOwogCiAgICAgdmlydHVhbCB2b2lkIHNldEJhY2tncm91bmRDb2xvcihjb25zdCBDb2xvciYp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllckNocm9taXVtLmNwcAppbmRleCBmZTJjZDRlLi44YmE2MjFlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVt
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
ckNocm9taXVtLmNwcApAQCAtNjUsNiArNjUsNyBAQCBMYXllckNocm9taXVtOjpMYXllckNocm9t
aXVtKENDTGF5ZXJEZWxlZ2F0ZSogZGVsZWdhdGUpCiAgICAgLCBtX2RlYnVnQm9yZGVyV2lkdGgo
MCkKICAgICAsIG1fb3BhY2l0eSgxLjApCiAgICAgLCBtX2FuY2hvclBvaW50WigwKQorICAgICwg
bV9kaXNyZWdhcmRTY3JvbGxEZWx0YShmYWxzZSkKICAgICAsIG1fbWFza3NUb0JvdW5kcyhmYWxz
ZSkKICAgICAsIG1fb3BhcXVlKHRydWUpCiAgICAgLCBtX2RvdWJsZVNpZGVkKHRydWUpCkBAIC0y
OTIsNiArMjkzLDcgQEAgdm9pZCBMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKENDTGF5
ZXJJbXBsKiBsYXllcikKICAgICBsYXllci0+c2V0TmFtZShtX25hbWUpOwogICAgIGxheWVyLT5z
ZXRPcGFjaXR5KG1fb3BhY2l0eSk7CiAgICAgbGF5ZXItPnNldFBvc2l0aW9uKG1fcG9zaXRpb24p
OworICAgIGxheWVyLT5zZXREaXNyZWdhcmRTY3JvbGxEZWx0YShtX2Rpc3JlZ2FyZFNjcm9sbERl
bHRhKTsKICAgICBsYXllci0+c2V0UHJlc2VydmVzM0QocHJlc2VydmVzM0QoKSk7CiAgICAgbGF5
ZXItPnNldFNjcm9sbFBvc2l0aW9uKG1fc2Nyb2xsUG9zaXRpb24pOwogICAgIGxheWVyLT5zZXRT
dWJsYXllclRyYW5zZm9ybShtX3N1YmxheWVyVHJhbnNmb3JtKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaApp
bmRleCBiZTBlNzk2Li4xN2RjMTFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCkBAIC0xMTgsNiArMTE4
LDkgQEAgcHVibGljOgogICAgIHZvaWQgc2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgcG9z
aXRpb24pIHsgbV9wb3NpdGlvbiA9IHBvc2l0aW9uOyAgc2V0TmVlZHNDb21taXQoKTsgfQogICAg
IEZsb2F0UG9pbnQgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9CiAKKyAg
ICB2b2lkIHNldERpc3JlZ2FyZFNjcm9sbERlbHRhKGJvb2wgZGlzcmVnYXJkU2Nyb2xsRGVsdGEp
IHsgbV9kaXNyZWdhcmRTY3JvbGxEZWx0YSA9IGRpc3JlZ2FyZFNjcm9sbERlbHRhOyBzZXROZWVk
c0NvbW1pdCgpOyB9CisgICAgYm9vbCBkaXNyZWdhcmRTY3JvbGxEZWx0YSgpIGNvbnN0IHsgcmV0
dXJuIG1fZGlzcmVnYXJkU2Nyb2xsRGVsdGE7IH0KKwogICAgIHZvaWQgc2V0U3VibGF5ZXJUcmFu
c2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkgeyBtX3N1YmxheWVy
VHJhbnNmb3JtID0gdHJhbnNmb3JtOyBzZXROZWVkc0NvbW1pdCgpOyB9CiAgICAgY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIHN1YmxheWVyVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9z
dWJsYXllclRyYW5zZm9ybTsgfQogCkBAIC0yNTIsNiArMjU1LDcgQEAgcHJpdmF0ZToKICAgICBm
bG9hdCBtX2RlYnVnQm9yZGVyV2lkdGg7CiAgICAgZmxvYXQgbV9vcGFjaXR5OwogICAgIGZsb2F0
IG1fYW5jaG9yUG9pbnRaOworICAgIGJvb2wgbV9kaXNyZWdhcmRTY3JvbGxEZWx0YTsKICAgICBi
b29sIG1fbWFza3NUb0JvdW5kczsKICAgICBib29sIG1fb3BhcXVlOwogICAgIGJvb2wgbV9kb3Vi
bGVTaWRlZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCmluZGV4IGM1MjVj
MWQuLmY2MTNhZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApAQCAt
Mjc0LDcgKzI3NCw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzSW50
ZXJuYWwoKQogCiAgICAgewogICAgICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpkcmF3TGF5ZXJzSW50ZXJuYWw6OmNhbGNEcmF3RXRjIiwgdGhpcywgMCk7Ci0gICAgICAg
IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmls
aXR5KHJvb3REcmF3TGF5ZXIsIHJvb3REcmF3TGF5ZXIsIG1fem9vbUFuaW1hdG9yVHJhbnNmb3Jt
LCBtX3pvb21BbmltYXRvclRyYW5zZm9ybSwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgbV9kZWZh
dWx0UmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCksICZtX2xheWVyU29ydGVyLCBtX2NhcGFiaWxp
dGllcy5tYXhUZXh0dXJlU2l6ZSk7CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2Fs
Y3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3REcmF3TGF5ZXIsIHJvb3REcmF3
TGF5ZXIsIG1fem9vbUFuaW1hdG9yVHJhbnNmb3JtLCBtX3pvb21BbmltYXRvclRyYW5zZm9ybSwg
bV96b29tQW5pbWF0b3JUcmFuc2Zvcm0sIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIG1fZGVmYXVs
dFJlbmRlclN1cmZhY2UtPmxheWVyTGlzdCgpLCAmbV9sYXllclNvcnRlciwgbV9jYXBhYmlsaXRp
ZXMubWF4VGV4dHVyZVNpemUpOwogICAgIH0KIAogICAgIC8vIFRoZSBHTCB2aWV3cG9ydCBjb3Zl
cnMgdGhlIGVudGlyZSB2aXNpYmxlIGFyZWEsIGluY2x1ZGluZyB0aGUgc2Nyb2xsYmFycy4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJJbXBsLmNwcAppbmRleCAyYjA1ZDlmLi42MTY0ZTMyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllckltcGwuY3BwCkBAIC00NSw2ICs0NSw3IEBAIENDTGF5ZXJJbXBsOjpDQ0xheWVySW1wbChp
bnQgaWQpCiAgICAgLCBtX2RvdWJsZVNpZGVkKHRydWUpCiAgICAgLCBtX21hc2tzVG9Cb3VuZHMo
ZmFsc2UpCiAgICAgLCBtX29wYWNpdHkoMS4wKQorICAgICwgbV9kaXNyZWdhcmRTY3JvbGxEZWx0
YShmYWxzZSkKICAgICAsIG1fcHJlc2VydmVzM0QoZmFsc2UpCiAgICAgLCBtX3VzZXNMYXllclNj
aXNzb3IoZmFsc2UpCiAgICAgLCBtX2lzTm9uQ29tcG9zaXRlZENvbnRlbnQoZmFsc2UpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllckltcGwuaAppbmRleCAxNWJlNzUxLi43ZTk1OWY2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBs
LmgKQEAgLTk4LDYgKzk4LDkgQEAgcHVibGljOgogICAgIHZvaWQgc2V0UG9zaXRpb24oY29uc3Qg
RmxvYXRQb2ludCYgcG9zaXRpb24pIHsgbV9wb3NpdGlvbiA9IHBvc2l0aW9uOyB9CiAgICAgY29u
c3QgRmxvYXRQb2ludCYgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9CiAK
KyAgICB2b2lkIHNldERpc3JlZ2FyZFNjcm9sbERlbHRhKGJvb2wgZGlzcmVnYXJkU2Nyb2xsRGVs
dGEpIHsgbV9kaXNyZWdhcmRTY3JvbGxEZWx0YSA9IGRpc3JlZ2FyZFNjcm9sbERlbHRhO30KKyAg
ICBib29sIGRpc3JlZ2FyZFNjcm9sbERlbHRhKCkgY29uc3QgeyByZXR1cm4gbV9kaXNyZWdhcmRT
Y3JvbGxEZWx0YTsgfQorCiAgICAgdm9pZCBzZXRQcmVzZXJ2ZXMzRChib29sIHByZXNlcnZlczNE
KSB7IG1fcHJlc2VydmVzM0QgPSBwcmVzZXJ2ZXMzRDsgfQogICAgIGJvb2wgcHJlc2VydmVzM0Qo
KSBjb25zdCB7IHJldHVybiBtX3ByZXNlcnZlczNEOyB9CiAKQEAgLTIwOSw2ICsyMTIsNyBAQCBw
cml2YXRlOgogICAgIGJvb2wgbV9tYXNrc1RvQm91bmRzOwogICAgIGZsb2F0IG1fb3BhY2l0eTsK
ICAgICBGbG9hdFBvaW50IG1fcG9zaXRpb247CisgICAgYm9vbCBtX2Rpc3JlZ2FyZFNjcm9sbERl
bHRhOwogICAgIGJvb2wgbV9wcmVzZXJ2ZXMzRDsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBt
X3N1YmxheWVyVHJhbnNmb3JtOwogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fdHJhbnNmb3Jt
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggMzVjNTQzOC4uNjllNTAwMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCkBAIC0yODAsNyArMjgwLDcgQEAgdm9p
ZCBDQ0xheWVyVHJlZUhvc3Q6OnVwZGF0ZUxheWVycyhMYXllckNocm9taXVtKiByb290TGF5ZXIp
CiAKICAgICB7CiAgICAgICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3Q6OnVwZGF0ZUxh
eWVyczo6Y2FsY0RyYXdFdGMiLCB0aGlzLCAwKTsKLSAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29t
bW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocm9vdExheWVyLCByb290
TGF5ZXIsIG1fem9vbUFuaW1hdG9yVHJhbnNmb3JtLCBtX3pvb21BbmltYXRvclRyYW5zZm9ybSwg
bV91cGRhdGVMaXN0LCByb290UmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCksIGxheWVyUmVuZGVy
ZXJDYXBhYmlsaXRpZXMoKS5tYXhUZXh0dXJlU2l6ZSk7CisgICAgICAgIENDTGF5ZXJUcmVlSG9z
dENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3RMYXllciwg
cm9vdExheWVyLCBtX3pvb21BbmltYXRvclRyYW5zZm9ybSwgbV96b29tQW5pbWF0b3JUcmFuc2Zv
cm0sIG1fem9vbUFuaW1hdG9yVHJhbnNmb3JtLCBtX3VwZGF0ZUxpc3QsIHJvb3RSZW5kZXJTdXJm
YWNlLT5sYXllckxpc3QoKSwgbGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLm1heFRleHR1cmVT
aXplKTsKICAgICB9CiAKICAgICBwYWludExheWVyQ29udGVudHMobV91cGRhdGVMaXN0KTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwCmluZGV4IGJjZDVhYzcuLmMz
MTE1ODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcApAQCAt
ODgsNyArODgsNyBAQCBzdGF0aWMgYm9vbCBpc1NjYWxlT3JUcmFuc2xhdGlvbihjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgbSkKIC8vIFJlY3Vyc2l2ZWx5IHdhbGtzIHRoZSBsYXllciB0cmVl
IHN0YXJ0aW5nIGF0IHRoZSBnaXZlbiBub2RlIGFuZCBjb21wdXRlcyBhbGwgdGhlCiAvLyBuZWNl
c3NhcnkgdHJhbnNmb3JtYXRpb25zLCBzY2lzc29yIHJlY3RhbmdsZXMsIHJlbmRlciBzdXJmYWNl
cywgZXRjLgogdGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJm
YWNlVHlwZSwgdHlwZW5hbWUgTGF5ZXJTb3J0ZXI+Ci1zdGF0aWMgdm9pZCBjYWxjdWxhdGVEcmF3
VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHlJbnRlcm5hbChMYXllclR5cGUqIGxheWVyLCBMYXllclR5
cGUqIHJvb3RMYXllciwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwg
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGZ1bGxIaWVyYXJjaHlNYXRyaXgsIFZlY3RvcjxS
ZWZQdHI8TGF5ZXJUeXBlPiA+JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBWZWN0b3I8UmVmUHRy
PExheWVyVHlwZT4gPiYgbGF5ZXJMaXN0LCBMYXllclNvcnRlciogbGF5ZXJTb3J0ZXIsIGludCBt
YXhUZXh0dXJlU2l6ZSkKK3N0YXRpYyB2b2lkIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlz
aWJpbGl0eUludGVybmFsKExheWVyVHlwZSogbGF5ZXIsIExheWVyVHlwZSogcm9vdExheWVyLCBj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50TWF0cml4LCBjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgcGFyZW50TWF0cml4V2l0aG91dFNjcm9sbCwgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIGZ1bGxIaWVyYXJjaHlNYXRyaXgsIFZlY3RvcjxSZWZQdHI8TGF5ZXJUeXBlPiA+
JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBWZWN0b3I8UmVmUHRyPExheWVyVHlwZT4gPiYgbGF5
ZXJMaXN0LCBMYXllclNvcnRlciogbGF5ZXJTb3J0ZXIsIGludCBtYXhUZXh0dXJlU2l6ZSkKIHsK
ICAgICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8TGF5ZXJUeXBlPiA+IExheWVyTGlzdDsKICAgICAv
LyBDb21wdXRlIHRoZSBuZXcgbWF0cml4IHRyYW5zZm9ybWF0aW9uIHRoYXQgd2lsbCBiZSBhcHBs
aWVkIHRvIHRoaXMgbGF5ZXIgYW5kCkBAIC0xMjUsOCArMTI1LDIzIEBAIHN0YXRpYyB2b2lkIGNh
bGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eUludGVybmFsKExheWVyVHlwZSogbGF5
ZXIsIExheWVyCiAgICAgLy8gTFQgPSBUcltsXSAqIE1bbF0gKiBUcltjXQogICAgIGxheWVyTG9j
YWxUcmFuc2Zvcm0udHJhbnNsYXRlM2QoY2VudGVyT2Zmc2V0WCwgY2VudGVyT2Zmc2V0WSwgLWxh
eWVyLT5hbmNob3JQb2ludFooKSk7CiAKKyAgICAvLyBDb21wdXRlIHRoZSBsb2NhbCB0cmFuc2Zv
cm0gd2l0aG91dCBzY3JvbGxpbmcuCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbGF5ZXJMb2Nh
bFRyYW5zZm9ybVdpdGhvdXRTY3JvbGw7CisgICAgLy8gTFQgPSBUcltsXQorICAgIGxheWVyTG9j
YWxUcmFuc2Zvcm1XaXRob3V0U2Nyb2xsLnRyYW5zbGF0ZTNkKGxheWVyLT5wb3NpdGlvbigpLngo
KSwgbGF5ZXItPnBvc2l0aW9uKCkueSgpLCBsYXllci0+YW5jaG9yUG9pbnRaKCkpOworICAgIC8v
IExUID0gVHJbbF0gKiBNW2xdCisgICAgbGF5ZXJMb2NhbFRyYW5zZm9ybVdpdGhvdXRTY3JvbGwu
bXVsdGlwbHkobGF5ZXItPnRyYW5zZm9ybSgpKTsKKyAgICAvLyBMVCA9IFRyW2xdICogTVtsXSAq
IFRyW2NdCisgICAgbGF5ZXJMb2NhbFRyYW5zZm9ybVdpdGhvdXRTY3JvbGwudHJhbnNsYXRlM2Qo
Y2VudGVyT2Zmc2V0WCwgY2VudGVyT2Zmc2V0WSwgLWxheWVyLT5hbmNob3JQb2ludFooKSk7CisK
ICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjb21iaW5lZFRyYW5zZm9ybSA9IHBhcmVudE1hdHJp
eDsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjb21iaW5lZFRyYW5zZm9ybVdpdGhvdXRTY3Jv
bGwgPSBwYXJlbnRNYXRyaXhXaXRob3V0U2Nyb2xsOworCisgICAgaWYgKGxheWVyLT5kaXNyZWdh
cmRTY3JvbGxEZWx0YSgpKQorICAgICAgICBjb21iaW5lZFRyYW5zZm9ybSA9IHBhcmVudE1hdHJp
eFdpdGhvdXRTY3JvbGw7CisKICAgICBjb21iaW5lZFRyYW5zZm9ybSA9IGNvbWJpbmVkVHJhbnNm
b3JtLm11bHRpcGx5KGxheWVyTG9jYWxUcmFuc2Zvcm0pOworICAgIGNvbWJpbmVkVHJhbnNmb3Jt
V2l0aG91dFNjcm9sbCA9IGNvbWJpbmVkVHJhbnNmb3JtV2l0aG91dFNjcm9sbC5tdWx0aXBseShs
YXllckxvY2FsVHJhbnNmb3JtV2l0aG91dFNjcm9sbCk7CiAKICAgICBGbG9hdFJlY3QgbGF5ZXJS
ZWN0KC0wLjUgKiBsYXllci0+Ym91bmRzKCkud2lkdGgoKSwgLTAuNSAqIGxheWVyLT5ib3VuZHMo
KS5oZWlnaHQoKSwgbGF5ZXItPmJvdW5kcygpLndpZHRoKCksIGxheWVyLT5ib3VuZHMoKS5oZWln
aHQoKSk7CiAgICAgSW50UmVjdCB0cmFuc2Zvcm1lZExheWVyUmVjdDsKQEAgLTEzNSw2ICsxNTAs
MTAgQEAgc3RhdGljIHZvaWQgY2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5SW50
ZXJuYWwoTGF5ZXJUeXBlKiBsYXllciwgTGF5ZXIKICAgICAvLyBuZXh0SGllcmFyY2h5TWF0cml4
IHdpbGwgb25seSBjaGFuZ2UgaWYgdGhpcyBsYXllciB1c2VzIGEgbmV3IFJlbmRlclN1cmZhY2Us
IG90aGVyd2lzZSByZW1haW5zIHRoZSBzYW1lLgogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG5l
eHRIaWVyYXJjaHlNYXRyaXggPSBmdWxsSGllcmFyY2h5TWF0cml4OwogCisgICAgLy8gVHJhbnNm
b3JtIG1hdHJpeCBmb3Igc3VibGF5ZXJzLiBPbmUgd2l0aCBzY3JvbGwgZGVsdGEgdGFrZW4gaW50
byBhY2NvdW50LCBvbmUgd2l0aCBzY3JvbGwgdHJhbnNsYXRpb24uCisgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggc3VibGF5ZXJNYXRyaXggPSBjb21iaW5lZFRyYW5zZm9ybTsKKyAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBzdWJsYXllck1hdHJpeFdpdGhvdXRTY3JvbGwgPSBjb21iaW5lZFRyYW5z
Zm9ybVdpdGhvdXRTY3JvbGw7CisKICAgICAvLyBGSVhNRTogVGhpcyBzZWVtcyBsaWtlIHRoZSB3
cm9uZyBwbGFjZSB0byBzZXQgdGhpcwogICAgIGxheWVyLT5zZXRVc2VzTGF5ZXJTY2lzc29yKGZh
bHNlKTsKIApAQCAtMTYzLDYgKzE4MiwxMCBAQCBzdGF0aWMgdm9pZCBjYWxjdWxhdGVEcmF3VHJh
bnNmb3Jtc0FuZFZpc2liaWxpdHlJbnRlcm5hbChMYXllclR5cGUqIGxheWVyLCBMYXllcgogICAg
ICAgICBkcmF3VHJhbnNmb3JtLnRyYW5zbGF0ZTNkKDAuNSAqIGJvdW5kcy53aWR0aCgpLCAwLjUg
KiBib3VuZHMuaGVpZ2h0KCksIDApOwogICAgICAgICBsYXllci0+c2V0RHJhd1RyYW5zZm9ybShk
cmF3VHJhbnNmb3JtKTsKIAorICAgICAgICAvLyBTdWItbGF5ZXIncyB0cmFuc2Zvcm1hdGlvbiBp
cyBub3QgdXNpbmcgY29tYmluZWRUcmFuc2Zvcm0gYW55bW9yZSwgcmV3cml0ZSBpdCB3aXRoIGRy
YXcgdHJhbnNmb3JtIG9mIHRoaXMgbGF5ZXIuCisgICAgICAgIHN1YmxheWVyTWF0cml4ID0gbGF5
ZXItPmRyYXdUcmFuc2Zvcm0oKTsKKyAgICAgICAgc3VibGF5ZXJNYXRyaXhXaXRob3V0U2Nyb2xs
ID0gbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKTsKKwogICAgICAgICB0cmFuc2Zvcm1lZExheWVyUmVj
dCA9IEludFJlY3QoMCwgMCwgYm91bmRzLndpZHRoKCksIGJvdW5kcy5oZWlnaHQoKSk7CiAKICAg
ICAgICAgLy8gTGF5ZXIncyBvcGFjaXR5IHdpbGwgYmUgYXBwbGllZCB3aGVuIGRyYXdpbmcgdGhl
IHJlbmRlciBzdXJmYWNlLgpAQCAtMjUxLDggKzI3NCw2IEBAIHN0YXRpYyB2b2lkIGNhbGN1bGF0
ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eUludGVybmFsKExheWVyVHlwZSogbGF5ZXIsIExh
eWVyCiAgICAgfSBlbHNlCiAgICAgICAgIGxheWVyLT5zZXREcmF3YWJsZUNvbnRlbnRSZWN0KElu
dFJlY3QoKSk7CiAKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzdWJsYXllck1hdHJpeCA9IGxh
eWVyLT5kcmF3VHJhbnNmb3JtKCk7Ci0KICAgICAvLyBGbGF0dGVuIHRvIDJEIGlmIHRoZSBsYXll
ciBkb2Vzbid0IHByZXNlcnZlIDNELgogICAgIGlmICghbGF5ZXItPnByZXNlcnZlczNEKCkpIHsK
ICAgICAgICAgc3VibGF5ZXJNYXRyaXguc2V0TTEzKDApOwpAQCAtMjYyLDE1ICsyODMsMjQgQEAg
c3RhdGljIHZvaWQgY2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5SW50ZXJuYWwo
TGF5ZXJUeXBlKiBsYXllciwgTGF5ZXIKICAgICAgICAgc3VibGF5ZXJNYXRyaXguc2V0TTMzKDEp
OwogICAgICAgICBzdWJsYXllck1hdHJpeC5zZXRNMzQoMCk7CiAgICAgICAgIHN1YmxheWVyTWF0
cml4LnNldE00MygwKTsKKyAgICAgICAgc3VibGF5ZXJNYXRyaXhXaXRob3V0U2Nyb2xsLnNldE0x
MygwKTsKKyAgICAgICAgc3VibGF5ZXJNYXRyaXhXaXRob3V0U2Nyb2xsLnNldE0yMygwKTsKKyAg
ICAgICAgc3VibGF5ZXJNYXRyaXhXaXRob3V0U2Nyb2xsLnNldE0zMSgwKTsKKyAgICAgICAgc3Vi
bGF5ZXJNYXRyaXhXaXRob3V0U2Nyb2xsLnNldE0zMigwKTsKKyAgICAgICAgc3VibGF5ZXJNYXRy
aXhXaXRob3V0U2Nyb2xsLnNldE0zMygxKTsKKyAgICAgICAgc3VibGF5ZXJNYXRyaXhXaXRob3V0
U2Nyb2xsLnNldE0zNCgwKTsKKyAgICAgICAgc3VibGF5ZXJNYXRyaXhXaXRob3V0U2Nyb2xsLnNl
dE00MygwKTsKICAgICB9CiAKICAgICAvLyBBcHBseSB0aGUgc3VibGF5ZXIgdHJhbnNmb3JtIGF0
IHRoZSBjZW50ZXIgb2YgdGhlIGxheWVyLgogICAgIHN1YmxheWVyTWF0cml4Lm11bHRpcGx5KGxh
eWVyLT5zdWJsYXllclRyYW5zZm9ybSgpKTsKKyAgICBzdWJsYXllck1hdHJpeFdpdGhvdXRTY3Jv
bGwubXVsdGlwbHkobGF5ZXItPnN1YmxheWVyVHJhbnNmb3JtKCkpOwogCiAgICAgLy8gVGhlIG9y
aWdpbiBvZiB0aGUgY2hpbGRyZW4gaXMgdGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgbGF5ZXIs
IG5vdCB0aGUKICAgICAvLyBjZW50ZXIuIFRoZSBtYXRyaXggcGFzc2VkIGRvd24gdG8gdGhlIGNo
aWxkcmVuIGlzIHRoZXJlZm9yZToKICAgICAvLyBNW3NdID0gTSAqIFRyWy1jZW50ZXJdCiAgICAg
c3VibGF5ZXJNYXRyaXgudHJhbnNsYXRlM2QoLWJvdW5kcy53aWR0aCgpICogMC41LCAtYm91bmRz
LmhlaWdodCgpICogMC41LCAwKTsKKyAgICBzdWJsYXllck1hdHJpeFdpdGhvdXRTY3JvbGwudHJh
bnNsYXRlM2QoLWJvdW5kcy53aWR0aCgpICogMC41LCAtYm91bmRzLmhlaWdodCgpICogMC41LCAw
KTsKIAogICAgIExheWVyTGlzdCYgZGVzY2VuZGFudHMgPSAobGF5ZXItPnJlbmRlclN1cmZhY2Uo
KSA/IGxheWVyLT5yZW5kZXJTdXJmYWNlKCktPmxheWVyTGlzdCgpIDogbGF5ZXJMaXN0KTsKICAg
ICBkZXNjZW5kYW50cy5hcHBlbmQobGF5ZXIpOwpAQCAtMjc5LDcgKzMwOSw3IEBAIHN0YXRpYyB2
b2lkIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eUludGVybmFsKExheWVyVHlw
ZSogbGF5ZXIsIExheWVyCiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxheWVyLT5jaGls
ZHJlbigpLnNpemUoKTsgKytpKSB7CiAgICAgICAgIExheWVyVHlwZSogY2hpbGQgPSBsYXllci0+
Y2hpbGRyZW4oKVtpXS5nZXQoKTsKLSAgICAgICAgY2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRW
aXNpYmlsaXR5SW50ZXJuYWw8TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZSwgTGF5ZXJTb3J0
ZXI+KGNoaWxkLCByb290TGF5ZXIsIHN1YmxheWVyTWF0cml4LCBuZXh0SGllcmFyY2h5TWF0cml4
LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkZXNjZW5kYW50cywgbGF5ZXJTb3J0ZXIsIG1heFRl
eHR1cmVTaXplKTsKKyAgICAgICAgY2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5
SW50ZXJuYWw8TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZSwgTGF5ZXJTb3J0ZXI+KGNoaWxk
LCByb290TGF5ZXIsIHN1YmxheWVyTWF0cml4LCBzdWJsYXllck1hdHJpeFdpdGhvdXRTY3JvbGws
IG5leHRIaWVyYXJjaHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGRlc2NlbmRhbnRz
LCBsYXllclNvcnRlciwgbWF4VGV4dHVyZVNpemUpOwogCiAgICAgICAgIGlmIChjaGlsZC0+cmVu
ZGVyU3VyZmFjZSgpKSB7CiAgICAgICAgICAgICBSZW5kZXJTdXJmYWNlVHlwZSogY2hpbGRSZW5k
ZXJTdXJmYWNlID0gY2hpbGQtPnJlbmRlclN1cmZhY2UoKTsKQEAgLTM1NiwxNCArMzg2LDE0IEBA
IHN0YXRpYyB2b2lkIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eUludGVybmFs
KExheWVyVHlwZSogbGF5ZXIsIExheWVyCiAgICAgICAgIHNvcnRMYXllcnMoJmRlc2NlbmRhbnRz
LmF0KHRoaXNMYXllckluZGV4KSwgZGVzY2VuZGFudHMuZW5kKCksIGxheWVyU29ydGVyKTsKIH0K
IAotdm9pZCBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5k
VmlzaWJpbGl0eShMYXllckNocm9taXVtKiBsYXllciwgTGF5ZXJDaHJvbWl1bSogcm9vdExheWVy
LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50TWF0cml4LCBjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgZnVsbEhpZXJhcmNoeU1hdHJpeCwgVmVjdG9yPFJlZlB0cjxMYXllckNo
cm9taXVtPiA+JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBWZWN0b3I8UmVmUHRyPExheWVyQ2hy
b21pdW0+ID4mIGxheWVyTGlzdCwgaW50IG1heFRleHR1cmVTaXplKQordm9pZCBDQ0xheWVyVHJl
ZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShMYXllckNo
cm9taXVtKiBsYXllciwgTGF5ZXJDaHJvbWl1bSogcm9vdExheWVyLCBjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgcGFyZW50TWF0cml4LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFy
ZW50TWF0cml4V2l0aG91dFNjcm9sbCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGZ1bGxI
aWVyYXJjaHlNYXRyaXgsIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdCwgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiBsYXllckxpc3Qs
IGludCBtYXhUZXh0dXJlU2l6ZSkKIHsKLSAgICByZXR1cm4gV2ViQ29yZTo6Y2FsY3VsYXRlRHJh
d1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5SW50ZXJuYWw8TGF5ZXJDaHJvbWl1bSwgUmVuZGVyU3Vy
ZmFjZUNocm9taXVtLCB2b2lkKj4obGF5ZXIsIHJvb3RMYXllciwgcGFyZW50TWF0cml4LCBmdWxs
SGllcmFyY2h5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBsYXllckxpc3QsIDAsIG1h
eFRleHR1cmVTaXplKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9y
bXNBbmRWaXNpYmlsaXR5SW50ZXJuYWw8TGF5ZXJDaHJvbWl1bSwgUmVuZGVyU3VyZmFjZUNocm9t
aXVtLCB2b2lkKj4obGF5ZXIsIHJvb3RMYXllciwgcGFyZW50TWF0cml4LCBwYXJlbnRNYXRyaXhX
aXRob3V0U2Nyb2xsLCBmdWxsSGllcmFyY2h5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
LCBsYXllckxpc3QsIDAsIG1heFRleHR1cmVTaXplKTsKIH0KIAotdm9pZCBDQ0xheWVyVHJlZUhv
c3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShDQ0xheWVySW1w
bCogbGF5ZXIsIENDTGF5ZXJJbXBsKiByb290TGF5ZXIsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiBwYXJlbnRNYXRyaXgsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBmdWxsSGllcmFy
Y2h5TWF0cml4LCBWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+JiByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0LCBWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+JiBsYXllckxpc3QsIENDTGF5ZXJT
b3J0ZXIqIGxheWVyU29ydGVyLCBpbnQgbWF4VGV4dHVyZVNpemUpCit2b2lkIENDTGF5ZXJUcmVl
SG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KENDTGF5ZXJJ
bXBsKiBsYXllciwgQ0NMYXllckltcGwqIHJvb3RMYXllciwgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIHBhcmVudE1hdHJpeCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1h
dHJpeFdpdGhvdXRTY3JvbGwsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBmdWxsSGllcmFy
Y2h5TWF0cml4LCBWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+JiByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0LCBWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+JiBsYXllckxpc3QsIENDTGF5ZXJT
b3J0ZXIqIGxheWVyU29ydGVyLCBpbnQgbWF4VGV4dHVyZVNpemUpCiB7Ci0gICAgcmV0dXJuIGNh
bGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eUludGVybmFsPENDTGF5ZXJJbXBsLCBD
Q1JlbmRlclN1cmZhY2UsIENDTGF5ZXJTb3J0ZXI+KGxheWVyLCByb290TGF5ZXIsIHBhcmVudE1h
dHJpeCwgZnVsbEhpZXJhcmNoeU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgbGF5ZXJM
aXN0LCBsYXllclNvcnRlciwgbWF4VGV4dHVyZVNpemUpOworICAgIHJldHVybiBjYWxjdWxhdGVE
cmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHlJbnRlcm5hbDxDQ0xheWVySW1wbCwgQ0NSZW5kZXJT
dXJmYWNlLCBDQ0xheWVyU29ydGVyPihsYXllciwgcm9vdExheWVyLCBwYXJlbnRNYXRyaXgsIHBh
cmVudE1hdHJpeFdpdGhvdXRTY3JvbGwsIGZ1bGxIaWVyYXJjaHlNYXRyaXgsIHJlbmRlclN1cmZh
Y2VMYXllckxpc3QsIGxheWVyTGlzdCwgbGF5ZXJTb3J0ZXIsIG1heFRleHR1cmVTaXplKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RD
b21tb24uaAppbmRleCBlOTI0MWRkLi5jNzc0MTI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3RDb21tb24uaApAQCAtNDIsOSArNDIsOSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIElu
dFJlY3QgY2FsY3VsYXRlVmlzaWJsZUxheWVyUmVjdChjb25zdCBJbnRSZWN0JiB0YXJnZXRTdXJm
YWNlUmVjdCwgY29uc3QgSW50U2l6ZSYgYm91bmRzLCBjb25zdCBJbnRTaXplJiBjb250ZW50Qm91
bmRzLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdGlsaW5nVHJhbnNmb3JtKTsKICAgICBz
dGF0aWMgSW50UmVjdCBjYWxjdWxhdGVWaXNpYmxlUmVjdChjb25zdCBJbnRSZWN0JiB0YXJnZXRT
dXJmYWNlUmVjdCwgY29uc3QgSW50UmVjdCYgbGF5ZXJCb3VuZFJlY3QsIGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4Jik7CiAKLSAgICBzdGF0aWMgdm9pZCBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jt
c0FuZFZpc2liaWxpdHkoTGF5ZXJDaHJvbWl1bSosIExheWVyQ2hyb21pdW0qIHJvb3RMYXllciwg
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwgY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIGZ1bGxIaWVyYXJjaHlNYXRyaXgsIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJv
bWl1bT4gPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgVmVjdG9yPFJlZlB0cjxMYXllckNocm9t
aXVtPiA+JiBsYXllckxpc3QsIGludCBtYXhUZXh0dXJlU2l6ZSk7CisgICAgc3RhdGljIHZvaWQg
Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KExheWVyQ2hyb21pdW0qLCBMYXll
ckNocm9taXVtKiByb290TGF5ZXIsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXJlbnRN
YXRyaXgsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXJlbnRVbnNjcm9sbGVkTWF0cml4
LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZnVsbEhpZXJhcmNoeU1hdHJpeCwgVmVjdG9y
PFJlZlB0cjxMYXllckNocm9taXVtPiA+JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBWZWN0b3I8
UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIGxheWVyTGlzdCwgaW50IG1heFRleHR1cmVTaXplKTsK
IAotICAgIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShD
Q0xheWVySW1wbCosIENDTGF5ZXJJbXBsKiByb290TGF5ZXIsIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBwYXJlbnRNYXRyaXgsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBmdWxsSGll
cmFyY2h5TWF0cml4LCBWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+JiByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LCBWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+JiBsYXllckxpc3QsIENDTGF5
ZXJTb3J0ZXIqLCBpbnQgbWF4VGV4dHVyZVNpemUpOworICAgIHN0YXRpYyB2b2lkIGNhbGN1bGF0
ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShDQ0xheWVySW1wbCosIENDTGF5ZXJJbXBsKiBy
b290TGF5ZXIsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgsIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXJlbnRVbnNjcm9sbGVkTWF0cml4LCBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgZnVsbEhpZXJhcmNoeU1hdHJpeCwgVmVjdG9yPFJlZlB0cjxDQ0xh
eWVySW1wbD4gPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgVmVjdG9yPFJlZlB0cjxDQ0xheWVy
SW1wbD4gPiYgbGF5ZXJMaXN0LCBDQ0xheWVyU29ydGVyKiwgaW50IG1heFRleHR1cmVTaXplKTsK
IAogICAgIHN0cnVjdCBTY3JvbGxVcGRhdGVJbmZvIHsKICAgICAgICAgaW50IGxheWVySWQ7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCmluZGV4
IGE3MTVlZjAuLjI5N2M0NDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllckJhY2tpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllckJhY2tpbmcuY3BwCkBAIC0zNjMsNiArMzYzLDggQEAgdm9pZCBSZW5kZXJMYXllckJh
Y2tpbmc6OnVwZGF0ZUdyYXBoaWNzTGF5ZXJHZW9tZXRyeSgpCiAgICAgUmVuZGVyU3R5bGUqIHN0
eWxlID0gcmVuZGVyZXIoKS0+c3R5bGUoKTsKICAgICBtX2dyYXBoaWNzTGF5ZXItPnNldFByZXNl
cnZlczNEKHN0eWxlLT50cmFuc2Zvcm1TdHlsZTNEKCkgPT0gVHJhbnNmb3JtU3R5bGUzRFByZXNl
cnZlM0QgJiYgIXJlbmRlcmVyKCktPmhhc1JlZmxlY3Rpb24oKSk7CiAgICAgbV9ncmFwaGljc0xh
eWVyLT5zZXRCYWNrZmFjZVZpc2liaWxpdHkoc3R5bGUtPmJhY2tmYWNlVmlzaWJpbGl0eSgpID09
IEJhY2tmYWNlVmlzaWJpbGl0eVZpc2libGUpOworICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0Rml4
ZWRQb3NpdGlvbmVkKHJlbmRlcmVyKCktPmlzUG9zaXRpb25lZCgpICYmIHN0eWxlLT5wb3NpdGlv
bigpID09IEZpeGVkUG9zaXRpb24pOworICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0SXNGcmFtZVJv
b3QobV9vd25pbmdMYXllci0+aXNSb290TGF5ZXIoKSk7CiAKICAgICBSZW5kZXJMYXllciogY29t
cEFuY2VzdG9yID0gbV9vd25pbmdMYXllci0+YW5jZXN0b3JDb21wb3NpdGluZ0xheWVyKCk7CiAg
ICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21w
b3NpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0
b3IuY3BwCmluZGV4IGYyNjI3ZGUuLjQzZmMzOTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCkBAIC0xMzEwLDcgKzEzMTAsOCBA
QCBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0xheWVyKGNv
bnN0IFJlbmRlckxheWVyKiBsYXllcikgYwogICAgICAgICAgICAgIHx8IChjYW5SZW5kZXIzRFRy
YW5zZm9ybXMoKSAmJiByZW5kZXJlci0+c3R5bGUoKS0+YmFja2ZhY2VWaXNpYmlsaXR5KCkgPT0g
QmFja2ZhY2VWaXNpYmlsaXR5SGlkZGVuKQogICAgICAgICAgICAgIHx8IGNsaXBzQ29tcG9zaXRp
bmdEZXNjZW5kYW50cyhsYXllcikKICAgICAgICAgICAgICB8fCByZXF1aXJlc0NvbXBvc2l0aW5n
Rm9yQW5pbWF0aW9uKHJlbmRlcmVyKQotICAgICAgICAgICAgIHx8IHJlcXVpcmVzQ29tcG9zaXRp
bmdGb3JGdWxsU2NyZWVuKHJlbmRlcmVyKTsKKyAgICAgICAgICAgICB8fCByZXF1aXJlc0NvbXBv
c2l0aW5nRm9yRnVsbFNjcmVlbihyZW5kZXJlcikKKyAgICAgICAgICAgICB8fCByZXF1aXJlc0Nv
bXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbihyZW5kZXJlcik7CiB9CiAKIGJvb2wgUmVuZGVyTGF5
ZXJDb21wb3NpdG9yOjpjYW5CZUNvbXBvc2l0ZWQoY29uc3QgUmVuZGVyTGF5ZXIqIGxheWVyKSBj
b25zdApAQCAtMTQ5NSw2ICsxNDk2LDI2IEBAIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpy
ZXF1aXJlc0NvbXBvc2l0aW5nRm9yRnVsbFNjcmVlbihSZW5kZXJPYmplY3QqIHJlbmRlCiAjZW5k
aWYKIH0KIAorYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdG
b3JGaXhlZFBvc2l0aW9uKFJlbmRlck9iamVjdCogcmVuZGVyZXIpIGNvbnN0Cit7CisgICAgaWYg
KCEocmVuZGVyZXItPmlzUG9zaXRpb25lZCgpICYmIHJlbmRlcmVyLT5zdHlsZSgpLT5wb3NpdGlv
bigpID09IEZpeGVkUG9zaXRpb24pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBU
aGlzIGFsd2F5cyBwb3NpdGlvbjpmaXhlZCBhcyBhIHNlcGFyYXRlIGxheWVyLiBEb24ndCBjb21t
aXQhCisgICAgLy8gaWYgKFNldHRpbmdzKiBzZXR0aW5ncyA9IG1fcmVuZGVyVmlldy0+ZG9jdW1l
bnQoKS0+c2V0dGluZ3MoKSkKKyAgICAvLyAgICAgaWYgKCFzZXR0aW5ncy0+YWNjZWxlcmF0ZWRD
b21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkKCkpCisgICAgLy8gICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAvLyBGaXhlZCBwb3NpdGlvbiBlbGVtZW50cyBnZXQgY29tcG9zaXRl
ZCBvbmx5IHdoZW4gaW5zaWRlIGEgZnJhbWUgdGhhdCBzY3JvbGxzLgorICAgIC8vIElmIHdlIGNh
bid0IHJlbGlhYmx5IGtub3cgdGhlIHNpemUgb2YgdGhlIGVuY2xvc2luZyBmcmFtZSwgZG9uJ3Qg
Y2hhbmdlIGNvbXBvc2l0aW5nIHN0YXRlLgorICAgIG1fY29tcG9zaXRpbmdEZXBlbmRzT25HZW9t
ZXRyeSA9IHRydWU7CisgICAgaWYgKG1fcmVuZGVyVmlldy0+bmVlZHNMYXlvdXQoKSkKKyAgICAg
ICAgcmV0dXJuIG1fcmVuZGVyVmlldy0+aGFzTGF5ZXIoKSAmJiBtX3JlbmRlclZpZXctPmxheWVy
KCktPmlzQ29tcG9zaXRlZCgpOworCisgICAgU2Nyb2xsVmlldyogc2Nyb2xsVmlldyA9IG1fcmVu
ZGVyVmlldy0+ZnJhbWVWaWV3KCk7CisgICAgcmV0dXJuIHNjcm9sbFZpZXctPnZlcnRpY2FsU2Ny
b2xsYmFyKCkgfHwgc2Nyb2xsVmlldy0+aG9yaXpvbnRhbFNjcm9sbGJhcigpOworfQorCiBib29s
IFJlbmRlckxheWVyQ29tcG9zaXRvcjo6aGFzTm9uSWRlbnRpdHkzRFRyYW5zZm9ybShSZW5kZXJP
YmplY3QqIHJlbmRlcmVyKSBjb25zdAogewogICAgIGlmICghcmVuZGVyZXItPmhhc1RyYW5zZm9y
bSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29t
cG9zaXRvci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRv
ci5oCmluZGV4IGZlMDE4OGQuLmZmMzUzMDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgKQEAgLTI3Myw2ICsyNzMsNyBAQCBwcml2YXRl
OgogICAgIGJvb2wgcmVxdWlyZXNDb21wb3NpdGluZ1doZW5EZXNjZW5kYW50c0FyZUNvbXBvc2l0
aW5nKFJlbmRlck9iamVjdCopIGNvbnN0OwogICAgIGJvb2wgcmVxdWlyZXNDb21wb3NpdGluZ0Zv
ckZ1bGxTY3JlZW4oUmVuZGVyT2JqZWN0KikgY29uc3Q7CiAgICAgYm9vbCByZXF1aXJlc0NvbXBv
c2l0aW5nRm9yU2Nyb2xsYWJsZUZyYW1lKCkgY29uc3Q7CisgICAgYm9vbCByZXF1aXJlc0NvbXBv
c2l0aW5nRm9yRml4ZWRQb3NpdGlvbihSZW5kZXJPYmplY3QqKSBjb25zdDsKIAogICAgIGJvb2wg
cmVxdWlyZXNTY3JvbGxMYXllcihSb290TGF5ZXJBdHRhY2htZW50KSBjb25zdDsKICAgICBib29s
IHJlcXVpcmVzSG9yaXpvbnRhbFNjcm9sbGJhckxheWVyKCkgY29uc3Q7CkBAIC0zMDMsNiArMzA0
LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fY29tcG9zaXRpbmdMYXllcnNOZWVkUmVidWlsZDsK
ICAgICBib29sIG1fZmx1c2hpbmdMYXllcnM7CiAgICAgYm9vbCBtX2ZvcmNlQ29tcG9zaXRpbmdN
b2RlOworICAgIGJvb2wgbV9jb21wb3NpdGVGb3JGaXhlZFBvc2l0aW9uOwogCiAgICAgUm9vdExh
eWVyQXR0YWNobWVudCBtX3Jvb3RMYXllckF0dGFjaG1lbnQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxzLmNwcAppbmRleCBlMTQ5MzY0Li5iNGVkMjA2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGlu
Zy9JbnRlcm5hbHMuY3BwCkBAIC0yNDUsNiArMjQ1LDE2IEBAIHZvaWQgSW50ZXJuYWxzOjpzZXRG
b3JjZUNvbXBvc2l0aW5nTW9kZShEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wgZW5hYmxlZCwgRXhj
ZXB0CiAgICAgZG9jdW1lbnQtPnNldHRpbmdzKCktPnNldEZvcmNlQ29tcG9zaXRpbmdNb2RlKGVu
YWJsZWQpOwogfQogCit2b2lkIEludGVybmFsczo6c2V0RW5hYmxlQ29tcG9zaXRpbmdGb3JGaXhl
ZFBvc2l0aW9uKERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCBlbmFibGVkLCBFeGNlcHRpb25Db2Rl
JiBlYykKK3sKKyAgICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVudC0+c2V0dGluZ3MoKSkgewor
ICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGRvY3VtZW50LT5zZXR0aW5ncygpLT5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9y
Rml4ZWRQb3NpdGlvbkVuYWJsZWQoZW5hYmxlZCk7Cit9CisKIHZvaWQgSW50ZXJuYWxzOjpzZXRF
bmFibGVTY3JvbGxBbmltYXRvcihEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wgZW5hYmxlZCwgRXhj
ZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPnNldHRp
bmdzKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgg
Yi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCmluZGV4IDQxMGI2ZWQuLjliNmE0
NGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaApAQCAtNzYsNiArNzYsNyBAQCBwdWJs
aWM6CiAgICAgUGFzc1JlZlB0cjxSYW5nZT4gbWFya2VyUmFuZ2VGb3JOb2RlKE5vZGUqLCB1bnNp
Z25lZCwgRXhjZXB0aW9uQ29kZSYpOwogCiAgICAgdm9pZCBzZXRGb3JjZUNvbXBvc2l0aW5nTW9k
ZShEb2N1bWVudCosIGJvb2wgZW5hYmxlZCwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgc2V0
RW5hYmxlQ29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9uKERvY3VtZW50KiwgYm9vbCBlbmFibGVk
LCBFeGNlcHRpb25Db2RlJik7CiAKICAgICB2b2lkIHNldEVuYWJsZVNjcm9sbEFuaW1hdG9yKERv
Y3VtZW50KiwgYm9vbCBlbmFibGVkLCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCBzZXRab29t
QW5pbWF0b3JUcmFuc2Zvcm0oRG9jdW1lbnQqLCBmbG9hdCBzY2FsZSwgZmxvYXQgdHgsIGZsb2F0
IHR5LCBFeGNlcHRpb25Db2RlJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5n
L0ludGVybmFscy5pZGwgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwKaW5k
ZXggOTA5OTg5ZC4uODA0OGUwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9J
bnRlcm5hbHMuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbApA
QCAtNTAsNiArNTAsNyBAQCBtb2R1bGUgd2luZG93IHsKICAgICAgICAgUmFuZ2UgbWFya2VyUmFu
Z2VGb3JOb2RlKGluIE5vZGUgbm9kZSwgaW4gdW5zaWduZWQgbG9uZyBpbmRleCkgcmFpc2VzKERP
TUV4Y2VwdGlvbik7CiAKICAgICAgICAgdm9pZCBzZXRGb3JjZUNvbXBvc2l0aW5nTW9kZShpbiBE
b2N1bWVudCBkb2N1bWVudCwgaW4gYm9vbGVhbiBlbmFibGVkKSByYWlzZXMoRE9NRXhjZXB0aW9u
KTsKKyAgICAgICAgdm9pZCBzZXRFbmFibGVDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb24oaW4g
RG9jdW1lbnQgZG9jdW1lbnQsIGluIGJvb2xlYW4gZW5hYmxlZCkgcmFpc2VzKERPTUV4Y2VwdGlv
bik7CiAgICAgICAgIHZvaWQgc2V0RW5hYmxlU2Nyb2xsQW5pbWF0b3IoaW4gRG9jdW1lbnQgZG9j
dW1lbnQsIGluIGJvb2xlYW4gZW5hYmxlZCkgcmFpc2VzKERPTUV4Y2VwdGlvbik7CiAgICAgICAg
IHZvaWQgc2V0Wm9vbUFuaW1hdG9yVHJhbnNmb3JtKGluIERvY3VtZW50IGRvY3VtZW50LCBpbiBm
bG9hdCBzY2FsZSwgaW4gZmxvYXQgdHgsIGluIGZsb2F0IHR5KSByYWlzZXMoRE9NRXhjZXB0aW9u
KTsKICAgICAgICAgZmxvYXQgZ2V0UGFnZVNjYWxlRmFjdG9yKGluIERvY3VtZW50IGRvY3VtZW50
KSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkNvbXBvc2l0b3JJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkNvbXBvc2l0b3JJbXBsLmNwcAppbmRleCAwMjg2ZjE5Li5iNDY2MWVjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb21wb3NpdG9ySW1wbC5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29tcG9zaXRvckltcGwuY3BwCkBAIC0zMyw2
ICszMyw3IEBACiAjaW5jbHVkZSAiY2MvQ0NTY3JvbGxDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAi
Y2MvQ0NUaHJlYWRQcm94eS5oIgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmdQcmltaXRpdmVzLmg+
CisjaW5jbHVkZSAiS2V5Ym9hcmRDb2Rlcy5oIgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
IApAQCAtMTE2LDYgKzExNywyNSBAQCB2b2lkIFdlYkNvbXBvc2l0b3JJbXBsOjpoYW5kbGVJbnB1
dEV2ZW50KGNvbnN0IFdlYklucHV0RXZlbnQmIGV2ZW50KQogewogICAgIEFTU0VSVChDQ1Byb3h5
Ojppc0ltcGxUaHJlYWQoKSk7CiAgICAgQVNTRVJUKG1fY2xpZW50KTsKKworICAgIGlmIChldmVu
dC50eXBlID09IFdlYklucHV0RXZlbnQ6Ok1vdXNlV2hlZWwpIHsKKyAgICAgIGNvbnN0IFdlYk1v
dXNlV2hlZWxFdmVudCogd2hlZWxFdmVudCA9IHN0YXRpY19jYXN0PGNvbnN0CisgICAgICAgICAg
V2ViTW91c2VXaGVlbEV2ZW50Kj4oJmV2ZW50KTsKKyAgICAgIG1fc2Nyb2xsQ29udHJvbGxlci0+
c2Nyb2xsUm9vdExheWVyKEludFNpemUod2hlZWxFdmVudC0+ZGVsdGFYLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtd2hlZWxFdmVudC0+ZGVsdGFZ
KSk7CisgICAgICBtX2NsaWVudC0+ZGlkSGFuZGxlSW5wdXRFdmVudCgpOworICAgICAgcmV0dXJu
OworICAgIH0gZWxzZSBpZiAoZXZlbnQudHlwZSA9PSBXZWJJbnB1dEV2ZW50OjpLZXlEb3duKSB7
CisgICAgICBjb25zdCBXZWJLZXlib2FyZEV2ZW50KiBrZXlFdmVudCA9IHN0YXRpY19jYXN0PGNv
bnN0IFdlYktleWJvYXJkRXZlbnQqPigmZXZlbnQpOworCisgICAgICBpZiAoa2V5RXZlbnQtPndp
bmRvd3NLZXlDb2RlID09ICdhJykKKyAgICAgICAgbV9zY3JvbGxDb250cm9sbGVyLT5zY3JvbGxS
b290TGF5ZXIoSW50U2l6ZSgwLCAtMjApKTsKKyAgICAgIGVsc2UgaWYgKGtleUV2ZW50LT53aW5k
b3dzS2V5Q29kZSA9PSAnYicpCisgICAgICAgIG1fc2Nyb2xsQ29udHJvbGxlci0+c2Nyb2xsUm9v
dExheWVyKEludFNpemUoMCwgMjApKTsKKyAgICAgIG1fY2xpZW50LT5kaWRIYW5kbGVJbnB1dEV2
ZW50KCk7CisgICAgICByZXR1cm47CisgICAgfQorCiAgICAgLy8gRklYTUU6IERvIHNvbWV0aGlu
ZyBpbnRlcmVzdGluZyB3aXRoIHRoaXMgaW5wdXQgZXZlbnQgbGlrZSBpbmZvcm0gb3VyIG1fc2Ny
b2xsQ29udHJvbGxlci4KICAgICBtX2NsaWVudC0+ZGlkTm90SGFuZGxlSW5wdXRFdmVudCh0cnVl
IC8qIHNlbmRUb1dpZGdldCAqLyk7CiB9CkBAIC0xMjcsNCArMTQ3LDMgQEAgaW50IFdlYkNvbXBv
c2l0b3JJbXBsOjppZGVudGlmaWVyKCkgY29uc3QKIH0KIAogfQotCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi93aW4vV2ViS2l0Mi5kZWYgYi9Tb3VyY2UvV2ViS2l0Mi93aW4vV2ViS2l0Mi5k
ZWYKaW5kZXggNWFiNTRlOS4uMjE4N2QzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvd2lu
L1dlYktpdDIuZGVmCisrKyBiL1NvdXJjZS9XZWJLaXQyL3dpbi9XZWJLaXQyLmRlZgpAQCAtMTY0
LDYgKzE2NCw3IEBAIEVYUE9SVFMKICAgICAgICAgP3BhaW50Q29udHJvbFRpbnRzQEZyYW1lVmll
d0BXZWJDb3JlQEBBQUVYWFoKICAgICAgICAgP3Njcm9sbEVsZW1lbnRUb1JlY3RARnJhbWVWaWV3
QFdlYkNvcmVAQFFBRVhQQVZFbGVtZW50QDJAQUJWSW50UmVjdEAyQEBaCiAgICAgICAgID9yZW1v
dmVTaGFkb3dSb290QEVsZW1lbnRAV2ViQ29yZUBAUUFFWFhaCisgICAgICAgID9zZXRBY2NlbGVy
YXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJsZWRAU2V0dGluZ3NAV2ViQ29yZUBA
UUFFWF9OQFoKICAgICAgICAgP3NldERPTUV4Y2VwdGlvbkBXZWJDb3JlQEBZQVhQQVZFeGVjU3Rh
dGVASlNDQEBIQFoKICAgICAgICAgP3NldFJlc291cmNlc0RhdGFTaXplTGltaXRzRnJvbUludGVy
bmFsc0BJbnNwZWN0b3JDb250cm9sbGVyQFdlYkNvcmVAQFFBRVhISEBaCiAgICAgICAgID9zZXRT
Y3JvbGxiYXJzU3VwcHJlc3NlZEBTY3JvbGxWaWV3QFdlYkNvcmVAQFFBRVhfTjBAWgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvd2luL1dlYktpdDJDRkxpdGUuZGVmIGIvU291cmNlL1dlYktp
dDIvd2luL1dlYktpdDJDRkxpdGUuZGVmCmluZGV4IDdkNzQ2MjkuLjUwZGRlMzYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL3dpbi9XZWJLaXQyQ0ZMaXRlLmRlZgorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi93aW4vV2ViS2l0MkNGTGl0ZS5kZWYKQEAgLTE1OCw2ICsxNTgsNyBAQCBFWFBPUlRTCiAg
ICAgICAgID9wYWludENvbnRyb2xUaW50c0BGcmFtZVZpZXdAV2ViQ29yZUBAQUFFWFhaCiAgICAg
ICAgID9zY3JvbGxFbGVtZW50VG9SZWN0QEZyYW1lVmlld0BXZWJDb3JlQEBRQUVYUEFWRWxlbWVu
dEAyQEFCVkludFJlY3RAMkBAWgogICAgICAgICA/cmVtb3ZlU2hhZG93Um9vdEBFbGVtZW50QFdl
YkNvcmVAQFFBRVhYWgorICAgICAgICA/c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVk
UG9zaXRpb25FbmFibGVkQFNldHRpbmdzQFdlYkNvcmVAQFFBRVhfTkBaCiAgICAgICAgID9zZXRE
T01FeGNlcHRpb25AV2ViQ29yZUBAWUFYUEFWRXhlY1N0YXRlQEpTQ0BASEBaCiAgICAgICAgID9z
ZXRSZXNvdXJjZXNEYXRhU2l6ZUxpbWl0c0Zyb21JbnRlcm5hbHNASW5zcGVjdG9yQ29udHJvbGxl
ckBXZWJDb3JlQEBRQUVYSEhAWgogICAgICAgICA/c2V0U2Nyb2xsYmFyc1N1cHByZXNzZWRAU2Ny
b2xsVmlld0BXZWJDb3JlQEBRQUVYX04wQFoK
</data>
<flag name="commit-queue"
          id="108919"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>111784</attachid>
            <date>2011-10-20 09:01:46 -0700</date>
            <delta_ts>2011-11-01 11:57:15 -0700</delta_ts>
            <desc>simple fixed element</desc>
            <filename>test-simple-fixed.html</filename>
            <type>text/html</type>
            <size>111</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">PGJvZHkgc3R5bGU9IndpZHRoOjIwMDBweDtoZWlnaHQ6MjAwMHB4Ij4KPGRpdiBzdHlsZT0icG9z
aXRpb246Zml4ZWQ7bGVmdDoxMDBweDt0b3A6MTAwcHgiPkZJWEVEPC9kaXY+CjwvYm9keT4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>111785</attachid>
            <date>2011-10-20 09:02:09 -0700</date>
            <delta_ts>2011-10-20 09:02:09 -0700</delta_ts>
            <desc>fixed element in iframe</desc>
            <filename>test-iframe-fixed.html</filename>
            <type>text/html</type>
            <size>428</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">PGhlYWQ+CjxzY3JpcHQ+CmZ1bmN0aW9uIHByZXBhcmUoKSB7CiAgdmFyIGYgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgiZiIpOwogIHZhciBkID0gZi5jb250ZW50RG9jdW1lbnQub3BlbigpOwog
IGQud3JpdGUoIjxib2R5IHN0eWxlPSd3aWR0aDoyMDAwcHg7aGVpZ2h0OjIwMDBweCc+PGRpdiBz
dHlsZT0ncG9zaXRpb246Zml4ZWQ7bGVmdDsxMDBweDt0b3A6MTAwcHgnPkZJWEVEMjwvZGl2Pjwv
Ym9keT4iKTsKICBkLmNsb3NlKCk7Cn0KPC9zY3JpcHQ+CjwvaGVhZD4KPGJvZHkgc3R5bGU9Indp
ZHRoOjIwMDBweDtoZWlnaHQ6MjAwMHB4OyI+CjxpZnJhbWUgaWQ9ImYiIG9ubG9hZD0icHJlcGFy
ZSgpOyI+PC9pZnJhbWU+CjxkaXYgc3R5bGU9InBvc2l0aW9uOmZpeGVkO3RvcDoxMDBweDtsZWZ0
OjUwMHB4OyI+RklYRUQ8L2Rpdj4KPC9ib2R5Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>111786</attachid>
            <date>2011-10-20 09:02:36 -0700</date>
            <delta_ts>2011-10-20 09:02:36 -0700</delta_ts>
            <desc>fixed element with parent transform</desc>
            <filename>test-parent-transform-fixed.html</filename>
            <type>text/html</type>
            <size>184</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">PGJvZHkgc3R5bGU9IndpZHRoOjIwMDBweDtoZWlnaHQ6MjAwMHB4Ij4KPGRpdiBzdHlsZT0iLXdl
YmtpdC10cmFuc2Zvcm06IG1hdHJpeCgxLCAwLCAwLjYsIDEsIDI1MCwgMCk7Ij4KICA8ZGl2IHN0
eWxlPSJwb3NpdGlvbjpmaXhlZDtsZWZ0OjEwMHB4O3RvcDoxMDBweDsiPkZJWEVEPC9kaXY+Cjwv
ZGl2Pgo8L2JvZHk+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>111787</attachid>
            <date>2011-10-20 09:02:57 -0700</date>
            <delta_ts>2011-10-20 09:02:57 -0700</delta_ts>
            <desc>fixed element with local transform</desc>
            <filename>test-transform-fixed.html</filename>
            <type>text/html</type>
            <size>160</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">PGJvZHkgc3R5bGU9IndpZHRoOjIwMDBweDtoZWlnaHQ6MjAwMHB4Ij4KPGRpdiBzdHlsZT0icG9z
aXRpb246Zml4ZWQ7bGVmdDoxMDBweDt0b3A6MTAwcHg7LXdlYmtpdC10cmFuc2Zvcm06IG1hdHJp
eCgxLCAwLCAwLjYsIDEsIDI1MCwgMCk7Ij5GSVhFRDwvZGl2Pgo8L2JvZHk+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111788</attachid>
            <date>2011-10-20 09:06:03 -0700</date>
            <delta_ts>2011-11-01 11:57:15 -0700</delta_ts>
            <desc>Work in progress, attempt 2</desc>
            <filename>webkit-thread-fixed-2.patch</filename>
            <type>text/plain</type>
            <size>17577</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29tcG9zaXRvckltcGwuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29tcG9zaXRvckltcGwuY3BwCShyZXZpc2lv
biA5NzcyNSkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29tcG9zaXRvckltcGwuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiY2MvQ0NTY3JvbGxDb250
cm9sbGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NUaHJlYWRQcm94eS5oIgogI2luY2x1ZGUgPHd0Zi9U
aHJlYWRpbmdQcmltaXRpdmVzLmg+CisjaW5jbHVkZSAiS2V5Ym9hcmRDb2Rlcy5oIgogCiB1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtMTE2LDYgKzExNywxNiBAQAogewogICAgIEFTU0VS
VChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CiAgICAgQVNTRVJUKG1fY2xpZW50KTsKKworICAg
IGlmIChldmVudC50eXBlID09IFdlYklucHV0RXZlbnQ6Ok1vdXNlV2hlZWwpIHsKKyAgICAgIGNv
bnN0IFdlYk1vdXNlV2hlZWxFdmVudCogd2hlZWxFdmVudCA9IHN0YXRpY19jYXN0PGNvbnN0Cisg
ICAgICAgICAgV2ViTW91c2VXaGVlbEV2ZW50Kj4oJmV2ZW50KTsKKyAgICAgIG1fc2Nyb2xsQ29u
dHJvbGxlci0+c2Nyb2xsUm9vdExheWVyKEludFNpemUod2hlZWxFdmVudC0+ZGVsdGFYLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtd2hlZWxFdmVu
dC0+ZGVsdGFZKSk7CisgICAgICBtX2NsaWVudC0+ZGlkSGFuZGxlSW5wdXRFdmVudCgpOworICAg
ICAgcmV0dXJuOworICAgIH0KKwogICAgIC8vIEZJWE1FOiBEbyBzb21ldGhpbmcgaW50ZXJlc3Rp
bmcgd2l0aCB0aGlzIGlucHV0IGV2ZW50IGxpa2UgaW5mb3JtIG91ciBtX3Njcm9sbENvbnRyb2xs
ZXIuCiAgICAgbV9jbGllbnQtPmRpZE5vdEhhbmRsZUlucHV0RXZlbnQodHJ1ZSAvKiBzZW5kVG9X
aWRnZXQgKi8pOwogfQpAQCAtMTI3LDQgKzEzOCwzIEBACiB9CiAKIH0KLQpJbmRleDogV2ViQ29y
ZS90ZXN0aW5nL0ludGVybmFscy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS90ZXN0aW5nL0lu
dGVybmFscy5jcHAJKHJldmlzaW9uIDk3NzI1KQorKysgV2ViQ29yZS90ZXN0aW5nL0ludGVybmFs
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0OCw2ICsyNDgsMTYgQEAKICAgICBkb2N1bWVudC0+
c2V0dGluZ3MoKS0+c2V0Rm9yY2VDb21wb3NpdGluZ01vZGUoZW5hYmxlZCk7CiB9CiAKK3ZvaWQg
SW50ZXJuYWxzOjpzZXRFbmFibGVDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb24oRG9jdW1lbnQq
IGRvY3VtZW50LCBib29sIGVuYWJsZWQsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmICgh
ZG9jdW1lbnQgfHwgIWRvY3VtZW50LT5zZXR0aW5ncygpKSB7CisgICAgICAgIGVjID0gSU5WQUxJ
RF9BQ0NFU1NfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZG9jdW1lbnQtPnNl
dHRpbmdzKCktPnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9uRW5hYmxl
ZChlbmFibGVkKTsKK30KKwogdm9pZCBJbnRlcm5hbHM6OnNldEVuYWJsZVNjcm9sbEFuaW1hdG9y
KERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCBlbmFibGVkLCBFeGNlcHRpb25Db2RlJiBlYykKIHsK
ICAgICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVudC0+c2V0dGluZ3MoKSkgewpJbmRleDogV2Vi
Q29yZS90ZXN0aW5nL0ludGVybmFscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvdGVzdGluZy9J
bnRlcm5hbHMuaAkocmV2aXNpb24gOTc3MjUpCisrKyBXZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTc2LDYgKzc2LDcgQEAKICAgICBQYXNzUmVmUHRyPFJhbmdl
PiBtYXJrZXJSYW5nZUZvck5vZGUoTm9kZSosIHVuc2lnbmVkLCBFeGNlcHRpb25Db2RlJik7CiAK
ICAgICB2b2lkIHNldEZvcmNlQ29tcG9zaXRpbmdNb2RlKERvY3VtZW50KiwgYm9vbCBlbmFibGVk
LCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBzZXRFbmFibGVDb21wb3NpdGluZ0ZvckZpeGVk
UG9zaXRpb24oRG9jdW1lbnQqLCBib29sIGVuYWJsZWQsIEV4Y2VwdGlvbkNvZGUmKTsKIAogICAg
IHZvaWQgc2V0RW5hYmxlU2Nyb2xsQW5pbWF0b3IoRG9jdW1lbnQqLCBib29sIGVuYWJsZWQsIEV4
Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIHNldFpvb21BbmltYXRvclRyYW5zZm9ybShEb2N1bWVu
dCosIGZsb2F0IHNjYWxlLCBmbG9hdCB0eCwgZmxvYXQgdHksIEV4Y2VwdGlvbkNvZGUmKTsKSW5k
ZXg6IFdlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
dGVzdGluZy9JbnRlcm5hbHMuaWRsCShyZXZpc2lvbiA5NzcyNSkKKysrIFdlYkNvcmUvdGVzdGlu
Zy9JbnRlcm5hbHMuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw3IEBACiAgICAgICAg
IFJhbmdlIG1hcmtlclJhbmdlRm9yTm9kZShpbiBOb2RlIG5vZGUsIGluIHVuc2lnbmVkIGxvbmcg
aW5kZXgpIHJhaXNlcyhET01FeGNlcHRpb24pOwogCiAgICAgICAgIHZvaWQgc2V0Rm9yY2VDb21w
b3NpdGluZ01vZGUoaW4gRG9jdW1lbnQgZG9jdW1lbnQsIGluIGJvb2xlYW4gZW5hYmxlZCkgcmFp
c2VzKERPTUV4Y2VwdGlvbik7CisgICAgICAgIHZvaWQgc2V0RW5hYmxlQ29tcG9zaXRpbmdGb3JG
aXhlZFBvc2l0aW9uKGluIERvY3VtZW50IGRvY3VtZW50LCBpbiBib29sZWFuIGVuYWJsZWQpIHJh
aXNlcyhET01FeGNlcHRpb24pOwogICAgICAgICB2b2lkIHNldEVuYWJsZVNjcm9sbEFuaW1hdG9y
KGluIERvY3VtZW50IGRvY3VtZW50LCBpbiBib29sZWFuIGVuYWJsZWQpIHJhaXNlcyhET01FeGNl
cHRpb24pOwogICAgICAgICB2b2lkIHNldFpvb21BbmltYXRvclRyYW5zZm9ybShpbiBEb2N1bWVu
dCBkb2N1bWVudCwgaW4gZmxvYXQgc2NhbGUsIGluIGZsb2F0IHR4LCBpbiBmbG9hdCB0eSkgcmFp
c2VzKERPTUV4Y2VwdGlvbik7CiAgICAgICAgIGZsb2F0IGdldFBhZ2VTY2FsZUZhY3RvcihpbiBE
b2N1bWVudCBkb2N1bWVudCkgcmFpc2VzKERPTUV4Y2VwdGlvbik7CkluZGV4OiBXZWJDb3JlL3Bh
Z2UvU2V0dGluZ3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaAkocmV2
aXNpb24gOTc3MjUpCisrKyBXZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaAkod29ya2luZyBjb3B5KQpA
QCAtMzE5LDYgKzMxOSw5IEBACiAgICAgICAgIHZvaWQgc2V0QWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0ZvckFuaW1hdGlvbkVuYWJsZWQoYm9vbCk7CiAgICAgICAgIGJvb2wgYWNjZWxlcmF0ZWRDb21w
b3NpdGluZ0ZvckFuaW1hdGlvbkVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2FjY2VsZXJhdGVk
Q29tcG9zaXRpbmdGb3JBbmltYXRpb25FbmFibGVkOyB9CiAKKyAgICAgICAgdm9pZCBzZXRBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQoYm9vbCBlbmFibGVkKSB7
IG1fYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkID0gZW5hYmxl
ZDsgfQorICAgICAgICBib29sIGFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9u
RW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVk
UG9zaXRpb25FbmFibGVkOyB9CisKICAgICAgICAgdm9pZCBzZXRTaG93RGVidWdCb3JkZXJzKGJv
b2wpOwogICAgICAgICBib29sIHNob3dEZWJ1Z0JvcmRlcnMoKSBjb25zdCB7IHJldHVybiBtX3No
b3dEZWJ1Z0JvcmRlcnM7IH0KIApAQCAtNTU1LDYgKzU1OCw3IEBACiAgICAgICAgIGJvb2wgbV9h
Y2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yUGx1Z2luc0VuYWJsZWQgOiAxOwogICAgICAgICBib29s
IG1fYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckNhbnZhc0VuYWJsZWQgOiAxOwogICAgICAgICBi
b29sIG1fYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckFuaW1hdGlvbkVuYWJsZWQgOiAxOworICAg
ICAgICBib29sIG1fYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVk
IDogMTsKICAgICAgICAgYm9vbCBtX3Nob3dEZWJ1Z0JvcmRlcnMgOiAxOwogICAgICAgICBib29s
IG1fc2hvd1JlcGFpbnRDb3VudGVyIDogMTsKICAgICAgICAgYm9vbCBtX2V4cGVyaW1lbnRhbE5v
dGlmaWNhdGlvbnNFbmFibGVkIDogMTsKSW5kZXg6IFdlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcAkocmV2aXNpb24gOTc3MjUp
CisrKyBXZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODAsNiAr
MTgwLDcgQEAKICAgICAsIG1fYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvclBsdWdpbnNFbmFibGVk
KHRydWUpCiAgICAgLCBtX2FjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JDYW52YXNFbmFibGVkKHRy
dWUpCiAgICAgLCBtX2FjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JBbmltYXRpb25FbmFibGVkKHRy
dWUpCisgICAgLCBtX2FjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9uRW5hYmxl
ZChmYWxzZSkKICAgICAsIG1fc2hvd0RlYnVnQm9yZGVycyhmYWxzZSkKICAgICAsIG1fc2hvd1Jl
cGFpbnRDb3VudGVyKGZhbHNlKQogICAgICwgbV9leHBlcmltZW50YWxOb3RpZmljYXRpb25zRW5h
YmxlZChmYWxzZSkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXll
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xh
eWVyLmNwcAkocmV2aXNpb24gOTc3MjUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzTGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw2ICs4MCw4IEBACiAgICAgLCBt
X2FjY2VsZXJhdGVzRHJhd2luZyhmYWxzZSkKICAgICAsIG1fbWFpbnRhaW5zUGl4ZWxBbGlnbm1l
bnQoZmFsc2UpCiAgICAgLCBtX2FwcGxpZXNQYWdlU2NhbGUoZmFsc2UpCisgICAgLCBtX2ZpeGVk
UG9zaXRpb25lZChmYWxzZSkKKyAgICAsIG1faXNGcmFtZVJvb3QoZmFsc2UpCiAgICAgLCBtX3Bh
aW50aW5nUGhhc2UoR3JhcGhpY3NMYXllclBhaW50QWxsKQogICAgICwgbV9jb250ZW50c09yaWVu
dGF0aW9uKENvbXBvc2l0aW5nQ29vcmRpbmF0ZXNUb3BEb3duKQogICAgICwgbV9wYXJlbnQoMCkK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
ckNocm9taXVtLmNwcAkocmV2aXNpb24gOTc3MjUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw2ICs2
NSw3IEBACiAgICAgLCBtX2RlYnVnQm9yZGVyV2lkdGgoMCkKICAgICAsIG1fb3BhY2l0eSgxLjAp
CiAgICAgLCBtX2FuY2hvclBvaW50WigwKQorICAgICwgbV9kaXNyZWdhcmRTY3JvbGxEZWx0YShm
YWxzZSkKICAgICAsIG1fbWFza3NUb0JvdW5kcyhmYWxzZSkKICAgICAsIG1fb3BhcXVlKHRydWUp
CiAgICAgLCBtX2RvdWJsZVNpZGVkKHRydWUpCkBAIC0yOTIsNiArMjkzLDcgQEAKICAgICBsYXll
ci0+c2V0TmFtZShtX25hbWUpOwogICAgIGxheWVyLT5zZXRPcGFjaXR5KG1fb3BhY2l0eSk7CiAg
ICAgbGF5ZXItPnNldFBvc2l0aW9uKG1fcG9zaXRpb24pOworICAgIGxheWVyLT5zZXREaXNyZWdh
cmRTY3JvbGxEZWx0YShtX2Rpc3JlZ2FyZFNjcm9sbERlbHRhKTsKICAgICBsYXllci0+c2V0UHJl
c2VydmVzM0QocHJlc2VydmVzM0QoKSk7CiAgICAgbGF5ZXItPnNldFNjcm9sbFBvc2l0aW9uKG1f
c2Nyb2xsUG9zaXRpb24pOwogICAgIGxheWVyLT5zZXRTdWJsYXllclRyYW5zZm9ybShtX3N1Ymxh
eWVyVHJhbnNmb3JtKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllckltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCShyZXZpc2lvbiA5NzcyNSkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00NSw2ICs0NSw3IEBACiAgICAgLCBtX2RvdWJsZVNpZGVkKHRydWUpCiAgICAg
LCBtX21hc2tzVG9Cb3VuZHMoZmFsc2UpCiAgICAgLCBtX29wYWNpdHkoMS4wKQorICAgICwgbV9k
aXNyZWdhcmRTY3JvbGxEZWx0YShmYWxzZSkKICAgICAsIG1fcHJlc2VydmVzM0QoZmFsc2UpCiAg
ICAgLCBtX3VzZXNMYXllclNjaXNzb3IoZmFsc2UpCiAgICAgLCBtX2lzTm9uQ29tcG9zaXRlZENv
bnRlbnQoZmFsc2UpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwCShyZXZpc2lv
biA5NzcyNSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0Q29tbW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsNiArODUsMTIgQEAKIAog
fQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5cGU+IHN0YXRpYyBGbG9hdFBvaW50IGdldFBh
cmVudFNjcm9sbERlbHRhKExheWVyVHlwZSogbGF5ZXIpIHsKKyAgICBpZiAoIWxheWVyKQorICAg
ICAgICByZXR1cm4gRmxvYXRQb2ludCgwLCAwKTsKKyAgICByZXR1cm4gZ2V0UGFyZW50U2Nyb2xs
RGVsdGEobGF5ZXItPnBhcmVudCgpKSArIGxheWVyLT5zY3JvbGxEZWx0YSgpOworfQorCiAvLyBS
ZWN1cnNpdmVseSB3YWxrcyB0aGUgbGF5ZXIgdHJlZSBzdGFydGluZyBhdCB0aGUgZ2l2ZW4gbm9k
ZSBhbmQgY29tcHV0ZXMgYWxsIHRoZQogLy8gbmVjZXNzYXJ5IHRyYW5zZm9ybWF0aW9ucywgc2Np
c3NvciByZWN0YW5nbGVzLCByZW5kZXIgc3VyZmFjZXMsIGV0Yy4KIHRlbXBsYXRlPHR5cGVuYW1l
IExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGUsIHR5cGVuYW1lIExheWVyU29y
dGVyPgpAQCAtMTczLDYgKzE3OSwxMCBAQAogICAgIEZsb2F0UG9pbnQgYW5jaG9yUG9pbnQgPSBs
YXllci0+YW5jaG9yUG9pbnQoKTsKICAgICBGbG9hdFBvaW50IHBvc2l0aW9uID0gbGF5ZXItPnBv
c2l0aW9uKCkgLSBsYXllci0+c2Nyb2xsRGVsdGEoKTsKIAorICAgIC8vIElmIHBvc2l0aW9uIG9m
IHRoaXMgbGF5ZXIgZG9lc24ndCBjaGFuZ2Ugd2l0aCBwYXJlbnQgdGhlbiBmaW5kIHRoZSB0cmFu
c2xhdGlvbiBjYXVzZWQgYnkgcGFyZW50IGFuZCBvZmZzZXQgdGhlIGRlbHRhLgorICAgIGlmIChs
YXllci0+ZGlzcmVnYXJkU2Nyb2xsRGVsdGEoKSkKKyAgICAgICAgcG9zaXRpb24gKz0gZ2V0UGFy
ZW50U2Nyb2xsRGVsdGEobGF5ZXItPnBhcmVudCgpKTsKKwogICAgIC8vIE9mZnNldCBiZXR3ZWVu
IGFuY2hvciBwb2ludCBhbmQgdGhlIGNlbnRlciBvZiB0aGUgcXVhZC4KICAgICBmbG9hdCBjZW50
ZXJPZmZzZXRYID0gKDAuNSAtIGFuY2hvclBvaW50LngoKSkgKiBib3VuZHMud2lkdGgoKTsKICAg
ICBmbG9hdCBjZW50ZXJPZmZzZXRZID0gKDAuNSAtIGFuY2hvclBvaW50LnkoKSkgKiBib3VuZHMu
aGVpZ2h0KCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVySW1wbC5oCShyZXZpc2lvbiA5NzcyNSkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAkod29ya2luZyBjb3B5KQpAQCAt
OTgsNiArOTgsOSBAQAogICAgIHZvaWQgc2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgcG9z
aXRpb24pIHsgbV9wb3NpdGlvbiA9IHBvc2l0aW9uOyB9CiAgICAgY29uc3QgRmxvYXRQb2ludCYg
cG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9CiAKKyAgICB2b2lkIHNldERp
c3JlZ2FyZFNjcm9sbERlbHRhKGJvb2wgZGlzcmVnYXJkU2Nyb2xsRGVsdGEpIHsgbV9kaXNyZWdh
cmRTY3JvbGxEZWx0YSA9IGRpc3JlZ2FyZFNjcm9sbERlbHRhO30KKyAgICBib29sIGRpc3JlZ2Fy
ZFNjcm9sbERlbHRhKCkgY29uc3QgeyByZXR1cm4gbV9kaXNyZWdhcmRTY3JvbGxEZWx0YTsgfQor
CiAgICAgdm9pZCBzZXRQcmVzZXJ2ZXMzRChib29sIHByZXNlcnZlczNEKSB7IG1fcHJlc2VydmVz
M0QgPSBwcmVzZXJ2ZXMzRDsgfQogICAgIGJvb2wgcHJlc2VydmVzM0QoKSBjb25zdCB7IHJldHVy
biBtX3ByZXNlcnZlczNEOyB9CiAKQEAgLTIwOSw2ICsyMTIsNyBAQAogICAgIGJvb2wgbV9tYXNr
c1RvQm91bmRzOwogICAgIGZsb2F0IG1fb3BhY2l0eTsKICAgICBGbG9hdFBvaW50IG1fcG9zaXRp
b247CisgICAgYm9vbCBtX2Rpc3JlZ2FyZFNjcm9sbERlbHRhOwogICAgIGJvb2wgbV9wcmVzZXJ2
ZXMzRDsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3N1YmxheWVyVHJhbnNmb3JtOwogICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fdHJhbnNmb3JtOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1
bS5oCShyZXZpc2lvbiA5NzcyNSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vR3JhcGhpY3NMYXllckNocm9taXVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDYgKzY4LDcg
QEAKICAgICB2aXJ0dWFsIHZvaWQgc2V0UHJlc2VydmVzM0QoYm9vbCk7CiAgICAgdmlydHVhbCB2
b2lkIHNldE1hc2tzVG9Cb3VuZHMoYm9vbCk7CiAgICAgdmlydHVhbCB2b2lkIHNldERyYXdzQ29u
dGVudChib29sKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Rml4ZWRQb3NpdGlvbmVkKGJvb2wpOwog
ICAgIHZpcnR1YWwgdm9pZCBzZXRNYXNrTGF5ZXIoR3JhcGhpY3NMYXllciopOwogCiAgICAgdmly
dHVhbCB2b2lkIHNldEJhY2tncm91bmRDb2xvcihjb25zdCBDb2xvciYpOwpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgJKHJl
dmlzaW9uIDk3NzI1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
ckNocm9taXVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTExOCw2ICsxMTgsOSBAQAogICAgIHZvaWQg
c2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24pIHsgbV9wb3NpdGlvbiA9IHBv
c2l0aW9uOyAgc2V0TmVlZHNDb21taXQoKTsgfQogICAgIEZsb2F0UG9pbnQgcG9zaXRpb24oKSBj
b25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9CiAKKyAgICB2b2lkIHNldERpc3JlZ2FyZFNjcm9s
bERlbHRhKGJvb2wgZGlzcmVnYXJkU2Nyb2xsRGVsdGEpIHsgbV9kaXNyZWdhcmRTY3JvbGxEZWx0
YSA9IGRpc3JlZ2FyZFNjcm9sbERlbHRhOyBzZXROZWVkc0NvbW1pdCgpOyB9CisgICAgYm9vbCBk
aXNyZWdhcmRTY3JvbGxEZWx0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzcmVnYXJkU2Nyb2xsRGVs
dGE7IH0KKwogICAgIHZvaWQgc2V0U3VibGF5ZXJUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIHRyYW5zZm9ybSkgeyBtX3N1YmxheWVyVHJhbnNmb3JtID0gdHJhbnNmb3JtOyBz
ZXROZWVkc0NvbW1pdCgpOyB9CiAgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHN1Ymxh
eWVyVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9zdWJsYXllclRyYW5zZm9ybTsgfQogCkBA
IC0yNTIsNiArMjU1LDcgQEAKICAgICBmbG9hdCBtX2RlYnVnQm9yZGVyV2lkdGg7CiAgICAgZmxv
YXQgbV9vcGFjaXR5OwogICAgIGZsb2F0IG1fYW5jaG9yUG9pbnRaOworICAgIGJvb2wgbV9kaXNy
ZWdhcmRTY3JvbGxEZWx0YTsKICAgICBib29sIG1fbWFza3NUb0JvdW5kczsKICAgICBib29sIG1f
b3BhcXVlOwogICAgIGJvb2wgbV9kb3VibGVTaWRlZDsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1
bS5jcHAJKHJldmlzaW9uIDk3NzI1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzQsNiAr
MjM0LDE1IEBACiAgICAgdXBkYXRlTGF5ZXJEcmF3c0NvbnRlbnQoKTsKIH0KIAordm9pZCBHcmFw
aGljc0xheWVyQ2hyb21pdW06OnNldEZpeGVkUG9zaXRpb25lZChib29sIGZpeGVkUG9zaXRpb25l
ZCkKK3sKKyAgICBpZiAoZml4ZWRQb3NpdGlvbmVkID09IG1fZml4ZWRQb3NpdGlvbmVkKQorICAg
ICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0xheWVyOjpzZXRGaXhlZFBvc2l0aW9uZWQoZml4
ZWRQb3NpdGlvbmVkKTsKKyAgICB1cGRhdGVMYXllclBvc2l0aW9uKCk7Cit9CisKIHZvaWQgR3Jh
cGhpY3NMYXllckNocm9taXVtOjpzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9y
KQogewogICAgIGlmIChtX2JhY2tncm91bmRDb2xvclNldCAmJiBtX2JhY2tncm91bmRDb2xvciA9
PSBjb2xvcikKQEAgLTQ5MSw2ICs1MDAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX3Bvc2l0aW9uLnkoKSArIG1fYW5jaG9yUG9pbnQueSgpICogbV9zaXplLmhlaWdodCgpKTsK
IAogICAgIHByaW1hcnlMYXllcigpLT5zZXRQb3NpdGlvbihsYXllclBvc2l0aW9uKTsKKyAgICBw
cmltYXJ5TGF5ZXIoKS0+c2V0RGlzcmVnYXJkU2Nyb2xsRGVsdGEobV9maXhlZFBvc2l0aW9uZWQp
OwogfQogCiB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJTaXplKCkKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oCShyZXZpc2lvbiA5
NzcyNSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNjcsNiArMjY3LDEzIEBACiAgICAgYm9vbCBhY2NlbGVyYXRlc0RyYXdp
bmcoKSBjb25zdCB7IHJldHVybiBtX2FjY2VsZXJhdGVzRHJhd2luZzsgfQogICAgIHZpcnR1YWwg
dm9pZCBzZXRBY2NlbGVyYXRlc0RyYXdpbmcoYm9vbCBiKSB7IG1fYWNjZWxlcmF0ZXNEcmF3aW5n
ID0gYjsgfQogCisgICAgYm9vbCBmaXhlZFBvc2l0aW9uZWQoKSBjb25zdCB7IHJldHVybiBtX2Zp
eGVkUG9zaXRpb25lZDsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRGaXhlZFBvc2l0aW9uZWQoYm9v
bCBiKSB7IG1fZml4ZWRQb3NpdGlvbmVkID0gYjsgfQorCisgICAgLy8gU2V0IHRvIHRydWUgd2hl
biB0aGUgbGF5ZXIgY29ycmVzcG9uZHMgdG8gdGhlIHJvb3QgbGF5ZXIgb2YgYSBGcmFtZS4KKyAg
ICBib29sIGlzRnJhbWVSb290KCkgY29uc3QgeyByZXR1cm4gbV9pc0ZyYW1lUm9vdDsgfQorICAg
IHZpcnR1YWwgdm9pZCBzZXRJc0ZyYW1lUm9vdChib29sIGIpIHsgbV9pc0ZyYW1lUm9vdCA9IGI7
IH0KKwogICAgIC8vIFRoZSBjb2xvciB1c2VkIHRvIHBhaW50IHRoZSBsYXllciBiYWNrZ3JvdW5k
cwogICAgIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX2Jh
Y2tncm91bmRDb2xvcjsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRCYWNrZ3JvdW5kQ29sb3IoY29u
c3QgQ29sb3ImKTsKQEAgLTQyNyw2ICs0MzQsOCBAQAogICAgIGJvb2wgbV9hY2NlbGVyYXRlc0Ry
YXdpbmcgOiAxOwogICAgIGJvb2wgbV9tYWludGFpbnNQaXhlbEFsaWdubWVudCA6IDE7CiAgICAg
Ym9vbCBtX2FwcGxpZXNQYWdlU2NhbGUgOiAxOyAvLyBTZXQgZm9yIHRoZSBsYXllciB3aGljaCBo
YXMgdGhlIHBhZ2Ugc2NhbGUgYXBwbGllZCB0byBpdC4KKyAgICBib29sIG1fZml4ZWRQb3NpdGlv
bmVkIDogMTsKKyAgICBib29sIG1faXNGcmFtZVJvb3QgOiAxOwogCiAgICAgR3JhcGhpY3NMYXll
clBhaW50aW5nUGhhc2UgbV9wYWludGluZ1BoYXNlOwogICAgIENvbXBvc2l0aW5nQ29vcmRpbmF0
ZXNPcmllbnRhdGlvbiBtX2NvbnRlbnRzT3JpZW50YXRpb247IC8vIGFmZmVjdHMgb3JpZW50YXRp
b24gb2YgbGF5ZXIgY29udGVudHMKQEAgLTQ2MSw0ICs0NzAsMyBAQAogI2VuZGlmIC8vIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKIAogI2VuZGlmIC8vIEdyYXBoaWNzTGF5ZXJfaAotCklu
ZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAJKHJldmlzaW9uIDk3
NzI1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzYzLDYgKzM2Myw4IEBACiAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gcmVu
ZGVyZXIoKS0+c3R5bGUoKTsKICAgICBtX2dyYXBoaWNzTGF5ZXItPnNldFByZXNlcnZlczNEKHN0
eWxlLT50cmFuc2Zvcm1TdHlsZTNEKCkgPT0gVHJhbnNmb3JtU3R5bGUzRFByZXNlcnZlM0QgJiYg
IXJlbmRlcmVyKCktPmhhc1JlZmxlY3Rpb24oKSk7CiAgICAgbV9ncmFwaGljc0xheWVyLT5zZXRC
YWNrZmFjZVZpc2liaWxpdHkoc3R5bGUtPmJhY2tmYWNlVmlzaWJpbGl0eSgpID09IEJhY2tmYWNl
VmlzaWJpbGl0eVZpc2libGUpOworICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0Rml4ZWRQb3NpdGlv
bmVkKHJlbmRlcmVyKCktPmlzUG9zaXRpb25lZCgpICYmIHN0eWxlLT5wb3NpdGlvbigpID09IEZp
eGVkUG9zaXRpb24pOworICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0SXNGcmFtZVJvb3QobV9vd25p
bmdMYXllci0+aXNSb290TGF5ZXIoKSk7CiAKICAgICBSZW5kZXJMYXllciogY29tcEFuY2VzdG9y
ID0gbV9vd25pbmdMYXllci0+YW5jZXN0b3JDb21wb3NpdGluZ0xheWVyKCk7CiAgICAgCkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAkocmV2aXNpb24gOTc3
MjUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjczLDYgKzI3Myw3IEBACiAgICAgYm9vbCByZXF1aXJlc0NvbXBvc2l0aW5n
V2hlbkRlc2NlbmRhbnRzQXJlQ29tcG9zaXRpbmcoUmVuZGVyT2JqZWN0KikgY29uc3Q7CiAgICAg
Ym9vbCByZXF1aXJlc0NvbXBvc2l0aW5nRm9yRnVsbFNjcmVlbihSZW5kZXJPYmplY3QqKSBjb25z
dDsKICAgICBib29sIHJlcXVpcmVzQ29tcG9zaXRpbmdGb3JTY3JvbGxhYmxlRnJhbWUoKSBjb25z
dDsKKyAgICBib29sIHJlcXVpcmVzQ29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9uKFJlbmRlck9i
amVjdCopIGNvbnN0OwogCiAgICAgYm9vbCByZXF1aXJlc1Njcm9sbExheWVyKFJvb3RMYXllckF0
dGFjaG1lbnQpIGNvbnN0OwogICAgIGJvb2wgcmVxdWlyZXNIb3Jpem9udGFsU2Nyb2xsYmFyTGF5
ZXIoKSBjb25zdDsKQEAgLTMwMyw2ICszMDQsNyBAQAogICAgIGJvb2wgbV9jb21wb3NpdGluZ0xh
eWVyc05lZWRSZWJ1aWxkOwogICAgIGJvb2wgbV9mbHVzaGluZ0xheWVyczsKICAgICBib29sIG1f
Zm9yY2VDb21wb3NpdGluZ01vZGU7CisgICAgYm9vbCBtX2NvbXBvc2l0ZUZvckZpeGVkUG9zaXRp
b247CiAKICAgICBSb290TGF5ZXJBdHRhY2htZW50IG1fcm9vdExheWVyQXR0YWNobWVudDsKIApJ
bmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCShyZXZp
c2lvbiA5NzcyNSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMTAsNyArMTMxMCw4IEBACiAgICAgICAgICAgICAgfHwg
KGNhblJlbmRlcjNEVHJhbnNmb3JtcygpICYmIHJlbmRlcmVyLT5zdHlsZSgpLT5iYWNrZmFjZVZp
c2liaWxpdHkoKSA9PSBCYWNrZmFjZVZpc2liaWxpdHlIaWRkZW4pCiAgICAgICAgICAgICAgfHwg
Y2xpcHNDb21wb3NpdGluZ0Rlc2NlbmRhbnRzKGxheWVyKQogICAgICAgICAgICAgIHx8IHJlcXVp
cmVzQ29tcG9zaXRpbmdGb3JBbmltYXRpb24ocmVuZGVyZXIpCi0gICAgICAgICAgICAgfHwgcmVx
dWlyZXNDb21wb3NpdGluZ0ZvckZ1bGxTY3JlZW4ocmVuZGVyZXIpOworICAgICAgICAgICAgIHx8
IHJlcXVpcmVzQ29tcG9zaXRpbmdGb3JGdWxsU2NyZWVuKHJlbmRlcmVyKQorICAgICAgICAgICAg
IHx8IHJlcXVpcmVzQ29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9uKHJlbmRlcmVyKTsKIH0KIAog
Ym9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNhbkJlQ29tcG9zaXRlZChjb25zdCBSZW5kZXJM
YXllciogbGF5ZXIpIGNvbnN0CkBAIC0xNDk1LDYgKzE0OTYsMjYgQEAKICNlbmRpZgogfQogCiti
b29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0ZvckZpeGVkUG9z
aXRpb24oUmVuZGVyT2JqZWN0KiByZW5kZXJlcikgY29uc3QKK3sKKyAgICBpZiAoIShyZW5kZXJl
ci0+aXNQb3NpdGlvbmVkKCkgJiYgcmVuZGVyZXItPnN0eWxlKCktPnBvc2l0aW9uKCkgPT0gRml4
ZWRQb3NpdGlvbikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFRoaXMgYWx3YXlz
IHBvc2l0aW9uOmZpeGVkIGFzIGEgc2VwYXJhdGUgbGF5ZXIuIERvbid0IGNvbW1pdCEKKyAgICAv
LyBpZiAoU2V0dGluZ3MqIHNldHRpbmdzID0gbV9yZW5kZXJWaWV3LT5kb2N1bWVudCgpLT5zZXR0
aW5ncygpKQorICAgIC8vICAgICBpZiAoIXNldHRpbmdzLT5hY2NlbGVyYXRlZENvbXBvc2l0aW5n
Rm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQoKSkKKyAgICAvLyAgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIC8vIEZpeGVkIHBvc2l0aW9uIGVsZW1lbnRzIGdldCBjb21wb3NpdGVkIG9ubHkgd2hl
biBpbnNpZGUgYSBmcmFtZSB0aGF0IHNjcm9sbHMuCisgICAgLy8gSWYgd2UgY2FuJ3QgcmVsaWFi
bHkga25vdyB0aGUgc2l6ZSBvZiB0aGUgZW5jbG9zaW5nIGZyYW1lLCBkb24ndCBjaGFuZ2UgY29t
cG9zaXRpbmcgc3RhdGUuCisgICAgbV9jb21wb3NpdGluZ0RlcGVuZHNPbkdlb21ldHJ5ID0gdHJ1
ZTsKKyAgICBpZiAobV9yZW5kZXJWaWV3LT5uZWVkc0xheW91dCgpKQorICAgICAgICByZXR1cm4g
bV9yZW5kZXJWaWV3LT5oYXNMYXllcigpICYmIG1fcmVuZGVyVmlldy0+bGF5ZXIoKS0+aXNDb21w
b3NpdGVkKCk7CisKKyAgICBTY3JvbGxWaWV3KiBzY3JvbGxWaWV3ID0gbV9yZW5kZXJWaWV3LT5m
cmFtZVZpZXcoKTsKKyAgICByZXR1cm4gc2Nyb2xsVmlldy0+dmVydGljYWxTY3JvbGxiYXIoKSB8
fCBzY3JvbGxWaWV3LT5ob3Jpem9udGFsU2Nyb2xsYmFyKCk7Cit9CisKIGJvb2wgUmVuZGVyTGF5
ZXJDb21wb3NpdG9yOjpoYXNOb25JZGVudGl0eTNEVHJhbnNmb3JtKFJlbmRlck9iamVjdCogcmVu
ZGVyZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFyZW5kZXJlci0+aGFzVHJhbnNmb3JtKCkpCkluZGV4
OiBXZWJLaXQyL3dpbi9XZWJLaXQyQ0ZMaXRlLmRlZgo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL3dp
bi9XZWJLaXQyQ0ZMaXRlLmRlZgkocmV2aXNpb24gOTc3MjUpCisrKyBXZWJLaXQyL3dpbi9XZWJL
aXQyQ0ZMaXRlLmRlZgkod29ya2luZyBjb3B5KQpAQCAtMTU4LDYgKzE1OCw3IEBACiAgICAgICAg
ID9wYWludENvbnRyb2xUaW50c0BGcmFtZVZpZXdAV2ViQ29yZUBAQUFFWFhaCiAgICAgICAgID9z
Y3JvbGxFbGVtZW50VG9SZWN0QEZyYW1lVmlld0BXZWJDb3JlQEBRQUVYUEFWRWxlbWVudEAyQEFC
VkludFJlY3RAMkBAWgogICAgICAgICA/cmVtb3ZlU2hhZG93Um9vdEBFbGVtZW50QFdlYkNvcmVA
QFFBRVhYWgorICAgICAgICA/c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRp
b25FbmFibGVkQFNldHRpbmdzQFdlYkNvcmVAQFFBRVhfTkBaCiAgICAgICAgID9zZXRET01FeGNl
cHRpb25AV2ViQ29yZUBAWUFYUEFWRXhlY1N0YXRlQEpTQ0BASEBaCiAgICAgICAgID9zZXRSZXNv
dXJjZXNEYXRhU2l6ZUxpbWl0c0Zyb21JbnRlcm5hbHNASW5zcGVjdG9yQ29udHJvbGxlckBXZWJD
b3JlQEBRQUVYSEhAWgogICAgICAgICA/c2V0U2Nyb2xsYmFyc1N1cHByZXNzZWRAU2Nyb2xsVmll
d0BXZWJDb3JlQEBRQUVYX04wQFoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>113051</attachid>
            <date>2011-10-31 08:23:51 -0700</date>
            <delta_ts>2011-10-31 08:23:51 -0700</delta_ts>
            <desc>fixed in transformed iframe</desc>
            <filename>fixed-in-transformed-iframe.html</filename>
            <type>text/html</type>
            <size>668</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">PCEtLSBzYXZlZCBmcm9tIHVybD0oMDA2NSlodHRwczovL2J1Zy03MDEwMy1hdHRhY2htZW50cy53
ZWJraXQub3JnL2F0dGFjaG1lbnQuY2dpP2lkPTExMTc4NSAtLT4KPGh0bWw+PGhlYWQ+PG1ldGEg
aHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRG
LTgiPgo8c2NyaXB0PgpmdW5jdGlvbiBwcmVwYXJlKCkgewogIHZhciBmID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoImYiKTsKICB2YXIgZCA9IGYuY29udGVudERvY3VtZW50Lm9wZW4oKTsKICBk
LndyaXRlKCI8Ym9keSBzdHlsZT0nd2lkdGg6MjAwMHB4O2hlaWdodDoyMDAwcHgnPjxkaXYgc3R5
bGU9J3Bvc2l0aW9uOmZpeGVkO2xlZnQ7MTAwcHg7dG9wOjEwMHB4O3otaW5kZXg6MTsnPkZJWEVE
MjwvZGl2PjwvYm9keT4iKTsKICBkLmNsb3NlKCk7Cn0KPC9zY3JpcHQ+CjwvaGVhZD4KPGJvZHkg
c3R5bGU9IndpZHRoOjIwMDBweDtoZWlnaHQ6MjAwMHB4OyI+CjxpZnJhbWUgaWQ9ImYiIG9ubG9h
ZD0icHJlcGFyZSgpOyIgc3R5bGU9Ii13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoLTIwZGVnKSI+
PC9pZnJhbWU+CjxkaXYgc3R5bGU9InBvc2l0aW9uOmZpeGVkO3RvcDoxMDBweDtsZWZ0OjUwMHB4
O3otaW5kZXg6MTsiPkZJWEVEPC9kaXY+Cgo8L2JvZHk+PC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113052</attachid>
            <date>2011-10-31 08:24:22 -0700</date>
            <delta_ts>2011-11-01 11:57:15 -0700</delta_ts>
            <desc>Patch 3</desc>
            <filename>webkit-thread-fixed-3.patch</filename>
            <type>text/plain</type>
            <size>13986</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5j
cHAKaW5kZXggMjkxMTczZC4uMjY0NTRiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5jcHAKQEAgLTgxLDYgKzgxLDggQEAgR3JhcGhp
Y3NMYXllcjo6R3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyQ2xpZW50KiBjbGllbnQpCiAgICAg
LCBtX2FjY2VsZXJhdGVzRHJhd2luZyhmYWxzZSkKICAgICAsIG1fbWFpbnRhaW5zUGl4ZWxBbGln
bm1lbnQoZmFsc2UpCiAgICAgLCBtX2FwcGxpZXNQYWdlU2NhbGUoZmFsc2UpCisgICAgLCBtX2Fu
Y2hvckxheWVyKGZhbHNlKQorICAgICwgbV9maXhlZFRvQW5jaG9yTGF5ZXIoZmFsc2UpCiAgICAg
LCBtX3BhaW50aW5nUGhhc2UoR3JhcGhpY3NMYXllclBhaW50QWxsKQogICAgICwgbV9jb250ZW50
c09yaWVudGF0aW9uKENvbXBvc2l0aW5nQ29vcmRpbmF0ZXNUb3BEb3duKQogICAgICwgbV9wYXJl
bnQoMCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzTGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5
ZXIuaAppbmRleCA4Y2RmMGQ3Li5mYWFjYTVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oCkBAIC0zNTksNiArMzU5LDEyIEBAIHB1Ymxp
YzoKICAgICB2b2lkIHNldEFwcGxpZXNQYWdlU2NhbGUoYm9vbCBhcHBsaWVzU2NhbGUgPSB0cnVl
KSB7IG1fYXBwbGllc1BhZ2VTY2FsZSA9IGFwcGxpZXNTY2FsZTsgfQogICAgIGJvb2wgYXBwbGll
c1BhZ2VTY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXBwbGllc1BhZ2VTY2FsZTsgfQogCisgICAg
Ym9vbCBhbmNob3JMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fYW5jaG9yTGF5ZXI7IH0KKyAgICB2
b2lkIHNldEFuY2hvckxheWVyKGJvb2wgYW5jaG9yTGF5ZXIgPSB0cnVlKSB7IG1fYW5jaG9yTGF5
ZXIgPSBhbmNob3JMYXllcjsgfQorCisgICAgYm9vbCBmaXhlZFRvQW5jaG9yTGF5ZXIoKSBjb25z
dCB7IHJldHVybiBtX2ZpeGVkVG9BbmNob3JMYXllcjsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRG
aXhlZFRvQW5jaG9yTGF5ZXIoYm9vbCBiKSB7IG1fZml4ZWRUb0FuY2hvckxheWVyID0gYjsgfQor
CiAgICAgZmxvYXQgcGFnZVNjYWxlRmFjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnQgPyBt
X2NsaWVudC0+cGFnZVNjYWxlRmFjdG9yKCkgOiAxOyB9CiAgICAgZmxvYXQgZGV2aWNlU2NhbGVG
YWN0b3IoKSBjb25zdCB7IHJldHVybiBtX2NsaWVudCA/IG1fY2xpZW50LT5kZXZpY2VTY2FsZUZh
Y3RvcigpIDogMTsgfQogCkBAIC00MzEsNiArNDM3LDggQEAgcHJvdGVjdGVkOgogICAgIGJvb2wg
bV9hY2NlbGVyYXRlc0RyYXdpbmcgOiAxOwogICAgIGJvb2wgbV9tYWludGFpbnNQaXhlbEFsaWdu
bWVudCA6IDE7CiAgICAgYm9vbCBtX2FwcGxpZXNQYWdlU2NhbGUgOiAxOyAvLyBTZXQgZm9yIHRo
ZSBsYXllciB3aGljaCBoYXMgdGhlIHBhZ2Ugc2NhbGUgYXBwbGllZCB0byBpdC4KKyAgICBib29s
IG1fYW5jaG9yTGF5ZXIgOiAxOyAvLyBTZXQgZm9yIHRoZSBsYXllciB0aGF0IG90aGVyIGxheWVy
cyBhcmUgZml4ZWQgdG8uCisgICAgYm9vbCBtX2ZpeGVkVG9BbmNob3JMYXllciA6IDE7IC8vIFNl
dCBmb3IgdGhlIGxheWVyIHRoYXQgaGFzIHBvc2l0aW9uIGZpeGVkIHRvIHRoZSBhbmNob3IgbGF5
ZXIuCiAKICAgICBHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSBtX3BhaW50aW5nUGhhc2U7CiAg
ICAgQ29tcG9zaXRpbmdDb29yZGluYXRlc09yaWVudGF0aW9uIG1fY29udGVudHNPcmllbnRhdGlv
bjsgLy8gYWZmZWN0cyBvcmllbnRhdGlvbiBvZiBsYXllciBjb250ZW50cwpAQCAtNDY1LDQgKzQ3
MywzIEBAIHZvaWQgc2hvd0dyYXBoaWNzTGF5ZXJUcmVlKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXIqIGxheWVyKTsKICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAK
ICNlbmRpZiAvLyBHcmFwaGljc0xheWVyX2gKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJv
bWl1bS5jcHAKaW5kZXggNzI5YTlhYy4uNGNjOTBiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xh
eWVyQ2hyb21pdW0uY3BwCkBAIC0yMzQsNiArMjM0LDE1IEBAIHZvaWQgR3JhcGhpY3NMYXllckNo
cm9taXVtOjpzZXREcmF3c0NvbnRlbnQoYm9vbCBkcmF3c0NvbnRlbnQpCiAgICAgdXBkYXRlTGF5
ZXJEcmF3c0NvbnRlbnQoKTsKIH0KIAordm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldEZp
eGVkVG9BbmNob3JMYXllcihib29sIGZpeGVkVG9BbmNob3JMYXllcikKK3sKKyAgICBpZiAoZml4
ZWRUb0FuY2hvckxheWVyID09IG1fZml4ZWRUb0FuY2hvckxheWVyKQorICAgICAgICByZXR1cm47
CisKKyAgICBHcmFwaGljc0xheWVyOjpzZXRGaXhlZFRvQW5jaG9yTGF5ZXIoZml4ZWRUb0FuY2hv
ckxheWVyKTsKKyAgICB1cGRhdGVMYXllclBvc2l0aW9uKCk7Cit9CisKIHZvaWQgR3JhcGhpY3NM
YXllckNocm9taXVtOjpzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQogewog
ICAgIGlmIChtX2JhY2tncm91bmRDb2xvclNldCAmJiBtX2JhY2tncm91bmRDb2xvciA9PSBjb2xv
cikKQEAgLTQ5Myw2ICs1MDIsOCBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRl
TGF5ZXJQb3NpdGlvbigpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcG9zaXRpb24u
eSgpICsgbV9hbmNob3JQb2ludC55KCkgKiBtX3NpemUuaGVpZ2h0KCkpOwogCiAgICAgcHJpbWFy
eUxheWVyKCktPnNldFBvc2l0aW9uKGxheWVyUG9zaXRpb24pOworICAgIHByaW1hcnlMYXllcigp
LT5zZXRBbmNob3JMYXllcihtX2FuY2hvckxheWVyKTsKKyAgICBwcmltYXJ5TGF5ZXIoKS0+c2V0
Rml4ZWRUb0FuY2hvckxheWVyKG1fZml4ZWRUb0FuY2hvckxheWVyKTsKIH0KIAogdm9pZCBHcmFw
aGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZUxheWVyU2l6ZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0u
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5
ZXJDaHJvbWl1bS5oCmluZGV4IDcxOTBlNTAuLjM5YWY5OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNz
TGF5ZXJDaHJvbWl1bS5oCkBAIC02OCw2ICs2OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZv
aWQgc2V0UHJlc2VydmVzM0QoYm9vbCk7CiAgICAgdmlydHVhbCB2b2lkIHNldE1hc2tzVG9Cb3Vu
ZHMoYm9vbCk7CiAgICAgdmlydHVhbCB2b2lkIHNldERyYXdzQ29udGVudChib29sKTsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0Rml4ZWRUb0FuY2hvckxheWVyKGJvb2wpOwogICAgIHZpcnR1YWwgdm9p
ZCBzZXRNYXNrTGF5ZXIoR3JhcGhpY3NMYXllciopOwogCiAgICAgdmlydHVhbCB2b2lkIHNldEJh
Y2tncm91bmRDb2xvcihjb25zdCBDb2xvciYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAppbmRleCA2
YTZhMGU3Li5iZmI1MWQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcApAQCAtNjMsNiArNjMsOCBA
QCBMYXllckNocm9taXVtOjpMYXllckNocm9taXVtKENDTGF5ZXJEZWxlZ2F0ZSogZGVsZWdhdGUp
CiAgICAgLCBtX2RlYnVnQm9yZGVyV2lkdGgoMCkKICAgICAsIG1fb3BhY2l0eSgxLjApCiAgICAg
LCBtX2FuY2hvclBvaW50WigwKQorICAgICwgbV9hbmNob3JMYXllcihmYWxzZSkKKyAgICAsIG1f
Zml4ZWRUb0FuY2hvckxheWVyKGZhbHNlKQogICAgICwgbV9tYXNrc1RvQm91bmRzKGZhbHNlKQog
ICAgICwgbV9vcGFxdWUoZmFsc2UpCiAgICAgLCBtX2RvdWJsZVNpZGVkKHRydWUpCkBAIC0yOTEs
NiArMjkzLDcgQEAgdm9pZCBMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKENDTGF5ZXJJ
bXBsKiBsYXllcikKICAgICBsYXllci0+c2V0T3BhcXVlKG1fb3BhcXVlKTsKICAgICBsYXllci0+
c2V0T3BhY2l0eShtX29wYWNpdHkpOwogICAgIGxheWVyLT5zZXRQb3NpdGlvbihtX3Bvc2l0aW9u
KTsKKyAgICBsYXllci0+c2V0Rml4ZWRUb0FuY2hvckxheWVyKG1fZml4ZWRUb0FuY2hvckxheWVy
KTsKICAgICBsYXllci0+c2V0UHJlc2VydmVzM0QocHJlc2VydmVzM0QoKSk7CiAgICAgbGF5ZXIt
PnNldFNjcm9sbFBvc2l0aW9uKG1fc2Nyb2xsUG9zaXRpb24pOwogICAgIGxheWVyLT5zZXRTdWJs
YXllclRyYW5zZm9ybShtX3N1YmxheWVyVHJhbnNmb3JtKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAppbmRl
eCBjN2FlY2JlLi5kNDc1MjE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCkBAIC0xMTksNiArMTE5LDEy
IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0
aW9uKSB7IG1fcG9zaXRpb24gPSBwb3NpdGlvbjsgIHNldE5lZWRzQ29tbWl0KCk7IH0KICAgICBG
bG9hdFBvaW50IHBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbjsgfQogCisgICAg
dm9pZCBzZXRBbmNob3JMYXllcihib29sIGFuY2hvckxheWVyKSB7IG1fYW5jaG9yTGF5ZXIgPSBh
bmNob3JMYXllcjsgfQorICAgIGJvb2wgYW5jaG9yTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2Fu
Y2hvckxheWVyOyB9CisKKyAgICB2b2lkIHNldEZpeGVkVG9BbmNob3JMYXllcihib29sIGZpeGVk
VG9BbmNob3JMYXllcikgeyBtX2ZpeGVkVG9BbmNob3JMYXllciA9IGZpeGVkVG9BbmNob3JMYXll
cjsgc2V0TmVlZHNDb21taXQoKTsgfQorICAgIGJvb2wgZml4ZWRUb0FuY2hvckxheWVyKCkgY29u
c3QgeyByZXR1cm4gbV9maXhlZFRvQW5jaG9yTGF5ZXI7IH0KKwogICAgIHZvaWQgc2V0U3VibGF5
ZXJUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkgeyBtX3N1
YmxheWVyVHJhbnNmb3JtID0gdHJhbnNmb3JtOyBzZXROZWVkc0NvbW1pdCgpOyB9CiAgICAgY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHN1YmxheWVyVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1
cm4gbV9zdWJsYXllclRyYW5zZm9ybTsgfQogCkBAIC0yNjAsNiArMjY2LDggQEAgcHJpdmF0ZToK
ICAgICBmbG9hdCBtX2RlYnVnQm9yZGVyV2lkdGg7CiAgICAgZmxvYXQgbV9vcGFjaXR5OwogICAg
IGZsb2F0IG1fYW5jaG9yUG9pbnRaOworICAgIGJvb2wgbV9hbmNob3JMYXllcjsKKyAgICBib29s
IG1fZml4ZWRUb0FuY2hvckxheWVyOwogICAgIGJvb2wgbV9tYXNrc1RvQm91bmRzOwogICAgIGJv
b2wgbV9vcGFxdWU7CiAgICAgYm9vbCBtX2RvdWJsZVNpZGVkOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwu
Y3BwCmluZGV4IGIzYWYwZmIuLjIzM2Q1NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKQEAg
LTQ3LDYgKzQ3LDggQEAgQ0NMYXllckltcGw6OkNDTGF5ZXJJbXBsKGludCBpZCkKICAgICAsIG1f
bWFza3NUb0JvdW5kcyhmYWxzZSkKICAgICAsIG1fb3BhcXVlKGZhbHNlKQogICAgICwgbV9vcGFj
aXR5KDEuMCkKKyAgICAsIG1fYW5jaG9yTGF5ZXIoZmFsc2UpCisgICAgLCBtX2ZpeGVkVG9BbmNo
b3JMYXllcihmYWxzZSkKICAgICAsIG1fcHJlc2VydmVzM0QoZmFsc2UpCiAgICAgLCBtX3VzZXNM
YXllclNjaXNzb3IoZmFsc2UpCiAgICAgLCBtX2lzTm9uQ29tcG9zaXRlZENvbnRlbnQoZmFsc2Up
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllckltcGwuaAppbmRleCBjMzJlMTE3Li44NDBkYzAxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJJbXBsLmgKQEAgLTEwMSw2ICsxMDEsMTIgQEAgcHVibGljOgogICAgIHZvaWQgc2V0UG9zaXRp
b24oY29uc3QgRmxvYXRQb2ludCYpOwogICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbjsgfQogCisgICAgdm9pZCBzZXRBbmNob3JMYXllcihi
b29sIGFuY2hvckxheWVyID0gdHJ1ZSkgeyBtX2FuY2hvckxheWVyID0gYW5jaG9yTGF5ZXI7IH0K
KyAgICBib29sIGFuY2hvckxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9hbmNob3JMYXllcjsgfQor
CisgICAgdm9pZCBzZXRGaXhlZFRvQW5jaG9yTGF5ZXIoYm9vbCBmaXhlZFRvQW5jaG9yTGF5ZXIg
PSB0cnVlKSB7IG1fZml4ZWRUb0FuY2hvckxheWVyID0gZml4ZWRUb0FuY2hvckxheWVyO30KKyAg
ICBib29sIGZpeGVkVG9BbmNob3JMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fZml4ZWRUb0FuY2hv
ckxheWVyOyB9CisKICAgICB2b2lkIHNldFByZXNlcnZlczNEKGJvb2wpOwogICAgIGJvb2wgcHJl
c2VydmVzM0QoKSBjb25zdCB7IHJldHVybiBtX3ByZXNlcnZlczNEOyB9CiAKQEAgLTIyNiw2ICsy
MzIsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9vcGFxdWU7CiAgICAgZmxvYXQgbV9vcGFjaXR5
OwogICAgIEZsb2F0UG9pbnQgbV9wb3NpdGlvbjsKKyAgICBib29sIG1fYW5jaG9yTGF5ZXI7Cisg
ICAgYm9vbCBtX2ZpeGVkVG9BbmNob3JMYXllcjsKICAgICBib29sIG1fcHJlc2VydmVzM0Q7CiAg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9zdWJsYXllclRyYW5zZm9ybTsKICAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBtX3RyYW5zZm9ybTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3RDb21tb24uY3BwCmluZGV4IDA3MDA4ZTAuLjE3N2ZjMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1v
bi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcApAQCAtMTAzLDYgKzEwMywxOCBAQCBib29sIGxheWVy
U2hvdWxkQmVTa2lwcGVkKExheWVyVHlwZSogbGF5ZXIpCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
CisvLyBSZWN1cnNpdmVseSB3YWxrIHVwIHRoZSB0cmVlIGFuZCBzdW0gdGhlIHNjcm9sbCBkZWx0
YXMgYWxvbmcgdGhlIHdheSB1bnRpbCBhbiBhbmNob3IgbGF5ZXIgaXMgcmVhY2hlZC4KK3RlbXBs
YXRlPHR5cGVuYW1lIExheWVyVHlwZT4gc3RhdGljIEludFNpemUgZW5jbG9zaW5nQW5jZXN0b3JT
Y3JvbGxEZWx0YShMYXllclR5cGUqIGxheWVyKSB7CisgICAgaWYgKCFsYXllcikKKyAgICAgICAg
cmV0dXJuIEludFNpemUoMCwgMCk7CisKKyAgICBJbnRTaXplIHNjcm9sbERlbHRhID0gbGF5ZXIt
PnNjcm9sbERlbHRhKCk7CisKKyAgICBpZiAobGF5ZXItPmFuY2hvckxheWVyKCkpCisgICAgICAg
IHJldHVybiBzY3JvbGxEZWx0YTsKKyAgICByZXR1cm4gc2Nyb2xsRGVsdGEgKyBlbmNsb3NpbmdB
bmNlc3RvclNjcm9sbERlbHRhKGxheWVyLT5wYXJlbnQoKSk7Cit9CisKIC8vIFJlY3Vyc2l2ZWx5
IHdhbGtzIHRoZSBsYXllciB0cmVlIHN0YXJ0aW5nIGF0IHRoZSBnaXZlbiBub2RlIGFuZCBjb21w
dXRlcyBhbGwgdGhlCiAvLyBuZWNlc3NhcnkgdHJhbnNmb3JtYXRpb25zLCBzY2lzc29yIHJlY3Rh
bmdsZXMsIHJlbmRlciBzdXJmYWNlcywgZXRjLgogdGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBl
LCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZSwgdHlwZW5hbWUgTGF5ZXJTb3J0ZXI+CkBAIC0x
OTEsNiArMjAzLDEzIEBAIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlz
aWJpbGl0eUludGVybmFsKExheWVyVHlwZSogbGF5ZXIsIExheWVyCiAgICAgRmxvYXRQb2ludCBh
bmNob3JQb2ludCA9IGxheWVyLT5hbmNob3JQb2ludCgpOwogICAgIEZsb2F0UG9pbnQgcG9zaXRp
b24gPSBsYXllci0+cG9zaXRpb24oKSAtIGxheWVyLT5zY3JvbGxEZWx0YSgpOwogCisgICAgLy8g
VGhpcyBpcyBhIHNwZWNpYWwgY2FzZSB3aGVuIHRoZSBsYXllciBpcyBmaXhlZCB0byB0aGUgYW5j
aG9yIGxheWVyLgorICAgIC8vIElmIGEgbGF5ZXIgaXMgZml4ZWQgdG8gdGhlIGFuY2hvciBsYXll
ciB0aGVuIHRoZSB0cmFuc2xhdGlvbiBjYXVzZWQgYnkgc2Nyb2xsaW5nIHNob3VsZCBiZSByZW1v
dmVkLiBUaGlzIGlzIGRvbmUgYnkgYWRkaW5nIHVwIGFsbCB0aGUKKyAgICAvLyBzY3JvbGwgZGVs
dGFzIHVudGlsIGFuIGFuY2hvciBsYXllciBpcyByZWFjaGVkLiBJdCBpcyBndWFyYW50ZWVkIHRo
YXQgdGhlcmUncyBubyB0cmFuc2Zvcm1hdGlvbiBvdGhlciB0aGFuIHRyYW5zbGF0aW9uIGJldHdl
ZW4gdGhpcyBsYXllcgorICAgIC8vIGFuZCB0aGUgYW5jaG9yIGxheWVyLgorICAgIGlmIChsYXll
ci0+Zml4ZWRUb0FuY2hvckxheWVyKCkpCisgICAgICAgIHBvc2l0aW9uICs9IGVuY2xvc2luZ0Fu
Y2VzdG9yU2Nyb2xsRGVsdGEobGF5ZXItPnBhcmVudCgpKTsKKwogICAgIC8vIE9mZnNldCBiZXR3
ZWVuIGFuY2hvciBwb2ludCBhbmQgdGhlIGNlbnRlciBvZiB0aGUgcXVhZC4KICAgICBmbG9hdCBj
ZW50ZXJPZmZzZXRYID0gKDAuNSAtIGFuY2hvclBvaW50LngoKSkgKiBib3VuZHMud2lkdGgoKTsK
ICAgICBmbG9hdCBjZW50ZXJPZmZzZXRZID0gKDAuNSAtIGFuY2hvclBvaW50LnkoKSkgKiBib3Vu
ZHMuaGVpZ2h0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJCYWNraW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJh
Y2tpbmcuY3BwCmluZGV4IGY3N2MxY2UuLjJlYTNiNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCkBAIC0xMTksOCArMTE5LDEwIEBAIHZv
aWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpjcmVhdGVQcmltYXJ5R3JhcGhpY3NMYXllcigpCiAgICAg
aWYgKHJlbmRlcmVyKCktPmlzUmVuZGVyVmlldygpKSB7CiAgICAgICAgIEZyYW1lKiBmcmFtZSA9
IHRvUmVuZGVyVmlldyhyZW5kZXJlcigpKS0+ZnJhbWVWaWV3KCktPmZyYW1lKCk7CiAgICAgICAg
IFBhZ2UqIHBhZ2UgPSBmcmFtZSA/IGZyYW1lLT5wYWdlKCkgOiAwOwotICAgICAgICBpZiAocGFn
ZSAmJiBmcmFtZSAmJiBwYWdlLT5tYWluRnJhbWUoKSA9PSBmcmFtZSkKKyAgICAgICAgaWYgKHBh
Z2UgJiYgZnJhbWUgJiYgcGFnZS0+bWFpbkZyYW1lKCkgPT0gZnJhbWUpIHsKICAgICAgICAgICAg
IG1fZ3JhcGhpY3NMYXllci0+c2V0QXBwbGllc1BhZ2VTY2FsZSgpOworICAgICAgICAgICAgbV9n
cmFwaGljc0xheWVyLT5zZXRBbmNob3JMYXllcigpOworICAgICAgICB9CiAgICAgfQogICAgIAog
ICAgIHVwZGF0ZUxheWVyT3BhY2l0eShyZW5kZXJlcigpLT5zdHlsZSgpKTsKQEAgLTM2Niw2ICsz
NjgsNyBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlR3JhcGhpY3NMYXllckdlb21l
dHJ5KCkKICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5kZXJlcigpLT5zdHlsZSgpOwogICAg
IG1fZ3JhcGhpY3NMYXllci0+c2V0UHJlc2VydmVzM0Qoc3R5bGUtPnRyYW5zZm9ybVN0eWxlM0Qo
KSA9PSBUcmFuc2Zvcm1TdHlsZTNEUHJlc2VydmUzRCAmJiAhcmVuZGVyZXIoKS0+aGFzUmVmbGVj
dGlvbigpKTsKICAgICBtX2dyYXBoaWNzTGF5ZXItPnNldEJhY2tmYWNlVmlzaWJpbGl0eShzdHls
ZS0+YmFja2ZhY2VWaXNpYmlsaXR5KCkgPT0gQmFja2ZhY2VWaXNpYmlsaXR5VmlzaWJsZSk7Cisg
ICAgbV9ncmFwaGljc0xheWVyLT5zZXRGaXhlZFRvQW5jaG9yTGF5ZXIocmVuZGVyZXIoKS0+aXNQ
b3NpdGlvbmVkKCkgJiYgc3R5bGUtPnBvc2l0aW9uKCkgPT0gRml4ZWRQb3NpdGlvbik7CiAKICAg
ICBSZW5kZXJMYXllciogY29tcEFuY2VzdG9yID0gbV9vd25pbmdMYXllci0+YW5jZXN0b3JDb21w
b3NpdGluZ0xheWVyKCk7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcAppbmRleCAwMzY0Njk2Li43
MGQxYzhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJU
cmVlSG9zdENvbW1vblRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
Q0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAKQEAgLTI2LDYgKzI2LDggQEAKIAogI2luY2x1
ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oIgogCisjaW5jbHVkZSAiY2MvQ0NMYXllcklt
cGwuaCIKKyNpbmNsdWRlICJjYy9DQ1NpbmdsZVRocmVhZFByb3h5LmgiCiAjaW5jbHVkZSAiTGF5
ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAKQEAgLTQ3
MSw2ICs0NzMsNTAgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlUcmFu
c2Zvcm1zRm9yUmVuZGVyU3VyZmFjZUhpZXJhcmNoeSkKICAgICBFWFBFQ1RfRkxPQVRfRVEoNS4w
LCBncmFuZENoaWxkT2ZSUzItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkubTQyKCkpOwogfQogCitU
RVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JGaXhlZFRv
QW5jaG9yTGF5ZXIpCit7CisgICAgLy8gVGhlIGNvbnN0cnVjdG9yIG9uIHRoaXMgd2lsbCBmYWtl
IHRoYXQgd2UgYXJlIG9uIHRoZSBjb3JyZWN0IHRocmVhZC4KKyAgICBEZWJ1Z1Njb3BlZFNldElt
cGxUaHJlYWQgc2V0SW1wbFRocmVhZDsKKworICAgIC8vIENyZWF0ZSBhIHNpbXBsZSBDQ0xheWVy
SW1wbCB0cmVlOgorICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpj
cmVhdGUoMSk7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBjaGlsZCA9IENDTGF5ZXJJbXBsOjpj
cmVhdGUoMik7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBncmFuZENoaWxkID0gQ0NMYXllcklt
cGw6OmNyZWF0ZSgzKTsKKyAgICByb290LT5hZGRDaGlsZChjaGlsZCk7CisgICAgY2hpbGQtPmFk
ZENoaWxkKGdyYW5kQ2hpbGQpOworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlN
YXRyaXg7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY2hpbGRUcmFuc2Zvcm1hdGlvbk1hdHJp
eDsKKyAgICBjaGlsZFRyYW5zZm9ybWF0aW9uTWF0cml4LnRyYW5zbGF0ZSg0MCwgNDApOworICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4IGdyYW5kQ2hpbGRUcmFuc2Zvcm1hdGlvbk1hdHJpeDsKKyAg
ICBncmFuZENoaWxkVHJhbnNmb3JtYXRpb25NYXRyaXgudHJhbnNsYXRlKDUwLCA1MCk7CisKKyAg
ICByb290LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAgcm9vdC0+c2V0QW5jaG9yUG9pbnQo
RmxvYXRQb2ludCgwLCAwKSk7CisgICAgcm9vdC0+c2V0Qm91bmRzKEludFNpemUoMTAwLCAxMDAp
KTsKKworICAgIGNoaWxkLT5zZXRCb3VuZHMoSW50U2l6ZSgxMDAsIDEwMCkpOworICAgIGNoaWxk
LT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAsIDApKTsKKyAgICBjaGlsZC0+c2V0U2Nyb2xs
RGVsdGEoSW50U2l6ZSgxMCwgMTApKTsKKyAgICBjaGlsZC0+c2V0QW5jaG9yTGF5ZXIodHJ1ZSk7
CisKKyAgICBncmFuZENoaWxkLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAsIDApKTsKKyAg
ICBncmFuZENoaWxkLT5zZXRCb3VuZHMoSW50U2l6ZSgxMDAsIDEwMCkpOworICAgIGdyYW5kQ2hp
bGQtPnNldEZpeGVkVG9BbmNob3JMYXllcih0cnVlKTsKKworICAgIFZlY3RvcjxSZWZQdHI8Q0NM
YXllckltcGw+ID4gZHVtbXlSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIFZlY3RvcjxSZWZQ
dHI8Q0NMYXllckltcGw+ID4gZHVtbXlMYXllckxpc3Q7CisgICAgaW50IGR1bW15TWF4VGV4dHVy
ZVNpemUgPSA1MTI7CisKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdU
cmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShyb290LmdldCgpLCByb290LmdldCgpLCBpZGVudGl0eU1h
dHJpeCwgaWRlbnRpdHlNYXRyaXgsIGR1bW15UmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlM
YXllckxpc3QsIDAsIGR1bW15TWF4VGV4dHVyZVNpemUpOworCisgICAgLy8gVGhlIGNoaWxkIGxh
eWVyIHNob3VsZCBnZXQgYSB0cmFuc2xhdGlvbi4KKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9F
UVVBTChjaGlsZFRyYW5zZm9ybWF0aW9uTWF0cml4LCBjaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsK
KworICAgIC8vIFRoZSBjaGlsZCBsYXllciBzaG91bGQgc3RheSBmaXhlZCB0byB0aGUgcm9vdC4K
KyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChncmFuZENoaWxkVHJhbnNmb3JtYXRpb25N
YXRyaXgsIGdyYW5kQ2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7Cit9CisKIC8vIEZJWE1FOgogLy8g
Y29udGludWUgd29ya2luZyBvbiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9Njg5NDIKIC8vICAtIGFkZCBhIHRlc3QgdG8gdmVyaWZ5IGNsaXBwaW5nIHRoYXQgY2hhbmdl
cyB0aGUgImNlbnRlciBwb2ludCIK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113199</attachid>
            <date>2011-11-01 11:57:15 -0700</date>
            <delta_ts>2011-11-03 06:28:28 -0700</delta_ts>
            <desc>Attempt 4</desc>
            <filename>webkit-thread-fixed-3.patch</filename>
            <type>text/plain</type>
            <size>14678</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5j
cHAKaW5kZXggMjkxMTczZC4uMjY0NTRiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5jcHAKQEAgLTgxLDYgKzgxLDggQEAgR3JhcGhp
Y3NMYXllcjo6R3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyQ2xpZW50KiBjbGllbnQpCiAgICAg
LCBtX2FjY2VsZXJhdGVzRHJhd2luZyhmYWxzZSkKICAgICAsIG1fbWFpbnRhaW5zUGl4ZWxBbGln
bm1lbnQoZmFsc2UpCiAgICAgLCBtX2FwcGxpZXNQYWdlU2NhbGUoZmFsc2UpCisgICAgLCBtX2Nv
bnRhaW5lckxheWVyKGZhbHNlKQorICAgICwgbV9maXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxl
UmVjdChmYWxzZSkKICAgICAsIG1fcGFpbnRpbmdQaGFzZShHcmFwaGljc0xheWVyUGFpbnRBbGwp
CiAgICAgLCBtX2NvbnRlbnRzT3JpZW50YXRpb24oQ29tcG9zaXRpbmdDb29yZGluYXRlc1RvcERv
d24pCiAgICAgLCBtX3BhcmVudCgwKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NMYXllci5oCmluZGV4IDhjZGYwZDcuLmZhYWNhNWUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmgKQEAgLTM1OSw2
ICszNTksMTIgQEAgcHVibGljOgogICAgIHZvaWQgc2V0QXBwbGllc1BhZ2VTY2FsZShib29sIGFw
cGxpZXNTY2FsZSA9IHRydWUpIHsgbV9hcHBsaWVzUGFnZVNjYWxlID0gYXBwbGllc1NjYWxlOyB9
CiAgICAgYm9vbCBhcHBsaWVzUGFnZVNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9hcHBsaWVzUGFn
ZVNjYWxlOyB9CiAKKyAgICBib29sIGNvbnRhaW5lckxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9j
b250YWluZXJMYXllcjsgfQorICAgIHZvaWQgc2V0Q29udGFpbmVyTGF5ZXIoYm9vbCBjb250YWlu
ZXJMYXllciA9IHRydWUpIHsgbV9jb250YWluZXJMYXllciA9IGNvbnRhaW5lckxheWVyOyB9CisK
KyAgICBib29sIGZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0KCkgY29uc3QgeyByZXR1
cm4gbV9maXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdDsgfQorICAgIHZpcnR1YWwgdm9p
ZCBzZXRGaXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdChib29sIGIpIHsgbV9maXhlZFRv
Q29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdCA9IGI7IH0KKwogICAgIGZsb2F0IHBhZ2VTY2FsZUZh
Y3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50ID8gbV9jbGllbnQtPnBhZ2VTY2FsZUZhY3Rv
cigpIDogMTsgfQogICAgIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKCkgY29uc3QgeyByZXR1cm4g
bV9jbGllbnQgPyBtX2NsaWVudC0+ZGV2aWNlU2NhbGVGYWN0b3IoKSA6IDE7IH0KIApAQCAtNDMx
LDYgKzQzNyw4IEBAIHByb3RlY3RlZDoKICAgICBib29sIG1fYWNjZWxlcmF0ZXNEcmF3aW5nIDog
MTsKICAgICBib29sIG1fbWFpbnRhaW5zUGl4ZWxBbGlnbm1lbnQgOiAxOwogICAgIGJvb2wgbV9h
cHBsaWVzUGFnZVNjYWxlIDogMTsgLy8gU2V0IGZvciB0aGUgbGF5ZXIgd2hpY2ggaGFzIHRoZSBw
YWdlIHNjYWxlIGFwcGxpZWQgdG8gaXQuCisgICAgYm9vbCBtX2NvbnRhaW5lckxheWVyIDogMTsg
Ly8gU2V0IGZvciB0aGUgbGF5ZXIgdGhhdCBvdGhlciBsYXllcnMgYXJlIGZpeGVkIHRvLgorICAg
IGJvb2wgbV9maXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdCA6IDE7IC8vIFNldCBmb3Ig
dGhlIGxheWVyIHRoYXQgaGFzIHBvc2l0aW9uIGZpeGVkIHRvIHRoZSBjb250YWluZXIgbGF5ZXIn
cyB2aXNpYmxlIHJlY3QuCiAKICAgICBHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSBtX3BhaW50
aW5nUGhhc2U7CiAgICAgQ29tcG9zaXRpbmdDb29yZGluYXRlc09yaWVudGF0aW9uIG1fY29udGVu
dHNPcmllbnRhdGlvbjsgLy8gYWZmZWN0cyBvcmllbnRhdGlvbiBvZiBsYXllciBjb250ZW50cwpA
QCAtNDY1LDQgKzQ3MywzIEBAIHZvaWQgc2hvd0dyYXBoaWNzTGF5ZXJUcmVlKGNvbnN0IFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXIqIGxheWVyKTsKICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCiAKICNlbmRpZiAvLyBHcmFwaGljc0xheWVyX2gKLQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9t
aXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBo
aWNzTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggNzI5YTlhYy4uNGNjOTBiOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNo
cm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCkBAIC0yMzQsNiArMjM0LDE1IEBAIHZvaWQgR3Jh
cGhpY3NMYXllckNocm9taXVtOjpzZXREcmF3c0NvbnRlbnQoYm9vbCBkcmF3c0NvbnRlbnQpCiAg
ICAgdXBkYXRlTGF5ZXJEcmF3c0NvbnRlbnQoKTsKIH0KIAordm9pZCBHcmFwaGljc0xheWVyQ2hy
b21pdW06OnNldEZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0KGJvb2wgZml4ZWRUb0Nv
bnRhaW5lckxheWVyVmlzaWJsZVJlY3QpCit7CisgICAgaWYgKGZpeGVkVG9Db250YWluZXJMYXll
clZpc2libGVSZWN0ID09IG1fZml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3QpCisgICAg
ICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzTGF5ZXI6OnNldEZpeGVkVG9Db250YWluZXJMYXll
clZpc2libGVSZWN0KGZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0KTsKKyAgICB1cGRh
dGVMYXllclBvc2l0aW9uKCk7Cit9CisKIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRC
YWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQogewogICAgIGlmIChtX2JhY2tncm91
bmRDb2xvclNldCAmJiBtX2JhY2tncm91bmRDb2xvciA9PSBjb2xvcikKQEAgLTQ5Myw2ICs1MDIs
OCBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJQb3NpdGlvbigpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcG9zaXRpb24ueSgpICsgbV9hbmNob3JQb2lu
dC55KCkgKiBtX3NpemUuaGVpZ2h0KCkpOwogCiAgICAgcHJpbWFyeUxheWVyKCktPnNldFBvc2l0
aW9uKGxheWVyUG9zaXRpb24pOworICAgIHByaW1hcnlMYXllcigpLT5zZXRDb250YWluZXJMYXll
cihtX2NvbnRhaW5lckxheWVyKTsKKyAgICBwcmltYXJ5TGF5ZXIoKS0+c2V0Rml4ZWRUb0NvbnRh
aW5lckxheWVyVmlzaWJsZVJlY3QobV9maXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdCk7
CiB9CiAKIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjp1cGRhdGVMYXllclNpemUoKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhp
Y3NMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaAppbmRleCA3MTkwZTUwLi4zOWFmOTk1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGlj
c0xheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaApAQCAtNjgsNiArNjgsNyBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB2b2lkIHNldFByZXNlcnZlczNEKGJvb2wpOwogICAgIHZpcnR1YWwgdm9p
ZCBzZXRNYXNrc1RvQm91bmRzKGJvb2wpOwogICAgIHZpcnR1YWwgdm9pZCBzZXREcmF3c0NvbnRl
bnQoYm9vbCk7CisgICAgdmlydHVhbCB2b2lkIHNldEZpeGVkVG9Db250YWluZXJMYXllclZpc2li
bGVSZWN0KGJvb2wpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRNYXNrTGF5ZXIoR3JhcGhpY3NMYXll
ciopOwogCiAgICAgdmlydHVhbCB2b2lkIHNldEJhY2tncm91bmRDb2xvcihjb25zdCBDb2xvciYp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllckNocm9taXVtLmNwcAppbmRleCA2YTZhMGU3Li5iZmI1MWQ3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVt
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
ckNocm9taXVtLmNwcApAQCAtNjMsNiArNjMsOCBAQCBMYXllckNocm9taXVtOjpMYXllckNocm9t
aXVtKENDTGF5ZXJEZWxlZ2F0ZSogZGVsZWdhdGUpCiAgICAgLCBtX2RlYnVnQm9yZGVyV2lkdGgo
MCkKICAgICAsIG1fb3BhY2l0eSgxLjApCiAgICAgLCBtX2FuY2hvclBvaW50WigwKQorICAgICwg
bV9jb250YWluZXJMYXllcihmYWxzZSkKKyAgICAsIG1fZml4ZWRUb0NvbnRhaW5lckxheWVyVmlz
aWJsZVJlY3QoZmFsc2UpCiAgICAgLCBtX21hc2tzVG9Cb3VuZHMoZmFsc2UpCiAgICAgLCBtX29w
YXF1ZShmYWxzZSkKICAgICAsIG1fZG91YmxlU2lkZWQodHJ1ZSkKQEAgLTI5MSw2ICsyOTMsNyBA
QCB2b2lkIExheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8oQ0NMYXllckltcGwqIGxheWVy
KQogICAgIGxheWVyLT5zZXRPcGFxdWUobV9vcGFxdWUpOwogICAgIGxheWVyLT5zZXRPcGFjaXR5
KG1fb3BhY2l0eSk7CiAgICAgbGF5ZXItPnNldFBvc2l0aW9uKG1fcG9zaXRpb24pOworICAgIGxh
eWVyLT5zZXRGaXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdChtX2ZpeGVkVG9Db250YWlu
ZXJMYXllclZpc2libGVSZWN0KTsKICAgICBsYXllci0+c2V0UHJlc2VydmVzM0QocHJlc2VydmVz
M0QoKSk7CiAgICAgbGF5ZXItPnNldFNjcm9sbFBvc2l0aW9uKG1fc2Nyb2xsUG9zaXRpb24pOwog
ICAgIGxheWVyLT5zZXRTdWJsYXllclRyYW5zZm9ybShtX3N1YmxheWVyVHJhbnNmb3JtKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
Q2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyQ2hyb21pdW0uaAppbmRleCBjN2FlY2JlLi5kNDc1MjE2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5o
CkBAIC0xMTksNiArMTE5LDEyIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFBvc2l0aW9uKGNvbnN0
IEZsb2F0UG9pbnQmIHBvc2l0aW9uKSB7IG1fcG9zaXRpb24gPSBwb3NpdGlvbjsgIHNldE5lZWRz
Q29tbWl0KCk7IH0KICAgICBGbG9hdFBvaW50IHBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9w
b3NpdGlvbjsgfQogCisgICAgdm9pZCBzZXRDb250YWluZXJMYXllcihib29sIGNvbnRhaW5lckxh
eWVyKSB7IG1fY29udGFpbmVyTGF5ZXIgPSBjb250YWluZXJMYXllcjsgfQorICAgIGJvb2wgY29u
dGFpbmVyTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2NvbnRhaW5lckxheWVyOyB9CisKKyAgICB2
b2lkIHNldEZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0KGJvb2wgZml4ZWRUb0NvbnRh
aW5lckxheWVyVmlzaWJsZVJlY3QpIHsgbV9maXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVj
dCA9IGZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0OyBzZXROZWVkc0NvbW1pdCgpOyB9
CisgICAgYm9vbCBmaXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdCgpIGNvbnN0IHsgcmV0
dXJuIG1fZml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3Q7IH0KKwogICAgIHZvaWQgc2V0
U3VibGF5ZXJUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkg
eyBtX3N1YmxheWVyVHJhbnNmb3JtID0gdHJhbnNmb3JtOyBzZXROZWVkc0NvbW1pdCgpOyB9CiAg
ICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHN1YmxheWVyVHJhbnNmb3JtKCkgY29uc3Qg
eyByZXR1cm4gbV9zdWJsYXllclRyYW5zZm9ybTsgfQogCkBAIC0yNjAsNiArMjY2LDggQEAgcHJp
dmF0ZToKICAgICBmbG9hdCBtX2RlYnVnQm9yZGVyV2lkdGg7CiAgICAgZmxvYXQgbV9vcGFjaXR5
OwogICAgIGZsb2F0IG1fYW5jaG9yUG9pbnRaOworICAgIGJvb2wgbV9jb250YWluZXJMYXllcjsK
KyAgICBib29sIG1fZml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3Q7CiAgICAgYm9vbCBt
X21hc2tzVG9Cb3VuZHM7CiAgICAgYm9vbCBtX29wYXF1ZTsKICAgICBib29sIG1fZG91YmxlU2lk
ZWQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKaW5kZXggYjNhZjBmYi4uMjMzZDU0OSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
ckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJJbXBsLmNwcApAQCAtNDcsNiArNDcsOCBAQCBDQ0xheWVySW1wbDo6Q0NMYXll
ckltcGwoaW50IGlkKQogICAgICwgbV9tYXNrc1RvQm91bmRzKGZhbHNlKQogICAgICwgbV9vcGFx
dWUoZmFsc2UpCiAgICAgLCBtX29wYWNpdHkoMS4wKQorICAgICwgbV9jb250YWluZXJMYXllcihm
YWxzZSkKKyAgICAsIG1fZml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3QoZmFsc2UpCiAg
ICAgLCBtX3ByZXNlcnZlczNEKGZhbHNlKQogICAgICwgbV91c2VzTGF5ZXJTY2lzc29yKGZhbHNl
KQogICAgICwgbV9pc05vbkNvbXBvc2l0ZWRDb250ZW50KGZhbHNlKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBs
LmgKaW5kZXggYzMyZTExNy4uODQwZGMwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCkBAIC0xMDEs
NiArMTAxLDEyIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9p
bnQmKTsKICAgICBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1f
cG9zaXRpb247IH0KIAorICAgIHZvaWQgc2V0Q29udGFpbmVyTGF5ZXIoYm9vbCBjb250YWluZXJM
YXllciA9IHRydWUpIHsgbV9jb250YWluZXJMYXllciA9IGNvbnRhaW5lckxheWVyOyB9CisgICAg
Ym9vbCBjb250YWluZXJMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fY29udGFpbmVyTGF5ZXI7IH0K
KworICAgIHZvaWQgc2V0Rml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3QoYm9vbCBmaXhl
ZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdCA9IHRydWUpIHsgbV9maXhlZFRvQ29udGFpbmVy
TGF5ZXJWaXNpYmxlUmVjdCA9IGZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0O30KKyAg
ICBib29sIGZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0KCkgY29uc3QgeyByZXR1cm4g
bV9maXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdDsgfQorCiAgICAgdm9pZCBzZXRQcmVz
ZXJ2ZXMzRChib29sKTsKICAgICBib29sIHByZXNlcnZlczNEKCkgY29uc3QgeyByZXR1cm4gbV9w
cmVzZXJ2ZXMzRDsgfQogCkBAIC0yMjYsNiArMjMyLDggQEAgcHJpdmF0ZToKICAgICBib29sIG1f
b3BhcXVlOwogICAgIGZsb2F0IG1fb3BhY2l0eTsKICAgICBGbG9hdFBvaW50IG1fcG9zaXRpb247
CisgICAgYm9vbCBtX2NvbnRhaW5lckxheWVyOworICAgIGJvb2wgbV9maXhlZFRvQ29udGFpbmVy
TGF5ZXJWaXNpYmxlUmVjdDsKICAgICBib29sIG1fcHJlc2VydmVzM0Q7CiAgICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggbV9zdWJsYXllclRyYW5zZm9ybTsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBtX3RyYW5zZm9ybTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3Bw
CmluZGV4IDA3MDA4ZTAuLjE3N2ZjMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0Q29tbW9uLmNwcApAQCAtMTAzLDYgKzEwMywxOCBAQCBib29sIGxheWVyU2hvdWxkQmVTa2lw
cGVkKExheWVyVHlwZSogbGF5ZXIpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCisvLyBSZWN1cnNp
dmVseSB3YWxrIHVwIHRoZSB0cmVlIGFuZCBzdW0gdGhlIHNjcm9sbCBkZWx0YXMgYWxvbmcgdGhl
IHdheSB1bnRpbCBhbiBhbmNob3IgbGF5ZXIgaXMgcmVhY2hlZC4KK3RlbXBsYXRlPHR5cGVuYW1l
IExheWVyVHlwZT4gc3RhdGljIEludFNpemUgY3VtbXVsYXRpdmVTY3JvbGxEZWx0YXNGcm9tRW5j
bG9zaW5nQW5jZXN0b3IoTGF5ZXJUeXBlKiBsYXllcikgeworICAgIGlmICghbGF5ZXIpCisgICAg
ICAgIHJldHVybiBJbnRTaXplKDAsIDApOworCisgICAgSW50U2l6ZSBzY3JvbGxEZWx0YSA9IGxh
eWVyLT5zY3JvbGxEZWx0YSgpOworCisgICAgaWYgKGxheWVyLT5jb250YWluZXJMYXllcigpKQor
ICAgICAgICByZXR1cm4gc2Nyb2xsRGVsdGE7CisgICAgcmV0dXJuIHNjcm9sbERlbHRhICsgY3Vt
bXVsYXRpdmVTY3JvbGxEZWx0YXNGcm9tRW5jbG9zaW5nQW5jZXN0b3IobGF5ZXItPnBhcmVudCgp
KTsKK30KKwogLy8gUmVjdXJzaXZlbHkgd2Fsa3MgdGhlIGxheWVyIHRyZWUgc3RhcnRpbmcgYXQg
dGhlIGdpdmVuIG5vZGUgYW5kIGNvbXB1dGVzIGFsbCB0aGUKIC8vIG5lY2Vzc2FyeSB0cmFuc2Zv
cm1hdGlvbnMsIHNjaXNzb3IgcmVjdGFuZ2xlcywgcmVuZGVyIHN1cmZhY2VzLCBldGMuCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlLCB0eXBl
bmFtZSBMYXllclNvcnRlcj4KQEAgLTE5MSw2ICsyMDMsMTMgQEAgc3RhdGljIHZvaWQgY2FsY3Vs
YXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5SW50ZXJuYWwoTGF5ZXJUeXBlKiBsYXllciwg
TGF5ZXIKICAgICBGbG9hdFBvaW50IGFuY2hvclBvaW50ID0gbGF5ZXItPmFuY2hvclBvaW50KCk7
CiAgICAgRmxvYXRQb2ludCBwb3NpdGlvbiA9IGxheWVyLT5wb3NpdGlvbigpIC0gbGF5ZXItPnNj
cm9sbERlbHRhKCk7CiAKKyAgICAvLyBUaGlzIGlzIGEgc3BlY2lhbCBjYXNlIHdoZW4gdGhlIGxh
eWVyIGlzIGZpeGVkIHRvIHRoZSBhbmNob3IgbGF5ZXIuCisgICAgLy8gSWYgYSBsYXllciBpcyBm
aXhlZCB0byB0aGUgY29udGFpbmVyIGxheWVyJ3MgdmlzaWJsZSByZWN0IHRoZW4gdGhlIHRyYW5z
bGF0aW9uIGNhdXNlZCBieSBzY3JvbGxpbmcgc2hvdWxkIGJlIHJlbW92ZWQuIFRoaXMgaXMgZG9u
ZSBieSBhZGRpbmcgdXAgYWxsIHRoZQorICAgIC8vIHNjcm9sbCBkZWx0YXMgdW50aWwgYW4gY29u
dGFpbmVyIGxheWVyIGlzIHJlYWNoZWQuIEl0IGlzIGd1YXJhbnRlZWQgdGhhdCB0aGVyZSdzIG5v
IHRyYW5zZm9ybWF0aW9uIG90aGVyIHRoYW4gdHJhbnNsYXRpb24gYmV0d2VlbiB0aGlzIGxheWVy
CisgICAgLy8gYW5kIHRoZSBhbmNob3IgbGF5ZXIuCisgICAgaWYgKGxheWVyLT5maXhlZFRvQ29u
dGFpbmVyTGF5ZXJWaXNpYmxlUmVjdCgpKQorICAgICAgICBwb3NpdGlvbiArPSBjdW1tdWxhdGl2
ZVNjcm9sbERlbHRhc0Zyb21FbmNsb3NpbmdBbmNlc3RvcihsYXllci0+cGFyZW50KCkpOworCiAg
ICAgLy8gT2Zmc2V0IGJldHdlZW4gYW5jaG9yIHBvaW50IGFuZCB0aGUgY2VudGVyIG9mIHRoZSBx
dWFkLgogICAgIGZsb2F0IGNlbnRlck9mZnNldFggPSAoMC41IC0gYW5jaG9yUG9pbnQueCgpKSAq
IGJvdW5kcy53aWR0aCgpOwogICAgIGZsb2F0IGNlbnRlck9mZnNldFkgPSAoMC41IC0gYW5jaG9y
UG9pbnQueSgpKSAqIGJvdW5kcy5oZWlnaHQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKaW5kZXggZjc3YzFjZS4uMmVhM2I2OCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKQEAgLTEx
OSw4ICsxMTksMTAgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OmNyZWF0ZVByaW1hcnlHcmFw
aGljc0xheWVyKCkKICAgICBpZiAocmVuZGVyZXIoKS0+aXNSZW5kZXJWaWV3KCkpIHsKICAgICAg
ICAgRnJhbWUqIGZyYW1lID0gdG9SZW5kZXJWaWV3KHJlbmRlcmVyKCkpLT5mcmFtZVZpZXcoKS0+
ZnJhbWUoKTsKICAgICAgICAgUGFnZSogcGFnZSA9IGZyYW1lID8gZnJhbWUtPnBhZ2UoKSA6IDA7
Ci0gICAgICAgIGlmIChwYWdlICYmIGZyYW1lICYmIHBhZ2UtPm1haW5GcmFtZSgpID09IGZyYW1l
KQorICAgICAgICBpZiAocGFnZSAmJiBmcmFtZSAmJiBwYWdlLT5tYWluRnJhbWUoKSA9PSBmcmFt
ZSkgewogICAgICAgICAgICAgbV9ncmFwaGljc0xheWVyLT5zZXRBcHBsaWVzUGFnZVNjYWxlKCk7
CisgICAgICAgICAgICBtX2dyYXBoaWNzTGF5ZXItPnNldENvbnRhaW5lckxheWVyKCk7CisgICAg
ICAgIH0KICAgICB9CiAgICAgCiAgICAgdXBkYXRlTGF5ZXJPcGFjaXR5KHJlbmRlcmVyKCktPnN0
eWxlKCkpOwpAQCAtMzY2LDYgKzM2OCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRh
dGVHcmFwaGljc0xheWVyR2VvbWV0cnkoKQogICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHJlbmRl
cmVyKCktPnN0eWxlKCk7CiAgICAgbV9ncmFwaGljc0xheWVyLT5zZXRQcmVzZXJ2ZXMzRChzdHls
ZS0+dHJhbnNmb3JtU3R5bGUzRCgpID09IFRyYW5zZm9ybVN0eWxlM0RQcmVzZXJ2ZTNEICYmICFy
ZW5kZXJlcigpLT5oYXNSZWZsZWN0aW9uKCkpOwogICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0QmFj
a2ZhY2VWaXNpYmlsaXR5KHN0eWxlLT5iYWNrZmFjZVZpc2liaWxpdHkoKSA9PSBCYWNrZmFjZVZp
c2liaWxpdHlWaXNpYmxlKTsKKyAgICBtX2dyYXBoaWNzTGF5ZXItPnNldEZpeGVkVG9Db250YWlu
ZXJMYXllclZpc2libGVSZWN0KHJlbmRlcmVyKCktPmlzUG9zaXRpb25lZCgpICYmIHN0eWxlLT5w
b3NpdGlvbigpID09IEZpeGVkUG9zaXRpb24pOwogCiAgICAgUmVuZGVyTGF5ZXIqIGNvbXBBbmNl
c3RvciA9IG1fb3duaW5nTGF5ZXItPmFuY2VzdG9yQ29tcG9zaXRpbmdMYXllcigpOwogICAgIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RD
b21tb25UZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVI
b3N0Q29tbW9uVGVzdC5jcHAKaW5kZXggMDM2NDY5Ni4uNzBkMWM4ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRl
c3QuY3BwCkBAIC0yNiw2ICsyNiw4IEBACiAKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RD
b21tb24uaCIKIAorI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCisjaW5jbHVkZSAiY2MvQ0NT
aW5nbGVUaHJlYWRQcm94eS5oIgogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRl
ICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogCkBAIC00NzEsNiArNDczLDUwIEBAIFRFU1QoQ0NM
YXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvclJlbmRlclN1cmZhY2VI
aWVyYXJjaHkpCiAgICAgRVhQRUNUX0ZMT0FUX0VRKDUuMCwgZ3JhbmRDaGlsZE9mUlMyLT5zY3Jl
ZW5TcGFjZVRyYW5zZm9ybSgpLm00MigpKTsKIH0KIAorVEVTVChDQ0xheWVyVHJlZUhvc3RDb21t
b25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yRml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJl
Y3QpCit7CisgICAgLy8gVGhlIGNvbnN0cnVjdG9yIG9uIHRoaXMgd2lsbCBmYWtlIHRoYXQgd2Ug
YXJlIG9uIHRoZSBjb3JyZWN0IHRocmVhZC4KKyAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQg
c2V0SW1wbFRocmVhZDsKKworICAgIC8vIENyZWF0ZSBhIHNpbXBsZSBDQ0xheWVySW1wbCB0cmVl
OgorICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMSk7
CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBjaGlsZCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMik7
CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBncmFuZENoaWxkID0gQ0NMYXllckltcGw6OmNyZWF0
ZSgzKTsKKyAgICByb290LT5hZGRDaGlsZChjaGlsZCk7CisgICAgY2hpbGQtPmFkZENoaWxkKGdy
YW5kQ2hpbGQpOworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7Cisg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY2hpbGRUcmFuc2Zvcm1hdGlvbk1hdHJpeDsKKyAgICBj
aGlsZFRyYW5zZm9ybWF0aW9uTWF0cml4LnRyYW5zbGF0ZSg0MCwgNDApOworICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IGdyYW5kQ2hpbGRUcmFuc2Zvcm1hdGlvbk1hdHJpeDsKKyAgICBncmFuZENo
aWxkVHJhbnNmb3JtYXRpb25NYXRyaXgudHJhbnNsYXRlKDUwLCA1MCk7CisKKyAgICByb290LT5j
cmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAgcm9vdC0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2lu
dCgwLCAwKSk7CisgICAgcm9vdC0+c2V0Qm91bmRzKEludFNpemUoMTAwLCAxMDApKTsKKworICAg
IGNoaWxkLT5zZXRCb3VuZHMoSW50U2l6ZSgxMDAsIDEwMCkpOworICAgIGNoaWxkLT5zZXRBbmNo
b3JQb2ludChGbG9hdFBvaW50KDAsIDApKTsKKyAgICBjaGlsZC0+c2V0U2Nyb2xsRGVsdGEoSW50
U2l6ZSgxMCwgMTApKTsKKyAgICBjaGlsZC0+c2V0Q29udGFpbmVyTGF5ZXIodHJ1ZSk7CisKKyAg
ICBncmFuZENoaWxkLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAsIDApKTsKKyAgICBncmFu
ZENoaWxkLT5zZXRCb3VuZHMoSW50U2l6ZSgxMDAsIDEwMCkpOworICAgIGdyYW5kQ2hpbGQtPnNl
dEZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0KHRydWUpOworCisgICAgVmVjdG9yPFJl
ZlB0cjxDQ0xheWVySW1wbD4gPiBkdW1teVJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAgVmVj
dG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPiBkdW1teUxheWVyTGlzdDsKKyAgICBpbnQgZHVtbXlN
YXhUZXh0dXJlU2l6ZSA9IDUxMjsKKworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3Vs
YXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3QuZ2V0KCksIHJvb3QuZ2V0KCksIGlk
ZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgZHVtbXlSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
LCBkdW1teUxheWVyTGlzdCwgMCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisKKyAgICAvLyBUaGUg
Y2hpbGQgbGF5ZXIgc2hvdWxkIGdldCBhIHRyYW5zbGF0aW9uLgorICAgIFZFUklGWV9NQVRSSVhf
QUxNT1NUX0VRVUFMKGNoaWxkVHJhbnNmb3JtYXRpb25NYXRyaXgsIGNoaWxkLT5kcmF3VHJhbnNm
b3JtKCkpOworCisgICAgLy8gVGhlIGNoaWxkIGxheWVyIHNob3VsZCBzdGF5IGZpeGVkIHRvIHRo
ZSByb290LgorICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGdyYW5kQ2hpbGRUcmFuc2Zv
cm1hdGlvbk1hdHJpeCwgZ3JhbmRDaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKK30KKwogLy8gRklY
TUU6CiAvLyBjb250aW51ZSB3b3JraW5nIG9uIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD02ODk0MgogLy8gIC0gYWRkIGEgdGVzdCB0byB2ZXJpZnkgY2xpcHBpbmcgdGhh
dCBjaGFuZ2VzIHRoZSAiY2VudGVyIHBvaW50Igo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113475</attachid>
            <date>2011-11-03 06:28:40 -0700</date>
            <delta_ts>2012-04-24 11:34:14 -0700</delta_ts>
            <desc>WebCore common changes</desc>
            <filename>bug-70103-20111103132838.patch</filename>
            <type>text/plain</type>
            <size>5599</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTg4NTUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA4NjkxN2RkNDUwMjY2OTk4
MDdlMjBhZWZhNjU0MmI4ZDA4NDM4M2U2Li41NzU3M2Y5Y2MyNmU3MTgxOGY4OTY1ZTg3YjRiNmQ1
Zjg3MTAyOTVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjggQEAKKzIwMTEtMTEtMDMgIEFscGhh
IExhbSAgPGhjbGFtQGNocm9taXVtLm9yZz4KKworICAgICAgICBTZXQgZmxhZ3MgdG8gR3JhcGhp
Y3NMYXllciB3aGVuIGl0IGlzIGEgcG9zaXRpb246Zml4ZWQgbGF5ZXIKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcwMTAzCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gdGVzdGFibGUgYmVoYXZpb3IgY2hh
bmdlcy4gVGhpcyBwYXRjaCBqdXN0IHNldHMgZmxhZ3MgdG8gR3JhcGhpY3NMYXllciBzdWNoIHRo
YXQgcGxhdGZvcm0gcG9ydCBjYW4gaW1wbGVtZW50LgorCisgICAgICAgIFRoaXMgcGF0Y2ggc2V0
cyBmbGFncyBmb3IgdGhlIGZvbGxvd2luZyB0d28gdHlwZXMgb2YgbGF5ZXJzOgorICAgICAgICAx
LiBMYXllciB0aGF0IGNvcnJlc3BvbmRzIGEgcmVuZGVyIHZpZXcuCisgICAgICAgIDIuIExheWVy
IHRoYXQgaGFzIGEgcG9zaXRpb246Zml4ZWQgcmVuZGVyZXIuCisKKyAgICAgICAgVGhlc2UgdHdv
IGZsYWdzIGFsbG93IGEgcG9zaXRpb246Zml4ZWQgcmVuZGVyZXIgdG8gYmUgZml4ZWQgdG8gdGhl
IHJlbmRlciB2aWV3IGxheWVyLgorICAgICAgICBQbGF0Zm9ybSBwb3J0IGNhbiBpbXBsZW1lbnQg
c2Nyb2xsaW5nIG9mIEdyYXBoaWNzTGF5ZXJzIGFuZCBwb3NpdGlvbjpmaXhlZCBsYXllciB3aWxs
IGJlIHBvc2l0aW9uZWQgcHJvcGVybHkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0xheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OkdyYXBo
aWNzTGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuaDog
QWRkIG1fY29udGFpbmVyTGF5ZXIgYW5kIG1fZml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJl
Y3QuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OmNyZWF0ZVByaW1hcnlHcmFwaGljc0xheWVy
KToKKyAgICAgICAgU2V0IG1fY29udGFpbmVyTGF5ZXIgaWYgdGhpcyBsYXllciBjb3JyZXNwb25k
cyB0byBhIHJlbmRlciB2aWV3LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5n
Ojp1cGRhdGVHcmFwaGljc0xheWVyR2VvbWV0cnkpOgorICAgICAgICBTZXQgbV9maXhlZFRvQ29u
dGFpbmVyTGF5ZXJWaXNpYmxlUmVjdCBpZiB0aGlzIGxheWVyIGhhcyBhIHBvc2l0aW9uOmZpeGVk
IHJlbmRlcmVyLgorCiAyMDExLTEwLTMxICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5AZ29vZ2xl
LmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBtb3ZlIGxvY2FsaXphdGlvbiBzdXBwb3J0
IGludG8gVUlVdGlsLmpzLCByZWR1Y2UgZXh0ZXJucy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5jcHAKaW5kZXggMjkxMTczZGU3YTQyY2Nj
YjlkMjIwNTZmNzRkMTVkODFiNjNkMTQxMi4uOTk4MDVlNzg0N2NhY2I3NWFmNTU0NjgzOTUzOTcy
NjJkMGQyOWFhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NMYXllci5jcHAKQEAgLTgxLDYgKzgxLDggQEAgR3JhcGhpY3NMYXllcjo6R3JhcGhp
Y3NMYXllcihHcmFwaGljc0xheWVyQ2xpZW50KiBjbGllbnQpCiAgICAgLCBtX2FjY2VsZXJhdGVz
RHJhd2luZyhmYWxzZSkKICAgICAsIG1fbWFpbnRhaW5zUGl4ZWxBbGlnbm1lbnQoZmFsc2UpCiAg
ICAgLCBtX2FwcGxpZXNQYWdlU2NhbGUoZmFsc2UpCisgICAgLCBtX2NvbnRhaW5lckxheWVyKGZh
bHNlKQorICAgICwgbV9maXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdChmYWxzZSkKICAg
ICAsIG1fcGFpbnRpbmdQaGFzZShHcmFwaGljc0xheWVyUGFpbnRBbGwpCiAgICAgLCBtX2NvbnRl
bnRzT3JpZW50YXRpb24oQ29tcG9zaXRpbmdDb29yZGluYXRlc1RvcERvd24pCiAgICAgLCBtX3Bh
cmVudCgwKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NM
YXllci5oCmluZGV4IDhjZGYwZDdmYzE4YTFkNzAxMWRkMmNlZmMyYjZiOTQyNGMyNjc5NmMuLjBk
ZGQyZWQyMzA5NmY3MDJhNTExYzAyODg0ZDExYTIxYmZlYTRlNjEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmgKQEAgLTM1OSw2ICszNTks
MTIgQEAgcHVibGljOgogICAgIHZvaWQgc2V0QXBwbGllc1BhZ2VTY2FsZShib29sIGFwcGxpZXNT
Y2FsZSA9IHRydWUpIHsgbV9hcHBsaWVzUGFnZVNjYWxlID0gYXBwbGllc1NjYWxlOyB9CiAgICAg
Ym9vbCBhcHBsaWVzUGFnZVNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9hcHBsaWVzUGFnZVNjYWxl
OyB9CiAKKyAgICBib29sIGNvbnRhaW5lckxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9jb250YWlu
ZXJMYXllcjsgfQorICAgIHZvaWQgc2V0Q29udGFpbmVyTGF5ZXIoYm9vbCBjb250YWluZXJMYXll
ciA9IHRydWUpIHsgbV9jb250YWluZXJMYXllciA9IGNvbnRhaW5lckxheWVyOyB9CisKKyAgICBi
b29sIGZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9m
aXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdDsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRG
aXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdChib29sIGIpIHsgbV9maXhlZFRvQ29udGFp
bmVyTGF5ZXJWaXNpYmxlUmVjdCA9IGI7IH0KKwogICAgIGZsb2F0IHBhZ2VTY2FsZUZhY3Rvcigp
IGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50ID8gbV9jbGllbnQtPnBhZ2VTY2FsZUZhY3RvcigpIDog
MTsgfQogICAgIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9jbGll
bnQgPyBtX2NsaWVudC0+ZGV2aWNlU2NhbGVGYWN0b3IoKSA6IDE7IH0KIApAQCAtNDMxLDYgKzQz
Nyw4IEBAIHByb3RlY3RlZDoKICAgICBib29sIG1fYWNjZWxlcmF0ZXNEcmF3aW5nIDogMTsKICAg
ICBib29sIG1fbWFpbnRhaW5zUGl4ZWxBbGlnbm1lbnQgOiAxOwogICAgIGJvb2wgbV9hcHBsaWVz
UGFnZVNjYWxlIDogMTsgLy8gU2V0IGZvciB0aGUgbGF5ZXIgd2hpY2ggaGFzIHRoZSBwYWdlIHNj
YWxlIGFwcGxpZWQgdG8gaXQuCisgICAgYm9vbCBtX2NvbnRhaW5lckxheWVyIDogMTsgLy8gU2V0
IGZvciB0aGUgbGF5ZXIgdGhhdCBvdGhlciBsYXllcnMgYXJlIGZpeGVkIHRvLgorICAgIGJvb2wg
bV9maXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdCA6IDE7IC8vIFNldCBmb3IgdGhlIGxh
eWVyIHRoYXQgaGFzIHBvc2l0aW9uIGZpeGVkIHRvIHRoZSBjb250YWluZXIgbGF5ZXIncyB2aXNp
YmxlIHJlY3QuCiAKICAgICBHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSBtX3BhaW50aW5nUGhh
c2U7CiAgICAgQ29tcG9zaXRpbmdDb29yZGluYXRlc09yaWVudGF0aW9uIG1fY29udGVudHNPcmll
bnRhdGlvbjsgLy8gYWZmZWN0cyBvcmllbnRhdGlvbiBvZiBsYXllciBjb250ZW50cwpAQCAtNDY1
LDQgKzQ3MywzIEBAIHZvaWQgc2hvd0dyYXBoaWNzTGF5ZXJUcmVlKGNvbnN0IFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXIqIGxheWVyKTsKICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCiAKICNlbmRpZiAvLyBHcmFwaGljc0xheWVyX2gKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAppbmRleCBmNzdjMWNlNGIxYzQxNjc3YzM3
ZDM5OGI5ZDBkNzk0ODhjNmIxNTAwLi5hNzY3M2UwMDAwMTNmYzhkZGVmYTBlNzY4N2Q3NjkxMDFh
Y2MwMjQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJC
YWNraW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNr
aW5nLmNwcApAQCAtMTE5LDggKzExOSwxMCBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6Y3Jl
YXRlUHJpbWFyeUdyYXBoaWNzTGF5ZXIoKQogICAgIGlmIChyZW5kZXJlcigpLT5pc1JlbmRlclZp
ZXcoKSkgewogICAgICAgICBGcmFtZSogZnJhbWUgPSB0b1JlbmRlclZpZXcocmVuZGVyZXIoKSkt
PmZyYW1lVmlldygpLT5mcmFtZSgpOwogICAgICAgICBQYWdlKiBwYWdlID0gZnJhbWUgPyBmcmFt
ZS0+cGFnZSgpIDogMDsKLSAgICAgICAgaWYgKHBhZ2UgJiYgZnJhbWUgJiYgcGFnZS0+bWFpbkZy
YW1lKCkgPT0gZnJhbWUpCisgICAgICAgIGlmIChwYWdlICYmIGZyYW1lICYmIHBhZ2UtPm1haW5G
cmFtZSgpID09IGZyYW1lKSB7CiAgICAgICAgICAgICBtX2dyYXBoaWNzTGF5ZXItPnNldEFwcGxp
ZXNQYWdlU2NhbGUoKTsKKyAgICAgICAgICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0Q29udGFpbmVy
TGF5ZXIoKTsKKyAgICAgICAgfQogICAgIH0KICAgICAKICAgICB1cGRhdGVMYXllck9wYWNpdHko
cmVuZGVyZXIoKS0+c3R5bGUoKSk7CkBAIC0zNjYsNiArMzY4LDcgQEAgdm9pZCBSZW5kZXJMYXll
ckJhY2tpbmc6OnVwZGF0ZUdyYXBoaWNzTGF5ZXJHZW9tZXRyeSgpCiAgICAgUmVuZGVyU3R5bGUq
IHN0eWxlID0gcmVuZGVyZXIoKS0+c3R5bGUoKTsKICAgICBtX2dyYXBoaWNzTGF5ZXItPnNldFBy
ZXNlcnZlczNEKHN0eWxlLT50cmFuc2Zvcm1TdHlsZTNEKCkgPT0gVHJhbnNmb3JtU3R5bGUzRFBy
ZXNlcnZlM0QgJiYgIXJlbmRlcmVyKCktPmhhc1JlZmxlY3Rpb24oKSk7CiAgICAgbV9ncmFwaGlj
c0xheWVyLT5zZXRCYWNrZmFjZVZpc2liaWxpdHkoc3R5bGUtPmJhY2tmYWNlVmlzaWJpbGl0eSgp
ID09IEJhY2tmYWNlVmlzaWJpbGl0eVZpc2libGUpOworICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0
Rml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3QocmVuZGVyZXIoKS0+aXNQb3NpdGlvbmVk
KCkgJiYgc3R5bGUtPnBvc2l0aW9uKCkgPT0gRml4ZWRQb3NpdGlvbik7CiAKICAgICBSZW5kZXJM
YXllciogY29tcEFuY2VzdG9yID0gbV9vd25pbmdMYXllci0+YW5jZXN0b3JDb21wb3NpdGluZ0xh
eWVyKCk7CiAgICAgCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113481</attachid>
            <date>2011-11-03 06:58:09 -0700</date>
            <delta_ts>2011-11-03 07:01:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70103-20111103135807.patch</filename>
            <type>text/plain</type>
            <size>14847</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTg4NTUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA4NjkxN2RkNDUwMjY2OTk4
MDdlMjBhZWZhNjU0MmI4ZDA4NDM4M2U2Li5hZGUyMDAzNzk3MWZmN2NkNDk2ZDhlODZkMjFlOTA5
NWQ2ZDRhYjgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDAgQEAKKzIwMTEtMTEtMDMgIEFscGhh
IExhbSAgPGhjbGFtQGNocm9taXVtLm9yZz4KKworICAgICAgICBJbXBsZW1lbnQgcG9zaXRpb246
Zml4ZWQgaW4gdGhyZWFkZWQgY29tcG9zaXRpbmcgbW9kZS4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcwMTAzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgdW5pdCB0ZXN0OiBDQ0xheWVyVHJlZUhv
c3RDb21tb25UZXN0LnZlcmlmeVRyYW5zZm9ybXNGb3JGaXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNp
YmxlUmVjdAorICAgICAgICBUaGlzIGNoYW5nZSBwYXNzZXMgZXhpc3RpbmcgbGF5b3V0IHRlc3Qg
Zm9yIHBvc2l0aW9uOmZpeGVkIHdpdGggLS10aHJlYWRlZC1jb21wb3NpdGluZyAtLWFjY2VsZXJh
dGVkLWNvbXBvc2l0aW5nIGZsYWdzLgorCisgICAgICAgIFRoZXJlJ3Mgbm8gdHJhbnNmb3JtIG90
aGVyIHRoYW4gdHJhbnNsYXRpb24gaW4gdGhlIGxheWVyIHRyZWUgYmV0d2VlbiBhIHJlbmRlciB2
aWV3IGxheWVyIGFuZCBhIGRlc2NlbmRlbnQgcG9zaXRpb246Zml4ZWQuCisgICAgICAgIFRoaXMg
Y2hhbmdlIGNvbXB1dGVzIHRoZSBjdW11bGF0aXZlIHNjcm9sbCBkZWx0YSBvZiBhbmNlc3RvciB1
bnRpbCBhIHJlbmRlciB2aWV3IGxheWVyIGlzIHJlYWNoZWQuIFRoaXMgY3VtdWxhdGl2ZSBzY3Jv
bGwKKyAgICAgICAgZGVsdGEgaXMgdXNlZCB0byBvZmZzZXQgdGhlIHBvc2l0aW9uIG9mIHRoZSBs
YXllci4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5
ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06
OnNldEZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJQb3NpdGlvbik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpMYXllckNocm9taXVtKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8pOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyQ2hyb21pdW06OnNldENvbnRhaW5lckxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyQ2hyb21pdW06OmNvbnRhaW5lckxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hy
b21pdW06OnNldEZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyQ2hyb21pdW06OmZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6Q0NMYXllckltcGwpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmg6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVySW1wbDo6c2V0Q29udGFpbmVyTGF5ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllckltcGw6OmNvbnRhaW5lckxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJJbXBsOjpzZXRGaXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVySW1wbDo6Zml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3QpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENv
bW1vbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjdW1tdWxhdGl2ZVNjcm9sbERlbHRhc0Zyb21F
bmNsb3NpbmdBbmNlc3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpjYWxjdWxhdGVEcmF3VHJhbnNm
b3Jtc0FuZFZpc2liaWxpdHlJbnRlcm5hbCk6CisKIDIwMTEtMTAtMzEgIFBhdmVsIEZlbGRtYW4g
IDxwZmVsZG1hbkBnb29nbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IG1vdmUgbG9j
YWxpemF0aW9uIHN1cHBvcnQgaW50byBVSVV0aWwuanMsIHJlZHVjZSBleHRlcm5zLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwppbmRleCA4OGRmYjFhNjE0MzRkYTg1ZjAwNjg3ODBhYWEyYjQ4OTVj
OTc2ZDBlLi45MDE4Y2M0YWJlNDZlYTM2YjYwOTA4OWJlZDJhNjg3M2RhMWJkN2RhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDExLTExLTAzICBBbHBoYSBM
YW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQWRkIHRlc3QgZm9yIGltcGxlbWVu
dGluZyBwb3NpdGlvbjpmaXhlZCBpbiB0aHJlYWRlZCBjb21wb3NpdGluZyBtb2RlLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzAxMDMKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHRlc3QgY29uc3Ry
dWN0cyBhIGxheWVyIHRyZWUsIGFwcGxpZXMgc2Nyb2xsIGRlbHRhIHRvIGEgbWlkZGxlIGxheWVy
IGFuZCBjaGVja3MgdGhhdCBzY3JvbGwgZG9lc24ndCBhZmZlY3QgdGhlIHBvc2l0aW9uOmZpeGVk
IGxheWVyLgorCisgICAgICAgICogdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpURVNUKToKKwogMjAxMS0xMC0zMSAgUGF2ZWwgRmVsZG1hbiAg
PHBmZWxkbWFuQGdvb2dsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogbW92ZSBsb2Nh
bGl6YXRpb24gc3VwcG9ydCBpbnRvIFVJVXRpbC5qcywgcmVkdWNlIGV4dGVybnMuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xh
eWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcAppbmRleCA3MjlhOWFjZGVjYzQ4ZWYwOTljMmU1
YjljMzc2MDU5NGQwYzZiMTdlLi4zOTQwMjdiODRkZmQ1MThmMDM4NGViODc4M2UwYWFhODU3YzE4
NDlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTIzNCw2ICsy
MzQsMTUgQEAgdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldERyYXdzQ29udGVudChib29s
IGRyYXdzQ29udGVudCkKICAgICB1cGRhdGVMYXllckRyYXdzQ29udGVudCgpOwogfQogCit2b2lk
IEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0Rml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJl
Y3QoYm9vbCBmaXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdCkKK3sKKyAgICBpZiAoZml4
ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3QgPT0gbV9maXhlZFRvQ29udGFpbmVyTGF5ZXJW
aXNpYmxlUmVjdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NMYXllcjo6c2V0Rml4
ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3QoZml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJs
ZVJlY3QpOworICAgIHVwZGF0ZUxheWVyUG9zaXRpb24oKTsKK30KKwogdm9pZCBHcmFwaGljc0xh
eWVyQ2hyb21pdW06OnNldEJhY2tncm91bmRDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCiB7CiAg
ICAgaWYgKG1fYmFja2dyb3VuZENvbG9yU2V0ICYmIG1fYmFja2dyb3VuZENvbG9yID09IGNvbG9y
KQpAQCAtNDkzLDYgKzUwMiw4IEBAIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjp1cGRhdGVM
YXllclBvc2l0aW9uKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9wb3NpdGlvbi55
KCkgKyBtX2FuY2hvclBvaW50LnkoKSAqIG1fc2l6ZS5oZWlnaHQoKSk7CiAKICAgICBwcmltYXJ5
TGF5ZXIoKS0+c2V0UG9zaXRpb24obGF5ZXJQb3NpdGlvbik7CisgICAgcHJpbWFyeUxheWVyKCkt
PnNldENvbnRhaW5lckxheWVyKG1fY29udGFpbmVyTGF5ZXIpOworICAgIHByaW1hcnlMYXllcigp
LT5zZXRGaXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdChtX2ZpeGVkVG9Db250YWluZXJM
YXllclZpc2libGVSZWN0KTsKIH0KIAogdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0
ZUxheWVyU2l6ZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDcxOTBl
NTA1OWZjNTYxNjQ5Njk2OTA0OTQzYTVlNzVjNTM3YzUzN2UuLjVkNzI3NDc4MDk0YmE5ZWExNmE0
M2RjMGVmZTBlODEyNGY0NzM5ZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5o
CkBAIC02OCw2ICs2OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0UHJlc2VydmVz
M0QoYm9vbCk7CiAgICAgdmlydHVhbCB2b2lkIHNldE1hc2tzVG9Cb3VuZHMoYm9vbCk7CiAgICAg
dmlydHVhbCB2b2lkIHNldERyYXdzQ29udGVudChib29sKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
Rml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3QoYm9vbCk7CiAgICAgdmlydHVhbCB2b2lk
IHNldE1hc2tMYXllcihHcmFwaGljc0xheWVyKik7CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0QmFj
a2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IDZh
NmEwZTc3YzQ3NDkwOWNhMDJiNDQ4MmRmZjYwMTYwYWExMWNmNDguLmJiZmRlOTVjMzE4OTNmYTZh
ZTJhNmJiYTk5Nzc5ODcxM2VhZmUzNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCkBAIC02Myw2
ICs2Myw4IEBAIExheWVyQ2hyb21pdW06OkxheWVyQ2hyb21pdW0oQ0NMYXllckRlbGVnYXRlKiBk
ZWxlZ2F0ZSkKICAgICAsIG1fZGVidWdCb3JkZXJXaWR0aCgwKQogICAgICwgbV9vcGFjaXR5KDEu
MCkKICAgICAsIG1fYW5jaG9yUG9pbnRaKDApCisgICAgLCBtX2NvbnRhaW5lckxheWVyKGZhbHNl
KQorICAgICwgbV9maXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdChmYWxzZSkKICAgICAs
IG1fbWFza3NUb0JvdW5kcyhmYWxzZSkKICAgICAsIG1fb3BhcXVlKGZhbHNlKQogICAgICwgbV9k
b3VibGVTaWRlZCh0cnVlKQpAQCAtMjkxLDYgKzI5Myw3IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6
cHVzaFByb3BlcnRpZXNUbyhDQ0xheWVySW1wbCogbGF5ZXIpCiAgICAgbGF5ZXItPnNldE9wYXF1
ZShtX29wYXF1ZSk7CiAgICAgbGF5ZXItPnNldE9wYWNpdHkobV9vcGFjaXR5KTsKICAgICBsYXll
ci0+c2V0UG9zaXRpb24obV9wb3NpdGlvbik7CisgICAgbGF5ZXItPnNldEZpeGVkVG9Db250YWlu
ZXJMYXllclZpc2libGVSZWN0KG1fZml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3QpOwog
ICAgIGxheWVyLT5zZXRQcmVzZXJ2ZXMzRChwcmVzZXJ2ZXMzRCgpKTsKICAgICBsYXllci0+c2V0
U2Nyb2xsUG9zaXRpb24obV9zY3JvbGxQb3NpdGlvbik7CiAgICAgbGF5ZXItPnNldFN1YmxheWVy
VHJhbnNmb3JtKG1fc3VibGF5ZXJUcmFuc2Zvcm0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCmluZGV4IGM3
YWVjYmU1OGE3N2QzMThkZWU2NTVkNTk1NDNmZmQwMTgwMzM2MWUuLjQwYjI0ZGI2ZDFjZmM5Njcx
OTI3ZmNkMjY3OGU5MTY4NGQ0MzY0ZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKQEAgLTExOSw2ICsx
MTksMTIgQEAgcHVibGljOgogICAgIHZvaWQgc2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYg
cG9zaXRpb24pIHsgbV9wb3NpdGlvbiA9IHBvc2l0aW9uOyAgc2V0TmVlZHNDb21taXQoKTsgfQog
ICAgIEZsb2F0UG9pbnQgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9CiAK
KyAgICB2b2lkIHNldENvbnRhaW5lckxheWVyKGJvb2wgY29udGFpbmVyTGF5ZXIpIHsgbV9jb250
YWluZXJMYXllciA9IGNvbnRhaW5lckxheWVyOyB9CisgICAgYm9vbCBjb250YWluZXJMYXllcigp
IGNvbnN0IHsgcmV0dXJuIG1fY29udGFpbmVyTGF5ZXI7IH0KKworICAgIHZvaWQgc2V0Rml4ZWRU
b0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3QoYm9vbCBmaXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNp
YmxlUmVjdCkgeyBtX2ZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0ID0gZml4ZWRUb0Nv
bnRhaW5lckxheWVyVmlzaWJsZVJlY3Q7IHNldE5lZWRzQ29tbWl0KCk7IH0KKyAgICBib29sIGZp
eGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9maXhlZFRv
Q29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdDsgfQorCiAgICAgdm9pZCBzZXRTdWJsYXllclRyYW5z
Zm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKSB7IG1fc3VibGF5ZXJU
cmFuc2Zvcm0gPSB0cmFuc2Zvcm07IHNldE5lZWRzQ29tbWl0KCk7IH0KICAgICBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgc3VibGF5ZXJUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3N1
YmxheWVyVHJhbnNmb3JtOyB9CiAKQEAgLTI2MCw2ICsyNjYsOCBAQCBwcml2YXRlOgogICAgIGZs
b2F0IG1fZGVidWdCb3JkZXJXaWR0aDsKICAgICBmbG9hdCBtX29wYWNpdHk7CiAgICAgZmxvYXQg
bV9hbmNob3JQb2ludFo7CisgICAgYm9vbCBtX2NvbnRhaW5lckxheWVyOworICAgIGJvb2wgbV9m
aXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdDsKICAgICBib29sIG1fbWFza3NUb0JvdW5k
czsKICAgICBib29sIG1fb3BhcXVlOwogICAgIGJvb2wgbV9kb3VibGVTaWRlZDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJ
bXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJJbXBsLmNwcAppbmRleCBiM2FmMGZiYmY3ZTAyZTdmNzc2Nzk3ZjgxYTNiZDYyZjE0Zjli
ZDZhLi5kMGQ2NjEyZmE0NDY4YTQ4ZTY4MDJkOTljZjBhYzY5YTg5NzcyYjFhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1w
bC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllckltcGwuY3BwCkBAIC00Nyw2ICs0Nyw4IEBAIENDTGF5ZXJJbXBsOjpDQ0xheWVySW1w
bChpbnQgaWQpCiAgICAgLCBtX21hc2tzVG9Cb3VuZHMoZmFsc2UpCiAgICAgLCBtX29wYXF1ZShm
YWxzZSkKICAgICAsIG1fb3BhY2l0eSgxLjApCisgICAgLCBtX2NvbnRhaW5lckxheWVyKGZhbHNl
KQorICAgICwgbV9maXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdChmYWxzZSkKICAgICAs
IG1fcHJlc2VydmVzM0QoZmFsc2UpCiAgICAgLCBtX3VzZXNMYXllclNjaXNzb3IoZmFsc2UpCiAg
ICAgLCBtX2lzTm9uQ29tcG9zaXRlZENvbnRlbnQoZmFsc2UpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaApp
bmRleCBjMzJlMTE3YjdiNWZkOWExZjllMDUxOWU5YzhhOWVhZjdjZmI1MzBkLi5kNmE2MDcxNTQ5
OTY0ODI3MzRhNWJjYmIwZWFkYWIxYjVkYjY2Mzc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKQEAg
LTEwMSw2ICsxMDEsMTIgQEAgcHVibGljOgogICAgIHZvaWQgc2V0UG9zaXRpb24oY29uc3QgRmxv
YXRQb2ludCYpOwogICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV9wb3NpdGlvbjsgfQogCisgICAgdm9pZCBzZXRDb250YWluZXJMYXllcihib29sIGNvbnRh
aW5lckxheWVyID0gdHJ1ZSkgeyBtX2NvbnRhaW5lckxheWVyID0gY29udGFpbmVyTGF5ZXI7IH0K
KyAgICBib29sIGNvbnRhaW5lckxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9jb250YWluZXJMYXll
cjsgfQorCisgICAgdm9pZCBzZXRGaXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdChib29s
IGZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0ID0gdHJ1ZSkgeyBtX2ZpeGVkVG9Db250
YWluZXJMYXllclZpc2libGVSZWN0ID0gZml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3Q7
fQorICAgIGJvb2wgZml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3QoKSBjb25zdCB7IHJl
dHVybiBtX2ZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0OyB9CisKICAgICB2b2lkIHNl
dFByZXNlcnZlczNEKGJvb2wpOwogICAgIGJvb2wgcHJlc2VydmVzM0QoKSBjb25zdCB7IHJldHVy
biBtX3ByZXNlcnZlczNEOyB9CiAKQEAgLTIyNiw2ICsyMzIsOCBAQCBwcml2YXRlOgogICAgIGJv
b2wgbV9vcGFxdWU7CiAgICAgZmxvYXQgbV9vcGFjaXR5OwogICAgIEZsb2F0UG9pbnQgbV9wb3Np
dGlvbjsKKyAgICBib29sIG1fY29udGFpbmVyTGF5ZXI7CisgICAgYm9vbCBtX2ZpeGVkVG9Db250
YWluZXJMYXllclZpc2libGVSZWN0OwogICAgIGJvb2wgbV9wcmVzZXJ2ZXMzRDsKICAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBtX3N1YmxheWVyVHJhbnNmb3JtOwogICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4IG1fdHJhbnNmb3JtOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1v
bi5jcHAKaW5kZXggMDcwMDhlMDI5MGIyNDY2ODYyYjE1NDc2ZWZiMjg0MTEyOWNkMzQ5Yy4uY2I5
ZmZhM2E4ODFlZTBhNTAxYmYzY2Y4NzQ2NDQ2NGJmZDhmNmI1MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29t
bW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwCkBAIC0xMDMsNiArMTAzLDE5IEBAIGJvb2wgbGF5
ZXJTaG91bGRCZVNraXBwZWQoTGF5ZXJUeXBlKiBsYXllcikKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKKy8vIFJlY3Vyc2l2ZWx5IHdhbGsgdXAgdGhlIHRyZWUgYW5kIHN1bSB0aGUgc2Nyb2xsIGRl
bHRhcyBhbG9uZyB0aGUgd2F5IHVudGlsIGFuIGFuY2hvciBsYXllciBpcyByZWFjaGVkLgordGVt
cGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlPiBzdGF0aWMgSW50U2l6ZSBjdW1tdWxhdGl2ZVNjcm9s
bERlbHRhc0Zyb21FbmNsb3NpbmdBbmNlc3RvcihMYXllclR5cGUqIGxheWVyKQoreworICAgIGlm
ICghbGF5ZXIpCisgICAgICAgIHJldHVybiBJbnRTaXplKDAsIDApOworCisgICAgSW50U2l6ZSBz
Y3JvbGxEZWx0YSA9IGxheWVyLT5zY3JvbGxEZWx0YSgpOworCisgICAgaWYgKGxheWVyLT5jb250
YWluZXJMYXllcigpKQorICAgICAgICByZXR1cm4gc2Nyb2xsRGVsdGE7CisgICAgcmV0dXJuIHNj
cm9sbERlbHRhICsgY3VtbXVsYXRpdmVTY3JvbGxEZWx0YXNGcm9tRW5jbG9zaW5nQW5jZXN0b3Io
bGF5ZXItPnBhcmVudCgpKTsKK30KKwogLy8gUmVjdXJzaXZlbHkgd2Fsa3MgdGhlIGxheWVyIHRy
ZWUgc3RhcnRpbmcgYXQgdGhlIGdpdmVuIG5vZGUgYW5kIGNvbXB1dGVzIGFsbCB0aGUKIC8vIG5l
Y2Vzc2FyeSB0cmFuc2Zvcm1hdGlvbnMsIHNjaXNzb3IgcmVjdGFuZ2xlcywgcmVuZGVyIHN1cmZh
Y2VzLCBldGMuCiB0ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1
cmZhY2VUeXBlLCB0eXBlbmFtZSBMYXllclNvcnRlcj4KQEAgLTE5MSw2ICsyMDQsMTMgQEAgc3Rh
dGljIHZvaWQgY2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5SW50ZXJuYWwoTGF5
ZXJUeXBlKiBsYXllciwgTGF5ZXIKICAgICBGbG9hdFBvaW50IGFuY2hvclBvaW50ID0gbGF5ZXIt
PmFuY2hvclBvaW50KCk7CiAgICAgRmxvYXRQb2ludCBwb3NpdGlvbiA9IGxheWVyLT5wb3NpdGlv
bigpIC0gbGF5ZXItPnNjcm9sbERlbHRhKCk7CiAKKyAgICAvLyBUaGlzIGlzIGEgc3BlY2lhbCBj
YXNlIHdoZW4gdGhlIGxheWVyIGlzIGZpeGVkIHRvIHRoZSBhbmNob3IgbGF5ZXIuCisgICAgLy8g
SWYgYSBsYXllciBpcyBmaXhlZCB0byB0aGUgY29udGFpbmVyIGxheWVyJ3MgdmlzaWJsZSByZWN0
IHRoZW4gdGhlIHRyYW5zbGF0aW9uIGNhdXNlZCBieSBzY3JvbGxpbmcgc2hvdWxkIGJlIHJlbW92
ZWQuIFRoaXMgaXMgZG9uZSBieSBhZGRpbmcgdXAgYWxsIHRoZQorICAgIC8vIHNjcm9sbCBkZWx0
YXMgdW50aWwgYW4gY29udGFpbmVyIGxheWVyIGlzIHJlYWNoZWQuIEl0IGlzIGd1YXJhbnRlZWQg
dGhhdCB0aGVyZSdzIG5vIHRyYW5zZm9ybWF0aW9uIG90aGVyIHRoYW4gdHJhbnNsYXRpb24gYmV0
d2VlbiB0aGlzIGxheWVyCisgICAgLy8gYW5kIHRoZSBhbmNob3IgbGF5ZXIuCisgICAgaWYgKGxh
eWVyLT5maXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdCgpKQorICAgICAgICBwb3NpdGlv
biArPSBjdW1tdWxhdGl2ZVNjcm9sbERlbHRhc0Zyb21FbmNsb3NpbmdBbmNlc3RvcihsYXllci0+
cGFyZW50KCkpOworCiAgICAgLy8gT2Zmc2V0IGJldHdlZW4gYW5jaG9yIHBvaW50IGFuZCB0aGUg
Y2VudGVyIG9mIHRoZSBxdWFkLgogICAgIGZsb2F0IGNlbnRlck9mZnNldFggPSAoMC41IC0gYW5j
aG9yUG9pbnQueCgpKSAqIGJvdW5kcy53aWR0aCgpOwogICAgIGZsb2F0IGNlbnRlck9mZnNldFkg
PSAoMC41IC0gYW5jaG9yUG9pbnQueSgpKSAqIGJvdW5kcy5oZWlnaHQoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5j
cHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRl
c3QuY3BwCmluZGV4IDAzNjQ2OTYyYmE5NzEyYTQxYmI4MTM2OWE1OWQ5OTM5NTMyYjAzZTEuLjRl
MTM0NWZjNDY2OTU3ZjVjZmI5ZTQ1Yzg5YWQ4YmYyYjcyM2EzMDAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0
LmNwcApAQCAtMjYsNiArMjYsOCBAQAogCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0Q29t
bW9uLmgiCiAKKyNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgorI2luY2x1ZGUgImNjL0NDU2lu
Z2xlVGhyZWFkUHJveHkuaCIKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAi
VHJhbnNmb3JtYXRpb25NYXRyaXguaCIKIApAQCAtNDcxLDYgKzQ3Myw1MCBAQCBURVNUKENDTGF5
ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JSZW5kZXJTdXJmYWNlSGll
cmFyY2h5KQogICAgIEVYUEVDVF9GTE9BVF9FUSg1LjAsIGdyYW5kQ2hpbGRPZlJTMi0+c2NyZWVu
U3BhY2VUcmFuc2Zvcm0oKS5tNDIoKSk7CiB9CiAKK1RFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9u
VGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvckZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0
KQoreworICAgIC8vIFRoZSBjb25zdHJ1Y3RvciBvbiB0aGlzIHdpbGwgZmFrZSB0aGF0IHdlIGFy
ZSBvbiB0aGUgY29ycmVjdCB0aHJlYWQuCisgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIHNl
dEltcGxUaHJlYWQ7CisKKyAgICAvLyBDcmVhdGUgYSBzaW1wbGUgQ0NMYXllckltcGwgdHJlZToK
KyAgICBSZWZQdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDEpOwor
ICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2hpbGQgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDIpOwor
ICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gZ3JhbmRDaGlsZCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUo
Myk7CisgICAgcm9vdC0+YWRkQ2hpbGQoY2hpbGQpOworICAgIGNoaWxkLT5hZGRDaGlsZChncmFu
ZENoaWxkKTsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OworICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4IGNoaWxkVHJhbnNmb3JtYXRpb25NYXRyaXg7CisgICAgY2hp
bGRUcmFuc2Zvcm1hdGlvbk1hdHJpeC50cmFuc2xhdGUoNDAsIDQwKTsKKyAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBncmFuZENoaWxkVHJhbnNmb3JtYXRpb25NYXRyaXg7CisgICAgZ3JhbmRDaGls
ZFRyYW5zZm9ybWF0aW9uTWF0cml4LnRyYW5zbGF0ZSg1MCwgNTApOworCisgICAgcm9vdC0+Y3Jl
YXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHJvb3QtPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQo
MCwgMCkpOworICAgIHJvb3QtPnNldEJvdW5kcyhJbnRTaXplKDEwMCwgMTAwKSk7CisKKyAgICBj
aGlsZC0+c2V0Qm91bmRzKEludFNpemUoMTAwLCAxMDApKTsKKyAgICBjaGlsZC0+c2V0QW5jaG9y
UG9pbnQoRmxvYXRQb2ludCgwLCAwKSk7CisgICAgY2hpbGQtPnNldFNjcm9sbERlbHRhKEludFNp
emUoMTAsIDEwKSk7CisgICAgY2hpbGQtPnNldENvbnRhaW5lckxheWVyKHRydWUpOworCisgICAg
Z3JhbmRDaGlsZC0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgwLCAwKSk7CisgICAgZ3JhbmRD
aGlsZC0+c2V0Qm91bmRzKEludFNpemUoMTAwLCAxMDApKTsKKyAgICBncmFuZENoaWxkLT5zZXRG
aXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdCh0cnVlKTsKKworICAgIFZlY3RvcjxSZWZQ
dHI8Q0NMYXllckltcGw+ID4gZHVtbXlSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIFZlY3Rv
cjxSZWZQdHI8Q0NMYXllckltcGw+ID4gZHVtbXlMYXllckxpc3Q7CisgICAgaW50IGR1bW15TWF4
VGV4dHVyZVNpemUgPSA1MTI7CisKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0
ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShyb290LmdldCgpLCByb290LmdldCgpLCBpZGVu
dGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIGR1bW15UmVuZGVyU3VyZmFjZUxheWVyTGlzdCwg
ZHVtbXlMYXllckxpc3QsIDAsIGR1bW15TWF4VGV4dHVyZVNpemUpOworCisgICAgLy8gVGhlIGNo
aWxkIGxheWVyIHNob3VsZCBnZXQgYSB0cmFuc2xhdGlvbi4KKyAgICBWRVJJRllfTUFUUklYX0FM
TU9TVF9FUVVBTChjaGlsZFRyYW5zZm9ybWF0aW9uTWF0cml4LCBjaGlsZC0+ZHJhd1RyYW5zZm9y
bSgpKTsKKworICAgIC8vIFRoZSBjaGlsZCBsYXllciBzaG91bGQgc3RheSBmaXhlZCB0byB0aGUg
cm9vdC4KKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChncmFuZENoaWxkVHJhbnNmb3Jt
YXRpb25NYXRyaXgsIGdyYW5kQ2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7Cit9CisKIC8vIEZJWE1F
OgogLy8gY29udGludWUgd29ya2luZyBvbiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9Njg5NDIKIC8vICAtIGFkZCBhIHRlc3QgdG8gdmVyaWZ5IGNsaXBwaW5nIHRoYXQg
Y2hhbmdlcyB0aGUgImNlbnRlciBwb2ludCIK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113482</attachid>
            <date>2011-11-03 07:00:34 -0700</date>
            <delta_ts>2012-04-24 11:34:25 -0700</delta_ts>
            <desc>Chromium port changes</desc>
            <filename>bug-70103-20111103140032.patch</filename>
            <type>text/plain</type>
            <size>14856</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTg4NTUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA4NjkxN2RkNDUwMjY2OTk4
MDdlMjBhZWZhNjU0MmI4ZDA4NDM4M2U2Li5hZGUyMDAzNzk3MWZmN2NkNDk2ZDhlODZkMjFlOTA5
NWQ2ZDRhYjgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDAgQEAKKzIwMTEtMTEtMDMgIEFscGhh
IExhbSAgPGhjbGFtQGNocm9taXVtLm9yZz4KKworICAgICAgICBJbXBsZW1lbnQgcG9zaXRpb246
Zml4ZWQgaW4gdGhyZWFkZWQgY29tcG9zaXRpbmcgbW9kZS4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcwMTAzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgdW5pdCB0ZXN0OiBDQ0xheWVyVHJlZUhv
c3RDb21tb25UZXN0LnZlcmlmeVRyYW5zZm9ybXNGb3JGaXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNp
YmxlUmVjdAorICAgICAgICBUaGlzIGNoYW5nZSBwYXNzZXMgZXhpc3RpbmcgbGF5b3V0IHRlc3Qg
Zm9yIHBvc2l0aW9uOmZpeGVkIHdpdGggLS10aHJlYWRlZC1jb21wb3NpdGluZyAtLWFjY2VsZXJh
dGVkLWNvbXBvc2l0aW5nIGZsYWdzLgorCisgICAgICAgIFRoZXJlJ3Mgbm8gdHJhbnNmb3JtIG90
aGVyIHRoYW4gdHJhbnNsYXRpb24gaW4gdGhlIGxheWVyIHRyZWUgYmV0d2VlbiBhIHJlbmRlciB2
aWV3IGxheWVyIGFuZCBhIGRlc2NlbmRlbnQgcG9zaXRpb246Zml4ZWQuCisgICAgICAgIFRoaXMg
Y2hhbmdlIGNvbXB1dGVzIHRoZSBjdW11bGF0aXZlIHNjcm9sbCBkZWx0YSBvZiBhbmNlc3RvciB1
bnRpbCBhIHJlbmRlciB2aWV3IGxheWVyIGlzIHJlYWNoZWQuIFRoaXMgY3VtdWxhdGl2ZSBzY3Jv
bGwKKyAgICAgICAgZGVsdGEgaXMgdXNlZCB0byBvZmZzZXQgdGhlIHBvc2l0aW9uIG9mIHRoZSBs
YXllci4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5
ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06
OnNldEZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJQb3NpdGlvbik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpMYXllckNocm9taXVtKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8pOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyQ2hyb21pdW06OnNldENvbnRhaW5lckxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyQ2hyb21pdW06OmNvbnRhaW5lckxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hy
b21pdW06OnNldEZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyQ2hyb21pdW06OmZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6Q0NMYXllckltcGwpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmg6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVySW1wbDo6c2V0Q29udGFpbmVyTGF5ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllckltcGw6OmNvbnRhaW5lckxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJJbXBsOjpzZXRGaXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVySW1wbDo6Zml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3QpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENv
bW1vbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjdW1tdWxhdGl2ZVNjcm9sbERlbHRhc0Zyb21F
bmNsb3NpbmdBbmNlc3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpjYWxjdWxhdGVEcmF3VHJhbnNm
b3Jtc0FuZFZpc2liaWxpdHlJbnRlcm5hbCk6CisKIDIwMTEtMTAtMzEgIFBhdmVsIEZlbGRtYW4g
IDxwZmVsZG1hbkBnb29nbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IG1vdmUgbG9j
YWxpemF0aW9uIHN1cHBvcnQgaW50byBVSVV0aWwuanMsIHJlZHVjZSBleHRlcm5zLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwppbmRleCA4OGRmYjFhNjE0MzRkYTg1ZjAwNjg3ODBhYWEyYjQ4OTVj
OTc2ZDBlLi45MDE4Y2M0YWJlNDZlYTM2YjYwOTA4OWJlZDJhNjg3M2RhMWJkN2RhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDExLTExLTAzICBBbHBoYSBM
YW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQWRkIHRlc3QgZm9yIGltcGxlbWVu
dGluZyBwb3NpdGlvbjpmaXhlZCBpbiB0aHJlYWRlZCBjb21wb3NpdGluZyBtb2RlLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzAxMDMKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHRlc3QgY29uc3Ry
dWN0cyBhIGxheWVyIHRyZWUsIGFwcGxpZXMgc2Nyb2xsIGRlbHRhIHRvIGEgbWlkZGxlIGxheWVy
IGFuZCBjaGVja3MgdGhhdCBzY3JvbGwgZG9lc24ndCBhZmZlY3QgdGhlIHBvc2l0aW9uOmZpeGVk
IGxheWVyLgorCisgICAgICAgICogdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpURVNUKToKKwogMjAxMS0xMC0zMSAgUGF2ZWwgRmVsZG1hbiAg
PHBmZWxkbWFuQGdvb2dsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogbW92ZSBsb2Nh
bGl6YXRpb24gc3VwcG9ydCBpbnRvIFVJVXRpbC5qcywgcmVkdWNlIGV4dGVybnMuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xh
eWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcAppbmRleCA3MjlhOWFjZGVjYzQ4ZWYwOTljMmU1
YjljMzc2MDU5NGQwYzZiMTdlLi4zOTQwMjdiODRkZmQ1MThmMDM4NGViODc4M2UwYWFhODU3YzE4
NDlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTIzNCw2ICsy
MzQsMTUgQEAgdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldERyYXdzQ29udGVudChib29s
IGRyYXdzQ29udGVudCkKICAgICB1cGRhdGVMYXllckRyYXdzQ29udGVudCgpOwogfQogCit2b2lk
IEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0Rml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJl
Y3QoYm9vbCBmaXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdCkKK3sKKyAgICBpZiAoZml4
ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3QgPT0gbV9maXhlZFRvQ29udGFpbmVyTGF5ZXJW
aXNpYmxlUmVjdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NMYXllcjo6c2V0Rml4
ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3QoZml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJs
ZVJlY3QpOworICAgIHVwZGF0ZUxheWVyUG9zaXRpb24oKTsKK30KKwogdm9pZCBHcmFwaGljc0xh
eWVyQ2hyb21pdW06OnNldEJhY2tncm91bmRDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCiB7CiAg
ICAgaWYgKG1fYmFja2dyb3VuZENvbG9yU2V0ICYmIG1fYmFja2dyb3VuZENvbG9yID09IGNvbG9y
KQpAQCAtNDkzLDYgKzUwMiw4IEBAIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjp1cGRhdGVM
YXllclBvc2l0aW9uKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9wb3NpdGlvbi55
KCkgKyBtX2FuY2hvclBvaW50LnkoKSAqIG1fc2l6ZS5oZWlnaHQoKSk7CiAKICAgICBwcmltYXJ5
TGF5ZXIoKS0+c2V0UG9zaXRpb24obGF5ZXJQb3NpdGlvbik7CisgICAgcHJpbWFyeUxheWVyKCkt
PnNldENvbnRhaW5lckxheWVyKG1fY29udGFpbmVyTGF5ZXIpOworICAgIHByaW1hcnlMYXllcigp
LT5zZXRGaXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdChtX2ZpeGVkVG9Db250YWluZXJM
YXllclZpc2libGVSZWN0KTsKIH0KIAogdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0
ZUxheWVyU2l6ZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDcxOTBl
NTA1OWZjNTYxNjQ5Njk2OTA0OTQzYTVlNzVjNTM3YzUzN2UuLjVkNzI3NDc4MDk0YmE5ZWExNmE0
M2RjMGVmZTBlODEyNGY0NzM5ZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5o
CkBAIC02OCw2ICs2OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0UHJlc2VydmVz
M0QoYm9vbCk7CiAgICAgdmlydHVhbCB2b2lkIHNldE1hc2tzVG9Cb3VuZHMoYm9vbCk7CiAgICAg
dmlydHVhbCB2b2lkIHNldERyYXdzQ29udGVudChib29sKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
Rml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3QoYm9vbCk7CiAgICAgdmlydHVhbCB2b2lk
IHNldE1hc2tMYXllcihHcmFwaGljc0xheWVyKik7CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0QmFj
a2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IDZh
NmEwZTc3YzQ3NDkwOWNhMDJiNDQ4MmRmZjYwMTYwYWExMWNmNDguLmJiZmRlOTVjMzE4OTNmYTZh
ZTJhNmJiYTk5Nzc5ODcxM2VhZmUzNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCkBAIC02Myw2
ICs2Myw4IEBAIExheWVyQ2hyb21pdW06OkxheWVyQ2hyb21pdW0oQ0NMYXllckRlbGVnYXRlKiBk
ZWxlZ2F0ZSkKICAgICAsIG1fZGVidWdCb3JkZXJXaWR0aCgwKQogICAgICwgbV9vcGFjaXR5KDEu
MCkKICAgICAsIG1fYW5jaG9yUG9pbnRaKDApCisgICAgLCBtX2NvbnRhaW5lckxheWVyKGZhbHNl
KQorICAgICwgbV9maXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdChmYWxzZSkKICAgICAs
IG1fbWFza3NUb0JvdW5kcyhmYWxzZSkKICAgICAsIG1fb3BhcXVlKGZhbHNlKQogICAgICwgbV9k
b3VibGVTaWRlZCh0cnVlKQpAQCAtMjkxLDYgKzI5Myw3IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6
cHVzaFByb3BlcnRpZXNUbyhDQ0xheWVySW1wbCogbGF5ZXIpCiAgICAgbGF5ZXItPnNldE9wYXF1
ZShtX29wYXF1ZSk7CiAgICAgbGF5ZXItPnNldE9wYWNpdHkobV9vcGFjaXR5KTsKICAgICBsYXll
ci0+c2V0UG9zaXRpb24obV9wb3NpdGlvbik7CisgICAgbGF5ZXItPnNldEZpeGVkVG9Db250YWlu
ZXJMYXllclZpc2libGVSZWN0KG1fZml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3QpOwog
ICAgIGxheWVyLT5zZXRQcmVzZXJ2ZXMzRChwcmVzZXJ2ZXMzRCgpKTsKICAgICBsYXllci0+c2V0
U2Nyb2xsUG9zaXRpb24obV9zY3JvbGxQb3NpdGlvbik7CiAgICAgbGF5ZXItPnNldFN1YmxheWVy
VHJhbnNmb3JtKG1fc3VibGF5ZXJUcmFuc2Zvcm0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCmluZGV4IGM3
YWVjYmU1OGE3N2QzMThkZWU2NTVkNTk1NDNmZmQwMTgwMzM2MWUuLjQwYjI0ZGI2ZDFjZmM5Njcx
OTI3ZmNkMjY3OGU5MTY4NGQ0MzY0ZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKQEAgLTExOSw2ICsx
MTksMTIgQEAgcHVibGljOgogICAgIHZvaWQgc2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYg
cG9zaXRpb24pIHsgbV9wb3NpdGlvbiA9IHBvc2l0aW9uOyAgc2V0TmVlZHNDb21taXQoKTsgfQog
ICAgIEZsb2F0UG9pbnQgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9CiAK
KyAgICB2b2lkIHNldENvbnRhaW5lckxheWVyKGJvb2wgY29udGFpbmVyTGF5ZXIpIHsgbV9jb250
YWluZXJMYXllciA9IGNvbnRhaW5lckxheWVyOyB9CisgICAgYm9vbCBjb250YWluZXJMYXllcigp
IGNvbnN0IHsgcmV0dXJuIG1fY29udGFpbmVyTGF5ZXI7IH0KKworICAgIHZvaWQgc2V0Rml4ZWRU
b0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3QoYm9vbCBmaXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNp
YmxlUmVjdCkgeyBtX2ZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0ID0gZml4ZWRUb0Nv
bnRhaW5lckxheWVyVmlzaWJsZVJlY3Q7IHNldE5lZWRzQ29tbWl0KCk7IH0KKyAgICBib29sIGZp
eGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9maXhlZFRv
Q29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdDsgfQorCiAgICAgdm9pZCBzZXRTdWJsYXllclRyYW5z
Zm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKSB7IG1fc3VibGF5ZXJU
cmFuc2Zvcm0gPSB0cmFuc2Zvcm07IHNldE5lZWRzQ29tbWl0KCk7IH0KICAgICBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgc3VibGF5ZXJUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3N1
YmxheWVyVHJhbnNmb3JtOyB9CiAKQEAgLTI2MCw2ICsyNjYsOCBAQCBwcml2YXRlOgogICAgIGZs
b2F0IG1fZGVidWdCb3JkZXJXaWR0aDsKICAgICBmbG9hdCBtX29wYWNpdHk7CiAgICAgZmxvYXQg
bV9hbmNob3JQb2ludFo7CisgICAgYm9vbCBtX2NvbnRhaW5lckxheWVyOworICAgIGJvb2wgbV9m
aXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdDsKICAgICBib29sIG1fbWFza3NUb0JvdW5k
czsKICAgICBib29sIG1fb3BhcXVlOwogICAgIGJvb2wgbV9kb3VibGVTaWRlZDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJ
bXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJJbXBsLmNwcAppbmRleCBiM2FmMGZiYmY3ZTAyZTdmNzc2Nzk3ZjgxYTNiZDYyZjE0Zjli
ZDZhLi5kMGQ2NjEyZmE0NDY4YTQ4ZTY4MDJkOTljZjBhYzY5YTg5NzcyYjFhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1w
bC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllckltcGwuY3BwCkBAIC00Nyw2ICs0Nyw4IEBAIENDTGF5ZXJJbXBsOjpDQ0xheWVySW1w
bChpbnQgaWQpCiAgICAgLCBtX21hc2tzVG9Cb3VuZHMoZmFsc2UpCiAgICAgLCBtX29wYXF1ZShm
YWxzZSkKICAgICAsIG1fb3BhY2l0eSgxLjApCisgICAgLCBtX2NvbnRhaW5lckxheWVyKGZhbHNl
KQorICAgICwgbV9maXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdChmYWxzZSkKICAgICAs
IG1fcHJlc2VydmVzM0QoZmFsc2UpCiAgICAgLCBtX3VzZXNMYXllclNjaXNzb3IoZmFsc2UpCiAg
ICAgLCBtX2lzTm9uQ29tcG9zaXRlZENvbnRlbnQoZmFsc2UpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaApp
bmRleCBjMzJlMTE3YjdiNWZkOWExZjllMDUxOWU5YzhhOWVhZjdjZmI1MzBkLi5kNmE2MDcxNTQ5
OTY0ODI3MzRhNWJjYmIwZWFkYWIxYjVkYjY2Mzc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKQEAg
LTEwMSw2ICsxMDEsMTIgQEAgcHVibGljOgogICAgIHZvaWQgc2V0UG9zaXRpb24oY29uc3QgRmxv
YXRQb2ludCYpOwogICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV9wb3NpdGlvbjsgfQogCisgICAgdm9pZCBzZXRDb250YWluZXJMYXllcihib29sIGNvbnRh
aW5lckxheWVyID0gdHJ1ZSkgeyBtX2NvbnRhaW5lckxheWVyID0gY29udGFpbmVyTGF5ZXI7IH0K
KyAgICBib29sIGNvbnRhaW5lckxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9jb250YWluZXJMYXll
cjsgfQorCisgICAgdm9pZCBzZXRGaXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdChib29s
IGZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0ID0gdHJ1ZSkgeyBtX2ZpeGVkVG9Db250
YWluZXJMYXllclZpc2libGVSZWN0ID0gZml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3Q7
fQorICAgIGJvb2wgZml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3QoKSBjb25zdCB7IHJl
dHVybiBtX2ZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0OyB9CisKICAgICB2b2lkIHNl
dFByZXNlcnZlczNEKGJvb2wpOwogICAgIGJvb2wgcHJlc2VydmVzM0QoKSBjb25zdCB7IHJldHVy
biBtX3ByZXNlcnZlczNEOyB9CiAKQEAgLTIyNiw2ICsyMzIsOCBAQCBwcml2YXRlOgogICAgIGJv
b2wgbV9vcGFxdWU7CiAgICAgZmxvYXQgbV9vcGFjaXR5OwogICAgIEZsb2F0UG9pbnQgbV9wb3Np
dGlvbjsKKyAgICBib29sIG1fY29udGFpbmVyTGF5ZXI7CisgICAgYm9vbCBtX2ZpeGVkVG9Db250
YWluZXJMYXllclZpc2libGVSZWN0OwogICAgIGJvb2wgbV9wcmVzZXJ2ZXMzRDsKICAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBtX3N1YmxheWVyVHJhbnNmb3JtOwogICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4IG1fdHJhbnNmb3JtOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1v
bi5jcHAKaW5kZXggMDcwMDhlMDI5MGIyNDY2ODYyYjE1NDc2ZWZiMjg0MTEyOWNkMzQ5Yy4uYmMy
MTI4Y2M4ZGRlNTQxYmNmYzU1YTg2MDdhYmNkZDgzMjUyNTRjNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29t
bW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwCkBAIC0xMDMsNiArMTAzLDE5IEBAIGJvb2wgbGF5
ZXJTaG91bGRCZVNraXBwZWQoTGF5ZXJUeXBlKiBsYXllcikKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKKy8vIFJlY3Vyc2l2ZWx5IHdhbGsgdXAgdGhlIHRyZWUgYW5kIHN1bSB0aGUgc2Nyb2xsIGRl
bHRhcyBhbG9uZyB0aGUgd2F5IHVudGlsIGFuIGNvbnRhaW5lciBsYXllciBpcyByZWFjaGVkLgor
dGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlPiBzdGF0aWMgSW50U2l6ZSBjdW1tdWxhdGl2ZVNj
cm9sbERlbHRhc0Zyb21FbmNsb3NpbmdBbmNlc3RvcihMYXllclR5cGUqIGxheWVyKQoreworICAg
IGlmICghbGF5ZXIpCisgICAgICAgIHJldHVybiBJbnRTaXplKDAsIDApOworCisgICAgSW50U2l6
ZSBzY3JvbGxEZWx0YSA9IGxheWVyLT5zY3JvbGxEZWx0YSgpOworCisgICAgaWYgKGxheWVyLT5j
b250YWluZXJMYXllcigpKQorICAgICAgICByZXR1cm4gc2Nyb2xsRGVsdGE7CisgICAgcmV0dXJu
IHNjcm9sbERlbHRhICsgY3VtbXVsYXRpdmVTY3JvbGxEZWx0YXNGcm9tRW5jbG9zaW5nQW5jZXN0
b3IobGF5ZXItPnBhcmVudCgpKTsKK30KKwogLy8gUmVjdXJzaXZlbHkgd2Fsa3MgdGhlIGxheWVy
IHRyZWUgc3RhcnRpbmcgYXQgdGhlIGdpdmVuIG5vZGUgYW5kIGNvbXB1dGVzIGFsbCB0aGUKIC8v
IG5lY2Vzc2FyeSB0cmFuc2Zvcm1hdGlvbnMsIHNjaXNzb3IgcmVjdGFuZ2xlcywgcmVuZGVyIHN1
cmZhY2VzLCBldGMuCiB0ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRl
clN1cmZhY2VUeXBlLCB0eXBlbmFtZSBMYXllclNvcnRlcj4KQEAgLTE5MSw2ICsyMDQsMTMgQEAg
c3RhdGljIHZvaWQgY2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5SW50ZXJuYWwo
TGF5ZXJUeXBlKiBsYXllciwgTGF5ZXIKICAgICBGbG9hdFBvaW50IGFuY2hvclBvaW50ID0gbGF5
ZXItPmFuY2hvclBvaW50KCk7CiAgICAgRmxvYXRQb2ludCBwb3NpdGlvbiA9IGxheWVyLT5wb3Np
dGlvbigpIC0gbGF5ZXItPnNjcm9sbERlbHRhKCk7CiAKKyAgICAvLyBUaGlzIGlzIGEgc3BlY2lh
bCBjYXNlIHdoZW4gdGhlIGxheWVyIGlzIGZpeGVkIHRvIHRoZSBjb250YWluZXIgbGF5ZXIuCisg
ICAgLy8gSWYgYSBsYXllciBpcyBmaXhlZCB0byB0aGUgY29udGFpbmVyIGxheWVyJ3MgdmlzaWJs
ZSByZWN0IHRoZW4gdGhlIHRyYW5zbGF0aW9uIGNhdXNlZCBieSBzY3JvbGxpbmcgc2hvdWxkIGJl
IHJlbW92ZWQuIFRoaXMgaXMgZG9uZSBieSBhZGRpbmcgdXAgYWxsIHRoZQorICAgIC8vIHNjcm9s
bCBkZWx0YXMgdW50aWwgYW4gY29udGFpbmVyIGxheWVyIGlzIHJlYWNoZWQuIEl0IGlzIGd1YXJh
bnRlZWQgdGhhdCB0aGVyZSdzIG5vIHRyYW5zZm9ybWF0aW9uIG90aGVyIHRoYW4gdHJhbnNsYXRp
b24gYmV0d2VlbiB0aGlzIGxheWVyCisgICAgLy8gYW5kIHRoZSBjb250YWluZXIgbGF5ZXIuCisg
ICAgaWYgKGxheWVyLT5maXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdCgpKQorICAgICAg
ICBwb3NpdGlvbiArPSBjdW1tdWxhdGl2ZVNjcm9sbERlbHRhc0Zyb21FbmNsb3NpbmdBbmNlc3Rv
cihsYXllci0+cGFyZW50KCkpOworCiAgICAgLy8gT2Zmc2V0IGJldHdlZW4gYW5jaG9yIHBvaW50
IGFuZCB0aGUgY2VudGVyIG9mIHRoZSBxdWFkLgogICAgIGZsb2F0IGNlbnRlck9mZnNldFggPSAo
MC41IC0gYW5jaG9yUG9pbnQueCgpKSAqIGJvdW5kcy53aWR0aCgpOwogICAgIGZsb2F0IGNlbnRl
ck9mZnNldFkgPSAoMC41IC0gYW5jaG9yUG9pbnQueSgpKSAqIGJvdW5kcy5oZWlnaHQoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29t
bW9uVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9z
dENvbW1vblRlc3QuY3BwCmluZGV4IDAzNjQ2OTYyYmE5NzEyYTQxYmI4MTM2OWE1OWQ5OTM5NTMy
YjAzZTEuLjRlMTM0NWZjNDY2OTU3ZjVjZmI5ZTQ1Yzg5YWQ4YmYyYjcyM2EzMDAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVz
dC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RD
b21tb25UZXN0LmNwcApAQCAtMjYsNiArMjYsOCBAQAogCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRy
ZWVIb3N0Q29tbW9uLmgiCiAKKyNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgorI2luY2x1ZGUg
ImNjL0NDU2luZ2xlVGhyZWFkUHJveHkuaCIKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCiAj
aW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKIApAQCAtNDcxLDYgKzQ3Myw1MCBAQCBU
RVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JSZW5kZXJT
dXJmYWNlSGllcmFyY2h5KQogICAgIEVYUEVDVF9GTE9BVF9FUSg1LjAsIGdyYW5kQ2hpbGRPZlJT
Mi0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKS5tNDIoKSk7CiB9CiAKK1RFU1QoQ0NMYXllclRyZWVI
b3N0Q29tbW9uVGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvckZpeGVkVG9Db250YWluZXJMYXllclZp
c2libGVSZWN0KQoreworICAgIC8vIFRoZSBjb25zdHJ1Y3RvciBvbiB0aGlzIHdpbGwgZmFrZSB0
aGF0IHdlIGFyZSBvbiB0aGUgY29ycmVjdCB0aHJlYWQuCisgICAgRGVidWdTY29wZWRTZXRJbXBs
VGhyZWFkIHNldEltcGxUaHJlYWQ7CisKKyAgICAvLyBDcmVhdGUgYSBzaW1wbGUgQ0NMYXllcklt
cGwgdHJlZToKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3Jl
YXRlKDEpOworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2hpbGQgPSBDQ0xheWVySW1wbDo6Y3Jl
YXRlKDIpOworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gZ3JhbmRDaGlsZCA9IENDTGF5ZXJJbXBs
OjpjcmVhdGUoMyk7CisgICAgcm9vdC0+YWRkQ2hpbGQoY2hpbGQpOworICAgIGNoaWxkLT5hZGRD
aGlsZChncmFuZENoaWxkKTsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0
cml4OworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNoaWxkVHJhbnNmb3JtYXRpb25NYXRyaXg7
CisgICAgY2hpbGRUcmFuc2Zvcm1hdGlvbk1hdHJpeC50cmFuc2xhdGUoNDAsIDQwKTsKKyAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBncmFuZENoaWxkVHJhbnNmb3JtYXRpb25NYXRyaXg7CisgICAg
Z3JhbmRDaGlsZFRyYW5zZm9ybWF0aW9uTWF0cml4LnRyYW5zbGF0ZSg1MCwgNTApOworCisgICAg
cm9vdC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHJvb3QtPnNldEFuY2hvclBvaW50KEZs
b2F0UG9pbnQoMCwgMCkpOworICAgIHJvb3QtPnNldEJvdW5kcyhJbnRTaXplKDEwMCwgMTAwKSk7
CisKKyAgICBjaGlsZC0+c2V0Qm91bmRzKEludFNpemUoMTAwLCAxMDApKTsKKyAgICBjaGlsZC0+
c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgwLCAwKSk7CisgICAgY2hpbGQtPnNldFNjcm9sbERl
bHRhKEludFNpemUoMTAsIDEwKSk7CisgICAgY2hpbGQtPnNldENvbnRhaW5lckxheWVyKHRydWUp
OworCisgICAgZ3JhbmRDaGlsZC0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgwLCAwKSk7Cisg
ICAgZ3JhbmRDaGlsZC0+c2V0Qm91bmRzKEludFNpemUoMTAwLCAxMDApKTsKKyAgICBncmFuZENo
aWxkLT5zZXRGaXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdCh0cnVlKTsKKworICAgIFZl
Y3RvcjxSZWZQdHI8Q0NMYXllckltcGw+ID4gZHVtbXlSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0Owor
ICAgIFZlY3RvcjxSZWZQdHI8Q0NMYXllckltcGw+ID4gZHVtbXlMYXllckxpc3Q7CisgICAgaW50
IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CisKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246
OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShyb290LmdldCgpLCByb290Lmdl
dCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIGR1bW15UmVuZGVyU3VyZmFjZUxh
eWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIDAsIGR1bW15TWF4VGV4dHVyZVNpemUpOworCisgICAg
Ly8gVGhlIGNoaWxkIGxheWVyIHNob3VsZCBnZXQgYSB0cmFuc2xhdGlvbi4KKyAgICBWRVJJRllf
TUFUUklYX0FMTU9TVF9FUVVBTChjaGlsZFRyYW5zZm9ybWF0aW9uTWF0cml4LCBjaGlsZC0+ZHJh
d1RyYW5zZm9ybSgpKTsKKworICAgIC8vIFRoZSBjaGlsZCBsYXllciBzaG91bGQgc3RheSBmaXhl
ZCB0byB0aGUgcm9vdC4KKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChncmFuZENoaWxk
VHJhbnNmb3JtYXRpb25NYXRyaXgsIGdyYW5kQ2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7Cit9CisK
IC8vIEZJWE1FOgogLy8gY29udGludWUgd29ya2luZyBvbiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9Njg5NDIKIC8vICAtIGFkZCBhIHRlc3QgdG8gdmVyaWZ5IGNsaXBw
aW5nIHRoYXQgY2hhbmdlcyB0aGUgImNlbnRlciBwb2ludCIK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>138609</attachid>
            <date>2012-04-24 11:34:36 -0700</date>
            <delta_ts>2012-04-27 14:03:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70103-20120424193434.patch</filename>
            <type>text/plain</type>
            <size>31847</size>
            <attacher name="Sami Kyostila">skyostil</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE1MDE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2VlYjAzNWIzYmVjM2Y2
ODkyNmI4YWNkYmZiMjgwZjBmNWY3NzI3Mi4uNzJmOTM4Y2VmODMxYTQ2ZWY1MjVjNjNmYmE4YzZh
N2U1MmQ3NDc4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY5IEBACisyMDEyLTA0LTI0ICBTYW1p
IEt5b3N0aWxhICA8c2t5b3N0aWxAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
SW1wbGVtZW50IHBvc2l0aW9uOmZpeGVkIGluIGNvbXBvc2l0b3IgdGhyZWFkCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDEwMworCisgICAgICAgIE9y
aWdpbmFsIHBhdGNoIGJ5IEFscGhhIExhbS4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMuIChPT1BTISkKKworICAgICAgICAqIHBh
Z2UvRnJhbWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6RnJhbWVWaWV3
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6dXNlU2xvd1JlcGFpbnRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6YWRkRml4ZWRPYmplY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVWaWV3OjpyZW1vdmVGaXhlZE9iamVjdCk6CisgICAgICAgICogcGFnZS9GcmFtZVZp
ZXcuaDoKKyAgICAgICAgKEZyYW1lVmlldyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6
OmZpeGVkT2JqZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6Omhhc0ZpeGVkT2Jq
ZWN0cyk6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmZyYW1lVmlld0ZpeGVk
T2JqZWN0c0RpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRv
cjo6aGFzTm9uTGF5ZXJGaXhlZE9iamVjdHMpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6dXBkYXRlU2hvdWxkVXBkYXRlU2Nyb2xs
TGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdD
b29yZGluYXRvcjo6c2V0TGF5ZXJJc0NvbnRhaW5lckZvckZpeGVkUG9zaXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldExheWVySXNGaXhlZFRvQ29udGFp
bmVyTGF5ZXJWaXNpYmxlUmVjdCk6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5n
Q29vcmRpbmF0b3IuaDoKKyAgICAgICAgKFNjcm9sbGluZ0Nvb3JkaW5hdG9yKToKKyAgICAgICAg
KiBwYWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRMYXllcklzQ29u
dGFpbmVyRm9yRml4ZWRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRMYXllcklzRml4ZWRUb0NvbnRhaW5lckxh
eWVyVmlzaWJsZVJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6TGF5ZXJD
aHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGll
c1RvKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVt
Lmg6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXRJc0NvbnRhaW5lckxheWVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmlzQ29udGFpbmVyTGF5ZXIpOgor
ICAgICAgICAoTGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVt
OjpzZXRGaXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllckNocm9taXVtOjpmaXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OkNDTGF5ZXJJbXBsKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllckltcGw6OnNldElzQ29udGFpbmVyTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllckltcGw6OmlzQ29udGFpbmVyTGF5ZXIpOgorICAgICAgICAoQ0NMYXllckltcGwpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OnNldEZpeGVkVG9Db250YWluZXJMYXllclZp
c2libGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpmaXhlZFRvQ29udGFp
bmVyTGF5ZXJWaXNpYmxlUmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6ZmluZEZpcnN0Q29udGFpbmVyQW5jZXN0b3IpOgorICAgICAgICAoV2Vi
Q29yZTo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5SW50ZXJuYWwpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
Qm94Ojp3aWxsQmVEZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzdHls
ZVdpbGxDaGFuZ2UpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHcmFwaGljc0xh
eWVyR2VvbWV0cnkpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3Iu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVCYWNr
aW5nKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJD
b21wb3NpdG9yOjpmaXhlZFBvc2l0aW9uZWRCeUFuY2VzdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6ZW5zdXJlUm9vdExheWVyKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmg6CisKIDIwMTItMDQtMjMgIEFudHRpIEtvaXZp
c3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAgIENvbnNvbGlkYXRlIGV4dGVybmFsIHN0
eWxlc2hlZXQgcXVpcmtzIGhhbmRsaW5nIHRvIFN0eWxlU2hlZXRJbnRlcm5hbApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZwppbmRleCBiNmVmZGQxZmYwNzk3ZGI3NWRiMzBiNTc1MjZlMDQyOWQ3ZDI1
MGJlLi4wZTFjMzk5OWNmZWY1MTdkYzMyNGE5ZmMxY2I5MWFlODU2YzQ0YWIyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDEyLTA0LTI0ICBTYW1pIEt5b3N0
aWxhICA8c2t5b3N0aWxAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVt
ZW50IHBvc2l0aW9uOmZpeGVkIGluIGNvbXBvc2l0b3IgdGhyZWFkCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDEwMworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29t
bW9uVGVzdC5jcHA6CisgICAgICAgIChXZWJLaXRUZXN0czo6VEVTVCk6CisgICAgICAgIChXZWJL
aXRUZXN0cyk6CisKIDIwMTItMDQtMjMgIERhbmEgSmFuc2VucyAgPGRhbmFrakBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBJbWFnZSBtYXNrcyBhcmUgY29uc2lkZXJlZCBvcGFx
dWUgaW5jb3JyZWN0bHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAppbmRleCBhMmI1YjFlN2Ex
NjM0ZTUyMjdiMzAwNmRhMDk3MzNhOGE4ZTdlN2NiLi4xMDEyZjY1MTVlZjg0NDRkNTZhNjNmN2E1
Mjg5MTdlODZjZDc5MzAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmll
dy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCkBAIC0xMjYsNyAr
MTI2LDYgQEAgRnJhbWVWaWV3OjpGcmFtZVZpZXcoRnJhbWUqIGZyYW1lKQogICAgIDogbV9mcmFt
ZShmcmFtZSkKICAgICAsIG1fY2FuSGF2ZVNjcm9sbGJhcnModHJ1ZSkKICAgICAsIG1fc2xvd1Jl
cGFpbnRPYmplY3RDb3VudCgwKQotICAgICwgbV9maXhlZE9iamVjdENvdW50KDApCiAgICAgLCBt
X2xheW91dFRpbWVyKHRoaXMsICZGcmFtZVZpZXc6OmxheW91dFRpbWVyRmlyZWQpCiAgICAgLCBt
X2xheW91dFJvb3QoMCkKICAgICAsIG1faW5TeW5jaHJvbm91c1Bvc3RMYXlvdXQoZmFsc2UpCkBA
IC0xMjY3LDcgKzEyNjYsNyBAQCB2b2lkIEZyYW1lVmlldzo6YWRqdXN0TWVkaWFUeXBlRm9yUHJp
bnRpbmcoYm9vbCBwcmludGluZykKIAogYm9vbCBGcmFtZVZpZXc6OnVzZVNsb3dSZXBhaW50cyhi
b29sIGNvbnNpZGVyT3ZlcmxhcCkgY29uc3QKIHsKLSAgICBib29sIG11c3RCZVNsb3cgPSBtX3Ns
b3dSZXBhaW50T2JqZWN0Q291bnQgPiAwIHx8IChwbGF0Zm9ybVdpZGdldCgpICYmIG1fZml4ZWRP
YmplY3RDb3VudCA+IDApOworICAgIGJvb2wgbXVzdEJlU2xvdyA9IG1fc2xvd1JlcGFpbnRPYmpl
Y3RDb3VudCA+IDAgfHwgKHBsYXRmb3JtV2lkZ2V0KCkgJiYgaGFzRml4ZWRPYmplY3RzKCkpOwog
CiAgICAgaWYgKGNvbnRlbnRzSW5Db21wb3NpdGVkTGF5ZXIoKSkKICAgICAgICAgcmV0dXJuIG11
c3RCZVNsb3c7CkBAIC0xMzQ4LDI4ICsxMzQ3LDMyIEBAIHZvaWQgRnJhbWVWaWV3OjpyZW1vdmVT
bG93UmVwYWludE9iamVjdCgpCiAgICAgfQogfQogCi12b2lkIEZyYW1lVmlldzo6YWRkRml4ZWRP
YmplY3QoKQordm9pZCBGcmFtZVZpZXc6OmFkZEZpeGVkT2JqZWN0KFJlbmRlck9iamVjdCogb2Jq
ZWN0KQogewotICAgIGlmICghbV9maXhlZE9iamVjdENvdW50KyspIHsKKyAgICBpZiAoIW1fZml4
ZWRPYmplY3RzKQorICAgICAgICBtX2ZpeGVkT2JqZWN0cyA9IGFkb3B0UHRyKG5ldyBGaXhlZE9i
amVjdFNldCk7CisKKyAgICBpZiAoIW1fZml4ZWRPYmplY3RzLT5jb250YWlucyhvYmplY3QpKSB7
CisgICAgICAgIG1fZml4ZWRPYmplY3RzLT5hZGQob2JqZWN0KTsKICAgICAgICAgaWYgKHBsYXRm
b3JtV2lkZ2V0KCkpCiAgICAgICAgICAgICB1cGRhdGVDYW5CbGl0T25TY3JvbGxSZWN1cnNpdmVs
eSgpOwogCiAgICAgICAgIGlmIChQYWdlKiBwYWdlID0gbV9mcmFtZS0+cGFnZSgpKSB7CiAgICAg
ICAgICAgICBpZiAoU2Nyb2xsaW5nQ29vcmRpbmF0b3IqIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0g
cGFnZS0+c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKLSAgICAgICAgICAgICAgICBzY3JvbGxpbmdD
b29yZGluYXRvci0+ZnJhbWVWaWV3SGFzRml4ZWRPYmplY3RzRGlkQ2hhbmdlKHRoaXMpOworICAg
ICAgICAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5mcmFtZVZpZXdGaXhlZE9iamVjdHNE
aWRDaGFuZ2UodGhpcyk7CiAgICAgICAgIH0KICAgICB9CiB9CiAKLXZvaWQgRnJhbWVWaWV3Ojpy
ZW1vdmVGaXhlZE9iamVjdCgpCit2b2lkIEZyYW1lVmlldzo6cmVtb3ZlRml4ZWRPYmplY3QoUmVu
ZGVyT2JqZWN0KiBvYmplY3QpCiB7Ci0gICAgQVNTRVJUKG1fZml4ZWRPYmplY3RDb3VudCA+IDAp
OwotICAgIC0tbV9maXhlZE9iamVjdENvdW50OworICAgIEFTU0VSVChoYXNGaXhlZE9iamVjdHMo
KSk7CiAKLSAgICBpZiAoIW1fZml4ZWRPYmplY3RDb3VudCkgeworICAgIGlmIChtX2ZpeGVkT2Jq
ZWN0cy0+Y29udGFpbnMob2JqZWN0KSkgeworICAgICAgICBtX2ZpeGVkT2JqZWN0cy0+cmVtb3Zl
KG9iamVjdCk7CiAgICAgICAgIGlmIChQYWdlKiBwYWdlID0gbV9mcmFtZS0+cGFnZSgpKSB7CiAg
ICAgICAgICAgICBpZiAoU2Nyb2xsaW5nQ29vcmRpbmF0b3IqIHNjcm9sbGluZ0Nvb3JkaW5hdG9y
ID0gcGFnZS0+c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKLSAgICAgICAgICAgICAgICBzY3JvbGxp
bmdDb29yZGluYXRvci0+ZnJhbWVWaWV3SGFzRml4ZWRPYmplY3RzRGlkQ2hhbmdlKHRoaXMpOwor
ICAgICAgICAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5mcmFtZVZpZXdGaXhlZE9iamVj
dHNEaWRDaGFuZ2UodGhpcyk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBGSVhNRTogSW4gYWRk
Rml4ZWRPYmplY3QoKSB3ZSBvbmx5IGNhbGwgdGhpcyBpZiB0aGVyZSdzIGEgcGxhdGZvcm0gd2lk
Z2V0LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgKaW5kZXggNjFmYWM1NDg0ZGJjYTUxZWIxMmI1MTU5
ZmFiYmM3ZmUyMTU5ODNiYy4uYzNjZDBhOTg0MWY1NzA0MTE2ZDI3YzBhOTRhODQ3YzVkNGRiYjk2
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCkBAIC0xOTQsOSArMTk0LDExIEBAIHB1YmxpYzoK
ICAgICB2b2lkIHJlbW92ZVNsb3dSZXBhaW50T2JqZWN0KCk7CiAgICAgYm9vbCBoYXNTbG93UmVw
YWludE9iamVjdHMoKSBjb25zdCB7IHJldHVybiBtX3Nsb3dSZXBhaW50T2JqZWN0Q291bnQ7IH0K
IAotICAgIHZvaWQgYWRkRml4ZWRPYmplY3QoKTsKLSAgICB2b2lkIHJlbW92ZUZpeGVkT2JqZWN0
KCk7Ci0gICAgYm9vbCBoYXNGaXhlZE9iamVjdHMoKSBjb25zdCB7IHJldHVybiBtX2ZpeGVkT2Jq
ZWN0Q291bnQgPiAwOyB9CisgICAgdHlwZWRlZiBIYXNoU2V0PFJlbmRlck9iamVjdCo+IEZpeGVk
T2JqZWN0U2V0OworICAgIHZvaWQgYWRkRml4ZWRPYmplY3QoUmVuZGVyT2JqZWN0Kik7CisgICAg
dm9pZCByZW1vdmVGaXhlZE9iamVjdChSZW5kZXJPYmplY3QqKTsKKyAgICBjb25zdCBGaXhlZE9i
amVjdFNldCogZml4ZWRPYmplY3RzKCkgY29uc3QgeyByZXR1cm4gbV9maXhlZE9iamVjdHMuZ2V0
KCk7IH0KKyAgICBib29sIGhhc0ZpeGVkT2JqZWN0cygpIGNvbnN0IHsgcmV0dXJuIG1fZml4ZWRP
YmplY3RzICYmIG1fZml4ZWRPYmplY3RzLT5zaXplKCkgPiAwOyB9CiAKICAgICAvLyBGdW5jdGlv
bnMgZm9yIHF1ZXJ5aW5nIHRoZSBjdXJyZW50IHNjcm9sbGVkIHBvc2l0aW9uLCBuZWdhdGluZyB0
aGUgZWZmZWN0cyBvZiBvdmVyaGFuZwogICAgIC8vIGFuZCBhZGp1c3RpbmcgZm9yIHBhZ2Ugc2Nh
bGUuCkBAIC00NDYsNyArNDQ4LDYgQEAgcHJpdmF0ZToKICAgICBib29sIG1faXNPdmVybGFwcGVk
OwogICAgIGJvb2wgbV9jb250ZW50SXNPcGFxdWU7CiAgICAgdW5zaWduZWQgbV9zbG93UmVwYWlu
dE9iamVjdENvdW50OwotICAgIHVuc2lnbmVkIG1fZml4ZWRPYmplY3RDb3VudDsKICAgICBpbnQg
bV9ib3JkZXJYOwogICAgIGludCBtX2JvcmRlclk7CiAKQEAgLTUyNCw2ICs1MjUsNyBAQCBwcml2
YXRlOgogICAgIEludFNpemUgbV9tYXhBdXRvU2l6ZTsKIAogICAgIE93blB0cjxTY3JvbGxhYmxl
QXJlYVNldD4gbV9zY3JvbGxhYmxlQXJlYXM7CisgICAgT3duUHRyPEZpeGVkT2JqZWN0U2V0PiBt
X2ZpeGVkT2JqZWN0czsKIAogICAgIHN0YXRpYyBkb3VibGUgc19kZWZlcnJlZFJlcGFpbnREZWxh
eTsKICAgICBzdGF0aWMgZG91YmxlIHNfaW5pdGlhbERlZmVycmVkUmVwYWludERlbGF5RHVyaW5n
TG9hZGluZzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9s
bGluZ0Nvb3JkaW5hdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9s
bGluZ0Nvb3JkaW5hdG9yLmNwcAppbmRleCA5ZmMxZTRhNjMzMGM2ZGQyNDNmYTM3Yzk0YmViNzcx
MzJhMzEyNzdmLi4yMGNhMTMyZGMwZWQ4ODY0YTUxNjRlNjFkMTMxODNhYWM4OGRlZmMxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRv
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRp
bmF0b3IuY3BwCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2lu
Y2x1ZGUgIlNjcm9sbEFuaW1hdG9yLmgiCiAjaW5jbHVkZSAiU2Nyb2xsaW5nVHJlZVN0YXRlLmgi
CisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogCiAj
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpAQCAtMTY5LDcgKzE3MCw3IEBAIHZvaWQg
U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmZyYW1lVmlld0hhc1Nsb3dSZXBhaW50T2JqZWN0c0RpZENo
YW5nZShGcmFtZVZpZXcqIGZyCiAgICAgdXBkYXRlU2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3Np
dGlvbk9uTWFpblRocmVhZCgpOwogfQogCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpmcmFt
ZVZpZXdIYXNGaXhlZE9iamVjdHNEaWRDaGFuZ2UoRnJhbWVWaWV3KiBmcmFtZVZpZXcpCit2b2lk
IFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpmcmFtZVZpZXdGaXhlZE9iamVjdHNEaWRDaGFuZ2UoRnJh
bWVWaWV3KiBmcmFtZVZpZXcpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBB
U1NFUlQobV9wYWdlKTsKQEAgLTMyMiwxMiArMzIzLDMzIEBAIHZvaWQgU2Nyb2xsaW5nQ29vcmRp
bmF0b3I6OnJlY29tcHV0ZVdoZWVsRXZlbnRIYW5kbGVyQ291bnQoKQogICAgIHNldFdoZWVsRXZl
bnRIYW5kbGVyQ291bnQod2hlZWxFdmVudEhhbmRsZXJDb3VudCk7CiB9CiAKK2Jvb2wgU2Nyb2xs
aW5nQ29vcmRpbmF0b3I6Omhhc05vbkxheWVyRml4ZWRPYmplY3RzKEZyYW1lVmlldyogZnJhbWVW
aWV3KQoreworICAgIGlmICghbV9wYWdlLT5zZXR0aW5ncygpLT5hY2NlbGVyYXRlZENvbXBvc2l0
aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIGZyYW1lVmlldy0+
aGFzRml4ZWRPYmplY3RzKCk7CisKKyAgICBjb25zdCBGcmFtZVZpZXc6OkZpeGVkT2JqZWN0U2V0
KiBmaXhlZE9iamVjdHMgPSBmcmFtZVZpZXctPmZpeGVkT2JqZWN0cygpOworICAgIGlmICghZml4
ZWRPYmplY3RzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3IgKEZyYW1lVmlldzo6
Rml4ZWRPYmplY3RTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZml4ZWRPYmplY3RzLT5iZWdpbigp
LCBlbmQgPSBmaXhlZE9iamVjdHMtPmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAg
UmVuZGVyT2JqZWN0KiBvID0gKml0OworICAgICAgICBpZiAoIW8tPmlzQm94KCkpCisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgUmVuZGVyQm94KiBib3ggPSB0b1JlbmRlckJveChv
KTsKKyAgICAgICAgaWYgKCFib3gtPmhhc0xheWVyKCkgfHwgIWJveC0+bGF5ZXIoKS0+YmFja2lu
ZygpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsK
K30KKwogdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6dXBkYXRlU2hvdWxkVXBkYXRlU2Nyb2xs
TGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZCgpCiB7CiAgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcg
PSBtX3BhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCk7CiAKLSAgICAvLyBGSVhNRTogSGF2aW5nIGZp
eGVkIG9iamVjdHMgb24gdGhlIHBhZ2Ugc2hvdWxkIG5vdCB0cmlnZ2VyIHRoZSBzbG93IHBhdGgu
Ci0gICAgc2V0U2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZChtX2Zv
cmNlTWFpblRocmVhZFNjcm9sbExheWVyUG9zaXRpb25VcGRhdGVzIHx8IGZyYW1lVmlldy0+aGFz
U2xvd1JlcGFpbnRPYmplY3RzKCkgfHwgZnJhbWVWaWV3LT5oYXNGaXhlZE9iamVjdHMoKSk7Cisg
ICAgc2V0U2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZChtX2ZvcmNl
TWFpblRocmVhZFNjcm9sbExheWVyUG9zaXRpb25VcGRhdGVzCisgICAgICAgIHx8IGZyYW1lVmll
dy0+aGFzU2xvd1JlcGFpbnRPYmplY3RzKCkKKyAgICAgICAgfHwgaGFzTm9uTGF5ZXJGaXhlZE9i
amVjdHMoZnJhbWVWaWV3KSk7CiB9CiAKIHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldEZv
cmNlTWFpblRocmVhZFNjcm9sbExheWVyUG9zaXRpb25VcGRhdGVzKGJvb2wgZm9yY2VNYWluVGhy
ZWFkU2Nyb2xsTGF5ZXJQb3NpdGlvblVwZGF0ZXMpCkBAIC00MTQsNiArNDM2LDE2IEBAIHZvaWQg
U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmNvbW1pdFRyZWVTdGF0ZSgpCiAgICAgT3duUHRyPFNjcm9s
bGluZ1RyZWVTdGF0ZT4gdHJlZVN0YXRlID0gbV9zY3JvbGxpbmdUcmVlU3RhdGUtPmNvbW1pdCgp
OwogICAgIFNjcm9sbGluZ1RocmVhZDo6ZGlzcGF0Y2goYmluZCgmU2Nyb2xsaW5nVHJlZTo6Y29t
bWl0TmV3VHJlZVN0YXRlLCBtX3Njcm9sbGluZ1RyZWUuZ2V0KCksIHRyZWVTdGF0ZS5yZWxlYXNl
KCkpKTsKIH0KKwordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0TGF5ZXJJc0NvbnRhaW5l
ckZvckZpeGVkUG9zaXRpb24oR3JhcGhpY3NMYXllciosIGJvb2wpCit7CisgICAgLy8gRklYTUU6
IEltcGxlbWVudCEKK30KKwordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0TGF5ZXJJc0Zp
eGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0KEdyYXBoaWNzTGF5ZXIqLCBib29sKQorewor
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQhCit9CiAjZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5n
Q29vcmRpbmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nv
b3JkaW5hdG9yLmgKaW5kZXggNGEyMjMyZDI0ZGNmYTMxODAzYjQzM2Q3NGEwMmU0MmRkYTU4Yzhm
MS4uZmFhOWQyYjk5NzJkMjQ0OWMwNDBkY2U1ZWE4NjdlNTY3OWNmZTFhNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5oCkBA
IC03OSwxMSArNzksOCBAQCBwdWJsaWM6CiAgICAgLy8gU2hvdWxkIGJlIGNhbGxlZCB3aGVuZXZl
ciB0aGUgc2xvdyByZXBhaW50IG9iamVjdHMgY291bnRlciBjaGFuZ2VzIGJldHdlZW4gemVybyBh
bmQgb25lLgogICAgIHZvaWQgZnJhbWVWaWV3SGFzU2xvd1JlcGFpbnRPYmplY3RzRGlkQ2hhbmdl
KEZyYW1lVmlldyopOwogCi0gICAgLy8gU2hvdWxkIGJlIGNhbGxlZCB3aGVuZXZlciB0aGUgZml4
ZWQgb2JqZWN0cyBjb3VudGVyIGNoYW5nZXMgYmV0d2VlbiB6ZXJvIGFuZCBvbmUuCi0gICAgLy8g
RklYTUU6IFRoaXMgaXMgYSB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCBzbyB0aGF0IHdlJ2xsIGZhbGwg
aW50byBtYWluIHRocmVhZCBzY3JvbGxpbmcgbW9kZQotICAgIC8vIGlmIGEgcGFnZSBoYXMgZml4
ZWQgZWxlbWVudHMuIFRoZSBzY3JvbGxpbmcgdHJlZSBzaG91bGQga25vdyBhYm91dCB0aGUgZml4
ZWQgZWxlbWVudHMKLSAgICAvLyBzbyBpdCBjYW4gbWFrZSBzdXJlIHRoZXkgc3RheSBmaXhlZCBl
dmVuIHdoZW4gd2Ugc2Nyb2xsIG9uIHRoZSBzY3JvbGxpbmcgdGhyZWFkLgotICAgIHZvaWQgZnJh
bWVWaWV3SGFzRml4ZWRPYmplY3RzRGlkQ2hhbmdlKEZyYW1lVmlldyopOworICAgIC8vIFNob3Vs
ZCBiZSBjYWxsZWQgd2hlbmV2ZXIgdGhlIHNldCBvZiBmaXhlZCBvYmplY3RzIGNoYW5nZXMuCisg
ICAgdm9pZCBmcmFtZVZpZXdGaXhlZE9iamVjdHNEaWRDaGFuZ2UoRnJhbWVWaWV3Kik7CiAKICAg
ICAvLyBTaG91bGQgYmUgY2FsbGVkIHdoZW5ldmVyIHRoZSByb290IGxheWVyIGZvciB0aGUgZ2l2
ZW4gZnJhbWUgdmlldyBjaGFuZ2VzLgogICAgIHZvaWQgZnJhbWVWaWV3Um9vdExheWVyRGlkQ2hh
bmdlKEZyYW1lVmlldyopOwpAQCAtMTE1LDEwICsxMTIsMTcgQEAgcHVibGljOgogICAgIC8vIEZv
cmNlIGFsbCBzY3JvbGwgbGF5ZXIgcG9zaXRpb24gdXBkYXRlcyB0byBoYXBwZW4gb24gdGhlIG1h
aW4gdGhyZWFkLgogICAgIHZvaWQgc2V0Rm9yY2VNYWluVGhyZWFkU2Nyb2xsTGF5ZXJQb3NpdGlv
blVwZGF0ZXMoYm9vbCk7CiAKKyAgICAvLyBNYXJrL3VubWFyayBhIGxheWVyIGFzIGEgY29udGFp
bmVyIGZvciBmaXhlZCBwb3NpdGlvbiBsYXllcnMuCisgICAgdm9pZCBzZXRMYXllcklzQ29udGFp
bmVyRm9yRml4ZWRQb3NpdGlvbihHcmFwaGljc0xheWVyKiwgYm9vbCk7CisKKyAgICAvLyBBdHRh
Y2gvZGV0YWNoIGxheWVyIHBvc2l0aW9uIHRvIGFuY2VzdG9yIGZpeGVkIHBvc2l0aW9uIGNvbnRh
aW5lci4KKyAgICB2b2lkIHNldExheWVySXNGaXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVj
dChHcmFwaGljc0xheWVyKiwgYm9vbCk7CisKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgU2Nyb2xs
aW5nQ29vcmRpbmF0b3IoUGFnZSopOwogCiAgICAgdm9pZCByZWNvbXB1dGVXaGVlbEV2ZW50SGFu
ZGxlckNvdW50KCk7CisgICAgYm9vbCBoYXNOb25MYXllckZpeGVkT2JqZWN0cyhGcmFtZVZpZXcq
KTsKICAgICB2b2lkIHVwZGF0ZVNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5U
aHJlYWQoKTsKIAogICAgIHZvaWQgc2V0U2Nyb2xsTGF5ZXIoR3JhcGhpY3NMYXllciopOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY2hyb21pdW0vU2Nyb2xsaW5n
Q29vcmRpbmF0b3JDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9j
aHJvbWl1bS9TY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtLmNwcAppbmRleCBkNTZjZjQ5MzMx
M2Q2OTNlMjJmYTM0Mzk0YTUzMjYzYTQ5NDYyNGU1Li4zNzZmNzUwMTFiNTI5MWNmZDQwMjJiOWJh
ZGI5MGI1ZmYyNGZhY2VlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGlu
Zy9jaHJvbWl1bS9TY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29yZGluYXRvckNocm9t
aXVtLmNwcApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAi
RnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIlBhZ2Uu
aCIKICNpbmNsdWRlICJSZWdpb24uaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckNvbXBvc2l0b3Iu
aCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCkBAIC0xNjMsNCArMTY0LDE2IEBAIHZvaWQgU2Ny
b2xsaW5nQ29vcmRpbmF0b3I6OnNldFNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1h
aW5UaHJlYWQoYm9vbCBzCiAgICAgICAgIGxheWVyLT5zZXRTaG91bGRTY3JvbGxPbk1haW5UaHJl
YWQoc2hvdWxkKTsKIH0KIAordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0TGF5ZXJJc0Nv
bnRhaW5lckZvckZpeGVkUG9zaXRpb24oR3JhcGhpY3NMYXllciogbGF5ZXIsIGJvb2wgZW5hYmxl
KQoreworICAgIGlmIChMYXllckNocm9taXVtKiBwbGF0Zm9ybUxheWVyID0gbGF5ZXItPnBsYXRm
b3JtTGF5ZXIoKSkKKyAgICAgICAgcGxhdGZvcm1MYXllci0+c2V0SXNDb250YWluZXJMYXllcihl
bmFibGUpOworfQorCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRMYXllcklzRml4ZWRU
b0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3QoR3JhcGhpY3NMYXllciogbGF5ZXIsIGJvb2wgZW5h
YmxlKQoreworICAgIGlmIChMYXllckNocm9taXVtKiBwbGF0Zm9ybUxheWVyID0gbGF5ZXItPnBs
YXRmb3JtTGF5ZXIoKSkKKyAgICAgICAgcGxhdGZvcm1MYXllci0+c2V0Rml4ZWRUb0NvbnRhaW5l
ckxheWVyVmlzaWJsZVJlY3QoZW5hYmxlKTsKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcApp
bmRleCBmNzQ5MTc2NTAxMmQzMWY1MzAxZTNjYTFiNGNiNzliM2M0NmNlNzI4Li5iOWY5YTkzZmQw
NzJlNDJhY2I5MDE4OWRkMWFlNTQ0NDg0ODM3YTQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcApA
QCAtNzAsNiArNzAsOCBAQCBMYXllckNocm9taXVtOjpMYXllckNocm9taXVtKCkKICAgICAsIG1f
ZGVidWdCb3JkZXJXaWR0aCgwKQogICAgICwgbV9vcGFjaXR5KDEuMCkKICAgICAsIG1fYW5jaG9y
UG9pbnRaKDApCisgICAgLCBtX2lzQ29udGFpbmVyTGF5ZXIoZmFsc2UpCisgICAgLCBtX2ZpeGVk
VG9Db250YWluZXJMYXllclZpc2libGVSZWN0KGZhbHNlKQogICAgICwgbV9pc0RyYXdhYmxlKGZh
bHNlKQogICAgICwgbV9tYXNrc1RvQm91bmRzKGZhbHNlKQogICAgICwgbV9vcGFxdWUoZmFsc2Up
CkBAIC01MDcsNiArNTA5LDggQEAgdm9pZCBMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1Rv
KENDTGF5ZXJJbXBsKiBsYXllcikKICAgICBpZiAoIW9wYWNpdHlJc0FuaW1hdGluZygpKQogICAg
ICAgICBsYXllci0+c2V0T3BhY2l0eShtX29wYWNpdHkpOwogICAgIGxheWVyLT5zZXRQb3NpdGlv
bihtX3Bvc2l0aW9uKTsKKyAgICBsYXllci0+c2V0SXNDb250YWluZXJMYXllcihtX2lzQ29udGFp
bmVyTGF5ZXIpOworICAgIGxheWVyLT5zZXRGaXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVj
dChtX2ZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0KTsKICAgICBsYXllci0+c2V0UHJl
c2VydmVzM0QocHJlc2VydmVzM0QoKSk7CiAgICAgbGF5ZXItPnNldFNjcm9sbFBvc2l0aW9uKG1f
c2Nyb2xsUG9zaXRpb24pOwogICAgIGxheWVyLT5zZXRNYXhTY3JvbGxQb3NpdGlvbihtX21heFNj
cm9sbFBvc2l0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAppbmRleCA0ZDkzMDA3MGFlZDViMzJlNWRk
ODhhY2Q0MmZiZTk0NjU5ODQzYTdjLi5jZGI2Y2NiOWJlNjAwNmEzNTg2ZjdkMGU4NDMwNTNkYjRj
OGVhNmQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCkBAIC0xMjksNiArMTI5LDExIEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKTsKICAgICBGbG9hdFBvaW50
IHBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbjsgfQogCisgICAgdm9pZCBzZXRJ
c0NvbnRhaW5lckxheWVyKGJvb2wgaXNDb250YWluZXJMYXllcikgeyBtX2lzQ29udGFpbmVyTGF5
ZXIgPSBpc0NvbnRhaW5lckxheWVyOyB9CisgICAgYm9vbCBpc0NvbnRhaW5lckxheWVyKCkgY29u
c3QgeyByZXR1cm4gbV9pc0NvbnRhaW5lckxheWVyOyB9CisKKyAgICB2b2lkIHNldEZpeGVkVG9D
b250YWluZXJMYXllclZpc2libGVSZWN0KGJvb2wgZml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJs
ZVJlY3QpIHsgbV9maXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdCA9IGZpeGVkVG9Db250
YWluZXJMYXllclZpc2libGVSZWN0OyBzZXROZWVkc0NvbW1pdCgpOyB9CisgICAgYm9vbCBmaXhl
ZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZml4ZWRUb0Nv
bnRhaW5lckxheWVyVmlzaWJsZVJlY3Q7IH0KICAgICB2b2lkIHNldFN1YmxheWVyVHJhbnNmb3Jt
KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CiAgICAgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIHN1YmxheWVyVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9zdWJsYXllclRyYW5z
Zm9ybTsgfQogCkBAIC0zMjQsNiArMzI5LDggQEAgcHJpdmF0ZToKICAgICBGaWx0ZXJPcGVyYXRp
b25zIG1fZmlsdGVyczsKICAgICBGaWx0ZXJPcGVyYXRpb25zIG1fYmFja2dyb3VuZEZpbHRlcnM7
CiAgICAgZmxvYXQgbV9hbmNob3JQb2ludFo7CisgICAgYm9vbCBtX2lzQ29udGFpbmVyTGF5ZXI7
CisgICAgYm9vbCBtX2ZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0OwogICAgIGJvb2wg
bV9pc0RyYXdhYmxlOwogICAgIGJvb2wgbV9tYXNrc1RvQm91bmRzOwogICAgIGJvb2wgbV9vcGFx
dWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKaW5kZXggZmVmY2VjNWViOTcxZDg2OTBmZGFhNTgy
Mjg5ZTllZDllY2RmODM4OC4uZDIzMzA5MDgxNzBjZDkxODdlNDE4OTk3YTdjZWRlOTU0ZjE0M2Y5
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcApAQCAtNjAsNiArNjAsOCBAQCBDQ0xheWVySW1w
bDo6Q0NMYXllckltcGwoaW50IGlkKQogICAgICwgbV91c2VzTGF5ZXJDbGlwcGluZyhmYWxzZSkK
ICAgICAsIG1faXNOb25Db21wb3NpdGVkQ29udGVudChmYWxzZSkKICAgICAsIG1fZHJhd3NDb250
ZW50KGZhbHNlKQorICAgICwgbV9pc0NvbnRhaW5lckxheWVyKGZhbHNlKQorICAgICwgbV9maXhl
ZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdChmYWxzZSkKICAgICAsIG1fcGFnZVNjYWxlRGVs
dGEoMSkKICAgICAsIG1fdGFyZ2V0UmVuZGVyU3VyZmFjZSgwKQogICAgICwgbV9kcmF3RGVwdGgo
MCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVySW1wbC5oCmluZGV4IGQzYmJhMTcyN2IwN2Y3YjdiMWM3NmVhNDMxZDIz
YmQ0ZjE1NWM0MmMuLjVjOTI5OWRkODhhODE2NzVjZTFhNGUzZDIxNzZmZjc3ZmY2Y2ZkMGYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllckltcGwuaApAQCAtMTI1LDYgKzEyNSwxMiBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBzZXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50Jik7CiAgICAgY29uc3QgRmxvYXRQb2ludCYg
cG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9CiAKKyAgICB2b2lkIHNldElz
Q29udGFpbmVyTGF5ZXIoYm9vbCBpc0NvbnRhaW5lckxheWVyKSB7IG1faXNDb250YWluZXJMYXll
ciA9IGlzQ29udGFpbmVyTGF5ZXI7IH0KKyAgICBib29sIGlzQ29udGFpbmVyTGF5ZXIoKSBjb25z
dCB7IHJldHVybiBtX2lzQ29udGFpbmVyTGF5ZXI7IH0KKworICAgIHZvaWQgc2V0Rml4ZWRUb0Nv
bnRhaW5lckxheWVyVmlzaWJsZVJlY3QoYm9vbCBmaXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxl
UmVjdCA9IHRydWUpIHsgbV9maXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdCA9IGZpeGVk
VG9Db250YWluZXJMYXllclZpc2libGVSZWN0O30KKyAgICBib29sIGZpeGVkVG9Db250YWluZXJM
YXllclZpc2libGVSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9maXhlZFRvQ29udGFpbmVyTGF5ZXJW
aXNpYmxlUmVjdDsgfQorCiAgICAgdm9pZCBzZXRQcmVzZXJ2ZXMzRChib29sKTsKICAgICBib29s
IHByZXNlcnZlczNEKCkgY29uc3QgeyByZXR1cm4gbV9wcmVzZXJ2ZXMzRDsgfQogCkBAIC0zMDks
NiArMzE1LDExIEBAIHByaXZhdGU6CiAKICAgICBib29sIG1fZHJhd3NDb250ZW50OwogCisgICAg
Ly8gU2V0IGZvciB0aGUgbGF5ZXIgdGhhdCBvdGhlciBsYXllcnMgYXJlIGZpeGVkIHRvLgorICAg
IGJvb2wgbV9pc0NvbnRhaW5lckxheWVyOworICAgIC8vIFNldCBmb3IgdGhlIGxheWVyIHRoYXQg
aGFzIHBvc2l0aW9uIGZpeGVkIHRvIHRoZSBjb250YWluZXIgbGF5ZXIncyB2aXNpYmxlIHJlY3Qu
CisgICAgYm9vbCBtX2ZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0OworCiAgICAgRmxv
YXRTaXplIG1fc2Nyb2xsRGVsdGE7CiAgICAgSW50U2l6ZSBtX3NlbnRTY3JvbGxEZWx0YTsKICAg
ICBJbnRTaXplIG1fbWF4U2Nyb2xsUG9zaXRpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0Q29tbW9uLmNwcAppbmRleCA2MDAyMGI1ZjU1NGVlNTJiYTI1ZjJkMmQ1MDNiZWFkNjk0
YjNhYTk2Li4xZjE2NTc3NjE1YWYxZGUzMDk0OTk1YTgxZDU1MWEyYWMyYmFhY2JmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3RDb21tb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAKQEAgLTE4MCw2ICsxODAsMTYg
QEAgc3RhdGljIGJvb2wgbGF5ZXJTaG91bGRCZVNraXBwZWQoTGF5ZXJUeXBlKiBsYXllcikKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZT4KK3N0YXRp
YyBMYXllclR5cGUqIGZpbmRGaXJzdENvbnRhaW5lckFuY2VzdG9yKExheWVyVHlwZSogbGF5ZXIp
Cit7CisgICAgaWYgKCFsYXllcikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKGxheWVyLT5p
c0NvbnRhaW5lckxheWVyKCkpCisgICAgICAgIHJldHVybiBsYXllcjsKKyAgICByZXR1cm4gZmlu
ZEZpcnN0Q29udGFpbmVyQW5jZXN0b3IobGF5ZXItPnBhcmVudCgpKTsKK30KKwogc3RhdGljIGlu
bGluZSBib29sIHN1YnRyZWVTaG91bGRCZVNraXBwZWQoQ0NMYXllckltcGwqIGxheWVyKQogewog
ICAgIC8vIFRoZSBvcGFjaXR5IG9mIGEgbGF5ZXIgYWx3YXlzIGFwcGxpZXMgdG8gaXRzIGNoaWxk
cmVuIChlaXRoZXIgaW1wbGljaXRseQpAQCAtMzc2LDYgKzM4NiwzNyBAQCBzdGF0aWMgYm9vbCBj
YWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHlJbnRlcm5hbChMYXllclR5cGUqIGxh
eWVyLCBMYXllcgogICAgIGxheWVyTG9jYWxUcmFuc2Zvcm0udHJhbnNsYXRlM2QoY2VudGVyT2Zm
c2V0WCwgY2VudGVyT2Zmc2V0WSwgLWxheWVyLT5hbmNob3JQb2ludFooKSk7CiAKICAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBjb21iaW5lZFRyYW5zZm9ybSA9IHBhcmVudE1hdHJpeDsKKworICAg
IC8vIFRoaXMgaXMgYSBzcGVjaWFsIGNhc2UgZm9yIGEgbGF5ZXIgdGhhdCBpcyBmaXhlZCB0byB0
aGUgY29udGFpbmVyIGxheWVyJ3MgdmlzaWJsZSByZWN0YW5nbGUuCisgICAgLy8gVGhlcmUgYXJl
IGEgY291cGxlIG9mIGFzc3VtcHRpb25zIGhlcmU6CisgICAgLy8gMS4gQSBjb250YWluZXIgbGF5
ZXIgaXMgdGhlIHNjcm9sbGluZyBsYXllciBhbmQgb25seSBoYXMgdHJhbnNsYXRpb24gdHJhbnNm
b3JtYXRpb24uCisgICAgLy8gMi4gQSBjb250YWluZXIgbGF5ZXIncyBwYXJlbnQgbGF5ZXIgaXMg
YSBjbGlwIGxheWVyLgorICAgIC8vCisgICAgLy8gR2l2ZW4gdGhhdCB3ZSBjYW4gZGVjb21wb3Nl
IHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggYXMgdGhlIGZvbGxvd2luZzoKKyAgICAvLworICAg
IC8vICAgICAgICBNW3BhcmVudF0gPSBNW2NsaXBdICogVHJbY29udGFpbmVyXSAqIE1bZGVzY2Vu
ZGFudF0KKyAgICAvLworICAgIC8vIHdoZXJlIE1bZGVzY2VuZGFudF0gaXMgdGhlIHRvdGFsIHRy
YW5zZm9ybWF0aW9uIG1hdHJpeCBmcm9tIGNvbnRhaW5lciBsYXllcidzIGNvb3JkaW5hdGUgc3Bh
Y2UgdG8gdGhlIHNwYWNlIG9mIHBhcmVudE1hdHJpeC4KKyAgICAvLyBBbmQgdGh1czoKKyAgICAv
LworICAgIC8vICAgICAgICBUcltjb250YWluZXJdICogTVtkZXNjZW5kYW50XSA9IE1bY2xpcF0g
XiAtMSAqIE1bcGFyZW50XQorICAgIC8vCisgICAgLy8gQW5kIHRoZSB0cmFuc2Zvcm1hdGlvbiBt
YXRyaXggZm9yIHRoaXMgbGF5ZXIgd2l0aG91dCBjb250YWluZXIncyBzY3JvbGwgYmVjb21lczoK
KyAgICAvLworICAgIC8vICAgICAgICBNW2NsaXBdICogLVRyW2NvbnRhaW5lcl0gKiBUcltjb250
YWluZXJdICogTVtkZXNjZW5kYW50XSA9IE1bY2xpcF0gKiAtVHJbY29udGFpbmVyXSAqIE1bY2xp
cF0gXiAtMSAqIE1bcGFyZW50XQorICAgIC8vCisgICAgaWYgKGxheWVyLT5maXhlZFRvQ29udGFp
bmVyTGF5ZXJWaXNpYmxlUmVjdCgpKSB7CisgICAgICAgIExheWVyVHlwZSogY29udGFpbmVyTGF5
ZXIgPSBmaW5kRmlyc3RDb250YWluZXJBbmNlc3RvcihsYXllci0+cGFyZW50KCkpOworICAgICAg
ICBMYXllclR5cGUqIGNsaXBMYXllcjsKKyAgICAgICAgaWYgKGNvbnRhaW5lckxheWVyICYmIChj
bGlwTGF5ZXIgPSBjb250YWluZXJMYXllci0+cGFyZW50KCkpKSB7CisgICAgICAgICAgICBGbG9h
dFNpemUgc2Nyb2xsRGVsdGEgPSBjb250YWluZXJMYXllci0+c2Nyb2xsRGVsdGEoKTsKKyAgICAg
ICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNsaXBNYXRyaXggPSBjbGlwTGF5ZXItPmRyYXdU
cmFuc2Zvcm0oKTsKKyAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGRlc2NlbmRhbnRN
YXRyaXggPSBjbGlwTWF0cml4LmludmVyc2UoKSAqIHBhcmVudE1hdHJpeDsKKyAgICAgICAgICAg
IGNsaXBNYXRyaXgudHJhbnNsYXRlKHNjcm9sbERlbHRhLndpZHRoKCksIHNjcm9sbERlbHRhLmhl
aWdodCgpKTsKKyAgICAgICAgICAgIGNvbWJpbmVkVHJhbnNmb3JtID0gY2xpcE1hdHJpeCAqIGRl
c2NlbmRhbnRNYXRyaXg7CisgICAgICAgIH0KKyAgICB9CisKICAgICBjb21iaW5lZFRyYW5zZm9y
bSA9IGNvbWJpbmVkVHJhbnNmb3JtLm11bHRpcGx5KGxheWVyTG9jYWxUcmFuc2Zvcm0pOwogCiAg
ICAgYm9vbCBhbmltYXRpbmdUcmFuc2Zvcm1Ub1RhcmdldCA9IGxheWVyLT50cmFuc2Zvcm1Jc0Fu
aW1hdGluZygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAppbmRleCAzN2Vj
YTI4MGUyYzAzMDA1YTA1OTZkOGUxYmNjOTY4Y2M5YmU0Y2YyLi5hNDA0M2QyMTBmZTk3NGEwZmYw
MTY3NjQ3ODBhMGVkODIwYjViZDhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
LmNwcApAQCAtMjUzLDEwICsyNTMsMTYgQEAgdm9pZCBSZW5kZXJCb3g6OndpbGxCZURlc3Ryb3ll
ZCgpCiAgICAgaWYgKHN0eWxlVG9Vc2UgJiYgKHN0eWxlVG9Vc2UtPmxvZ2ljYWxIZWlnaHQoKS5p
c1BlcmNlbnQoKSB8fCBzdHlsZVRvVXNlLT5sb2dpY2FsTWluSGVpZ2h0KCkuaXNQZXJjZW50KCkg
fHwgc3R5bGVUb1VzZS0+bG9naWNhbE1heEhlaWdodCgpLmlzUGVyY2VudCgpKSkKICAgICAgICAg
UmVuZGVyQmxvY2s6OnJlbW92ZVBlcmNlbnRIZWlnaHREZXNjZW5kYW50KHRoaXMpOwogCi0gICAg
Ly8gSWYgdGhpcyByZW5kZXJlciBpcyBvd25pbmcgcmVuZGVyZXIgZm9yIHRoZSBmcmFtZXZpZXcn
cyBjdXN0b20gc2Nyb2xsYmFycywKLSAgICAvLyB3ZSBuZWVkIHRvIGNsZWFyIGl0IGZyb20gdGhl
IHNjcm9sbGJhci4gU2VlIHdlYmtpdCBidWcgNjQ3MzcuCi0gICAgaWYgKHN0eWxlVG9Vc2UgJiYg
c3R5bGVUb1VzZS0+aGFzUHNldWRvU3R5bGUoU0NST0xMQkFSKSAmJiBmcmFtZSgpICYmIGZyYW1l
KCktPnZpZXcoKSkKLSAgICAgICAgZnJhbWUoKS0+dmlldygpLT5jbGVhck93bmluZ1JlbmRlcmVy
Rm9yQ3VzdG9tU2Nyb2xsYmFycyh0aGlzKTsKKyAgICBpZiAoc3R5bGVUb1VzZSAmJiBmcmFtZSgp
ICYmIGZyYW1lKCktPnZpZXcoKSkgeworICAgICAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IGZy
YW1lKCktPnZpZXcoKTsKKyAgICAgICAgLy8gSWYgdGhpcyByZW5kZXJlciBpcyBvd25pbmcgcmVu
ZGVyZXIgZm9yIHRoZSBmcmFtZXZpZXcncyBjdXN0b20gc2Nyb2xsYmFycywKKyAgICAgICAgLy8g
d2UgbmVlZCB0byBjbGVhciBpdCBmcm9tIHRoZSBzY3JvbGxiYXIuIFNlZSB3ZWJraXQgYnVnIDY0
NzM3LgorICAgICAgICBpZiAoc3R5bGVUb1VzZS0+aGFzUHNldWRvU3R5bGUoU0NST0xMQkFSKSkK
KyAgICAgICAgICAgIGZyYW1lVmlldy0+Y2xlYXJPd25pbmdSZW5kZXJlckZvckN1c3RvbVNjcm9s
bGJhcnModGhpcyk7CisKKyAgICAgICAgaWYgKHN0eWxlVG9Vc2UtPnBvc2l0aW9uKCkgPT0gRml4
ZWRQb3NpdGlvbikKKyAgICAgICAgICAgIGZyYW1lVmlldy0+cmVtb3ZlRml4ZWRPYmplY3QodGhp
cyk7CisgICAgfQogCiAgICAgLy8gSWYgdGhlIGZvbGxvd2luZyBhc3NlcnRpb24gZmFpbHMsIGxv
Z2ljYWxIZWlnaHQoKS9sb2dpY2FsTWluSGVpZ2h0KCkvCiAgICAgLy8gbG9naWNhbE1heEhlaWdo
dCgpIHZhbHVlcyBhcmUgY2hhbmdlZCBmcm9tIGEgcGVyY2VudCB2YWx1ZSB0byBhIG5vbi1wZXJj
ZW50CkBAIC0zMzUsOSArMzQxLDkgQEAgdm9pZCBSZW5kZXJCb3g6OnN0eWxlV2lsbENoYW5nZShT
dHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG5ld1N0eWwKICAgICAgICAg
Ym9vbCBvbGRTdHlsZUlzRml4ZWQgPSBvbGRTdHlsZSAmJiBvbGRTdHlsZS0+cG9zaXRpb24oKSA9
PSBGaXhlZFBvc2l0aW9uOwogICAgICAgICBpZiAobmV3U3R5bGVJc0ZpeGVkICE9IG9sZFN0eWxl
SXNGaXhlZCkgewogICAgICAgICAgICAgaWYgKG5ld1N0eWxlSXNGaXhlZCkKLSAgICAgICAgICAg
ICAgICBmcmFtZVZpZXctPmFkZEZpeGVkT2JqZWN0KCk7CisgICAgICAgICAgICAgICAgZnJhbWVW
aWV3LT5hZGRGaXhlZE9iamVjdCh0aGlzKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICBmcmFtZVZpZXctPnJlbW92ZUZpeGVkT2JqZWN0KCk7CisgICAgICAgICAgICAgICAgZnJh
bWVWaWV3LT5yZW1vdmVGaXhlZE9iamVjdCh0aGlzKTsKICAgICAgICAgfQogICAgIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAppbmRleCBh
OGQ3ODM0MTg5MGZlZTUzODZmM2M0OTMyMTZiZTBkYjg3ZjI1YzBhLi5jZDU4MjE0Mjc1NWQwZThk
NzhjNDMzNDU4ZWI5NjM1MzM2Yzc3MmE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcApAQCAtNTIsNiArNTIsNyBAQAogI2luY2x1ZGUgIlJl
bmRlckVtYmVkZGVkT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlkZW8uaCIKICNpbmNsdWRl
ICJSZW5kZXJWaWV3LmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCIKICNpbmNs
dWRlICJUaWxlZEJhY2tpbmcuaCIKIAogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKQEAgLTQyOCw2
ICs0MjksMjAgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdyYXBoaWNzTGF5ZXJH
ZW9tZXRyeSgpCiAgICAgbV9ncmFwaGljc0xheWVyLT5zZXRQcmVzZXJ2ZXMzRChzdHlsZS0+dHJh
bnNmb3JtU3R5bGUzRCgpID09IFRyYW5zZm9ybVN0eWxlM0RQcmVzZXJ2ZTNEICYmICFyZW5kZXJl
cigpLT5oYXNSZWZsZWN0aW9uKCkpOwogICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0QmFja2ZhY2VW
aXNpYmlsaXR5KHN0eWxlLT5iYWNrZmFjZVZpc2liaWxpdHkoKSA9PSBCYWNrZmFjZVZpc2liaWxp
dHlWaXNpYmxlKTsKIAorICAgIC8vIFJlZ2lzdGVyIGZpeGVkIHBvc2l0aW9uIGxheWVycyBhbmQg
dGhlaXIgY29udGFpbmVycyB3aXRoIHRoZSBzY3JvbGxpbmcgY29vcmRpbmF0b3IuCisgICAgaWYg
KFBhZ2UqIHBhZ2UgPSByZW5kZXJlcigpLT5mcmFtZSgpLT5wYWdlKCkpIHsKKyAgICAgICAgaWYg
KFNjcm9sbGluZ0Nvb3JkaW5hdG9yKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHBhZ2UtPnNjcm9s
bGluZ0Nvb3JkaW5hdG9yKCkpIHsKKyAgICAgICAgICAgIGlmIChzdHlsZS0+cG9zaXRpb24oKSA9
PSBGaXhlZFBvc2l0aW9uIHx8IGNvbXBvc2l0b3IoKS0+Zml4ZWRQb3NpdGlvbmVkQnlBbmNlc3Rv
cihtX293bmluZ0xheWVyKSkKKyAgICAgICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+
c2V0TGF5ZXJJc0ZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0KGNoaWxkRm9yU3VwZXJs
YXllcnMoKSwgdHJ1ZSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAo
bV9hbmNlc3RvckNsaXBwaW5nTGF5ZXIpCisgICAgICAgICAgICAgICAgICAgIHNjcm9sbGluZ0Nv
b3JkaW5hdG9yLT5zZXRMYXllcklzRml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3QobV9h
bmNlc3RvckNsaXBwaW5nTGF5ZXIuZ2V0KCksIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBzY3Jv
bGxpbmdDb29yZGluYXRvci0+c2V0TGF5ZXJJc0ZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVS
ZWN0KG1fZ3JhcGhpY3NMYXllci5nZXQoKSwgZmFsc2UpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgYm9vbCBpc0NvbnRhaW5lciA9IG1fb3duaW5nTGF5ZXItPmhhc1RyYW5zZm9ybSgpOwor
ICAgICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnNldExheWVySXNDb250YWluZXJGb3JG
aXhlZFBvc2l0aW9uKGNoaWxkRm9yU3VwZXJsYXllcnMoKSwgaXNDb250YWluZXIpOworICAgICAg
ICB9CisgICAgfQogICAgIFJlbmRlckxheWVyKiBjb21wQW5jZXN0b3IgPSBtX293bmluZ0xheWVy
LT5hbmNlc3RvckNvbXBvc2l0aW5nTGF5ZXIoKTsKICAgICAKICAgICAvLyBXZSBjb21wdXRlIGV2
ZXJ5dGhpbmcgcmVsYXRpdmUgdG8gdGhlIGVuY2xvc2luZyBjb21wb3NpdGluZyBsYXllci4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3Iu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAK
aW5kZXggMzdiNWZmN2JlMDZmYmQxZDY0YmQ0Mzg3ZThhNmEwZWM1YzMwYThlOC4uMDVjNTM5NjY2
MDM3ZGYwODAyNjIzNWE4ODEwYWIzM2I3OTJlZDU5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKQEAgLTQ3Miw2ICs0NzIsMTEg
QEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZUJhY2tpbmcoUmVuZGVyTGF5ZXIq
IGxheWVyLCBDb21wb3NpdGluZ0NoYW5nZVIKICAgICAgICAgICAgIGlubmVyQ29tcG9zaXRvci0+
dXBkYXRlUm9vdExheWVyQXR0YWNobWVudCgpOwogICAgIH0KIAorICAgIC8vIElmIGEgZml4ZWQg
cG9zaXRpb24gbGF5ZXIgZ2FpbmVkL2xvc3QgYSBiYWNraW5nLCB0aGUgc2Nyb2xsaW5nIGNvb3Jk
aW5hdG9yIG5lZWRzIHRvIHJlY2FsY3VsYXRlIHdoZXRoZXIgaXQgY2FuIGRvIGZhc3Qgc2Nyb2xs
aW5nLgorICAgIGlmIChsYXllckNoYW5nZWQgJiYgbGF5ZXItPnJlbmRlcmVyKCktPnN0eWxlKCkt
PnBvc2l0aW9uKCkgPT0gRml4ZWRQb3NpdGlvbikgeworICAgICAgICBpZiAoU2Nyb2xsaW5nQ29v
cmRpbmF0b3IqIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gdGhpcy0+c2Nyb2xsaW5nQ29vcmRpbmF0
b3IoKSkKKyAgICAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5mcmFtZVZpZXdGaXhlZE9i
amVjdHNEaWRDaGFuZ2UobV9yZW5kZXJWaWV3LT5mcmFtZVZpZXcoKSk7CisgICAgfQogICAgIHJl
dHVybiBsYXllckNoYW5nZWQ7CiB9CiAKQEAgLTE0MTQsNiArMTQxOSwzMSBAQCBib29sIFJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6Y2xpcHNDb21wb3NpdGluZ0Rlc2NlbmRhbnRzKGNvbnN0IFJlbmRl
ckxheWVyKiBsYXllcgogICAgICAgICAgICAobGF5ZXItPnJlbmRlcmVyKCktPmhhc092ZXJmbG93
Q2xpcCgpIHx8IGxheWVyLT5yZW5kZXJlcigpLT5oYXNDbGlwKCkpOwogfQogCisvLyBSZXR1cm4g
dHJ1ZSBpZiB0aGVyZSBpcyBhbiBhbmNlc3RvciBsYXllciB0aGF0IGlzIGZpeGVkIHBvc2l0aW9u
ZWQgdG8gdGhlIHZpZXcuCisvLyBOb3RlIHRoYXQgaWYgdGhlIGFuY2VzdG9yIGhhcyBhIHN0YWNr
aW5nIGNvbnRleHQgYW5kIGlzIGZpeGVkIHBvc2l0aW9uIHRoZW4gdGhpcyBtZXRob2QKKy8vIHdp
bGwgcmV0dXJuIGZhbHNlLgorYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmZpeGVkUG9zaXRp
b25lZEJ5QW5jZXN0b3IoUmVuZGVyTGF5ZXIqIGxheWVyKSBjb25zdAoreworICAgIGlmICghbGF5
ZXItPmlzQ29tcG9zaXRlZCgpIHx8ICFsYXllci0+cGFyZW50KCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIFJlbmRlckxheWVyKiBjb21wb3NpdGluZ0FuY2VzdG9yID0gbGF5ZXItPmFu
Y2VzdG9yQ29tcG9zaXRpbmdMYXllcigpOworICAgIGlmICghY29tcG9zaXRpbmdBbmNlc3RvcikK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUmVuZGVyTGF5ZXIqIGN1cnIgPSBsYXllcjsK
KyAgICB3aGlsZSAoY3VycikgeworICAgICAgICBSZW5kZXJMYXllciogbmV4dCA9IGN1cnItPnBh
cmVudCgpOworICAgICAgICBpZiAobmV4dCA9PSBjb21wb3NpdGluZ0FuY2VzdG9yKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmIChuZXh0ICYmIG5leHQtPnJlbmRlcmVy
KCktPnN0eWxlKCktPnBvc2l0aW9uKCkgPT0gRml4ZWRQb3NpdGlvbikKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICBjdXJyID0gbmV4dDsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNl
OworfQorCiBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0Zv
clNjcm9sbGFibGVGcmFtZSgpIGNvbnN0CiB7CiAgICAgLy8gTmVlZCB0aGlzIGRvbmUgZmlyc3Qg
dG8gZGV0ZXJtaW5lIG92ZXJmbG93LgpAQCAtMTkzMSw2ICsxOTYxLDggQEAgdm9pZCBSZW5kZXJM
YXllckNvbXBvc2l0b3I6OmVuc3VyZVJvb3RMYXllcigpCiAjaWZuZGVmIE5ERUJVRwogICAgICAg
ICAgICAgbV9zY3JvbGxMYXllci0+c2V0TmFtZSgiZnJhbWUgc2Nyb2xsaW5nIik7CiAjZW5kaWYK
KyAgICAgICAgICAgIGlmIChTY3JvbGxpbmdDb29yZGluYXRvciogc2Nyb2xsaW5nQ29vcmRpbmF0
b3IgPSB0aGlzLT5zY3JvbGxpbmdDb29yZGluYXRvcigpKQorICAgICAgICAgICAgICAgIHNjcm9s
bGluZ0Nvb3JkaW5hdG9yLT5zZXRMYXllcklzQ29udGFpbmVyRm9yRml4ZWRQb3NpdGlvbihtX3Nj
cm9sbExheWVyLmdldCgpLCB0cnVlKTsKIAogICAgICAgICAgICAgLy8gSG9vayB0aGVtIHVwCiAg
ICAgICAgICAgICBtX292ZXJmbG93Q29udHJvbHNIb3N0TGF5ZXItPmFkZENoaWxkKG1fY2xpcExh
eWVyLmdldCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllckNvbXBvc2l0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNv
bXBvc2l0b3IuaAppbmRleCA3MzM0Yzk2YzQ1YjNiYzgzNTU3MTFkYTNiNTczODk4MDM4ZDU5MjJk
Li43MGE5NjkxMWIyN2EwNmFjYThjNTI4NjkzNTIwMjc1MDkzMzdkZjhiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oCkBAIC0xMTgsNiAr
MTE4LDcgQEAgcHVibGljOgogICAgIC8vIFdoZXRoZXIgbGF5ZXIncyBiYWNraW5nIG5lZWRzIGEg
Z3JhcGhpY3MgbGF5ZXIgdG8gY2xpcCB6LW9yZGVyIGNoaWxkcmVuIG9mIHRoZSBnaXZlbiBsYXll
ci4KICAgICBib29sIGNsaXBzQ29tcG9zaXRpbmdEZXNjZW5kYW50cyhjb25zdCBSZW5kZXJMYXll
ciopIGNvbnN0OwogCisgICAgYm9vbCBmaXhlZFBvc2l0aW9uZWRCeUFuY2VzdG9yKFJlbmRlckxh
eWVyKikgY29uc3Q7CiAgICAgLy8gV2hldGhlciB0aGUgZ2l2ZW4gbGF5ZXIgbmVlZHMgYW4gZXh0
cmEgJ2NvbnRlbnRzJyBsYXllci4KICAgICBib29sIG5lZWRzQ29udGVudHNDb21wb3NpdGluZ0xh
eWVyKGNvbnN0IFJlbmRlckxheWVyKikgY29uc3Q7CiAgICAgLy8gUmV0dXJuIHRoZSBib3VuZGlu
ZyBib3ggcmVxdWlyZWQgZm9yIGNvbXBvc2l0aW5nIGxheWVyIGFuZCBpdHMgY2hpbGRlcm4sIHJl
bGF0aXZlIHRvIGFuY2VzdG9yTGF5ZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcAppbmRleCBlNDM2NDQ1
YTM1ODk4ZjVlZDA5NWVmN2U2NzkzMmQxMGJkNDEwM2Y4Li40ZmFlNDUwNTFmMGFjMTcyMGJiY2Ri
ODhiOTRlZTBmYTQ3NDNmNDYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAKQEAgLTMyLDYgKzMyLDcg
QEAKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogI2luY2x1ZGUgIlRyYW5zbGF0
ZVRyYW5zZm9ybU9wZXJhdGlvbi5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVyLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKICNpbmNsdWRlICJjYy9DQ01h
dGhVdGlsLmgiCiAKICNpbmNsdWRlIDxnbW9jay9nbW9jay5oPgpAQCAtNTgxLDYgKzU4Miw1MSBA
QCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVJlbmRlclN1cmZhY2VMaXN0
Rm9yVHJhbnNwYXJlbnRDaGlsZCkKICAgICBFWFBFQ1RfRVEocGFyZW50LT5kcmF3YWJsZUNvbnRl
bnRSZWN0KCksIEludFJlY3QoKSk7CiB9CiAKK1RFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVz
dCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvckZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0KQor
eworICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMSk7
CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBjaGlsZCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMik7
CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBncmFuZENoaWxkID0gQ0NMYXllckltcGw6OmNyZWF0
ZSgzKTsKKworICAgIHJvb3QtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAgICByb290LT5zZXRB
bmNob3JQb2ludChGbG9hdFBvaW50KDAsIDApKTsKKyAgICByb290LT5zZXRCb3VuZHMoSW50U2l6
ZSgxMDAsIDEwMCkpOworCisgICAgY2hpbGQtPnNldEJvdW5kcyhJbnRTaXplKDEwMCwgMTAwKSk7
CisgICAgY2hpbGQtPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoMCwgMCkpOworICAgIGNoaWxk
LT5zZXRTY3JvbGxEZWx0YShJbnRTaXplKDEwLCAxMCkpOworICAgIGNoaWxkLT5zZXRJc0NvbnRh
aW5lckxheWVyKHRydWUpOworCisgICAgZ3JhbmRDaGlsZC0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQ
b2ludCgwLCAwKSk7CisgICAgZ3JhbmRDaGlsZC0+c2V0Qm91bmRzKEludFNpemUoMTAwLCAxMDAp
KTsKKyAgICBncmFuZENoaWxkLT5zZXRGaXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdCh0
cnVlKTsKKworICAgIGNoaWxkLT5hZGRDaGlsZChncmFuZENoaWxkLnJlbGVhc2UoKSk7CisgICAg
cm9vdC0+YWRkQ2hpbGQoY2hpbGQucmVsZWFzZSgpKTsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IGlkZW50aXR5TWF0cml4OworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNoaWxkVHJhbnNm
b3JtYXRpb25NYXRyaXg7CisgICAgY2hpbGRUcmFuc2Zvcm1hdGlvbk1hdHJpeC50cmFuc2xhdGUo
NDAsIDQwKTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBncmFuZENoaWxkVHJhbnNmb3JtYXRp
b25NYXRyaXg7CisgICAgZ3JhbmRDaGlsZFRyYW5zZm9ybWF0aW9uTWF0cml4LnRyYW5zbGF0ZSg1
MCwgNTApOworCisgICAgVmVjdG9yPENDTGF5ZXJJbXBsKj4gZHVtbXlSZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0OworICAgIFZlY3RvcjxDQ0xheWVySW1wbCo+IGR1bW15TGF5ZXJMaXN0OworICAgIGlu
dCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6
Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3QuZ2V0KCksIHJvb3QuZ2V0
KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgZHVtbXlSZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgMCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisKKyAgICB7
CisgICAgICAgIENDTGF5ZXJJbXBsKiBjaGlsZCA9IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Zmlu
ZExheWVySW5TdWJ0cmVlKHJvb3QuZ2V0KCksIDIpOworICAgICAgICBDQ0xheWVySW1wbCogZ3Jh
bmRDaGlsZCA9IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6ZmluZExheWVySW5TdWJ0cmVlKHJvb3Qu
Z2V0KCksIDMpOworCisgICAgICAgIC8vIFRoZSBjaGlsZCBsYXllciBzaG91bGQgZ2V0IGEgdHJh
bnNsYXRpb24uCisgICAgICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoY2hpbGRU
cmFuc2Zvcm1hdGlvbk1hdHJpeCwgY2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisKKyAgICAgICAg
Ly8gVGhlIGNoaWxkIGxheWVyIHNob3VsZCBzdGF5IGZpeGVkIHRvIHRoZSByb290LgorICAgICAg
ICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGdyYW5kQ2hpbGRUcmFuc2Zvcm1hdGlv
bk1hdHJpeCwgZ3JhbmRDaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICB9Cit9CisKIFRFU1Qo
Q0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5Q2xpcFJlY3RDdWxsc1JlbmRlclN1cmZh
Y2VzKQogewogICAgIC8vIFRoZSBlbnRpcmUgc3VidHJlZSBvZiBsYXllcnMgdGhhdCBhcmUgb3V0
c2lkZSB0aGUgY2xpcFJlY3Qgc2hvdWxkIGJlIGN1bGxlZCBhd2F5LAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>139271</attachid>
            <date>2012-04-27 14:03:41 -0700</date>
            <delta_ts>2012-05-17 11:55:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70103-20120427220339.patch</filename>
            <type>text/plain</type>
            <size>17862</size>
            <attacher name="Sami Kyostila">skyostil</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE1NDQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzZhZDE2NjMxNjcxMWE5
OWFhODkyNjgwNzU0ZWI2N2FkZTYzNjQzNC4uMTNhM2QyNmZkNjYwMjgxNWQ4OWIzNWM5N2Y3M2U1
OTUxMGMwZDU1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQ2IEBACiAyMDEyLTA0LTI3ICBTYW1p
IEt5b3N0aWxhICA8c2t5b3N0aWxAY2hyb21pdW0ub3JnPgogCisgICAgICAgIFtjaHJvbWl1bV0g
SW1wbGVtZW50IHBvc2l0aW9uOmZpeGVkIGluIGNvbXBvc2l0b3IgdGhyZWFkCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDEwMworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW50cm9kdWNl
cyB0d28gbmV3IGxheWVycyBmbGFnczogaXNDb250YWluZXJMYXllcigpIGFuZAorICAgICAgICBm
aXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdCgpLiBUaGlzIGFsbG93cyBsYXllcnMgdG8g
c3RheSBmaXhlZAorICAgICAgICByZWxhdGl2ZSB0byB0aGVpciBhbmNlc3RvciBjb250YWluZXIg
bGF5ZXJzIHdoaWxlIHRoZSBjb21wb3NpdG9yIHRocmVhZAorICAgICAgICBzY3JvbGxzLgorCisg
ICAgICAgIE9yaWdpbmFsIHBhdGNoIGJ5IEFscGhhIExhbS4KKworICAgICAgICBUZXN0czogdmVy
aWZ5VHJhbnNmb3Jtc0ZvckZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0LCB2ZXJpZnlU
cmFuc2Zvcm1zRm9yRml4ZWRQb3NpdGlvbldpdGhJbnRlcm1lZGlhdGVSZW5kZXJTdXJmYWNlCisK
KyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29yZGluYXRvckNo
cm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRM
YXllcklzQ29udGFpbmVyRm9yRml4ZWRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxpbmdDb29yZGluYXRvcjo6c2V0TGF5ZXJJc0ZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVS
ZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVt
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OkxheWVyQ2hyb21pdW0pOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0SXNDb250YWluZXJMYXllcik6CisgICAgICAg
IChXZWJDb3JlOjpMYXllckNocm9taXVtOjppc0NvbnRhaW5lckxheWVyKToKKyAgICAgICAgKExh
eWVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0Rml4ZWRU
b0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJv
bWl1bTo6Zml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3QpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJJbXBsOjpDQ0xheWVySW1wbCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJ
bXBsOjpzZXRJc0NvbnRhaW5lckxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBs
Ojppc0NvbnRhaW5lckxheWVyKToKKyAgICAgICAgKENDTGF5ZXJJbXBsKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJJbXBsOjpzZXRGaXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6Zml4ZWRUb0NvbnRhaW5lckxheWVyVmlz
aWJsZVJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdENvbW1vbi5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OmZpbmRGaXJzdENvbnRhaW5lck9yUmVuZGVyU3VyZmFjZUFuY2VzdG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eUludGVybmFsKToK
KworMjAxMi0wNC0yNyAgU2FtaSBLeW9zdGlsYSAgPHNreW9zdGlsQGNocm9taXVtLm9yZz4KKwog
ICAgICAgICBSZWdpc3RlciBmaXhlZCBwb3NpdGlvbiBsYXllcnMgd2l0aCBTY3JvbGxpbmdDb29y
ZGluYXRvcgogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
Nzg4NjQKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAxNTA1MmRiYmQzZWEzZGFiMTA3
YzMyOTU0NjI3N2NmM2FlYmEwYWQ2Li42ZWU3M2FmNzYwOTAwZWEyODBkZmMyZDdiZTNiZGMxNjM4
ZjExMWQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDEy
LTA0LTI3ICBTYW1pIEt5b3N0aWxhICA8c2t5b3N0aWxAY2hyb21pdW0ub3JnPgorCisgICAgICAg
IFtjaHJvbWl1bV0gSW1wbGVtZW50IHBvc2l0aW9uOmZpeGVkIGluIGNvbXBvc2l0b3IgdGhyZWFk
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDEwMwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogdGVzdHMv
Q0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHA6CisgICAgICAgIChXZWJLaXRUZXN0czo6VEVT
VCk6CisgICAgICAgIChXZWJLaXRUZXN0cyk6CisKIDIwMTItMDQtMjcgIEdhdmluIFBldGVycyAg
PGdhdmlucEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQWRkIG5ldyBFTkFCTEVfTElOS19QUkVS
RU5ERVIgZGVmaW5lIHRvIGNvbnRyb2wgdGhlIFByZXJlbmRlcmluZyBBUEkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVtL1Njcm9sbGluZ0Nvb3JkaW5h
dG9yQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY2hyb21pdW0v
U2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bS5jcHAKaW5kZXggNjRiYjA1YWRkZTNjYTdkYzQ5
NzBmZjNlYzdkZDc4NDM3NWY4ZDEwOS4uOTY2MTVkZWQzMzQyMDBmZTFhMzI5NmY0MTdlYzU4ODkx
MmI4MjAxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY2hyb21p
dW0vU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvY2hyb21pdW0vU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bS5jcHAK
QEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmll
dy5oIgogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJQYWdlLmgiCiAjaW5j
bHVkZSAiUmVnaW9uLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCiAjaW5j
bHVkZSAiUmVuZGVyVmlldy5oIgpAQCAtMTYxLDE0ICsxNjIsMTYgQEAgdm9pZCBTY3JvbGxpbmdD
b29yZGluYXRvcjo6c2V0U2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVh
ZChib29sIHMKICAgICAgICAgbGF5ZXItPnNldFNob3VsZFNjcm9sbE9uTWFpblRocmVhZChzaG91
bGQpOwogfQogCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRMYXllcklzQ29udGFpbmVy
Rm9yRml4ZWRQb3NpdGlvbihHcmFwaGljc0xheWVyKiwgYm9vbCkKK3ZvaWQgU2Nyb2xsaW5nQ29v
cmRpbmF0b3I6OnNldExheWVySXNDb250YWluZXJGb3JGaXhlZFBvc2l0aW9uKEdyYXBoaWNzTGF5
ZXIqIGxheWVyLCBib29sIGVuYWJsZSkKIHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IQorICAg
IGlmIChMYXllckNocm9taXVtKiBwbGF0Zm9ybUxheWVyID0gbGF5ZXItPnBsYXRmb3JtTGF5ZXIo
KSkKKyAgICAgICAgcGxhdGZvcm1MYXllci0+c2V0SXNDb250YWluZXJMYXllcihlbmFibGUpOwog
fQogCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRMYXllcklzRml4ZWRUb0NvbnRhaW5l
ckxheWVyVmlzaWJsZVJlY3QoR3JhcGhpY3NMYXllciosIGJvb2wpCit2b2lkIFNjcm9sbGluZ0Nv
b3JkaW5hdG9yOjpzZXRMYXllcklzRml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3QoR3Jh
cGhpY3NMYXllciogbGF5ZXIsIGJvb2wgZW5hYmxlKQogewotICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQhCisgICAgaWYgKExheWVyQ2hyb21pdW0qIHBsYXRmb3JtTGF5ZXIgPSBsYXllci0+cGxhdGZv
cm1MYXllcigpKQorICAgICAgICBwbGF0Zm9ybUxheWVyLT5zZXRGaXhlZFRvQ29udGFpbmVyTGF5
ZXJWaXNpYmxlUmVjdChlbmFibGUpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCmluZGV4
IDE4MDQwNGY4MjFmYzViMjYzY2NhYzJhODNlYzRhOTAwNjU5N2RmOGEuLmUxNDY0YTczNGNjMmYz
NTQ5MzM3ZWRjZmFlMDg4Mjc3ZGFhZTdmYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCkBAIC03
MCw2ICs3MCw4IEBAIExheWVyQ2hyb21pdW06OkxheWVyQ2hyb21pdW0oKQogICAgICwgbV9kZWJ1
Z0JvcmRlcldpZHRoKDApCiAgICAgLCBtX29wYWNpdHkoMS4wKQogICAgICwgbV9hbmNob3JQb2lu
dFooMCkKKyAgICAsIG1faXNDb250YWluZXJMYXllcihmYWxzZSkKKyAgICAsIG1fZml4ZWRUb0Nv
bnRhaW5lckxheWVyVmlzaWJsZVJlY3QoZmFsc2UpCiAgICAgLCBtX2lzRHJhd2FibGUoZmFsc2Up
CiAgICAgLCBtX21hc2tzVG9Cb3VuZHMoZmFsc2UpCiAgICAgLCBtX29wYXF1ZShmYWxzZSkKQEAg
LTUwNyw2ICs1MDksOCBAQCB2b2lkIExheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8oQ0NM
YXllckltcGwqIGxheWVyKQogICAgIGlmICghb3BhY2l0eUlzQW5pbWF0aW5nKCkpCiAgICAgICAg
IGxheWVyLT5zZXRPcGFjaXR5KG1fb3BhY2l0eSk7CiAgICAgbGF5ZXItPnNldFBvc2l0aW9uKG1f
cG9zaXRpb24pOworICAgIGxheWVyLT5zZXRJc0NvbnRhaW5lckxheWVyKG1faXNDb250YWluZXJM
YXllcik7CisgICAgbGF5ZXItPnNldEZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0KG1f
Zml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3QpOwogICAgIGxheWVyLT5zZXRQcmVzZXJ2
ZXMzRChwcmVzZXJ2ZXMzRCgpKTsKICAgICBsYXllci0+c2V0U2Nyb2xsUG9zaXRpb24obV9zY3Jv
bGxQb3NpdGlvbik7CiAgICAgbGF5ZXItPnNldE1heFNjcm9sbFBvc2l0aW9uKG1fbWF4U2Nyb2xs
UG9zaXRpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCmluZGV4IGI1OGYwMDg1OGQ1MGQ2ZDViNTEzNzc5
ZmFmMTE1OTgzMWI2Y2JiN2EuLmQwMzM1ZDI2ODZlYjlkMWVhMWFkOTRjOTcyNjViMzdlYzdiNmY3
NzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllckNocm9taXVtLmgKQEAgLTEyOSw2ICsxMjksMTEgQEAgcHVibGljOgogICAg
IHZvaWQgc2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYpOwogICAgIEZsb2F0UG9pbnQgcG9z
aXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9CiAKKyAgICB2b2lkIHNldElzQ29u
dGFpbmVyTGF5ZXIoYm9vbCBpc0NvbnRhaW5lckxheWVyKSB7IG1faXNDb250YWluZXJMYXllciA9
IGlzQ29udGFpbmVyTGF5ZXI7IH0KKyAgICBib29sIGlzQ29udGFpbmVyTGF5ZXIoKSBjb25zdCB7
IHJldHVybiBtX2lzQ29udGFpbmVyTGF5ZXI7IH0KKworICAgIHZvaWQgc2V0Rml4ZWRUb0NvbnRh
aW5lckxheWVyVmlzaWJsZVJlY3QoYm9vbCBmaXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVj
dCkgeyBtX2ZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0ID0gZml4ZWRUb0NvbnRhaW5l
ckxheWVyVmlzaWJsZVJlY3Q7IHNldE5lZWRzQ29tbWl0KCk7IH0KKyAgICBib29sIGZpeGVkVG9D
b250YWluZXJMYXllclZpc2libGVSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9maXhlZFRvQ29udGFp
bmVyTGF5ZXJWaXNpYmxlUmVjdDsgfQogICAgIHZvaWQgc2V0U3VibGF5ZXJUcmFuc2Zvcm0oY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKICAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgc3VibGF5ZXJUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3N1YmxheWVyVHJhbnNmb3Jt
OyB9CiAKQEAgLTMyMyw2ICszMjgsOCBAQCBwcml2YXRlOgogICAgIEZpbHRlck9wZXJhdGlvbnMg
bV9maWx0ZXJzOwogICAgIEZpbHRlck9wZXJhdGlvbnMgbV9iYWNrZ3JvdW5kRmlsdGVyczsKICAg
ICBmbG9hdCBtX2FuY2hvclBvaW50WjsKKyAgICBib29sIG1faXNDb250YWluZXJMYXllcjsKKyAg
ICBib29sIG1fZml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3Q7CiAgICAgYm9vbCBtX2lz
RHJhd2FibGU7CiAgICAgYm9vbCBtX21hc2tzVG9Cb3VuZHM7CiAgICAgYm9vbCBtX29wYXF1ZTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAppbmRleCA5YjIzM2FmZWMzODU3ZDNkZjExNDU5YzhiYzEw
YWIyYmI3OWY5OGYxLi4yNzU1MjgyOWM0OWEwMmI0MDU3Mjk1MDYzNTA5ODQ0YmIyMTQ4YTJhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllckltcGwuY3BwCkBAIC02MCw2ICs2MCw4IEBAIENDTGF5ZXJJbXBsOjpD
Q0xheWVySW1wbChpbnQgaWQpCiAgICAgLCBtX3VzZXNMYXllckNsaXBwaW5nKGZhbHNlKQogICAg
ICwgbV9pc05vbkNvbXBvc2l0ZWRDb250ZW50KGZhbHNlKQogICAgICwgbV9kcmF3c0NvbnRlbnQo
ZmFsc2UpCisgICAgLCBtX2lzQ29udGFpbmVyTGF5ZXIoZmFsc2UpCisgICAgLCBtX2ZpeGVkVG9D
b250YWluZXJMYXllclZpc2libGVSZWN0KGZhbHNlKQogICAgICwgbV9wYWdlU2NhbGVEZWx0YSgx
KQogICAgICwgbV90YXJnZXRSZW5kZXJTdXJmYWNlKDApCiAgICAgLCBtX2RyYXdEZXB0aCgwKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJJbXBsLmgKaW5kZXggNjAzYWU1ODI5N2Y3YmRlYzU5ZGQyMWMyOWM3Nzg3NzJh
NDhkODEyYy4uMDg1NWM4ZDE1ZTBkMjAzNGM3NWRlNTQ2MzYxYmMxMWI2M2Y0MDg1YiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
ckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVySW1wbC5oCkBAIC0xMjUsNiArMTI1LDEyIEBAIHB1YmxpYzoKICAgICB2b2lkIHNl
dFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKTsKICAgICBjb25zdCBGbG9hdFBvaW50JiBwb3Np
dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb247IH0KIAorICAgIHZvaWQgc2V0SXNDb250
YWluZXJMYXllcihib29sIGlzQ29udGFpbmVyTGF5ZXIpIHsgbV9pc0NvbnRhaW5lckxheWVyID0g
aXNDb250YWluZXJMYXllcjsgfQorICAgIGJvb2wgaXNDb250YWluZXJMYXllcigpIGNvbnN0IHsg
cmV0dXJuIG1faXNDb250YWluZXJMYXllcjsgfQorCisgICAgdm9pZCBzZXRGaXhlZFRvQ29udGFp
bmVyTGF5ZXJWaXNpYmxlUmVjdChib29sIGZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0
ID0gdHJ1ZSkgeyBtX2ZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0ID0gZml4ZWRUb0Nv
bnRhaW5lckxheWVyVmlzaWJsZVJlY3Q7fQorICAgIGJvb2wgZml4ZWRUb0NvbnRhaW5lckxheWVy
VmlzaWJsZVJlY3QoKSBjb25zdCB7IHJldHVybiBtX2ZpeGVkVG9Db250YWluZXJMYXllclZpc2li
bGVSZWN0OyB9CisKICAgICB2b2lkIHNldFByZXNlcnZlczNEKGJvb2wpOwogICAgIGJvb2wgcHJl
c2VydmVzM0QoKSBjb25zdCB7IHJldHVybiBtX3ByZXNlcnZlczNEOyB9CiAKQEAgLTMwOSw2ICsz
MTUsMTEgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgbV9kcmF3c0NvbnRlbnQ7CiAKKyAgICAvLyBT
ZXQgZm9yIHRoZSBsYXllciB0aGF0IG90aGVyIGxheWVycyBhcmUgZml4ZWQgdG8uCisgICAgYm9v
bCBtX2lzQ29udGFpbmVyTGF5ZXI7CisgICAgLy8gU2V0IGZvciB0aGUgbGF5ZXIgdGhhdCBoYXMg
cG9zaXRpb24gZml4ZWQgdG8gdGhlIGNvbnRhaW5lciBsYXllcidzIHZpc2libGUgcmVjdC4KKyAg
ICBib29sIG1fZml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3Q7CisKICAgICBGbG9hdFNp
emUgbV9zY3JvbGxEZWx0YTsKICAgICBJbnRTaXplIG1fc2VudFNjcm9sbERlbHRhOwogICAgIElu
dFNpemUgbV9tYXhTY3JvbGxQb3NpdGlvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3RDb21tb24uY3BwCmluZGV4IDUxMWU4MzdkYzhkYWJjM2M1YzkxMTZiZjMzZTUyZjA0YWU2YWI1
MzYuLjRjZTliZGI1ZDVjYjc3YmNhNGE1ODQ1OTRlYzAwZTUzMDhlODFjNTIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdENvbW1vbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcApAQCAtMTY2LDYgKzE2NiwxNiBAQCBz
dGF0aWMgYm9vbCBsYXllclNob3VsZEJlU2tpcHBlZChMYXllclR5cGUqIGxheWVyKQogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlPgorc3RhdGljIExh
eWVyVHlwZSogZmluZEZpcnN0Q29udGFpbmVyT3JSZW5kZXJTdXJmYWNlQW5jZXN0b3IoTGF5ZXJU
eXBlKiBsYXllcikKK3sKKyAgICBpZiAoIWxheWVyKQorICAgICAgICByZXR1cm4gMDsKKyAgICBp
ZiAobGF5ZXItPmlzQ29udGFpbmVyTGF5ZXIoKSB8fCBsYXllci0+cmVuZGVyU3VyZmFjZSgpKQor
ICAgICAgICByZXR1cm4gbGF5ZXI7CisgICAgcmV0dXJuIGZpbmRGaXJzdENvbnRhaW5lck9yUmVu
ZGVyU3VyZmFjZUFuY2VzdG9yKGxheWVyLT5wYXJlbnQoKSk7Cit9CisKIHN0YXRpYyBpbmxpbmUg
Ym9vbCBzdWJ0cmVlU2hvdWxkQmVTa2lwcGVkKENDTGF5ZXJJbXBsKiBsYXllcikKIHsKICAgICAv
LyBUaGUgb3BhY2l0eSBvZiBhIGxheWVyIGFsd2F5cyBhcHBsaWVzIHRvIGl0cyBjaGlsZHJlbiAo
ZWl0aGVyIGltcGxpY2l0bHkKQEAgLTM2Miw2ICszNzIsNTEgQEAgc3RhdGljIGJvb2wgY2FsY3Vs
YXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5SW50ZXJuYWwoTGF5ZXJUeXBlKiBsYXllciwg
TGF5ZXIKICAgICBsYXllckxvY2FsVHJhbnNmb3JtLnRyYW5zbGF0ZTNkKGNlbnRlck9mZnNldFgs
IGNlbnRlck9mZnNldFksIC1sYXllci0+YW5jaG9yUG9pbnRaKCkpOwogCiAgICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggY29tYmluZWRUcmFuc2Zvcm0gPSBwYXJlbnRNYXRyaXg7CisKKyAgICAvLyBU
aGlzIGlzIGEgc3BlY2lhbCBjYXNlIGZvciBhIGxheWVyIHRoYXQgaXMgZml4ZWQgdG8gdGhlIGNv
bnRhaW5lciBsYXllcidzIHZpc2libGUgcmVjdGFuZ2xlLgorICAgIC8vIFRoZXJlIGFyZSBhIGNv
dXBsZSBvZiBhc3N1bXB0aW9ucyBoZXJlOgorICAgIC8vIDEuIEEgY29udGFpbmVyIGxheWVyIGlz
IHRoZSBzY3JvbGxpbmcgbGF5ZXIgYW5kIG9ubHkgaGFzIHRyYW5zbGF0aW9uIHRyYW5zZm9ybWF0
aW9uLgorICAgIC8vIDIuIEEgY29udGFpbmVyIGxheWVyJ3MgcGFyZW50IGxheWVyIGlzIGEgY2xp
cCBsYXllci4KKyAgICAvLworICAgIC8vIEdpdmVuIHRoYXQgd2UgY2FuIGRlY29tcG9zZSB0aGUg
dHJhbnNmb3JtYXRpb24gbWF0cml4IGFzIHRoZSBmb2xsb3dpbmc6CisgICAgLy8KKyAgICAvLyAg
ICAgICAgTVtwYXJlbnRdID0gTVtjbGlwXSAqIFRyW2NvbnRhaW5lcl0gKiBNW2Rlc2NlbmRhbnRd
CisgICAgLy8KKyAgICAvLyB3aGVyZSBNW2Rlc2NlbmRhbnRdIGlzIHRoZSB0b3RhbCB0cmFuc2Zv
cm1hdGlvbiBtYXRyaXggZnJvbSBjb250YWluZXIgbGF5ZXIncyBjb29yZGluYXRlCisgICAgLy8g
c3BhY2UgdG8gdGhlIHNwYWNlIG9mIHBhcmVudE1hdHJpeC4KKyAgICAvLworICAgIC8vIEFuZCB0
aHVzOgorICAgIC8vCisgICAgLy8gICAgICAgIFRyW2NvbnRhaW5lcl0gKiBNW2Rlc2NlbmRhbnRd
ID0gTVtjbGlwXSBeIC0xICogTVtwYXJlbnRdCisgICAgLy8KKyAgICAvLyBBbmQgdGhlIHRyYW5z
Zm9ybWF0aW9uIG1hdHJpeCBmb3IgdGhpcyBsYXllciB3aXRob3V0IGNvbnRhaW5lcidzIHNjcm9s
bCBiZWNvbWVzOgorICAgIC8vCisgICAgLy8gICAgICAgIE1bY2xpcF0gKiAtVHJbY29udGFpbmVy
XSAqIFRyW2NvbnRhaW5lcl0gKiBNW2Rlc2NlbmRhbnRdID0gTVtjbGlwXSAqIC1Ucltjb250YWlu
ZXJdICogTVtjbGlwXSBeIC0xICogTVtwYXJlbnRdCisgICAgLy8KKyAgICAvLyBJZiB0aGVyZSBp
cyBhbiBpbnRlcm1lZGlhdGUgcmVuZGVyIHN1cmZhY2UgbGF5ZXIgYmVmb3JlIHdlIGZpbmQgdGhl
IGNvbnRhaW5lciwgd2UgbXVsdGlwbHkgdGhlCisgICAgLy8gY29tYmluZWQgdHJhbnNmb3JtIHdp
dGggdGhlIGludmVyc2Ugb2YgdGhhdCBsYXllcidzIHRyYW5zZm9ybS4gTm90ZSB0aGF0IHRoaXMg
aXMgdW5saWtlbHkgdG8KKyAgICAvLyBvY2N1ciBpbiBwcmFjdGljZSBiZWNhdXNlIGZpeGVkIHBv
c2l0aW9uIGxheWVycyB3aWxsIGdldCBmaXhlZCB0byB0aGVpciBmaXJzdCB0cmFuc2Zvcm1lZAor
ICAgIC8vIGFuY2VzdG9yLgorICAgIC8vCisgICAgaWYgKGxheWVyLT5maXhlZFRvQ29udGFpbmVy
TGF5ZXJWaXNpYmxlUmVjdCgpKSB7CisgICAgICAgIGNvbWJpbmVkVHJhbnNmb3JtID0gVHJhbnNm
b3JtYXRpb25NYXRyaXgoKTsKKyAgICAgICAgZm9yIChMYXllclR5cGUqIGFuY2VzdG9yID0gZmlu
ZEZpcnN0Q29udGFpbmVyT3JSZW5kZXJTdXJmYWNlQW5jZXN0b3IobGF5ZXItPnBhcmVudCgpKTsg
YW5jZXN0b3I7IGFuY2VzdG9yID0gZmluZEZpcnN0Q29udGFpbmVyT3JSZW5kZXJTdXJmYWNlQW5j
ZXN0b3IoYW5jZXN0b3ItPnBhcmVudCgpKSkgeworICAgICAgICAgICAgTGF5ZXJUeXBlKiBjbGlw
TGF5ZXI7CisgICAgICAgICAgICBpZiAoYW5jZXN0b3ItPmlzQ29udGFpbmVyTGF5ZXIoKSAmJiAo
Y2xpcExheWVyID0gYW5jZXN0b3ItPnBhcmVudCgpKSkgeworICAgICAgICAgICAgICAgIEZsb2F0
U2l6ZSBzY3JvbGxEZWx0YSA9IGFuY2VzdG9yLT5zY3JvbGxEZWx0YSgpOworICAgICAgICAgICAg
ICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNsaXBNYXRyaXggPSBjbGlwTGF5ZXItPmRyYXdUcmFu
c2Zvcm0oKTsKKyAgICAgICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBkZXNjZW5kYW50
TWF0cml4ID0gY2xpcE1hdHJpeC5pbnZlcnNlKCkgKiBwYXJlbnRNYXRyaXg7CisgICAgICAgICAg
ICAgICAgY2xpcE1hdHJpeC50cmFuc2xhdGUoc2Nyb2xsRGVsdGEud2lkdGgoKSwgc2Nyb2xsRGVs
dGEuaGVpZ2h0KCkpOworICAgICAgICAgICAgICAgIGNvbWJpbmVkVHJhbnNmb3JtICo9IGNsaXBN
YXRyaXggKiBkZXNjZW5kYW50TWF0cml4OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWYgKGFuY2VzdG9yLT5yZW5kZXJTdXJmYWNlKCkgJiYgKGNs
aXBMYXllciA9IGFuY2VzdG9yLT5wYXJlbnQoKSkpIHsKKyAgICAgICAgICAgICAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCByZW5kZXJTdXJmYWNlTWF0cml4ID0gYW5jZXN0b3ItPnRyYW5zZm9ybSgp
LmludmVyc2UoKTsKKyAgICAgICAgICAgICAgICBjb21iaW5lZFRyYW5zZm9ybSAqPSByZW5kZXJT
dXJmYWNlTWF0cml4OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCiAgICAgY29t
YmluZWRUcmFuc2Zvcm0gPSBjb21iaW5lZFRyYW5zZm9ybS5tdWx0aXBseShsYXllckxvY2FsVHJh
bnNmb3JtKTsKIAogICAgIGJvb2wgYW5pbWF0aW5nVHJhbnNmb3JtVG9UYXJnZXQgPSBsYXllci0+
dHJhbnNmb3JtSXNBbmltYXRpbmcoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwCmluZGV4IGU0MzY0NDVh
MzU4OThmNWVkMDk1ZWY3ZTY3OTMyZDEwYmQ0MTAzZjguLjk3NDJiYzVjYTYxYzYzYWMxOTA1ZGUy
NDU4MmQ1NWM0MjcxOTQ2MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcApAQCAtMzIsNyArMzIsOSBA
QAogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5jbHVkZSAiVHJhbnNsYXRl
VHJhbnNmb3JtT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXIuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgogI2luY2x1ZGUgImNjL0NDTWF0
aFV0aWwuaCIKKyNpbmNsdWRlICJjYy9DQ1NpbmdsZVRocmVhZFByb3h5LmgiCiAKICNpbmNsdWRl
IDxnbW9jay9nbW9jay5oPgogI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CkBAIC01ODEsNiArNTgz
LDEwMiBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVJlbmRlclN1cmZh
Y2VMaXN0Rm9yVHJhbnNwYXJlbnRDaGlsZCkKICAgICBFWFBFQ1RfRVEocGFyZW50LT5kcmF3YWJs
ZUNvbnRlbnRSZWN0KCksIEludFJlY3QoKSk7CiB9CiAKK1RFU1QoQ0NMYXllclRyZWVIb3N0Q29t
bW9uVGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvckZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVS
ZWN0KQoreworICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBzY29wZWRJbXBsVGhyZWFkOwor
CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgxKTsK
KyAgICBPd25QdHI8Q0NMYXllckltcGw+IGNoaWxkID0gQ0NMYXllckltcGw6OmNyZWF0ZSgyKTsK
KyAgICBPd25QdHI8Q0NMYXllckltcGw+IGdyYW5kQ2hpbGQgPSBDQ0xheWVySW1wbDo6Y3JlYXRl
KDMpOworCisgICAgcm9vdC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHJvb3QtPnNldEFu
Y2hvclBvaW50KEZsb2F0UG9pbnQoMCwgMCkpOworICAgIHJvb3QtPnNldEJvdW5kcyhJbnRTaXpl
KDEwMCwgMTAwKSk7CisKKyAgICBjaGlsZC0+c2V0Qm91bmRzKEludFNpemUoMTAwLCAxMDApKTsK
KyAgICBjaGlsZC0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgwLCAwKSk7CisgICAgY2hpbGQt
PnNldFNjcm9sbERlbHRhKEludFNpemUoMTAsIDEwKSk7CisgICAgY2hpbGQtPnNldElzQ29udGFp
bmVyTGF5ZXIodHJ1ZSk7CisKKyAgICBncmFuZENoaWxkLT5zZXRBbmNob3JQb2ludChGbG9hdFBv
aW50KDAsIDApKTsKKyAgICBncmFuZENoaWxkLT5zZXRCb3VuZHMoSW50U2l6ZSgxMDAsIDEwMCkp
OworICAgIGdyYW5kQ2hpbGQtPnNldEZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0KHRy
dWUpOworCisgICAgY2hpbGQtPmFkZENoaWxkKGdyYW5kQ2hpbGQucmVsZWFzZSgpKTsKKyAgICBy
b290LT5hZGRDaGlsZChjaGlsZC5yZWxlYXNlKCkpOworCisgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggaWRlbnRpdHlNYXRyaXg7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY2hpbGRUcmFuc2Zv
cm1hdGlvbk1hdHJpeDsKKyAgICBjaGlsZFRyYW5zZm9ybWF0aW9uTWF0cml4LnRyYW5zbGF0ZSg0
MCwgNDApOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGdyYW5kQ2hpbGRUcmFuc2Zvcm1hdGlv
bk1hdHJpeDsKKyAgICBncmFuZENoaWxkVHJhbnNmb3JtYXRpb25NYXRyaXgudHJhbnNsYXRlKDUw
LCA1MCk7CisKKyAgICBWZWN0b3I8Q0NMYXllckltcGwqPiBkdW1teVJlbmRlclN1cmZhY2VMYXll
ckxpc3Q7CisgICAgVmVjdG9yPENDTGF5ZXJJbXBsKj4gZHVtbXlMYXllckxpc3Q7CisgICAgaW50
IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpj
YWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocm9vdC5nZXQoKSwgcm9vdC5nZXQo
KSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBkdW1teVJlbmRlclN1cmZhY2VMYXll
ckxpc3QsIGR1bW15TGF5ZXJMaXN0LCAwLCBkdW1teU1heFRleHR1cmVTaXplKTsKKworICAgIHsK
KyAgICAgICAgQ0NMYXllckltcGwqIGNoaWxkID0gQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpmaW5k
TGF5ZXJJblN1YnRyZWUocm9vdC5nZXQoKSwgMik7CisgICAgICAgIENDTGF5ZXJJbXBsKiBncmFu
ZENoaWxkID0gQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpmaW5kTGF5ZXJJblN1YnRyZWUocm9vdC5n
ZXQoKSwgMyk7CisKKyAgICAgICAgLy8gVGhlIGNoaWxkIGxheWVyIHNob3VsZCBnZXQgYSB0cmFu
c2xhdGlvbi4KKyAgICAgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShjaGlsZFRy
YW5zZm9ybWF0aW9uTWF0cml4LCBjaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKworICAgICAgICAv
LyBUaGUgY2hpbGQgbGF5ZXIgc2hvdWxkIHN0YXkgZml4ZWQgdG8gdGhlIHJvb3QuCisgICAgICAg
IEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZ3JhbmRDaGlsZFRyYW5zZm9ybWF0aW9u
TWF0cml4LCBncmFuZENoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIH0KK30KKworVEVTVChD
Q0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yRml4ZWRQb3NpdGlv
bldpdGhJbnRlcm1lZGlhdGVSZW5kZXJTdXJmYWNlKQoreworICAgIERlYnVnU2NvcGVkU2V0SW1w
bFRocmVhZCBzY29wZWRJbXBsVGhyZWFkOworCisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290
ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgxKTsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IGNoaWxk
ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgyKTsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IGdyYW5k
Q2hpbGQgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDMpOworCisgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggcmVuZGVyU3VyZmFjZVRyYW5zZm9ybTsKKyAgICByZW5kZXJTdXJmYWNlVHJhbnNmb3JtLnRy
YW5zbGF0ZSgyMDAsIDEwMCk7CisgICAgcmVuZGVyU3VyZmFjZVRyYW5zZm9ybS5yb3RhdGUoMTAp
OworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggZml4ZWRUcmFuc2Zvcm07CisgICAgZml4ZWRU
cmFuc2Zvcm0udHJhbnNsYXRlKDUwLCAyMCk7CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBj
ZW50ZXJUcmFuc2Zvcm07CisgICAgY2VudGVyVHJhbnNmb3JtLnRyYW5zbGF0ZSg1MCwgNTApOwor
CisgICAgcm9vdC0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgwLCAwKSk7CisgICAgcm9vdC0+
c2V0Qm91bmRzKEludFNpemUoMTAwLCAxMDApKTsKKworICAgIGNoaWxkLT5zZXRCb3VuZHMoSW50
U2l6ZSgxMDAsIDEwMCkpOworICAgIGNoaWxkLT5zZXRUcmFuc2Zvcm0ocmVuZGVyU3VyZmFjZVRy
YW5zZm9ybSk7CisgICAgY2hpbGQtPnNldE9wYWNpdHkoMC41KTsKKworICAgIGdyYW5kQ2hpbGQt
PnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoMCwgMCkpOworICAgIGdyYW5kQ2hpbGQtPnNldEJv
dW5kcyhJbnRTaXplKDEwMCwgMTAwKSk7CisgICAgZ3JhbmRDaGlsZC0+c2V0Rml4ZWRUb0NvbnRh
aW5lckxheWVyVmlzaWJsZVJlY3QodHJ1ZSk7CisgICAgZ3JhbmRDaGlsZC0+c2V0RHJhd3NDb250
ZW50KHRydWUpOworICAgIGdyYW5kQ2hpbGQtPnNldFRyYW5zZm9ybShmaXhlZFRyYW5zZm9ybSk7
CisKKyAgICBjaGlsZC0+YWRkQ2hpbGQoZ3JhbmRDaGlsZC5yZWxlYXNlKCkpOworICAgIHJvb3Qt
PmFkZENoaWxkKGNoaWxkLnJlbGVhc2UoKSk7CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBp
ZGVudGl0eU1hdHJpeDsKKyAgICBWZWN0b3I8Q0NMYXllckltcGwqPiBkdW1teVJlbmRlclN1cmZh
Y2VMYXllckxpc3Q7CisgICAgVmVjdG9yPENDTGF5ZXJJbXBsKj4gZHVtbXlMYXllckxpc3Q7Cisg
ICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CisgICAgQ0NMYXllclRyZWVIb3N0Q29t
bW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocm9vdC5nZXQoKSwgcm9v
dC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBkdW1teVJlbmRlclN1cmZh
Y2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCAwLCBkdW1teU1heFRleHR1cmVTaXplKTsKKwor
ICAgIHsKKyAgICAgICAgQ0NMYXllckltcGwqIGdyYW5kQ2hpbGQgPSBDQ0xheWVyVHJlZUhvc3RD
b21tb246OmZpbmRMYXllckluU3VidHJlZShyb290LmdldCgpLCAzKTsKKworICAgICAgICAvLyBU
aGUgZml4ZWQgbGF5ZXIncyB0cmFuc2Zvcm0gc2hvdWxkIGhhdmUgdGhlIGVuY2xvc2luZyByZW5k
ZXIgc3VyZmFjZSdzIHRyYW5zZm9ybSBjYW5jZWxsZWQgb3V0LgorICAgICAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBjb21iaW5lZFRyYW5zZm9ybSA9IHJlbmRlclN1cmZhY2VUcmFuc2Zvcm0uaW52
ZXJzZSgpICogZml4ZWRUcmFuc2Zvcm0gKiBjZW50ZXJUcmFuc2Zvcm07CisgICAgICAgIEVYUEVD
VF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoY29tYmluZWRUcmFuc2Zvcm0sIGdyYW5kQ2hpbGQt
PmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgfQorfQorCiBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1v
blRlc3QsIHZlcmlmeUNsaXBSZWN0Q3VsbHNSZW5kZXJTdXJmYWNlcykKIHsKICAgICAvLyBUaGUg
ZW50aXJlIHN1YnRyZWUgb2YgbGF5ZXJzIHRoYXQgYXJlIG91dHNpZGUgdGhlIGNsaXBSZWN0IHNo
b3VsZCBiZSBjdWxsZWQgYXdheSwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>142519</attachid>
            <date>2012-05-17 11:55:25 -0700</date>
            <delta_ts>2012-05-31 06:17:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70103-20120517195523.patch</filename>
            <type>text/plain</type>
            <size>16715</size>
            <attacher name="Sami Kyostila">skyostil</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE3NDY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmQ4OWJjZTRkNDUzYjk0
NGFkZDZlMzMzOGMwOTJkZmE4N2Y1OGZiMi4uNzJlOTFlNDVhNmE5ZTE3YzA3ODgwZTE4ODk2ZTgw
ZGY4MWIwOGUxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQ2IEBACiAyMDEyLTA1LTE3ICBTYW1p
IEt5b3N0aWxhICA8c2t5b3N0aWxAY2hyb21pdW0ub3JnPgogCisgICAgICAgIFtjaHJvbWl1bV0g
SW1wbGVtZW50IHBvc2l0aW9uOmZpeGVkIGluIGNvbXBvc2l0b3IgdGhyZWFkCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDEwMworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW50cm9kdWNl
cyB0d28gbmV3IGxheWVycyBmbGFnczogaXNDb250YWluZXJMYXllcigpIGFuZAorICAgICAgICBm
aXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdCgpLiBUaGlzIGFsbG93cyBsYXllcnMgdG8g
c3RheSBmaXhlZAorICAgICAgICByZWxhdGl2ZSB0byB0aGVpciBhbmNlc3RvciBjb250YWluZXIg
bGF5ZXJzIHdoaWxlIHRoZSBjb21wb3NpdG9yIHRocmVhZAorICAgICAgICBzY3JvbGxzLgorCisg
ICAgICAgIE9yaWdpbmFsIHBhdGNoIGJ5IEFscGhhIExhbS4KKworICAgICAgICBUZXN0czogdmVy
aWZ5VHJhbnNmb3Jtc0ZvckZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0LCB2ZXJpZnlU
cmFuc2Zvcm1zRm9yRml4ZWRQb3NpdGlvbldpdGhJbnRlcm1lZGlhdGVSZW5kZXJTdXJmYWNlCisK
KyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29yZGluYXRvckNo
cm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRM
YXllcklzQ29udGFpbmVyRm9yRml4ZWRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxpbmdDb29yZGluYXRvcjo6c2V0TGF5ZXJJc0ZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVS
ZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVt
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OkxheWVyQ2hyb21pdW0pOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0SXNDb250YWluZXJMYXllcik6CisgICAgICAg
IChXZWJDb3JlOjpMYXllckNocm9taXVtOjppc0NvbnRhaW5lckxheWVyKToKKyAgICAgICAgKExh
eWVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0Rml4ZWRU
b0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJv
bWl1bTo6Zml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3QpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJJbXBsOjpDQ0xheWVySW1wbCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJ
bXBsOjpzZXRJc0NvbnRhaW5lckxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBs
Ojppc0NvbnRhaW5lckxheWVyKToKKyAgICAgICAgKENDTGF5ZXJJbXBsKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJJbXBsOjpzZXRGaXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6Zml4ZWRUb0NvbnRhaW5lckxheWVyVmlz
aWJsZVJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdENvbW1vbi5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OmZpbmRGaXJzdENvbnRhaW5lck9yUmVuZGVyU3VyZmFjZUFuY2VzdG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eUludGVybmFsKToK
KworMjAxMi0wNC0yNyAgU2FtaSBLeW9zdGlsYSAgPHNreW9zdGlsQGNocm9taXVtLm9yZz4KKwog
ICAgICAgICBSZWdpc3RlciBmaXhlZCBwb3NpdGlvbiBsYXllcnMgd2l0aCBTY3JvbGxpbmdDb29y
ZGluYXRvcgogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
Nzg4NjQKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY2hyb21p
dW0vU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtLmNwcAppbmRl
eCBjMmIxZTlkM2E1MTBiM2Q0Y2U5MGI5ZjUyYmJlNDYzYTAxODhmNTM3Li45NjYxNWRlZDMzNDIw
MGZlMWEzMjk2ZjQxN2VjNTg4OTEyYjgyMDFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29y
ZGluYXRvckNocm9taXVtLmNwcApAQCAtMTY0LDEyICsxNjQsMTQgQEAgdm9pZCBTY3JvbGxpbmdD
b29yZGluYXRvcjo6c2V0U2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVh
ZChib29sIHMKIAogdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0TGF5ZXJJc0NvbnRhaW5l
ckZvckZpeGVkUG9zaXRpb24oR3JhcGhpY3NMYXllciogbGF5ZXIsIGJvb2wgZW5hYmxlKQogewot
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQhCisgICAgaWYgKExheWVyQ2hyb21pdW0qIHBsYXRmb3Jt
TGF5ZXIgPSBsYXllci0+cGxhdGZvcm1MYXllcigpKQorICAgICAgICBwbGF0Zm9ybUxheWVyLT5z
ZXRJc0NvbnRhaW5lckxheWVyKGVuYWJsZSk7CiB9CiAKIHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0
b3I6OnNldExheWVySXNGaXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdChHcmFwaGljc0xh
eWVyKiBsYXllciwgYm9vbCBlbmFibGUpCiB7Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCEKKyAg
ICBpZiAoTGF5ZXJDaHJvbWl1bSogcGxhdGZvcm1MYXllciA9IGxheWVyLT5wbGF0Zm9ybUxheWVy
KCkpCisgICAgICAgIHBsYXRmb3JtTGF5ZXItPnNldEZpeGVkVG9Db250YWluZXJMYXllclZpc2li
bGVSZWN0KGVuYWJsZSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggMWEwZTY3
MDg5ZjEzZWRjMzAwMmMxMDdhM2ViNWMxYTFhZmFjODBjNS4uODMwM2M5YjIyYWI3OTE0ODJkMDMy
MjRiMmQ4MTZkYzU1ZGQ4MzdhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTcxLDYgKzcx
LDggQEAgTGF5ZXJDaHJvbWl1bTo6TGF5ZXJDaHJvbWl1bSgpCiAgICAgLCBtX2RlYnVnQm9yZGVy
V2lkdGgoMCkKICAgICAsIG1fb3BhY2l0eSgxLjApCiAgICAgLCBtX2FuY2hvclBvaW50WigwKQor
ICAgICwgbV9pc0NvbnRhaW5lckxheWVyKGZhbHNlKQorICAgICwgbV9maXhlZFRvQ29udGFpbmVy
TGF5ZXJWaXNpYmxlUmVjdChmYWxzZSkKICAgICAsIG1faXNEcmF3YWJsZShmYWxzZSkKICAgICAs
IG1fbWFza3NUb0JvdW5kcyhmYWxzZSkKICAgICAsIG1fb3BhcXVlKGZhbHNlKQpAQCAtNTAxLDYg
KzUwMyw4IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyhDQ0xheWVySW1w
bCogbGF5ZXIpCiAgICAgaWYgKCFvcGFjaXR5SXNBbmltYXRpbmcoKSkKICAgICAgICAgbGF5ZXIt
PnNldE9wYWNpdHkobV9vcGFjaXR5KTsKICAgICBsYXllci0+c2V0UG9zaXRpb24obV9wb3NpdGlv
bik7CisgICAgbGF5ZXItPnNldElzQ29udGFpbmVyTGF5ZXIobV9pc0NvbnRhaW5lckxheWVyKTsK
KyAgICBsYXllci0+c2V0Rml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3QobV9maXhlZFRv
Q29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdCk7CiAgICAgbGF5ZXItPnNldFByZXNlcnZlczNEKHBy
ZXNlcnZlczNEKCkpOwogICAgIGxheWVyLT5zZXRTY3JvbGxQb3NpdGlvbihtX3Njcm9sbFBvc2l0
aW9uKTsKICAgICBsYXllci0+c2V0U3VibGF5ZXJUcmFuc2Zvcm0obV9zdWJsYXllclRyYW5zZm9y
bSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllckNocm9taXVtLmgKaW5kZXggYTU5MGJkMmMzMWEwNWI1NGI1ZWY4YjE1Y2JhZDk4
NTcwNWQyMTdlNS4uNDcxYThlOWM2ZDAyMTVkNTIyZjlkNWI2NWFlMDkxYjYwZjRjNzlkOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJD
aHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyQ2hyb21pdW0uaApAQCAtMTI5LDYgKzEyOSwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBz
ZXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50Jik7CiAgICAgRmxvYXRQb2ludCBwb3NpdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb247IH0KIAorICAgIHZvaWQgc2V0SXNDb250YWluZXJM
YXllcihib29sIGlzQ29udGFpbmVyTGF5ZXIpIHsgbV9pc0NvbnRhaW5lckxheWVyID0gaXNDb250
YWluZXJMYXllcjsgfQorICAgIGJvb2wgaXNDb250YWluZXJMYXllcigpIGNvbnN0IHsgcmV0dXJu
IG1faXNDb250YWluZXJMYXllcjsgfQorCisgICAgdm9pZCBzZXRGaXhlZFRvQ29udGFpbmVyTGF5
ZXJWaXNpYmxlUmVjdChib29sIGZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0KSB7IG1f
Zml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3QgPSBmaXhlZFRvQ29udGFpbmVyTGF5ZXJW
aXNpYmxlUmVjdDsgc2V0TmVlZHNDb21taXQoKTsgfQorICAgIGJvb2wgZml4ZWRUb0NvbnRhaW5l
ckxheWVyVmlzaWJsZVJlY3QoKSBjb25zdCB7IHJldHVybiBtX2ZpeGVkVG9Db250YWluZXJMYXll
clZpc2libGVSZWN0OyB9CiAgICAgdm9pZCBzZXRTdWJsYXllclRyYW5zZm9ybShjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYpOwogICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBzdWJs
YXllclRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fc3VibGF5ZXJUcmFuc2Zvcm07IH0KIApA
QCAtMzIxLDYgKzMyNiw4IEBAIHByaXZhdGU6CiAgICAgRmlsdGVyT3BlcmF0aW9ucyBtX2ZpbHRl
cnM7CiAgICAgRmlsdGVyT3BlcmF0aW9ucyBtX2JhY2tncm91bmRGaWx0ZXJzOwogICAgIGZsb2F0
IG1fYW5jaG9yUG9pbnRaOworICAgIGJvb2wgbV9pc0NvbnRhaW5lckxheWVyOworICAgIGJvb2wg
bV9maXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdDsKICAgICBib29sIG1faXNEcmF3YWJs
ZTsKICAgICBib29sIG1fbWFza3NUb0JvdW5kczsKICAgICBib29sIG1fb3BhcXVlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
ckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllckltcGwuY3BwCmluZGV4IDZlZTlhYTcxZGUzMmIwM2VlZjE5Y2UwMzYzYmYxZGFmNmNi
MDY0YWEuLmUzYTQ0NmMyZTA5NDgyOWFkODIzZDY5ZWNlOTBjZWNjODlmYTY5M2MgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJ
bXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVySW1wbC5jcHAKQEAgLTYwLDYgKzYwLDggQEAgQ0NMYXllckltcGw6OkNDTGF5ZXJJ
bXBsKGludCBpZCkKICAgICAsIG1fdXNlc0xheWVyQ2xpcHBpbmcoZmFsc2UpCiAgICAgLCBtX2lz
Tm9uQ29tcG9zaXRlZENvbnRlbnQoZmFsc2UpCiAgICAgLCBtX2RyYXdzQ29udGVudChmYWxzZSkK
KyAgICAsIG1faXNDb250YWluZXJMYXllcihmYWxzZSkKKyAgICAsIG1fZml4ZWRUb0NvbnRhaW5l
ckxheWVyVmlzaWJsZVJlY3QoZmFsc2UpCiAgICAgLCBtX3BhZ2VTY2FsZURlbHRhKDEpCiAgICAg
LCBtX3RhcmdldFJlbmRlclN1cmZhY2UoMCkKICAgICAsIG1fZHJhd0RlcHRoKDApCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllckltcGwuaAppbmRleCBiZGJmZTY5MmU2YzJiYmE5OWZkZWZjMmQ2YWNmNDhkZWQ0ZmFkYTA3
Li4zODA2NTQ1M2JmZGZhZGFlOTRjZjMwMWFiOTEzODFjZTMyNjE4NmFkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJJbXBsLmgKQEAgLTEyNCw2ICsxMjQsMTIgQEAgcHVibGljOgogICAgIHZvaWQgc2V0UG9zaXRp
b24oY29uc3QgRmxvYXRQb2ludCYpOwogICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbjsgfQogCisgICAgdm9pZCBzZXRJc0NvbnRhaW5lckxh
eWVyKGJvb2wgaXNDb250YWluZXJMYXllcikgeyBtX2lzQ29udGFpbmVyTGF5ZXIgPSBpc0NvbnRh
aW5lckxheWVyOyB9CisgICAgYm9vbCBpc0NvbnRhaW5lckxheWVyKCkgY29uc3QgeyByZXR1cm4g
bV9pc0NvbnRhaW5lckxheWVyOyB9CisKKyAgICB2b2lkIHNldEZpeGVkVG9Db250YWluZXJMYXll
clZpc2libGVSZWN0KGJvb2wgZml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3QgPSB0cnVl
KSB7IG1fZml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3QgPSBmaXhlZFRvQ29udGFpbmVy
TGF5ZXJWaXNpYmxlUmVjdDt9CisgICAgYm9vbCBmaXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxl
UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3Q7
IH0KKwogICAgIHZvaWQgc2V0UHJlc2VydmVzM0QoYm9vbCk7CiAgICAgYm9vbCBwcmVzZXJ2ZXMz
RCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJlc2VydmVzM0Q7IH0KIApAQCAtMzA4LDYgKzMxNCwxMSBA
QCBwcml2YXRlOgogCiAgICAgYm9vbCBtX2RyYXdzQ29udGVudDsKIAorICAgIC8vIFNldCBmb3Ig
dGhlIGxheWVyIHRoYXQgb3RoZXIgbGF5ZXJzIGFyZSBmaXhlZCB0by4KKyAgICBib29sIG1faXND
b250YWluZXJMYXllcjsKKyAgICAvLyBTZXQgZm9yIHRoZSBsYXllciB0aGF0IGhhcyBwb3NpdGlv
biBmaXhlZCB0byB0aGUgY29udGFpbmVyIGxheWVyJ3MgdmlzaWJsZSByZWN0LgorICAgIGJvb2wg
bV9maXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdDsKKwogICAgIEZsb2F0U2l6ZSBtX3Nj
cm9sbERlbHRhOwogICAgIEludFNpemUgbV9zZW50U2Nyb2xsRGVsdGE7CiAgICAgSW50U2l6ZSBt
X21heFNjcm9sbFBvc2l0aW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1v
bi5jcHAKaW5kZXggNTExZTgzN2RjOGRhYmMzYzVjOTExNmJmMzNlNTJmMDRhZTZhYjUzNi4uNGNl
OWJkYjVkNWNiNzdiY2E0YTU4NDU5NGVjMDBlNTMwOGU4MWM1MiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29t
bW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwCkBAIC0xNjYsNiArMTY2LDE2IEBAIHN0YXRpYyBi
b29sIGxheWVyU2hvdWxkQmVTa2lwcGVkKExheWVyVHlwZSogbGF5ZXIpCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5cGU+CitzdGF0aWMgTGF5ZXJUeXBl
KiBmaW5kRmlyc3RDb250YWluZXJPclJlbmRlclN1cmZhY2VBbmNlc3RvcihMYXllclR5cGUqIGxh
eWVyKQoreworICAgIGlmICghbGF5ZXIpCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChsYXll
ci0+aXNDb250YWluZXJMYXllcigpIHx8IGxheWVyLT5yZW5kZXJTdXJmYWNlKCkpCisgICAgICAg
IHJldHVybiBsYXllcjsKKyAgICByZXR1cm4gZmluZEZpcnN0Q29udGFpbmVyT3JSZW5kZXJTdXJm
YWNlQW5jZXN0b3IobGF5ZXItPnBhcmVudCgpKTsKK30KKwogc3RhdGljIGlubGluZSBib29sIHN1
YnRyZWVTaG91bGRCZVNraXBwZWQoQ0NMYXllckltcGwqIGxheWVyKQogewogICAgIC8vIFRoZSBv
cGFjaXR5IG9mIGEgbGF5ZXIgYWx3YXlzIGFwcGxpZXMgdG8gaXRzIGNoaWxkcmVuIChlaXRoZXIg
aW1wbGljaXRseQpAQCAtMzYyLDYgKzM3Miw1MSBAQCBzdGF0aWMgYm9vbCBjYWxjdWxhdGVEcmF3
VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHlJbnRlcm5hbChMYXllclR5cGUqIGxheWVyLCBMYXllcgog
ICAgIGxheWVyTG9jYWxUcmFuc2Zvcm0udHJhbnNsYXRlM2QoY2VudGVyT2Zmc2V0WCwgY2VudGVy
T2Zmc2V0WSwgLWxheWVyLT5hbmNob3JQb2ludFooKSk7CiAKICAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBjb21iaW5lZFRyYW5zZm9ybSA9IHBhcmVudE1hdHJpeDsKKworICAgIC8vIFRoaXMgaXMg
YSBzcGVjaWFsIGNhc2UgZm9yIGEgbGF5ZXIgdGhhdCBpcyBmaXhlZCB0byB0aGUgY29udGFpbmVy
IGxheWVyJ3MgdmlzaWJsZSByZWN0YW5nbGUuCisgICAgLy8gVGhlcmUgYXJlIGEgY291cGxlIG9m
IGFzc3VtcHRpb25zIGhlcmU6CisgICAgLy8gMS4gQSBjb250YWluZXIgbGF5ZXIgaXMgdGhlIHNj
cm9sbGluZyBsYXllciBhbmQgb25seSBoYXMgdHJhbnNsYXRpb24gdHJhbnNmb3JtYXRpb24uCisg
ICAgLy8gMi4gQSBjb250YWluZXIgbGF5ZXIncyBwYXJlbnQgbGF5ZXIgaXMgYSBjbGlwIGxheWVy
LgorICAgIC8vCisgICAgLy8gR2l2ZW4gdGhhdCB3ZSBjYW4gZGVjb21wb3NlIHRoZSB0cmFuc2Zv
cm1hdGlvbiBtYXRyaXggYXMgdGhlIGZvbGxvd2luZzoKKyAgICAvLworICAgIC8vICAgICAgICBN
W3BhcmVudF0gPSBNW2NsaXBdICogVHJbY29udGFpbmVyXSAqIE1bZGVzY2VuZGFudF0KKyAgICAv
LworICAgIC8vIHdoZXJlIE1bZGVzY2VuZGFudF0gaXMgdGhlIHRvdGFsIHRyYW5zZm9ybWF0aW9u
IG1hdHJpeCBmcm9tIGNvbnRhaW5lciBsYXllcidzIGNvb3JkaW5hdGUKKyAgICAvLyBzcGFjZSB0
byB0aGUgc3BhY2Ugb2YgcGFyZW50TWF0cml4LgorICAgIC8vCisgICAgLy8gQW5kIHRodXM6Cisg
ICAgLy8KKyAgICAvLyAgICAgICAgVHJbY29udGFpbmVyXSAqIE1bZGVzY2VuZGFudF0gPSBNW2Ns
aXBdIF4gLTEgKiBNW3BhcmVudF0KKyAgICAvLworICAgIC8vIEFuZCB0aGUgdHJhbnNmb3JtYXRp
b24gbWF0cml4IGZvciB0aGlzIGxheWVyIHdpdGhvdXQgY29udGFpbmVyJ3Mgc2Nyb2xsIGJlY29t
ZXM6CisgICAgLy8KKyAgICAvLyAgICAgICAgTVtjbGlwXSAqIC1Ucltjb250YWluZXJdICogVHJb
Y29udGFpbmVyXSAqIE1bZGVzY2VuZGFudF0gPSBNW2NsaXBdICogLVRyW2NvbnRhaW5lcl0gKiBN
W2NsaXBdIF4gLTEgKiBNW3BhcmVudF0KKyAgICAvLworICAgIC8vIElmIHRoZXJlIGlzIGFuIGlu
dGVybWVkaWF0ZSByZW5kZXIgc3VyZmFjZSBsYXllciBiZWZvcmUgd2UgZmluZCB0aGUgY29udGFp
bmVyLCB3ZSBtdWx0aXBseSB0aGUKKyAgICAvLyBjb21iaW5lZCB0cmFuc2Zvcm0gd2l0aCB0aGUg
aW52ZXJzZSBvZiB0aGF0IGxheWVyJ3MgdHJhbnNmb3JtLiBOb3RlIHRoYXQgdGhpcyBpcyB1bmxp
a2VseSB0bworICAgIC8vIG9jY3VyIGluIHByYWN0aWNlIGJlY2F1c2UgZml4ZWQgcG9zaXRpb24g
bGF5ZXJzIHdpbGwgZ2V0IGZpeGVkIHRvIHRoZWlyIGZpcnN0IHRyYW5zZm9ybWVkCisgICAgLy8g
YW5jZXN0b3IuCisgICAgLy8KKyAgICBpZiAobGF5ZXItPmZpeGVkVG9Db250YWluZXJMYXllclZp
c2libGVSZWN0KCkpIHsKKyAgICAgICAgY29tYmluZWRUcmFuc2Zvcm0gPSBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCgpOworICAgICAgICBmb3IgKExheWVyVHlwZSogYW5jZXN0b3IgPSBmaW5kRmlyc3RD
b250YWluZXJPclJlbmRlclN1cmZhY2VBbmNlc3RvcihsYXllci0+cGFyZW50KCkpOyBhbmNlc3Rv
cjsgYW5jZXN0b3IgPSBmaW5kRmlyc3RDb250YWluZXJPclJlbmRlclN1cmZhY2VBbmNlc3Rvcihh
bmNlc3Rvci0+cGFyZW50KCkpKSB7CisgICAgICAgICAgICBMYXllclR5cGUqIGNsaXBMYXllcjsK
KyAgICAgICAgICAgIGlmIChhbmNlc3Rvci0+aXNDb250YWluZXJMYXllcigpICYmIChjbGlwTGF5
ZXIgPSBhbmNlc3Rvci0+cGFyZW50KCkpKSB7CisgICAgICAgICAgICAgICAgRmxvYXRTaXplIHNj
cm9sbERlbHRhID0gYW5jZXN0b3ItPnNjcm9sbERlbHRhKCk7CisgICAgICAgICAgICAgICAgVHJh
bnNmb3JtYXRpb25NYXRyaXggY2xpcE1hdHJpeCA9IGNsaXBMYXllci0+ZHJhd1RyYW5zZm9ybSgp
OworICAgICAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGRlc2NlbmRhbnRNYXRyaXgg
PSBjbGlwTWF0cml4LmludmVyc2UoKSAqIHBhcmVudE1hdHJpeDsKKyAgICAgICAgICAgICAgICBj
bGlwTWF0cml4LnRyYW5zbGF0ZShzY3JvbGxEZWx0YS53aWR0aCgpLCBzY3JvbGxEZWx0YS5oZWln
aHQoKSk7CisgICAgICAgICAgICAgICAgY29tYmluZWRUcmFuc2Zvcm0gKj0gY2xpcE1hdHJpeCAq
IGRlc2NlbmRhbnRNYXRyaXg7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAoYW5jZXN0b3ItPnJlbmRlclN1cmZhY2UoKSAmJiAoY2xpcExheWVy
ID0gYW5jZXN0b3ItPnBhcmVudCgpKSkgeworICAgICAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4IHJlbmRlclN1cmZhY2VNYXRyaXggPSBhbmNlc3Rvci0+dHJhbnNmb3JtKCkuaW52ZXJz
ZSgpOworICAgICAgICAgICAgICAgIGNvbWJpbmVkVHJhbnNmb3JtICo9IHJlbmRlclN1cmZhY2VN
YXRyaXg7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKICAgICBjb21iaW5lZFRy
YW5zZm9ybSA9IGNvbWJpbmVkVHJhbnNmb3JtLm11bHRpcGx5KGxheWVyTG9jYWxUcmFuc2Zvcm0p
OwogCiAgICAgYm9vbCBhbmltYXRpbmdUcmFuc2Zvcm1Ub1RhcmdldCA9IGxheWVyLT50cmFuc2Zv
cm1Jc0FuaW1hdGluZygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAKaW5kZXggZDI0M2FlZTRhZjE2NjRi
MDU5ODk1YjY2NmQ2Yzg1Mjk1Yzg4YmY5YS4uYTllZmE2NWU5OWYwMGVjZDZhYjc4NjZlZGJhZGJh
ZDM3NzQ4ZGJiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xh
eWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwCkBAIC0zMiw3ICszMiw5IEBACiAjaW5j
bHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKICNpbmNsdWRlICJUcmFuc2xhdGVUcmFuc2Zv
cm1PcGVyYXRpb24uaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5o
IgorI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NNYXRoVXRpbC5o
IgorI2luY2x1ZGUgImNjL0NDU2luZ2xlVGhyZWFkUHJveHkuaCIKIAogI2luY2x1ZGUgPGdtb2Nr
L2dtb2NrLmg+CiAjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KQEAgLTU4MSw2ICs1ODMsMTAyIEBA
IFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5UmVuZGVyU3VyZmFjZUxpc3RG
b3JUcmFuc3BhcmVudENoaWxkKQogICAgIEVYUEVDVF9FUShwYXJlbnQtPmRyYXdhYmxlQ29udGVu
dFJlY3QoKSwgSW50UmVjdCgpKTsKIH0KIAorVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0
LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yRml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3QpCit7
CisgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIHNjb3BlZEltcGxUaHJlYWQ7CisKKyAgICBP
d25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDEpOworICAgIE93
blB0cjxDQ0xheWVySW1wbD4gY2hpbGQgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDIpOworICAgIE93
blB0cjxDQ0xheWVySW1wbD4gZ3JhbmRDaGlsZCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMyk7CisK
KyAgICByb290LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAgcm9vdC0+c2V0QW5jaG9yUG9p
bnQoRmxvYXRQb2ludCgwLCAwKSk7CisgICAgcm9vdC0+c2V0Qm91bmRzKEludFNpemUoMTAwLCAx
MDApKTsKKworICAgIGNoaWxkLT5zZXRCb3VuZHMoSW50U2l6ZSgxMDAsIDEwMCkpOworICAgIGNo
aWxkLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAsIDApKTsKKyAgICBjaGlsZC0+c2V0U2Ny
b2xsRGVsdGEoSW50U2l6ZSgxMCwgMTApKTsKKyAgICBjaGlsZC0+c2V0SXNDb250YWluZXJMYXll
cih0cnVlKTsKKworICAgIGdyYW5kQ2hpbGQtPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoMCwg
MCkpOworICAgIGdyYW5kQ2hpbGQtPnNldEJvdW5kcyhJbnRTaXplKDEwMCwgMTAwKSk7CisgICAg
Z3JhbmRDaGlsZC0+c2V0Rml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3QodHJ1ZSk7CisK
KyAgICBjaGlsZC0+YWRkQ2hpbGQoZ3JhbmRDaGlsZC5yZWxlYXNlKCkpOworICAgIHJvb3QtPmFk
ZENoaWxkKGNoaWxkLnJlbGVhc2UoKSk7CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVu
dGl0eU1hdHJpeDsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjaGlsZFRyYW5zZm9ybWF0aW9u
TWF0cml4OworICAgIGNoaWxkVHJhbnNmb3JtYXRpb25NYXRyaXgudHJhbnNsYXRlKDQwLCA0MCk7
CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggZ3JhbmRDaGlsZFRyYW5zZm9ybWF0aW9uTWF0cml4
OworICAgIGdyYW5kQ2hpbGRUcmFuc2Zvcm1hdGlvbk1hdHJpeC50cmFuc2xhdGUoNTAsIDUwKTsK
KworICAgIFZlY3RvcjxDQ0xheWVySW1wbCo+IGR1bW15UmVuZGVyU3VyZmFjZUxheWVyTGlzdDsK
KyAgICBWZWN0b3I8Q0NMYXllckltcGwqPiBkdW1teUxheWVyTGlzdDsKKyAgICBpbnQgZHVtbXlN
YXhUZXh0dXJlU2l6ZSA9IDUxMjsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0
ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShyb290LmdldCgpLCByb290LmdldCgpLCBpZGVu
dGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIGR1bW15UmVuZGVyU3VyZmFjZUxheWVyTGlzdCwg
ZHVtbXlMYXllckxpc3QsIDAsIGR1bW15TWF4VGV4dHVyZVNpemUpOworCisgICAgeworICAgICAg
ICBDQ0xheWVySW1wbCogY2hpbGQgPSBDQ0xheWVyVHJlZUhvc3RDb21tb246OmZpbmRMYXllcklu
U3VidHJlZShyb290LmdldCgpLCAyKTsKKyAgICAgICAgQ0NMYXllckltcGwqIGdyYW5kQ2hpbGQg
PSBDQ0xheWVyVHJlZUhvc3RDb21tb246OmZpbmRMYXllckluU3VidHJlZShyb290LmdldCgpLCAz
KTsKKworICAgICAgICAvLyBUaGUgY2hpbGQgbGF5ZXIgc2hvdWxkIGdldCBhIHRyYW5zbGF0aW9u
LgorICAgICAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGNoaWxkVHJhbnNmb3Jt
YXRpb25NYXRyaXgsIGNoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworCisgICAgICAgIC8vIFRoZSBj
aGlsZCBsYXllciBzaG91bGQgc3RheSBmaXhlZCB0byB0aGUgcm9vdC4KKyAgICAgICAgRVhQRUNU
X1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShncmFuZENoaWxkVHJhbnNmb3JtYXRpb25NYXRyaXgs
IGdyYW5kQ2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgfQorfQorCitURVNUKENDTGF5ZXJU
cmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JGaXhlZFBvc2l0aW9uV2l0aElu
dGVybWVkaWF0ZVJlbmRlclN1cmZhY2UpCit7CisgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFk
IHNjb3BlZEltcGxUaHJlYWQ7CisKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xh
eWVySW1wbDo6Y3JlYXRlKDEpOworICAgIE93blB0cjxDQ0xheWVySW1wbD4gY2hpbGQgPSBDQ0xh
eWVySW1wbDo6Y3JlYXRlKDIpOworICAgIE93blB0cjxDQ0xheWVySW1wbD4gZ3JhbmRDaGlsZCA9
IENDTGF5ZXJJbXBsOjpjcmVhdGUoMyk7CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCByZW5k
ZXJTdXJmYWNlVHJhbnNmb3JtOworICAgIHJlbmRlclN1cmZhY2VUcmFuc2Zvcm0udHJhbnNsYXRl
KDIwMCwgMTAwKTsKKyAgICByZW5kZXJTdXJmYWNlVHJhbnNmb3JtLnJvdGF0ZSgxMCk7CisKKyAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBmaXhlZFRyYW5zZm9ybTsKKyAgICBmaXhlZFRyYW5zZm9y
bS50cmFuc2xhdGUoNTAsIDIwKTsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNlbnRlclRy
YW5zZm9ybTsKKyAgICBjZW50ZXJUcmFuc2Zvcm0udHJhbnNsYXRlKDUwLCA1MCk7CisKKyAgICBy
b290LT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAsIDApKTsKKyAgICByb290LT5zZXRCb3Vu
ZHMoSW50U2l6ZSgxMDAsIDEwMCkpOworCisgICAgY2hpbGQtPnNldEJvdW5kcyhJbnRTaXplKDEw
MCwgMTAwKSk7CisgICAgY2hpbGQtPnNldFRyYW5zZm9ybShyZW5kZXJTdXJmYWNlVHJhbnNmb3Jt
KTsKKyAgICBjaGlsZC0+c2V0T3BhY2l0eSgwLjUpOworCisgICAgZ3JhbmRDaGlsZC0+c2V0QW5j
aG9yUG9pbnQoRmxvYXRQb2ludCgwLCAwKSk7CisgICAgZ3JhbmRDaGlsZC0+c2V0Qm91bmRzKElu
dFNpemUoMTAwLCAxMDApKTsKKyAgICBncmFuZENoaWxkLT5zZXRGaXhlZFRvQ29udGFpbmVyTGF5
ZXJWaXNpYmxlUmVjdCh0cnVlKTsKKyAgICBncmFuZENoaWxkLT5zZXREcmF3c0NvbnRlbnQodHJ1
ZSk7CisgICAgZ3JhbmRDaGlsZC0+c2V0VHJhbnNmb3JtKGZpeGVkVHJhbnNmb3JtKTsKKworICAg
IGNoaWxkLT5hZGRDaGlsZChncmFuZENoaWxkLnJlbGVhc2UoKSk7CisgICAgcm9vdC0+YWRkQ2hp
bGQoY2hpbGQucmVsZWFzZSgpKTsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5
TWF0cml4OworICAgIFZlY3RvcjxDQ0xheWVySW1wbCo+IGR1bW15UmVuZGVyU3VyZmFjZUxheWVy
TGlzdDsKKyAgICBWZWN0b3I8Q0NMYXllckltcGwqPiBkdW1teUxheWVyTGlzdDsKKyAgICBpbnQg
ZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNh
bGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShyb290LmdldCgpLCByb290LmdldCgp
LCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIGR1bW15UmVuZGVyU3VyZmFjZUxheWVy
TGlzdCwgZHVtbXlMYXllckxpc3QsIDAsIGR1bW15TWF4VGV4dHVyZVNpemUpOworCisgICAgewor
ICAgICAgICBDQ0xheWVySW1wbCogZ3JhbmRDaGlsZCA9IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6
ZmluZExheWVySW5TdWJ0cmVlKHJvb3QuZ2V0KCksIDMpOworCisgICAgICAgIC8vIFRoZSBmaXhl
ZCBsYXllcidzIHRyYW5zZm9ybSBzaG91bGQgaGF2ZSB0aGUgZW5jbG9zaW5nIHJlbmRlciBzdXJm
YWNlJ3MgdHJhbnNmb3JtIGNhbmNlbGxlZCBvdXQuCisgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IGNvbWJpbmVkVHJhbnNmb3JtID0gcmVuZGVyU3VyZmFjZVRyYW5zZm9ybS5pbnZlcnNlKCkg
KiBmaXhlZFRyYW5zZm9ybSAqIGNlbnRlclRyYW5zZm9ybTsKKyAgICAgICAgRVhQRUNUX1RSQU5T
Rk9STUFUSU9OX01BVFJJWF9FUShjb21iaW5lZFRyYW5zZm9ybSwgZ3JhbmRDaGlsZC0+ZHJhd1Ry
YW5zZm9ybSgpKTsKKyAgICB9Cit9CisKIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwg
dmVyaWZ5Q2xpcFJlY3RDdWxsc1JlbmRlclN1cmZhY2VzKQogewogICAgIC8vIFRoZSBlbnRpcmUg
c3VidHJlZSBvZiBsYXllcnMgdGhhdCBhcmUgb3V0c2lkZSB0aGUgY2xpcFJlY3Qgc2hvdWxkIGJl
IGN1bGxlZCBhd2F5LAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>145072</attachid>
            <date>2012-05-31 06:17:39 -0700</date>
            <delta_ts>2012-06-01 12:08:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70103-20120531141737.patch</filename>
            <type>text/plain</type>
            <size>16666</size>
            <attacher name="Sami Kyostila">skyostil</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5MDgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDZlMzlhZWMyMWU1ZDgx
ZWI1MzJjOWZkY2YxY2VkNDk1NWY0MjBkMS4uYmM3YTM4YjQxN2M2ZWQ2YjE2NzYxNDhiNDAwZmJk
MzFjYzY0ZjdhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQ2IEBACiAyMDEyLTA1LTE3ICBTYW1p
IEt5b3N0aWxhICA8c2t5b3N0aWxAY2hyb21pdW0ub3JnPgogCisgICAgICAgIFtjaHJvbWl1bV0g
SW1wbGVtZW50IHBvc2l0aW9uOmZpeGVkIGluIGNvbXBvc2l0b3IgdGhyZWFkCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDEwMworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW50cm9kdWNl
cyB0d28gbmV3IGxheWVycyBmbGFnczogaXNDb250YWluZXJMYXllcigpIGFuZAorICAgICAgICBm
aXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdCgpLiBUaGlzIGFsbG93cyBsYXllcnMgdG8g
c3RheSBmaXhlZAorICAgICAgICByZWxhdGl2ZSB0byB0aGVpciBhbmNlc3RvciBjb250YWluZXIg
bGF5ZXJzIHdoaWxlIHRoZSBjb21wb3NpdG9yIHRocmVhZAorICAgICAgICBzY3JvbGxzLgorCisg
ICAgICAgIE9yaWdpbmFsIHBhdGNoIGJ5IEFscGhhIExhbS4KKworICAgICAgICBUZXN0czogdmVy
aWZ5VHJhbnNmb3Jtc0ZvckZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0LCB2ZXJpZnlU
cmFuc2Zvcm1zRm9yRml4ZWRQb3NpdGlvbldpdGhJbnRlcm1lZGlhdGVSZW5kZXJTdXJmYWNlCisK
KyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29yZGluYXRvckNo
cm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRM
YXllcklzQ29udGFpbmVyRm9yRml4ZWRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxpbmdDb29yZGluYXRvcjo6c2V0TGF5ZXJJc0ZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVS
ZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVt
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OkxheWVyQ2hyb21pdW0pOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0SXNDb250YWluZXJMYXllcik6CisgICAgICAg
IChXZWJDb3JlOjpMYXllckNocm9taXVtOjppc0NvbnRhaW5lckxheWVyKToKKyAgICAgICAgKExh
eWVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0Rml4ZWRU
b0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJv
bWl1bTo6Zml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3QpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJJbXBsOjpDQ0xheWVySW1wbCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJ
bXBsOjpzZXRJc0NvbnRhaW5lckxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBs
Ojppc0NvbnRhaW5lckxheWVyKToKKyAgICAgICAgKENDTGF5ZXJJbXBsKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJJbXBsOjpzZXRGaXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6Zml4ZWRUb0NvbnRhaW5lckxheWVyVmlz
aWJsZVJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdENvbW1vbi5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OmZpbmRGaXJzdENvbnRhaW5lck9yUmVuZGVyU3VyZmFjZUFuY2VzdG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eUludGVybmFsKToK
KworMjAxMi0wNC0yNyAgU2FtaSBLeW9zdGlsYSAgPHNreW9zdGlsQGNocm9taXVtLm9yZz4KKwog
ICAgICAgICBSZWdpc3RlciBmaXhlZCBwb3NpdGlvbiBsYXllcnMgd2l0aCBTY3JvbGxpbmdDb29y
ZGluYXRvcgogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
Nzg4NjQKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY2hyb21p
dW0vU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtLmNwcAppbmRl
eCBjMmIxZTlkM2E1MTBiM2Q0Y2U5MGI5ZjUyYmJlNDYzYTAxODhmNTM3Li45NjYxNWRlZDMzNDIw
MGZlMWEzMjk2ZjQxN2VjNTg4OTEyYjgyMDFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29y
ZGluYXRvckNocm9taXVtLmNwcApAQCAtMTY0LDEyICsxNjQsMTQgQEAgdm9pZCBTY3JvbGxpbmdD
b29yZGluYXRvcjo6c2V0U2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVh
ZChib29sIHMKIAogdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0TGF5ZXJJc0NvbnRhaW5l
ckZvckZpeGVkUG9zaXRpb24oR3JhcGhpY3NMYXllciogbGF5ZXIsIGJvb2wgZW5hYmxlKQogewot
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQhCisgICAgaWYgKExheWVyQ2hyb21pdW0qIHBsYXRmb3Jt
TGF5ZXIgPSBsYXllci0+cGxhdGZvcm1MYXllcigpKQorICAgICAgICBwbGF0Zm9ybUxheWVyLT5z
ZXRJc0NvbnRhaW5lckxheWVyKGVuYWJsZSk7CiB9CiAKIHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0
b3I6OnNldExheWVySXNGaXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdChHcmFwaGljc0xh
eWVyKiBsYXllciwgYm9vbCBlbmFibGUpCiB7Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCEKKyAg
ICBpZiAoTGF5ZXJDaHJvbWl1bSogcGxhdGZvcm1MYXllciA9IGxheWVyLT5wbGF0Zm9ybUxheWVy
KCkpCisgICAgICAgIHBsYXRmb3JtTGF5ZXItPnNldEZpeGVkVG9Db250YWluZXJMYXllclZpc2li
bGVSZWN0KGVuYWJsZSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggNzQ0NTlh
ODUxZDFhYzI2YWVlYTg0MjFhNDNlMTVmODNjZjQxZDAzMC4uNjU2YzFmMDE3OTJhNTgzMTY2MDEw
YzEwNTUyY2U2NWUzOWE5ZDFkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTcxLDYgKzcx
LDggQEAgTGF5ZXJDaHJvbWl1bTo6TGF5ZXJDaHJvbWl1bSgpCiAgICAgLCBtX2RlYnVnQm9yZGVy
V2lkdGgoMCkKICAgICAsIG1fb3BhY2l0eSgxLjApCiAgICAgLCBtX2FuY2hvclBvaW50WigwKQor
ICAgICwgbV9pc0NvbnRhaW5lckxheWVyKGZhbHNlKQorICAgICwgbV9maXhlZFRvQ29udGFpbmVy
TGF5ZXJWaXNpYmxlUmVjdChmYWxzZSkKICAgICAsIG1faXNEcmF3YWJsZShmYWxzZSkKICAgICAs
IG1fbWFza3NUb0JvdW5kcyhmYWxzZSkKICAgICAsIG1fb3BhcXVlKGZhbHNlKQpAQCAtNTA1LDYg
KzUwNyw4IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyhDQ0xheWVySW1w
bCogbGF5ZXIpCiAgICAgaWYgKCFvcGFjaXR5SXNBbmltYXRpbmcoKSkKICAgICAgICAgbGF5ZXIt
PnNldE9wYWNpdHkobV9vcGFjaXR5KTsKICAgICBsYXllci0+c2V0UG9zaXRpb24obV9wb3NpdGlv
bik7CisgICAgbGF5ZXItPnNldElzQ29udGFpbmVyTGF5ZXIobV9pc0NvbnRhaW5lckxheWVyKTsK
KyAgICBsYXllci0+c2V0Rml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3QobV9maXhlZFRv
Q29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdCk7CiAgICAgbGF5ZXItPnNldFByZXNlcnZlczNEKHBy
ZXNlcnZlczNEKCkpOwogICAgIGxheWVyLT5zZXRTY3JvbGxQb3NpdGlvbihtX3Njcm9sbFBvc2l0
aW9uKTsKICAgICBsYXllci0+c2V0U3VibGF5ZXJUcmFuc2Zvcm0obV9zdWJsYXllclRyYW5zZm9y
bSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllckNocm9taXVtLmgKaW5kZXggOWJlMDI3OWUyYWViY2Q3Y2RjN2M2OGJkMDI1ZWJl
MDg0MWMxNzVkMy4uZWEzYWQzZjRkN2M3MDIxM2JjM2Y2MjM0ZmY0ODk4ZGJmMjViZmQ1MiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJD
aHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyQ2hyb21pdW0uaApAQCAtMTMwLDYgKzEzMCwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBz
ZXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50Jik7CiAgICAgRmxvYXRQb2ludCBwb3NpdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb247IH0KIAorICAgIHZvaWQgc2V0SXNDb250YWluZXJM
YXllcihib29sIGlzQ29udGFpbmVyTGF5ZXIpIHsgbV9pc0NvbnRhaW5lckxheWVyID0gaXNDb250
YWluZXJMYXllcjsgfQorICAgIGJvb2wgaXNDb250YWluZXJMYXllcigpIGNvbnN0IHsgcmV0dXJu
IG1faXNDb250YWluZXJMYXllcjsgfQorCisgICAgdm9pZCBzZXRGaXhlZFRvQ29udGFpbmVyTGF5
ZXJWaXNpYmxlUmVjdChib29sIGZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0KSB7IG1f
Zml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3QgPSBmaXhlZFRvQ29udGFpbmVyTGF5ZXJW
aXNpYmxlUmVjdDsgc2V0TmVlZHNDb21taXQoKTsgfQorICAgIGJvb2wgZml4ZWRUb0NvbnRhaW5l
ckxheWVyVmlzaWJsZVJlY3QoKSBjb25zdCB7IHJldHVybiBtX2ZpeGVkVG9Db250YWluZXJMYXll
clZpc2libGVSZWN0OyB9CiAgICAgdm9pZCBzZXRTdWJsYXllclRyYW5zZm9ybShjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYpOwogICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBzdWJs
YXllclRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fc3VibGF5ZXJUcmFuc2Zvcm07IH0KIApA
QCAtMzIzLDYgKzMyOCw4IEBAIHByaXZhdGU6CiAgICAgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRp
b25zIG1fZmlsdGVyczsKICAgICBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMgbV9iYWNrZ3Jv
dW5kRmlsdGVyczsKICAgICBmbG9hdCBtX2FuY2hvclBvaW50WjsKKyAgICBib29sIG1faXNDb250
YWluZXJMYXllcjsKKyAgICBib29sIG1fZml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3Q7
CiAgICAgYm9vbCBtX2lzRHJhd2FibGU7CiAgICAgYm9vbCBtX21hc2tzVG9Cb3VuZHM7CiAgICAg
Ym9vbCBtX29wYXF1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAppbmRleCA2ZDgwNjg0ZjY2NGYw
MjVkZjUzNmE3MGVlZGZkNDQ1YmZiODM0NGY0Li44YzA5M2YxYTNhZmY4MGQwOWY5OWZhNzA1YWEy
M2RiNGFkNzQ3MTliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCkBAIC02MSw2ICs2MSw4IEBA
IENDTGF5ZXJJbXBsOjpDQ0xheWVySW1wbChpbnQgaWQpCiAgICAgLCBtX2lzTm9uQ29tcG9zaXRl
ZENvbnRlbnQoZmFsc2UpCiAgICAgLCBtX2RyYXdzQ29udGVudChmYWxzZSkKICAgICAsIG1fZm9y
Y2VSZW5kZXJTdXJmYWNlKGZhbHNlKQorICAgICwgbV9pc0NvbnRhaW5lckxheWVyKGZhbHNlKQor
ICAgICwgbV9maXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdChmYWxzZSkKICAgICAsIG1f
cGFnZVNjYWxlRGVsdGEoMSkKICAgICAsIG1fdGFyZ2V0UmVuZGVyU3VyZmFjZSgwKQogICAgICwg
bV9kcmF3RGVwdGgoMCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCmluZGV4IGJiNzVhODllYmFkM2Y1YWFh
Mzk4NTJkNDRkOTg0YTgyMTE5Yjk2ZjAuLjliYzU4ZWJlNjRhYmJlYTBiOWJmMWY1YWRmY2E2MWQ4
YWIwYzQ5YWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaApAQCAtMTI3LDYgKzEyNywxMiBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50Jik7CiAgICAgY29uc3Qg
RmxvYXRQb2ludCYgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9CiAKKyAg
ICB2b2lkIHNldElzQ29udGFpbmVyTGF5ZXIoYm9vbCBpc0NvbnRhaW5lckxheWVyKSB7IG1faXND
b250YWluZXJMYXllciA9IGlzQ29udGFpbmVyTGF5ZXI7IH0KKyAgICBib29sIGlzQ29udGFpbmVy
TGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2lzQ29udGFpbmVyTGF5ZXI7IH0KKworICAgIHZvaWQg
c2V0Rml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3QoYm9vbCBmaXhlZFRvQ29udGFpbmVy
TGF5ZXJWaXNpYmxlUmVjdCA9IHRydWUpIHsgbV9maXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxl
UmVjdCA9IGZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0O30KKyAgICBib29sIGZpeGVk
VG9Db250YWluZXJMYXllclZpc2libGVSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9maXhlZFRvQ29u
dGFpbmVyTGF5ZXJWaXNpYmxlUmVjdDsgfQorCiAgICAgdm9pZCBzZXRQcmVzZXJ2ZXMzRChib29s
KTsKICAgICBib29sIHByZXNlcnZlczNEKCkgY29uc3QgeyByZXR1cm4gbV9wcmVzZXJ2ZXMzRDsg
fQogCkBAIC0zMTIsNiArMzE4LDExIEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2RyYXdzQ29udGVu
dDsKICAgICBib29sIG1fZm9yY2VSZW5kZXJTdXJmYWNlOwogCisgICAgLy8gU2V0IGZvciB0aGUg
bGF5ZXIgdGhhdCBvdGhlciBsYXllcnMgYXJlIGZpeGVkIHRvLgorICAgIGJvb2wgbV9pc0NvbnRh
aW5lckxheWVyOworICAgIC8vIFNldCBmb3IgdGhlIGxheWVyIHRoYXQgaGFzIHBvc2l0aW9uIGZp
eGVkIHRvIHRoZSBjb250YWluZXIgbGF5ZXIncyB2aXNpYmxlIHJlY3QuCisgICAgYm9vbCBtX2Zp
eGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0OworCiAgICAgRmxvYXRTaXplIG1fc2Nyb2xs
RGVsdGE7CiAgICAgSW50U2l6ZSBtX3NlbnRTY3JvbGxEZWx0YTsKICAgICBJbnRTaXplIG1fbWF4
U2Nyb2xsUG9zaXRpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNw
cAppbmRleCAyYTBmNzE4MDM5MjIyNmY1ZTRhMjgwNzkyOGFmNTdmNDU2ZWFmNjg4Li45NTM2ZWUw
MzI5MWU4MDEzYzNkMTEwYzU2YTAwZDEyZDFkYjFjYjNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAKQEAgLTIxMSw2ICsyMTEsMTYgQEAgc3RhdGljIGJvb2wg
bGF5ZXJTaG91bGRCZVNraXBwZWQoTGF5ZXJUeXBlKiBsYXllcikKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZT4KK3N0YXRpYyBMYXllclR5cGUqIGZp
bmRGaXJzdENvbnRhaW5lck9yUmVuZGVyU3VyZmFjZUFuY2VzdG9yKExheWVyVHlwZSogbGF5ZXIp
Cit7CisgICAgaWYgKCFsYXllcikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKGxheWVyLT5p
c0NvbnRhaW5lckxheWVyKCkgfHwgbGF5ZXItPnJlbmRlclN1cmZhY2UoKSkKKyAgICAgICAgcmV0
dXJuIGxheWVyOworICAgIHJldHVybiBmaW5kRmlyc3RDb250YWluZXJPclJlbmRlclN1cmZhY2VB
bmNlc3RvcihsYXllci0+cGFyZW50KCkpOworfQorCiBzdGF0aWMgaW5saW5lIGJvb2wgc3VidHJl
ZVNob3VsZEJlU2tpcHBlZChDQ0xheWVySW1wbCogbGF5ZXIpCiB7CiAgICAgLy8gVGhlIG9wYWNp
dHkgb2YgYSBsYXllciBhbHdheXMgYXBwbGllcyB0byBpdHMgY2hpbGRyZW4gKGVpdGhlciBpbXBs
aWNpdGx5CkBAIC00MTAsNiArNDIwLDUxIEBAIHN0YXRpYyBib29sIGNhbGN1bGF0ZURyYXdUcmFu
c2Zvcm1zQW5kVmlzaWJpbGl0eUludGVybmFsKExheWVyVHlwZSogbGF5ZXIsIExheWVyCiAgICAg
bGF5ZXJMb2NhbFRyYW5zZm9ybS50cmFuc2xhdGUzZChjZW50ZXJPZmZzZXRYLCBjZW50ZXJPZmZz
ZXRZLCAtbGF5ZXItPmFuY2hvclBvaW50WigpKTsKIAogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IGNvbWJpbmVkVHJhbnNmb3JtID0gcGFyZW50TWF0cml4OworCisgICAgLy8gVGhpcyBpcyBhIHNw
ZWNpYWwgY2FzZSBmb3IgYSBsYXllciB0aGF0IGlzIGZpeGVkIHRvIHRoZSBjb250YWluZXIgbGF5
ZXIncyB2aXNpYmxlIHJlY3RhbmdsZS4KKyAgICAvLyBUaGVyZSBhcmUgYSBjb3VwbGUgb2YgYXNz
dW1wdGlvbnMgaGVyZToKKyAgICAvLyAxLiBBIGNvbnRhaW5lciBsYXllciBpcyB0aGUgc2Nyb2xs
aW5nIGxheWVyIGFuZCBvbmx5IGhhcyB0cmFuc2xhdGlvbiB0cmFuc2Zvcm1hdGlvbi4KKyAgICAv
LyAyLiBBIGNvbnRhaW5lciBsYXllcidzIHBhcmVudCBsYXllciBpcyBhIGNsaXAgbGF5ZXIuCisg
ICAgLy8KKyAgICAvLyBHaXZlbiB0aGF0IHdlIGNhbiBkZWNvbXBvc2UgdGhlIHRyYW5zZm9ybWF0
aW9uIG1hdHJpeCBhcyB0aGUgZm9sbG93aW5nOgorICAgIC8vCisgICAgLy8gICAgICAgIE1bcGFy
ZW50XSA9IE1bY2xpcF0gKiBUcltjb250YWluZXJdICogTVtkZXNjZW5kYW50XQorICAgIC8vCisg
ICAgLy8gd2hlcmUgTVtkZXNjZW5kYW50XSBpcyB0aGUgdG90YWwgdHJhbnNmb3JtYXRpb24gbWF0
cml4IGZyb20gY29udGFpbmVyIGxheWVyJ3MgY29vcmRpbmF0ZQorICAgIC8vIHNwYWNlIHRvIHRo
ZSBzcGFjZSBvZiBwYXJlbnRNYXRyaXguCisgICAgLy8KKyAgICAvLyBBbmQgdGh1czoKKyAgICAv
LworICAgIC8vICAgICAgICBUcltjb250YWluZXJdICogTVtkZXNjZW5kYW50XSA9IE1bY2xpcF0g
XiAtMSAqIE1bcGFyZW50XQorICAgIC8vCisgICAgLy8gQW5kIHRoZSB0cmFuc2Zvcm1hdGlvbiBt
YXRyaXggZm9yIHRoaXMgbGF5ZXIgd2l0aG91dCBjb250YWluZXIncyBzY3JvbGwgYmVjb21lczoK
KyAgICAvLworICAgIC8vICAgICAgICBNW2NsaXBdICogLVRyW2NvbnRhaW5lcl0gKiBUcltjb250
YWluZXJdICogTVtkZXNjZW5kYW50XSA9IE1bY2xpcF0gKiAtVHJbY29udGFpbmVyXSAqIE1bY2xp
cF0gXiAtMSAqIE1bcGFyZW50XQorICAgIC8vCisgICAgLy8gSWYgdGhlcmUgaXMgYW4gaW50ZXJt
ZWRpYXRlIHJlbmRlciBzdXJmYWNlIGxheWVyIGJlZm9yZSB3ZSBmaW5kIHRoZSBjb250YWluZXIs
IHdlIG11bHRpcGx5IHRoZQorICAgIC8vIGNvbWJpbmVkIHRyYW5zZm9ybSB3aXRoIHRoZSBpbnZl
cnNlIG9mIHRoYXQgbGF5ZXIncyB0cmFuc2Zvcm0uIE5vdGUgdGhhdCB0aGlzIGlzIHVubGlrZWx5
IHRvCisgICAgLy8gb2NjdXIgaW4gcHJhY3RpY2UgYmVjYXVzZSBmaXhlZCBwb3NpdGlvbiBsYXll
cnMgd2lsbCBnZXQgZml4ZWQgdG8gdGhlaXIgZmlyc3QgdHJhbnNmb3JtZWQKKyAgICAvLyBhbmNl
c3Rvci4KKyAgICAvLworICAgIGlmIChsYXllci0+Zml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJs
ZVJlY3QoKSkgeworICAgICAgICBjb21iaW5lZFRyYW5zZm9ybSA9IFRyYW5zZm9ybWF0aW9uTWF0
cml4KCk7CisgICAgICAgIGZvciAoTGF5ZXJUeXBlKiBhbmNlc3RvciA9IGZpbmRGaXJzdENvbnRh
aW5lck9yUmVuZGVyU3VyZmFjZUFuY2VzdG9yKGxheWVyLT5wYXJlbnQoKSk7IGFuY2VzdG9yOyBh
bmNlc3RvciA9IGZpbmRGaXJzdENvbnRhaW5lck9yUmVuZGVyU3VyZmFjZUFuY2VzdG9yKGFuY2Vz
dG9yLT5wYXJlbnQoKSkpIHsKKyAgICAgICAgICAgIExheWVyVHlwZSogY2xpcExheWVyOworICAg
ICAgICAgICAgaWYgKGFuY2VzdG9yLT5pc0NvbnRhaW5lckxheWVyKCkgJiYgKGNsaXBMYXllciA9
IGFuY2VzdG9yLT5wYXJlbnQoKSkpIHsKKyAgICAgICAgICAgICAgICBGbG9hdFNpemUgc2Nyb2xs
RGVsdGEgPSBhbmNlc3Rvci0+c2Nyb2xsRGVsdGEoKTsKKyAgICAgICAgICAgICAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBjbGlwTWF0cml4ID0gY2xpcExheWVyLT5kcmF3VHJhbnNmb3JtKCk7Cisg
ICAgICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggZGVzY2VuZGFudE1hdHJpeCA9IGNs
aXBNYXRyaXguaW52ZXJzZSgpICogcGFyZW50TWF0cml4OworICAgICAgICAgICAgICAgIGNsaXBN
YXRyaXgudHJhbnNsYXRlKHNjcm9sbERlbHRhLndpZHRoKCksIHNjcm9sbERlbHRhLmhlaWdodCgp
KTsKKyAgICAgICAgICAgICAgICBjb21iaW5lZFRyYW5zZm9ybSAqPSBjbGlwTWF0cml4ICogZGVz
Y2VuZGFudE1hdHJpeDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmIChhbmNlc3Rvci0+cmVuZGVyU3VyZmFjZSgpICYmIChjbGlwTGF5ZXIgPSBh
bmNlc3Rvci0+cGFyZW50KCkpKSB7CisgICAgICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggcmVuZGVyU3VyZmFjZU1hdHJpeCA9IGFuY2VzdG9yLT50cmFuc2Zvcm0oKS5pbnZlcnNlKCk7
CisgICAgICAgICAgICAgICAgY29tYmluZWRUcmFuc2Zvcm0gKj0gcmVuZGVyU3VyZmFjZU1hdHJp
eDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwogICAgIGNvbWJpbmVkVHJhbnNm
b3JtID0gY29tYmluZWRUcmFuc2Zvcm0ubXVsdGlwbHkobGF5ZXJMb2NhbFRyYW5zZm9ybSk7CiAK
ICAgICBib29sIGFuaW1hdGluZ1RyYW5zZm9ybVRvVGFyZ2V0ID0gbGF5ZXItPnRyYW5zZm9ybUlz
QW5pbWF0aW5nKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ND
TGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcAppbmRleCAxYzAxYTBjZDQ4NTNhNGEzZDk0
Y2MyMTI5ZDM3YWVmNjgyNzE3ZDNlLi5mOTA1Y2M1NjQ5ZmQxYzQ4ZTM1NmM5NTc2ZmZjOWUyMjJl
OWZlMGM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJU
cmVlSG9zdENvbW1vblRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
Q0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAKQEAgLTMyLDcgKzMyLDkgQEAKICNpbmNsdWRl
ICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogI2luY2x1ZGUgIlRyYW5zbGF0ZVRyYW5zZm9ybU9w
ZXJhdGlvbi5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmgiCisj
aW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKICNpbmNsdWRlICJjYy9DQ01hdGhVdGlsLmgiCisj
aW5jbHVkZSAiY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oIgogCiAjaW5jbHVkZSA8Z21vY2svZ21v
Y2suaD4KICNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgpAQCAtNjEyLDYgKzYxNCwxMDIgQEAgVEVT
VChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlGb3JjZVJlbmRlclN1cmZhY2UpCiAg
ICAgRVhQRUNUX0VRKHJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpLCAwVSk7CiB9CiAKK1RF
U1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvckZpeGVkVG9D
b250YWluZXJMYXllclZpc2libGVSZWN0KQoreworICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVh
ZCBzY29wZWRJbXBsVGhyZWFkOworCisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NM
YXllckltcGw6OmNyZWF0ZSgxKTsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IGNoaWxkID0gQ0NM
YXllckltcGw6OmNyZWF0ZSgyKTsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IGdyYW5kQ2hpbGQg
PSBDQ0xheWVySW1wbDo6Y3JlYXRlKDMpOworCisgICAgcm9vdC0+Y3JlYXRlUmVuZGVyU3VyZmFj
ZSgpOworICAgIHJvb3QtPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoMCwgMCkpOworICAgIHJv
b3QtPnNldEJvdW5kcyhJbnRTaXplKDEwMCwgMTAwKSk7CisKKyAgICBjaGlsZC0+c2V0Qm91bmRz
KEludFNpemUoMTAwLCAxMDApKTsKKyAgICBjaGlsZC0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2lu
dCgwLCAwKSk7CisgICAgY2hpbGQtPnNldFNjcm9sbERlbHRhKEludFNpemUoMTAsIDEwKSk7Cisg
ICAgY2hpbGQtPnNldElzQ29udGFpbmVyTGF5ZXIodHJ1ZSk7CisKKyAgICBncmFuZENoaWxkLT5z
ZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAsIDApKTsKKyAgICBncmFuZENoaWxkLT5zZXRCb3Vu
ZHMoSW50U2l6ZSgxMDAsIDEwMCkpOworICAgIGdyYW5kQ2hpbGQtPnNldEZpeGVkVG9Db250YWlu
ZXJMYXllclZpc2libGVSZWN0KHRydWUpOworCisgICAgY2hpbGQtPmFkZENoaWxkKGdyYW5kQ2hp
bGQucmVsZWFzZSgpKTsKKyAgICByb290LT5hZGRDaGlsZChjaGlsZC5yZWxlYXNlKCkpOworCisg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggY2hpbGRUcmFuc2Zvcm1hdGlvbk1hdHJpeDsKKyAgICBjaGlsZFRyYW5zZm9ybWF0
aW9uTWF0cml4LnRyYW5zbGF0ZSg0MCwgNDApOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGdy
YW5kQ2hpbGRUcmFuc2Zvcm1hdGlvbk1hdHJpeDsKKyAgICBncmFuZENoaWxkVHJhbnNmb3JtYXRp
b25NYXRyaXgudHJhbnNsYXRlKDUwLCA1MCk7CisKKyAgICBWZWN0b3I8Q0NMYXllckltcGwqPiBk
dW1teVJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAgVmVjdG9yPENDTGF5ZXJJbXBsKj4gZHVt
bXlMYXllckxpc3Q7CisgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CisgICAgQ0NM
YXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHko
cm9vdC5nZXQoKSwgcm9vdC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBk
dW1teVJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCAwLCBkdW1teU1heFRl
eHR1cmVTaXplKTsKKworICAgIHsKKyAgICAgICAgQ0NMYXllckltcGwqIGNoaWxkID0gcm9vdC0+
Y2hpbGRyZW4oKVswXS5nZXQoKTsKKyAgICAgICAgQ0NMYXllckltcGwqIGdyYW5kQ2hpbGQgPSBj
aGlsZC0+Y2hpbGRyZW4oKVswXS5nZXQoKTsKKworICAgICAgICAvLyBUaGUgY2hpbGQgbGF5ZXIg
c2hvdWxkIGdldCBhIHRyYW5zbGF0aW9uLgorICAgICAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05f
TUFUUklYX0VRKGNoaWxkVHJhbnNmb3JtYXRpb25NYXRyaXgsIGNoaWxkLT5kcmF3VHJhbnNmb3Jt
KCkpOworCisgICAgICAgIC8vIFRoZSBjaGlsZCBsYXllciBzaG91bGQgc3RheSBmaXhlZCB0byB0
aGUgcm9vdC4KKyAgICAgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShncmFuZENo
aWxkVHJhbnNmb3JtYXRpb25NYXRyaXgsIGdyYW5kQ2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7Cisg
ICAgfQorfQorCitURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVRyYW5zZm9y
bXNGb3JGaXhlZFBvc2l0aW9uV2l0aEludGVybWVkaWF0ZVJlbmRlclN1cmZhY2UpCit7CisgICAg
RGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIHNjb3BlZEltcGxUaHJlYWQ7CisKKyAgICBPd25QdHI8
Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDEpOworICAgIE93blB0cjxD
Q0xheWVySW1wbD4gY2hpbGQgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDIpOworICAgIE93blB0cjxD
Q0xheWVySW1wbD4gZ3JhbmRDaGlsZCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMyk7CisKKyAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCByZW5kZXJTdXJmYWNlVHJhbnNmb3JtOworICAgIHJlbmRlclN1
cmZhY2VUcmFuc2Zvcm0udHJhbnNsYXRlKDIwMCwgMTAwKTsKKyAgICByZW5kZXJTdXJmYWNlVHJh
bnNmb3JtLnJvdGF0ZSgxMCk7CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBmaXhlZFRyYW5z
Zm9ybTsKKyAgICBmaXhlZFRyYW5zZm9ybS50cmFuc2xhdGUoNTAsIDIwKTsKKworICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IGNlbnRlclRyYW5zZm9ybTsKKyAgICBjZW50ZXJUcmFuc2Zvcm0udHJh
bnNsYXRlKDUwLCA1MCk7CisKKyAgICByb290LT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAs
IDApKTsKKyAgICByb290LT5zZXRCb3VuZHMoSW50U2l6ZSgxMDAsIDEwMCkpOworCisgICAgY2hp
bGQtPnNldEJvdW5kcyhJbnRTaXplKDEwMCwgMTAwKSk7CisgICAgY2hpbGQtPnNldFRyYW5zZm9y
bShyZW5kZXJTdXJmYWNlVHJhbnNmb3JtKTsKKyAgICBjaGlsZC0+c2V0T3BhY2l0eSgwLjUpOwor
CisgICAgZ3JhbmRDaGlsZC0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgwLCAwKSk7CisgICAg
Z3JhbmRDaGlsZC0+c2V0Qm91bmRzKEludFNpemUoMTAwLCAxMDApKTsKKyAgICBncmFuZENoaWxk
LT5zZXRGaXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdCh0cnVlKTsKKyAgICBncmFuZENo
aWxkLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgZ3JhbmRDaGlsZC0+c2V0VHJhbnNmb3Jt
KGZpeGVkVHJhbnNmb3JtKTsKKworICAgIGNoaWxkLT5hZGRDaGlsZChncmFuZENoaWxkLnJlbGVh
c2UoKSk7CisgICAgcm9vdC0+YWRkQ2hpbGQoY2hpbGQucmVsZWFzZSgpKTsKKworICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OworICAgIFZlY3RvcjxDQ0xheWVySW1wbCo+
IGR1bW15UmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICBWZWN0b3I8Q0NMYXllckltcGwqPiBk
dW1teUxheWVyTGlzdDsKKyAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKKyAgICBD
Q0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0
eShyb290LmdldCgpLCByb290LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgs
IGR1bW15UmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIDAsIGR1bW15TWF4
VGV4dHVyZVNpemUpOworCisgICAgeworICAgICAgICBDQ0xheWVySW1wbCogZ3JhbmRDaGlsZCA9
IHJvb3QtPmNoaWxkcmVuKClbMF0tPmNoaWxkcmVuKClbMF0uZ2V0KCk7CisKKyAgICAgICAgLy8g
VGhlIGZpeGVkIGxheWVyJ3MgdHJhbnNmb3JtIHNob3VsZCBoYXZlIHRoZSBlbmNsb3NpbmcgcmVu
ZGVyIHN1cmZhY2UncyB0cmFuc2Zvcm0gY2FuY2VsbGVkIG91dC4KKyAgICAgICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggY29tYmluZWRUcmFuc2Zvcm0gPSByZW5kZXJTdXJmYWNlVHJhbnNmb3JtLmlu
dmVyc2UoKSAqIGZpeGVkVHJhbnNmb3JtICogY2VudGVyVHJhbnNmb3JtOworICAgICAgICBFWFBF
Q1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGNvbWJpbmVkVHJhbnNmb3JtLCBncmFuZENoaWxk
LT5kcmF3VHJhbnNmb3JtKCkpOworICAgIH0KK30KKwogVEVTVChDQ0xheWVyVHJlZUhvc3RDb21t
b25UZXN0LCB2ZXJpZnlDbGlwUmVjdEN1bGxzUmVuZGVyU3VyZmFjZXMpCiB7CiAgICAgLy8gVGhl
IGVudGlyZSBzdWJ0cmVlIG9mIGxheWVycyB0aGF0IGFyZSBvdXRzaWRlIHRoZSBjbGlwUmVjdCBz
aG91bGQgYmUgY3VsbGVkIGF3YXksCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>145350</attachid>
            <date>2012-06-01 12:08:49 -0700</date>
            <delta_ts>2012-06-05 17:52:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70103-20120601200847.patch</filename>
            <type>text/plain</type>
            <size>17017</size>
            <attacher name="Sami Kyostila">skyostil</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5MDgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDZlMzlhZWMyMWU1ZDgx
ZWI1MzJjOWZkY2YxY2VkNDk1NWY0MjBkMS4uYmM3YTM4YjQxN2M2ZWQ2YjE2NzYxNDhiNDAwZmJk
MzFjYzY0ZjdhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQ2IEBACiAyMDEyLTA1LTE3ICBTYW1p
IEt5b3N0aWxhICA8c2t5b3N0aWxAY2hyb21pdW0ub3JnPgogCisgICAgICAgIFtjaHJvbWl1bV0g
SW1wbGVtZW50IHBvc2l0aW9uOmZpeGVkIGluIGNvbXBvc2l0b3IgdGhyZWFkCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDEwMworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW50cm9kdWNl
cyB0d28gbmV3IGxheWVycyBmbGFnczogaXNDb250YWluZXJMYXllcigpIGFuZAorICAgICAgICBm
aXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdCgpLiBUaGlzIGFsbG93cyBsYXllcnMgdG8g
c3RheSBmaXhlZAorICAgICAgICByZWxhdGl2ZSB0byB0aGVpciBhbmNlc3RvciBjb250YWluZXIg
bGF5ZXJzIHdoaWxlIHRoZSBjb21wb3NpdG9yIHRocmVhZAorICAgICAgICBzY3JvbGxzLgorCisg
ICAgICAgIE9yaWdpbmFsIHBhdGNoIGJ5IEFscGhhIExhbS4KKworICAgICAgICBUZXN0czogdmVy
aWZ5VHJhbnNmb3Jtc0ZvckZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0LCB2ZXJpZnlU
cmFuc2Zvcm1zRm9yRml4ZWRQb3NpdGlvbldpdGhJbnRlcm1lZGlhdGVSZW5kZXJTdXJmYWNlCisK
KyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29yZGluYXRvckNo
cm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRM
YXllcklzQ29udGFpbmVyRm9yRml4ZWRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxpbmdDb29yZGluYXRvcjo6c2V0TGF5ZXJJc0ZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVS
ZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVt
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OkxheWVyQ2hyb21pdW0pOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0SXNDb250YWluZXJMYXllcik6CisgICAgICAg
IChXZWJDb3JlOjpMYXllckNocm9taXVtOjppc0NvbnRhaW5lckxheWVyKToKKyAgICAgICAgKExh
eWVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0Rml4ZWRU
b0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJv
bWl1bTo6Zml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3QpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJJbXBsOjpDQ0xheWVySW1wbCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJ
bXBsOjpzZXRJc0NvbnRhaW5lckxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBs
Ojppc0NvbnRhaW5lckxheWVyKToKKyAgICAgICAgKENDTGF5ZXJJbXBsKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJJbXBsOjpzZXRGaXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6Zml4ZWRUb0NvbnRhaW5lckxheWVyVmlz
aWJsZVJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdENvbW1vbi5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OmZpbmRGaXJzdENvbnRhaW5lck9yUmVuZGVyU3VyZmFjZUFuY2VzdG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eUludGVybmFsKToK
KworMjAxMi0wNC0yNyAgU2FtaSBLeW9zdGlsYSAgPHNreW9zdGlsQGNocm9taXVtLm9yZz4KKwog
ICAgICAgICBSZWdpc3RlciBmaXhlZCBwb3NpdGlvbiBsYXllcnMgd2l0aCBTY3JvbGxpbmdDb29y
ZGluYXRvcgogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
Nzg4NjQKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY2hyb21p
dW0vU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtLmNwcAppbmRl
eCBjMmIxZTlkM2E1MTBiM2Q0Y2U5MGI5ZjUyYmJlNDYzYTAxODhmNTM3Li45NjYxNWRlZDMzNDIw
MGZlMWEzMjk2ZjQxN2VjNTg4OTEyYjgyMDFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29y
ZGluYXRvckNocm9taXVtLmNwcApAQCAtMTY0LDEyICsxNjQsMTQgQEAgdm9pZCBTY3JvbGxpbmdD
b29yZGluYXRvcjo6c2V0U2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVh
ZChib29sIHMKIAogdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0TGF5ZXJJc0NvbnRhaW5l
ckZvckZpeGVkUG9zaXRpb24oR3JhcGhpY3NMYXllciogbGF5ZXIsIGJvb2wgZW5hYmxlKQogewot
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQhCisgICAgaWYgKExheWVyQ2hyb21pdW0qIHBsYXRmb3Jt
TGF5ZXIgPSBsYXllci0+cGxhdGZvcm1MYXllcigpKQorICAgICAgICBwbGF0Zm9ybUxheWVyLT5z
ZXRJc0NvbnRhaW5lckxheWVyKGVuYWJsZSk7CiB9CiAKIHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0
b3I6OnNldExheWVySXNGaXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdChHcmFwaGljc0xh
eWVyKiBsYXllciwgYm9vbCBlbmFibGUpCiB7Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCEKKyAg
ICBpZiAoTGF5ZXJDaHJvbWl1bSogcGxhdGZvcm1MYXllciA9IGxheWVyLT5wbGF0Zm9ybUxheWVy
KCkpCisgICAgICAgIHBsYXRmb3JtTGF5ZXItPnNldEZpeGVkVG9Db250YWluZXJMYXllclZpc2li
bGVSZWN0KGVuYWJsZSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggNzQ0NTlh
ODUxZDFhYzI2YWVlYTg0MjFhNDNlMTVmODNjZjQxZDAzMC4uNjU2YzFmMDE3OTJhNTgzMTY2MDEw
YzEwNTUyY2U2NWUzOWE5ZDFkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTcxLDYgKzcx
LDggQEAgTGF5ZXJDaHJvbWl1bTo6TGF5ZXJDaHJvbWl1bSgpCiAgICAgLCBtX2RlYnVnQm9yZGVy
V2lkdGgoMCkKICAgICAsIG1fb3BhY2l0eSgxLjApCiAgICAgLCBtX2FuY2hvclBvaW50WigwKQor
ICAgICwgbV9pc0NvbnRhaW5lckxheWVyKGZhbHNlKQorICAgICwgbV9maXhlZFRvQ29udGFpbmVy
TGF5ZXJWaXNpYmxlUmVjdChmYWxzZSkKICAgICAsIG1faXNEcmF3YWJsZShmYWxzZSkKICAgICAs
IG1fbWFza3NUb0JvdW5kcyhmYWxzZSkKICAgICAsIG1fb3BhcXVlKGZhbHNlKQpAQCAtNTA1LDYg
KzUwNyw4IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyhDQ0xheWVySW1w
bCogbGF5ZXIpCiAgICAgaWYgKCFvcGFjaXR5SXNBbmltYXRpbmcoKSkKICAgICAgICAgbGF5ZXIt
PnNldE9wYWNpdHkobV9vcGFjaXR5KTsKICAgICBsYXllci0+c2V0UG9zaXRpb24obV9wb3NpdGlv
bik7CisgICAgbGF5ZXItPnNldElzQ29udGFpbmVyTGF5ZXIobV9pc0NvbnRhaW5lckxheWVyKTsK
KyAgICBsYXllci0+c2V0Rml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3QobV9maXhlZFRv
Q29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdCk7CiAgICAgbGF5ZXItPnNldFByZXNlcnZlczNEKHBy
ZXNlcnZlczNEKCkpOwogICAgIGxheWVyLT5zZXRTY3JvbGxQb3NpdGlvbihtX3Njcm9sbFBvc2l0
aW9uKTsKICAgICBsYXllci0+c2V0U3VibGF5ZXJUcmFuc2Zvcm0obV9zdWJsYXllclRyYW5zZm9y
bSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllckNocm9taXVtLmgKaW5kZXggOWJlMDI3OWUyYWViY2Q3Y2RjN2M2OGJkMDI1ZWJl
MDg0MWMxNzVkMy4uZWEzYWQzZjRkN2M3MDIxM2JjM2Y2MjM0ZmY0ODk4ZGJmMjViZmQ1MiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJD
aHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyQ2hyb21pdW0uaApAQCAtMTMwLDYgKzEzMCwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBz
ZXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50Jik7CiAgICAgRmxvYXRQb2ludCBwb3NpdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb247IH0KIAorICAgIHZvaWQgc2V0SXNDb250YWluZXJM
YXllcihib29sIGlzQ29udGFpbmVyTGF5ZXIpIHsgbV9pc0NvbnRhaW5lckxheWVyID0gaXNDb250
YWluZXJMYXllcjsgfQorICAgIGJvb2wgaXNDb250YWluZXJMYXllcigpIGNvbnN0IHsgcmV0dXJu
IG1faXNDb250YWluZXJMYXllcjsgfQorCisgICAgdm9pZCBzZXRGaXhlZFRvQ29udGFpbmVyTGF5
ZXJWaXNpYmxlUmVjdChib29sIGZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0KSB7IG1f
Zml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3QgPSBmaXhlZFRvQ29udGFpbmVyTGF5ZXJW
aXNpYmxlUmVjdDsgc2V0TmVlZHNDb21taXQoKTsgfQorICAgIGJvb2wgZml4ZWRUb0NvbnRhaW5l
ckxheWVyVmlzaWJsZVJlY3QoKSBjb25zdCB7IHJldHVybiBtX2ZpeGVkVG9Db250YWluZXJMYXll
clZpc2libGVSZWN0OyB9CiAgICAgdm9pZCBzZXRTdWJsYXllclRyYW5zZm9ybShjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYpOwogICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBzdWJs
YXllclRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fc3VibGF5ZXJUcmFuc2Zvcm07IH0KIApA
QCAtMzIzLDYgKzMyOCw4IEBAIHByaXZhdGU6CiAgICAgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRp
b25zIG1fZmlsdGVyczsKICAgICBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMgbV9iYWNrZ3Jv
dW5kRmlsdGVyczsKICAgICBmbG9hdCBtX2FuY2hvclBvaW50WjsKKyAgICBib29sIG1faXNDb250
YWluZXJMYXllcjsKKyAgICBib29sIG1fZml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3Q7
CiAgICAgYm9vbCBtX2lzRHJhd2FibGU7CiAgICAgYm9vbCBtX21hc2tzVG9Cb3VuZHM7CiAgICAg
Ym9vbCBtX29wYXF1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAppbmRleCA2ZDgwNjg0ZjY2NGYw
MjVkZjUzNmE3MGVlZGZkNDQ1YmZiODM0NGY0Li44YzA5M2YxYTNhZmY4MGQwOWY5OWZhNzA1YWEy
M2RiNGFkNzQ3MTliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCkBAIC02MSw2ICs2MSw4IEBA
IENDTGF5ZXJJbXBsOjpDQ0xheWVySW1wbChpbnQgaWQpCiAgICAgLCBtX2lzTm9uQ29tcG9zaXRl
ZENvbnRlbnQoZmFsc2UpCiAgICAgLCBtX2RyYXdzQ29udGVudChmYWxzZSkKICAgICAsIG1fZm9y
Y2VSZW5kZXJTdXJmYWNlKGZhbHNlKQorICAgICwgbV9pc0NvbnRhaW5lckxheWVyKGZhbHNlKQor
ICAgICwgbV9maXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdChmYWxzZSkKICAgICAsIG1f
cGFnZVNjYWxlRGVsdGEoMSkKICAgICAsIG1fdGFyZ2V0UmVuZGVyU3VyZmFjZSgwKQogICAgICwg
bV9kcmF3RGVwdGgoMCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCmluZGV4IGJiNzVhODllYmFkM2Y1YWFh
Mzk4NTJkNDRkOTg0YTgyMTE5Yjk2ZjAuLjliYzU4ZWJlNjRhYmJlYTBiOWJmMWY1YWRmY2E2MWQ4
YWIwYzQ5YWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaApAQCAtMTI3LDYgKzEyNywxMiBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50Jik7CiAgICAgY29uc3Qg
RmxvYXRQb2ludCYgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9CiAKKyAg
ICB2b2lkIHNldElzQ29udGFpbmVyTGF5ZXIoYm9vbCBpc0NvbnRhaW5lckxheWVyKSB7IG1faXND
b250YWluZXJMYXllciA9IGlzQ29udGFpbmVyTGF5ZXI7IH0KKyAgICBib29sIGlzQ29udGFpbmVy
TGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2lzQ29udGFpbmVyTGF5ZXI7IH0KKworICAgIHZvaWQg
c2V0Rml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3QoYm9vbCBmaXhlZFRvQ29udGFpbmVy
TGF5ZXJWaXNpYmxlUmVjdCA9IHRydWUpIHsgbV9maXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxl
UmVjdCA9IGZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0O30KKyAgICBib29sIGZpeGVk
VG9Db250YWluZXJMYXllclZpc2libGVSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9maXhlZFRvQ29u
dGFpbmVyTGF5ZXJWaXNpYmxlUmVjdDsgfQorCiAgICAgdm9pZCBzZXRQcmVzZXJ2ZXMzRChib29s
KTsKICAgICBib29sIHByZXNlcnZlczNEKCkgY29uc3QgeyByZXR1cm4gbV9wcmVzZXJ2ZXMzRDsg
fQogCkBAIC0zMTIsNiArMzE4LDExIEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2RyYXdzQ29udGVu
dDsKICAgICBib29sIG1fZm9yY2VSZW5kZXJTdXJmYWNlOwogCisgICAgLy8gU2V0IGZvciB0aGUg
bGF5ZXIgdGhhdCBvdGhlciBsYXllcnMgYXJlIGZpeGVkIHRvLgorICAgIGJvb2wgbV9pc0NvbnRh
aW5lckxheWVyOworICAgIC8vIFNldCBmb3IgdGhlIGxheWVyIHRoYXQgaGFzIHBvc2l0aW9uIGZp
eGVkIHRvIHRoZSBjb250YWluZXIgbGF5ZXIncyB2aXNpYmxlIHJlY3QuCisgICAgYm9vbCBtX2Zp
eGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0OworCiAgICAgRmxvYXRTaXplIG1fc2Nyb2xs
RGVsdGE7CiAgICAgSW50U2l6ZSBtX3NlbnRTY3JvbGxEZWx0YTsKICAgICBJbnRTaXplIG1fbWF4
U2Nyb2xsUG9zaXRpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNw
cAppbmRleCAyYTBmNzE4MDM5MjIyNmY1ZTRhMjgwNzkyOGFmNTdmNDU2ZWFmNjg4Li4zMDg4ZmM2
MDlkMWQ3MDhlODA0OTQ5NzFjZDg4YzE2ZThlY2Q2MzNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAKQEAgLTIxMSw2ICsyMTEsMTYgQEAgc3RhdGljIGJvb2wg
bGF5ZXJTaG91bGRCZVNraXBwZWQoTGF5ZXJUeXBlKiBsYXllcikKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZT4KK3N0YXRpYyBMYXllclR5cGUqIGZp
bmRGaXJzdENvbnRhaW5lck9yUmVuZGVyU3VyZmFjZUFuY2VzdG9yKExheWVyVHlwZSogbGF5ZXIp
Cit7CisgICAgaWYgKCFsYXllcikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKGxheWVyLT5p
c0NvbnRhaW5lckxheWVyKCkgfHwgbGF5ZXItPnJlbmRlclN1cmZhY2UoKSkKKyAgICAgICAgcmV0
dXJuIGxheWVyOworICAgIHJldHVybiBmaW5kRmlyc3RDb250YWluZXJPclJlbmRlclN1cmZhY2VB
bmNlc3RvcihsYXllci0+cGFyZW50KCkpOworfQorCiBzdGF0aWMgaW5saW5lIGJvb2wgc3VidHJl
ZVNob3VsZEJlU2tpcHBlZChDQ0xheWVySW1wbCogbGF5ZXIpCiB7CiAgICAgLy8gVGhlIG9wYWNp
dHkgb2YgYSBsYXllciBhbHdheXMgYXBwbGllcyB0byBpdHMgY2hpbGRyZW4gKGVpdGhlciBpbXBs
aWNpdGx5CkBAIC00MTAsNiArNDIwLDU0IEBAIHN0YXRpYyBib29sIGNhbGN1bGF0ZURyYXdUcmFu
c2Zvcm1zQW5kVmlzaWJpbGl0eUludGVybmFsKExheWVyVHlwZSogbGF5ZXIsIExheWVyCiAgICAg
bGF5ZXJMb2NhbFRyYW5zZm9ybS50cmFuc2xhdGUzZChjZW50ZXJPZmZzZXRYLCBjZW50ZXJPZmZz
ZXRZLCAtbGF5ZXItPmFuY2hvclBvaW50WigpKTsKIAogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IGNvbWJpbmVkVHJhbnNmb3JtID0gcGFyZW50TWF0cml4OworCisgICAgLy8gVGhpcyBpcyBhIHNw
ZWNpYWwgY2FzZSBmb3IgYSBsYXllciB0aGF0IGlzIGZpeGVkIHRvIHRoZSBjb250YWluZXIgbGF5
ZXIncyB2aXNpYmxlIHJlY3RhbmdsZS4KKyAgICAvLyBUaGVyZSBhcmUgYSBjb3VwbGUgb2YgYXNz
dW1wdGlvbnMgaGVyZToKKyAgICAvLyAxLiBBIGNvbnRhaW5lciBsYXllciBpcyB0aGUgc2Nyb2xs
aW5nIGxheWVyIGFuZCBvbmx5IGhhcyB0cmFuc2xhdGlvbiB0cmFuc2Zvcm1hdGlvbi4KKyAgICAv
LyAyLiBUaGUgY29udGFpbmVyIGxheWVyIGhhcyBhIHBhcmVudCB0aGF0IGRlZmluZXMgdGhlIGNv
b3JkaW5hdGUgc3lzdGVtIGZvciB0aGUgc2Nyb2xsCisgICAgLy8gICAgdHJhbnNsYXRpb24uIEhl
cmUgd2UgY2FsbCBpdCB0aGUgY2xpcCBsYXllciwgYmVjYXVzZSBzY3JvbGxpbmcgbGF5ZXJzIGFy
ZSBnZW5lcmFsbHkKKyAgICAvLyAgICBlbWJlZGRlZCBpbiBvbmUuCisgICAgLy8KKyAgICAvLyBH
aXZlbiB0aGF0IHdlIGNhbiBkZWNvbXBvc2UgdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBhcyB0
aGUgZm9sbG93aW5nOgorICAgIC8vCisgICAgLy8gICAgICAgIE1bcGFyZW50XSA9IE1bY2xpcF0g
KiBUcltjb250YWluZXJdICogTVtkZXNjZW5kYW50XQorICAgIC8vCisgICAgLy8gd2hlcmUgTVtk
ZXNjZW5kYW50XSBpcyB0aGUgdG90YWwgdHJhbnNmb3JtYXRpb24gbWF0cml4IGZyb20gY29udGFp
bmVyIGxheWVyJ3MgY29vcmRpbmF0ZQorICAgIC8vIHNwYWNlIHRvIHRoZSBzcGFjZSBvZiBNW3Bh
cmVudF0uCisgICAgLy8KKyAgICAvLyBBbmQgdGh1czoKKyAgICAvLworICAgIC8vICAgICAgICBU
cltjb250YWluZXJdICogTVtkZXNjZW5kYW50XSA9IE1bY2xpcF0uaW52ZXJzZSgpICogTVtwYXJl
bnRdCisgICAgLy8KKyAgICAvLyBBbmQgdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBmb3IgdGhp
cyBsYXllciB3aXRob3V0IGNvbnRhaW5lcidzIHNjcm9sbCBiZWNvbWVzOgorICAgIC8vCisgICAg
Ly8gICAgICAgIE1bY2xpcF0gKiAtVHJbY29udGFpbmVyXSAqIFRyW2NvbnRhaW5lcl0gKiBNW2Rl
c2NlbmRhbnRdID0gTVtjbGlwXSAqIC1Ucltjb250YWluZXJdICogTVtjbGlwXS5pbnZlcnNlKCkg
KiBNW3BhcmVudF0KKyAgICAvLworICAgIC8vIElmIHRoZXJlIGlzIGFuIGludGVybWVkaWF0ZSBy
ZW5kZXIgc3VyZmFjZSBsYXllciBiZWZvcmUgd2UgZmluZCB0aGUgY29udGFpbmVyLCB3ZSBtdWx0
aXBseSB0aGUKKyAgICAvLyBjb21iaW5lZCB0cmFuc2Zvcm0gd2l0aCB0aGUgaW52ZXJzZSBvZiB0
aGF0IGxheWVyJ3MgdHJhbnNmb3JtLiBOb3RlIHRoYXQgdGhpcyBpcyB1bmxpa2VseSB0bworICAg
IC8vIG9jY3VyIGluIHByYWN0aWNlIGJlY2F1c2UgZml4ZWQgcG9zaXRpb24gbGF5ZXJzIHdpbGwg
Z2V0IGZpeGVkIHRvIHRoZWlyIGZpcnN0IHRyYW5zZm9ybWVkCisgICAgLy8gYW5jZXN0b3IuCisg
ICAgLy8KKyAgICBpZiAobGF5ZXItPmZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0KCkp
IHsKKyAgICAgICAgY29tYmluZWRUcmFuc2Zvcm0gPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpOwor
ICAgICAgICBmb3IgKExheWVyVHlwZSogYW5jZXN0b3IgPSBmaW5kRmlyc3RDb250YWluZXJPclJl
bmRlclN1cmZhY2VBbmNlc3RvcihsYXllci0+cGFyZW50KCkpOyBhbmNlc3RvcjsgYW5jZXN0b3Ig
PSBmaW5kRmlyc3RDb250YWluZXJPclJlbmRlclN1cmZhY2VBbmNlc3RvcihhbmNlc3Rvci0+cGFy
ZW50KCkpKSB7CisgICAgICAgICAgICBMYXllclR5cGUqIGNsaXBMYXllcjsKKyAgICAgICAgICAg
IGlmIChhbmNlc3Rvci0+aXNDb250YWluZXJMYXllcigpICYmIChjbGlwTGF5ZXIgPSBhbmNlc3Rv
ci0+cGFyZW50KCkpKSB7CisgICAgICAgICAgICAgICAgRmxvYXRTaXplIHNjcm9sbERlbHRhID0g
YW5jZXN0b3ItPnNjcm9sbERlbHRhKCk7CisgICAgICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggY2xpcE1hdHJpeCA9IGNsaXBMYXllci0+ZHJhd1RyYW5zZm9ybSgpOworICAgICAgICAg
ICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGRlc2NlbmRhbnRNYXRyaXggPSBjbGlwTWF0cml4
LmludmVyc2UoKSAqIHBhcmVudE1hdHJpeDsKKyAgICAgICAgICAgICAgICBjbGlwTWF0cml4LnRy
YW5zbGF0ZShzY3JvbGxEZWx0YS53aWR0aCgpLCBzY3JvbGxEZWx0YS5oZWlnaHQoKSk7CisgICAg
ICAgICAgICAgICAgY29tYmluZWRUcmFuc2Zvcm0gKj0gY2xpcE1hdHJpeCAqIGRlc2NlbmRhbnRN
YXRyaXg7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAoYW5jZXN0b3ItPnJlbmRlclN1cmZhY2UoKSkgeworICAgICAgICAgICAgICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IHJlbmRlclN1cmZhY2VNYXRyaXggPSBhbmNlc3Rvci0+cmVuZGVyU3Vy
ZmFjZSgpLT5vcmlnaW5UcmFuc2Zvcm0oKTsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogcmVu
ZGVyU3VyZmFjZU1hdHJpeCBhbHNvIGluY2x1ZGVzIHRoZSBzY3JvbGwgb2Zmc2V0LgorICAgICAg
ICAgICAgICAgIGNvbWJpbmVkVHJhbnNmb3JtICo9IHJlbmRlclN1cmZhY2VNYXRyaXguaW52ZXJz
ZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCiAgICAgY29tYmluZWRUcmFu
c2Zvcm0gPSBjb21iaW5lZFRyYW5zZm9ybS5tdWx0aXBseShsYXllckxvY2FsVHJhbnNmb3JtKTsK
IAogICAgIGJvb2wgYW5pbWF0aW5nVHJhbnNmb3JtVG9UYXJnZXQgPSBsYXllci0+dHJhbnNmb3Jt
SXNBbmltYXRpbmcoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
Q0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwCmluZGV4IDFjMDFhMGNkNDg1M2E0YTNk
OTRjYzIxMjlkMzdhZWY2ODI3MTdkM2UuLmQ3YzNlNTAzNDQwNjYxOTQ3OWFhYzg1NmZkYjZmNDIy
ZjhhMjU1ODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXll
clRyZWVIb3N0Q29tbW9uVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcApAQCAtMzIsNyArMzIsOSBAQAogI2luY2x1
ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5jbHVkZSAiVHJhbnNsYXRlVHJhbnNmb3Jt
T3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuaCIK
KyNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgogI2luY2x1ZGUgImNjL0NDTWF0aFV0aWwuaCIK
KyNpbmNsdWRlICJjYy9DQ1NpbmdsZVRocmVhZFByb3h5LmgiCiAKICNpbmNsdWRlIDxnbW9jay9n
bW9jay5oPgogI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CkBAIC02MTIsNiArNjE0LDEwNSBAQCBU
RVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUZvcmNlUmVuZGVyU3VyZmFjZSkK
ICAgICBFWFBFQ1RfRVEocmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCksIDBVKTsKIH0KIAor
VEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yRml4ZWRU
b0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3QpCit7CisgICAgRGVidWdTY29wZWRTZXRJbXBsVGhy
ZWFkIHNjb3BlZEltcGxUaHJlYWQ7CisKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBD
Q0xheWVySW1wbDo6Y3JlYXRlKDEpOworICAgIE93blB0cjxDQ0xheWVySW1wbD4gY2hpbGQgPSBD
Q0xheWVySW1wbDo6Y3JlYXRlKDIpOworICAgIE93blB0cjxDQ0xheWVySW1wbD4gZ3JhbmRDaGls
ZCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMyk7CisKKyAgICByb290LT5jcmVhdGVSZW5kZXJTdXJm
YWNlKCk7CisgICAgcm9vdC0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgwLCAwKSk7CisgICAg
cm9vdC0+c2V0Qm91bmRzKEludFNpemUoMTAwLCAxMDApKTsKKworICAgIGNoaWxkLT5zZXRCb3Vu
ZHMoSW50U2l6ZSgxMDAsIDEwMCkpOworICAgIGNoaWxkLT5zZXRBbmNob3JQb2ludChGbG9hdFBv
aW50KDAsIDApKTsKKyAgICBjaGlsZC0+c2V0U2Nyb2xsRGVsdGEoSW50U2l6ZSgxMCwgMTApKTsK
KyAgICBjaGlsZC0+c2V0SXNDb250YWluZXJMYXllcih0cnVlKTsKKworICAgIGdyYW5kQ2hpbGQt
PnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoMCwgMCkpOworICAgIGdyYW5kQ2hpbGQtPnNldEJv
dW5kcyhJbnRTaXplKDEwMCwgMTAwKSk7CisgICAgZ3JhbmRDaGlsZC0+c2V0Rml4ZWRUb0NvbnRh
aW5lckxheWVyVmlzaWJsZVJlY3QodHJ1ZSk7CisKKyAgICBjaGlsZC0+YWRkQ2hpbGQoZ3JhbmRD
aGlsZC5yZWxlYXNlKCkpOworICAgIHJvb3QtPmFkZENoaWxkKGNoaWxkLnJlbGVhc2UoKSk7CisK
KyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBjaGlsZFRyYW5zZm9ybWF0aW9uTWF0cml4OworICAgIGNoaWxkVHJhbnNmb3Jt
YXRpb25NYXRyaXgudHJhbnNsYXRlKDQwLCA0MCk7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
Z3JhbmRDaGlsZFRyYW5zZm9ybWF0aW9uTWF0cml4OworICAgIGdyYW5kQ2hpbGRUcmFuc2Zvcm1h
dGlvbk1hdHJpeC50cmFuc2xhdGUoNTAsIDUwKTsKKworICAgIFZlY3RvcjxDQ0xheWVySW1wbCo+
IGR1bW15UmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICBWZWN0b3I8Q0NMYXllckltcGwqPiBk
dW1teUxheWVyTGlzdDsKKyAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKKyAgICBD
Q0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0
eShyb290LmdldCgpLCByb290LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgs
IGR1bW15UmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIDAsIGR1bW15TWF4
VGV4dHVyZVNpemUpOworCisgICAgeworICAgICAgICBDQ0xheWVySW1wbCogY2hpbGQgPSByb290
LT5jaGlsZHJlbigpWzBdLmdldCgpOworICAgICAgICBDQ0xheWVySW1wbCogZ3JhbmRDaGlsZCA9
IGNoaWxkLT5jaGlsZHJlbigpWzBdLmdldCgpOworCisgICAgICAgIC8vIFRoZSBjaGlsZCBsYXll
ciBzaG91bGQgZ2V0IGEgdHJhbnNsYXRpb24uCisgICAgICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElP
Tl9NQVRSSVhfRVEoY2hpbGRUcmFuc2Zvcm1hdGlvbk1hdHJpeCwgY2hpbGQtPmRyYXdUcmFuc2Zv
cm0oKSk7CisKKyAgICAgICAgLy8gVGhlIGNoaWxkIGxheWVyIHNob3VsZCBzdGF5IGZpeGVkIHRv
IHRoZSByb290LgorICAgICAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGdyYW5k
Q2hpbGRUcmFuc2Zvcm1hdGlvbk1hdHJpeCwgZ3JhbmRDaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsK
KyAgICB9Cit9CisKK1RFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5VHJhbnNm
b3Jtc0ZvckZpeGVkUG9zaXRpb25XaXRoSW50ZXJtZWRpYXRlUmVuZGVyU3VyZmFjZSkKK3sKKyAg
ICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgc2NvcGVkSW1wbFRocmVhZDsKKworICAgIE93blB0
cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMSk7CisgICAgT3duUHRy
PENDTGF5ZXJJbXBsPiBjaGlsZCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMik7CisgICAgT3duUHRy
PENDTGF5ZXJJbXBsPiBncmFuZENoaWxkID0gQ0NMYXllckltcGw6OmNyZWF0ZSgzKTsKKworICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4IHJlbmRlclN1cmZhY2VUcmFuc2Zvcm07CisgICAgcmVuZGVy
U3VyZmFjZVRyYW5zZm9ybS50cmFuc2xhdGUoMjAwLCAxMDApOworICAgIHJlbmRlclN1cmZhY2VU
cmFuc2Zvcm0ucm90YXRlKDEwKTsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG9yaWdpblRy
YW5zZm9ybTsKKyAgICBvcmlnaW5UcmFuc2Zvcm0udHJhbnNsYXRlKC0wLjUgKiAxMDAsIC0wLjUg
KiAxMDApOworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggZml4ZWRUcmFuc2Zvcm07CisgICAg
Zml4ZWRUcmFuc2Zvcm0udHJhbnNsYXRlKDUwLCAyMCk7CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBjZW50ZXJUcmFuc2Zvcm07CisgICAgY2VudGVyVHJhbnNmb3JtLnRyYW5zbGF0ZSg1MCwg
NTApOworCisgICAgcm9vdC0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgwLCAwKSk7CisgICAg
cm9vdC0+c2V0Qm91bmRzKEludFNpemUoMTAwLCAxMDApKTsKKworICAgIGNoaWxkLT5zZXRCb3Vu
ZHMoSW50U2l6ZSgxMDAsIDEwMCkpOworICAgIGNoaWxkLT5zZXRUcmFuc2Zvcm0ocmVuZGVyU3Vy
ZmFjZVRyYW5zZm9ybSk7CisgICAgY2hpbGQtPnNldE9wYWNpdHkoMC41KTsKKworICAgIGdyYW5k
Q2hpbGQtPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoMCwgMCkpOworICAgIGdyYW5kQ2hpbGQt
PnNldEJvdW5kcyhJbnRTaXplKDEwMCwgMTAwKSk7CisgICAgZ3JhbmRDaGlsZC0+c2V0Rml4ZWRU
b0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3QodHJ1ZSk7CisgICAgZ3JhbmRDaGlsZC0+c2V0RHJh
d3NDb250ZW50KHRydWUpOworICAgIGdyYW5kQ2hpbGQtPnNldFRyYW5zZm9ybShmaXhlZFRyYW5z
Zm9ybSk7CisKKyAgICBjaGlsZC0+YWRkQ2hpbGQoZ3JhbmRDaGlsZC5yZWxlYXNlKCkpOworICAg
IHJvb3QtPmFkZENoaWxkKGNoaWxkLnJlbGVhc2UoKSk7CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICBWZWN0b3I8Q0NMYXllckltcGwqPiBkdW1teVJlbmRl
clN1cmZhY2VMYXllckxpc3Q7CisgICAgVmVjdG9yPENDTGF5ZXJJbXBsKj4gZHVtbXlMYXllckxp
c3Q7CisgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CisgICAgQ0NMYXllclRyZWVI
b3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocm9vdC5nZXQo
KSwgcm9vdC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBkdW1teVJlbmRl
clN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCAwLCBkdW1teU1heFRleHR1cmVTaXpl
KTsKKworICAgIHsKKyAgICAgICAgQ0NMYXllckltcGwqIGdyYW5kQ2hpbGQgPSByb290LT5jaGls
ZHJlbigpWzBdLT5jaGlsZHJlbigpWzBdLmdldCgpOworCisgICAgICAgIC8vIFRoZSBmaXhlZCBs
YXllcidzIHRyYW5zZm9ybSBzaG91bGQgaGF2ZSB0aGUgZW5jbG9zaW5nIHJlbmRlciBzdXJmYWNl
J3MgdHJhbnNmb3JtIGNhbmNlbGxlZCBvdXQuCisgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IGNvbWJpbmVkVHJhbnNmb3JtID0gKHJlbmRlclN1cmZhY2VUcmFuc2Zvcm0gKiBvcmlnaW5UcmFu
c2Zvcm0pLmludmVyc2UoKSAqIGZpeGVkVHJhbnNmb3JtICogY2VudGVyVHJhbnNmb3JtOworICAg
ICAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGNvbWJpbmVkVHJhbnNmb3JtLCBn
cmFuZENoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIH0KK30KKwogVEVTVChDQ0xheWVyVHJl
ZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlDbGlwUmVjdEN1bGxzUmVuZGVyU3VyZmFjZXMpCiB7CiAg
ICAgLy8gVGhlIGVudGlyZSBzdWJ0cmVlIG9mIGxheWVycyB0aGF0IGFyZSBvdXRzaWRlIHRoZSBj
bGlwUmVjdCBzaG91bGQgYmUgY3VsbGVkIGF3YXksCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>145351</attachid>
            <date>2012-06-01 12:10:26 -0700</date>
            <delta_ts>2012-06-01 12:10:26 -0700</delta_ts>
            <desc>Transformed element within a fixed element in a translucent container.</desc>
            <filename>fixed-transformed-opacity.html</filename>
            <type>text/html</type>
            <size>820</size>
            <attacher name="Sami Kyostila">skyostil</attacher>
            
              <data encoding="base64">PGh0bWw+Cgo8aGVhZD4KICA8c3R5bGU+CiAgLmZpeGVkIHsKICAgIHBvc2l0aW9uOiBmaXhlZDsK
ICAgIGxlZnQ6IDEwMHB4OwogICAgdG9wOiAyMDBweDsKICB9CgogIC50cmFuc2Zvcm1lZCB7CiAg
ICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlWigxMGRlZykgdHJhbnNsYXRlWigwKSBzY2FsZSgx
LjAsIDEuNyk7CiAgICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IDEwMCUgMTAwJTsKICAgIC1t
b3otdHJhbnNmb3JtOiByb3RhdGVaKDEwZGVnKSB0cmFuc2xhdGVaKDApIHNjYWxlKDEuMCwgMS43
KTsKICAgIC1tb3otdHJhbnNmb3JtLW9yaWdpbjogMTAwJSAxMDAlOwogIH0KICAKICAudHJhbnNs
dWNlbnQgewogICAgb3BhY2l0eTogMC41OwogIH0KCiAgLmJveCB7CiAgICB3aWR0aDogMzIwcHg7
CiAgICBoZWlnaHQ6IDI0MHB4OwogIH0KCiAgLnJlZmVyZW5jZSB7CiAgICBiYWNrZ3JvdW5kOiBn
cmVlbjsKICB9CgogIC50ZXN0IHsKICAgIGJhY2tncm91bmQ6IHllbGxvdzsKICB9CgogIGJvZHkg
ewogICAgbWFyZ2luOiAwcHg7CiAgICBtaW4taGVpZ2h0OiAxMDAwcHg7CiAgfQogIDwvc3R5bGU+
CjwvaGVhZD4KCjxib2R5PgoKPGRpdiBjbGFzcz0icmVmZXJlbmNlIGZpeGVkIGJveCI+CiAgUmVm
ZXJlbmNlCjwvZGl2PgoKPGRpdiBjbGFzcz0idHJhbnNsdWNlbnQiPgogIFRyYW5zbHVjZW50IGNv
bnRhaW5lcgogIDxkaXYgY2xhc3M9InRlc3QgZml4ZWQgYm94Ij4KICAgIEZpeGVkCiAgICA8ZGl2
IGNsYXNzPSJ0cmFuc2Zvcm1lZCI+VHJhbnNmb3JtZWQgY2hpbGQ8L2Rpdj4KICA8L2Rpdj4KPC9k
aXY+Cgo8L2JvZHk+CjwvaHRtbD4KCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>145886</attachid>
            <date>2012-06-05 15:56:50 -0700</date>
            <delta_ts>2012-06-05 15:56:50 -0700</delta_ts>
            <desc>Another example of fixed-position with a renderSurface in-between.</desc>
            <filename>reducedSurfaceFixed.html</filename>
            <type>text/html</type>
            <size>590</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">PGh0bWw+CjxoZWFkPjwvaGVhZD4KPGJvZHkgc3R5bGU9ImhlaWdodDogODAwMHB4OyBvdmVyZmxv
dzogc2Nyb2xsOyI+Cgo8ZGl2IGlkPSJjb250cm9sIiBzdHlsZT0iLXdlYmtpdC1ib3gtcmVmbGVj
dDogbGVmdCAyMHB4OyB3aWR0aDogMzAwcHg7IGhlaWdodDogMjAwcHg7IGJhY2tncm91bmQ6Ymx1
ZTsgcG9zaXRpb246IGFic29sdXRlOyByaWdodDogMWVtOyI+CiAgPHAgc3R5bGU9InBvc2l0aW9u
OiBmaXhlZDsgcGFkZGluZzogMC40ZW07IHdpZHRoOiAyMDBweDsgYmFja2dyb3VuZC1jb2xvcjog
cmVkOyI+CiAgICBGSVhFRCBQT1NJVElPTi4KICAgIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0
LCBjb25zZWN0ZXR1ciBhZGlwaXNjaW5nIGVsaXQuIEFsaXF1YW0gaW1wZXJkaWV0LCBpcHN1bSBp
ZAogICAgZXVpc21vZCB2YXJpdXMsIGF1Z3VlIGVuaW0gbGFjaW5pYSBhcmN1LCB1dCBhdWN0b3Ig
anVzdG8gbmliaCBhIGVyYXQuIFBoYXNlbGx1cwogICAgdWxsYW1jb3JwZXIgdm9sdXRwYXQgbGFv
cmVldC4KICA8L3A+CiAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9Im5vdCBmaXhlZCBoZXJl
LiI+CjwvZGl2PgoKPC9ib2R5Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>145907</attachid>
            <date>2012-06-05 17:53:00 -0700</date>
            <delta_ts>2012-06-07 00:18:33 -0700</delta_ts>
            <desc>In good condition, but still needs more unit tests</desc>
            <filename>bug-70103-20120605175259.patch</filename>
            <type>text/plain</type>
            <size>19726</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5NTQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTdmOTI1MmJmMTA0N2Ey
YmE5ZjZhY2UzNzUyZTFhZGNjNzk3NjM5OC4uMjBmMTUzMWQ4OTI3YjMzZTQ2MjJlZmQzN2NiMDBl
NzA1YTdlYzcwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQ2IEBACiAyMDEyLTA1LTE3ICBTYW1p
IEt5b3N0aWxhICA8c2t5b3N0aWxAY2hyb21pdW0ub3JnPgogCisgICAgICAgIFtjaHJvbWl1bV0g
SW1wbGVtZW50IHBvc2l0aW9uOmZpeGVkIGluIGNvbXBvc2l0b3IgdGhyZWFkCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDEwMworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW50cm9kdWNl
cyB0d28gbmV3IGxheWVycyBmbGFnczogaXNDb250YWluZXJMYXllcigpIGFuZAorICAgICAgICBm
aXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdCgpLiBUaGlzIGFsbG93cyBsYXllcnMgdG8g
c3RheSBmaXhlZAorICAgICAgICByZWxhdGl2ZSB0byB0aGVpciBhbmNlc3RvciBjb250YWluZXIg
bGF5ZXJzIHdoaWxlIHRoZSBjb21wb3NpdG9yIHRocmVhZAorICAgICAgICBzY3JvbGxzLgorCisg
ICAgICAgIE9yaWdpbmFsIHBhdGNoIGJ5IEFscGhhIExhbS4KKworICAgICAgICBUZXN0czogdmVy
aWZ5VHJhbnNmb3Jtc0ZvckZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0LCB2ZXJpZnlU
cmFuc2Zvcm1zRm9yRml4ZWRQb3NpdGlvbldpdGhJbnRlcm1lZGlhdGVSZW5kZXJTdXJmYWNlCisK
KyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29yZGluYXRvckNo
cm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRM
YXllcklzQ29udGFpbmVyRm9yRml4ZWRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxpbmdDb29yZGluYXRvcjo6c2V0TGF5ZXJJc0ZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVS
ZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVt
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OkxheWVyQ2hyb21pdW0pOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0SXNDb250YWluZXJMYXllcik6CisgICAgICAg
IChXZWJDb3JlOjpMYXllckNocm9taXVtOjppc0NvbnRhaW5lckxheWVyKToKKyAgICAgICAgKExh
eWVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0Rml4ZWRU
b0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJv
bWl1bTo6Zml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3QpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJJbXBsOjpDQ0xheWVySW1wbCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJ
bXBsOjpzZXRJc0NvbnRhaW5lckxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBs
Ojppc0NvbnRhaW5lckxheWVyKToKKyAgICAgICAgKENDTGF5ZXJJbXBsKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJJbXBsOjpzZXRGaXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6Zml4ZWRUb0NvbnRhaW5lckxheWVyVmlz
aWJsZVJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdENvbW1vbi5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OmZpbmRGaXJzdENvbnRhaW5lck9yUmVuZGVyU3VyZmFjZUFuY2VzdG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eUludGVybmFsKToK
KworMjAxMi0wNC0yNyAgU2FtaSBLeW9zdGlsYSAgPHNreW9zdGlsQGNocm9taXVtLm9yZz4KKwog
ICAgICAgICBSZWdpc3RlciBmaXhlZCBwb3NpdGlvbiBsYXllcnMgd2l0aCBTY3JvbGxpbmdDb29y
ZGluYXRvcgogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
Nzg4NjQKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY2hyb21p
dW0vU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtLmNwcAppbmRl
eCBjMmIxZTlkM2E1MTBiM2Q0Y2U5MGI5ZjUyYmJlNDYzYTAxODhmNTM3Li45NjYxNWRlZDMzNDIw
MGZlMWEzMjk2ZjQxN2VjNTg4OTEyYjgyMDFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29y
ZGluYXRvckNocm9taXVtLmNwcApAQCAtMTY0LDEyICsxNjQsMTQgQEAgdm9pZCBTY3JvbGxpbmdD
b29yZGluYXRvcjo6c2V0U2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVh
ZChib29sIHMKIAogdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0TGF5ZXJJc0NvbnRhaW5l
ckZvckZpeGVkUG9zaXRpb24oR3JhcGhpY3NMYXllciogbGF5ZXIsIGJvb2wgZW5hYmxlKQogewot
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQhCisgICAgaWYgKExheWVyQ2hyb21pdW0qIHBsYXRmb3Jt
TGF5ZXIgPSBsYXllci0+cGxhdGZvcm1MYXllcigpKQorICAgICAgICBwbGF0Zm9ybUxheWVyLT5z
ZXRJc0NvbnRhaW5lckxheWVyKGVuYWJsZSk7CiB9CiAKIHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0
b3I6OnNldExheWVySXNGaXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdChHcmFwaGljc0xh
eWVyKiBsYXllciwgYm9vbCBlbmFibGUpCiB7Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCEKKyAg
ICBpZiAoTGF5ZXJDaHJvbWl1bSogcGxhdGZvcm1MYXllciA9IGxheWVyLT5wbGF0Zm9ybUxheWVy
KCkpCisgICAgICAgIHBsYXRmb3JtTGF5ZXItPnNldEZpeGVkVG9Db250YWluZXJMYXllclZpc2li
bGVSZWN0KGVuYWJsZSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggZjYxZmQz
NWQ1MzAwMTQxZjJiMmZmMjZiODc2NGI4ZjYyZTAzZTIzZC4uMDI4NmExNjhkYWY3YjNjNGJlN2Y0
ZmRhYjEyZmEzMzFhY2ZlYTE5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTcyLDYgKzcy
LDggQEAgTGF5ZXJDaHJvbWl1bTo6TGF5ZXJDaHJvbWl1bSgpCiAgICAgLCBtX2RlYnVnQm9yZGVy
V2lkdGgoMCkKICAgICAsIG1fb3BhY2l0eSgxLjApCiAgICAgLCBtX2FuY2hvclBvaW50WigwKQor
ICAgICwgbV9pc0NvbnRhaW5lckxheWVyKGZhbHNlKQorICAgICwgbV9maXhlZFRvQ29udGFpbmVy
TGF5ZXJWaXNpYmxlUmVjdChmYWxzZSkKICAgICAsIG1faXNEcmF3YWJsZShmYWxzZSkKICAgICAs
IG1fbWFza3NUb0JvdW5kcyhmYWxzZSkKICAgICAsIG1fb3BhcXVlKGZhbHNlKQpAQCAtNTA2LDYg
KzUwOCw4IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyhDQ0xheWVySW1w
bCogbGF5ZXIpCiAgICAgaWYgKCFvcGFjaXR5SXNBbmltYXRpbmcoKSkKICAgICAgICAgbGF5ZXIt
PnNldE9wYWNpdHkobV9vcGFjaXR5KTsKICAgICBsYXllci0+c2V0UG9zaXRpb24obV9wb3NpdGlv
bik7CisgICAgbGF5ZXItPnNldElzQ29udGFpbmVyTGF5ZXIobV9pc0NvbnRhaW5lckxheWVyKTsK
KyAgICBsYXllci0+c2V0Rml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3QobV9maXhlZFRv
Q29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdCk7CiAgICAgbGF5ZXItPnNldFByZXNlcnZlczNEKHBy
ZXNlcnZlczNEKCkpOwogICAgIGxheWVyLT5zZXRTY3JvbGxQb3NpdGlvbihtX3Njcm9sbFBvc2l0
aW9uKTsKICAgICBsYXllci0+c2V0U3VibGF5ZXJUcmFuc2Zvcm0obV9zdWJsYXllclRyYW5zZm9y
bSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllckNocm9taXVtLmgKaW5kZXggNWQ1MmY4YmM5ZmVlZDEyNDEwNjhkMTExMmRjYzhk
OWU0Mzc0NjFlZi4uMTYyOWVhNmZlMjA3NWEyMGYxYTI4NWRhOGYxYWMzMzU3NDBjNTI3NCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJD
aHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyQ2hyb21pdW0uaApAQCAtMTI5LDYgKzEyOSwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBz
ZXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50Jik7CiAgICAgRmxvYXRQb2ludCBwb3NpdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb247IH0KIAorICAgIHZvaWQgc2V0SXNDb250YWluZXJM
YXllcihib29sIGlzQ29udGFpbmVyTGF5ZXIpIHsgbV9pc0NvbnRhaW5lckxheWVyID0gaXNDb250
YWluZXJMYXllcjsgfQorICAgIGJvb2wgaXNDb250YWluZXJMYXllcigpIGNvbnN0IHsgcmV0dXJu
IG1faXNDb250YWluZXJMYXllcjsgfQorCisgICAgdm9pZCBzZXRGaXhlZFRvQ29udGFpbmVyTGF5
ZXJWaXNpYmxlUmVjdChib29sIGZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0KSB7IG1f
Zml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3QgPSBmaXhlZFRvQ29udGFpbmVyTGF5ZXJW
aXNpYmxlUmVjdDsgc2V0TmVlZHNDb21taXQoKTsgfQorICAgIGJvb2wgZml4ZWRUb0NvbnRhaW5l
ckxheWVyVmlzaWJsZVJlY3QoKSBjb25zdCB7IHJldHVybiBtX2ZpeGVkVG9Db250YWluZXJMYXll
clZpc2libGVSZWN0OyB9CisKICAgICB2b2lkIHNldFN1YmxheWVyVHJhbnNmb3JtKGNvbnN0IFdl
YktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKICAgICBjb25zdCBXZWJLaXQ6OldlYlRy
YW5zZm9ybWF0aW9uTWF0cml4JiBzdWJsYXllclRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1f
c3VibGF5ZXJUcmFuc2Zvcm07IH0KIApAQCAtMzMzLDYgKzMzOSw4IEBAIHByaXZhdGU6CiAgICAg
V2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zIG1fZmlsdGVyczsKICAgICBXZWJLaXQ6OldlYkZp
bHRlck9wZXJhdGlvbnMgbV9iYWNrZ3JvdW5kRmlsdGVyczsKICAgICBmbG9hdCBtX2FuY2hvclBv
aW50WjsKKyAgICBib29sIG1faXNDb250YWluZXJMYXllcjsKKyAgICBib29sIG1fZml4ZWRUb0Nv
bnRhaW5lckxheWVyVmlzaWJsZVJlY3Q7CiAgICAgYm9vbCBtX2lzRHJhd2FibGU7CiAgICAgYm9v
bCBtX21hc2tzVG9Cb3VuZHM7CiAgICAgYm9vbCBtX29wYXF1ZTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBs
LmNwcAppbmRleCA3MmMwZWEyYjc5Y2U3MmJhNmFlMGZjNjJlYzE3NzZiNjkyYWM1YWZjLi5hOTA5
MjBhOWI2YzJmNTA4MTZkYjdiMGFmZmMyODA2YjY0MjRiOTNkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllcklt
cGwuY3BwCkBAIC02Myw2ICs2Myw4IEBAIENDTGF5ZXJJbXBsOjpDQ0xheWVySW1wbChpbnQgaWQp
CiAgICAgLCBtX2lzTm9uQ29tcG9zaXRlZENvbnRlbnQoZmFsc2UpCiAgICAgLCBtX2RyYXdzQ29u
dGVudChmYWxzZSkKICAgICAsIG1fZm9yY2VSZW5kZXJTdXJmYWNlKGZhbHNlKQorICAgICwgbV9p
c0NvbnRhaW5lckxheWVyKGZhbHNlKQorICAgICwgbV9maXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNp
YmxlUmVjdChmYWxzZSkKICAgICAsIG1fcGFnZVNjYWxlRGVsdGEoMSkKICAgICAsIG1fdGFyZ2V0
UmVuZGVyU3VyZmFjZSgwKQogICAgICwgbV9kcmF3RGVwdGgoMCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5o
CmluZGV4IGZkNGZhY2FhNDBjYmExNWRmNjI5YTFiMjRkYTMyYzJmYTViMzc0NGQuLmVhODVlZWQ3
MTYzMThhNTE0YjNjODk4N2M3MjJhZjZjNWFkMzE2ZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaApA
QCAtMTMyLDYgKzEzMiwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBG
bG9hdFBvaW50Jik7CiAgICAgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24oKSBjb25zdCB7IHJl
dHVybiBtX3Bvc2l0aW9uOyB9CiAKKyAgICB2b2lkIHNldElzQ29udGFpbmVyTGF5ZXIoYm9vbCBp
c0NvbnRhaW5lckxheWVyKSB7IG1faXNDb250YWluZXJMYXllciA9IGlzQ29udGFpbmVyTGF5ZXI7
IH0KKyAgICBib29sIGlzQ29udGFpbmVyTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2lzQ29udGFp
bmVyTGF5ZXI7IH0KKworICAgIHZvaWQgc2V0Rml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJl
Y3QoYm9vbCBmaXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdCA9IHRydWUpIHsgbV9maXhl
ZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdCA9IGZpeGVkVG9Db250YWluZXJMYXllclZpc2li
bGVSZWN0O30KKyAgICBib29sIGZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0KCkgY29u
c3QgeyByZXR1cm4gbV9maXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdDsgfQorCiAgICAg
dm9pZCBzZXRQcmVzZXJ2ZXMzRChib29sKTsKICAgICBib29sIHByZXNlcnZlczNEKCkgY29uc3Qg
eyByZXR1cm4gbV9wcmVzZXJ2ZXMzRDsgfQogCkBAIC0zMjMsNiArMzI5LDExIEBAIHByaXZhdGU6
CiAgICAgYm9vbCBtX2RyYXdzQ29udGVudDsKICAgICBib29sIG1fZm9yY2VSZW5kZXJTdXJmYWNl
OwogCisgICAgLy8gU2V0IGZvciB0aGUgbGF5ZXIgdGhhdCBvdGhlciBsYXllcnMgYXJlIGZpeGVk
IHRvLgorICAgIGJvb2wgbV9pc0NvbnRhaW5lckxheWVyOworICAgIC8vIFNldCBmb3IgdGhlIGxh
eWVyIHRoYXQgaGFzIHBvc2l0aW9uIGZpeGVkIHRvIHRoZSBjb250YWluZXIgbGF5ZXIncyB2aXNp
YmxlIHJlY3QuCisgICAgYm9vbCBtX2ZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0Owor
CiAgICAgRmxvYXRTaXplIG1fc2Nyb2xsRGVsdGE7CiAgICAgSW50U2l6ZSBtX3NlbnRTY3JvbGxE
ZWx0YTsKICAgICBJbnRTaXplIG1fbWF4U2Nyb2xsUG9zaXRpb247CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RD
b21tb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcAppbmRleCA5Y2QwMzE2MGUyYjBiYzVhN2I2NTJlODBi
OWYyYmFkYmQwMWJjM2NmLi5hOGI0MjMzOGEzZjVjMTQ5NDU4ODI2NGE1YmFjMjBiNTY3NDYwMDdk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAKQEAgLTI1MCw2
ICsyNTAsMTYgQEAgc3RhdGljIGJvb2wgbGF5ZXJTaG91bGRCZVNraXBwZWQoTGF5ZXJUeXBlKiBs
YXllcikKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlw
ZT4KK3N0YXRpYyBMYXllclR5cGUqIGZpbmRGaXJzdENvbnRhaW5lck9yUmVuZGVyU3VyZmFjZUFu
Y2VzdG9yKExheWVyVHlwZSogbGF5ZXIpCit7CisgICAgaWYgKCFsYXllcikKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgaWYgKGxheWVyLT5pc0NvbnRhaW5lckxheWVyKCkgfHwgbGF5ZXItPnJlbmRl
clN1cmZhY2UoKSkKKyAgICAgICAgcmV0dXJuIGxheWVyOworICAgIHJldHVybiBmaW5kRmlyc3RD
b250YWluZXJPclJlbmRlclN1cmZhY2VBbmNlc3RvcihsYXllci0+cGFyZW50KCkpOworfQorCiBz
dGF0aWMgaW5saW5lIGJvb2wgc3VidHJlZVNob3VsZEJlU2tpcHBlZChDQ0xheWVySW1wbCogbGF5
ZXIpCiB7CiAgICAgLy8gVGhlIG9wYWNpdHkgb2YgYSBsYXllciBhbHdheXMgYXBwbGllcyB0byBp
dHMgY2hpbGRyZW4gKGVpdGhlciBpbXBsaWNpdGx5CkBAIC0zMTgsNiArMzI4LDg4IEBAIHN0YXRp
YyBib29sIHN1YnRyZWVTaG91bGRSZW5kZXJUb1NlcGFyYXRlU3VyZmFjZShMYXllclR5cGUqIGxh
eWVyLCBib29sIGF4aXNBbGlnCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit0ZW1wbGF0ZTx0eXBl
bmFtZSBMYXllclR5cGU+CitzdGF0aWMgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggY29tcHV0ZVNj
cm9sbENvbXBlbnNhdGlvbkZvckZpeGVkUG9zaXRpb25MYXllcihMYXllclR5cGUqIGxheWVyKQor
eworICAgIC8vICJTY3JvbGwgY29tcGVuc2F0aW9uIiBpcyB0aGUgdG90YWwgY29tcG9zaXRlIHRy
YW5zZm9ybSB0aGF0IGNhbmNlbHMgb3V0IHRoZQorICAgIC8vIHNjcm9sbERlbHRhLCBzbyB0aGF0
IGl0IGRvZXMgbm90IGFmZmVjdCBhIGZpeGVkIHBvc2l0aW9uIGxheWVyLiBUbyBjYW5jZWwgb3V0
IHRoZQorICAgIC8vIHNjcm9sbERlbHRhLCB0aGUgaW52ZXJzZSBzY3JvbGwgdHJhbnNsYXRpb24g
bmVlZHMgdG8gYmUgYXBwbGllZCB3aXRoIHJlc3BlY3QgdG8gdGhlCisgICAgLy8gY29udGFpbmVy
J3Mgc3BhY2UuCisgICAgLy8KKyAgICAvLyBUaGUgdG90YWwgU2Nyb2xsQ29tcGVuc2F0aW9uIG1h
dHJpeCBkb2VzIHRoZSBmb2xsb3dpbmcgKGludGVycHJldGluZyB0aGUgdHJhbnNmb3JtIGZyb20g
bGVmdC10by1yaWdodCk6CisgICAgLy8gICAgMS4gdHJhbnNmb3JtcyBmcm9tIGxheWVyJ3MgdGFy
Z2V0IHN1cmZhY2Ugc3BhY2UgdG8gdGhlIHNwYWNlIG9mIHRoZSBmaXhlZC1wb3NpdGlvbiBjb250
YWluZXIuCisgICAgLy8gICAgMi4gaW5zZXJ0cyBhIG5ldyB0cmFuc2xhdGlvbiB0aGF0IGNhbmNl
bHMgb3V0IHRoZSBvcmlnaW5hbCBzY3JvbGxEZWx0YSwgc28gdGhlCisgICAgLy8gICAgICAgZml4
ZWQtcG9zaXRpb24gbGF5ZXIgZG9lcyBub3Qgc2Nyb2xsLgorICAgIC8vICAgIDMuIHRyYW5zZm9y
bXMgYmFjayBmcm9tIGZpeGVkLXBvc2l0aW9uIGNvbnRhaW5lciB0byB0aGUgbGF5ZXIncyB0YXJn
ZXQgc3VyZmFjZSBzcGFjZS4KKyAgICAvLworICAgIC8vIFRoZXJlIGFyZSBhIGNvdXBsZSBvZiBh
c3N1bXB0aW9uczoKKyAgICAvLyAgICAxLiBUaGUgY29udGFpbmVyIGxheWVyIGlzIGEgc2Nyb2xs
aW5nIGxheWVyIGFuZCBvbmx5IGhhcyB0cmFuc2xhdGlvbiB0cmFuc2Zvcm1hdGlvbiBsb2NhbGx5
LgorICAgIC8vICAgIDIuIFRoZSBjb250YWluZXIgbGF5ZXIgaGFzIGEgcGFyZW50IHRoYXQgZGVm
aW5lcyB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gZm9yIHRoZSBzY3JvbGwKKyAgICAvLyAgICAgICB0
cmFuc2xhdGlvbi4gSGVyZSB3ZSBjYWxsIGl0IHRoZSAiY2xpcCBsYXllciIsIGJlY2F1c2Ugc2Ny
b2xsaW5nIGxheWVycyBhcmUgZ2VuZXJhbGx5CisgICAgLy8gICAgICAgZW1iZWRkZWQgaW4gb25l
LgorICAgIC8vCisgICAgLy8gQW5vdGhlciBpbnRlcnByZXRhdGlvbiBvZiB0aGUgc2FtZSBtYXRo
OgorICAgIC8vCisgICAgLy8gV2UgY2FuIGRlY29tcG9zZSB0aGUgbGF5ZXIncyBwYXJlbnRNYXRy
aXggYXMgZm9sbG93czoKKyAgICAvLworICAgIC8vICAgICAgICBNW3BhcmVudF0gPSBNW2NsaXBd
ICogVHJbY29udGFpbmVyXSAqIE1bZGVzY2VuZGFudF0KKyAgICAvLworICAgIC8vIHdoZXJlIE1b
ZGVzY2VuZGFudF0gaXMgdGhlIHRvdGFsIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBmcm9tIGNvbnRh
aW5lciBsYXllcidzIGNvb3JkaW5hdGUKKyAgICAvLyBzcGFjZSB0byB0aGUgc3BhY2Ugb2YgTVtw
YXJlbnRdLiBBbmQgdGh1czoKKyAgICAvLworICAgIC8vICAgICAgICBUcltjb250YWluZXJdICog
TVtkZXNjZW5kYW50XSA9IE1bY2xpcF0uaW52ZXJzZSgpICogTVtwYXJlbnRdCisgICAgLy8KKyAg
ICAvLyBBbmQgdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBmb3IgdGhpcyBsYXllciB3aXRob3V0
IGNvbnRhaW5lcidzIHNjcm9sbCBiZWNvbWVzOgorICAgIC8vCisgICAgLy8gICAgICAgIE1bY2xp
cF0gKiAtVHJbY29udGFpbmVyXSAqIFRyW2NvbnRhaW5lcl0gKiBNW2Rlc2NlbmRhbnRdID0gTVtj
bGlwXSAqIC1Ucltjb250YWluZXJdICogTVtjbGlwXS5pbnZlcnNlKCkgKiBNW3BhcmVudF0KKyAg
ICAvLworICAgIC8vIE5vdGUsIGluIHRoaXMgY2FzZSwgdGVjaG5pY2FsbHkgTVtjbGlwXSBpcyB0
aGUgcGFyZW50TWF0cml4IG9mIHRoZSBjbGlwTGF5ZXIncworICAgIC8vIGNoaWxkcmVuLiBUaGVv
cmV0aWNhbGx5IGl0IGlzIE5PVCB0aGUgc2FtZSB0byB1c2UgdGhlIGNsaXBMYXllcidzIGRyYXdU
cmFuc2Zvcm0sCisgICAgLy8gYnV0IG1hdGhlbWF0aWNhbGx5IHRoZSBkaWZmZXJlbmNlcyBiZXR3
ZWVuIHRoZSBkcmF3VHJhbnNmb3JtJ3Mgc3BhY2UgYW5kCisgICAgLy8gcGFyZW50TWF0cml4J3Mg
c3BhY2Ugd2lsbCBub3QgYWZmZWN0IHRoZSBjb3JyZWN0bmVzcyBvZiB0aGUgc2Nyb2xsIGNvbXBl
bnNhdGlvbi4KKyAgICAvLworCisgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBvbmx5IG1lYW5pbmdm
dWwgaWYgdGhlIGxheWVyIGlzIGEgZml4ZWQgcG9zaXRpb25lZCBlbGVtZW50LgorICAgIEFTU0VS
VChsYXllciAmJiBsYXllci0+Zml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3QoKSk7CisK
KyAgICAvLyBLZWVwIHNlYXJjaGluZyB1cCB0aGUgaGllcmFyY2h5IGZvciB0aGUgZmlyc3QgY29u
dGFpbmVyIGxheWVyLiBCdXQsIGlmIHdlIGhpdCBhbiBhbmNlc3RvciByZW5kZXJTdXJmYWNlCisg
ICAgLy8gZmlyc3QsIHdlIG5lZWQgdG8gYWNjb3VudCBmb3IgaXRzIHRyYW5zZm9ybS4KKyAgICBX
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsb2NhbFN1cmZhY2VUb0ZpeGVkUG9zaXRpb25TdXJmYWNl
OworICAgIExheWVyVHlwZSogYW5jZXN0b3IgPSBmaW5kRmlyc3RDb250YWluZXJPclJlbmRlclN1
cmZhY2VBbmNlc3RvcihsYXllci0+cGFyZW50KCkpOworICAgIHdoaWxlIChhbmNlc3RvciAmJiAh
YW5jZXN0b3ItPmlzQ29udGFpbmVyTGF5ZXIoKSkgeworICAgICAgICBBU1NFUlQoYW5jZXN0b3It
PnJlbmRlclN1cmZhY2UoKSk7CisKKyAgICAgICAgLy8gU3VyZmFjZSdzIF9pbnZlcnNlXyBvcmln
aW4gdHJhbnNmb3JtIHNob3VsZCBwcmUtbXVsdGlwbHkgdGhlIGFjY3VtdWxhdGluZyB0cmFuc2Zv
cm0uCisgICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGludmVyc2VPcmlnaW5UcmFuc2Zv
cm0gPSBhbmNlc3Rvci0+cmVuZGVyU3VyZmFjZSgpLT5vcmlnaW5UcmFuc2Zvcm0oKS5pbnZlcnNl
KCk7CisgICAgICAgIGludmVyc2VPcmlnaW5UcmFuc2Zvcm0ubXVsdGlwbHkobG9jYWxTdXJmYWNl
VG9GaXhlZFBvc2l0aW9uU3VyZmFjZSk7CisgICAgICAgIGxvY2FsU3VyZmFjZVRvRml4ZWRQb3Np
dGlvblN1cmZhY2UgPSBpbnZlcnNlT3JpZ2luVHJhbnNmb3JtOworCisgICAgICAgIGFuY2VzdG9y
ID0gZmluZEZpcnN0Q29udGFpbmVyT3JSZW5kZXJTdXJmYWNlQW5jZXN0b3IoYW5jZXN0b3ItPnBh
cmVudCgpKTsKKyAgICB9CisKKyAgICAvLyBBdCB0aGlzIHBvaW50IHdlIHNob3VsZCBoYXZlIGZv
dW5kIHRoZSBmaXJzdCBjb250YWluZXJMYXllciwgYW5kIHRoZSBsb2NhbCBsYXllciBpcyBmaXhl
ZCBvbnRvIHRoYXQgbGF5ZXIuCisgICAgQVNTRVJUKGFuY2VzdG9yKTsKKyAgICBBU1NFUlQoYW5j
ZXN0b3ItPmlzQ29udGFpbmVyTGF5ZXIoKSk7CisKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJp
eCB0b3RhbFNjcm9sbENvbXBlbnNhdGlvbjsKKyAgICBGbG9hdFNpemUgc2Nyb2xsRGVsdGEgPSBh
bmNlc3Rvci0+c2Nyb2xsRGVsdGEoKTsKKworICAgIC8vIElmIHRoZXJlIGlzIG5vIHNjcm9sbERl
bHRhLCB0aGVuIHRoZXJlIGlzIG5vIG5lZWQgdG8gZG8gbW9yZSBtYXRyaXggbXVsdGlwbGljYXRp
b25zIHNpbmNlIGl0IHdvdWxkIHRvdGFsIHVwIHRvIGFuIGlkZW50aXR5IG1hdHJpeCBhbnl3YXku
CisgICAgLy8gSWYgdGhlcmUgaXMgbm8gYW5jZXN0b3Igb3IgY2xpcExheWVyLCB0aGVuIHNvbWV0
aGluZyBpcyBub3QgcmlnaHQuIEluIGRlYnVnIG1vZGUgaXQgc2hvdWxkIGhhdmUgdHJpZ2dlcmVk
IGFzc2VydGlvbnMgYWJvdmUuCisgICAgaWYgKChzY3JvbGxEZWx0YS53aWR0aCgpIHx8IHNjcm9s
bERlbHRhLmhlaWdodCgpKSAmJiBhbmNlc3RvciAmJiBhbmNlc3Rvci0+cGFyZW50KCkpIHsKKyAg
ICAgICAgTGF5ZXJUeXBlKiBjbGlwTGF5ZXIgPSBhbmNlc3Rvci0+cGFyZW50KCk7CisgICAgICAg
IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGxvY2FsVGFyZ2V0U3VyZmFjZVRvRml4ZWRQb3NpdGlv
bkNvbnRhaW5lciA9IGxvY2FsU3VyZmFjZVRvRml4ZWRQb3NpdGlvblN1cmZhY2UgKiBjbGlwTGF5
ZXItPmRyYXdUcmFuc2Zvcm0oKTsKKworICAgICAgICAvLyBGaW5hbGx5LCBhZnRlciBjb21wdXRp
bmcgdGhlIHRyYW5zZm9ybSBmcm9tIHRoZSBsYXllcidzIHRhcmdldFN1cmZhY2UgdG8gdGhlCisg
ICAgICAgIC8vIGZpeGVkIHBvc2l0aW9uIGNvbnRhaW5lciwgd2UgY2FuIGFwcGx5IHRoZSBzY3Jv
bGwgY29tcGVuc2F0aW9uIGluIHRoZSBjb3JyZWN0IHNwYWNlLgorICAgICAgICB0b3RhbFNjcm9s
bENvbXBlbnNhdGlvbiA9IGxvY2FsVGFyZ2V0U3VyZmFjZVRvRml4ZWRQb3NpdGlvbkNvbnRhaW5l
cjsKKyAgICAgICAgdG90YWxTY3JvbGxDb21wZW5zYXRpb24udHJhbnNsYXRlKHNjcm9sbERlbHRh
LndpZHRoKCksIHNjcm9sbERlbHRhLmhlaWdodCgpKTsKKyAgICAgICAgdG90YWxTY3JvbGxDb21w
ZW5zYXRpb24ubXVsdGlwbHkobG9jYWxUYXJnZXRTdXJmYWNlVG9GaXhlZFBvc2l0aW9uQ29udGFp
bmVyLmludmVyc2UoKSk7CisgICAgfQorCisgICAgcmV0dXJuIHRvdGFsU2Nyb2xsQ29tcGVuc2F0
aW9uOworfQorCiAvLyBSZWN1cnNpdmVseSB3YWxrcyB0aGUgbGF5ZXIgdHJlZSBzdGFydGluZyBh
dCB0aGUgZ2l2ZW4gbm9kZSBhbmQgY29tcHV0ZXMgYWxsIHRoZQogLy8gbmVjZXNzYXJ5IHRyYW5z
Zm9ybWF0aW9ucywgY2xpcFJlY3RzLCByZW5kZXIgc3VyZmFjZXMsIGV0Yy4KIHRlbXBsYXRlPHR5
cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgTGF5ZXJMaXN0LCB0eXBlbmFtZSBSZW5kZXJTdXJm
YWNlVHlwZSwgdHlwZW5hbWUgTGF5ZXJTb3J0ZXI+CkBAIC00NDksNiArNTQxLDE3IEBAIHN0YXRp
YyBib29sIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zSW50ZXJuYWwoTGF5ZXJUeXBlKiBsYXllciwg
TGF5ZXJUeXBlKiByb290TGF5CiAgICAgbGF5ZXJMb2NhbFRyYW5zZm9ybS50cmFuc2xhdGUzZChj
ZW50ZXJPZmZzZXRYLCBjZW50ZXJPZmZzZXRZLCAtbGF5ZXItPmFuY2hvclBvaW50WigpKTsKIAog
ICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGNvbWJpbmVkVHJhbnNmb3JtID0gcGFyZW50TWF0
cml4OworCisgICAgaWYgKGxheWVyLT5maXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdCgp
KSB7CisgICAgICAgIC8vIFNwZWNpYWwgY2FzZTogdGhpcyBsYXllciBpcyBhIGNvbXBvc2l0ZWQg
Zml4ZWQtcG9zaXRpb24gZWxlbWVudDsgd2UgbmVlZCB0bworICAgICAgICAvLyBleHBsaWNpdGx5
IGNvbXBlbnNhdGUgZm9yIHRoZSBjb250YWluZXIncyBzY3JvbGxEZWx0YSB0byBrZWVwIGl0IGZp
eGVkIGNvcnJlY3RseS4KKyAgICAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggdG90YWxTY3Jv
bGxDb21wZW5zYXRpb24gPSBjb21wdXRlU2Nyb2xsQ29tcGVuc2F0aW9uRm9yRml4ZWRQb3NpdGlv
bkxheWVyKGxheWVyKTsKKyAgICAgICAgY29tYmluZWRUcmFuc2Zvcm0gPSB0b3RhbFNjcm9sbENv
bXBlbnNhdGlvbiAqIHBhcmVudE1hdHJpeDsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBDb21t
b24gY2FzZTogbGF5ZXIgaXMgbm90IGZpeGVkIHBvc2l0aW9uLgorICAgICAgICBjb21iaW5lZFRy
YW5zZm9ybSA9IHBhcmVudE1hdHJpeDsKKyAgICB9CisKICAgICBjb21iaW5lZFRyYW5zZm9ybS5t
dWx0aXBseShsYXllckxvY2FsVHJhbnNmb3JtKTsKIAogICAgIGJvb2wgYW5pbWF0aW5nVHJhbnNm
b3JtVG9UYXJnZXQgPSBsYXllci0+dHJhbnNmb3JtSXNBbmltYXRpbmcoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5j
cHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRl
c3QuY3BwCmluZGV4IDFkMDY5YTViZTNhYjU0OWYwZGYxODYxOTJkYmJlZTk5NTZjODNlMTguLmJj
NDg0NzkyNzlkZGYwMzhhZTIxNzhmZTMxMWE1MTlhYjllMjI1NDYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0
LmNwcApAQCAtMTE3Niw2ICsxMTc2LDEwNSBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRl
c3QsIHZlcmlmeUZvcmNlUmVuZGVyU3VyZmFjZSkKICAgICBFWFBFQ1RfRVEocmVuZGVyU3VyZmFj
ZUxheWVyTGlzdC5zaXplKCksIDBVKTsKIH0KIAorVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25U
ZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yRml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3Qp
Cit7CisgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIHNjb3BlZEltcGxUaHJlYWQ7CisKKyAg
ICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDEpOworICAg
IE93blB0cjxDQ0xheWVySW1wbD4gY2hpbGQgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDIpOworICAg
IE93blB0cjxDQ0xheWVySW1wbD4gZ3JhbmRDaGlsZCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMyk7
CisKKyAgICByb290LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAgcm9vdC0+c2V0QW5jaG9y
UG9pbnQoRmxvYXRQb2ludCgwLCAwKSk7CisgICAgcm9vdC0+c2V0Qm91bmRzKEludFNpemUoMTAw
LCAxMDApKTsKKworICAgIGNoaWxkLT5zZXRCb3VuZHMoSW50U2l6ZSgxMDAsIDEwMCkpOworICAg
IGNoaWxkLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAsIDApKTsKKyAgICBjaGlsZC0+c2V0
U2Nyb2xsRGVsdGEoSW50U2l6ZSgxMCwgMTApKTsKKyAgICBjaGlsZC0+c2V0SXNDb250YWluZXJM
YXllcih0cnVlKTsKKworICAgIGdyYW5kQ2hpbGQtPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQo
MCwgMCkpOworICAgIGdyYW5kQ2hpbGQtPnNldEJvdW5kcyhJbnRTaXplKDEwMCwgMTAwKSk7Cisg
ICAgZ3JhbmRDaGlsZC0+c2V0Rml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3QodHJ1ZSk7
CisKKyAgICBjaGlsZC0+YWRkQ2hpbGQoZ3JhbmRDaGlsZC5yZWxlYXNlKCkpOworICAgIHJvb3Qt
PmFkZENoaWxkKGNoaWxkLnJlbGVhc2UoKSk7CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBp
ZGVudGl0eU1hdHJpeDsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjaGlsZFRyYW5zZm9ybWF0
aW9uTWF0cml4OworICAgIGNoaWxkVHJhbnNmb3JtYXRpb25NYXRyaXgudHJhbnNsYXRlKDQwLCA0
MCk7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggZ3JhbmRDaGlsZFRyYW5zZm9ybWF0aW9uTWF0
cml4OworICAgIGdyYW5kQ2hpbGRUcmFuc2Zvcm1hdGlvbk1hdHJpeC50cmFuc2xhdGUoNTAsIDUw
KTsKKworICAgIFZlY3RvcjxDQ0xheWVySW1wbCo+IGR1bW15UmVuZGVyU3VyZmFjZUxheWVyTGlz
dDsKKyAgICBWZWN0b3I8Q0NMYXllckltcGwqPiBkdW1teUxheWVyTGlzdDsKKyAgICBpbnQgZHVt
bXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1
bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShyb290LmdldCgpLCByb290LmdldCgpLCBp
ZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIGR1bW15UmVuZGVyU3VyZmFjZUxheWVyTGlz
dCwgZHVtbXlMYXllckxpc3QsIDAsIGR1bW15TWF4VGV4dHVyZVNpemUpOworCisgICAgeworICAg
ICAgICBDQ0xheWVySW1wbCogY2hpbGQgPSByb290LT5jaGlsZHJlbigpWzBdLmdldCgpOworICAg
ICAgICBDQ0xheWVySW1wbCogZ3JhbmRDaGlsZCA9IGNoaWxkLT5jaGlsZHJlbigpWzBdLmdldCgp
OworCisgICAgICAgIC8vIFRoZSBjaGlsZCBsYXllciBzaG91bGQgZ2V0IGEgdHJhbnNsYXRpb24u
CisgICAgICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoY2hpbGRUcmFuc2Zvcm1h
dGlvbk1hdHJpeCwgY2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisKKyAgICAgICAgLy8gVGhlIGNo
aWxkIGxheWVyIHNob3VsZCBzdGF5IGZpeGVkIHRvIHRoZSByb290LgorICAgICAgICBFWFBFQ1Rf
VFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGdyYW5kQ2hpbGRUcmFuc2Zvcm1hdGlvbk1hdHJpeCwg
Z3JhbmRDaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICB9Cit9CisKK1RFU1QoQ0NMYXllclRy
ZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvckZpeGVkUG9zaXRpb25XaXRoSW50
ZXJtZWRpYXRlUmVuZGVyU3VyZmFjZSkKK3sKKyAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQg
c2NvcGVkSW1wbFRocmVhZDsKKworICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5
ZXJJbXBsOjpjcmVhdGUoMSk7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBjaGlsZCA9IENDTGF5
ZXJJbXBsOjpjcmVhdGUoMik7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBncmFuZENoaWxkID0g
Q0NMYXllckltcGw6OmNyZWF0ZSgzKTsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHJlbmRl
clN1cmZhY2VUcmFuc2Zvcm07CisgICAgcmVuZGVyU3VyZmFjZVRyYW5zZm9ybS50cmFuc2xhdGUo
MjAwLCAxMDApOworICAgIHJlbmRlclN1cmZhY2VUcmFuc2Zvcm0ucm90YXRlKDEwKTsKKworICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4IG9yaWdpblRyYW5zZm9ybTsKKyAgICBvcmlnaW5UcmFuc2Zv
cm0udHJhbnNsYXRlKC0wLjUgKiAxMDAsIC0wLjUgKiAxMDApOworCisgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggZml4ZWRUcmFuc2Zvcm07CisgICAgZml4ZWRUcmFuc2Zvcm0udHJhbnNsYXRlKDUw
LCAyMCk7CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjZW50ZXJUcmFuc2Zvcm07CisgICAg
Y2VudGVyVHJhbnNmb3JtLnRyYW5zbGF0ZSg1MCwgNTApOworCisgICAgcm9vdC0+c2V0QW5jaG9y
UG9pbnQoRmxvYXRQb2ludCgwLCAwKSk7CisgICAgcm9vdC0+c2V0Qm91bmRzKEludFNpemUoMTAw
LCAxMDApKTsKKworICAgIGNoaWxkLT5zZXRCb3VuZHMoSW50U2l6ZSgxMDAsIDEwMCkpOworICAg
IGNoaWxkLT5zZXRUcmFuc2Zvcm0ocmVuZGVyU3VyZmFjZVRyYW5zZm9ybSk7CisgICAgY2hpbGQt
PnNldE9wYWNpdHkoMC41KTsKKworICAgIGdyYW5kQ2hpbGQtPnNldEFuY2hvclBvaW50KEZsb2F0
UG9pbnQoMCwgMCkpOworICAgIGdyYW5kQ2hpbGQtPnNldEJvdW5kcyhJbnRTaXplKDEwMCwgMTAw
KSk7CisgICAgZ3JhbmRDaGlsZC0+c2V0Rml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3Qo
dHJ1ZSk7CisgICAgZ3JhbmRDaGlsZC0+c2V0RHJhd3NDb250ZW50KHRydWUpOworICAgIGdyYW5k
Q2hpbGQtPnNldFRyYW5zZm9ybShmaXhlZFRyYW5zZm9ybSk7CisKKyAgICBjaGlsZC0+YWRkQ2hp
bGQoZ3JhbmRDaGlsZC5yZWxlYXNlKCkpOworICAgIHJvb3QtPmFkZENoaWxkKGNoaWxkLnJlbGVh
c2UoKSk7CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICBW
ZWN0b3I8Q0NMYXllckltcGwqPiBkdW1teVJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAgVmVj
dG9yPENDTGF5ZXJJbXBsKj4gZHVtbXlMYXllckxpc3Q7CisgICAgaW50IGR1bW15TWF4VGV4dHVy
ZVNpemUgPSA1MTI7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJh
bnNmb3Jtc0FuZFZpc2liaWxpdHkocm9vdC5nZXQoKSwgcm9vdC5nZXQoKSwgaWRlbnRpdHlNYXRy
aXgsIGlkZW50aXR5TWF0cml4LCBkdW1teVJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5
ZXJMaXN0LCAwLCBkdW1teU1heFRleHR1cmVTaXplKTsKKworICAgIHsKKyAgICAgICAgQ0NMYXll
ckltcGwqIGdyYW5kQ2hpbGQgPSByb290LT5jaGlsZHJlbigpWzBdLT5jaGlsZHJlbigpWzBdLmdl
dCgpOworCisgICAgICAgIC8vIFRoZSBmaXhlZCBsYXllcidzIHRyYW5zZm9ybSBzaG91bGQgaGF2
ZSB0aGUgZW5jbG9zaW5nIHJlbmRlciBzdXJmYWNlJ3MgdHJhbnNmb3JtIGNhbmNlbGxlZCBvdXQu
CisgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNvbWJpbmVkVHJhbnNmb3JtID0gKHJlbmRl
clN1cmZhY2VUcmFuc2Zvcm0gKiBvcmlnaW5UcmFuc2Zvcm0pLmludmVyc2UoKSAqIGZpeGVkVHJh
bnNmb3JtICogY2VudGVyVHJhbnNmb3JtOworICAgICAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05f
TUFUUklYX0VRKGNvbWJpbmVkVHJhbnNmb3JtLCBncmFuZENoaWxkLT5kcmF3VHJhbnNmb3JtKCkp
OworICAgIH0KK30KKwogVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlDbGlw
UmVjdEN1bGxzUmVuZGVyU3VyZmFjZXMpCiB7CiAgICAgLy8gVGhlIGVudGlyZSBzdWJ0cmVlIG9m
IGxheWVycyB0aGF0IGFyZSBvdXRzaWRlIHRoZSBjbGlwUmVjdCBzaG91bGQgYmUgY3VsbGVkIGF3
YXksCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>146216</attachid>
            <date>2012-06-07 00:18:38 -0700</date>
            <delta_ts>2012-06-07 13:11:56 -0700</delta_ts>
            <desc>Polished and buffed, and with unit tests</desc>
            <filename>bug-70103-20120607001838.patch</filename>
            <type>text/plain</type>
            <size>38776</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5Njg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDk3NDJkYmI2YWMzN2Rm
NzJhNWU3YmI1YjI5Nzk3OGE1OWRiOTVhMC4uZWIzNjg2ZTY0NjUzMTZkZGM5ZDBlZTlkYjgwZDA4
MzA4NGVkOTNjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU5IEBACisyMDEyLTA2LTA2ICBTaGF3
biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
SW1wbGVtZW50IHBvc2l0aW9uOmZpeGVkIGluIGNvbXBvc2l0b3IgdGhyZWFkCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDEwMworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVuaXQgdGVzdHMgYWRkZWQgdG8g
Q0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdDoKKyAgICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21t
b25UZXN0LnZlcmlmeVRyYW5zZm9ybXNGb3JGaXhlZFBvc2l0aW9uTGF5ZXJXaXRoRGlyZWN0Q29u
dGFpbmVyCisgICAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC52ZXJpZnlUcmFuc2Zv
cm1zRm9yRml4ZWRQb3NpdGlvbkxheWVyV2l0aERpc3RhbnRDb250YWluZXIKKyAgICAgICAgICBD
Q0xheWVyVHJlZUhvc3RDb21tb25UZXN0LnZlcmlmeVRyYW5zZm9ybXNGb3JGaXhlZFBvc2l0aW9u
TGF5ZXJXaXRoSW50ZXJtZWRpYXRlU3VyZmFjZQorICAgICAgICAgIENDTGF5ZXJUcmVlSG9zdENv
bW1vblRlc3QudmVyaWZ5VHJhbnNmb3Jtc0ZvckZpeGVkUG9zaXRpb25MYXllcldpdGhDb250YWlu
ZXJMYXllclRoYXRIYXNTdXJmYWNlCisgICAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVz
dC52ZXJpZnlUcmFuc2Zvcm1zRm9yRml4ZWRQb3NpdGlvbkxheWVyVGhhdElzQWxzb0ZpeGVkUG9z
aXRpb25Db250YWluZXIKKyAgICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LnZlcmlm
eVRyYW5zZm9ybXNGb3JGaXhlZFBvc2l0aW9uTGF5ZXJUaGF0SGFzTm9Db250YWluZXIKKworICAg
ICAgICBPcmlnaW5hbCBwYXRjaCBieSBBbHBoYSBMYW0uCisgICAgICAgIEZ1cnRoZXIgc2lnbmlm
aWNhbnQgY29udHJpYnV0aW9ucyBieSBTYW1pIEt5b3N0aWxhLgorCisgICAgICAgIFRoaXMgcGF0
Y2ggaXMgdGhlIGNvbXBvc2l0b3Itc2lkZSBjaGFuZ2UgdGhhdCBhZGRzIHN1cHBvcnQgZm9yCisg
ICAgICAgIGZpeGVkLXBvc2l0aW9uIGxheWVycyB0byBiZSBjb21wb3NpdGVkIGxheWVycy4gQmVm
b3JlIHRoaXMgcGF0Y2gsCisgICAgICAgIGZpeGVkLXBvc2l0aW9uIGVsZW1lbnRzIHdlcmUgcG9z
aXRpb25lZCBieSBXZWJDb3JlIChpLmUuIG1haW4KKyAgICAgICAgdGhyZWFkIHdoZW4gcGFpbnRp
bmcpLCBhbmQgdGhlIGNvbXBvc2l0b3IgZGlkIG5vdCBoYXZlIGVub3VnaAorICAgICAgICBrbm93
bGVkZ2Ugb24gaXRzIG93biB0byBwb3NpdGlvbiBpdCBwcm9wZXJseS4gVGhpcyBwYXRjaCBhZGRz
IHRoZQorICAgICAgICBuZWNlc3NhcnkgbWF0aCBhbmQgcGx1bWJzIHRoZSBuZWNlc3NhcnkgbGF5
ZXIgaW5mb3JtYXRpb24gc28gdGhhdAorICAgICAgICB0aGUgaW1wbCB0aHJlYWQgY2FuIHByb3Bl
cmx5IHBvc2l0aW9uIGZpeGVkLXBvc2l0aW9uIGVsZW1lbnRzIG9uCisgICAgICAgIGl0cyBvd24u
IFRoaXMgYWxsb3dzIGZpeGVkLXBvc2l0aW9uIGVsZW1lbnRzIHRvIGJlIGNvbXBvc2l0ZWQsCisg
ICAgICAgIHdoaWNoIGNhbiBncmVhdGx5IGhlbHAgdG8gYXZvaWQgcmVwYWludGluZyBjb250YWlu
ZXIgbGF5ZXJzIHdoZW4KKyAgICAgICAgc2Nyb2xsaW5nIHdpdGggYSBmaXhlZC1wb3NpdGlvbiBs
YXllci4KKworICAgICAgICBUaGVyZSBhbHNvIG5lZWRzIHRvIGJlIFdlYkNvcmUtc2lkZSBzdXBw
b3J0IGZvciB0aGlzLCB3aGljaCBpcworICAgICAgICBhZGRyZXNzZWQgaW4gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4ODY0CisKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyQ2hyb21pdW06OkxheWVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJv
bWl1bTo6cHVzaFByb3BlcnRpZXNUbyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6
c2V0SXNDb250YWluZXJMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpp
c0NvbnRhaW5lckxheWVyKToKKyAgICAgICAgKExheWVyQ2hyb21pdW0pOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0Rml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6Zml4ZWRUb0NvbnRhaW5lckxheWVy
VmlzaWJsZVJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpDQ0xheWVySW1w
bCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpzZXRJc0NvbnRhaW5lckxheWVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjppc0NvbnRhaW5lckxheWVyKToKKyAgICAg
ICAgKENDTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpzZXRGaXhl
ZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
SW1wbDo6Zml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3QpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbmROZWFyZXN0Rml4ZWRQb3NpdGlv
bkNvbnRhaW5lck9yUmVuZGVyU3VyZmFjZUFuY2VzdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmZp
bmRDb250YWluZXJMYXllckFuZFRyYW5zZm9ybVRvQ29udGFpbmVyU3VyZmFjZSk6CisgICAgICAg
IChXZWJDb3JlOjpjb21wdXRlU2Nyb2xsQ29tcGVuc2F0aW9uRm9yRml4ZWRQb3NpdGlvbkxheWVy
KToKKyAgICAgICAgKFdlYkNvcmU6OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zSW50ZXJuYWwpOgor
CiAyMDEyLTA2LTA2ICBBbmR5IEVzdGVzICA8YWVzdGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBX
cmFwIHVwcGVyY2FzZVdvcmQsIGxvd2VyY2FzZVdvcmQsIGFuZCBjYXBpdGFsaXplV29yZCB3aXRo
IFVTRShBUFBLSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDcyZWQ4ODExNDc4MmZl
YjNjNWM2ZDdlMDU1MDMzYzgyNjc1Yjk1MWEuLjFmMjQwMzc1YTVlMzBjOGJlYjkwM2ExYzQ4YTVm
NmRhZWQyY2RiYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAK
KzIwMTItMDYtMDYgIFNoYXduIFNpbmdoICA8c2hhd25zaW5naEBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgW2Nocm9taXVtXSBJbXBsZW1lbnQgcG9zaXRpb246Zml4ZWQgaW4gY29tcG9zaXRvciB0
aHJlYWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcw
MTAzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB0
ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcDoKKwogMjAxMi0wNi0wNiAgS2VudCBU
YW11cmEgIDx0a2VudEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGlu
ZyBvdXQgcjYwMDQ0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAppbmRleCBmNjFmZDM1ZDUzMDAxNDFm
MmIyZmYyNmI4NzY0YjhmNjJlMDNlMjNkLi4wMjg2YTE2OGRhZjdiM2M0YmU3ZjRmZGFiMTJmYTMz
MWFjZmVhMTliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcApAQCAtNzIsNiArNzIsOCBAQCBMYXll
ckNocm9taXVtOjpMYXllckNocm9taXVtKCkKICAgICAsIG1fZGVidWdCb3JkZXJXaWR0aCgwKQog
ICAgICwgbV9vcGFjaXR5KDEuMCkKICAgICAsIG1fYW5jaG9yUG9pbnRaKDApCisgICAgLCBtX2lz
Q29udGFpbmVyTGF5ZXIoZmFsc2UpCisgICAgLCBtX2ZpeGVkVG9Db250YWluZXJMYXllclZpc2li
bGVSZWN0KGZhbHNlKQogICAgICwgbV9pc0RyYXdhYmxlKGZhbHNlKQogICAgICwgbV9tYXNrc1Rv
Qm91bmRzKGZhbHNlKQogICAgICwgbV9vcGFxdWUoZmFsc2UpCkBAIC01MDYsNiArNTA4LDggQEAg
dm9pZCBMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKENDTGF5ZXJJbXBsKiBsYXllcikK
ICAgICBpZiAoIW9wYWNpdHlJc0FuaW1hdGluZygpKQogICAgICAgICBsYXllci0+c2V0T3BhY2l0
eShtX29wYWNpdHkpOwogICAgIGxheWVyLT5zZXRQb3NpdGlvbihtX3Bvc2l0aW9uKTsKKyAgICBs
YXllci0+c2V0SXNDb250YWluZXJMYXllcihtX2lzQ29udGFpbmVyTGF5ZXIpOworICAgIGxheWVy
LT5zZXRGaXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdChtX2ZpeGVkVG9Db250YWluZXJM
YXllclZpc2libGVSZWN0KTsKICAgICBsYXllci0+c2V0UHJlc2VydmVzM0QocHJlc2VydmVzM0Qo
KSk7CiAgICAgbGF5ZXItPnNldFNjcm9sbFBvc2l0aW9uKG1fc2Nyb2xsUG9zaXRpb24pOwogICAg
IGxheWVyLT5zZXRTdWJsYXllclRyYW5zZm9ybShtX3N1YmxheWVyVHJhbnNmb3JtKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hy
b21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
Q2hyb21pdW0uaAppbmRleCA1ZDUyZjhiYzlmZWVkMTI0MTA2OGQxMTEyZGNjOGQ5ZTQzNzQ2MWVm
Li4xNjI5ZWE2ZmUyMDc1YTIwZjFhMjg1ZGE4ZjFhYzMzNTc0MGM1Mjc0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJv
bWl1bS5oCkBAIC0xMjksNiArMTI5LDEyIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFBvc2l0aW9u
KGNvbnN0IEZsb2F0UG9pbnQmKTsKICAgICBGbG9hdFBvaW50IHBvc2l0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9wb3NpdGlvbjsgfQogCisgICAgdm9pZCBzZXRJc0NvbnRhaW5lckxheWVyKGJvb2wg
aXNDb250YWluZXJMYXllcikgeyBtX2lzQ29udGFpbmVyTGF5ZXIgPSBpc0NvbnRhaW5lckxheWVy
OyB9CisgICAgYm9vbCBpc0NvbnRhaW5lckxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9pc0NvbnRh
aW5lckxheWVyOyB9CisKKyAgICB2b2lkIHNldEZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVS
ZWN0KGJvb2wgZml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3QpIHsgbV9maXhlZFRvQ29u
dGFpbmVyTGF5ZXJWaXNpYmxlUmVjdCA9IGZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0
OyBzZXROZWVkc0NvbW1pdCgpOyB9CisgICAgYm9vbCBmaXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNp
YmxlUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJl
Y3Q7IH0KKwogICAgIHZvaWQgc2V0U3VibGF5ZXJUcmFuc2Zvcm0oY29uc3QgV2ViS2l0OjpXZWJU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwogICAgIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRp
b25NYXRyaXgmIHN1YmxheWVyVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9zdWJsYXllclRy
YW5zZm9ybTsgfQogCkBAIC0zMzMsNiArMzM5LDggQEAgcHJpdmF0ZToKICAgICBXZWJLaXQ6Oldl
YkZpbHRlck9wZXJhdGlvbnMgbV9maWx0ZXJzOwogICAgIFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0
aW9ucyBtX2JhY2tncm91bmRGaWx0ZXJzOwogICAgIGZsb2F0IG1fYW5jaG9yUG9pbnRaOworICAg
IGJvb2wgbV9pc0NvbnRhaW5lckxheWVyOworICAgIGJvb2wgbV9maXhlZFRvQ29udGFpbmVyTGF5
ZXJWaXNpYmxlUmVjdDsKICAgICBib29sIG1faXNEcmF3YWJsZTsKICAgICBib29sIG1fbWFza3NU
b0JvdW5kczsKICAgICBib29sIG1fb3BhcXVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCmluZGV4
IDcyYzBlYTJiNzljZTcyYmE2YWUwZmM2MmVjMTc3NmI2OTJhYzVhZmMuLmE5MDkyMGE5YjZjMmY1
MDgxNmRiN2IwYWZmYzI4MDZiNjQyNGI5M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKQEAg
LTYzLDYgKzYzLDggQEAgQ0NMYXllckltcGw6OkNDTGF5ZXJJbXBsKGludCBpZCkKICAgICAsIG1f
aXNOb25Db21wb3NpdGVkQ29udGVudChmYWxzZSkKICAgICAsIG1fZHJhd3NDb250ZW50KGZhbHNl
KQogICAgICwgbV9mb3JjZVJlbmRlclN1cmZhY2UoZmFsc2UpCisgICAgLCBtX2lzQ29udGFpbmVy
TGF5ZXIoZmFsc2UpCisgICAgLCBtX2ZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0KGZh
bHNlKQogICAgICwgbV9wYWdlU2NhbGVEZWx0YSgxKQogICAgICwgbV90YXJnZXRSZW5kZXJTdXJm
YWNlKDApCiAgICAgLCBtX2RyYXdEZXB0aCgwKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKaW5kZXggZmQ0
ZmFjYWE0MGNiYTE1ZGY2MjlhMWIyNGRhMzJjMmZhNWIzNzQ0ZC4uZWE4NWVlZDcxNjMxOGE1MTRi
M2M4OTg3YzcyMmFmNmM1YWQzMTZmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCkBAIC0xMzIsNiAr
MTMyLDEyIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQm
KTsKICAgICBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9z
aXRpb247IH0KIAorICAgIHZvaWQgc2V0SXNDb250YWluZXJMYXllcihib29sIGlzQ29udGFpbmVy
TGF5ZXIpIHsgbV9pc0NvbnRhaW5lckxheWVyID0gaXNDb250YWluZXJMYXllcjsgfQorICAgIGJv
b2wgaXNDb250YWluZXJMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1faXNDb250YWluZXJMYXllcjsg
fQorCisgICAgdm9pZCBzZXRGaXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdChib29sIGZp
eGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0ID0gdHJ1ZSkgeyBtX2ZpeGVkVG9Db250YWlu
ZXJMYXllclZpc2libGVSZWN0ID0gZml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3Q7fQor
ICAgIGJvb2wgZml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3QoKSBjb25zdCB7IHJldHVy
biBtX2ZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0OyB9CisKICAgICB2b2lkIHNldFBy
ZXNlcnZlczNEKGJvb2wpOwogICAgIGJvb2wgcHJlc2VydmVzM0QoKSBjb25zdCB7IHJldHVybiBt
X3ByZXNlcnZlczNEOyB9CiAKQEAgLTMyMyw2ICszMjksMTEgQEAgcHJpdmF0ZToKICAgICBib29s
IG1fZHJhd3NDb250ZW50OwogICAgIGJvb2wgbV9mb3JjZVJlbmRlclN1cmZhY2U7CiAKKyAgICAv
LyBTZXQgZm9yIHRoZSBsYXllciB0aGF0IG90aGVyIGxheWVycyBhcmUgZml4ZWQgdG8uCisgICAg
Ym9vbCBtX2lzQ29udGFpbmVyTGF5ZXI7CisgICAgLy8gU2V0IGZvciB0aGUgbGF5ZXIgdGhhdCBo
YXMgcG9zaXRpb24gZml4ZWQgdG8gdGhlIGNvbnRhaW5lciBsYXllcidzIHZpc2libGUgcmVjdC4K
KyAgICBib29sIG1fZml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3Q7CisKICAgICBGbG9h
dFNpemUgbV9zY3JvbGxEZWx0YTsKICAgICBJbnRTaXplIG1fc2VudFNjcm9sbERlbHRhOwogICAg
IEludFNpemUgbV9tYXhTY3JvbGxQb3NpdGlvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3RDb21tb24uY3BwCmluZGV4IDljZDAzMTYwZTJiMGJjNWE3YjY1MmU4MGI5ZjJiYWRiZDAx
YmMzY2YuLmU0ZTI5ZWM4MWQ5Y2ZkMmQ4NzNlNTFmOGVhYjZhMDI0ZmMyYTQwYTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdENvbW1vbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcApAQCAtMzE4LDYgKzMxOCwxMjUg
QEAgc3RhdGljIGJvb2wgc3VidHJlZVNob3VsZFJlbmRlclRvU2VwYXJhdGVTdXJmYWNlKExheWVy
VHlwZSogbGF5ZXIsIGJvb2wgYXhpc0FsaWcKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK3RlbXBs
YXRlPHR5cGVuYW1lIExheWVyVHlwZT4KK3N0YXRpYyBMYXllclR5cGUqIGZpbmROZWFyZXN0Rml4
ZWRQb3NpdGlvbkNvbnRhaW5lck9yUmVuZGVyU3VyZmFjZUFuY2VzdG9yKExheWVyVHlwZSogbGF5
ZXIpCit7CisgICAgTGF5ZXJUeXBlKiBwYXJlbnRMYXllciA9IGxheWVyLT5wYXJlbnQoKTsKKwor
ICAgIHdoaWxlIChwYXJlbnRMYXllcikgeworICAgICAgICBpZiAocGFyZW50TGF5ZXItPmlzQ29u
dGFpbmVyTGF5ZXIoKSB8fCBwYXJlbnRMYXllci0+cmVuZGVyU3VyZmFjZSgpKQorICAgICAgICAg
ICAgcmV0dXJuIHBhcmVudExheWVyOworICAgICAgICBwYXJlbnRMYXllciA9IHBhcmVudExheWVy
LT5wYXJlbnQoKTsKKyAgICB9CisKKyAgICAvLyBUaGlzIG1lYW5zIGV2ZW4gdGhlIHJvb3QgbGF5
ZXIgaXRzZWxmIGRpZG4ndCBoYXZlIGEgcmVuZGVyU3VyZmFjZT8KKyAgICAvLyBJdCBzaG91bGQg
bmV2ZXIgaGFwcGVuLgorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5cGU+CitzdGF0aWMgdm9pZCBmaW5kQ29udGFp
bmVyTGF5ZXJBbmRUcmFuc2Zvcm1Ub0NvbnRhaW5lclN1cmZhY2UoTGF5ZXJUeXBlKiBmaXhlZFBv
c0xheWVyLCBMYXllclR5cGUqJiBjb250YWluZXJMYXllciwgV2ViVHJhbnNmb3JtYXRpb25NYXRy
aXgmIGxvY2FsU3VyZmFjZVRvQ29udGFpbmVyU3VyZmFjZSkKK3sKKyAgICAvLyBTZWFyY2ggdXAg
dGhlIGhpZXJhcmNoeSBmb3IgdGhlIGZpcnN0IGNvbnRhaW5lciBsYXllci4gSWYgdGhlIGZpeGVk
UG9zTGF5ZXIgYW5kCisgICAgLy8gY29udGFpbmVyTGF5ZXIgZXhpc3Qgb24gZGlmZmVyZW50IHJl
bmRlclN1cmZhY2VzLCB0aGVuIHdlIGhhdmUgdG8gYWNjdW11bGF0ZSB0aGUKKyAgICAvLyBhcHBy
b3ByaWF0ZSB0cmFuc2Zvcm0gdGhhdCBjb252ZXJ0cyBiZXR3ZWVuIHRoZSB0d28gc3VyZmFjZSBz
cGFjZXMuCisgICAgLy8KKyAgICAvLyBJZiB3ZSBoaXQgdGhlIHJvb3QgbGF5ZXIgKGkuZS4gYW5j
ZXN0b3Igd2l0aG91dCBwYXJlbnQpIGJlZm9yZSBmaW5kaW5nIGEgY29udGFpbmVyCisgICAgLy8g
bGF5ZXIsIHRoZW4gc29tZXRoaW5nIGlzIHdyb25nIHdpdGggY29kZSBlbHNld2hlcmUsIGJ1dCB3
ZSBuZWVkIHRvIGhhbmRsZSBpdAorICAgIC8vIGdyYWNlZnVsbHkganVzdCBpbiBjYXNlLgorCisg
ICAgTGF5ZXJUeXBlKiBhbmNlc3RvciA9IGZpbmROZWFyZXN0Rml4ZWRQb3NpdGlvbkNvbnRhaW5l
ck9yUmVuZGVyU3VyZmFjZUFuY2VzdG9yKGZpeGVkUG9zTGF5ZXIpOworCisgICAgd2hpbGUgKGFu
Y2VzdG9yICYmIGFuY2VzdG9yLT5wYXJlbnQoKSAmJiAhYW5jZXN0b3ItPmlzQ29udGFpbmVyTGF5
ZXIoKSkgeworICAgICAgICAvLyBTaW5jZSB3ZSdyZSBnb2luZyBiYWNrd2FyZHMgdXAgdGhlIGhp
ZXJhcmNoeSwgdGhlIHN1cmZhY2UncyBpbnZlcnNlIG9yaWdpblRyYW5zZm9ybSBzaG91bGQgcHJl
LW11bHRpcGx5IHRoZSBhY2N1bXVsYXRpbmcgdHJhbnNmb3JtLgorICAgICAgICBBU1NFUlQoYW5j
ZXN0b3ItPnJlbmRlclN1cmZhY2UoKSk7CisgICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4
IGludmVyc2VPcmlnaW5UcmFuc2Zvcm0gPSBhbmNlc3Rvci0+cmVuZGVyU3VyZmFjZSgpLT5vcmln
aW5UcmFuc2Zvcm0oKS5pbnZlcnNlKCk7CisgICAgICAgIGxvY2FsU3VyZmFjZVRvQ29udGFpbmVy
U3VyZmFjZSA9IGludmVyc2VPcmlnaW5UcmFuc2Zvcm0gKiBsb2NhbFN1cmZhY2VUb0NvbnRhaW5l
clN1cmZhY2U7CisgICAgICAgIGFuY2VzdG9yID0gZmluZE5lYXJlc3RGaXhlZFBvc2l0aW9uQ29u
dGFpbmVyT3JSZW5kZXJTdXJmYWNlQW5jZXN0b3IoYW5jZXN0b3IpOworICAgIH0KKworICAgIGNv
bnRhaW5lckxheWVyID0gYW5jZXN0b3I7CisgICAgCisgICAgLy8gSWYgdGhpcyBhc3NlcnRpb24g
ZmlyZXMsIHRoZXJlJ3MgYSBidWcgaW4gdGhpcyBjb2RlIGl0c2VsZi4KKyAgICBBU1NFUlQoY29u
dGFpbmVyTGF5ZXIpOworICAgIAorICAgIC8vIElmIHRoaXMgYXNzZXJ0aW9uIGZpcmVzLCB0aGVy
ZSBpcyBhIGJ1ZyBvdXRzaWRlIHRoaXMgY29kZS4KKyAgICAvLyBJdCBtZWFucyB0aGF0IHdlIGZv
dW5kIHRoZSByb290TGF5ZXIgYmVmb3JlIGZpbmRpbmcgYSB2YWxpZCBjb250YWluZXJMYXllci4K
KyAgICBBU1NFUlQoY29udGFpbmVyTGF5ZXItPmlzQ29udGFpbmVyTGF5ZXIoKSk7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZT4KK3N0YXRpYyBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBjb21wdXRlU2Nyb2xsQ29tcGVuc2F0aW9uRm9yRml4ZWRQb3NpdGlvbkxheWVyKExheWVyVHlw
ZSogZml4ZWRQb3NMYXllcikKK3sKKyAgICAvLyAiU2Nyb2xsIGNvbXBlbnNhdGlvbiIgaXMgdGhl
IHRvdGFsIGNvbXBvc2l0ZSB0cmFuc2Zvcm0gdGhhdCBjYW5jZWxzIG91dCB0aGUKKyAgICAvLyBz
Y3JvbGxEZWx0YSwgc28gdGhhdCBpdCBkb2VzIG5vdCBhZmZlY3QgYSBmaXhlZCBwb3NpdGlvbiBs
YXllci4gVG8gY2FuY2VsIG91dCB0aGUKKyAgICAvLyBzY3JvbGxEZWx0YSwgdGhlIGludmVyc2Ug
c2Nyb2xsIHRyYW5zbGF0aW9uIG5lZWRzIHRvIGJlIGFwcGxpZWQgd2l0aCByZXNwZWN0IHRvIHRo
ZQorICAgIC8vIGNvbnRhaW5lcidzIHNwYWNlLgorICAgIC8vCisgICAgLy8gVGhlIHRvdGFsIFNj
cm9sbENvbXBlbnNhdGlvbiBtYXRyaXggZG9lcyB0aGUgZm9sbG93aW5nIChpbnRlcnByZXRpbmcg
dGhlIHRyYW5zZm9ybSBmcm9tIGxlZnQtdG8tcmlnaHQpOgorICAgIC8vICAgIDEuIHRyYW5zZm9y
bXMgZnJvbSBsYXllcidzIHRhcmdldCBzdXJmYWNlIHNwYWNlIHRvIHRoZSBzcGFjZSBvZiB0aGUg
Zml4ZWQtcG9zaXRpb24gY29udGFpbmVyLgorICAgIC8vICAgIDIuIGluc2VydHMgYSBuZXcgdHJh
bnNsYXRpb24gdGhhdCBjYW5jZWxzIG91dCB0aGUgb3JpZ2luYWwgc2Nyb2xsRGVsdGEsIHNvIHRo
ZQorICAgIC8vICAgICAgIGZpeGVkLXBvc2l0aW9uIGxheWVyIGRvZXMgbm90IHNjcm9sbC4KKyAg
ICAvLyAgICAzLiB0cmFuc2Zvcm1zIGJhY2sgZnJvbSBmaXhlZC1wb3NpdGlvbiBjb250YWluZXIg
dG8gdGhlIGxheWVyJ3MgdGFyZ2V0IHN1cmZhY2Ugc3BhY2UuCisgICAgLy8KKyAgICAvLyBUaGVy
ZSBhcmUgYSBjb3VwbGUgb2YgYXNzdW1wdGlvbnM6CisgICAgLy8gICAgMS4gVGhlIGNvbnRhaW5l
ciBsYXllciBpcyBhIHNjcm9sbGluZyBsYXllciBhbmQgb25seSBoYXMgdHJhbnNsYXRpb24gdHJh
bnNmb3JtYXRpb24gbG9jYWxseS4KKyAgICAvLyAgICAyLiBUaGUgY29udGFpbmVyIGxheWVyIGhh
cyBhIHBhcmVudCB0aGF0IGRlZmluZXMgdGhlIGNvb3JkaW5hdGUgc3lzdGVtIGZvciB0aGUgc2Ny
b2xsCisgICAgLy8gICAgICAgdHJhbnNsYXRpb24uIEhlcmUgd2UgY2FsbCBpdCB0aGUgImNsaXAg
bGF5ZXIiLCBiZWNhdXNlIHNjcm9sbGluZyBsYXllcnMgYXJlIGdlbmVyYWxseQorICAgIC8vICAg
ICAgIGVtYmVkZGVkIGluIG9uZS4KKyAgICAvLworICAgIC8vIEFub3RoZXIgaW50ZXJwcmV0YXRp
b24gb2YgdGhlIHNhbWUgbWF0aDoKKyAgICAvLworICAgIC8vIFdlIGNhbiBkZWNvbXBvc2UgdGhl
IGxheWVyJ3MgcGFyZW50TWF0cml4IGFzIGZvbGxvd3M6CisgICAgLy8KKyAgICAvLyAgICAgICAg
TVtwYXJlbnRdID0gTVtjbGlwXSAqIFRyW2NvbnRhaW5lcl0gKiBNW2Rlc2NlbmRhbnRdCisgICAg
Ly8KKyAgICAvLyB3aGVyZSBNW2Rlc2NlbmRhbnRdIGlzIHRoZSB0b3RhbCB0cmFuc2Zvcm1hdGlv
biBtYXRyaXggZnJvbSBjb250YWluZXIgbGF5ZXIncyBjb29yZGluYXRlCisgICAgLy8gc3BhY2Ug
dG8gdGhlIHNwYWNlIG9mIE1bcGFyZW50XS4gQW5kIHRodXM6CisgICAgLy8KKyAgICAvLyAgICAg
ICAgVHJbY29udGFpbmVyXSAqIE1bZGVzY2VuZGFudF0gPSBNW2NsaXBdLmludmVyc2UoKSAqIE1b
cGFyZW50XQorICAgIC8vCisgICAgLy8gQW5kIHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggZm9y
IHRoaXMgbGF5ZXIgd2l0aG91dCBjb250YWluZXIncyBzY3JvbGwgYmVjb21lczoKKyAgICAvLwor
ICAgIC8vICAgICAgICBNW2NsaXBdICogLVRyW2NvbnRhaW5lcl0gKiBUcltjb250YWluZXJdICog
TVtkZXNjZW5kYW50XSA9IE1bY2xpcF0gKiAtVHJbY29udGFpbmVyXSAqIE1bY2xpcF0uaW52ZXJz
ZSgpICogTVtwYXJlbnRdCisgICAgLy8KKyAgICAvLyBOb3RlLCBpbiB0aGlzIGNhc2UsIHRlY2hu
aWNhbGx5IE1bY2xpcF0gaXMgdGhlIHBhcmVudE1hdHJpeCBvZiB0aGUgY2xpcExheWVyJ3MKKyAg
ICAvLyBjaGlsZHJlbi4gVGhlb3JldGljYWxseSBpdCBpcyBOT1QgdGhlIHNhbWUgdG8gdXNlIHRo
ZSBjbGlwTGF5ZXIncyBkcmF3VHJhbnNmb3JtLAorICAgIC8vIGJ1dCBtYXRoZW1hdGljYWxseSB0
aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgZHJhd1RyYW5zZm9ybSdzIHNwYWNlIGFuZAorICAg
IC8vIHBhcmVudE1hdHJpeCdzIHNwYWNlIHdpbGwgbm90IGFmZmVjdCB0aGUgY29ycmVjdG5lc3Mg
b2YgdGhlIHNjcm9sbCBjb21wZW5zYXRpb24uCisgICAgLy8KKworICAgIC8vIFRoaXMgZnVuY3Rp
b24gaXMgb25seSBtZWFuaW5nZnVsIGlmIHRoZSBsYXllciBpcyBhIGZpeGVkIHBvc2l0aW9uZWQg
ZWxlbWVudC4KKyAgICBBU1NFUlQoZml4ZWRQb3NMYXllciAmJiBmaXhlZFBvc0xheWVyLT5maXhl
ZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdCgpKTsKKworICAgIExheWVyVHlwZSogY29udGFp
bmVyTGF5ZXI7CisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggbG9jYWxTdXJmYWNlVG9GaXhl
ZFBvc2l0aW9uU3VyZmFjZTsKKyAgICBmaW5kQ29udGFpbmVyTGF5ZXJBbmRUcmFuc2Zvcm1Ub0Nv
bnRhaW5lclN1cmZhY2UoZml4ZWRQb3NMYXllciwgY29udGFpbmVyTGF5ZXIsIGxvY2FsU3VyZmFj
ZVRvRml4ZWRQb3NpdGlvblN1cmZhY2UpOworCisgICAgRmxvYXRTaXplIHNjcm9sbERlbHRhID0g
Y29udGFpbmVyTGF5ZXItPnNjcm9sbERlbHRhKCk7CisgICAgTGF5ZXJUeXBlKiBjbGlwTGF5ZXIg
PSBjb250YWluZXJMYXllci0+cGFyZW50KCk7CisgICAgQVNTRVJUKGNsaXBMYXllcik7CisKKyAg
ICAvLyBDb25zdHJ1Y3RvciBpbml0aWFsaXplcyB0byBpZGVudGl0eSBtYXRyaXguCisgICAgV2Vi
VHJhbnNmb3JtYXRpb25NYXRyaXggdG90YWxTY3JvbGxDb21wZW5zYXRpb247CisKKyAgICAvLyBJ
ZiB0aGVyZSBpcyBubyBzY3JvbGxEZWx0YSwgdGhlbiB0aGVyZSBpcyBubyBuZWVkIHRvIGRvIG1v
cmUgbWF0cml4IG11bHRpcGxpY2F0aW9ucyBzaW5jZSBpdCB3b3VsZCB0b3RhbCB1cCB0byBhbiBp
ZGVudGl0eSBtYXRyaXggYW55d2F5LgorICAgIGlmICgoc2Nyb2xsRGVsdGEud2lkdGgoKSB8fCBz
Y3JvbGxEZWx0YS5oZWlnaHQoKSkpIHsKKyAgICAgICAgaWYgKGNsaXBMYXllcikgeworICAgICAg
ICAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggbG9jYWxUYXJnZXRTdXJmYWNlVG9GaXhlZFBv
c2l0aW9uQ29udGFpbmVyID0gbG9jYWxTdXJmYWNlVG9GaXhlZFBvc2l0aW9uU3VyZmFjZSAqIGNs
aXBMYXllci0+ZHJhd1RyYW5zZm9ybSgpOworICAgICAgICAgICAgdG90YWxTY3JvbGxDb21wZW5z
YXRpb24gPSBsb2NhbFRhcmdldFN1cmZhY2VUb0ZpeGVkUG9zaXRpb25Db250YWluZXI7CisgICAg
ICAgICAgICB0b3RhbFNjcm9sbENvbXBlbnNhdGlvbi50cmFuc2xhdGUoc2Nyb2xsRGVsdGEud2lk
dGgoKSwgc2Nyb2xsRGVsdGEuaGVpZ2h0KCkpOworICAgICAgICAgICAgdG90YWxTY3JvbGxDb21w
ZW5zYXRpb24ubXVsdGlwbHkobG9jYWxUYXJnZXRTdXJmYWNlVG9GaXhlZFBvc2l0aW9uQ29udGFp
bmVyLmludmVyc2UoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBUaGlzIGNh
c2Ugd2lsbCBiZSBjYXVnaHQgYnkgZGVidWcgYXNzZXJ0aW9ucyBhYm92ZSwgYnV0IHNob3VsZCBz
dGlsbCBiZSBoYW5kbGVkIGdyYWNlZnVsbHkganVzdCBpbiBjYXNlLgorICAgICAgICAgICAgdG90
YWxTY3JvbGxDb21wZW5zYXRpb24udHJhbnNsYXRlKHNjcm9sbERlbHRhLndpZHRoKCksIHNjcm9s
bERlbHRhLmhlaWdodCgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0b3RhbFNj
cm9sbENvbXBlbnNhdGlvbjsKK30KKwogLy8gUmVjdXJzaXZlbHkgd2Fsa3MgdGhlIGxheWVyIHRy
ZWUgc3RhcnRpbmcgYXQgdGhlIGdpdmVuIG5vZGUgYW5kIGNvbXB1dGVzIGFsbCB0aGUKIC8vIG5l
Y2Vzc2FyeSB0cmFuc2Zvcm1hdGlvbnMsIGNsaXBSZWN0cywgcmVuZGVyIHN1cmZhY2VzLCBldGMu
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIExheWVyTGlzdCwgdHlwZW5h
bWUgUmVuZGVyU3VyZmFjZVR5cGUsIHR5cGVuYW1lIExheWVyU29ydGVyPgpAQCAtNDQ5LDYgKzU2
OCwxNyBAQCBzdGF0aWMgYm9vbCBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0ludGVybmFsKExheWVy
VHlwZSogbGF5ZXIsIExheWVyVHlwZSogcm9vdExheQogICAgIGxheWVyTG9jYWxUcmFuc2Zvcm0u
dHJhbnNsYXRlM2QoY2VudGVyT2Zmc2V0WCwgY2VudGVyT2Zmc2V0WSwgLWxheWVyLT5hbmNob3JQ
b2ludFooKSk7CiAKICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjb21iaW5lZFRyYW5zZm9y
bSA9IHBhcmVudE1hdHJpeDsKKworICAgIGlmIChsYXllci0+Zml4ZWRUb0NvbnRhaW5lckxheWVy
VmlzaWJsZVJlY3QoKSkgeworICAgICAgICAvLyBTcGVjaWFsIGNhc2U6IHRoaXMgbGF5ZXIgaXMg
YSBjb21wb3NpdGVkIGZpeGVkLXBvc2l0aW9uIGVsZW1lbnQ7IHdlIG5lZWQgdG8KKyAgICAgICAg
Ly8gZXhwbGljaXRseSBjb21wZW5zYXRlIGZvciB0aGUgY29udGFpbmVyJ3Mgc2Nyb2xsRGVsdGEg
dG8ga2VlcCBpdCBmaXhlZCBjb3JyZWN0bHkuCisgICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0
cml4IHRvdGFsU2Nyb2xsQ29tcGVuc2F0aW9uID0gY29tcHV0ZVNjcm9sbENvbXBlbnNhdGlvbkZv
ckZpeGVkUG9zaXRpb25MYXllcihsYXllcik7CisgICAgICAgIGNvbWJpbmVkVHJhbnNmb3JtID0g
dG90YWxTY3JvbGxDb21wZW5zYXRpb24gKiBwYXJlbnRNYXRyaXg7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgLy8gQ29tbW9uIGNhc2U6IGxheWVyIGlzIG5vdCBmaXhlZCBwb3NpdGlvbi4KKyAgICAg
ICAgY29tYmluZWRUcmFuc2Zvcm0gPSBwYXJlbnRNYXRyaXg7CisgICAgfQorCiAgICAgY29tYmlu
ZWRUcmFuc2Zvcm0ubXVsdGlwbHkobGF5ZXJMb2NhbFRyYW5zZm9ybSk7CiAKICAgICBib29sIGFu
aW1hdGluZ1RyYW5zZm9ybVRvVGFyZ2V0ID0gbGF5ZXItPnRyYW5zZm9ybUlzQW5pbWF0aW5nKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9z
dENvbW1vblRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJl
ZUhvc3RDb21tb25UZXN0LmNwcAppbmRleCAxZDA2OWE1YmUzYWI1NDlmMGRmMTg2MTkyZGJiZWU5
OTU2YzgzZTE4Li4zZGNiYmYyNDdhYjY5MTUxMjc3YmNkMTYxZmNmMWI1NjJmODk2MmYxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1v
blRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVI
b3N0Q29tbW9uVGVzdC5jcHAKQEAgLTExNzYsNiArMTE3Niw0MjUgQEAgVEVTVChDQ0xheWVyVHJl
ZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlGb3JjZVJlbmRlclN1cmZhY2UpCiAgICAgRVhQRUNUX0VR
KHJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpLCAwVSk7CiB9CiAKK1RFU1QoQ0NMYXllclRy
ZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvckZpeGVkUG9zaXRpb25MYXllcldp
dGhEaXJlY3RDb250YWluZXIpCit7CisgICAgLy8gTWFrZSBzdXJlIHRoYXQgZml4ZWQtcG9zaXRp
b24gbGF5ZXJzIGNvbXBlbnNhdGUgZm9yIHRoZWlyIGNvbnRhaW5lcidzIHNjcm9sbERlbHRhIGNv
cnJlY3RseS4KKyAgICAvLworICAgIC8vIFRoaXMgdGVzdCBjaGVja3MgdGhlIHNjZW5hcmlvIHdo
ZXJlIHRoZSBmaXhlZC1wb3NpdGlvbiBjb250YWluZXIgaXMgdGhlIGRpcmVjdAorICAgIC8vIHBh
cmVudCBvZiB0aGUgZml4ZWQtcG9zaXRpb24gbGF5ZXIuCisgICAgRGVidWdTY29wZWRTZXRJbXBs
VGhyZWFkIHNjb3BlZEltcGxUaHJlYWQ7CisKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3Qg
PSBDQ0xheWVySW1wbDo6Y3JlYXRlKDEpOworICAgIE93blB0cjxDQ0xheWVySW1wbD4gY2hpbGQg
PSBDQ0xheWVySW1wbDo6Y3JlYXRlKDIpOworICAgIE93blB0cjxDQ0xheWVySW1wbD4gZ3JhbmRD
aGlsZCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMyk7CisKKyAgICByb290LT5jcmVhdGVSZW5kZXJT
dXJmYWNlKCk7CisgICAgcm9vdC0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgwLCAwKSk7Cisg
ICAgcm9vdC0+c2V0Qm91bmRzKEludFNpemUoMTAwLCAxMDApKTsKKworICAgIGNoaWxkLT5zZXRC
b3VuZHMoSW50U2l6ZSgxMDAsIDEwMCkpOworICAgIGNoaWxkLT5zZXRBbmNob3JQb2ludChGbG9h
dFBvaW50KDAsIDApKTsKKyAgICBjaGlsZC0+c2V0SXNDb250YWluZXJMYXllcih0cnVlKTsKKwor
ICAgIGdyYW5kQ2hpbGQtPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoMCwgMCkpOworICAgIGdy
YW5kQ2hpbGQtPnNldEJvdW5kcyhJbnRTaXplKDEwMCwgMTAwKSk7CisgICAgZ3JhbmRDaGlsZC0+
c2V0Rml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3QodHJ1ZSk7CisKKyAgICBjaGlsZC0+
YWRkQ2hpbGQoZ3JhbmRDaGlsZC5yZWxlYXNlKCkpOworICAgIHJvb3QtPmFkZENoaWxkKGNoaWxk
LnJlbGVhc2UoKSk7CisKKyAgICB7CisgICAgICAgIENDTGF5ZXJJbXBsKiBjaGlsZCA9IHJvb3Qt
PmNoaWxkcmVuKClbMF0uZ2V0KCk7CisgICAgICAgIENDTGF5ZXJJbXBsKiBncmFuZENoaWxkID0g
Y2hpbGQtPmNoaWxkcmVuKClbMF0uZ2V0KCk7CisgICAgICAgIAorICAgICAgICBXZWJUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICAgICAgVmVjdG9yPENDTGF5ZXJJbXBs
Kj4gZHVtbXlSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgICAgICBWZWN0b3I8Q0NMYXllcklt
cGwqPiBkdW1teUxheWVyTGlzdDsKKyAgICAgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1
MTI7CisKKyAgICAgICAgLy8gQ2FzZSAxOiBzY3JvbGxEZWx0YSBvZiAwLCAwCisgICAgICAgIGNo
aWxkLT5zZXRTY3JvbGxEZWx0YShJbnRTaXplKDAsIDApKTsKKyAgICAgICAgQ0NMYXllclRyZWVI
b3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtcyhyb290LmdldCgpLCByb290LmdldCgp
LCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIGR1bW15UmVuZGVyU3VyZmFjZUxheWVy
TGlzdCwgZHVtbXlMYXllckxpc3QsIDAsIGR1bW15TWF4VGV4dHVyZVNpemUpOworCisgICAgICAg
IC8vIFRoZSBleHBlY3RlZCBkcmF3IHRyYW5zZm9ybXMgd2l0aG91dCBhbnkgc2Nyb2xsIHNob3Vs
ZCBzdGlsbCBpbmNsdWRlIGEgdHJhbnNsYXRpb24gdG8gdGhlIGNlbnRlciBvZiB0aGUgbGF5ZXIg
KGkuZS4gdHJhbnNsYXRpb24gYnkgNTAsIDUwKS4KKyAgICAgICAgV2ViVHJhbnNmb3JtYXRpb25N
YXRyaXggZXhwZWN0ZWRDaGlsZFRyYW5zZm9ybTsKKyAgICAgICAgZXhwZWN0ZWRDaGlsZFRyYW5z
Zm9ybS50cmFuc2xhdGUoNTAsIDUwKTsKKyAgICAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgg
ZXhwZWN0ZWRHcmFuZENoaWxkVHJhbnNmb3JtOworICAgICAgICBleHBlY3RlZEdyYW5kQ2hpbGRU
cmFuc2Zvcm0udHJhbnNsYXRlKDUwLCA1MCk7CisgICAgICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElP
Tl9NQVRSSVhfRVEoZXhwZWN0ZWRDaGlsZFRyYW5zZm9ybSwgY2hpbGQtPmRyYXdUcmFuc2Zvcm0o
KSk7CisgICAgICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0ZWRHcmFu
ZENoaWxkVHJhbnNmb3JtLCBncmFuZENoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworCisgICAgICAg
IC8vIENhc2UgMjogc2Nyb2xsRGVsdGEgb2YgMTAsIDEwCisgICAgICAgIGNoaWxkLT5zZXRTY3Jv
bGxEZWx0YShJbnRTaXplKDEwLCAxMCkpOworICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246
OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHJvb3QuZ2V0KCksIHJvb3QuZ2V0KCksIGlkZW50aXR5
TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgZHVtbXlSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1t
eUxheWVyTGlzdCwgMCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisKKyAgICAgICAgLy8gSGVyZSB0
aGUgY2hpbGQgaXMgYWZmZWN0ZWQgYnkgc2Nyb2xsRGVsdGEsIGJ1dCB0aGUgZml4ZWQgcG9zaXRp
b24gZ3JhbmRDaGlsZCBzaG91bGQgbm90IGJlIGFmZmVjdGVkLgorICAgICAgICBleHBlY3RlZENo
aWxkVHJhbnNmb3JtLm1ha2VJZGVudGl0eSgpOworICAgICAgICBleHBlY3RlZENoaWxkVHJhbnNm
b3JtLnRyYW5zbGF0ZSg0MCwgNDApOworICAgICAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFU
UklYX0VRKGV4cGVjdGVkQ2hpbGRUcmFuc2Zvcm0sIGNoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOwor
ICAgICAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVkR3JhbmRDaGls
ZFRyYW5zZm9ybSwgZ3JhbmRDaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICB9Cit9CisKK1RF
U1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvckZpeGVkUG9z
aXRpb25MYXllcldpdGhEaXN0YW50Q29udGFpbmVyKQoreworICAgIC8vIE1ha2Ugc3VyZSB0aGF0
IGZpeGVkLXBvc2l0aW9uIGxheWVycyBjb21wZW5zYXRlIGZvciB0aGVpciBjb250YWluZXIncyBz
Y3JvbGxEZWx0YSBjb3JyZWN0bHkuCisgICAgLy8KKyAgICAvLyBUaGlzIHRlc3QgY2hlY2tzIHRo
ZSBzY2VuYXJpbyB3aGVyZSB0aGUgZml4ZWQtcG9zaXRpb24gY29udGFpbmVyIGlzIE5PVCB0aGUg
ZGlyZWN0CisgICAgLy8gcGFyZW50IG9mIHRoZSBmaXhlZC1wb3NpdGlvbiBsYXllci4KKyAgICBE
ZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgc2NvcGVkSW1wbFRocmVhZDsKKworICAgIE93blB0cjxD
Q0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMSk7CisgICAgT3duUHRyPEND
TGF5ZXJJbXBsPiBjaGlsZCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMik7CisgICAgT3duUHRyPEND
TGF5ZXJJbXBsPiBncmFuZENoaWxkID0gQ0NMYXllckltcGw6OmNyZWF0ZSgzKTsKKyAgICBPd25Q
dHI8Q0NMYXllckltcGw+IGdyZWF0R3JhbmRDaGlsZCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoNCk7
CisKKyAgICByb290LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAgcm9vdC0+c2V0QW5jaG9y
UG9pbnQoRmxvYXRQb2ludCgwLCAwKSk7CisgICAgcm9vdC0+c2V0Qm91bmRzKEludFNpemUoMTAw
LCAxMDApKTsKKworICAgIGNoaWxkLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAsIDApKTsK
KyAgICBjaGlsZC0+c2V0Qm91bmRzKEludFNpemUoMTAwLCAxMDApKTsKKyAgICBjaGlsZC0+c2V0
SXNDb250YWluZXJMYXllcih0cnVlKTsKKworICAgIGdyYW5kQ2hpbGQtPnNldEFuY2hvclBvaW50
KEZsb2F0UG9pbnQoMCwgMCkpOworICAgIGdyYW5kQ2hpbGQtPnNldEJvdW5kcyhJbnRTaXplKDEw
MCwgMTAwKSk7CisgICAgZ3JhbmRDaGlsZC0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCg4LCA2KSk7
CisKKyAgICBncmVhdEdyYW5kQ2hpbGQtPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoMCwgMCkp
OworICAgIGdyZWF0R3JhbmRDaGlsZC0+c2V0Qm91bmRzKEludFNpemUoMTAwLCAxMDApKTsKKyAg
ICBncmVhdEdyYW5kQ2hpbGQtPnNldEZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0KHRy
dWUpOworCisgICAgZ3JhbmRDaGlsZC0+YWRkQ2hpbGQoZ3JlYXRHcmFuZENoaWxkLnJlbGVhc2Uo
KSk7CisgICAgY2hpbGQtPmFkZENoaWxkKGdyYW5kQ2hpbGQucmVsZWFzZSgpKTsKKyAgICByb290
LT5hZGRDaGlsZChjaGlsZC5yZWxlYXNlKCkpOworCisgICAgeworICAgICAgICBDQ0xheWVySW1w
bCogY2hpbGQgPSByb290LT5jaGlsZHJlbigpWzBdLmdldCgpOworICAgICAgICBDQ0xheWVySW1w
bCogZ3JhbmRDaGlsZCA9IGNoaWxkLT5jaGlsZHJlbigpWzBdLmdldCgpOworICAgICAgICBDQ0xh
eWVySW1wbCogZ3JlYXRHcmFuZENoaWxkID0gZ3JhbmRDaGlsZC0+Y2hpbGRyZW4oKVswXS5nZXQo
KTsKKyAgICAgICAgCisgICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0
cml4OworICAgICAgICBWZWN0b3I8Q0NMYXllckltcGwqPiBkdW1teVJlbmRlclN1cmZhY2VMYXll
ckxpc3Q7CisgICAgICAgIFZlY3RvcjxDQ0xheWVySW1wbCo+IGR1bW15TGF5ZXJMaXN0OworICAg
ICAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKKworICAgICAgICAvLyBDYXNlIDE6
IHNjcm9sbERlbHRhIG9mIDAsIDAKKyAgICAgICAgY2hpbGQtPnNldFNjcm9sbERlbHRhKEludFNp
emUoMCwgMCkpOworICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdU
cmFuc2Zvcm1zKHJvb3QuZ2V0KCksIHJvb3QuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0
eU1hdHJpeCwgZHVtbXlSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgMCwg
ZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisKKyAgICAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgg
ZXhwZWN0ZWRDaGlsZFRyYW5zZm9ybTsKKyAgICAgICAgZXhwZWN0ZWRDaGlsZFRyYW5zZm9ybS50
cmFuc2xhdGUoNTAsIDUwKTsKKyAgICAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggZXhwZWN0
ZWRHcmFuZENoaWxkVHJhbnNmb3JtOworICAgICAgICBleHBlY3RlZEdyYW5kQ2hpbGRUcmFuc2Zv
cm0udHJhbnNsYXRlKDU4LCA1Nik7CisgICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGV4
cGVjdGVkR3JlYXRHcmFuZENoaWxkVHJhbnNmb3JtOworICAgICAgICBleHBlY3RlZEdyZWF0R3Jh
bmRDaGlsZFRyYW5zZm9ybS50cmFuc2xhdGUoNTgsIDU2KTsKKyAgICAgICAgRVhQRUNUX1RSQU5T
Rk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZENoaWxkVHJhbnNmb3JtLCBjaGlsZC0+ZHJhd1Ry
YW5zZm9ybSgpKTsKKyAgICAgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBl
Y3RlZEdyYW5kQ2hpbGRUcmFuc2Zvcm0sIGdyYW5kQ2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7Cisg
ICAgICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0ZWRHcmVhdEdyYW5k
Q2hpbGRUcmFuc2Zvcm0sIGdyZWF0R3JhbmRDaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKworICAg
ICAgICAvLyBDYXNlIDI6IHNjcm9sbERlbHRhIG9mIDEwLCAxMAorICAgICAgICBjaGlsZC0+c2V0
U2Nyb2xsRGVsdGEoSW50U2l6ZSgxMCwgMTApKTsKKyAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29t
bW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtcyhyb290LmdldCgpLCByb290LmdldCgpLCBpZGVu
dGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIGR1bW15UmVuZGVyU3VyZmFjZUxheWVyTGlzdCwg
ZHVtbXlMYXllckxpc3QsIDAsIGR1bW15TWF4VGV4dHVyZVNpemUpOworCisgICAgICAgIC8vIEhl
cmUgdGhlIGNoaWxkIGFuZCBncmFuZENoaWxkIGFyZSBhZmZlY3RlZCBieSBzY3JvbGxEZWx0YSwg
YnV0IHRoZSBmaXhlZCBwb3NpdGlvbiBncmVhdEdyYW5kQ2hpbGQgc2hvdWxkIG5vdCBiZSBhZmZl
Y3RlZC4KKyAgICAgICAgZXhwZWN0ZWRDaGlsZFRyYW5zZm9ybS5tYWtlSWRlbnRpdHkoKTsKKyAg
ICAgICAgZXhwZWN0ZWRDaGlsZFRyYW5zZm9ybS50cmFuc2xhdGUoNDAsIDQwKTsKKyAgICAgICAg
ZXhwZWN0ZWRHcmFuZENoaWxkVHJhbnNmb3JtLm1ha2VJZGVudGl0eSgpOworICAgICAgICBleHBl
Y3RlZEdyYW5kQ2hpbGRUcmFuc2Zvcm0udHJhbnNsYXRlKDQ4LCA0Nik7CisgICAgICAgIEVYUEVD
VF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0ZWRDaGlsZFRyYW5zZm9ybSwgY2hpbGQt
PmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhf
RVEoZXhwZWN0ZWRHcmFuZENoaWxkVHJhbnNmb3JtLCBncmFuZENoaWxkLT5kcmF3VHJhbnNmb3Jt
KCkpOworICAgICAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVkR3Jl
YXRHcmFuZENoaWxkVHJhbnNmb3JtLCBncmVhdEdyYW5kQ2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7
CisgICAgfQorfQorCitURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVRyYW5z
Zm9ybXNGb3JGaXhlZFBvc2l0aW9uTGF5ZXJXaXRoSW50ZXJtZWRpYXRlU3VyZmFjZSkKK3sKKyAg
ICAvLyBNYWtlIHN1cmUgdGhhdCBmaXhlZC1wb3NpdGlvbiBsYXllcnMgY29tcGVuc2F0ZSBmb3Ig
dGhlaXIgY29udGFpbmVyJ3Mgc2Nyb2xsRGVsdGEgY29ycmVjdGx5LgorICAgIC8vCisgICAgLy8g
VGhpcyB0ZXN0IGNoZWNrcyB0aGUgc2NlbmFyaW8gd2hlcmUgdGhlIGZpeGVkLXBvc2l0aW9uIGNv
bnRhaW5lciBjb250cmlidXRlcyB0byBhCisgICAgLy8gZGlmZmVyZW50IHJlbmRlclN1cmZhY2Ug
dGhhbiB0aGUgZml4ZWQtcG9zaXRpb24gbGF5ZXIuIEluIHRoaXMgY2FzZSwgdGhlIHN1cmZhY2UK
KyAgICAvLyBvcmlnaW5UcmFuc2Zvcm1zIGFsc28gaGF2ZSB0byBiZSBhY2NvdW50ZWQgZm9yIHdo
ZW4gY2hlY2tpbmcgdGhlIHNjcm9sbERlbHRhLgorICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVh
ZCBzY29wZWRJbXBsVGhyZWFkOworCisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NM
YXllckltcGw6OmNyZWF0ZSgxKTsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IGNoaWxkID0gQ0NM
YXllckltcGw6OmNyZWF0ZSgyKTsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IGdyYW5kQ2hpbGQg
PSBDQ0xheWVySW1wbDo6Y3JlYXRlKDMpOworICAgIE93blB0cjxDQ0xheWVySW1wbD4gZ3JlYXRH
cmFuZENoaWxkID0gQ0NMYXllckltcGw6OmNyZWF0ZSg0KTsKKworICAgIHJvb3QtPmNyZWF0ZVJl
bmRlclN1cmZhY2UoKTsKKyAgICByb290LT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAsIDAp
KTsKKyAgICByb290LT5zZXRCb3VuZHMoSW50U2l6ZSgxMDAsIDEwMCkpOworCisgICAgY2hpbGQt
PnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoMCwgMCkpOworICAgIGNoaWxkLT5zZXRCb3VuZHMo
SW50U2l6ZSgxMDAsIDEwMCkpOworICAgIGNoaWxkLT5zZXRJc0NvbnRhaW5lckxheWVyKHRydWUp
OworCisgICAgZ3JhbmRDaGlsZC0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgwLCAwKSk7Cisg
ICAgZ3JhbmRDaGlsZC0+c2V0Qm91bmRzKEludFNpemUoMTAwLCAxMDApKTsKKyAgICBncmFuZENo
aWxkLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KDgsIDYpKTsKKyAgICBncmFuZENoaWxkLT5zZXRG
b3JjZVJlbmRlclN1cmZhY2UodHJ1ZSk7CisKKyAgICBncmVhdEdyYW5kQ2hpbGQtPnNldEFuY2hv
clBvaW50KEZsb2F0UG9pbnQoMCwgMCkpOworICAgIGdyZWF0R3JhbmRDaGlsZC0+c2V0Qm91bmRz
KEludFNpemUoMTAwLCAxMDApKTsKKyAgICBncmVhdEdyYW5kQ2hpbGQtPnNldEZpeGVkVG9Db250
YWluZXJMYXllclZpc2libGVSZWN0KHRydWUpOworICAgIGdyZWF0R3JhbmRDaGlsZC0+c2V0RHJh
d3NDb250ZW50KHRydWUpOworCisgICAgZ3JhbmRDaGlsZC0+YWRkQ2hpbGQoZ3JlYXRHcmFuZENo
aWxkLnJlbGVhc2UoKSk7CisgICAgY2hpbGQtPmFkZENoaWxkKGdyYW5kQ2hpbGQucmVsZWFzZSgp
KTsKKyAgICByb290LT5hZGRDaGlsZChjaGlsZC5yZWxlYXNlKCkpOworCisgICAgeworICAgICAg
ICBDQ0xheWVySW1wbCogY2hpbGQgPSByb290LT5jaGlsZHJlbigpWzBdLmdldCgpOworICAgICAg
ICBDQ0xheWVySW1wbCogZ3JhbmRDaGlsZCA9IGNoaWxkLT5jaGlsZHJlbigpWzBdLmdldCgpOwor
ICAgICAgICBDQ0xheWVySW1wbCogZ3JlYXRHcmFuZENoaWxkID0gZ3JhbmRDaGlsZC0+Y2hpbGRy
ZW4oKVswXS5nZXQoKTsKKyAgICAgICAgCisgICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4
IGlkZW50aXR5TWF0cml4OworICAgICAgICBWZWN0b3I8Q0NMYXllckltcGwqPiBkdW1teVJlbmRl
clN1cmZhY2VMYXllckxpc3Q7CisgICAgICAgIFZlY3RvcjxDQ0xheWVySW1wbCo+IGR1bW15TGF5
ZXJMaXN0OworICAgICAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKKworICAgICAg
ICAvLyBDYXNlIDE6IHNjcm9sbERlbHRhIG9mIDAsIDAKKyAgICAgICAgY2hpbGQtPnNldFNjcm9s
bERlbHRhKEludFNpemUoMCwgMCkpOworICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNh
bGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHJvb3QuZ2V0KCksIHJvb3QuZ2V0KCksIGlkZW50aXR5TWF0
cml4LCBpZGVudGl0eU1hdHJpeCwgZHVtbXlSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxh
eWVyTGlzdCwgMCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisgICAgICAgIAorICAgICAgICBXZWJU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBleHBlY3RlZENoaWxkVHJhbnNmb3JtOworICAgICAgICBleHBl
Y3RlZENoaWxkVHJhbnNmb3JtLnRyYW5zbGF0ZSg1MCwgNTApOworICAgICAgICBXZWJUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBleHBlY3RlZFN1cmZhY2VPcmlnaW5UcmFuc2Zvcm07CisgICAgICAgIGV4
cGVjdGVkU3VyZmFjZU9yaWdpblRyYW5zZm9ybS50cmFuc2xhdGUoOCwgNik7CisgICAgICAgIFdl
YlRyYW5zZm9ybWF0aW9uTWF0cml4IGV4cGVjdGVkR3JhbmRDaGlsZFRyYW5zZm9ybTsKKyAgICAg
ICAgZXhwZWN0ZWRHcmFuZENoaWxkVHJhbnNmb3JtLnRyYW5zbGF0ZSg1MCwgNTApOworICAgICAg
ICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBleHBlY3RlZEdyZWF0R3JhbmRDaGlsZFRyYW5zZm9y
bTsKKyAgICAgICAgZXhwZWN0ZWRHcmVhdEdyYW5kQ2hpbGRUcmFuc2Zvcm0udHJhbnNsYXRlKDUw
LCA1MCk7CisgICAgICAgIEFTU0VSVF9UUlVFKGdyYW5kQ2hpbGQtPnJlbmRlclN1cmZhY2UoKSk7
CisgICAgICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0ZWRDaGlsZFRy
YW5zZm9ybSwgY2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgICAgIEVYUEVDVF9UUkFOU0ZP
Uk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0ZWRTdXJmYWNlT3JpZ2luVHJhbnNmb3JtLCBncmFuZENo
aWxkLT5yZW5kZXJTdXJmYWNlKCktPm9yaWdpblRyYW5zZm9ybSgpKTsKKyAgICAgICAgRVhQRUNU
X1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZEdyYW5kQ2hpbGRUcmFuc2Zvcm0sIGdy
YW5kQ2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElP
Tl9NQVRSSVhfRVEoZXhwZWN0ZWRHcmVhdEdyYW5kQ2hpbGRUcmFuc2Zvcm0sIGdyZWF0R3JhbmRD
aGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKworICAgICAgICAvLyBDYXNlIDI6IHNjcm9sbERlbHRh
IG9mIDEwLCAxMAorICAgICAgICBjaGlsZC0+c2V0U2Nyb2xsRGVsdGEoSW50U2l6ZSgxMCwgMTAp
KTsKKyAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jt
cyhyb290LmdldCgpLCByb290LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgs
IGR1bW15UmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIDAsIGR1bW15TWF4
VGV4dHVyZVNpemUpOworICAgICAgICAKKyAgICAgICAgLy8gSGVyZSB0aGUgZ3JhbmRDaGlsZCBy
ZW1haW5zIHVuY2hhbmdlZCwgYmVjYXVzZSBpdCBzY3JvbGxzIGFsb25nIHdpdGggdGhlIHJlbmRl
clN1cmZhY2UuICh0aGUgdHJhbnNsYXRpb24gaXMgYWN0dWFsbHkgaW4gdGhlIHJlbmRlclN1cmZh
Y2UpCisgICAgICAgIC8vIEJ1dCwgdGhlIGZpeGVkIHBvc2l0aW9uIGdyZWF0R3JhbmRDaGlsZCBp
cyBtb3JlIGF3a3dhcmQ6IGl0cyBhY3R1YWxseSBiZWluZyBkcmF3biB3aXRoIHJlc3BlY3QgdG8g
dGhlIHJlbmRlclN1cmZhY2UsIGJ1dCBpdCBuZWVkcyB0byBjb21wZW5zYXRlIGZvciB0aGUgc2Ny
b2xsLgorICAgICAgICBleHBlY3RlZENoaWxkVHJhbnNmb3JtLm1ha2VJZGVudGl0eSgpOworICAg
ICAgICBleHBlY3RlZENoaWxkVHJhbnNmb3JtLnRyYW5zbGF0ZSg0MCwgNDApOworICAgICAgICBl
eHBlY3RlZFN1cmZhY2VPcmlnaW5UcmFuc2Zvcm0ubWFrZUlkZW50aXR5KCk7CisgICAgICAgIGV4
cGVjdGVkU3VyZmFjZU9yaWdpblRyYW5zZm9ybS50cmFuc2xhdGUoLTIsIC00KTsKKyAgICAgICAg
ZXhwZWN0ZWRHcmVhdEdyYW5kQ2hpbGRUcmFuc2Zvcm0ubWFrZUlkZW50aXR5KCk7CisgICAgICAg
IGV4cGVjdGVkR3JlYXRHcmFuZENoaWxkVHJhbnNmb3JtLnRyYW5zbGF0ZSg2MCwgNjApOworCisg
ICAgICAgIEFTU0VSVF9UUlVFKGdyYW5kQ2hpbGQtPnJlbmRlclN1cmZhY2UoKSk7CisgICAgICAg
IEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0ZWRDaGlsZFRyYW5zZm9ybSwg
Y2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9N
QVRSSVhfRVEoZXhwZWN0ZWRTdXJmYWNlT3JpZ2luVHJhbnNmb3JtLCBncmFuZENoaWxkLT5yZW5k
ZXJTdXJmYWNlKCktPm9yaWdpblRyYW5zZm9ybSgpKTsKKyAgICAgICAgRVhQRUNUX1RSQU5TRk9S
TUFUSU9OX01BVFJJWF9FUShleHBlY3RlZEdyYW5kQ2hpbGRUcmFuc2Zvcm0sIGdyYW5kQ2hpbGQt
PmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhf
RVEoZXhwZWN0ZWRHcmVhdEdyYW5kQ2hpbGRUcmFuc2Zvcm0sIGdyZWF0R3JhbmRDaGlsZC0+ZHJh
d1RyYW5zZm9ybSgpKTsKKyAgICB9Cit9CisKK1RFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVz
dCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvckZpeGVkUG9zaXRpb25MYXllcldpdGhDb250YWluZXJMYXll
clRoYXRIYXNTdXJmYWNlKQoreworICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGZpeGVkLXBvc2l0aW9u
IGxheWVycyBjb21wZW5zYXRlIGZvciB0aGVpciBjb250YWluZXIncyBzY3JvbGxEZWx0YSBjb3Jy
ZWN0bHkuCisgICAgLy8KKyAgICAvLyBUaGlzIHRlc3QgY2hlY2tzIHRoZSBzY2VuYXJpbyB3aGVy
ZSB0aGUgZml4ZWQtcG9zaXRpb24gY29udGFpbmVyIGl0c2VsZiBoYXMgYSByZW5kZXJTdXJmYWNl
LgorICAgIC8vIEluIHRoaXMgY2FzZSwgdGhlIGNvbnRhaW5lciBsYXllciBzaG91bGQgYmUgdHJl
YXRlZCBsaWtlIGEgbGF5ZXIgdGhhdCBjb250cmlidXRlcyB0byBhIHRhcmdldFN1cmZhY2UsCisg
ICAgLy8gYW5kIHRoYXQgc3VyZmFjZSBpcyBjb21wbGV0ZWx5IGlycmVsZXZhbnQsIGFuZCBzaG91
bGQgbm90IGFmZmVjdCB0aGUgc2Nyb2xsIGNvbXBlbnNhdGlvbi4KKyAgICBEZWJ1Z1Njb3BlZFNl
dEltcGxUaHJlYWQgc2NvcGVkSW1wbFRocmVhZDsKKworICAgIE93blB0cjxDQ0xheWVySW1wbD4g
cm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMSk7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBj
aGlsZCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMik7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBn
cmFuZENoaWxkID0gQ0NMYXllckltcGw6OmNyZWF0ZSgzKTsKKworICAgIHJvb3QtPmNyZWF0ZVJl
bmRlclN1cmZhY2UoKTsKKyAgICByb290LT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAsIDAp
KTsKKyAgICByb290LT5zZXRCb3VuZHMoSW50U2l6ZSgxMDAsIDEwMCkpOworCisgICAgY2hpbGQt
PnNldEJvdW5kcyhJbnRTaXplKDEwMCwgMTAwKSk7CisgICAgY2hpbGQtPnNldEFuY2hvclBvaW50
KEZsb2F0UG9pbnQoMCwgMCkpOworICAgIGNoaWxkLT5zZXRJc0NvbnRhaW5lckxheWVyKHRydWUp
OworICAgIGNoaWxkLT5zZXRGb3JjZVJlbmRlclN1cmZhY2UodHJ1ZSk7CisKKyAgICBncmFuZENo
aWxkLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAsIDApKTsKKyAgICBncmFuZENoaWxkLT5z
ZXRCb3VuZHMoSW50U2l6ZSgxMDAsIDEwMCkpOworICAgIGdyYW5kQ2hpbGQtPnNldEZpeGVkVG9D
b250YWluZXJMYXllclZpc2libGVSZWN0KHRydWUpOworICAgIGdyYW5kQ2hpbGQtPnNldERyYXdz
Q29udGVudCh0cnVlKTsKKworICAgIGNoaWxkLT5hZGRDaGlsZChncmFuZENoaWxkLnJlbGVhc2Uo
KSk7CisgICAgcm9vdC0+YWRkQ2hpbGQoY2hpbGQucmVsZWFzZSgpKTsKKworICAgIHsKKyAgICAg
ICAgQ0NMYXllckltcGwqIGNoaWxkID0gcm9vdC0+Y2hpbGRyZW4oKVswXS5nZXQoKTsKKyAgICAg
ICAgQ0NMYXllckltcGwqIGdyYW5kQ2hpbGQgPSBjaGlsZC0+Y2hpbGRyZW4oKVswXS5nZXQoKTsK
KyAgICAgICAgCisgICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4
OworICAgICAgICBWZWN0b3I8Q0NMYXllckltcGwqPiBkdW1teVJlbmRlclN1cmZhY2VMYXllckxp
c3Q7CisgICAgICAgIFZlY3RvcjxDQ0xheWVySW1wbCo+IGR1bW15TGF5ZXJMaXN0OworICAgICAg
ICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKKworICAgICAgICAvLyBDYXNlIDE6IHNj
cm9sbERlbHRhIG9mIDAsIDAKKyAgICAgICAgY2hpbGQtPnNldFNjcm9sbERlbHRhKEludFNpemUo
MCwgMCkpOworICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFu
c2Zvcm1zKHJvb3QuZ2V0KCksIHJvb3QuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1h
dHJpeCwgZHVtbXlSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgMCwgZHVt
bXlNYXhUZXh0dXJlU2l6ZSk7CisKKyAgICAgICAgLy8gVGhlIGV4cGVjdGVkIGRyYXcgdHJhbnNm
b3JtcyB3aXRob3V0IGFueSBzY3JvbGwgc2hvdWxkIHN0aWxsIGluY2x1ZGUgYSB0cmFuc2xhdGlv
biB0byB0aGUgY2VudGVyIG9mIHRoZSBsYXllciAoaS5lLiB0cmFuc2xhdGlvbiBieSA1MCwgNTAp
LgorICAgICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBleHBlY3RlZFN1cmZhY2VPcmlnaW5U
cmFuc2Zvcm07CisgICAgICAgIGV4cGVjdGVkU3VyZmFjZU9yaWdpblRyYW5zZm9ybS50cmFuc2xh
dGUoMCwgMCk7CisgICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGV4cGVjdGVkQ2hpbGRU
cmFuc2Zvcm07CisgICAgICAgIGV4cGVjdGVkQ2hpbGRUcmFuc2Zvcm0udHJhbnNsYXRlKDUwLCA1
MCk7CisgICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGV4cGVjdGVkR3JhbmRDaGlsZFRy
YW5zZm9ybTsKKyAgICAgICAgZXhwZWN0ZWRHcmFuZENoaWxkVHJhbnNmb3JtLnRyYW5zbGF0ZSg1
MCwgNTApOworICAgICAgICBBU1NFUlRfVFJVRShjaGlsZC0+cmVuZGVyU3VyZmFjZSgpKTsKKyAg
ICAgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZFN1cmZhY2VPcmln
aW5UcmFuc2Zvcm0sIGNoaWxkLT5yZW5kZXJTdXJmYWNlKCktPm9yaWdpblRyYW5zZm9ybSgpKTsK
KyAgICAgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZENoaWxkVHJh
bnNmb3JtLCBjaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICAgICAgRVhQRUNUX1RSQU5TRk9S
TUFUSU9OX01BVFJJWF9FUShleHBlY3RlZEdyYW5kQ2hpbGRUcmFuc2Zvcm0sIGdyYW5kQ2hpbGQt
PmRyYXdUcmFuc2Zvcm0oKSk7CisKKyAgICAgICAgLy8gQ2FzZSAyOiBzY3JvbGxEZWx0YSBvZiAx
MCwgMTAKKyAgICAgICAgY2hpbGQtPnNldFNjcm9sbERlbHRhKEludFNpemUoMTAsIDEwKSk7Cisg
ICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocm9v
dC5nZXQoKSwgcm9vdC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBkdW1t
eVJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCAwLCBkdW1teU1heFRleHR1
cmVTaXplKTsKKworICAgICAgICAvLyBUaGUgc3VyZmFjZSBpcyB0cmFuc2xhdGVkIGJ5IHNjcm9s
bERlbHRhLCB0aGUgY2hpbGQgdHJhbnNmb3JtIGRvZXNuJ3QgY2hhbmdlCisgICAgICAgIC8vIGJl
Y2F1c2UgaXQgc2Nyb2xscyBhbG9uZyB3aXRoIHRoZSBzdXJmYWNlLCBidXQgdGhlIGZpeGVkIHBv
c2l0aW9uIGdyYW5kQ2hpbGQKKyAgICAgICAgLy8gbmVlZHMgdG8gY29tcGVuc2F0ZSBmb3IgdGhl
IHNjcm9sbCB0cmFuc2xhdGlvbi4KKyAgICAgICAgZXhwZWN0ZWRTdXJmYWNlT3JpZ2luVHJhbnNm
b3JtLm1ha2VJZGVudGl0eSgpOworICAgICAgICBleHBlY3RlZFN1cmZhY2VPcmlnaW5UcmFuc2Zv
cm0udHJhbnNsYXRlKC0xMCwgLTEwKTsKKyAgICAgICAgZXhwZWN0ZWRHcmFuZENoaWxkVHJhbnNm
b3JtLm1ha2VJZGVudGl0eSgpOworICAgICAgICBleHBlY3RlZEdyYW5kQ2hpbGRUcmFuc2Zvcm0u
dHJhbnNsYXRlKDYwLCA2MCk7CisgICAgICAgIEFTU0VSVF9UUlVFKGNoaWxkLT5yZW5kZXJTdXJm
YWNlKCkpOworICAgICAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVk
U3VyZmFjZU9yaWdpblRyYW5zZm9ybSwgY2hpbGQtPnJlbmRlclN1cmZhY2UoKS0+b3JpZ2luVHJh
bnNmb3JtKCkpOworICAgICAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVj
dGVkQ2hpbGRUcmFuc2Zvcm0sIGNoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAgICAgICBFWFBF
Q1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVkR3JhbmRDaGlsZFRyYW5zZm9ybSwg
Z3JhbmRDaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICB9Cit9CisKK1RFU1QoQ0NMYXllclRy
ZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvckZpeGVkUG9zaXRpb25MYXllclRo
YXRJc0Fsc29GaXhlZFBvc2l0aW9uQ29udGFpbmVyKQoreworICAgIC8vIE1ha2Ugc3VyZSB0aGF0
IGZpeGVkLXBvc2l0aW9uIGxheWVycyBjb21wZW5zYXRlIGZvciB0aGVpciBjb250YWluZXIncyBz
Y3JvbGxEZWx0YSBjb3JyZWN0bHkuCisgICAgLy8KKyAgICAvLyBUaGlzIHRlc3QgY2hlY2tzIHRo
ZSBzY2VuYXJpbyB3aGVyZSBhIGZpeGVkLXBvc2l0aW9uIGxheWVyIGFsc28gaGFwcGVucyB0byBi
ZSBhCisgICAgLy8gY29udGFpbmVyIGl0c2VsZiBmb3IgYSBkZXNjZW5kYW50IGZpeGVkIHBvc2l0
aW9uIGxheWVyLiBJbiBwYXJ0aWN1bGFyLCB0aGUgbGF5ZXIKKyAgICAvLyBzaG91bGQgbm90IGFj
Y2lkZW50YWxseSBiZSBmaXhlZCB0byBpdHNlbGYuCisgICAgRGVidWdTY29wZWRTZXRJbXBsVGhy
ZWFkIHNjb3BlZEltcGxUaHJlYWQ7CisKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBD
Q0xheWVySW1wbDo6Y3JlYXRlKDEpOworICAgIE93blB0cjxDQ0xheWVySW1wbD4gY2hpbGQgPSBD
Q0xheWVySW1wbDo6Y3JlYXRlKDIpOworICAgIE93blB0cjxDQ0xheWVySW1wbD4gZ3JhbmRDaGls
ZCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMyk7CisKKyAgICByb290LT5jcmVhdGVSZW5kZXJTdXJm
YWNlKCk7CisgICAgcm9vdC0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgwLCAwKSk7CisgICAg
cm9vdC0+c2V0Qm91bmRzKEludFNpemUoMTAwLCAxMDApKTsKKworICAgIGNoaWxkLT5zZXRCb3Vu
ZHMoSW50U2l6ZSgxMDAsIDEwMCkpOworICAgIGNoaWxkLT5zZXRBbmNob3JQb2ludChGbG9hdFBv
aW50KDAsIDApKTsKKyAgICBjaGlsZC0+c2V0SXNDb250YWluZXJMYXllcih0cnVlKTsKKworICAg
IGdyYW5kQ2hpbGQtPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoMCwgMCkpOworICAgIGdyYW5k
Q2hpbGQtPnNldEJvdW5kcyhJbnRTaXplKDEwMCwgMTAwKSk7CisgICAgZ3JhbmRDaGlsZC0+c2V0
Rml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3QodHJ1ZSk7CisKKyAgICAvLyBUaGlzIHNo
b3VsZCBub3QgY29uZnVzZSB0aGUgZ3JhbmRDaGlsZC4gSWYgY29ycmVjdCwgdGhlIGdyYW5kQ2hp
bGQgd291bGQgc3RpbGwgYmUgY29uc2lkZXJlZCBmaXhlZCB0byBpdHMgY29udGFpbmVyIChpLmUu
ICJjaGlsZCIpLgorICAgIGdyYW5kQ2hpbGQtPnNldElzQ29udGFpbmVyTGF5ZXIodHJ1ZSk7Cisg
ICAgCisgICAgY2hpbGQtPmFkZENoaWxkKGdyYW5kQ2hpbGQucmVsZWFzZSgpKTsKKyAgICByb290
LT5hZGRDaGlsZChjaGlsZC5yZWxlYXNlKCkpOworCisgICAgeworICAgICAgICBDQ0xheWVySW1w
bCogY2hpbGQgPSByb290LT5jaGlsZHJlbigpWzBdLmdldCgpOworICAgICAgICBDQ0xheWVySW1w
bCogZ3JhbmRDaGlsZCA9IGNoaWxkLT5jaGlsZHJlbigpWzBdLmdldCgpOworICAgICAgICAKKyAg
ICAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAgICAgIFZl
Y3RvcjxDQ0xheWVySW1wbCo+IGR1bW15UmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICAgICAg
VmVjdG9yPENDTGF5ZXJJbXBsKj4gZHVtbXlMYXllckxpc3Q7CisgICAgICAgIGludCBkdW1teU1h
eFRleHR1cmVTaXplID0gNTEyOworCisgICAgICAgIC8vIENhc2UgMTogc2Nyb2xsRGVsdGEgb2Yg
MCwgMAorICAgICAgICBjaGlsZC0+c2V0U2Nyb2xsRGVsdGEoSW50U2l6ZSgwLCAwKSk7CisgICAg
ICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocm9vdC5n
ZXQoKSwgcm9vdC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBkdW1teVJl
bmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCAwLCBkdW1teU1heFRleHR1cmVT
aXplKTsKKworICAgICAgICAvLyBUaGUgZXhwZWN0ZWQgZHJhdyB0cmFuc2Zvcm1zIHdpdGhvdXQg
YW55IHNjcm9sbCBzaG91bGQgc3RpbGwgaW5jbHVkZSBhIHRyYW5zbGF0aW9uIHRvIHRoZSBjZW50
ZXIgb2YgdGhlIGxheWVyIChpLmUuIHRyYW5zbGF0aW9uIGJ5IDUwLCA1MCkuCisgICAgICAgIFdl
YlRyYW5zZm9ybWF0aW9uTWF0cml4IGV4cGVjdGVkQ2hpbGRUcmFuc2Zvcm07CisgICAgICAgIGV4
cGVjdGVkQ2hpbGRUcmFuc2Zvcm0udHJhbnNsYXRlKDUwLCA1MCk7CisgICAgICAgIFdlYlRyYW5z
Zm9ybWF0aW9uTWF0cml4IGV4cGVjdGVkR3JhbmRDaGlsZFRyYW5zZm9ybTsKKyAgICAgICAgZXhw
ZWN0ZWRHcmFuZENoaWxkVHJhbnNmb3JtLnRyYW5zbGF0ZSg1MCwgNTApOworICAgICAgICBFWFBF
Q1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVkQ2hpbGRUcmFuc2Zvcm0sIGNoaWxk
LT5kcmF3VHJhbnNmb3JtKCkpOworICAgICAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklY
X0VRKGV4cGVjdGVkR3JhbmRDaGlsZFRyYW5zZm9ybSwgZ3JhbmRDaGlsZC0+ZHJhd1RyYW5zZm9y
bSgpKTsKKworICAgICAgICAvLyBDYXNlIDI6IHNjcm9sbERlbHRhIG9mIDEwLCAxMAorICAgICAg
ICBjaGlsZC0+c2V0U2Nyb2xsRGVsdGEoSW50U2l6ZSgxMCwgMTApKTsKKyAgICAgICAgQ0NMYXll
clRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtcyhyb290LmdldCgpLCByb290
LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIGR1bW15UmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIDAsIGR1bW15TWF4VGV4dHVyZVNpemUpOworCisg
ICAgICAgIC8vIEhlcmUgdGhlIGNoaWxkIGlzIGFmZmVjdGVkIGJ5IHNjcm9sbERlbHRhLCBidXQg
dGhlIGZpeGVkIHBvc2l0aW9uIGdyYW5kQ2hpbGQgc2hvdWxkIG5vdCBiZSBhZmZlY3RlZC4KKyAg
ICAgICAgZXhwZWN0ZWRDaGlsZFRyYW5zZm9ybS5tYWtlSWRlbnRpdHkoKTsKKyAgICAgICAgZXhw
ZWN0ZWRDaGlsZFRyYW5zZm9ybS50cmFuc2xhdGUoNDAsIDQwKTsKKyAgICAgICAgRVhQRUNUX1RS
QU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZENoaWxkVHJhbnNmb3JtLCBjaGlsZC0+ZHJh
d1RyYW5zZm9ybSgpKTsKKyAgICAgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShl
eHBlY3RlZEdyYW5kQ2hpbGRUcmFuc2Zvcm0sIGdyYW5kQ2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7
CisgICAgfQorfQorCisjaWZkZWYgTkRFQlVHCitURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRl
c3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JGaXhlZFBvc2l0aW9uTGF5ZXJUaGF0SGFzTm9Db250YWlu
ZXIpCit7CisgICAgLy8gVGhlIHNjZW5hcmlvIGluIHRoaXMgdGVzdCB3b3VsZCAoY29ycmVjdGx5
KSB0cmlnZ2VyIGRlYnVnIGFzc2VydGlvbnMsIHNvIGl0cyBvbmx5CisgICAgLy8gdXNlZnVsIHRv
IHJ1biB0aGlzIHRlc3QgaW4gbm9uLWRlYnVnIG1vZGUuIEl0IGNoZWNrcyBhIHBhdGhvbG9naWNh
bCBzY2VuYXJpbyB3aGVyZQorICAgIC8vIGEgZml4ZWQtcG9zaXRpb24gbGF5ZXIgZG9lcyBub3Qg
ZmluZCBhbnkgYW5jZXN0b3IgdGhhdCBpcyBhICJjb250YWluZXJMYXllciIuIElmCisgICAgLy8g
dGhpcyByZWFsbHkgaGFwcGVucyBpdCBzaG91bGQgYmUgY29uc2lkZXJlZCBhIGJ1ZyBpbiBvdGhl
ciBwYXJ0cyBvZiBjb2RlLCBidXQgd2UKKyAgICAvLyBzaG91bGQgbWFrZSBzdXJlIHRoZSBjb21w
b3NpdG9yIHN0aWxsIGhhbmRsZXMgaXQgZ3JhY2VmdWxseSBpbiByZWxlYXNlIG1vZGUgYnkKKyAg
ICAvLyBjb25zaWRlcmluZyB0aGUgbGF5ZXIgZml4ZWQgd2l0aCByZXNwZWN0IHRvIHRoZSByb290
IGxheWVyLgorICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBzY29wZWRJbXBsVGhyZWFkOwor
CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgxKTsK
KyAgICBPd25QdHI8Q0NMYXllckltcGw+IGNoaWxkID0gQ0NMYXllckltcGw6OmNyZWF0ZSgyKTsK
KyAgICBPd25QdHI8Q0NMYXllckltcGw+IGdyYW5kQ2hpbGQgPSBDQ0xheWVySW1wbDo6Y3JlYXRl
KDMpOworCisgICAgcm9vdC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHJvb3QtPnNldEFu
Y2hvclBvaW50KEZsb2F0UG9pbnQoMCwgMCkpOworICAgIHJvb3QtPnNldEJvdW5kcyhJbnRTaXpl
KDEwMCwgMTAwKSk7CisKKyAgICBjaGlsZC0+c2V0Qm91bmRzKEludFNpemUoMTAwLCAxMDApKTsK
KyAgICBjaGlsZC0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgwLCAwKSk7CisKKyAgICBncmFu
ZENoaWxkLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAsIDApKTsKKyAgICBncmFuZENoaWxk
LT5zZXRCb3VuZHMoSW50U2l6ZSgxMDAsIDEwMCkpOworICAgIGdyYW5kQ2hpbGQtPnNldEZpeGVk
VG9Db250YWluZXJMYXllclZpc2libGVSZWN0KHRydWUpOworCisgICAgY2hpbGQtPmFkZENoaWxk
KGdyYW5kQ2hpbGQucmVsZWFzZSgpKTsKKyAgICByb290LT5hZGRDaGlsZChjaGlsZC5yZWxlYXNl
KCkpOworCisgICAgeworICAgICAgICBDQ0xheWVySW1wbCogY2hpbGQgPSByb290LT5jaGlsZHJl
bigpWzBdLmdldCgpOworICAgICAgICBDQ0xheWVySW1wbCogZ3JhbmRDaGlsZCA9IGNoaWxkLT5j
aGlsZHJlbigpWzBdLmdldCgpOworICAgICAgICAKKyAgICAgICAgV2ViVHJhbnNmb3JtYXRpb25N
YXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAgICAgIFZlY3RvcjxDQ0xheWVySW1wbCo+IGR1bW15
UmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICAgICAgVmVjdG9yPENDTGF5ZXJJbXBsKj4gZHVt
bXlMYXllckxpc3Q7CisgICAgICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOworCisg
ICAgICAgIC8vIENhc2UgMTogcm9vdCBzY3JvbGxEZWx0YSBvZiAwLCAwCisgICAgICAgIHJvb3Qt
PnNldFNjcm9sbERlbHRhKEludFNpemUoMCwgMCkpOworICAgICAgICBDQ0xheWVyVHJlZUhvc3RD
b21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHJvb3QuZ2V0KCksIHJvb3QuZ2V0KCksIGlk
ZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgZHVtbXlSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
LCBkdW1teUxheWVyTGlzdCwgMCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisKKyAgICAgICAgLy8g
VGhlIGV4cGVjdGVkIGRyYXcgdHJhbnNmb3JtcyB3aXRob3V0IGFueSBzY3JvbGwgc2hvdWxkIHN0
aWxsIGluY2x1ZGUgYSB0cmFuc2xhdGlvbiB0byB0aGUgY2VudGVyIG9mIHRoZSBsYXllciAoaS5l
LiB0cmFuc2xhdGlvbiBieSA1MCwgNTApLgorICAgICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBleHBlY3RlZENoaWxkVHJhbnNmb3JtOworICAgICAgICBleHBlY3RlZENoaWxkVHJhbnNmb3Jt
LnRyYW5zbGF0ZSg1MCwgNTApOworICAgICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBleHBl
Y3RlZEdyYW5kQ2hpbGRUcmFuc2Zvcm07CisgICAgICAgIGV4cGVjdGVkR3JhbmRDaGlsZFRyYW5z
Zm9ybS50cmFuc2xhdGUoNTAsIDUwKTsKKyAgICAgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01B
VFJJWF9FUShleHBlY3RlZENoaWxkVHJhbnNmb3JtLCBjaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsK
KyAgICAgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZEdyYW5kQ2hp
bGRUcmFuc2Zvcm0sIGdyYW5kQ2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisKKyAgICAgICAgLy8g
Q2FzZSAyOiByb290IHNjcm9sbERlbHRhIG9mIDEwLCAxMAorICAgICAgICByb290LT5zZXRTY3Jv
bGxEZWx0YShJbnRTaXplKDEwLCAxMCkpOworICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246
OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHJvb3QuZ2V0KCksIHJvb3QuZ2V0KCksIGlkZW50aXR5
TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgZHVtbXlSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1t
eUxheWVyTGlzdCwgMCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisKKyAgICAgICAgLy8gSGVyZSB0
aGUgY2hpbGQgaXMgYWZmZWN0ZWQgYnkgc2Nyb2xsRGVsdGEsIGJ1dCB0aGUgZml4ZWQgcG9zaXRp
b24gZ3JhbmRDaGlsZCBzaG91bGQgbm90IGJlIGFmZmVjdGVkLgorICAgICAgICAvLyBOT1RFIHRo
YXQgdGhlIHJlYWwgdGVzdCBob3dldmVyLCBpcyBqdXN0IHRoYXQgaXQgZG9lc24ndCBjcmFzaC4K
KyAgICAgICAgZXhwZWN0ZWRDaGlsZFRyYW5zZm9ybS5tYWtlSWRlbnRpdHkoKTsKKyAgICAgICAg
ZXhwZWN0ZWRDaGlsZFRyYW5zZm9ybS50cmFuc2xhdGUoNDAsIDQwKTsKKyAgICAgICAgRVhQRUNU
X1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZENoaWxkVHJhbnNmb3JtLCBjaGlsZC0+
ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICAgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9F
UShleHBlY3RlZEdyYW5kQ2hpbGRUcmFuc2Zvcm0sIGdyYW5kQ2hpbGQtPmRyYXdUcmFuc2Zvcm0o
KSk7CisgICAgfQorfQorI2VuZGlmCisKKwogVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0
LCB2ZXJpZnlDbGlwUmVjdEN1bGxzUmVuZGVyU3VyZmFjZXMpCiB7CiAgICAgLy8gVGhlIGVudGly
ZSBzdWJ0cmVlIG9mIGxheWVycyB0aGF0IGFyZSBvdXRzaWRlIHRoZSBjbGlwUmVjdCBzaG91bGQg
YmUgY3VsbGVkIGF3YXksCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>146365</attachid>
            <date>2012-06-07 13:12:04 -0700</date>
            <delta_ts>2012-06-07 23:51:10 -0700</delta_ts>
            <desc>Patch for archival, still need to address comment 65</desc>
            <filename>bug-70103-20120607131203.patch</filename>
            <type>text/plain</type>
            <size>36893</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5NzI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjdmZmIwZGVhMzk0YWU5
ZjllMmVkOWRiNjExZThhMGQwZWEzNzhkZi4uZjE2ZTYxZDgyZGI0YzIwYzM1NTc5NTEzOGZhZTA4
YTQ2MzU0Y2U5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU5IEBACisyMDEyLTA2LTA3ICBTaGF3
biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
SW1wbGVtZW50IHBvc2l0aW9uOmZpeGVkIGluIGNvbXBvc2l0b3IgdGhyZWFkCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDEwMworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVuaXQgdGVzdHMgYWRkZWQgdG8g
Q0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdDoKKyAgICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21t
b25UZXN0LnZlcmlmeVRyYW5zZm9ybXNGb3JGaXhlZFBvc2l0aW9uTGF5ZXJXaXRoRGlyZWN0Q29u
dGFpbmVyCisgICAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC52ZXJpZnlUcmFuc2Zv
cm1zRm9yRml4ZWRQb3NpdGlvbkxheWVyV2l0aERpc3RhbnRDb250YWluZXIKKyAgICAgICAgICBD
Q0xheWVyVHJlZUhvc3RDb21tb25UZXN0LnZlcmlmeVRyYW5zZm9ybXNGb3JGaXhlZFBvc2l0aW9u
TGF5ZXJXaXRoSW50ZXJtZWRpYXRlU3VyZmFjZQorICAgICAgICAgIENDTGF5ZXJUcmVlSG9zdENv
bW1vblRlc3QudmVyaWZ5VHJhbnNmb3Jtc0ZvckZpeGVkUG9zaXRpb25MYXllcldpdGhDb250YWlu
ZXJMYXllclRoYXRIYXNTdXJmYWNlCisgICAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVz
dC52ZXJpZnlUcmFuc2Zvcm1zRm9yRml4ZWRQb3NpdGlvbkxheWVyVGhhdElzQWxzb0ZpeGVkUG9z
aXRpb25Db250YWluZXIKKyAgICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LnZlcmlm
eVRyYW5zZm9ybXNGb3JGaXhlZFBvc2l0aW9uTGF5ZXJUaGF0SGFzTm9Db250YWluZXIKKworICAg
ICAgICBPcmlnaW5hbCBwYXRjaCBieSBBbHBoYSBMYW0uCisgICAgICAgIEZ1cnRoZXIgc2lnbmlm
aWNhbnQgY29udHJpYnV0aW9ucyBieSBTYW1pIEt5b3N0aWxhLgorCisgICAgICAgIFRoaXMgcGF0
Y2ggaXMgdGhlIGNvbXBvc2l0b3Itc2lkZSBjaGFuZ2UgdGhhdCBhZGRzIHN1cHBvcnQgZm9yCisg
ICAgICAgIGZpeGVkLXBvc2l0aW9uIGxheWVycyB0byBiZSBjb21wb3NpdGVkIGxheWVycy4gQmVm
b3JlIHRoaXMgcGF0Y2gsCisgICAgICAgIGZpeGVkLXBvc2l0aW9uIGVsZW1lbnRzIHdlcmUgcG9z
aXRpb25lZCBieSBXZWJDb3JlIChpLmUuIG1haW4KKyAgICAgICAgdGhyZWFkIHdoZW4gcGFpbnRp
bmcpLCBhbmQgdGhlIGNvbXBvc2l0b3IgZGlkIG5vdCBoYXZlIGVub3VnaAorICAgICAgICBrbm93
bGVkZ2Ugb24gaXRzIG93biB0byBwb3NpdGlvbiBpdCBwcm9wZXJseS4gVGhpcyBwYXRjaCBhZGRz
IHRoZQorICAgICAgICBuZWNlc3NhcnkgbWF0aCBhbmQgcGx1bWJzIHRoZSBuZWNlc3NhcnkgbGF5
ZXIgaW5mb3JtYXRpb24gc28gdGhhdAorICAgICAgICB0aGUgaW1wbCB0aHJlYWQgY2FuIHByb3Bl
cmx5IHBvc2l0aW9uIGZpeGVkLXBvc2l0aW9uIGVsZW1lbnRzIG9uCisgICAgICAgIGl0cyBvd24u
IFRoaXMgYWxsb3dzIGZpeGVkLXBvc2l0aW9uIGVsZW1lbnRzIHRvIGJlIGNvbXBvc2l0ZWQsCisg
ICAgICAgIHdoaWNoIGNhbiBncmVhdGx5IGhlbHAgdG8gYXZvaWQgcmVwYWludGluZyBjb250YWlu
ZXIgbGF5ZXJzIHdoZW4KKyAgICAgICAgc2Nyb2xsaW5nIHdpdGggYSBmaXhlZC1wb3NpdGlvbiBs
YXllci4KKworICAgICAgICBUaGVyZSBhbHNvIG5lZWRzIHRvIGJlIFdlYkNvcmUtc2lkZSBzdXBw
b3J0IGZvciB0aGlzLCB3aGljaCBpcworICAgICAgICBhZGRyZXNzZWQgaW4gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4ODY0CisKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyQ2hyb21pdW06OkxheWVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJv
bWl1bTo6cHVzaFByb3BlcnRpZXNUbyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6
c2V0SXNDb250YWluZXJGb3JGaXhlZFBvc2l0aW9uTGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyQ2hyb21pdW06OmlzQ29udGFpbmVyRm9yRml4ZWRQb3NpdGlvbkxheWVycyk6CisgICAg
ICAgIChMYXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnNl
dEZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyQ2hyb21pdW06OmZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVySW1wbDo6Q0NMYXllckltcGwpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVySW1wbDo6c2V0SXNDb250YWluZXJGb3JGaXhlZFBvc2l0aW9uTGF5ZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjppc0NvbnRhaW5lckZvckZpeGVkUG9zaXRpb25MYXll
cnMpOgorICAgICAgICAoQ0NMYXllckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllcklt
cGw6OnNldEZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJJbXBsOjpmaXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9u
LmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZE5lYXJlc3RG
aXhlZFBvc2l0aW9uQ29udGFpbmVyT3JSZW5kZXJTdXJmYWNlQW5jZXN0b3IpOgorICAgICAgICAo
V2ViQ29yZTo6ZmluZENvbnRhaW5lckxheWVyQW5kVHJhbnNmb3JtVG9Db250YWluZXJTdXJmYWNl
KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVTY3JvbGxDb21wZW5zYXRpb25Gb3JGaXhlZFBv
c2l0aW9uTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNJ
bnRlcm5hbCk6CisKIDIwMTItMDYtMDYgIERhbmEgSmFuc2VucyAgPGRhbmFrakBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBJbiBlYWNoIGNvbXBvc2l0ZWQgZnJhbWUsIGRpZERy
YXcoKSBzaG91bGQgb25seSBiZSBjYWxsZWQgb24gbGF5ZXJzIGZvciB3aGljaCB3aWxsRHJhdygp
IHdhcyBjYWxsZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggNTU1ODhkMjdlYzE2NjM1
ODdkYWUyYWQ0ZWIyNDU1NDU5Njc4NjU0YS4uOWUzYjIyMTFiNGQ5OWZiYWE4MDBjYTdiMmVlMDY2
Yzg3OTBlMzg2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAor
MjAxMi0wNi0wNyAgU2hhd24gU2luZ2ggIDxzaGF3bnNpbmdoQGNocm9taXVtLm9yZz4KKworICAg
ICAgICBbY2hyb21pdW1dIEltcGxlbWVudCBwb3NpdGlvbjpmaXhlZCBpbiBjb21wb3NpdG9yIHRo
cmVhZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzAx
MDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHRl
c3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwOgorCiAyMDEyLTA2LTA2ICBEYW5hIEph
bnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gSW4gZWFj
aCBjb21wb3NpdGVkIGZyYW1lLCBkaWREcmF3KCkgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uIGxh
eWVycyBmb3Igd2hpY2ggd2lsbERyYXcoKSB3YXMgY2FsbGVkCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3Bw
CmluZGV4IGY2MWZkMzVkNTMwMDE0MWYyYjJmZjI2Yjg3NjRiOGY2MmUwM2UyM2QuLjI4OTgyYWVh
MzQxMDk0ZjljMWE4NjM1NTZhNGJmOWRkMGM4MjM4NDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3Bw
CkBAIC03Miw2ICs3Miw4IEBAIExheWVyQ2hyb21pdW06OkxheWVyQ2hyb21pdW0oKQogICAgICwg
bV9kZWJ1Z0JvcmRlcldpZHRoKDApCiAgICAgLCBtX29wYWNpdHkoMS4wKQogICAgICwgbV9hbmNo
b3JQb2ludFooMCkKKyAgICAsIG1faXNDb250YWluZXJGb3JGaXhlZFBvc2l0aW9uTGF5ZXJzKGZh
bHNlKQorICAgICwgbV9maXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdChmYWxzZSkKICAg
ICAsIG1faXNEcmF3YWJsZShmYWxzZSkKICAgICAsIG1fbWFza3NUb0JvdW5kcyhmYWxzZSkKICAg
ICAsIG1fb3BhcXVlKGZhbHNlKQpAQCAtNTA2LDYgKzUwOCw4IEBAIHZvaWQgTGF5ZXJDaHJvbWl1
bTo6cHVzaFByb3BlcnRpZXNUbyhDQ0xheWVySW1wbCogbGF5ZXIpCiAgICAgaWYgKCFvcGFjaXR5
SXNBbmltYXRpbmcoKSkKICAgICAgICAgbGF5ZXItPnNldE9wYWNpdHkobV9vcGFjaXR5KTsKICAg
ICBsYXllci0+c2V0UG9zaXRpb24obV9wb3NpdGlvbik7CisgICAgbGF5ZXItPnNldElzQ29udGFp
bmVyRm9yRml4ZWRQb3NpdGlvbkxheWVycyhtX2lzQ29udGFpbmVyRm9yRml4ZWRQb3NpdGlvbkxh
eWVycyk7CisgICAgbGF5ZXItPnNldEZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0KG1f
Zml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3QpOwogICAgIGxheWVyLT5zZXRQcmVzZXJ2
ZXMzRChwcmVzZXJ2ZXMzRCgpKTsKICAgICBsYXllci0+c2V0U2Nyb2xsUG9zaXRpb24obV9zY3Jv
bGxQb3NpdGlvbik7CiAgICAgbGF5ZXItPnNldFN1YmxheWVyVHJhbnNmb3JtKG1fc3VibGF5ZXJU
cmFuc2Zvcm0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDVkNTJmOGJjOWZlZWQxMjQxMDY4ZDEx
MTJkY2M4ZDllNDM3NDYxZWYuLmE3YzllNWExODU2MGM5ZjYyOTlhYjZlZGY4ZDI4ZTlhMzU4Yzk1
MTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllckNocm9taXVtLmgKQEAgLTEyOSw2ICsxMjksMTIgQEAgcHVibGljOgogICAg
IHZvaWQgc2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYpOwogICAgIEZsb2F0UG9pbnQgcG9z
aXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9CiAKKyAgICB2b2lkIHNldElzQ29u
dGFpbmVyRm9yRml4ZWRQb3NpdGlvbkxheWVycyhib29sIGlzQ29udGFpbmVyRm9yRml4ZWRQb3Np
dGlvbkxheWVycykgeyBtX2lzQ29udGFpbmVyRm9yRml4ZWRQb3NpdGlvbkxheWVycyA9IGlzQ29u
dGFpbmVyRm9yRml4ZWRQb3NpdGlvbkxheWVyczsgfQorICAgIGJvb2wgaXNDb250YWluZXJGb3JG
aXhlZFBvc2l0aW9uTGF5ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9pc0NvbnRhaW5lckZvckZpeGVk
UG9zaXRpb25MYXllcnM7IH0KKworICAgIHZvaWQgc2V0Rml4ZWRUb0NvbnRhaW5lckxheWVyVmlz
aWJsZVJlY3QoYm9vbCBmaXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdCkgeyBtX2ZpeGVk
VG9Db250YWluZXJMYXllclZpc2libGVSZWN0ID0gZml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJs
ZVJlY3Q7IHNldE5lZWRzQ29tbWl0KCk7IH0KKyAgICBib29sIGZpeGVkVG9Db250YWluZXJMYXll
clZpc2libGVSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9maXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNp
YmxlUmVjdDsgfQorCiAgICAgdm9pZCBzZXRTdWJsYXllclRyYW5zZm9ybShjb25zdCBXZWJLaXQ6
OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CiAgICAgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgc3VibGF5ZXJUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3N1Ymxh
eWVyVHJhbnNmb3JtOyB9CiAKQEAgLTMzMyw2ICszMzksOCBAQCBwcml2YXRlOgogICAgIFdlYktp
dDo6V2ViRmlsdGVyT3BlcmF0aW9ucyBtX2ZpbHRlcnM7CiAgICAgV2ViS2l0OjpXZWJGaWx0ZXJP
cGVyYXRpb25zIG1fYmFja2dyb3VuZEZpbHRlcnM7CiAgICAgZmxvYXQgbV9hbmNob3JQb2ludFo7
CisgICAgYm9vbCBtX2lzQ29udGFpbmVyRm9yRml4ZWRQb3NpdGlvbkxheWVyczsKKyAgICBib29s
IG1fZml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3Q7CiAgICAgYm9vbCBtX2lzRHJhd2Fi
bGU7CiAgICAgYm9vbCBtX21hc2tzVG9Cb3VuZHM7CiAgICAgYm9vbCBtX29wYXF1ZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJJbXBsLmNwcAppbmRleCA3MmMwZWEyYjc5Y2U3MmJhNmFlMGZjNjJlYzE3NzZiNjky
YWM1YWZjLi5jMTU1YTQ4MGIxNjc0YTUyZWE4MmRmZDY3YzBkYTI1YjhlMjMwYTk3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllckltcGwuY3BwCkBAIC02Myw2ICs2Myw4IEBAIENDTGF5ZXJJbXBsOjpDQ0xheWVy
SW1wbChpbnQgaWQpCiAgICAgLCBtX2lzTm9uQ29tcG9zaXRlZENvbnRlbnQoZmFsc2UpCiAgICAg
LCBtX2RyYXdzQ29udGVudChmYWxzZSkKICAgICAsIG1fZm9yY2VSZW5kZXJTdXJmYWNlKGZhbHNl
KQorICAgICwgbV9pc0NvbnRhaW5lckZvckZpeGVkUG9zaXRpb25MYXllcnMoZmFsc2UpCisgICAg
LCBtX2ZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0KGZhbHNlKQogICAgICwgbV9wYWdl
U2NhbGVEZWx0YSgxKQogICAgICwgbV90YXJnZXRSZW5kZXJTdXJmYWNlKDApCiAgICAgLCBtX2Ry
YXdEZXB0aCgwKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKaW5kZXggZmQ0ZmFjYWE0MGNiYTE1ZGY2Mjlh
MWIyNGRhMzJjMmZhNWIzNzQ0ZC4uZTQ2OTFjMWFiOWMzZjFiY2E4NWJhNTY3YmZhMGJiZWU1N2Y2
MTdkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCkBAIC0xMzIsNiArMTMyLDEyIEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKTsKICAgICBjb25zdCBGbG9h
dFBvaW50JiBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb247IH0KIAorICAgIHZv
aWQgc2V0SXNDb250YWluZXJGb3JGaXhlZFBvc2l0aW9uTGF5ZXJzKGJvb2wgaXNDb250YWluZXJG
b3JGaXhlZFBvc2l0aW9uTGF5ZXJzKSB7IG1faXNDb250YWluZXJGb3JGaXhlZFBvc2l0aW9uTGF5
ZXJzID0gaXNDb250YWluZXJGb3JGaXhlZFBvc2l0aW9uTGF5ZXJzOyB9CisgICAgYm9vbCBpc0Nv
bnRhaW5lckZvckZpeGVkUG9zaXRpb25MYXllcnMoKSBjb25zdCB7IHJldHVybiBtX2lzQ29udGFp
bmVyRm9yRml4ZWRQb3NpdGlvbkxheWVyczsgfQorCisgICAgdm9pZCBzZXRGaXhlZFRvQ29udGFp
bmVyTGF5ZXJWaXNpYmxlUmVjdChib29sIGZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0
ID0gdHJ1ZSkgeyBtX2ZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0ID0gZml4ZWRUb0Nv
bnRhaW5lckxheWVyVmlzaWJsZVJlY3Q7fQorICAgIGJvb2wgZml4ZWRUb0NvbnRhaW5lckxheWVy
VmlzaWJsZVJlY3QoKSBjb25zdCB7IHJldHVybiBtX2ZpeGVkVG9Db250YWluZXJMYXllclZpc2li
bGVSZWN0OyB9CisKICAgICB2b2lkIHNldFByZXNlcnZlczNEKGJvb2wpOwogICAgIGJvb2wgcHJl
c2VydmVzM0QoKSBjb25zdCB7IHJldHVybiBtX3ByZXNlcnZlczNEOyB9CiAKQEAgLTMyMyw2ICsz
MjksMTEgQEAgcHJpdmF0ZToKICAgICBib29sIG1fZHJhd3NDb250ZW50OwogICAgIGJvb2wgbV9m
b3JjZVJlbmRlclN1cmZhY2U7CiAKKyAgICAvLyBTZXQgZm9yIHRoZSBsYXllciB0aGF0IG90aGVy
IGxheWVycyBhcmUgZml4ZWQgdG8uCisgICAgYm9vbCBtX2lzQ29udGFpbmVyRm9yRml4ZWRQb3Np
dGlvbkxheWVyczsKKyAgICAvLyBTZXQgZm9yIHRoZSBsYXllciB0aGF0IGhhcyBwb3NpdGlvbiBm
aXhlZCB0byB0aGUgY29udGFpbmVyIGxheWVyJ3MgdmlzaWJsZSByZWN0LgorICAgIGJvb2wgbV9m
aXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdDsKKwogICAgIEZsb2F0U2l6ZSBtX3Njcm9s
bERlbHRhOwogICAgIEludFNpemUgbV9zZW50U2Nyb2xsRGVsdGE7CiAgICAgSW50U2l6ZSBtX21h
eFNjcm9sbFBvc2l0aW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5j
cHAKaW5kZXggOWNkMDMxNjBlMmIwYmM1YTdiNjUyZTgwYjlmMmJhZGJkMDFiYzNjZi4uMWM5Yjg0
ODc2MDkyMmJkZmUyODY4MGRmZGQxNGI2NjA0YWEwZTFiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9u
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3RDb21tb24uY3BwCkBAIC0zMTgsNiArMzE4LDEyNiBAQCBzdGF0aWMgYm9v
bCBzdWJ0cmVlU2hvdWxkUmVuZGVyVG9TZXBhcmF0ZVN1cmZhY2UoTGF5ZXJUeXBlKiBsYXllciwg
Ym9vbCBheGlzQWxpZwogICAgIHJldHVybiBmYWxzZTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUg
TGF5ZXJUeXBlPgorc3RhdGljIExheWVyVHlwZSogZmluZE5lYXJlc3RGaXhlZFBvc2l0aW9uQ29u
dGFpbmVyT3JSZW5kZXJTdXJmYWNlQW5jZXN0b3IoTGF5ZXJUeXBlKiBsYXllcikKK3sKKyAgICBM
YXllclR5cGUqIGN1cnJlbnRMYXllciA9IGxheWVyLT5wYXJlbnQoKTsKKworICAgIHdoaWxlIChj
dXJyZW50TGF5ZXIpIHsKKyAgICAgICAgaWYgKGN1cnJlbnRMYXllci0+aXNDb250YWluZXJGb3JG
aXhlZFBvc2l0aW9uTGF5ZXJzKCkgfHwgY3VycmVudExheWVyLT5yZW5kZXJTdXJmYWNlKCkpCisg
ICAgICAgICAgICByZXR1cm4gY3VycmVudExheWVyOworCisgICAgICAgIGN1cnJlbnRMYXllciA9
IGN1cnJlbnRMYXllci0+cGFyZW50KCk7CisgICAgfQorCisgICAgLy8gVGhpcyBtZWFucyBldmVu
IHRoZSByb290IGxheWVyIGl0c2VsZiBkaWRuJ3QgaGF2ZSBhIHJlbmRlclN1cmZhY2U/IEl0IHNo
b3VsZCBuZXZlciBoYXBwZW4uCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
IDA7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZT4KK3N0YXRpYyB2b2lkIGZpbmRD
b250YWluZXJMYXllckFuZFRyYW5zZm9ybVRvQ29udGFpbmVyU3VyZmFjZShMYXllclR5cGUqIGZp
eGVkUG9zTGF5ZXIsIExheWVyVHlwZSomIGNvbnRhaW5lckxheWVyLCBXZWJUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgbG9jYWxTdXJmYWNlVG9Db250YWluZXJTdXJmYWNlKQoreworICAgIC8vIFNlYXJj
aCB1cCB0aGUgaGllcmFyY2h5IGZvciB0aGUgZmlyc3QgY29udGFpbmVyIGxheWVyLiBJZiB0aGUg
Zml4ZWRQb3NMYXllciBhbmQKKyAgICAvLyBjb250YWluZXJMYXllciBleGlzdCBvbiBkaWZmZXJl
bnQgcmVuZGVyU3VyZmFjZXMsIHRoZW4gd2UgaGF2ZSB0byBhY2N1bXVsYXRlIHRoZQorICAgIC8v
IGFwcHJvcHJpYXRlIHRyYW5zZm9ybSB0aGF0IGNvbnZlcnRzIGJldHdlZW4gdGhlIHR3byBzdXJm
YWNlIHNwYWNlcy4KKyAgICAvLworICAgIC8vIElmIHdlIGhpdCB0aGUgcm9vdCBsYXllciAoaS5l
LiBhbmNlc3RvciB3aXRob3V0IHBhcmVudCkgYmVmb3JlIGZpbmRpbmcgYSBjb250YWluZXIKKyAg
ICAvLyBsYXllciwgdGhlbiBzb21ldGhpbmcgaXMgd3Jvbmcgd2l0aCBjb2RlIGVsc2V3aGVyZSwg
YnV0IHdlIG5lZWQgdG8gaGFuZGxlIGl0CisgICAgLy8gZ3JhY2VmdWxseSBqdXN0IGluIGNhc2Uu
CisKKyAgICBMYXllclR5cGUqIGFuY2VzdG9yID0gZmluZE5lYXJlc3RGaXhlZFBvc2l0aW9uQ29u
dGFpbmVyT3JSZW5kZXJTdXJmYWNlQW5jZXN0b3IoZml4ZWRQb3NMYXllcik7CisKKyAgICB3aGls
ZSAoYW5jZXN0b3IgJiYgYW5jZXN0b3ItPnBhcmVudCgpICYmICFhbmNlc3Rvci0+aXNDb250YWlu
ZXJGb3JGaXhlZFBvc2l0aW9uTGF5ZXJzKCkpIHsKKyAgICAgICAgLy8gU2luY2Ugd2UncmUgZ29p
bmcgYmFja3dhcmRzIHVwIHRoZSBoaWVyYXJjaHksIHRoZSBzdXJmYWNlJ3MgaW52ZXJzZSBvcmln
aW5UcmFuc2Zvcm0gc2hvdWxkIHByZS1tdWx0aXBseSB0aGUgYWNjdW11bGF0aW5nIHRyYW5zZm9y
bS4KKyAgICAgICAgQVNTRVJUKGFuY2VzdG9yLT5yZW5kZXJTdXJmYWNlKCkpOworICAgICAgICBX
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpbnZlcnNlT3JpZ2luVHJhbnNmb3JtID0gYW5jZXN0b3It
PnJlbmRlclN1cmZhY2UoKS0+b3JpZ2luVHJhbnNmb3JtKCkuaW52ZXJzZSgpOworICAgICAgICBs
b2NhbFN1cmZhY2VUb0NvbnRhaW5lclN1cmZhY2UgPSBpbnZlcnNlT3JpZ2luVHJhbnNmb3JtICog
bG9jYWxTdXJmYWNlVG9Db250YWluZXJTdXJmYWNlOworICAgICAgICBhbmNlc3RvciA9IGZpbmRO
ZWFyZXN0Rml4ZWRQb3NpdGlvbkNvbnRhaW5lck9yUmVuZGVyU3VyZmFjZUFuY2VzdG9yKGFuY2Vz
dG9yKTsKKyAgICB9CisKKyAgICBjb250YWluZXJMYXllciA9IGFuY2VzdG9yOworICAgIAorICAg
IC8vIElmIHRoaXMgYXNzZXJ0aW9uIGZpcmVzLCB0aGVyZSdzIGEgYnVnIGluIHRoaXMgY29kZSBp
dHNlbGYuCisgICAgQVNTRVJUKGNvbnRhaW5lckxheWVyKTsKKyAgICAKKyAgICAvLyBJZiB0aGlz
IGFzc2VydGlvbiBmaXJlcywgdGhlcmUgaXMgYSBidWcgb3V0c2lkZSB0aGlzIGNvZGUuCisgICAg
Ly8gSXQgbWVhbnMgdGhhdCB3ZSBmb3VuZCB0aGUgcm9vdExheWVyIGJlZm9yZSBmaW5kaW5nIGEg
dmFsaWQgY29udGFpbmVyTGF5ZXIuCisgICAgQVNTRVJUKGNvbnRhaW5lckxheWVyLT5pc0NvbnRh
aW5lckZvckZpeGVkUG9zaXRpb25MYXllcnMoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIExh
eWVyVHlwZT4KK3N0YXRpYyBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjb21wdXRlU2Nyb2xsQ29t
cGVuc2F0aW9uRm9yRml4ZWRQb3NpdGlvbkxheWVyKExheWVyVHlwZSogZml4ZWRQb3NMYXllcikK
K3sKKyAgICAvLyAiU2Nyb2xsIGNvbXBlbnNhdGlvbiIgaXMgdGhlIHRvdGFsIGNvbXBvc2l0ZSB0
cmFuc2Zvcm0gdGhhdCBjYW5jZWxzIG91dCB0aGUKKyAgICAvLyBzY3JvbGxEZWx0YSwgc28gdGhh
dCBpdCBkb2VzIG5vdCBhZmZlY3QgYSBmaXhlZCBwb3NpdGlvbiBsYXllci4gVG8gY2FuY2VsIG91
dCB0aGUKKyAgICAvLyBzY3JvbGxEZWx0YSwgdGhlIGludmVyc2Ugc2Nyb2xsIHRyYW5zbGF0aW9u
IG5lZWRzIHRvIGJlIGFwcGxpZWQgd2l0aCByZXNwZWN0IHRvIHRoZQorICAgIC8vIGNvbnRhaW5l
cidzIHNwYWNlLgorICAgIC8vCisgICAgLy8gVGhlIHRvdGFsIFNjcm9sbENvbXBlbnNhdGlvbiBt
YXRyaXggZG9lcyB0aGUgZm9sbG93aW5nIChpbnRlcnByZXRpbmcgdGhlIHRyYW5zZm9ybSBmcm9t
IGxlZnQtdG8tcmlnaHQpOgorICAgIC8vICAgIDEuIHRyYW5zZm9ybXMgZnJvbSBsYXllcidzIHRh
cmdldCBzdXJmYWNlIHNwYWNlIHRvIHRoZSBzcGFjZSBvZiB0aGUgZml4ZWQtcG9zaXRpb24gY29u
dGFpbmVyLgorICAgIC8vICAgIDIuIGluc2VydHMgYSBuZXcgdHJhbnNsYXRpb24gdGhhdCBjYW5j
ZWxzIG91dCB0aGUgb3JpZ2luYWwgc2Nyb2xsRGVsdGEsIHNvIHRoZQorICAgIC8vICAgICAgIGZp
eGVkLXBvc2l0aW9uIGxheWVyIGRvZXMgbm90IHNjcm9sbC4KKyAgICAvLyAgICAzLiB0cmFuc2Zv
cm1zIGJhY2sgZnJvbSBmaXhlZC1wb3NpdGlvbiBjb250YWluZXIgdG8gdGhlIGxheWVyJ3MgdGFy
Z2V0IHN1cmZhY2Ugc3BhY2UuCisgICAgLy8KKyAgICAvLyBUaGVyZSBhcmUgYSBjb3VwbGUgb2Yg
YXNzdW1wdGlvbnM6CisgICAgLy8gICAgMS4gVGhlIGNvbnRhaW5lciBsYXllciBpcyBhIHNjcm9s
bGluZyBsYXllciBhbmQgb25seSBoYXMgdHJhbnNsYXRpb24gdHJhbnNmb3JtYXRpb24gbG9jYWxs
eS4KKyAgICAvLyAgICAyLiBUaGUgY29udGFpbmVyIGxheWVyIGhhcyBhIHBhcmVudCB0aGF0IGRl
ZmluZXMgdGhlIGNvb3JkaW5hdGUgc3lzdGVtIGZvciB0aGUgc2Nyb2xsCisgICAgLy8gICAgICAg
dHJhbnNsYXRpb24uIEhlcmUgd2UgY2FsbCBpdCB0aGUgImNsaXAgbGF5ZXIiLCBiZWNhdXNlIHNj
cm9sbGluZyBsYXllcnMgYXJlIGdlbmVyYWxseQorICAgIC8vICAgICAgIGVtYmVkZGVkIGluIG9u
ZS4KKyAgICAvLworICAgIC8vIEFub3RoZXIgaW50ZXJwcmV0YXRpb24gb2YgdGhlIHNhbWUgbWF0
aDoKKyAgICAvLworICAgIC8vIFdlIGNhbiBkZWNvbXBvc2UgdGhlIGxheWVyJ3MgcGFyZW50TWF0
cml4IGFzIGZvbGxvd3M6CisgICAgLy8KKyAgICAvLyAgICAgICAgTVtwYXJlbnRdID0gTVtjbGlw
XSAqIFRyW2NvbnRhaW5lcl0gKiBNW2Rlc2NlbmRhbnRdCisgICAgLy8KKyAgICAvLyB3aGVyZSBN
W2Rlc2NlbmRhbnRdIGlzIHRoZSB0b3RhbCB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggZnJvbSBjb250
YWluZXIgbGF5ZXIncyBjb29yZGluYXRlCisgICAgLy8gc3BhY2UgdG8gdGhlIHNwYWNlIG9mIE1b
cGFyZW50XS4gQW5kIHRodXM6CisgICAgLy8KKyAgICAvLyAgICAgICAgVHJbY29udGFpbmVyXSAq
IE1bZGVzY2VuZGFudF0gPSBNW2NsaXBdLmludmVyc2UoKSAqIE1bcGFyZW50XQorICAgIC8vCisg
ICAgLy8gQW5kIHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggZm9yIHRoaXMgbGF5ZXIgd2l0aG91
dCBjb250YWluZXIncyBzY3JvbGwgYmVjb21lczoKKyAgICAvLworICAgIC8vICAgICAgICBNW2Ns
aXBdICogLVRyW2NvbnRhaW5lcl0gKiBUcltjb250YWluZXJdICogTVtkZXNjZW5kYW50XSA9IE1b
Y2xpcF0gKiAtVHJbY29udGFpbmVyXSAqIE1bY2xpcF0uaW52ZXJzZSgpICogTVtwYXJlbnRdCisg
ICAgLy8KKyAgICAvLyBOb3RlLCBpbiB0aGlzIGNhc2UsIHRlY2huaWNhbGx5IE1bY2xpcF0gaXMg
dGhlIHBhcmVudE1hdHJpeCBvZiB0aGUgY2xpcExheWVyJ3MKKyAgICAvLyBjaGlsZHJlbi4gVGhl
b3JldGljYWxseSBpdCBpcyBOT1QgdGhlIHNhbWUgdG8gdXNlIHRoZSBjbGlwTGF5ZXIncyBkcmF3
VHJhbnNmb3JtLAorICAgIC8vIGJ1dCBtYXRoZW1hdGljYWxseSB0aGUgZGlmZmVyZW5jZXMgYmV0
d2VlbiB0aGUgZHJhd1RyYW5zZm9ybSdzIHNwYWNlIGFuZAorICAgIC8vIHBhcmVudE1hdHJpeCdz
IHNwYWNlIHdpbGwgbm90IGFmZmVjdCB0aGUgY29ycmVjdG5lc3Mgb2YgdGhlIHNjcm9sbCBjb21w
ZW5zYXRpb24uCisgICAgLy8KKworICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgb25seSBtZWFuaW5n
ZnVsIGlmIHRoZSBsYXllciBpcyBhIGZpeGVkIHBvc2l0aW9uZWQgZWxlbWVudC4KKyAgICBBU1NF
UlQoZml4ZWRQb3NMYXllciAmJiBmaXhlZFBvc0xheWVyLT5maXhlZFRvQ29udGFpbmVyTGF5ZXJW
aXNpYmxlUmVjdCgpKTsKKworICAgIExheWVyVHlwZSogY29udGFpbmVyTGF5ZXI7CisgICAgV2Vi
VHJhbnNmb3JtYXRpb25NYXRyaXggbG9jYWxTdXJmYWNlVG9Db250YWluZXJTdXJmYWNlOworICAg
IGZpbmRDb250YWluZXJMYXllckFuZFRyYW5zZm9ybVRvQ29udGFpbmVyU3VyZmFjZShmaXhlZFBv
c0xheWVyLCBjb250YWluZXJMYXllciwgbG9jYWxTdXJmYWNlVG9Db250YWluZXJTdXJmYWNlKTsK
KworICAgIEZsb2F0U2l6ZSBzY3JvbGxEZWx0YSA9IGNvbnRhaW5lckxheWVyLT5zY3JvbGxEZWx0
YSgpOworICAgIExheWVyVHlwZSogY2xpcExheWVyID0gY29udGFpbmVyTGF5ZXItPnBhcmVudCgp
OworICAgIEFTU0VSVChjbGlwTGF5ZXIpOworCisgICAgLy8gQ29uc3RydWN0b3IgaW5pdGlhbGl6
ZXMgdG8gaWRlbnRpdHkgbWF0cml4LgorICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHRvdGFs
U2Nyb2xsQ29tcGVuc2F0aW9uOworCisgICAgLy8gSWYgdGhlcmUgaXMgbm8gc2Nyb2xsRGVsdGEs
IHRoZW4gdGhlcmUgaXMgbm8gbmVlZCB0byBkbyBtb3JlIG1hdHJpeCBtdWx0aXBsaWNhdGlvbnMg
c2luY2UgaXQgd291bGQgdG90YWwgdXAgdG8gYW4gaWRlbnRpdHkgbWF0cml4IGFueXdheS4KKyAg
ICBpZiAoIXNjcm9sbERlbHRhLmlzWmVybygpKSB7CisgICAgICAgIGlmIChjbGlwTGF5ZXIpIHsK
KyAgICAgICAgICAgIC8vIGNsaXBMYXllcidzIGRyYXdUcmFuc2Zvcm0gdHJhbnNmb3JtcyBmcm9t
IGNvbnRhaW5lclN1cmZhY2UgdG8gdGhlIGNsaXAgbGF5ZXIncyBzcGFjZSB3aGVyZSB3ZSBjYW4g
ZmluYWxseSBhcHBseSB0aGUgc2Nyb2xsRGVsdGEuCisgICAgICAgICAgICBXZWJUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBsb2NhbFRhcmdldFN1cmZhY2VUb0NsaXBMYXllciA9IGxvY2FsU3VyZmFjZVRv
Q29udGFpbmVyU3VyZmFjZSAqIGNsaXBMYXllci0+ZHJhd1RyYW5zZm9ybSgpOworICAgICAgICAg
ICAgdG90YWxTY3JvbGxDb21wZW5zYXRpb24gPSBsb2NhbFRhcmdldFN1cmZhY2VUb0NsaXBMYXll
cjsKKyAgICAgICAgICAgIHRvdGFsU2Nyb2xsQ29tcGVuc2F0aW9uLnRyYW5zbGF0ZShzY3JvbGxE
ZWx0YS53aWR0aCgpLCBzY3JvbGxEZWx0YS5oZWlnaHQoKSk7CisgICAgICAgICAgICB0b3RhbFNj
cm9sbENvbXBlbnNhdGlvbi5tdWx0aXBseShsb2NhbFRhcmdldFN1cmZhY2VUb0NsaXBMYXllci5p
bnZlcnNlKCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gVGhpcyBjYXNlIHdp
bGwgYmUgY2F1Z2h0IGJ5IGRlYnVnIGFzc2VydGlvbnMgYWJvdmUsIGJ1dCBzaG91bGQgc3RpbGwg
YmUgaGFuZGxlZCBncmFjZWZ1bGx5IGp1c3QgaW4gY2FzZS4KKyAgICAgICAgICAgIHRvdGFsU2Ny
b2xsQ29tcGVuc2F0aW9uLnRyYW5zbGF0ZShzY3JvbGxEZWx0YS53aWR0aCgpLCBzY3JvbGxEZWx0
YS5oZWlnaHQoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdG90YWxTY3JvbGxD
b21wZW5zYXRpb247Cit9CisKIC8vIFJlY3Vyc2l2ZWx5IHdhbGtzIHRoZSBsYXllciB0cmVlIHN0
YXJ0aW5nIGF0IHRoZSBnaXZlbiBub2RlIGFuZCBjb21wdXRlcyBhbGwgdGhlCiAvLyBuZWNlc3Nh
cnkgdHJhbnNmb3JtYXRpb25zLCBjbGlwUmVjdHMsIHJlbmRlciBzdXJmYWNlcywgZXRjLgogdGVt
cGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBMYXllckxpc3QsIHR5cGVuYW1lIFJl
bmRlclN1cmZhY2VUeXBlLCB0eXBlbmFtZSBMYXllclNvcnRlcj4KQEAgLTQ0OCw3ICs1NjgsMTcg
QEAgc3RhdGljIGJvb2wgY2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNJbnRlcm5hbChMYXllclR5cGUq
IGxheWVyLCBMYXllclR5cGUqIHJvb3RMYXkKICAgICAvLyBMVCA9IFRyW29yaWdpbl0gKiBTW3Bh
Z2VTY2FsZURlbHRhXSAqIFRyW29yaWdpbjJhbmNob3JdICogTVtsYXllcl0gKiBUclthbmNob3Iy
Y2VudGVyXQogICAgIGxheWVyTG9jYWxUcmFuc2Zvcm0udHJhbnNsYXRlM2QoY2VudGVyT2Zmc2V0
WCwgY2VudGVyT2Zmc2V0WSwgLWxheWVyLT5hbmNob3JQb2ludFooKSk7CiAKLSAgICBXZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBjb21iaW5lZFRyYW5zZm9ybSA9IHBhcmVudE1hdHJpeDsKKyAgICBX
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjb21iaW5lZFRyYW5zZm9ybTsKKyAgICBpZiAobGF5ZXIt
PmZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0KCkpIHsKKyAgICAgICAgLy8gU3BlY2lh
bCBjYXNlOiB0aGlzIGxheWVyIGlzIGEgY29tcG9zaXRlZCBmaXhlZC1wb3NpdGlvbiBlbGVtZW50
OyB3ZSBuZWVkIHRvCisgICAgICAgIC8vIGV4cGxpY2l0bHkgY29tcGVuc2F0ZSBmb3IgdGhlIGNv
bnRhaW5lcidzIHNjcm9sbERlbHRhIHRvIGtlZXAgaXQgZml4ZWQgY29ycmVjdGx5LgorICAgICAg
ICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0b3RhbFNjcm9sbENvbXBlbnNhdGlvbiA9IGNvbXB1
dGVTY3JvbGxDb21wZW5zYXRpb25Gb3JGaXhlZFBvc2l0aW9uTGF5ZXIobGF5ZXIpOworICAgICAg
ICBjb21iaW5lZFRyYW5zZm9ybSA9IHRvdGFsU2Nyb2xsQ29tcGVuc2F0aW9uICogcGFyZW50TWF0
cml4OworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIENvbW1vbiBjYXNlOiBsYXllciBpcyBub3Qg
Zml4ZWQgcG9zaXRpb24uCisgICAgICAgIGNvbWJpbmVkVHJhbnNmb3JtID0gcGFyZW50TWF0cml4
OworICAgIH0KKwogICAgIGNvbWJpbmVkVHJhbnNmb3JtLm11bHRpcGx5KGxheWVyTG9jYWxUcmFu
c2Zvcm0pOwogCiAgICAgYm9vbCBhbmltYXRpbmdUcmFuc2Zvcm1Ub1RhcmdldCA9IGxheWVyLT50
cmFuc2Zvcm1Jc0FuaW1hdGluZygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAKaW5kZXggMWQwNjlhNWJl
M2FiNTQ5ZjBkZjE4NjE5MmRiYmVlOTk1NmM4M2UxOC4uNGQ3ZGRhNjAxMDI5MDQ0NmIyZTkxNDBh
MjdjYzhlYTkzNzU3OGExYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwCkBAIC00OCw3ICs0OCw4IEBA
IHVzaW5nIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg7CiAKIG5hbWVzcGFjZSB7CiAK
LXZvaWQgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhMYXllckNocm9taXVtKiBsYXllciwg
Y29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgY29uc3QgV2ViVHJhbnNm
b3JtYXRpb25NYXRyaXgmIHN1YmxheWVyVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBhbmNo
b3IsIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBJbnRTaXplJiBib3VuZHMsIGJv
b2wgcHJlc2VydmVzM0QpCit0ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5cGU+Cit2b2lkIHNldExh
eWVyUHJvcGVydGllc0ZvclRlc3RpbmcoTGF5ZXJUeXBlKiBsYXllciwgY29uc3QgV2ViVHJhbnNm
b3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgm
IHN1YmxheWVyVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3IsIGNvbnN0IEZsb2F0
UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBJbnRTaXplJiBib3VuZHMsIGJvb2wgcHJlc2VydmVzM0Qp
CiB7CiAgICAgbGF5ZXItPnNldFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwogICAgIGxheWVyLT5zZXRT
dWJsYXllclRyYW5zZm9ybShzdWJsYXllclRyYW5zZm9ybSk7CkBAIC01OCw2ICs1OSwxNiBAQCB2
b2lkIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIGNv
bnN0IFdlYlRyYW5zZm9ybWF0aW9uTQogICAgIGxheWVyLT5zZXRQcmVzZXJ2ZXMzRChwcmVzZXJ2
ZXMzRCk7CiB9CiAKK3ZvaWQgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhMYXllckNocm9t
aXVtKiBsYXllciwgY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgY29u
c3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHN1YmxheWVyVHJhbnNmb3JtLCBjb25zdCBGbG9h
dFBvaW50JiBhbmNob3IsIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBJbnRTaXpl
JiBib3VuZHMsIGJvb2wgcHJlc2VydmVzM0QpCit7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9y
VGVzdGluZzxMYXllckNocm9taXVtPihsYXllciwgdHJhbnNmb3JtLCBzdWJsYXllclRyYW5zZm9y
bSwgYW5jaG9yLCBwb3NpdGlvbiwgYm91bmRzLCBwcmVzZXJ2ZXMzRCk7Cit9CisKK3ZvaWQgc2V0
TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhDQ0xheWVySW1wbCogbGF5ZXIsIGNvbnN0IFdlYlRy
YW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0sIGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0
cml4JiBzdWJsYXllclRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgYW5jaG9yLCBjb25zdCBG
bG9hdFBvaW50JiBwb3NpdGlvbiwgY29uc3QgSW50U2l6ZSYgYm91bmRzLCBib29sIHByZXNlcnZl
czNEKQoreworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rpbmc8Q0NMYXllckltcGw+KGxh
eWVyLCB0cmFuc2Zvcm0sIHN1YmxheWVyVHJhbnNmb3JtLCBhbmNob3IsIHBvc2l0aW9uLCBib3Vu
ZHMsIHByZXNlcnZlczNEKTsKK30KKwogdm9pZCBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9y
bXNBbmRWaXNpYmlsaXR5KExheWVyQ2hyb21pdW0qIHJvb3RMYXllcikKIHsKICAgICBXZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKQEAgLTY4LDYgKzc5LDE3IEBAIHZvaWQg
ZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShMYXllckNocm9taXVt
KiByb290TGF5ZXIpCiAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxl
QW5kU2Npc3NvclJlY3RzKGR1bW15UmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcm9vdExheWVyLT5y
ZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCkpOwogfQogCit2b2lkIGV4ZWN1dGVDYWxjdWxh
dGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkoQ0NMYXllckltcGwqIHJvb3RMYXllcikKK3sK
KyAgICAvLyBOb3RlOiB0aGlzIHZlcnNpb24gc2tpcHMgbGF5ZXIgc29ydGluZy4KKyAgICBXZWJU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICBWZWN0b3I8Q0NMYXllcklt
cGwqPiBkdW1teVJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAgVmVjdG9yPENDTGF5ZXJJbXBs
Kj4gZHVtbXlMYXllckxpc3Q7CisgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7Cisg
ICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtcyhyb290TGF5
ZXIsIHJvb3RMYXllciwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBkdW1teVJlbmRl
clN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCAwLCBkdW1teU1heFRleHR1cmVTaXpl
KTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29y
UmVjdHMoZHVtbXlSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCByb290TGF5ZXItPnJlbmRlclN1cmZh
Y2UoKS0+Y29udGVudFJlY3QoKSk7Cit9CisKIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHJlbW92
ZTNEQ29tcG9uZW50T2ZNYXRyaXgoY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdCkK
IHsKICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCByZXQgPSBtYXQ7CkBAIC04MSw2ICsxMDMs
MzAgQEAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggcmVtb3ZlM0RDb21wb25lbnRPZk1hdHJpeChj
b25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYKICAgICByZXR1cm4gcmV0OwogfQogCitQYXNz
T3duUHRyPENDTGF5ZXJJbXBsPiBjcmVhdGVUcmVlRm9yRml4ZWRQb3NpdGlvblRlc3RzKCkKK3sK
KyAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDEpOwor
ICAgIE93blB0cjxDQ0xheWVySW1wbD4gY2hpbGQgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDIpOwor
ICAgIE93blB0cjxDQ0xheWVySW1wbD4gZ3JhbmRDaGlsZCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUo
Myk7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBncmVhdEdyYW5kQ2hpbGQgPSBDQ0xheWVySW1w
bDo6Y3JlYXRlKDQpOworCisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggSWRlbnRpdHlNYXRy
aXg7CisgICAgRmxvYXRQb2ludCBhbmNob3IoMCwgMCk7CisgICAgRmxvYXRQb2ludCBwb3NpdGlv
bigwLCAwKTsKKyAgICBJbnRTaXplIGJvdW5kcygxMDAsIDEwMCk7CisgICAgc2V0TGF5ZXJQcm9w
ZXJ0aWVzRm9yVGVzdGluZyhyb290LmdldCgpLCBJZGVudGl0eU1hdHJpeCwgSWRlbnRpdHlNYXRy
aXgsIGFuY2hvciwgcG9zaXRpb24sIGJvdW5kcywgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVy
dGllc0ZvclRlc3RpbmcoY2hpbGQuZ2V0KCksIElkZW50aXR5TWF0cml4LCBJZGVudGl0eU1hdHJp
eCwgYW5jaG9yLCBwb3NpdGlvbiwgYm91bmRzLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0
aWVzRm9yVGVzdGluZyhncmFuZENoaWxkLmdldCgpLCBJZGVudGl0eU1hdHJpeCwgSWRlbnRpdHlN
YXRyaXgsIGFuY2hvciwgcG9zaXRpb24sIGJvdW5kcywgZmFsc2UpOworICAgIHNldExheWVyUHJv
cGVydGllc0ZvclRlc3RpbmcoZ3JlYXRHcmFuZENoaWxkLmdldCgpLCBJZGVudGl0eU1hdHJpeCwg
SWRlbnRpdHlNYXRyaXgsIGFuY2hvciwgcG9zaXRpb24sIGJvdW5kcywgZmFsc2UpOworCisgICAg
Z3JhbmRDaGlsZC0+YWRkQ2hpbGQoZ3JlYXRHcmFuZENoaWxkLnJlbGVhc2UoKSk7CisgICAgY2hp
bGQtPmFkZENoaWxkKGdyYW5kQ2hpbGQucmVsZWFzZSgpKTsKKyAgICByb290LT5hZGRDaGlsZChj
aGlsZC5yZWxlYXNlKCkpOworICAgIHJvb3QtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKworICAg
IHJldHVybiByb290LnJlbGVhc2UoKTsKK30KKwogY2xhc3MgTGF5ZXJDaHJvbWl1bVdpdGhGb3Jj
ZWREcmF3c0NvbnRlbnQgOiBwdWJsaWMgTGF5ZXJDaHJvbWl1bSB7CiBwdWJsaWM6CiAgICAgTGF5
ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKQpAQCAtMTE3Niw2ICsxMjIyLDI4MyBA
QCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUZvcmNlUmVuZGVyU3VyZmFj
ZSkKICAgICBFWFBFQ1RfRVEocmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCksIDBVKTsKIH0K
IAorVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yRml4
ZWRQb3NpdGlvbkxheWVyV2l0aERpcmVjdENvbnRhaW5lcikKK3sKKyAgICAvLyBNYWtlIHN1cmUg
dGhhdCBmaXhlZC1wb3NpdGlvbiBsYXllcnMgY29tcGVuc2F0ZSBmb3IgdGhlaXIgY29udGFpbmVy
J3Mgc2Nyb2xsRGVsdGEgY29ycmVjdGx5LgorICAgIC8vCisgICAgLy8gVGhpcyB0ZXN0IGNoZWNr
cyB0aGUgc2NlbmFyaW8gd2hlcmUgdGhlIGZpeGVkLXBvc2l0aW9uIGNvbnRhaW5lciBpcyB0aGUg
ZGlyZWN0CisgICAgLy8gcGFyZW50IG9mIHRoZSBmaXhlZC1wb3NpdGlvbiBsYXllci4KKworICAg
IERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBzY29wZWRJbXBsVGhyZWFkOworICAgIE93blB0cjxD
Q0xheWVySW1wbD4gcm9vdCA9IGNyZWF0ZVRyZWVGb3JGaXhlZFBvc2l0aW9uVGVzdHMoKTsKKyAg
ICBDQ0xheWVySW1wbCogY2hpbGQgPSByb290LT5jaGlsZHJlbigpWzBdLmdldCgpOworICAgIEND
TGF5ZXJJbXBsKiBncmFuZENoaWxkID0gY2hpbGQtPmNoaWxkcmVuKClbMF0uZ2V0KCk7CisKKyAg
ICBjaGlsZC0+c2V0SXNDb250YWluZXJGb3JGaXhlZFBvc2l0aW9uTGF5ZXJzKHRydWUpOworICAg
IGdyYW5kQ2hpbGQtPnNldEZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0KHRydWUpOwor
ICAgICAgICAKKyAgICAvLyBDYXNlIDE6IHNjcm9sbERlbHRhIG9mIDAsIDAKKyAgICBjaGlsZC0+
c2V0U2Nyb2xsRGVsdGEoSW50U2l6ZSgwLCAwKSk7CisgICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdU
cmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShyb290LmdldCgpKTsKKworICAgIC8vIFRoZSBleHBlY3Rl
ZCBkcmF3IHRyYW5zZm9ybXMgd2l0aG91dCBhbnkgc2Nyb2xsIHNob3VsZCBzdGlsbCBpbmNsdWRl
IGEgdHJhbnNsYXRpb24gdG8gdGhlIGNlbnRlciBvZiB0aGUgbGF5ZXIgKGkuZS4gdHJhbnNsYXRp
b24gYnkgNTAsIDUwKS4KKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBleHBlY3RlZENoaWxk
VHJhbnNmb3JtOworICAgIGV4cGVjdGVkQ2hpbGRUcmFuc2Zvcm0udHJhbnNsYXRlKDUwLCA1MCk7
CisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggZXhwZWN0ZWRHcmFuZENoaWxkVHJhbnNmb3Jt
OworICAgIGV4cGVjdGVkR3JhbmRDaGlsZFRyYW5zZm9ybS50cmFuc2xhdGUoNTAsIDUwKTsKKyAg
ICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVkQ2hpbGRUcmFuc2Zvcm0s
IGNoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRS
SVhfRVEoZXhwZWN0ZWRHcmFuZENoaWxkVHJhbnNmb3JtLCBncmFuZENoaWxkLT5kcmF3VHJhbnNm
b3JtKCkpOworCisgICAgLy8gQ2FzZSAyOiBzY3JvbGxEZWx0YSBvZiAxMCwgMTAKKyAgICBjaGls
ZC0+c2V0U2Nyb2xsRGVsdGEoSW50U2l6ZSgxMCwgMTApKTsKKyAgICBleGVjdXRlQ2FsY3VsYXRl
RHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3QuZ2V0KCkpOworCisgICAgLy8gSGVyZSB0
aGUgY2hpbGQgaXMgYWZmZWN0ZWQgYnkgc2Nyb2xsRGVsdGEsIGJ1dCB0aGUgZml4ZWQgcG9zaXRp
b24gZ3JhbmRDaGlsZCBzaG91bGQgbm90IGJlIGFmZmVjdGVkLgorICAgIGV4cGVjdGVkQ2hpbGRU
cmFuc2Zvcm0ubWFrZUlkZW50aXR5KCk7CisgICAgZXhwZWN0ZWRDaGlsZFRyYW5zZm9ybS50cmFu
c2xhdGUoNDAsIDQwKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVj
dGVkQ2hpbGRUcmFuc2Zvcm0sIGNoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9U
UkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0ZWRHcmFuZENoaWxkVHJhbnNmb3JtLCBncmFu
ZENoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworfQorCitURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1v
blRlc3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JGaXhlZFBvc2l0aW9uTGF5ZXJXaXRoRGlzdGFudENv
bnRhaW5lcikKK3sKKyAgICAvLyBNYWtlIHN1cmUgdGhhdCBmaXhlZC1wb3NpdGlvbiBsYXllcnMg
Y29tcGVuc2F0ZSBmb3IgdGhlaXIgY29udGFpbmVyJ3Mgc2Nyb2xsRGVsdGEgY29ycmVjdGx5Lgor
ICAgIC8vCisgICAgLy8gVGhpcyB0ZXN0IGNoZWNrcyB0aGUgc2NlbmFyaW8gd2hlcmUgdGhlIGZp
eGVkLXBvc2l0aW9uIGNvbnRhaW5lciBpcyBOT1QgdGhlIGRpcmVjdAorICAgIC8vIHBhcmVudCBv
ZiB0aGUgZml4ZWQtcG9zaXRpb24gbGF5ZXIuCisgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFk
IHNjb3BlZEltcGxUaHJlYWQ7CisKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBjcmVh
dGVUcmVlRm9yRml4ZWRQb3NpdGlvblRlc3RzKCk7CisgICAgQ0NMYXllckltcGwqIGNoaWxkID0g
cm9vdC0+Y2hpbGRyZW4oKVswXS5nZXQoKTsKKyAgICBDQ0xheWVySW1wbCogZ3JhbmRDaGlsZCA9
IGNoaWxkLT5jaGlsZHJlbigpWzBdLmdldCgpOworICAgIENDTGF5ZXJJbXBsKiBncmVhdEdyYW5k
Q2hpbGQgPSBncmFuZENoaWxkLT5jaGlsZHJlbigpWzBdLmdldCgpOworCisgICAgY2hpbGQtPnNl
dElzQ29udGFpbmVyRm9yRml4ZWRQb3NpdGlvbkxheWVycyh0cnVlKTsKKyAgICBncmFuZENoaWxk
LT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KDgsIDYpKTsKKyAgICBncmVhdEdyYW5kQ2hpbGQtPnNl
dEZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0KHRydWUpOworCisgICAgLy8gQ2FzZSAx
OiBzY3JvbGxEZWx0YSBvZiAwLCAwCisgICAgY2hpbGQtPnNldFNjcm9sbERlbHRhKEludFNpemUo
MCwgMCkpOworICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHko
cm9vdC5nZXQoKSk7CisKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBleHBlY3RlZENoaWxk
VHJhbnNmb3JtOworICAgIGV4cGVjdGVkQ2hpbGRUcmFuc2Zvcm0udHJhbnNsYXRlKDUwLCA1MCk7
CisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggZXhwZWN0ZWRHcmFuZENoaWxkVHJhbnNmb3Jt
OworICAgIGV4cGVjdGVkR3JhbmRDaGlsZFRyYW5zZm9ybS50cmFuc2xhdGUoNTgsIDU2KTsKKyAg
ICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBleHBlY3RlZEdyZWF0R3JhbmRDaGlsZFRyYW5zZm9y
bTsKKyAgICBleHBlY3RlZEdyZWF0R3JhbmRDaGlsZFRyYW5zZm9ybS50cmFuc2xhdGUoNTgsIDU2
KTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVkQ2hpbGRUcmFu
c2Zvcm0sIGNoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElP
Tl9NQVRSSVhfRVEoZXhwZWN0ZWRHcmFuZENoaWxkVHJhbnNmb3JtLCBncmFuZENoaWxkLT5kcmF3
VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0
ZWRHcmVhdEdyYW5kQ2hpbGRUcmFuc2Zvcm0sIGdyZWF0R3JhbmRDaGlsZC0+ZHJhd1RyYW5zZm9y
bSgpKTsKKworICAgIC8vIENhc2UgMjogc2Nyb2xsRGVsdGEgb2YgMTAsIDEwCisgICAgY2hpbGQt
PnNldFNjcm9sbERlbHRhKEludFNpemUoMTAsIDEwKSk7CisgICAgZXhlY3V0ZUNhbGN1bGF0ZURy
YXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShyb290LmdldCgpKTsKKworICAgIC8vIEhlcmUgdGhl
IGNoaWxkIGFuZCBncmFuZENoaWxkIGFyZSBhZmZlY3RlZCBieSBzY3JvbGxEZWx0YSwgYnV0IHRo
ZSBmaXhlZCBwb3NpdGlvbiBncmVhdEdyYW5kQ2hpbGQgc2hvdWxkIG5vdCBiZSBhZmZlY3RlZC4K
KyAgICBleHBlY3RlZENoaWxkVHJhbnNmb3JtLm1ha2VJZGVudGl0eSgpOworICAgIGV4cGVjdGVk
Q2hpbGRUcmFuc2Zvcm0udHJhbnNsYXRlKDQwLCA0MCk7CisgICAgZXhwZWN0ZWRHcmFuZENoaWxk
VHJhbnNmb3JtLm1ha2VJZGVudGl0eSgpOworICAgIGV4cGVjdGVkR3JhbmRDaGlsZFRyYW5zZm9y
bS50cmFuc2xhdGUoNDgsIDQ2KTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VR
KGV4cGVjdGVkQ2hpbGRUcmFuc2Zvcm0sIGNoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVY
UEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0ZWRHcmFuZENoaWxkVHJhbnNmb3Jt
LCBncmFuZENoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElP
Tl9NQVRSSVhfRVEoZXhwZWN0ZWRHcmVhdEdyYW5kQ2hpbGRUcmFuc2Zvcm0sIGdyZWF0R3JhbmRD
aGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKK30KKworVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25U
ZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yRml4ZWRQb3NpdGlvbkxheWVyV2l0aEludGVybWVkaWF0
ZVN1cmZhY2UpCit7CisgICAgLy8gTWFrZSBzdXJlIHRoYXQgZml4ZWQtcG9zaXRpb24gbGF5ZXJz
IGNvbXBlbnNhdGUgZm9yIHRoZWlyIGNvbnRhaW5lcidzIHNjcm9sbERlbHRhIGNvcnJlY3RseS4K
KyAgICAvLworICAgIC8vIFRoaXMgdGVzdCBjaGVja3MgdGhlIHNjZW5hcmlvIHdoZXJlIHRoZSBm
aXhlZC1wb3NpdGlvbiBjb250YWluZXIgY29udHJpYnV0ZXMgdG8gYQorICAgIC8vIGRpZmZlcmVu
dCByZW5kZXJTdXJmYWNlIHRoYW4gdGhlIGZpeGVkLXBvc2l0aW9uIGxheWVyLiBJbiB0aGlzIGNh
c2UsIHRoZSBzdXJmYWNlCisgICAgLy8gb3JpZ2luVHJhbnNmb3JtcyBhbHNvIGhhdmUgdG8gYmUg
YWNjb3VudGVkIGZvciB3aGVuIGNoZWNraW5nIHRoZSBzY3JvbGxEZWx0YS4KKyAgICBEZWJ1Z1Nj
b3BlZFNldEltcGxUaHJlYWQgc2NvcGVkSW1wbFRocmVhZDsKKworICAgIE93blB0cjxDQ0xheWVy
SW1wbD4gcm9vdCA9IGNyZWF0ZVRyZWVGb3JGaXhlZFBvc2l0aW9uVGVzdHMoKTsKKyAgICBDQ0xh
eWVySW1wbCogY2hpbGQgPSByb290LT5jaGlsZHJlbigpWzBdLmdldCgpOworICAgIENDTGF5ZXJJ
bXBsKiBncmFuZENoaWxkID0gY2hpbGQtPmNoaWxkcmVuKClbMF0uZ2V0KCk7CisgICAgQ0NMYXll
ckltcGwqIGdyZWF0R3JhbmRDaGlsZCA9IGdyYW5kQ2hpbGQtPmNoaWxkcmVuKClbMF0uZ2V0KCk7
CisKKyAgICBjaGlsZC0+c2V0SXNDb250YWluZXJGb3JGaXhlZFBvc2l0aW9uTGF5ZXJzKHRydWUp
OworICAgIGdyYW5kQ2hpbGQtPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoOCwgNikpOworICAgIGdy
YW5kQ2hpbGQtPnNldEZvcmNlUmVuZGVyU3VyZmFjZSh0cnVlKTsKKyAgICBncmVhdEdyYW5kQ2hp
bGQtPnNldEZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0KHRydWUpOworICAgIGdyZWF0
R3JhbmRDaGlsZC0+c2V0RHJhd3NDb250ZW50KHRydWUpOworCisgICAgLy8gQ2FzZSAxOiBzY3Jv
bGxEZWx0YSBvZiAwLCAwCisgICAgY2hpbGQtPnNldFNjcm9sbERlbHRhKEludFNpemUoMCwgMCkp
OworICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocm9vdC5n
ZXQoKSk7CisgICAgICAgIAorICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGV4cGVjdGVkQ2hp
bGRUcmFuc2Zvcm07CisgICAgZXhwZWN0ZWRDaGlsZFRyYW5zZm9ybS50cmFuc2xhdGUoNTAsIDUw
KTsKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBleHBlY3RlZFN1cmZhY2VPcmlnaW5UcmFu
c2Zvcm07CisgICAgZXhwZWN0ZWRTdXJmYWNlT3JpZ2luVHJhbnNmb3JtLnRyYW5zbGF0ZSg4LCA2
KTsKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBleHBlY3RlZEdyYW5kQ2hpbGRUcmFuc2Zv
cm07CisgICAgZXhwZWN0ZWRHcmFuZENoaWxkVHJhbnNmb3JtLnRyYW5zbGF0ZSg1MCwgNTApOwor
ICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGV4cGVjdGVkR3JlYXRHcmFuZENoaWxkVHJhbnNm
b3JtOworICAgIGV4cGVjdGVkR3JlYXRHcmFuZENoaWxkVHJhbnNmb3JtLnRyYW5zbGF0ZSg1MCwg
NTApOworICAgIEFTU0VSVF9UUlVFKGdyYW5kQ2hpbGQtPnJlbmRlclN1cmZhY2UoKSk7CisgICAg
RVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZENoaWxkVHJhbnNmb3JtLCBj
aGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklY
X0VRKGV4cGVjdGVkU3VyZmFjZU9yaWdpblRyYW5zZm9ybSwgZ3JhbmRDaGlsZC0+cmVuZGVyU3Vy
ZmFjZSgpLT5vcmlnaW5UcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01B
VFJJWF9FUShleHBlY3RlZEdyYW5kQ2hpbGRUcmFuc2Zvcm0sIGdyYW5kQ2hpbGQtPmRyYXdUcmFu
c2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZEdy
ZWF0R3JhbmRDaGlsZFRyYW5zZm9ybSwgZ3JlYXRHcmFuZENoaWxkLT5kcmF3VHJhbnNmb3JtKCkp
OworCisgICAgLy8gQ2FzZSAyOiBzY3JvbGxEZWx0YSBvZiAxMCwgMTAKKyAgICBjaGlsZC0+c2V0
U2Nyb2xsRGVsdGEoSW50U2l6ZSgxMCwgMTApKTsKKyAgICBleGVjdXRlQ2FsY3VsYXRlRHJhd1Ry
YW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3QuZ2V0KCkpOworICAgICAgICAKKyAgICAvLyBIZXJl
IHRoZSBncmFuZENoaWxkIHJlbWFpbnMgdW5jaGFuZ2VkLCBiZWNhdXNlIGl0IHNjcm9sbHMgYWxv
bmcgd2l0aCB0aGUgcmVuZGVyU3VyZmFjZS4gKHRoZSB0cmFuc2xhdGlvbiBpcyBhY3R1YWxseSBp
biB0aGUgcmVuZGVyU3VyZmFjZSkKKyAgICAvLyBCdXQsIHRoZSBmaXhlZCBwb3NpdGlvbiBncmVh
dEdyYW5kQ2hpbGQgaXMgbW9yZSBhd2t3YXJkOiBpdHMgYWN0dWFsbHkgYmVpbmcgZHJhd24gd2l0
aCByZXNwZWN0IHRvIHRoZSByZW5kZXJTdXJmYWNlLCBidXQgaXQgbmVlZHMgdG8gY29tcGVuc2F0
ZSBmb3IgdGhlIHNjcm9sbC4KKyAgICBleHBlY3RlZENoaWxkVHJhbnNmb3JtLm1ha2VJZGVudGl0
eSgpOworICAgIGV4cGVjdGVkQ2hpbGRUcmFuc2Zvcm0udHJhbnNsYXRlKDQwLCA0MCk7CisgICAg
ZXhwZWN0ZWRTdXJmYWNlT3JpZ2luVHJhbnNmb3JtLm1ha2VJZGVudGl0eSgpOworICAgIGV4cGVj
dGVkU3VyZmFjZU9yaWdpblRyYW5zZm9ybS50cmFuc2xhdGUoLTIsIC00KTsKKyAgICBleHBlY3Rl
ZEdyZWF0R3JhbmRDaGlsZFRyYW5zZm9ybS5tYWtlSWRlbnRpdHkoKTsKKyAgICBleHBlY3RlZEdy
ZWF0R3JhbmRDaGlsZFRyYW5zZm9ybS50cmFuc2xhdGUoNjAsIDYwKTsKKworICAgIEFTU0VSVF9U
UlVFKGdyYW5kQ2hpbGQtPnJlbmRlclN1cmZhY2UoKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFU
SU9OX01BVFJJWF9FUShleHBlY3RlZENoaWxkVHJhbnNmb3JtLCBjaGlsZC0+ZHJhd1RyYW5zZm9y
bSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVkU3VyZmFj
ZU9yaWdpblRyYW5zZm9ybSwgZ3JhbmRDaGlsZC0+cmVuZGVyU3VyZmFjZSgpLT5vcmlnaW5UcmFu
c2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZEdy
YW5kQ2hpbGRUcmFuc2Zvcm0sIGdyYW5kQ2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQ
RUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZEdyZWF0R3JhbmRDaGlsZFRyYW5z
Zm9ybSwgZ3JlYXRHcmFuZENoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworfQorCitURVNUKENDTGF5
ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JGaXhlZFBvc2l0aW9uTGF5
ZXJXaXRoQ29udGFpbmVyTGF5ZXJUaGF0SGFzU3VyZmFjZSkKK3sKKyAgICAvLyBNYWtlIHN1cmUg
dGhhdCBmaXhlZC1wb3NpdGlvbiBsYXllcnMgY29tcGVuc2F0ZSBmb3IgdGhlaXIgY29udGFpbmVy
J3Mgc2Nyb2xsRGVsdGEgY29ycmVjdGx5LgorICAgIC8vCisgICAgLy8gVGhpcyB0ZXN0IGNoZWNr
cyB0aGUgc2NlbmFyaW8gd2hlcmUgdGhlIGZpeGVkLXBvc2l0aW9uIGNvbnRhaW5lciBpdHNlbGYg
aGFzIGEgcmVuZGVyU3VyZmFjZS4KKyAgICAvLyBJbiB0aGlzIGNhc2UsIHRoZSBjb250YWluZXIg
bGF5ZXIgc2hvdWxkIGJlIHRyZWF0ZWQgbGlrZSBhIGxheWVyIHRoYXQgY29udHJpYnV0ZXMgdG8g
YSB0YXJnZXRTdXJmYWNlLAorICAgIC8vIGFuZCB0aGF0IHN1cmZhY2UgaXMgY29tcGxldGVseSBp
cnJlbGV2YW50LCBhbmQgc2hvdWxkIG5vdCBhZmZlY3QgdGhlIHNjcm9sbCBjb21wZW5zYXRpb24u
CisgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIHNjb3BlZEltcGxUaHJlYWQ7CisKKyAgICBP
d25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBjcmVhdGVUcmVlRm9yRml4ZWRQb3NpdGlvblRlc3Rz
KCk7CisgICAgQ0NMYXllckltcGwqIGNoaWxkID0gcm9vdC0+Y2hpbGRyZW4oKVswXS5nZXQoKTsK
KyAgICBDQ0xheWVySW1wbCogZ3JhbmRDaGlsZCA9IGNoaWxkLT5jaGlsZHJlbigpWzBdLmdldCgp
OworCisgICAgY2hpbGQtPnNldElzQ29udGFpbmVyRm9yRml4ZWRQb3NpdGlvbkxheWVycyh0cnVl
KTsKKyAgICBjaGlsZC0+c2V0Rm9yY2VSZW5kZXJTdXJmYWNlKHRydWUpOworICAgIGdyYW5kQ2hp
bGQtPnNldEZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0KHRydWUpOworICAgIGdyYW5k
Q2hpbGQtPnNldERyYXdzQ29udGVudCh0cnVlKTsKKworICAgIC8vIENhc2UgMTogc2Nyb2xsRGVs
dGEgb2YgMCwgMAorICAgIGNoaWxkLT5zZXRTY3JvbGxEZWx0YShJbnRTaXplKDAsIDApKTsKKyAg
ICBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3QuZ2V0KCkp
OworCisgICAgLy8gVGhlIGV4cGVjdGVkIGRyYXcgdHJhbnNmb3JtcyB3aXRob3V0IGFueSBzY3Jv
bGwgc2hvdWxkIHN0aWxsIGluY2x1ZGUgYSB0cmFuc2xhdGlvbiB0byB0aGUgY2VudGVyIG9mIHRo
ZSBsYXllciAoaS5lLiB0cmFuc2xhdGlvbiBieSA1MCwgNTApLgorICAgIFdlYlRyYW5zZm9ybWF0
aW9uTWF0cml4IGV4cGVjdGVkU3VyZmFjZU9yaWdpblRyYW5zZm9ybTsKKyAgICBleHBlY3RlZFN1
cmZhY2VPcmlnaW5UcmFuc2Zvcm0udHJhbnNsYXRlKDAsIDApOworICAgIFdlYlRyYW5zZm9ybWF0
aW9uTWF0cml4IGV4cGVjdGVkQ2hpbGRUcmFuc2Zvcm07CisgICAgZXhwZWN0ZWRDaGlsZFRyYW5z
Zm9ybS50cmFuc2xhdGUoNTAsIDUwKTsKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBleHBl
Y3RlZEdyYW5kQ2hpbGRUcmFuc2Zvcm07CisgICAgZXhwZWN0ZWRHcmFuZENoaWxkVHJhbnNmb3Jt
LnRyYW5zbGF0ZSg1MCwgNTApOworICAgIEFTU0VSVF9UUlVFKGNoaWxkLT5yZW5kZXJTdXJmYWNl
KCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0ZWRTdXJmYWNl
T3JpZ2luVHJhbnNmb3JtLCBjaGlsZC0+cmVuZGVyU3VyZmFjZSgpLT5vcmlnaW5UcmFuc2Zvcm0o
KSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZENoaWxkVHJh
bnNmb3JtLCBjaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJ
T05fTUFUUklYX0VRKGV4cGVjdGVkR3JhbmRDaGlsZFRyYW5zZm9ybSwgZ3JhbmRDaGlsZC0+ZHJh
d1RyYW5zZm9ybSgpKTsKKworICAgIC8vIENhc2UgMjogc2Nyb2xsRGVsdGEgb2YgMTAsIDEwCisg
ICAgY2hpbGQtPnNldFNjcm9sbERlbHRhKEludFNpemUoMTAsIDEwKSk7CisgICAgZXhlY3V0ZUNh
bGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShyb290LmdldCgpKTsKKworICAgIC8v
IFRoZSBzdXJmYWNlIGlzIHRyYW5zbGF0ZWQgYnkgc2Nyb2xsRGVsdGEsIHRoZSBjaGlsZCB0cmFu
c2Zvcm0gZG9lc24ndCBjaGFuZ2UKKyAgICAvLyBiZWNhdXNlIGl0IHNjcm9sbHMgYWxvbmcgd2l0
aCB0aGUgc3VyZmFjZSwgYnV0IHRoZSBmaXhlZCBwb3NpdGlvbiBncmFuZENoaWxkCisgICAgLy8g
bmVlZHMgdG8gY29tcGVuc2F0ZSBmb3IgdGhlIHNjcm9sbCB0cmFuc2xhdGlvbi4KKyAgICBleHBl
Y3RlZFN1cmZhY2VPcmlnaW5UcmFuc2Zvcm0ubWFrZUlkZW50aXR5KCk7CisgICAgZXhwZWN0ZWRT
dXJmYWNlT3JpZ2luVHJhbnNmb3JtLnRyYW5zbGF0ZSgtMTAsIC0xMCk7CisgICAgZXhwZWN0ZWRH
cmFuZENoaWxkVHJhbnNmb3JtLm1ha2VJZGVudGl0eSgpOworICAgIGV4cGVjdGVkR3JhbmRDaGls
ZFRyYW5zZm9ybS50cmFuc2xhdGUoNjAsIDYwKTsKKyAgICBBU1NFUlRfVFJVRShjaGlsZC0+cmVu
ZGVyU3VyZmFjZSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVj
dGVkU3VyZmFjZU9yaWdpblRyYW5zZm9ybSwgY2hpbGQtPnJlbmRlclN1cmZhY2UoKS0+b3JpZ2lu
VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0
ZWRDaGlsZFRyYW5zZm9ybSwgY2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RS
QU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZEdyYW5kQ2hpbGRUcmFuc2Zvcm0sIGdyYW5k
Q2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7Cit9CisKK1RFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9u
VGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvckZpeGVkUG9zaXRpb25MYXllclRoYXRJc0Fsc29GaXhl
ZFBvc2l0aW9uQ29udGFpbmVyKQoreworICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGZpeGVkLXBvc2l0
aW9uIGxheWVycyBjb21wZW5zYXRlIGZvciB0aGVpciBjb250YWluZXIncyBzY3JvbGxEZWx0YSBj
b3JyZWN0bHkuCisgICAgLy8KKyAgICAvLyBUaGlzIHRlc3QgY2hlY2tzIHRoZSBzY2VuYXJpbyB3
aGVyZSBhIGZpeGVkLXBvc2l0aW9uIGxheWVyIGFsc28gaGFwcGVucyB0byBiZSBhCisgICAgLy8g
Y29udGFpbmVyIGl0c2VsZiBmb3IgYSBkZXNjZW5kYW50IGZpeGVkIHBvc2l0aW9uIGxheWVyLiBJ
biBwYXJ0aWN1bGFyLCB0aGUgbGF5ZXIKKyAgICAvLyBzaG91bGQgbm90IGFjY2lkZW50YWxseSBi
ZSBmaXhlZCB0byBpdHNlbGYuCisgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIHNjb3BlZElt
cGxUaHJlYWQ7CisKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBjcmVhdGVUcmVlRm9y
Rml4ZWRQb3NpdGlvblRlc3RzKCk7CisgICAgQ0NMYXllckltcGwqIGNoaWxkID0gcm9vdC0+Y2hp
bGRyZW4oKVswXS5nZXQoKTsKKyAgICBDQ0xheWVySW1wbCogZ3JhbmRDaGlsZCA9IGNoaWxkLT5j
aGlsZHJlbigpWzBdLmdldCgpOworCisgICAgY2hpbGQtPnNldElzQ29udGFpbmVyRm9yRml4ZWRQ
b3NpdGlvbkxheWVycyh0cnVlKTsKKyAgICBncmFuZENoaWxkLT5zZXRGaXhlZFRvQ29udGFpbmVy
TGF5ZXJWaXNpYmxlUmVjdCh0cnVlKTsKKworICAgIC8vIFRoaXMgc2hvdWxkIG5vdCBjb25mdXNl
IHRoZSBncmFuZENoaWxkLiBJZiBjb3JyZWN0LCB0aGUgZ3JhbmRDaGlsZCB3b3VsZCBzdGlsbCBi
ZSBjb25zaWRlcmVkIGZpeGVkIHRvIGl0cyBjb250YWluZXIgKGkuZS4gImNoaWxkIikuCisgICAg
Z3JhbmRDaGlsZC0+c2V0SXNDb250YWluZXJGb3JGaXhlZFBvc2l0aW9uTGF5ZXJzKHRydWUpOwor
CisgICAgLy8gQ2FzZSAxOiBzY3JvbGxEZWx0YSBvZiAwLCAwCisgICAgY2hpbGQtPnNldFNjcm9s
bERlbHRhKEludFNpemUoMCwgMCkpOworICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jt
c0FuZFZpc2liaWxpdHkocm9vdC5nZXQoKSk7CisKKyAgICAvLyBUaGUgZXhwZWN0ZWQgZHJhdyB0
cmFuc2Zvcm1zIHdpdGhvdXQgYW55IHNjcm9sbCBzaG91bGQgc3RpbGwgaW5jbHVkZSBhIHRyYW5z
bGF0aW9uIHRvIHRoZSBjZW50ZXIgb2YgdGhlIGxheWVyIChpLmUuIHRyYW5zbGF0aW9uIGJ5IDUw
LCA1MCkuCisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggZXhwZWN0ZWRDaGlsZFRyYW5zZm9y
bTsKKyAgICBleHBlY3RlZENoaWxkVHJhbnNmb3JtLnRyYW5zbGF0ZSg1MCwgNTApOworICAgIFdl
YlRyYW5zZm9ybWF0aW9uTWF0cml4IGV4cGVjdGVkR3JhbmRDaGlsZFRyYW5zZm9ybTsKKyAgICBl
eHBlY3RlZEdyYW5kQ2hpbGRUcmFuc2Zvcm0udHJhbnNsYXRlKDUwLCA1MCk7CisgICAgRVhQRUNU
X1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZENoaWxkVHJhbnNmb3JtLCBjaGlsZC0+
ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4
cGVjdGVkR3JhbmRDaGlsZFRyYW5zZm9ybSwgZ3JhbmRDaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsK
KworICAgIC8vIENhc2UgMjogc2Nyb2xsRGVsdGEgb2YgMTAsIDEwCisgICAgY2hpbGQtPnNldFNj
cm9sbERlbHRhKEludFNpemUoMTAsIDEwKSk7CisgICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFu
c2Zvcm1zQW5kVmlzaWJpbGl0eShyb290LmdldCgpKTsKKworICAgIC8vIEhlcmUgdGhlIGNoaWxk
IGlzIGFmZmVjdGVkIGJ5IHNjcm9sbERlbHRhLCBidXQgdGhlIGZpeGVkIHBvc2l0aW9uIGdyYW5k
Q2hpbGQgc2hvdWxkIG5vdCBiZSBhZmZlY3RlZC4KKyAgICBleHBlY3RlZENoaWxkVHJhbnNmb3Jt
Lm1ha2VJZGVudGl0eSgpOworICAgIGV4cGVjdGVkQ2hpbGRUcmFuc2Zvcm0udHJhbnNsYXRlKDQw
LCA0MCk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZENoaWxk
VHJhbnNmb3JtLCBjaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JN
QVRJT05fTUFUUklYX0VRKGV4cGVjdGVkR3JhbmRDaGlsZFRyYW5zZm9ybSwgZ3JhbmRDaGlsZC0+
ZHJhd1RyYW5zZm9ybSgpKTsKK30KKworI2lmZGVmIE5ERUJVRworVEVTVChDQ0xheWVyVHJlZUhv
c3RDb21tb25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yRml4ZWRQb3NpdGlvbkxheWVyVGhhdEhh
c05vQ29udGFpbmVyKQoreworICAgIC8vIFRoZSBzY2VuYXJpbyBpbiB0aGlzIHRlc3Qgd291bGQg
KGNvcnJlY3RseSkgdHJpZ2dlciBkZWJ1ZyBhc3NlcnRpb25zLCBzbyBpdHMgb25seQorICAgIC8v
IHVzZWZ1bCB0byBydW4gdGhpcyB0ZXN0IGluIG5vbi1kZWJ1ZyBtb2RlLiBJdCBjaGVja3MgYSBw
YXRob2xvZ2ljYWwgc2NlbmFyaW8gd2hlcmUKKyAgICAvLyBhIGZpeGVkLXBvc2l0aW9uIGxheWVy
IGRvZXMgbm90IGZpbmQgYW55IGFuY2VzdG9yIHRoYXQgaXMgYSAiY29udGFpbmVyTGF5ZXIiLiBJ
ZgorICAgIC8vIHRoaXMgcmVhbGx5IGhhcHBlbnMgaXQgc2hvdWxkIGJlIGNvbnNpZGVyZWQgYSBi
dWcgaW4gb3RoZXIgcGFydHMgb2YgY29kZSwgYnV0IHdlCisgICAgLy8gc2hvdWxkIG1ha2Ugc3Vy
ZSB0aGUgY29tcG9zaXRvciBzdGlsbCBoYW5kbGVzIGl0IGdyYWNlZnVsbHkgaW4gcmVsZWFzZSBt
b2RlIGJ5CisgICAgLy8gY29uc2lkZXJpbmcgdGhlIGxheWVyIGZpeGVkIHdpdGggcmVzcGVjdCB0
byB0aGUgcm9vdCBsYXllci4KKyAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgc2NvcGVkSW1w
bFRocmVhZDsKKworICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IGNyZWF0ZVRyZWVGb3JG
aXhlZFBvc2l0aW9uVGVzdHMoKTsKKyAgICBDQ0xheWVySW1wbCogY2hpbGQgPSByb290LT5jaGls
ZHJlbigpWzBdLmdldCgpOworICAgIENDTGF5ZXJJbXBsKiBncmFuZENoaWxkID0gY2hpbGQtPmNo
aWxkcmVuKClbMF0uZ2V0KCk7CisKKyAgICBncmFuZENoaWxkLT5zZXRGaXhlZFRvQ29udGFpbmVy
TGF5ZXJWaXNpYmxlUmVjdCh0cnVlKTsKKworICAgIC8vIENhc2UgMTogcm9vdCBzY3JvbGxEZWx0
YSBvZiAwLCAwCisgICAgcm9vdC0+c2V0U2Nyb2xsRGVsdGEoSW50U2l6ZSgwLCAwKSk7CisgICAg
ZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShyb290LmdldCgpKTsK
KworICAgIC8vIFRoZSBleHBlY3RlZCBkcmF3IHRyYW5zZm9ybXMgd2l0aG91dCBhbnkgc2Nyb2xs
IHNob3VsZCBzdGlsbCBpbmNsdWRlIGEgdHJhbnNsYXRpb24gdG8gdGhlIGNlbnRlciBvZiB0aGUg
bGF5ZXIgKGkuZS4gdHJhbnNsYXRpb24gYnkgNTAsIDUwKS4KKyAgICBXZWJUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBleHBlY3RlZENoaWxkVHJhbnNmb3JtOworICAgIGV4cGVjdGVkQ2hpbGRUcmFuc2Zv
cm0udHJhbnNsYXRlKDUwLCA1MCk7CisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggZXhwZWN0
ZWRHcmFuZENoaWxkVHJhbnNmb3JtOworICAgIGV4cGVjdGVkR3JhbmRDaGlsZFRyYW5zZm9ybS50
cmFuc2xhdGUoNTAsIDUwKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4
cGVjdGVkQ2hpbGRUcmFuc2Zvcm0sIGNoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVD
VF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0ZWRHcmFuZENoaWxkVHJhbnNmb3JtLCBn
cmFuZENoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworCisgICAgLy8gQ2FzZSAyOiByb290IHNjcm9s
bERlbHRhIG9mIDEwLCAxMAorICAgIHJvb3QtPnNldFNjcm9sbERlbHRhKEludFNpemUoMTAsIDEw
KSk7CisgICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShyb290
LmdldCgpKTsKKworICAgIC8vIEhlcmUgdGhlIGNoaWxkIGlzIGFmZmVjdGVkIGJ5IHNjcm9sbERl
bHRhLCBidXQgdGhlIGZpeGVkIHBvc2l0aW9uIGdyYW5kQ2hpbGQgc2hvdWxkIG5vdCBiZSBhZmZl
Y3RlZC4KKyAgICAvLyBOT1RFIHRoYXQgdGhlIHJlYWwgdGVzdCBob3dldmVyLCBpcyBqdXN0IHRo
YXQgaXQgZG9lc24ndCBjcmFzaC4KKyAgICBleHBlY3RlZENoaWxkVHJhbnNmb3JtLm1ha2VJZGVu
dGl0eSgpOworICAgIGV4cGVjdGVkQ2hpbGRUcmFuc2Zvcm0udHJhbnNsYXRlKDQwLCA0MCk7Cisg
ICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZENoaWxkVHJhbnNmb3Jt
LCBjaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFU
UklYX0VRKGV4cGVjdGVkR3JhbmRDaGlsZFRyYW5zZm9ybSwgZ3JhbmRDaGlsZC0+ZHJhd1RyYW5z
Zm9ybSgpKTsKK30KKyNlbmRpZgorCisKIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwg
dmVyaWZ5Q2xpcFJlY3RDdWxsc1JlbmRlclN1cmZhY2VzKQogewogICAgIC8vIFRoZSBlbnRpcmUg
c3VidHJlZSBvZiBsYXllcnMgdGhhdCBhcmUgb3V0c2lkZSB0aGUgY2xpcFJlY3Qgc2hvdWxkIGJl
IGN1bGxlZCBhd2F5LAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>146492</attachid>
            <date>2012-06-07 23:51:18 -0700</date>
            <delta_ts>2012-06-08 16:07:39 -0700</delta_ts>
            <desc>Rewrote from scratch, added more tests, feels solid</desc>
            <filename>bug-70103-20120607235117.patch</filename>
            <type>text/plain</type>
            <size>51927</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5NzI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjdmZmIwZGVhMzk0YWU5
ZjllMmVkOWRiNjExZThhMGQwZWEzNzhkZi4uZTU1OWRlMWUxYzhmODY0YjVlMDQ4ZWYxNWE2OGFl
Mjg5MDZhZWYxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY0IEBACisyMDEyLTA2LTA3ICBTaGF3
biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
SW1wbGVtZW50IHBvc2l0aW9uOmZpeGVkIGluIGNvbXBvc2l0b3IgdGhyZWFkCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDEwMworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVuaXQgdGVzdHMgYWRkZWQgdG8g
Q0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdDoKKyAgICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21t
b25UZXN0LnZlcmlmeVNjcm9sbENvbXBlbnNhdGlvbkZvckZpeGVkUG9zaXRpb25MYXllcldpdGhE
aXJlY3RDb250YWluZXIKKyAgICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LnZlcmlm
eVNjcm9sbENvbXBlbnNhdGlvbkZvckZpeGVkUG9zaXRpb25MYXllcldpdGhUcmFuc2Zvcm1lZERp
cmVjdENvbnRhaW5lcgorICAgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QudmVyaWZ5
U2Nyb2xsQ29tcGVuc2F0aW9uRm9yRml4ZWRQb3NpdGlvbkxheWVyV2l0aERpc3RhbnRDb250YWlu
ZXIKKyAgICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LnZlcmlmeVNjcm9sbENvbXBl
bnNhdGlvbkZvckZpeGVkUG9zaXRpb25MYXllcldpdGhEaXN0YW50Q29udGFpbmVyQW5kVHJhbnNm
b3JtcworICAgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QudmVyaWZ5U2Nyb2xsQ29t
cGVuc2F0aW9uRm9yRml4ZWRQb3NpdGlvbkxheWVyV2l0aE11bHRpcGxlU2Nyb2xsRGVsdGFzCisg
ICAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC52ZXJpZnlTY3JvbGxDb21wZW5zYXRp
b25Gb3JGaXhlZFBvc2l0aW9uTGF5ZXJXaXRoSW50ZXJtZWRpYXRlU3VyZmFjZUFuZFRyYW5zZm9y
bXMKKyAgICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LnZlcmlmeVNjcm9sbENvbXBl
bnNhdGlvbkZvckZpeGVkUG9zaXRpb25MYXllcldpdGhDb250YWluZXJMYXllclRoYXRIYXNTdXJm
YWNlCisgICAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC52ZXJpZnlTY3JvbGxDb21w
ZW5zYXRpb25Gb3JGaXhlZFBvc2l0aW9uTGF5ZXJUaGF0SXNBbHNvRml4ZWRQb3NpdGlvbkNvbnRh
aW5lcgorICAgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QudmVyaWZ5U2Nyb2xsQ29t
cGVuc2F0aW9uRm9yRml4ZWRQb3NpdGlvbkxheWVyVGhhdEhhc05vQ29udGFpbmVyCisKKyAgICAg
ICAgU2lnbmlmaWNhbnQgY29udHJpYnV0aW9ucyB0byB0aGlzIHBhdGNoIGJ5IEFscGhhIExhbSBh
bmQgU2FtaSBLeW9zdGlsYS4KKworICAgICAgICBUaGlzIHBhdGNoIGlzIHRoZSBjb21wb3NpdG9y
LXNpZGUgY2hhbmdlIHRoYXQgYWRkcyBzdXBwb3J0IGZvcgorICAgICAgICBmaXhlZC1wb3NpdGlv
biBsYXllcnMgdG8gYmUgY29tcG9zaXRlZCBsYXllcnMuIEJlZm9yZSB0aGlzIHBhdGNoLAorICAg
ICAgICBmaXhlZC1wb3NpdGlvbiBlbGVtZW50cyB3ZXJlIHBvc2l0aW9uZWQgYnkgV2ViQ29yZSAo
aS5lLiBtYWluCisgICAgICAgIHRocmVhZCB3aGVuIHBhaW50aW5nKSwgYW5kIHRoZSBjb21wb3Np
dG9yIGRpZCBub3QgaGF2ZSBlbm91Z2gKKyAgICAgICAga25vd2xlZGdlIG9uIGl0cyBvd24gdG8g
cG9zaXRpb24gaXQgcHJvcGVybHkuIFRoaXMgcGF0Y2ggYWRkcyB0aGUKKyAgICAgICAgbmVjZXNz
YXJ5IG1hdGggYW5kIHBsdW1icyB0aGUgbmVjZXNzYXJ5IGxheWVyIGluZm9ybWF0aW9uIHNvIHRo
YXQKKyAgICAgICAgdGhlIGltcGwgdGhyZWFkIGNhbiBwcm9wZXJseSBwb3NpdGlvbiBmaXhlZC1w
b3NpdGlvbiBlbGVtZW50cyBvbgorICAgICAgICBpdHMgb3duLiBUaGlzIGFsbG93cyBmaXhlZC1w
b3NpdGlvbiBlbGVtZW50cyB0byBiZSBjb21wb3NpdGVkLAorICAgICAgICB3aGljaCBjYW4gZ3Jl
YXRseSBoZWxwIHRvIGF2b2lkIHJlcGFpbnRpbmcgY29udGFpbmVyIGxheWVycyB3aGVuCisgICAg
ICAgIHNjcm9sbGluZyB3aXRoIGEgZml4ZWQtcG9zaXRpb24gbGF5ZXIuCisKKyAgICAgICAgVGhl
cmUgYWxzbyBuZWVkcyB0byBiZSBXZWJDb3JlLXNpZGUgc3VwcG9ydCBmb3IgdGhpcywgd2hpY2gg
aXMKKyAgICAgICAgYWRkcmVzc2VkIGluIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD03ODg2NAorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpMYXllckNo
cm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVz
VG8pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0u
aDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnNldElzQ29udGFpbmVyRm9yRml4
ZWRQb3NpdGlvbkxheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjppc0Nv
bnRhaW5lckZvckZpeGVkUG9zaXRpb25MYXllcnMpOgorICAgICAgICAoTGF5ZXJDaHJvbWl1bSk6
CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXRGaXhlZFRvQ29udGFpbmVyTGF5
ZXJWaXNpYmxlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpmaXhlZFRv
Q29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllcklt
cGw6OkNDTGF5ZXJJbXBsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVySW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OnNldElzQ29u
dGFpbmVyRm9yRml4ZWRQb3NpdGlvbkxheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
SW1wbDo6aXNDb250YWluZXJGb3JGaXhlZFBvc2l0aW9uTGF5ZXJzKToKKyAgICAgICAgKENDTGF5
ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpzZXRGaXhlZFRvQ29udGFp
bmVyTGF5ZXJWaXNpYmxlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6Zml4
ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
ckltcGw6OnNjcm9sbERlbHRhU3BhY2VUb1N1cmZhY2VUcmFuc2Zvcm0pOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllckltcGw6OnNldFNjcm9sbERlbHRhU3BhY2VUb1N1cmZhY2VUcmFuc2Zvcm0p
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dENvbW1vbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRTY3JvbGxEZWx0YVNwYWNlVG9TdXJm
YWNlVHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Y29t
cHV0ZVRyYW5zZm9ybUZyb21GaXhlZFBvc1N1cmZhY2VTcGFjZVRvU2Nyb2xsRGVsdGFTcGFjZSk6
CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlVHJhbnNmb3JtVG9VbmRvU2Nyb2xsRGVsdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZVRvdGFsU2Nyb2xsQ29tcGVuc2F0aW9uRm9yRml4ZWRQ
b3NpdGlvbkxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1z
SW50ZXJuYWwpOgorCiAyMDEyLTA2LTA2ICBEYW5hIEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gSW4gZWFjaCBjb21wb3NpdGVkIGZyYW1lLCBkaWRE
cmF3KCkgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uIGxheWVycyBmb3Igd2hpY2ggd2lsbERyYXco
KSB3YXMgY2FsbGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDU1NTg4ZDI3ZWMxNjYz
NTg3ZGFlMmFkNGViMjQ1NTQ1OTY3ODY1NGEuLjllM2IyMjExYjRkOTlmYmFhODAwY2E3YjJlZTA2
NmM4NzkwZTM4NmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAK
KzIwMTItMDYtMDcgIFNoYXduIFNpbmdoICA8c2hhd25zaW5naEBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgW2Nocm9taXVtXSBJbXBsZW1lbnQgcG9zaXRpb246Zml4ZWQgaW4gY29tcG9zaXRvciB0
aHJlYWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcw
MTAzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB0
ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcDoKKwogMjAxMi0wNi0wNiAgRGFuYSBK
YW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIEluIGVh
Y2ggY29tcG9zaXRlZCBmcmFtZSwgZGlkRHJhdygpIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbiBs
YXllcnMgZm9yIHdoaWNoIHdpbGxEcmF3KCkgd2FzIGNhbGxlZApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNw
cAppbmRleCBmNjFmZDM1ZDUzMDAxNDFmMmIyZmYyNmI4NzY0YjhmNjJlMDNlMjNkLi4yODk4MmFl
YTM0MTA5NGY5YzFhODYzNTU2YTRiZjlkZDBjODIzODQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNw
cApAQCAtNzIsNiArNzIsOCBAQCBMYXllckNocm9taXVtOjpMYXllckNocm9taXVtKCkKICAgICAs
IG1fZGVidWdCb3JkZXJXaWR0aCgwKQogICAgICwgbV9vcGFjaXR5KDEuMCkKICAgICAsIG1fYW5j
aG9yUG9pbnRaKDApCisgICAgLCBtX2lzQ29udGFpbmVyRm9yRml4ZWRQb3NpdGlvbkxheWVycyhm
YWxzZSkKKyAgICAsIG1fZml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3QoZmFsc2UpCiAg
ICAgLCBtX2lzRHJhd2FibGUoZmFsc2UpCiAgICAgLCBtX21hc2tzVG9Cb3VuZHMoZmFsc2UpCiAg
ICAgLCBtX29wYXF1ZShmYWxzZSkKQEAgLTUwNiw2ICs1MDgsOCBAQCB2b2lkIExheWVyQ2hyb21p
dW06OnB1c2hQcm9wZXJ0aWVzVG8oQ0NMYXllckltcGwqIGxheWVyKQogICAgIGlmICghb3BhY2l0
eUlzQW5pbWF0aW5nKCkpCiAgICAgICAgIGxheWVyLT5zZXRPcGFjaXR5KG1fb3BhY2l0eSk7CiAg
ICAgbGF5ZXItPnNldFBvc2l0aW9uKG1fcG9zaXRpb24pOworICAgIGxheWVyLT5zZXRJc0NvbnRh
aW5lckZvckZpeGVkUG9zaXRpb25MYXllcnMobV9pc0NvbnRhaW5lckZvckZpeGVkUG9zaXRpb25M
YXllcnMpOworICAgIGxheWVyLT5zZXRGaXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdCht
X2ZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0KTsKICAgICBsYXllci0+c2V0UHJlc2Vy
dmVzM0QocHJlc2VydmVzM0QoKSk7CiAgICAgbGF5ZXItPnNldFNjcm9sbFBvc2l0aW9uKG1fc2Ny
b2xsUG9zaXRpb24pOwogICAgIGxheWVyLT5zZXRTdWJsYXllclRyYW5zZm9ybShtX3N1YmxheWVy
VHJhbnNmb3JtKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAppbmRleCA1ZDUyZjhiYzlmZWVkMTI0MTA2OGQx
MTEyZGNjOGQ5ZTQzNzQ2MWVmLi5hN2M5ZTVhMTg1NjBjOWY2Mjk5YWI2ZWRmOGQyOGU5YTM1OGM5
NTE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCkBAIC0xMjksNiArMTI5LDEyIEBAIHB1YmxpYzoKICAg
ICB2b2lkIHNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKTsKICAgICBGbG9hdFBvaW50IHBv
c2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbjsgfQogCisgICAgdm9pZCBzZXRJc0Nv
bnRhaW5lckZvckZpeGVkUG9zaXRpb25MYXllcnMoYm9vbCBpc0NvbnRhaW5lckZvckZpeGVkUG9z
aXRpb25MYXllcnMpIHsgbV9pc0NvbnRhaW5lckZvckZpeGVkUG9zaXRpb25MYXllcnMgPSBpc0Nv
bnRhaW5lckZvckZpeGVkUG9zaXRpb25MYXllcnM7IH0KKyAgICBib29sIGlzQ29udGFpbmVyRm9y
Rml4ZWRQb3NpdGlvbkxheWVycygpIGNvbnN0IHsgcmV0dXJuIG1faXNDb250YWluZXJGb3JGaXhl
ZFBvc2l0aW9uTGF5ZXJzOyB9CisKKyAgICB2b2lkIHNldEZpeGVkVG9Db250YWluZXJMYXllclZp
c2libGVSZWN0KGJvb2wgZml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3QpIHsgbV9maXhl
ZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdCA9IGZpeGVkVG9Db250YWluZXJMYXllclZpc2li
bGVSZWN0OyBzZXROZWVkc0NvbW1pdCgpOyB9CisgICAgYm9vbCBmaXhlZFRvQ29udGFpbmVyTGF5
ZXJWaXNpYmxlUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZml4ZWRUb0NvbnRhaW5lckxheWVyVmlz
aWJsZVJlY3Q7IH0KKwogICAgIHZvaWQgc2V0U3VibGF5ZXJUcmFuc2Zvcm0oY29uc3QgV2ViS2l0
OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwogICAgIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNm
b3JtYXRpb25NYXRyaXgmIHN1YmxheWVyVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9zdWJs
YXllclRyYW5zZm9ybTsgfQogCkBAIC0zMzMsNiArMzM5LDggQEAgcHJpdmF0ZToKICAgICBXZWJL
aXQ6OldlYkZpbHRlck9wZXJhdGlvbnMgbV9maWx0ZXJzOwogICAgIFdlYktpdDo6V2ViRmlsdGVy
T3BlcmF0aW9ucyBtX2JhY2tncm91bmRGaWx0ZXJzOwogICAgIGZsb2F0IG1fYW5jaG9yUG9pbnRa
OworICAgIGJvb2wgbV9pc0NvbnRhaW5lckZvckZpeGVkUG9zaXRpb25MYXllcnM7CisgICAgYm9v
bCBtX2ZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0OwogICAgIGJvb2wgbV9pc0RyYXdh
YmxlOwogICAgIGJvb2wgbV9tYXNrc1RvQm91bmRzOwogICAgIGJvb2wgbV9vcGFxdWU7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVySW1wbC5jcHAKaW5kZXggNzJjMGVhMmI3OWNlNzJiYTZhZTBmYzYyZWMxNzc2YjY5
MmFjNWFmYy4uYzE1NWE0ODBiMTY3NGE1MmVhODJkZmQ2N2MwZGEyNWI4ZTIzMGE5NyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
ckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJJbXBsLmNwcApAQCAtNjMsNiArNjMsOCBAQCBDQ0xheWVySW1wbDo6Q0NMYXll
ckltcGwoaW50IGlkKQogICAgICwgbV9pc05vbkNvbXBvc2l0ZWRDb250ZW50KGZhbHNlKQogICAg
ICwgbV9kcmF3c0NvbnRlbnQoZmFsc2UpCiAgICAgLCBtX2ZvcmNlUmVuZGVyU3VyZmFjZShmYWxz
ZSkKKyAgICAsIG1faXNDb250YWluZXJGb3JGaXhlZFBvc2l0aW9uTGF5ZXJzKGZhbHNlKQorICAg
ICwgbV9maXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdChmYWxzZSkKICAgICAsIG1fcGFn
ZVNjYWxlRGVsdGEoMSkKICAgICAsIG1fdGFyZ2V0UmVuZGVyU3VyZmFjZSgwKQogICAgICwgbV9k
cmF3RGVwdGgoMCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCmluZGV4IGZkNGZhY2FhNDBjYmExNWRmNjI5
YTFiMjRkYTMyYzJmYTViMzc0NGQuLjBhM2I0ZWJiNTk3MGJhMmNkZWNiZjRiN2Y4ZjM5YjZlY2Y2
ZjNiYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaApAQCAtMTMyLDYgKzEzMiwxMiBAQCBwdWJsaWM6
CiAgICAgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50Jik7CiAgICAgY29uc3QgRmxv
YXRQb2ludCYgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9CiAKKyAgICB2
b2lkIHNldElzQ29udGFpbmVyRm9yRml4ZWRQb3NpdGlvbkxheWVycyhib29sIGlzQ29udGFpbmVy
Rm9yRml4ZWRQb3NpdGlvbkxheWVycykgeyBtX2lzQ29udGFpbmVyRm9yRml4ZWRQb3NpdGlvbkxh
eWVycyA9IGlzQ29udGFpbmVyRm9yRml4ZWRQb3NpdGlvbkxheWVyczsgfQorICAgIGJvb2wgaXND
b250YWluZXJGb3JGaXhlZFBvc2l0aW9uTGF5ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9pc0NvbnRh
aW5lckZvckZpeGVkUG9zaXRpb25MYXllcnM7IH0KKworICAgIHZvaWQgc2V0Rml4ZWRUb0NvbnRh
aW5lckxheWVyVmlzaWJsZVJlY3QoYm9vbCBmaXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVj
dCA9IHRydWUpIHsgbV9maXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdCA9IGZpeGVkVG9D
b250YWluZXJMYXllclZpc2libGVSZWN0O30KKyAgICBib29sIGZpeGVkVG9Db250YWluZXJMYXll
clZpc2libGVSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9maXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNp
YmxlUmVjdDsgfQorCiAgICAgdm9pZCBzZXRQcmVzZXJ2ZXMzRChib29sKTsKICAgICBib29sIHBy
ZXNlcnZlczNEKCkgY29uc3QgeyByZXR1cm4gbV9wcmVzZXJ2ZXMzRDsgfQogCkBAIC0yMjksNiAr
MjM1LDkgQEAgcHVibGljOgogICAgIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRy
aXgmIHNjcmVlblNwYWNlVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9zY3JlZW5TcGFjZVRy
YW5zZm9ybTsgfQogICAgIHZvaWQgc2V0U2NyZWVuU3BhY2VUcmFuc2Zvcm0oY29uc3QgV2ViS2l0
OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4KSB7IG1fc2NyZWVuU3BhY2VUcmFuc2Zv
cm0gPSBtYXRyaXg7IH0KIAorICAgIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRy
aXgmIHNjcm9sbERlbHRhU3BhY2VUb1N1cmZhY2VUcmFuc2Zvcm0oKSB7IHJldHVybiBtX3Njcm9s
bERlbHRhU3BhY2VUb1N1cmZhY2VUcmFuc2Zvcm07IH0KKyAgICB2b2lkIHNldFNjcm9sbERlbHRh
U3BhY2VUb1N1cmZhY2VUcmFuc2Zvcm0oY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgbWF0cml4KSB7IG1fc2Nyb2xsRGVsdGFTcGFjZVRvU3VyZmFjZVRyYW5zZm9ybSA9IG1h
dHJpeDsgfQorCiAgICAgYm9vbCBkcmF3VHJhbnNmb3JtSXNBbmltYXRpbmcoKSBjb25zdCB7IHJl
dHVybiBtX2RyYXdUcmFuc2Zvcm1Jc0FuaW1hdGluZzsgfQogICAgIHZvaWQgc2V0RHJhd1RyYW5z
Zm9ybUlzQW5pbWF0aW5nKGJvb2wgYW5pbWF0aW5nKSB7IG1fZHJhd1RyYW5zZm9ybUlzQW5pbWF0
aW5nID0gYW5pbWF0aW5nOyB9CiAgICAgYm9vbCBzY3JlZW5TcGFjZVRyYW5zZm9ybUlzQW5pbWF0
aW5nKCkgY29uc3QgeyByZXR1cm4gbV9zY3JlZW5TcGFjZVRyYW5zZm9ybUlzQW5pbWF0aW5nOyB9
CkBAIC0zMjMsNiArMzMyLDExIEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2RyYXdzQ29udGVudDsK
ICAgICBib29sIG1fZm9yY2VSZW5kZXJTdXJmYWNlOwogCisgICAgLy8gU2V0IGZvciB0aGUgbGF5
ZXIgdGhhdCBvdGhlciBsYXllcnMgYXJlIGZpeGVkIHRvLgorICAgIGJvb2wgbV9pc0NvbnRhaW5l
ckZvckZpeGVkUG9zaXRpb25MYXllcnM7CisgICAgLy8gU2V0IGZvciB0aGUgbGF5ZXIgdGhhdCBo
YXMgcG9zaXRpb24gZml4ZWQgdG8gdGhlIGNvbnRhaW5lciBsYXllcidzIHZpc2libGUgcmVjdC4K
KyAgICBib29sIG1fZml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3Q7CisKICAgICBGbG9h
dFNpemUgbV9zY3JvbGxEZWx0YTsKICAgICBJbnRTaXplIG1fc2VudFNjcm9sbERlbHRhOwogICAg
IEludFNpemUgbV9tYXhTY3JvbGxQb3NpdGlvbjsKQEAgLTM1Miw2ICszNjYsNyBAQCBwcml2YXRl
OgogCiAgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX2RyYXdUcmFuc2Zvcm07
CiAgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3NjcmVlblNwYWNlVHJhbnNm
b3JtOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggbV9zY3JvbGxEZWx0YVNw
YWNlVG9TdXJmYWNlVHJhbnNmb3JtOyAvLyBOT1RFOiBvbmx5IHZhbGlkIGZvciBmcmFtZXMgd2hl
cmUgdGhpcyBsYXllcidzIHNjcm9sbERlbHRhIGlzIG5vbi16ZXJvLgogICAgIGJvb2wgbV9kcmF3
VHJhbnNmb3JtSXNBbmltYXRpbmc7CiAgICAgYm9vbCBtX3NjcmVlblNwYWNlVHJhbnNmb3JtSXNB
bmltYXRpbmc7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwCmlu
ZGV4IDljZDAzMTYwZTJiMGJjNWE3YjY1MmU4MGI5ZjJiYWRiZDAxYmMzY2YuLmNiMTcyOWNhNDdh
NjJkNjhmMjdmMGZkYTYwNThiNDdjZTEzYWJmNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0Q29tbW9uLmNwcApAQCAtMzE4LDYgKzMxOCwxMzUgQEAgc3RhdGljIGJvb2wgc3Vi
dHJlZVNob3VsZFJlbmRlclRvU2VwYXJhdGVTdXJmYWNlKExheWVyVHlwZSogbGF5ZXIsIGJvb2wg
YXhpc0FsaWcKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK3N0YXRpYyB2b2lkIHNldFNjcm9sbERl
bHRhU3BhY2VUb1N1cmZhY2VUcmFuc2Zvcm0oTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIGNvbnN0IFdl
YlRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgpCit7CisgICAgLy8gTWFpbiB0aHJlYWQgKGku
ZS4gTGF5ZXJDaHJvbWl1bSkgZG9lcyBub3QgdXNlIHNjcm9sbERlbHRhcy4KK30KKworc3RhdGlj
IHZvaWQgc2V0U2Nyb2xsRGVsdGFTcGFjZVRvU3VyZmFjZVRyYW5zZm9ybShDQ0xheWVySW1wbCog
bGF5ZXIsIGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgpCit7CisgICAgbGF5
ZXItPnNldFNjcm9sbERlbHRhU3BhY2VUb1N1cmZhY2VUcmFuc2Zvcm0obWF0cml4KTsKK30KKwor
c3RhdGljIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGNvbXB1dGVUcmFuc2Zvcm1Gcm9tRml4ZWRQ
b3NTdXJmYWNlU3BhY2VUb1Njcm9sbERlbHRhU3BhY2UoQ0NMYXllckltcGwqIGZpeGVkUG9zTGF5
ZXIsIENDTGF5ZXJJbXBsKiBzY3JvbGxpbmdMYXllcikKK3sKKyAgICAvLyBDYXJlZnVsISBUaGlz
IGNvZGUgaXMgY2FsbGVkIGJlZm9yZSBmaXhlZFBvc0xheWVyIGVwaGVtZXJhbC90cmFuc2llbnQg
cHJvcGVydGllcworICAgIC8vIGFyZSBpbml0aWFsaXplZC4gQWxsIGFuY2VzdG9ycyBvZiBmaXhl
ZFBvc0xheWVyLCBpbmNsdWRpbmcgc2Nyb2xsaW5nTGF5ZXIsIGFyZQorICAgIC8vIGV4cGVjdGVk
IHRvIGJlIGNvcnJlY3RseSBpbml0aWFsaXplZCBoZXJlLgorICAgIC8vCisgICAgLy8gIlNjcm9s
bERlbHRhU3BhY2UiIGlzIHRoZSBzcGFjZSB3aGVyZSB0aGUgc2Nyb2xsaW5nTGF5ZXIncyBzY3Jv
bGxEZWx0YSB3YXMgb3JpZ2luYWxseSBhcHBsaWVkLgorICAgIC8vCisgICAgLy8gIkZpeGVkUG9z
U3VyZmFjZVNwYWNlIiBpcyB0aGUgdGFyZ2V0IHJlbmRlciBzdXJmYWNlIG9mIHRoZSBmaXhlZCBw
b3NpdGlvbiBlbGVtZW50LgorICAgIC8vIFRoaXMgc3BhY2UgY29ycmVzcG9uZHMgdG8gbGF5ZXIn
cyBwYXJlbnQncyB0YXJnZXRSZW5kZXJTdXJmYWNlLgorCisgICAgLy8gV2Ugc2hvdWxkbid0IHJl
YWNoIHRoaXMgY29kZSBpZiBmaXhlZFBvc0xheWVyIGRvZXNuJ3QgaGF2ZSBhIHBhcmVudC4KKyAg
ICBBU1NFUlQoZml4ZWRQb3NMYXllci0+cGFyZW50KCkpOworICAgIEFTU0VSVChmaXhlZFBvc0xh
eWVyICE9IHNjcm9sbGluZ0xheWVyKTsKKworICAgIC8vIFdhbGsgdGhlIGhpZXJhcmNoeSBvZiBy
ZW5kZXJTdXJmYWNlcywgdW50aWwgd2UgcmVhY2ggdGhlIHN1cmZhY2UgdGhhdCBtYXRjaGVzIHNj
cm9sbGluZ0xheWVyJ3MgdGFyZ2V0UmVuZGVyU3VyZmFjZS4KKyAgICAvLyBGb3IgZWFjaCBzdXJm
YWNlLXRvLXN1cmZhY2UgaG9wLCB3ZSBuZWVkIHRvIGFjY3VtdWxhdGUgdGhlIHRyYW5zZm9ybSBi
ZXR3ZWVuIHRoZW0uCisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggZml4ZWRQb3NTdXJmYWNl
U3BhY2VUb1Njcm9sbGluZ0xheWVyU3VyZmFjZVNwYWNlOworICAgIENDUmVuZGVyU3VyZmFjZSog
Y3VycmVudFRhcmdldFN1cmZhY2UgPSBmaXhlZFBvc0xheWVyLT5wYXJlbnQoKS0+dGFyZ2V0UmVu
ZGVyU3VyZmFjZSgpOworICAgIHdoaWxlIChjdXJyZW50VGFyZ2V0U3VyZmFjZSAhPSBzY3JvbGxp
bmdMYXllci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpKSB7CisgICAgICAgIGZpeGVkUG9zU3VyZmFj
ZVNwYWNlVG9TY3JvbGxpbmdMYXllclN1cmZhY2VTcGFjZS5tdWx0aXBseShjdXJyZW50VGFyZ2V0
U3VyZmFjZS0+b3JpZ2luVHJhbnNmb3JtKCkpOworICAgICAgICBjdXJyZW50VGFyZ2V0U3VyZmFj
ZSA9IGN1cnJlbnRUYXJnZXRTdXJmYWNlLT50YXJnZXRSZW5kZXJTdXJmYWNlKCk7CisgICAgfQor
CisgICAgLy8gQXQgdGhpcyBwb2ludCB3ZSBhY2N1bXVsYXRlZCB0aGUgdHJhbnNmb3JtIGJldHdl
ZW4gdGhlIGZpeGVkIHBvc2l0aW9uIGxheWVyJ3MgdGFyZ2V0UmVuZGVyU3VyZmFjZSBzcGFjZSBh
bmQgdGhlIHNjcm9sbGluZyBsYXllcidzIHRhcmdldFJlbmRlclN1cmZhY2Ugc3BhY2UuCisgICAg
Ly8gVGhlIGxhc3QgdHJhbnNmb3JtIHdlIG5lZWQgdG8gaW5jbHVkZSBpcyB0aGUgdHJhbnNmb3Jt
IGZyb20gdGhlIHNjcm9sbGluZyBsYXllcidzIHRhcmdldFJlbmRlclN1cmZhY2Ugc3BhY2UgdG8g
dGhlIGFjdHVhbCBzcGFjZSB3aGVyZSBzY3JvbGxEZWx0YSB3YXMgYXBwbGllZC4KKyAgICBXZWJU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBzY3JvbGxpbmdMYXllclN1cmZhY2VTcGFjZVRvU2Nyb2xsRGVs
dGFTcGFjZSA9IHNjcm9sbGluZ0xheWVyLT5zY3JvbGxEZWx0YVNwYWNlVG9TdXJmYWNlVHJhbnNm
b3JtKCkuaW52ZXJzZSgpOworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHJlc3VsdCA9IHNj
cm9sbGluZ0xheWVyU3VyZmFjZVNwYWNlVG9TY3JvbGxEZWx0YVNwYWNlICogZml4ZWRQb3NTdXJm
YWNlU3BhY2VUb1Njcm9sbGluZ0xheWVyU3VyZmFjZVNwYWNlOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK3N0YXRpYyBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjb21wdXRlVHJhbnNmb3JtVG9V
bmRvU2Nyb2xsRGVsdGEoQ0NMYXllckltcGwqIGZpeGVkUG9zTGF5ZXIsIENDTGF5ZXJJbXBsKiBz
Y3JvbGxpbmdMYXllcikKK3sKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGNvbXB1dGVzIHRoZSB0cmFu
c2Zvcm0gdGhhdCBjYW5jZWxzIG91dCB0aGUgc2Nyb2xsaW5nTGF5ZXIncyBzY3JvbGxEZWx0YS4K
KyAgICAvLyBUaGlzIHRyYW5zZm9ybSB3b3VsZCByZWNlaXZlIG9iamVjdHMgaW4gdGhlIGZpeGVk
IHBvc2l0aW9uIGxheWVyJ3MgdGFyZ2V0UmVuZGVyU3VyZmFjZSBzcGFjZSwKKyAgICAvLyBhbmQg
b3V0cHV0cyBvYmplY3RzIGluIHRoYXQgc2FtZSBzcGFjZSwgd2l0aCB0aGUgc2Nyb2xsaW5nTGF5
ZXIncyBzY3JvbGxEZWx0YSByZW1vdmVkLgorCisgICAgRmxvYXRTaXplIHNjcm9sbERlbHRhID0g
c2Nyb2xsaW5nTGF5ZXItPnNjcm9sbERlbHRhKCk7CisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRy
aXggZml4ZWRQb3NTdXJmYWNlU3BhY2VUb1Njcm9sbERlbHRhU3BhY2UgPSBjb21wdXRlVHJhbnNm
b3JtRnJvbUZpeGVkUG9zU3VyZmFjZVNwYWNlVG9TY3JvbGxEZWx0YVNwYWNlKGZpeGVkUG9zTGF5
ZXIsIHNjcm9sbGluZ0xheWVyKTsKKworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5z
Zm9ybVRvVW5kb1Njcm9sbERlbHRhID0gZml4ZWRQb3NTdXJmYWNlU3BhY2VUb1Njcm9sbERlbHRh
U3BhY2UuaW52ZXJzZSgpOworICAgIHRyYW5zZm9ybVRvVW5kb1Njcm9sbERlbHRhLnRyYW5zbGF0
ZShzY3JvbGxEZWx0YS53aWR0aCgpLCBzY3JvbGxEZWx0YS5oZWlnaHQoKSk7CisgICAgdHJhbnNm
b3JtVG9VbmRvU2Nyb2xsRGVsdGEubXVsdGlwbHkoZml4ZWRQb3NTdXJmYWNlU3BhY2VUb1Njcm9s
bERlbHRhU3BhY2UpOworICAgIHJldHVybiB0cmFuc2Zvcm1Ub1VuZG9TY3JvbGxEZWx0YTsKK30K
Kworc3RhdGljIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGNvbXB1dGVUb3RhbFNjcm9sbENvbXBl
bnNhdGlvbkZvckZpeGVkUG9zaXRpb25MYXllcihMYXllckNocm9taXVtKiBmaXhlZFBvc0xheWVy
KQoreworICAgIC8vIE9uIHRoZSBtYWluIHRocmVhZCwgd2UgZG8gbm90IG5lZWQgdG8gZGVhbCB3
aXRoIHNjcm9sbCBjb21wZW5zYXRpb24uCisgICAgLy8gU28gd2UgY2FuIGp1c3QgcmV0dXJuIGFu
IGlkZW50aXR5IG1hdHJpeC4KKyAgICByZXR1cm4gV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgoKTsK
K30KKworc3RhdGljIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGNvbXB1dGVUb3RhbFNjcm9sbENv
bXBlbnNhdGlvbkZvckZpeGVkUG9zaXRpb25MYXllcihDQ0xheWVySW1wbCogZml4ZWRQb3NMYXll
cikKK3sKKyAgICAvLyAiU2Nyb2xsIGNvbXBlbnNhdGlvbiIgaXMgdGhlIHRvdGFsIGNvbXBvc2l0
ZSB0cmFuc2Zvcm0gdGhhdCBjYW5jZWxzIG91dCBhbGwKKyAgICAvLyBzY3JvbGxEZWx0YXMgdGhh
dCBzaG91bGQgbm90IGFmZmVjdCB0aGUgZml4ZWQgcG9zaXRpb24gbGF5ZXIuCisgICAgLy8KKyAg
ICAvLyBUbyBjYW5jZWwgb3V0IHRoZXNlIHNjcm9sbERlbHRhcywgd2UgaGF2ZSB0byB3YWxrIHVw
IHRoZSBoaWVyYXJjaHkgYW5kIHVuZG8gZXZlcnkKKyAgICAvLyBub24temVybyBzY3JvbGxEZWx0
YSB1bnRpbCB3ZSByZWFjaCB0aGUgZ2VvbWV0cmljIHNwYWNlIHdoZXJlIHRoZSBmaXhlZC1wb3Np
dGlvbgorICAgIC8vIGxheWVyIGlzIGFjdHVhbGx5IGZpeGVkLgorICAgIC8vCisgICAgLy8gQ3Vy
cmVudGx5LCBmaXhlZCBwb3NpdGlvbiBlbGVtZW50cyBhcmUgcmVnYXJkZWQgYXMgYSBzcGVjaWFs
IGNhc2UgcmF0aGVyIHRoYW4gdGhlCisgICAgLy8gY29tbW9uIGNhc2UuIFNvLCB0aGlzIGFsZ29y
aXRobSB3YXMgZGVzaWduZWQgdG8gY29tcGVuc2F0ZSBmb3Igc2Nyb2xsRGVsdGFzIHdpdGhvdXQK
KyAgICAvLyBhZmZlY3RpbmcgdGhlIGV4aXN0aW5nIG5vbi1maXhlZC1wb3NpdGlvbiBjb2RlIHBh
dGhzLiBCeSBoaWRpbmcgdGhlIGNvbXBsZXhpdHkgYW5kCisgICAgLy8gY29uZnVzaW9uIGhlcmUs
IHdlIGRvbid0IGhhdmUgdG8gcmlzayByZWdyZXNzaW9ucyBvciBwZXJmb3JtYW5jZSBoaXRzIGZv
ciB0aGUKKyAgICAvLyBjb21tb24gY2FzZS4KKyAgICAvLworICAgIC8vIEFsZ29yaXRobSBEZXRh
aWxzOgorICAgIC8vCisgICAgLy8gVHdvIHF1aWNrIGRlZmluaXRpb25zOgorICAgIC8vICAidGFy
Z2V0U3VyZmFjZVNwYWNlIjogdGhlIGdlb21ldHJpYyBzcGFjZSBvZiB0aGUgZml4ZWQgcG9zaXRp
b24gbGF5ZXIncyB0YXJnZXRSZW5kZXJTdXJmYWNlLgorICAgIC8vICAic2Nyb2xsRGVsdGFTcGFj
ZSI6IHRoZSBzcGFjZSB3aGVyZSB0aGUgc2Nyb2xsIGRlbHRhIHdhcyBvcmlnaW5hbGx5IGFwcGxp
ZWQgKGFuZCB0aGVyZWZvcmUgdGhlCisgICAgLy8gICAgICAgICAgICAgICAgICAgICAgc3BhY2Ug
d2UgbmVlZCB0byBiZSBpbiwgdG8gdW5kbyB0aGUgc2Nyb2xsKS4KKyAgICAvLworICAgIC8vIFRo
ZSBmaW5hbCBzY3JvbGwgY29tcGVuc2F0aW9uIGlzIHByZS1tdWx0aXBsaWVkIHRvIHRoZSBwYXJl
bnRNYXRyaXg6CisgICAgLy8gICAgZml4ZWRQb3NpdGlvblBhcmVudE1hdHJpeCA9IHRvdGFsU2Ny
b2xsQ29tcGVuc2F0aW9uICogb3JpZ2luYWxHaXZlblBhcmVudE1hdHJpeDsKKyAgICAvLworICAg
IC8vIEludGVycHJldGluZyB0aGUgbWF0aCByaWdodC10by1sZWZ0LCB0aGUgb3JpZ2luYWwgcGFy
ZW50TWF0cml4IHRyYW5zZm9ybXMgb2JqZWN0cworICAgIC8vIGZyb20gYSAicGFydGlhbGx5LWNv
bXB1dGVkIGxvY2FsIGxheWVyIHNwYWNlIiB0byB0aGUgInRhcmdldFN1cmZhY2VTcGFjZSIuIEFu
ZAorICAgIC8vIHRoZXJlZm9yZSwgdGhlIHNjcm9sbENvbXBlbnNhdGlvbiBuZWVkcyB0byBzdGFy
dCBhbmQgZW5kIGluIHRhcmdldFN1cmZhY2VTcGFjZSwKKyAgICAvLyBvbmx5IHVuLWRvaW5nIHRo
ZSBzY3JvbGxEZWx0YXMgd2l0aG91dCBjaGFuZ2luZyB0aGUgc3BhY2UgY29udmVyc2lvbiB0aGF0
CisgICAgLy8gcGFyZW50TWF0cml4IHJlcHJlc2VudHMuCisgICAgLy8KKyAgICAvLyBGb3IgZWFj
aCBub24temVybyBzY3JvbGxEZWx0YSwgd2UgaGF2ZSB0byBkbyB0aGUgZm9sbG93aW5nOgorICAg
IC8vICAgIDEuIGNvbnZlcnQgZnJvbSB0YXJnZXRTdXJmYWNlU3BhY2UgdG8gc2Nyb2xsRGVsdGFT
cGFjZQorICAgIC8vICAgIDIuIGFwcGx5IGEgdHJhbnNsYXRpb24gdGhhdCBjYW5jZWxzIHRoZSBv
cmlnaW5hbCBzY3JvbGxEZWx0YSB0cmFuc2xhdGlvbgorICAgIC8vICAgIDMuIGNvbnZlcnQgYmFj
ayB0byB0YXJnZXRTdXJmYWNlU3BhY2UgKGludmVyc2Ugb2Ygc3RlcCAxKS4KKyAgICAvLworICAg
IC8vIEluIG1hdGgsIHRoZXNlIHN0ZXBzIGFyZSBqdXN0IGEgc2VxdWVuY2Ugb2YgbWF0cmljZXMg
KHdpdGggU3RlcHMgMS0zIGdvaW5nIHJpZ2h0LXRvLWxlZnQpOgorICAgIC8vICAgIHRyYW5zZm9y
bVRvVW5kb1Njcm9sbERlbHRhID0gdHJhbnNmb3JtVG9TcGFjZVdoZXJlU2Nyb2xsRGVsdGFXYXNB
cHBsaWVkLmludmVyc2UoKSAqIGludmVyc2VTY3JvbGxEZWx0YVRyYW5zbGF0aW9uICogdHJhbnNm
b3JtVG9TcGFjZVdoZXJlU2Nyb2xsRGVsdGFXYXNBcHBsaWVkOworICAgIC8vCisgICAgLy8gVGhl
IHRvdGFsIHNjcm9sbENvbXBlbnNhdGlvbk1hdHJpeCBpcyBzaW1wbHkgYSByZXBldGl0aW9uIG9m
IHRoZXNlIDMgc3RlcHMgZm9yIGV2ZXJ5IG5vbi16ZXJvIHNjcm9sbERlbHRhIHRoYXQgd2UgbmVl
ZCB0byB1bmRvLgorICAgIC8vICAgIHRyYW5zZm9ybVRvVW5kb1Njcm9sbERlbHRhMSAqIHRyYW5z
Zm9ybVRvVW5kb1Njcm9sbERlbHRhMiAqIC4uLiAoZXRjLikKKyAgICAvLworICAgIC8vIFdlIGZp
bmQgdGhlc2Ugbm9uLXplcm8gc2Nyb2xsRGVsdGFzIGJ5IHdhbGtpbmcgdXAgdGhlIGxheWVyIHRy
ZWUsIHN0b3BwaW5nIGFmdGVyIHdlCisgICAgLy8gY29tcGVuc2F0ZSBmb3IgdGhlIHNjcm9sbERl
bHRhIG9mIHRoZSAiY29udGFpbmVyRm9yRml4ZWRQb3NpdGlvbkxheWVycyIuCisgICAgLy8KKwor
ICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgb25seSBtZWFuaW5nZnVsIGlmIHRoZSBsYXllciBpcyBh
IGZpeGVkIHBvc2l0aW9uZWQgZWxlbWVudC4KKyAgICBBU1NFUlQoZml4ZWRQb3NMYXllciAmJiBm
aXhlZFBvc0xheWVyLT5maXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdCgpKTsKKworICAg
IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHNjcm9sbENvbXBlbnNhdGlvbjsKKyAgICBDQ0xheWVy
SW1wbCogY3VycmVudExheWVyID0gZml4ZWRQb3NMYXllci0+cGFyZW50KCk7CisgICAgd2hpbGUg
KGN1cnJlbnRMYXllcikgeworICAgICAgICBpZiAoIWN1cnJlbnRMYXllci0+c2Nyb2xsRGVsdGEo
KS5pc1plcm8oKSkgeworICAgICAgICAgICAgLy8gVGhlbiB3ZSBuZWVkIHRvIHVuZG8gdGhpcyBs
YXllcidzIHNjcm9sbERlbHRhLgorICAgICAgICAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgg
dHJhbnNmb3JtVG9VbmRvU2Nyb2xsRGVsdGEgPSBjb21wdXRlVHJhbnNmb3JtVG9VbmRvU2Nyb2xs
RGVsdGEoZml4ZWRQb3NMYXllciwgY3VycmVudExheWVyKTsKKyAgICAgICAgICAgIHNjcm9sbENv
bXBlbnNhdGlvbiA9IHRyYW5zZm9ybVRvVW5kb1Njcm9sbERlbHRhICogc2Nyb2xsQ29tcGVuc2F0
aW9uOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGN1cnJlbnRMYXllci0+aXNDb250YWluZXJG
b3JGaXhlZFBvc2l0aW9uTGF5ZXJzKCkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBj
dXJyZW50TGF5ZXIgPSBjdXJyZW50TGF5ZXItPnBhcmVudCgpOworICAgIH0KKyAgICByZXR1cm4g
c2Nyb2xsQ29tcGVuc2F0aW9uOworfQorCiAvLyBSZWN1cnNpdmVseSB3YWxrcyB0aGUgbGF5ZXIg
dHJlZSBzdGFydGluZyBhdCB0aGUgZ2l2ZW4gbm9kZSBhbmQgY29tcHV0ZXMgYWxsIHRoZQogLy8g
bmVjZXNzYXJ5IHRyYW5zZm9ybWF0aW9ucywgY2xpcFJlY3RzLCByZW5kZXIgc3VyZmFjZXMsIGV0
Yy4KIHRlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgTGF5ZXJMaXN0LCB0eXBl
bmFtZSBSZW5kZXJTdXJmYWNlVHlwZSwgdHlwZW5hbWUgTGF5ZXJTb3J0ZXI+CkBAIC00NDEsNiAr
NTcwLDE0IEBAIHN0YXRpYyBib29sIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zSW50ZXJuYWwoTGF5
ZXJUeXBlKiBsYXllciwgTGF5ZXJUeXBlKiByb290TGF5CiAgICAgV2ViVHJhbnNmb3JtYXRpb25N
YXRyaXggbGF5ZXJMb2NhbFRyYW5zZm9ybTsKICAgICAvLyBMVCA9IFRyW29yaWdpbl0gKiBTW3Bh
Z2VTY2FsZURlbHRhXQogICAgIGxheWVyTG9jYWxUcmFuc2Zvcm0uc2NhbGUobGF5ZXItPnBhZ2VT
Y2FsZURlbHRhKCkpOworCisgICAgLy8gVGhpcyB0cmFuc2Zvcm0gaXMgd2hhdCB3ZSBuZWVkIHRv
IHVzZSBvbiB0aGUgaW1wbCB0aHJlYWQgaWYgdGhlcmUgaXMgYSBmaXhlZAorICAgIC8vIHBvc2l0
aW9uIGRlc2NlbmRhbnQgdGhhdCBuZWVkcyB0byB1bmRvIHRoZSBzY3JvbGxEZWx0YSBhcHBsaWVk
IG9uIHRoaXMgbGF5ZXIuIE5vdGUKKyAgICAvLyB0aGlzIGFwcHJvYWNoIGlzIGNob3NlbiB0byBt
aW5pbWl6ZSBvdmVyaGVhZCB0aGF0IGdldHMgYWRkZWQgdG8gdGhlIGNvbW1vbiBjb2RlCisgICAg
Ly8gcGF0aHMgKGkuZS4gbm9uIGZpeGVkLXBvc2l0aW9uIGxheWVycykuCisgICAgaWYgKCFsYXll
ci0+c2Nyb2xsRGVsdGEoKS5pc1plcm8oKSkKKyAgICAgICAgc2V0U2Nyb2xsRGVsdGFTcGFjZVRv
U3VyZmFjZVRyYW5zZm9ybShsYXllciwgcGFyZW50TWF0cml4ICogbGF5ZXJMb2NhbFRyYW5zZm9y
bSk7CisKICAgICAvLyBMVCA9IFRyW29yaWdpbl0gKiBTW3BhZ2VTY2FsZURlbHRhXSAqIFRyW29y
aWdpbjJhbmNob3JdCiAgICAgbGF5ZXJMb2NhbFRyYW5zZm9ybS50cmFuc2xhdGUzZChwb3NpdGlv
bi54KCksIHBvc2l0aW9uLnkoKSwgbGF5ZXItPmFuY2hvclBvaW50WigpKTsKICAgICAvLyBMVCA9
IFRyW29yaWdpbl0gKiBTW3BhZ2VTY2FsZURlbHRhXSAqIFRyW29yaWdpbjJhbmNob3JdICogTVts
YXllcl0KQEAgLTQ0OCw3ICs1ODUsMTcgQEAgc3RhdGljIGJvb2wgY2FsY3VsYXRlRHJhd1RyYW5z
Zm9ybXNJbnRlcm5hbChMYXllclR5cGUqIGxheWVyLCBMYXllclR5cGUqIHJvb3RMYXkKICAgICAv
LyBMVCA9IFRyW29yaWdpbl0gKiBTW3BhZ2VTY2FsZURlbHRhXSAqIFRyW29yaWdpbjJhbmNob3Jd
ICogTVtsYXllcl0gKiBUclthbmNob3IyY2VudGVyXQogICAgIGxheWVyTG9jYWxUcmFuc2Zvcm0u
dHJhbnNsYXRlM2QoY2VudGVyT2Zmc2V0WCwgY2VudGVyT2Zmc2V0WSwgLWxheWVyLT5hbmNob3JQ
b2ludFooKSk7CiAKLSAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjb21iaW5lZFRyYW5zZm9y
bSA9IHBhcmVudE1hdHJpeDsKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjb21iaW5lZFRy
YW5zZm9ybTsKKyAgICBpZiAobGF5ZXItPmZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0
KCkpIHsKKyAgICAgICAgLy8gU3BlY2lhbCBjYXNlOiB0aGlzIGxheWVyIGlzIGEgY29tcG9zaXRl
ZCBmaXhlZC1wb3NpdGlvbiBlbGVtZW50OyB3ZSBuZWVkIHRvCisgICAgICAgIC8vIGV4cGxpY2l0
bHkgY29tcGVuc2F0ZSBmb3IgdGhlIGNvbnRhaW5lcidzIHNjcm9sbERlbHRhIHRvIGtlZXAgaXQg
Zml4ZWQgY29ycmVjdGx5LgorICAgICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0b3RhbFNj
cm9sbENvbXBlbnNhdGlvbiA9IGNvbXB1dGVUb3RhbFNjcm9sbENvbXBlbnNhdGlvbkZvckZpeGVk
UG9zaXRpb25MYXllcihsYXllcik7CisgICAgICAgIGNvbWJpbmVkVHJhbnNmb3JtID0gdG90YWxT
Y3JvbGxDb21wZW5zYXRpb24gKiBwYXJlbnRNYXRyaXg7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
Ly8gQ29tbW9uIGNhc2U6IGxheWVyIGlzIG5vdCBmaXhlZCBwb3NpdGlvbi4KKyAgICAgICAgY29t
YmluZWRUcmFuc2Zvcm0gPSBwYXJlbnRNYXRyaXg7CisgICAgfQorCiAgICAgY29tYmluZWRUcmFu
c2Zvcm0ubXVsdGlwbHkobGF5ZXJMb2NhbFRyYW5zZm9ybSk7CiAKICAgICBib29sIGFuaW1hdGlu
Z1RyYW5zZm9ybVRvVGFyZ2V0ID0gbGF5ZXItPnRyYW5zZm9ybUlzQW5pbWF0aW5nKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1v
blRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RD
b21tb25UZXN0LmNwcAppbmRleCAxZDA2OWE1YmUzYWI1NDlmMGRmMTg2MTkyZGJiZWU5OTU2Yzgz
ZTE4Li42N2M3MWMwNDM1NmY5MDg0OGQ4MWFkYWMyMjA5OWIxMmZlNDFlODMzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29t
bW9uVGVzdC5jcHAKQEAgLTQ4LDcgKzQ4LDggQEAgdXNpbmcgV2ViS2l0OjpXZWJUcmFuc2Zvcm1h
dGlvbk1hdHJpeDsKIAogbmFtZXNwYWNlIHsKIAotdm9pZCBzZXRMYXllclByb3BlcnRpZXNGb3JU
ZXN0aW5nKExheWVyQ2hyb21pdW0qIGxheWVyLCBjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgdHJhbnNmb3JtLCBjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgc3VibGF5ZXJUcmFu
c2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvciwgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRp
b24sIGNvbnN0IEludFNpemUmIGJvdW5kcywgYm9vbCBwcmVzZXJ2ZXMzRCkKK3RlbXBsYXRlPHR5
cGVuYW1lIExheWVyVHlwZT4KK3ZvaWQgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhMYXll
clR5cGUqIGxheWVyLCBjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBj
b25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgc3VibGF5ZXJUcmFuc2Zvcm0sIGNvbnN0IEZs
b2F0UG9pbnQmIGFuY2hvciwgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24sIGNvbnN0IEludFNp
emUmIGJvdW5kcywgYm9vbCBwcmVzZXJ2ZXMzRCkKIHsKICAgICBsYXllci0+c2V0VHJhbnNmb3Jt
KHRyYW5zZm9ybSk7CiAgICAgbGF5ZXItPnNldFN1YmxheWVyVHJhbnNmb3JtKHN1YmxheWVyVHJh
bnNmb3JtKTsKQEAgLTU4LDYgKzU5LDE2IEBAIHZvaWQgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVz
dGluZyhMYXllckNocm9taXVtKiBsYXllciwgY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NCiAgICAg
bGF5ZXItPnNldFByZXNlcnZlczNEKHByZXNlcnZlczNEKTsKIH0KIAordm9pZCBzZXRMYXllclBy
b3BlcnRpZXNGb3JUZXN0aW5nKExheWVyQ2hyb21pdW0qIGxheWVyLCBjb25zdCBXZWJUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
c3VibGF5ZXJUcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvciwgY29uc3QgRmxvYXRQ
b2ludCYgcG9zaXRpb24sIGNvbnN0IEludFNpemUmIGJvdW5kcywgYm9vbCBwcmVzZXJ2ZXMzRCkK
K3sKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nPExheWVyQ2hyb21pdW0+KGxheWVy
LCB0cmFuc2Zvcm0sIHN1YmxheWVyVHJhbnNmb3JtLCBhbmNob3IsIHBvc2l0aW9uLCBib3VuZHMs
IHByZXNlcnZlczNEKTsKK30KKwordm9pZCBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKEND
TGF5ZXJJbXBsKiBsYXllciwgY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9y
bSwgY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHN1YmxheWVyVHJhbnNmb3JtLCBjb25z
dCBGbG9hdFBvaW50JiBhbmNob3IsIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBJ
bnRTaXplJiBib3VuZHMsIGJvb2wgcHJlc2VydmVzM0QpCit7CisgICAgc2V0TGF5ZXJQcm9wZXJ0
aWVzRm9yVGVzdGluZzxDQ0xheWVySW1wbD4obGF5ZXIsIHRyYW5zZm9ybSwgc3VibGF5ZXJUcmFu
c2Zvcm0sIGFuY2hvciwgcG9zaXRpb24sIGJvdW5kcywgcHJlc2VydmVzM0QpOworfQorCiB2b2lk
IGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkoTGF5ZXJDaHJvbWl1
bSogcm9vdExheWVyKQogewogICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0
cml4OwpAQCAtNjgsNiArNzksMTcgQEAgdm9pZCBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9y
bXNBbmRWaXNpYmlsaXR5KExheWVyQ2hyb21pdW0qIHJvb3RMYXllcikKICAgICBDQ0xheWVyVHJl
ZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMoZHVtbXlSZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0LCByb290TGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3Qo
KSk7CiB9CiAKK3ZvaWQgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0
eShDQ0xheWVySW1wbCogcm9vdExheWVyKQoreworICAgIC8vIE5vdGU6IHRoaXMgdmVyc2lvbiBz
a2lwcyBsYXllciBzb3J0aW5nLgorICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5
TWF0cml4OworICAgIFZlY3RvcjxDQ0xheWVySW1wbCo+IGR1bW15UmVuZGVyU3VyZmFjZUxheWVy
TGlzdDsKKyAgICBWZWN0b3I8Q0NMYXllckltcGwqPiBkdW1teUxheWVyTGlzdDsKKyAgICBpbnQg
ZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNh
bGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHJvb3RMYXllciwgcm9vdExheWVyLCBpZGVudGl0eU1hdHJp
eCwgaWRlbnRpdHlNYXRyaXgsIGR1bW15UmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXll
ckxpc3QsIDAsIGR1bW15TWF4VGV4dHVyZVNpemUpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1v
bjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhkdW1teVJlbmRlclN1cmZhY2VMYXll
ckxpc3QsIHJvb3RMYXllci0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgpKTsKK30KKwog
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggcmVtb3ZlM0RDb21wb25lbnRPZk1hdHJpeChjb25zdCBX
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0KQogewogICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0
cml4IHJldCA9IG1hdDsKQEAgLTgxLDYgKzEwMywzMCBAQCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJp
eCByZW1vdmUzRENvbXBvbmVudE9mTWF0cml4KGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4
JgogICAgIHJldHVybiByZXQ7CiB9CiAKK1Bhc3NPd25QdHI8Q0NMYXllckltcGw+IGNyZWF0ZVRy
ZWVGb3JGaXhlZFBvc2l0aW9uVGVzdHMoKQoreworICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9v
dCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMSk7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBjaGls
ZCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMik7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBncmFu
ZENoaWxkID0gQ0NMYXllckltcGw6OmNyZWF0ZSgzKTsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+
IGdyZWF0R3JhbmRDaGlsZCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoNCk7CisKKyAgICBXZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBJZGVudGl0eU1hdHJpeDsKKyAgICBGbG9hdFBvaW50IGFuY2hvcigw
LCAwKTsKKyAgICBGbG9hdFBvaW50IHBvc2l0aW9uKDAsIDApOworICAgIEludFNpemUgYm91bmRz
KDEwMCwgMTAwKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHJvb3QuZ2V0KCks
IElkZW50aXR5TWF0cml4LCBJZGVudGl0eU1hdHJpeCwgYW5jaG9yLCBwb3NpdGlvbiwgYm91bmRz
LCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhjaGlsZC5nZXQoKSwg
SWRlbnRpdHlNYXRyaXgsIElkZW50aXR5TWF0cml4LCBhbmNob3IsIHBvc2l0aW9uLCBib3VuZHMs
IGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGdyYW5kQ2hpbGQuZ2V0
KCksIElkZW50aXR5TWF0cml4LCBJZGVudGl0eU1hdHJpeCwgYW5jaG9yLCBwb3NpdGlvbiwgYm91
bmRzLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhncmVhdEdyYW5k
Q2hpbGQuZ2V0KCksIElkZW50aXR5TWF0cml4LCBJZGVudGl0eU1hdHJpeCwgYW5jaG9yLCBwb3Np
dGlvbiwgYm91bmRzLCBmYWxzZSk7CisKKyAgICBncmFuZENoaWxkLT5hZGRDaGlsZChncmVhdEdy
YW5kQ2hpbGQucmVsZWFzZSgpKTsKKyAgICBjaGlsZC0+YWRkQ2hpbGQoZ3JhbmRDaGlsZC5yZWxl
YXNlKCkpOworICAgIHJvb3QtPmFkZENoaWxkKGNoaWxkLnJlbGVhc2UoKSk7CisgICAgcm9vdC0+
Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworCisgICAgcmV0dXJuIHJvb3QucmVsZWFzZSgpOworfQor
CiBjbGFzcyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCA6IHB1YmxpYyBMYXll
ckNocm9taXVtIHsKIHB1YmxpYzoKICAgICBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29u
dGVudCgpCkBAIC0xMTc2LDYgKzEyMjIsNDg3IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9u
VGVzdCwgdmVyaWZ5Rm9yY2VSZW5kZXJTdXJmYWNlKQogICAgIEVYUEVDVF9FUShyZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LnNpemUoKSwgMFUpOwogfQogCitURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1v
blRlc3QsIHZlcmlmeVNjcm9sbENvbXBlbnNhdGlvbkZvckZpeGVkUG9zaXRpb25MYXllcldpdGhE
aXJlY3RDb250YWluZXIpCit7CisgICAgLy8gVGhpcyB0ZXN0IGNoZWNrcyBmb3IgY29ycmVjdCBz
Y3JvbGwgY29tcGVuc2F0aW9uIHdoZW4gdGhlIGZpeGVkLXBvc2l0aW9uIGNvbnRhaW5lcgorICAg
IC8vIGlzIHRoZSBkaXJlY3QgcGFyZW50IG9mIHRoZSBmaXhlZC1wb3NpdGlvbiBsYXllci4KKwor
ICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBzY29wZWRJbXBsVGhyZWFkOworICAgIE93blB0
cjxDQ0xheWVySW1wbD4gcm9vdCA9IGNyZWF0ZVRyZWVGb3JGaXhlZFBvc2l0aW9uVGVzdHMoKTsK
KyAgICBDQ0xheWVySW1wbCogY2hpbGQgPSByb290LT5jaGlsZHJlbigpWzBdLmdldCgpOworICAg
IENDTGF5ZXJJbXBsKiBncmFuZENoaWxkID0gY2hpbGQtPmNoaWxkcmVuKClbMF0uZ2V0KCk7CisK
KyAgICBjaGlsZC0+c2V0SXNDb250YWluZXJGb3JGaXhlZFBvc2l0aW9uTGF5ZXJzKHRydWUpOwor
ICAgIGdyYW5kQ2hpbGQtPnNldEZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0KHRydWUp
OworCisgICAgLy8gQ2FzZSAxOiBzY3JvbGxEZWx0YSBvZiAwLCAwCisgICAgY2hpbGQtPnNldFNj
cm9sbERlbHRhKEludFNpemUoMCwgMCkpOworICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNm
b3Jtc0FuZFZpc2liaWxpdHkocm9vdC5nZXQoKSk7CisKKyAgICAvLyBUaGUgZXhwZWN0ZWQgZHJh
d1RyYW5zZm9ybXMgd2l0aG91dCBhbnkgc2Nyb2xsIHNob3VsZCBzdGlsbCBpbmNsdWRlIGEgdHJh
bnNsYXRpb24gdG8gdGhlIGNlbnRlciBvZiB0aGUgbGF5ZXIgKGkuZS4gdHJhbnNsYXRpb24gYnkg
NTAsIDUwKS4KKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBleHBlY3RlZENoaWxkVHJhbnNm
b3JtOworICAgIGV4cGVjdGVkQ2hpbGRUcmFuc2Zvcm0udHJhbnNsYXRlKDUwLCA1MCk7CisKKyAg
ICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBleHBlY3RlZEdyYW5kQ2hpbGRUcmFuc2Zvcm0gPSBl
eHBlY3RlZENoaWxkVHJhbnNmb3JtOworCisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJ
WF9FUShleHBlY3RlZENoaWxkVHJhbnNmb3JtLCBjaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAg
ICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVkR3JhbmRDaGlsZFRyYW5z
Zm9ybSwgZ3JhbmRDaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKworICAgIC8vIENhc2UgMjogc2Ny
b2xsRGVsdGEgb2YgMTAsIDEwCisgICAgY2hpbGQtPnNldFNjcm9sbERlbHRhKEludFNpemUoMTAs
IDEwKSk7CisgICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShy
b290LmdldCgpKTsKKworICAgIC8vIEhlcmUgdGhlIGNoaWxkIGlzIGFmZmVjdGVkIGJ5IHNjcm9s
bERlbHRhLCBidXQgdGhlIGZpeGVkIHBvc2l0aW9uIGdyYW5kQ2hpbGQgc2hvdWxkIG5vdCBiZSBh
ZmZlY3RlZC4KKyAgICBleHBlY3RlZENoaWxkVHJhbnNmb3JtLm1ha2VJZGVudGl0eSgpOworICAg
IGV4cGVjdGVkQ2hpbGRUcmFuc2Zvcm0udHJhbnNsYXRlKDQwLCA0MCk7CisKKyAgICBFWFBFQ1Rf
VFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVkQ2hpbGRUcmFuc2Zvcm0sIGNoaWxkLT5k
cmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhw
ZWN0ZWRHcmFuZENoaWxkVHJhbnNmb3JtLCBncmFuZENoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOwor
fQorCitURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVNjcm9sbENvbXBlbnNh
dGlvbkZvckZpeGVkUG9zaXRpb25MYXllcldpdGhUcmFuc2Zvcm1lZERpcmVjdENvbnRhaW5lcikK
K3sKKyAgICAvLyBUaGlzIHRlc3QgY2hlY2tzIGZvciBjb3JyZWN0IHNjcm9sbCBjb21wZW5zYXRp
b24gd2hlbiB0aGUgZml4ZWQtcG9zaXRpb24gY29udGFpbmVyCisgICAgLy8gaXMgdGhlIGRpcmVj
dCBwYXJlbnQgb2YgdGhlIGZpeGVkLXBvc2l0aW9uIGxheWVyLCBidXQgdGhhdCBjb250YWluZXIg
aXMgdHJhbnNmb3JtZWQuCisgICAgLy8gSW4gdGhpcyBjYXNlLCB0aGUgZml4ZWQgcG9zaXRpb24g
ZWxlbWVudCBpbmhlcml0cyB0aGUgY29udGFpbmVyJ3MgdHJhbnNmb3JtLAorICAgIC8vIGJ1dCB0
aGUgc2Nyb2xsRGVsdGEgdGhhdCBoYXMgdG8gYmUgdW5kb25lIHNob3VsZCBub3QgYmUgYWZmZWN0
ZWQgYnkgdGhhdCB0cmFuc2Zvcm0uCisgICAgLy8KKyAgICAvLyBUcmFuc2Zvcm1zIGFyZSBpbiBn
ZW5lcmFsIG5vbi1jb21tdXRhdGl2ZTsgdXNpbmcgc29tZXRoaW5nIGxpa2UgYSBub24tdW5pZm9y
bSBzY2FsZQorICAgIC8vIGhlbHBzIHRvIHZlcmlmeSB0aGF0IHRyYW5zbGF0aW9ucyBhbmQgbm9u
LXVuaWZvcm0gc2NhbGVzIGFyZSBhcHBsaWVkIGluIHRoZSBjb3JyZWN0CisgICAgLy8gb3JkZXIu
CisKKyAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgc2NvcGVkSW1wbFRocmVhZDsKKyAgICBP
d25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBjcmVhdGVUcmVlRm9yRml4ZWRQb3NpdGlvblRlc3Rz
KCk7CisgICAgQ0NMYXllckltcGwqIGNoaWxkID0gcm9vdC0+Y2hpbGRyZW4oKVswXS5nZXQoKTsK
KyAgICBDQ0xheWVySW1wbCogZ3JhbmRDaGlsZCA9IGNoaWxkLT5jaGlsZHJlbigpWzBdLmdldCgp
OworCisgICAgLy8gVGhpcyBzY2FsZSB3aWxsIGNhdXNlIGNoaWxkIGFuZCBncmFuZENoaWxkIHRv
IGJlIGVmZmVjdGl2ZWx5IDIwMCB4IDgwMCB3aXRoIHJlc3BlY3QgdG8gdGhlIHRhcmdldFJlbmRl
clN1cmZhY2UuCisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggbm9uVW5pZm9ybVNjYWxlOwor
ICAgIG5vblVuaWZvcm1TY2FsZS5zY2FsZU5vblVuaWZvcm0oMiwgOCk7CisgICAgY2hpbGQtPnNl
dFRyYW5zZm9ybShub25Vbmlmb3JtU2NhbGUpOworCisgICAgY2hpbGQtPnNldElzQ29udGFpbmVy
Rm9yRml4ZWRQb3NpdGlvbkxheWVycyh0cnVlKTsKKyAgICBncmFuZENoaWxkLT5zZXRGaXhlZFRv
Q29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdCh0cnVlKTsKKworICAgIC8vIENhc2UgMTogc2Nyb2xs
RGVsdGEgb2YgMCwgMAorICAgIGNoaWxkLT5zZXRTY3JvbGxEZWx0YShJbnRTaXplKDAsIDApKTsK
KyAgICBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3QuZ2V0
KCkpOworCisgICAgLy8gVGhlIGV4cGVjdGVkIGRyYXdUcmFuc2Zvcm1zIHdpdGhvdXQgYW55IHNj
cm9sbCBzaG91bGQgc3RpbGwgaW5jbHVkZSBhIHRyYW5zbGF0aW9uIHRvIHRoZSBjZW50ZXIgb2Yg
dGhlIGxheWVyIChpLmUuIHRyYW5zbGF0aW9uIGJ5IDUwLCA1MCkuCisgICAgV2ViVHJhbnNmb3Jt
YXRpb25NYXRyaXggZXhwZWN0ZWRDaGlsZFRyYW5zZm9ybTsKKyAgICBleHBlY3RlZENoaWxkVHJh
bnNmb3JtLm11bHRpcGx5KG5vblVuaWZvcm1TY2FsZSk7CisgICAgZXhwZWN0ZWRDaGlsZFRyYW5z
Zm9ybS50cmFuc2xhdGUoNTAsIDUwKTsKKworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGV4
cGVjdGVkR3JhbmRDaGlsZFRyYW5zZm9ybSA9IGV4cGVjdGVkQ2hpbGRUcmFuc2Zvcm07CisKKyAg
ICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVkQ2hpbGRUcmFuc2Zvcm0s
IGNoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRS
SVhfRVEoZXhwZWN0ZWRHcmFuZENoaWxkVHJhbnNmb3JtLCBncmFuZENoaWxkLT5kcmF3VHJhbnNm
b3JtKCkpOworCisgICAgLy8gQ2FzZSAyOiBzY3JvbGxEZWx0YSBvZiAxMCwgMjAKKyAgICBjaGls
ZC0+c2V0U2Nyb2xsRGVsdGEoSW50U2l6ZSgxMCwgMjApKTsKKyAgICBleGVjdXRlQ2FsY3VsYXRl
RHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3QuZ2V0KCkpOworCisgICAgLy8gVGhlIGNo
aWxkIHNob3VsZCBiZSBhZmZlY3RlZCBieSBzY3JvbGxEZWx0YSwgYnV0IHRoZSBmaXhlZCBwb3Np
dGlvbiBncmFuZENoaWxkIHNob3VsZCBub3QgYmUgYWZmZWN0ZWQuCisgICAgZXhwZWN0ZWRDaGls
ZFRyYW5zZm9ybS5tYWtlSWRlbnRpdHkoKTsKKyAgICBleHBlY3RlZENoaWxkVHJhbnNmb3JtLnRy
YW5zbGF0ZSgtMTAsIC0yMCk7IC8vIHNjcm9sbERlbHRhCisgICAgZXhwZWN0ZWRDaGlsZFRyYW5z
Zm9ybS5tdWx0aXBseShub25Vbmlmb3JtU2NhbGUpOworICAgIGV4cGVjdGVkQ2hpbGRUcmFuc2Zv
cm0udHJhbnNsYXRlKDUwLCA1MCk7CisKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklY
X0VRKGV4cGVjdGVkQ2hpbGRUcmFuc2Zvcm0sIGNoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAg
IEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0ZWRHcmFuZENoaWxkVHJhbnNm
b3JtLCBncmFuZENoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworfQorCitURVNUKENDTGF5ZXJUcmVl
SG9zdENvbW1vblRlc3QsIHZlcmlmeVNjcm9sbENvbXBlbnNhdGlvbkZvckZpeGVkUG9zaXRpb25M
YXllcldpdGhEaXN0YW50Q29udGFpbmVyKQoreworICAgIC8vIFRoaXMgdGVzdCBjaGVja3MgZm9y
IGNvcnJlY3Qgc2Nyb2xsIGNvbXBlbnNhdGlvbiB3aGVuIHRoZSBmaXhlZC1wb3NpdGlvbiBjb250
YWluZXIKKyAgICAvLyBpcyBOT1QgdGhlIGRpcmVjdCBwYXJlbnQgb2YgdGhlIGZpeGVkLXBvc2l0
aW9uIGxheWVyLgorICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBzY29wZWRJbXBsVGhyZWFk
OworCisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gY3JlYXRlVHJlZUZvckZpeGVkUG9z
aXRpb25UZXN0cygpOworICAgIENDTGF5ZXJJbXBsKiBjaGlsZCA9IHJvb3QtPmNoaWxkcmVuKClb
MF0uZ2V0KCk7CisgICAgQ0NMYXllckltcGwqIGdyYW5kQ2hpbGQgPSBjaGlsZC0+Y2hpbGRyZW4o
KVswXS5nZXQoKTsKKyAgICBDQ0xheWVySW1wbCogZ3JlYXRHcmFuZENoaWxkID0gZ3JhbmRDaGls
ZC0+Y2hpbGRyZW4oKVswXS5nZXQoKTsKKworICAgIGNoaWxkLT5zZXRJc0NvbnRhaW5lckZvckZp
eGVkUG9zaXRpb25MYXllcnModHJ1ZSk7CisgICAgZ3JhbmRDaGlsZC0+c2V0UG9zaXRpb24oRmxv
YXRQb2ludCg4LCA2KSk7CisgICAgZ3JlYXRHcmFuZENoaWxkLT5zZXRGaXhlZFRvQ29udGFpbmVy
TGF5ZXJWaXNpYmxlUmVjdCh0cnVlKTsKKworICAgIC8vIENhc2UgMTogc2Nyb2xsRGVsdGEgb2Yg
MCwgMAorICAgIGNoaWxkLT5zZXRTY3JvbGxEZWx0YShJbnRTaXplKDAsIDApKTsKKyAgICBleGVj
dXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3QuZ2V0KCkpOworCisg
ICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggZXhwZWN0ZWRDaGlsZFRyYW5zZm9ybTsKKyAgICBl
eHBlY3RlZENoaWxkVHJhbnNmb3JtLnRyYW5zbGF0ZSg1MCwgNTApOworCisgICAgV2ViVHJhbnNm
b3JtYXRpb25NYXRyaXggZXhwZWN0ZWRHcmFuZENoaWxkVHJhbnNmb3JtOworICAgIGV4cGVjdGVk
R3JhbmRDaGlsZFRyYW5zZm9ybS50cmFuc2xhdGUoNTgsIDU2KTsKKworICAgIFdlYlRyYW5zZm9y
bWF0aW9uTWF0cml4IGV4cGVjdGVkR3JlYXRHcmFuZENoaWxkVHJhbnNmb3JtID0gZXhwZWN0ZWRH
cmFuZENoaWxkVHJhbnNmb3JtOworCisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9F
UShleHBlY3RlZENoaWxkVHJhbnNmb3JtLCBjaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBF
WFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVkR3JhbmRDaGlsZFRyYW5zZm9y
bSwgZ3JhbmRDaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJ
T05fTUFUUklYX0VRKGV4cGVjdGVkR3JlYXRHcmFuZENoaWxkVHJhbnNmb3JtLCBncmVhdEdyYW5k
Q2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisKKyAgICAvLyBDYXNlIDI6IHNjcm9sbERlbHRhIG9m
IDEwLCAxMAorICAgIGNoaWxkLT5zZXRTY3JvbGxEZWx0YShJbnRTaXplKDEwLCAxMCkpOworICAg
IGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocm9vdC5nZXQoKSk7
CisKKyAgICAvLyBIZXJlIHRoZSBjaGlsZCBhbmQgZ3JhbmRDaGlsZCBhcmUgYWZmZWN0ZWQgYnkg
c2Nyb2xsRGVsdGEsIGJ1dCB0aGUgZml4ZWQgcG9zaXRpb24gZ3JlYXRHcmFuZENoaWxkIHNob3Vs
ZCBub3QgYmUgYWZmZWN0ZWQuCisgICAgZXhwZWN0ZWRDaGlsZFRyYW5zZm9ybS5tYWtlSWRlbnRp
dHkoKTsKKyAgICBleHBlY3RlZENoaWxkVHJhbnNmb3JtLnRyYW5zbGF0ZSg0MCwgNDApOworICAg
IGV4cGVjdGVkR3JhbmRDaGlsZFRyYW5zZm9ybS5tYWtlSWRlbnRpdHkoKTsKKyAgICBleHBlY3Rl
ZEdyYW5kQ2hpbGRUcmFuc2Zvcm0udHJhbnNsYXRlKDQ4LCA0Nik7CisgICAgRVhQRUNUX1RSQU5T
Rk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZENoaWxkVHJhbnNmb3JtLCBjaGlsZC0+ZHJhd1Ry
YW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVk
R3JhbmRDaGlsZFRyYW5zZm9ybSwgZ3JhbmRDaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBF
WFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVkR3JlYXRHcmFuZENoaWxkVHJh
bnNmb3JtLCBncmVhdEdyYW5kQ2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7Cit9CisKK1RFU1QoQ0NM
YXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5U2Nyb2xsQ29tcGVuc2F0aW9uRm9yRml4ZWRQ
b3NpdGlvbkxheWVyV2l0aERpc3RhbnRDb250YWluZXJBbmRUcmFuc2Zvcm1zKQoreworICAgIC8v
IFRoaXMgdGVzdCBjaGVja3MgZm9yIGNvcnJlY3Qgc2Nyb2xsIGNvbXBlbnNhdGlvbiB3aGVuIHRo
ZSBmaXhlZC1wb3NpdGlvbiBjb250YWluZXIKKyAgICAvLyBpcyBOT1QgdGhlIGRpcmVjdCBwYXJl
bnQgb2YgdGhlIGZpeGVkLXBvc2l0aW9uIGxheWVyLCBhbmQgdGhlIGhpZXJhcmNoeSBoYXMgdmFy
aW91cworICAgIC8vIHRyYW5zZm9ybXMgdGhhdCBoYXZlIHRvIGJlIHByb2Nlc3NlZCBpbiB0aGUg
Y29ycmVjdCBvcmRlci4KKyAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgc2NvcGVkSW1wbFRo
cmVhZDsKKworICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IGNyZWF0ZVRyZWVGb3JGaXhl
ZFBvc2l0aW9uVGVzdHMoKTsKKyAgICBDQ0xheWVySW1wbCogY2hpbGQgPSByb290LT5jaGlsZHJl
bigpWzBdLmdldCgpOworICAgIENDTGF5ZXJJbXBsKiBncmFuZENoaWxkID0gY2hpbGQtPmNoaWxk
cmVuKClbMF0uZ2V0KCk7CisgICAgQ0NMYXllckltcGwqIGdyZWF0R3JhbmRDaGlsZCA9IGdyYW5k
Q2hpbGQtPmNoaWxkcmVuKClbMF0uZ2V0KCk7CisKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJp
eCByb3RhdGlvbkFib3V0WjsKKyAgICByb3RhdGlvbkFib3V0Wi5yb3RhdGUzZCgwLCAwLCA5MCk7
CisgICAgCisgICAgY2hpbGQtPnNldElzQ29udGFpbmVyRm9yRml4ZWRQb3NpdGlvbkxheWVycyh0
cnVlKTsKKyAgICBjaGlsZC0+c2V0VHJhbnNmb3JtKHJvdGF0aW9uQWJvdXRaKTsKKyAgICBncmFu
ZENoaWxkLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KDgsIDYpKTsKKyAgICBncmFuZENoaWxkLT5z
ZXRUcmFuc2Zvcm0ocm90YXRpb25BYm91dFopOworICAgIGdyZWF0R3JhbmRDaGlsZC0+c2V0Rml4
ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3QodHJ1ZSk7IC8vIGdyZWF0R3JhbmRDaGlsZCBp
cyBwb3NpdGlvbmVkIHVwc2lkZS1kb3duIHdpdGggcmVzcGVjdCB0byB0aGUgdGFyZ2V0UmVuZGVy
U3VyZmFjZQorCisgICAgLy8gQ2FzZSAxOiBzY3JvbGxEZWx0YSBvZiAwLCAwCisgICAgY2hpbGQt
PnNldFNjcm9sbERlbHRhKEludFNpemUoMCwgMCkpOworICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3
VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocm9vdC5nZXQoKSk7CisKKyAgICBXZWJUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBleHBlY3RlZENoaWxkVHJhbnNmb3JtOworICAgIGV4cGVjdGVkQ2hpbGRUcmFu
c2Zvcm0ubXVsdGlwbHkocm90YXRpb25BYm91dFopOworICAgIGV4cGVjdGVkQ2hpbGRUcmFuc2Zv
cm0udHJhbnNsYXRlKDUwLCA1MCk7CisKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBleHBl
Y3RlZEdyYW5kQ2hpbGRUcmFuc2Zvcm07CisgICAgZXhwZWN0ZWRHcmFuZENoaWxkVHJhbnNmb3Jt
Lm11bHRpcGx5KHJvdGF0aW9uQWJvdXRaKTsgLy8gY2hpbGQncyBsb2NhbCB0cmFuc2Zvcm0gaXMg
aW5oZXJpdGVkCisgICAgZXhwZWN0ZWRHcmFuZENoaWxkVHJhbnNmb3JtLnRyYW5zbGF0ZSg4LCA2
KTsgLy8gdHJhbnNsYXRpb24gYmVjYXVzZSBvZiBwb3NpdGlvbiBvY2N1cnMgYmVmb3JlIGxheWVy
J3MgbG9jYWwgdHJhbnNmb3JtLgorICAgIGV4cGVjdGVkR3JhbmRDaGlsZFRyYW5zZm9ybS5tdWx0
aXBseShyb3RhdGlvbkFib3V0Wik7IC8vIGdyYW5kQ2hpbGQncyBsb2NhbCB0cmFuc2Zvcm0KKyAg
ICBleHBlY3RlZEdyYW5kQ2hpbGRUcmFuc2Zvcm0udHJhbnNsYXRlKDUwLCA1MCk7IC8vIHRyYW5z
bGF0aW9uIGJlY2F1c2Ugb2YgaGFsZi13aWR0aCBoYWxmLWhlaWdodCBvY2N1cnMgYWZ0ZXIgbGF5
ZXIncyBsb2NhbCB0cmFuc2Zvcm0KKworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGV4cGVj
dGVkR3JlYXRHcmFuZENoaWxkVHJhbnNmb3JtID0gZXhwZWN0ZWRHcmFuZENoaWxkVHJhbnNmb3Jt
OworCisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZENoaWxkVHJh
bnNmb3JtLCBjaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJ
T05fTUFUUklYX0VRKGV4cGVjdGVkR3JhbmRDaGlsZFRyYW5zZm9ybSwgZ3JhbmRDaGlsZC0+ZHJh
d1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVj
dGVkR3JlYXRHcmFuZENoaWxkVHJhbnNmb3JtLCBncmVhdEdyYW5kQ2hpbGQtPmRyYXdUcmFuc2Zv
cm0oKSk7CisKKyAgICAvLyBDYXNlIDI6IHNjcm9sbERlbHRhIG9mIDEwLCAyMAorICAgIGNoaWxk
LT5zZXRTY3JvbGxEZWx0YShJbnRTaXplKDEwLCAyMCkpOworICAgIGV4ZWN1dGVDYWxjdWxhdGVE
cmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocm9vdC5nZXQoKSk7CisKKyAgICAvLyBIZXJlIHRo
ZSBjaGlsZCBhbmQgZ3JhbmRDaGlsZCBhcmUgYWZmZWN0ZWQgYnkgc2Nyb2xsRGVsdGEsIGJ1dCB0
aGUgZml4ZWQgcG9zaXRpb24gZ3JlYXRHcmFuZENoaWxkIHNob3VsZCBub3QgYmUgYWZmZWN0ZWQu
CisgICAgZXhwZWN0ZWRDaGlsZFRyYW5zZm9ybS5tYWtlSWRlbnRpdHkoKTsKKyAgICBleHBlY3Rl
ZENoaWxkVHJhbnNmb3JtLnRyYW5zbGF0ZSgtMTAsIC0yMCk7IC8vIHNjcm9sbERlbHRhCisgICAg
ZXhwZWN0ZWRDaGlsZFRyYW5zZm9ybS5tdWx0aXBseShyb3RhdGlvbkFib3V0Wik7CisgICAgZXhw
ZWN0ZWRDaGlsZFRyYW5zZm9ybS50cmFuc2xhdGUoNTAsIDUwKTsKKworICAgIGV4cGVjdGVkR3Jh
bmRDaGlsZFRyYW5zZm9ybS5tYWtlSWRlbnRpdHkoKTsKKyAgICBleHBlY3RlZEdyYW5kQ2hpbGRU
cmFuc2Zvcm0udHJhbnNsYXRlKC0xMCwgLTIwKTsgLy8gY2hpbGQncyBzY3JvbGxEZWx0YSBpcyBp
bmhlcml0ZWQKKyAgICBleHBlY3RlZEdyYW5kQ2hpbGRUcmFuc2Zvcm0ubXVsdGlwbHkocm90YXRp
b25BYm91dFopOyAvLyBjaGlsZCdzIGxvY2FsIHRyYW5zZm9ybSBpcyBpbmhlcml0ZWQKKyAgICBl
eHBlY3RlZEdyYW5kQ2hpbGRUcmFuc2Zvcm0udHJhbnNsYXRlKDgsIDYpOyAvLyB0cmFuc2xhdGlv
biBiZWNhdXNlIG9mIHBvc2l0aW9uIG9jY3VycyBiZWZvcmUgbGF5ZXIncyBsb2NhbCB0cmFuc2Zv
cm0uCisgICAgZXhwZWN0ZWRHcmFuZENoaWxkVHJhbnNmb3JtLm11bHRpcGx5KHJvdGF0aW9uQWJv
dXRaKTsgLy8gZ3JhbmRDaGlsZCdzIGxvY2FsIHRyYW5zZm9ybQorICAgIGV4cGVjdGVkR3JhbmRD
aGlsZFRyYW5zZm9ybS50cmFuc2xhdGUoNTAsIDUwKTsgLy8gdHJhbnNsYXRpb24gYmVjYXVzZSBv
ZiBoYWxmLXdpZHRoIGhhbGYtaGVpZ2h0IG9jY3VycyBhZnRlciBsYXllcidzIGxvY2FsIHRyYW5z
Zm9ybQorCisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZENoaWxk
VHJhbnNmb3JtLCBjaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JN
QVRJT05fTUFUUklYX0VRKGV4cGVjdGVkR3JhbmRDaGlsZFRyYW5zZm9ybSwgZ3JhbmRDaGlsZC0+
ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4
cGVjdGVkR3JlYXRHcmFuZENoaWxkVHJhbnNmb3JtLCBncmVhdEdyYW5kQ2hpbGQtPmRyYXdUcmFu
c2Zvcm0oKSk7Cit9CisKK1RFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5U2Ny
b2xsQ29tcGVuc2F0aW9uRm9yRml4ZWRQb3NpdGlvbkxheWVyV2l0aE11bHRpcGxlU2Nyb2xsRGVs
dGFzKQoreworICAgIC8vIFRoaXMgdGVzdCBjaGVja3MgZm9yIGNvcnJlY3Qgc2Nyb2xsIGNvbXBl
bnNhdGlvbiB3aGVuIHRoZSBmaXhlZC1wb3NpdGlvbiBjb250YWluZXIKKyAgICAvLyBoYXMgbXVs
dGlwbGUgYW5jZXN0b3JzIHRoYXQgaGF2ZSBub256ZXJvIHNjcm9sbERlbHRhIGJlZm9yZSByZWFj
aGluZyB0aGUgc3BhY2Ugd2hlcmUgdGhlIGxheWVyIGlzIGZpeGVkLgorICAgIC8vIEluIHRoaXMg
dGVzdCwgZWFjaCBzY3JvbGxEZWx0YSBvY2N1cnMgaW4gYSBkaWZmZXJlbnQgc3BhY2UgYmVjYXVz
ZSBvZiBlYWNoIGxheWVyJ3MgbG9jYWwgdHJhbnNmb3JtLgorICAgIC8vIFRoaXMgdGVzdCBjaGVj
a3MgZm9yIGNvcnJlY3Qgc2Nyb2xsIGNvbXBlbnNhdGlvbiB3aGVuIHRoZSBmaXhlZC1wb3NpdGlv
biBjb250YWluZXIKKyAgICAvLyBpcyBOT1QgdGhlIGRpcmVjdCBwYXJlbnQgb2YgdGhlIGZpeGVk
LXBvc2l0aW9uIGxheWVyLCBhbmQgdGhlIGhpZXJhcmNoeSBoYXMgdmFyaW91cworICAgIC8vIHRy
YW5zZm9ybXMgdGhhdCBoYXZlIHRvIGJlIHByb2Nlc3NlZCBpbiB0aGUgY29ycmVjdCBvcmRlci4K
KyAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgc2NvcGVkSW1wbFRocmVhZDsKKworICAgIE93
blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IGNyZWF0ZVRyZWVGb3JGaXhlZFBvc2l0aW9uVGVzdHMo
KTsKKyAgICBDQ0xheWVySW1wbCogY2hpbGQgPSByb290LT5jaGlsZHJlbigpWzBdLmdldCgpOwor
ICAgIENDTGF5ZXJJbXBsKiBncmFuZENoaWxkID0gY2hpbGQtPmNoaWxkcmVuKClbMF0uZ2V0KCk7
CisgICAgQ0NMYXllckltcGwqIGdyZWF0R3JhbmRDaGlsZCA9IGdyYW5kQ2hpbGQtPmNoaWxkcmVu
KClbMF0uZ2V0KCk7CisKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCByb3RhdGlvbkFib3V0
WjsKKyAgICByb3RhdGlvbkFib3V0Wi5yb3RhdGUzZCgwLCAwLCA5MCk7CisgICAgCisgICAgY2hp
bGQtPnNldElzQ29udGFpbmVyRm9yRml4ZWRQb3NpdGlvbkxheWVycyh0cnVlKTsKKyAgICBjaGls
ZC0+c2V0VHJhbnNmb3JtKHJvdGF0aW9uQWJvdXRaKTsKKyAgICBncmFuZENoaWxkLT5zZXRQb3Np
dGlvbihGbG9hdFBvaW50KDgsIDYpKTsKKyAgICBncmFuZENoaWxkLT5zZXRUcmFuc2Zvcm0ocm90
YXRpb25BYm91dFopOworICAgIGdyZWF0R3JhbmRDaGlsZC0+c2V0Rml4ZWRUb0NvbnRhaW5lckxh
eWVyVmlzaWJsZVJlY3QodHJ1ZSk7IC8vIGdyZWF0R3JhbmRDaGlsZCBpcyBwb3NpdGlvbmVkIHVw
c2lkZS1kb3duIHdpdGggcmVzcGVjdCB0byB0aGUgdGFyZ2V0UmVuZGVyU3VyZmFjZQorCisgICAg
Ly8gQ2FzZSAxOiBzY3JvbGxEZWx0YSBvZiAwLCAwCisgICAgY2hpbGQtPnNldFNjcm9sbERlbHRh
KEludFNpemUoMCwgMCkpOworICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZp
c2liaWxpdHkocm9vdC5nZXQoKSk7CisKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBleHBl
Y3RlZENoaWxkVHJhbnNmb3JtOworICAgIGV4cGVjdGVkQ2hpbGRUcmFuc2Zvcm0ubXVsdGlwbHko
cm90YXRpb25BYm91dFopOworICAgIGV4cGVjdGVkQ2hpbGRUcmFuc2Zvcm0udHJhbnNsYXRlKDUw
LCA1MCk7CisKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBleHBlY3RlZEdyYW5kQ2hpbGRU
cmFuc2Zvcm07CisgICAgZXhwZWN0ZWRHcmFuZENoaWxkVHJhbnNmb3JtLm11bHRpcGx5KHJvdGF0
aW9uQWJvdXRaKTsgLy8gY2hpbGQncyBsb2NhbCB0cmFuc2Zvcm0gaXMgaW5oZXJpdGVkCisgICAg
ZXhwZWN0ZWRHcmFuZENoaWxkVHJhbnNmb3JtLnRyYW5zbGF0ZSg4LCA2KTsgLy8gdHJhbnNsYXRp
b24gYmVjYXVzZSBvZiBwb3NpdGlvbiBvY2N1cnMgYmVmb3JlIGxheWVyJ3MgbG9jYWwgdHJhbnNm
b3JtLgorICAgIGV4cGVjdGVkR3JhbmRDaGlsZFRyYW5zZm9ybS5tdWx0aXBseShyb3RhdGlvbkFi
b3V0Wik7IC8vIGdyYW5kQ2hpbGQncyBsb2NhbCB0cmFuc2Zvcm0KKyAgICBleHBlY3RlZEdyYW5k
Q2hpbGRUcmFuc2Zvcm0udHJhbnNsYXRlKDUwLCA1MCk7IC8vIHRyYW5zbGF0aW9uIGJlY2F1c2Ug
b2YgaGFsZi13aWR0aCBoYWxmLWhlaWdodCBvY2N1cnMgYWZ0ZXIgbGF5ZXIncyBsb2NhbCB0cmFu
c2Zvcm0KKworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGV4cGVjdGVkR3JlYXRHcmFuZENo
aWxkVHJhbnNmb3JtID0gZXhwZWN0ZWRHcmFuZENoaWxkVHJhbnNmb3JtOworCisgICAgRVhQRUNU
X1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZENoaWxkVHJhbnNmb3JtLCBjaGlsZC0+
ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4
cGVjdGVkR3JhbmRDaGlsZFRyYW5zZm9ybSwgZ3JhbmRDaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsK
KyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVkR3JlYXRHcmFuZENo
aWxkVHJhbnNmb3JtLCBncmVhdEdyYW5kQ2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisKKyAgICAv
LyBDYXNlIDI6IHNjcm9sbERlbHRhIG9mIDEwLCAyMAorICAgIGNoaWxkLT5zZXRTY3JvbGxEZWx0
YShJbnRTaXplKDEwLCAwKSk7CisgICAgZ3JhbmRDaGlsZC0+c2V0U2Nyb2xsRGVsdGEoSW50U2l6
ZSg1LCAwKSk7CisgICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0
eShyb290LmdldCgpKTsKKworICAgIC8vIEhlcmUgdGhlIGNoaWxkIGFuZCBncmFuZENoaWxkIGFy
ZSBhZmZlY3RlZCBieSBzY3JvbGxEZWx0YSwgYnV0IHRoZSBmaXhlZCBwb3NpdGlvbiBncmVhdEdy
YW5kQ2hpbGQgc2hvdWxkIG5vdCBiZSBhZmZlY3RlZC4KKyAgICBleHBlY3RlZENoaWxkVHJhbnNm
b3JtLm1ha2VJZGVudGl0eSgpOworICAgIGV4cGVjdGVkQ2hpbGRUcmFuc2Zvcm0udHJhbnNsYXRl
KC0xMCwgMCk7IC8vIHNjcm9sbERlbHRhCisgICAgZXhwZWN0ZWRDaGlsZFRyYW5zZm9ybS5tdWx0
aXBseShyb3RhdGlvbkFib3V0Wik7CisgICAgZXhwZWN0ZWRDaGlsZFRyYW5zZm9ybS50cmFuc2xh
dGUoNTAsIDUwKTsKKworICAgIGV4cGVjdGVkR3JhbmRDaGlsZFRyYW5zZm9ybS5tYWtlSWRlbnRp
dHkoKTsKKyAgICBleHBlY3RlZEdyYW5kQ2hpbGRUcmFuc2Zvcm0udHJhbnNsYXRlKC0xMCwgMCk7
IC8vIGNoaWxkJ3Mgc2Nyb2xsRGVsdGEgaXMgaW5oZXJpdGVkCisgICAgZXhwZWN0ZWRHcmFuZENo
aWxkVHJhbnNmb3JtLm11bHRpcGx5KHJvdGF0aW9uQWJvdXRaKTsgLy8gY2hpbGQncyBsb2NhbCB0
cmFuc2Zvcm0gaXMgaW5oZXJpdGVkCisgICAgZXhwZWN0ZWRHcmFuZENoaWxkVHJhbnNmb3JtLnRy
YW5zbGF0ZSgtNSwgMCk7IC8vIGdyYW5kQ2hpbGQncyBzY3JvbGxEZWx0YQorICAgIGV4cGVjdGVk
R3JhbmRDaGlsZFRyYW5zZm9ybS50cmFuc2xhdGUoOCwgNik7IC8vIHRyYW5zbGF0aW9uIGJlY2F1
c2Ugb2YgcG9zaXRpb24gb2NjdXJzIGJlZm9yZSBsYXllcidzIGxvY2FsIHRyYW5zZm9ybS4KKyAg
ICBleHBlY3RlZEdyYW5kQ2hpbGRUcmFuc2Zvcm0ubXVsdGlwbHkocm90YXRpb25BYm91dFopOyAv
LyBncmFuZENoaWxkJ3MgbG9jYWwgdHJhbnNmb3JtCisgICAgZXhwZWN0ZWRHcmFuZENoaWxkVHJh
bnNmb3JtLnRyYW5zbGF0ZSg1MCwgNTApOyAvLyB0cmFuc2xhdGlvbiBiZWNhdXNlIG9mIGhhbGYt
d2lkdGggaGFsZi1oZWlnaHQgb2NjdXJzIGFmdGVyIGxheWVyJ3MgbG9jYWwgdHJhbnNmb3JtCisK
KyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVkQ2hpbGRUcmFuc2Zv
cm0sIGNoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9N
QVRSSVhfRVEoZXhwZWN0ZWRHcmFuZENoaWxkVHJhbnNmb3JtLCBncmFuZENoaWxkLT5kcmF3VHJh
bnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0ZWRH
cmVhdEdyYW5kQ2hpbGRUcmFuc2Zvcm0sIGdyZWF0R3JhbmRDaGlsZC0+ZHJhd1RyYW5zZm9ybSgp
KTsKK30KKworVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlTY3JvbGxDb21w
ZW5zYXRpb25Gb3JGaXhlZFBvc2l0aW9uTGF5ZXJXaXRoSW50ZXJtZWRpYXRlU3VyZmFjZUFuZFRy
YW5zZm9ybXMpCit7CisgICAgLy8gVGhpcyB0ZXN0IGNoZWNrcyBmb3IgY29ycmVjdCBzY3JvbGwg
Y29tcGVuc2F0aW9uIHdoZW4gdGhlIGZpeGVkLXBvc2l0aW9uIGNvbnRhaW5lcgorICAgIC8vIGNv
bnRyaWJ1dGVzIHRvIGEgZGlmZmVyZW50IHJlbmRlclN1cmZhY2UgdGhhbiB0aGUgZml4ZWQtcG9z
aXRpb24gbGF5ZXIuIEluIHRoaXMKKyAgICAvLyBjYXNlLCB0aGUgc3VyZmFjZSBvcmlnaW5UcmFu
c2Zvcm1zIGFsc28gaGF2ZSB0byBiZSBhY2NvdW50ZWQgZm9yIHdoZW4gY2hlY2tpbmcgdGhlCisg
ICAgLy8gc2Nyb2xsRGVsdGEuCisgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIHNjb3BlZElt
cGxUaHJlYWQ7CisKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBjcmVhdGVUcmVlRm9y
Rml4ZWRQb3NpdGlvblRlc3RzKCk7CisgICAgQ0NMYXllckltcGwqIGNoaWxkID0gcm9vdC0+Y2hp
bGRyZW4oKVswXS5nZXQoKTsKKyAgICBDQ0xheWVySW1wbCogZ3JhbmRDaGlsZCA9IGNoaWxkLT5j
aGlsZHJlbigpWzBdLmdldCgpOworICAgIENDTGF5ZXJJbXBsKiBncmVhdEdyYW5kQ2hpbGQgPSBn
cmFuZENoaWxkLT5jaGlsZHJlbigpWzBdLmdldCgpOworCisgICAgY2hpbGQtPnNldElzQ29udGFp
bmVyRm9yRml4ZWRQb3NpdGlvbkxheWVycyh0cnVlKTsKKyAgICBncmFuZENoaWxkLT5zZXRQb3Np
dGlvbihGbG9hdFBvaW50KDgsIDYpKTsKKyAgICBncmFuZENoaWxkLT5zZXRGb3JjZVJlbmRlclN1
cmZhY2UodHJ1ZSk7CisgICAgZ3JlYXRHcmFuZENoaWxkLT5zZXRGaXhlZFRvQ29udGFpbmVyTGF5
ZXJWaXNpYmxlUmVjdCh0cnVlKTsKKyAgICBncmVhdEdyYW5kQ2hpbGQtPnNldERyYXdzQ29udGVu
dCh0cnVlKTsKKworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHJvdGF0aW9uQWJvdXRaOwor
ICAgIHJvdGF0aW9uQWJvdXRaLnJvdGF0ZTNkKDAsIDAsIDkwKTsKKyAgICBncmFuZENoaWxkLT5z
ZXRUcmFuc2Zvcm0ocm90YXRpb25BYm91dFopOworICAgIAorICAgIC8vIENhc2UgMTogc2Nyb2xs
RGVsdGEgb2YgMCwgMAorICAgIGNoaWxkLT5zZXRTY3JvbGxEZWx0YShJbnRTaXplKDAsIDApKTsK
KyAgICBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3QuZ2V0
KCkpOworICAgICAgICAKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBleHBlY3RlZENoaWxk
VHJhbnNmb3JtOworICAgIGV4cGVjdGVkQ2hpbGRUcmFuc2Zvcm0udHJhbnNsYXRlKDUwLCA1MCk7
CisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggZXhwZWN0ZWRTdXJmYWNlT3JpZ2luVHJhbnNm
b3JtOworICAgIGV4cGVjdGVkU3VyZmFjZU9yaWdpblRyYW5zZm9ybS50cmFuc2xhdGUoOCwgNik7
CisgICAgZXhwZWN0ZWRTdXJmYWNlT3JpZ2luVHJhbnNmb3JtLm11bHRpcGx5KHJvdGF0aW9uQWJv
dXRaKTsKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBleHBlY3RlZEdyYW5kQ2hpbGRUcmFu
c2Zvcm07CisgICAgZXhwZWN0ZWRHcmFuZENoaWxkVHJhbnNmb3JtLnRyYW5zbGF0ZSg1MCwgNTAp
OworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGV4cGVjdGVkR3JlYXRHcmFuZENoaWxkVHJh
bnNmb3JtOworICAgIGV4cGVjdGVkR3JlYXRHcmFuZENoaWxkVHJhbnNmb3JtLnRyYW5zbGF0ZSg1
MCwgNTApOworICAgIEFTU0VSVF9UUlVFKGdyYW5kQ2hpbGQtPnJlbmRlclN1cmZhY2UoKSk7Cisg
ICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZENoaWxkVHJhbnNmb3Jt
LCBjaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFU
UklYX0VRKGV4cGVjdGVkU3VyZmFjZU9yaWdpblRyYW5zZm9ybSwgZ3JhbmRDaGlsZC0+cmVuZGVy
U3VyZmFjZSgpLT5vcmlnaW5UcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9O
X01BVFJJWF9FUShleHBlY3RlZEdyYW5kQ2hpbGRUcmFuc2Zvcm0sIGdyYW5kQ2hpbGQtPmRyYXdU
cmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3Rl
ZEdyZWF0R3JhbmRDaGlsZFRyYW5zZm9ybSwgZ3JlYXRHcmFuZENoaWxkLT5kcmF3VHJhbnNmb3Jt
KCkpOworCisgICAgLy8gQ2FzZSAyOiBzY3JvbGxEZWx0YSBvZiAxMCwgMzAKKyAgICBjaGlsZC0+
c2V0U2Nyb2xsRGVsdGEoSW50U2l6ZSgxMCwgMzApKTsKKyAgICBleGVjdXRlQ2FsY3VsYXRlRHJh
d1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3QuZ2V0KCkpOworICAgICAgICAKKyAgICAvLyBI
ZXJlIHRoZSBncmFuZENoaWxkIHJlbWFpbnMgdW5jaGFuZ2VkLCBiZWNhdXNlIGl0IHNjcm9sbHMg
YWxvbmcgd2l0aCB0aGUKKyAgICAvLyByZW5kZXJTdXJmYWNlLCBhbmQgdGhlIHRyYW5zbGF0aW9u
IGlzIGFjdHVhbGx5IGluIHRoZSByZW5kZXJTdXJmYWNlLiBCdXQsIHRoZSBmaXhlZAorICAgIC8v
IHBvc2l0aW9uIGdyZWF0R3JhbmRDaGlsZCBpcyBtb3JlIGF3a3dhcmQ6IGl0cyBhY3R1YWxseSBi
ZWluZyBkcmF3biB3aXRoIHJlc3BlY3QgdG8KKyAgICAvLyB0aGUgcmVuZGVyU3VyZmFjZSwgYnV0
IGl0IG5lZWRzIHRvIHJlbWFpbiBmaXhlZCB3aXRoIHJlc2VwY3QgdG8gYSBjb250YWluZXIgYmV5
b25kCisgICAgLy8gdGhhdCBzdXJmYWNlLiBTbywgdGhlIG5ldCByZXN1bHQgaXMgdGhhdCwgdW5s
aWtlIHByZXZpb3VzIHRlc3RzIHdoZXJlIHRoZSBmaXhlZAorICAgIC8vIHBvc2l0aW9uIGxheWVy
J3MgdHJhbnNmb3JtIHJlbWFpbnMgdW5jaGFuZ2VkLCBoZXJlIHRoZSBmaXhlZCBwb3NpdGlvbiBs
YXllcidzCisgICAgLy8gdHJhbnNmb3JtIGV4cGxpY2l0bHkgY29udGFpbnMgdGhlIHRyYW5zbGF0
aW9uIHRoYXQgY2FuY2VscyBvdXQgdGhlIHNjcm9sbC4KKyAgICBleHBlY3RlZENoaWxkVHJhbnNm
b3JtLm1ha2VJZGVudGl0eSgpOworICAgIGV4cGVjdGVkQ2hpbGRUcmFuc2Zvcm0udHJhbnNsYXRl
KC0xMCwgLTMwKTsgLy8gc2Nyb2xsRGVsdGEKKyAgICBleHBlY3RlZENoaWxkVHJhbnNmb3JtLnRy
YW5zbGF0ZSg1MCwgNTApOworCisgICAgZXhwZWN0ZWRTdXJmYWNlT3JpZ2luVHJhbnNmb3JtLm1h
a2VJZGVudGl0eSgpOworICAgIGV4cGVjdGVkU3VyZmFjZU9yaWdpblRyYW5zZm9ybS50cmFuc2xh
dGUoLTEwLCAtMzApOyAvLyBzY3JvbGxEZWx0YQorICAgIGV4cGVjdGVkU3VyZmFjZU9yaWdpblRy
YW5zZm9ybS50cmFuc2xhdGUoOCwgNik7CisgICAgZXhwZWN0ZWRTdXJmYWNlT3JpZ2luVHJhbnNm
b3JtLm11bHRpcGx5KHJvdGF0aW9uQWJvdXRaKTsKKworICAgIC8vIFRoZSByb3RhdGlvbiBhbmQg
aXRzIGludmVyc2UgYXJlIG5lZWRlZCB0byBwbGFjZSB0aGUgc2Nyb2xsRGVsdGEgY29tcGVuc2F0
aW9uIGluCisgICAgLy8gdGhlIGNvcnJlY3Qgc3BhY2UuIFRoaXMgdGVzdCB3aWxsIGZhaWwgaWYg
dGhlIHJvdGF0aW9uL2ludmVyc2UgYXJlIGJhY2t3YXJkcywgdG9vLAorICAgIC8vIHNvIGl0IHJl
cXVpcmVzIHBlcmZlY3Qgb3JkZXIgb2Ygb3BlcmF0aW9ucy4KKyAgICBleHBlY3RlZEdyZWF0R3Jh
bmRDaGlsZFRyYW5zZm9ybS5tYWtlSWRlbnRpdHkoKTsKKyAgICBleHBlY3RlZEdyZWF0R3JhbmRD
aGlsZFRyYW5zZm9ybS5tdWx0aXBseShyb3RhdGlvbkFib3V0Wi5pbnZlcnNlKCkpOworICAgIGV4
cGVjdGVkR3JlYXRHcmFuZENoaWxkVHJhbnNmb3JtLnRyYW5zbGF0ZSgxMCwgMzApOyAvLyBleHBs
aWNpdCBjYW5jZWxpbmcgb3V0IHRoZSBzY3JvbGxEZWx0YSB0aGF0IGdldHMgZW1iZWRkZWQgaW4g
dGhlIGZpeGVkIHBvc2l0aW9uIGxheWVyJ3Mgc3VyZmFjZS4KKyAgICBleHBlY3RlZEdyZWF0R3Jh
bmRDaGlsZFRyYW5zZm9ybS5tdWx0aXBseShyb3RhdGlvbkFib3V0Wik7CisgICAgZXhwZWN0ZWRH
cmVhdEdyYW5kQ2hpbGRUcmFuc2Zvcm0udHJhbnNsYXRlKDUwLCA1MCk7CisKKyAgICBBU1NFUlRf
VFJVRShncmFuZENoaWxkLT5yZW5kZXJTdXJmYWNlKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1B
VElPTl9NQVRSSVhfRVEoZXhwZWN0ZWRDaGlsZFRyYW5zZm9ybSwgY2hpbGQtPmRyYXdUcmFuc2Zv
cm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZFN1cmZh
Y2VPcmlnaW5UcmFuc2Zvcm0sIGdyYW5kQ2hpbGQtPnJlbmRlclN1cmZhY2UoKS0+b3JpZ2luVHJh
bnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0ZWRH
cmFuZENoaWxkVHJhbnNmb3JtLCBncmFuZENoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVY
UEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0ZWRHcmVhdEdyYW5kQ2hpbGRUcmFu
c2Zvcm0sIGdyZWF0R3JhbmRDaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKK30KKworVEVTVChDQ0xh
eWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlTY3JvbGxDb21wZW5zYXRpb25Gb3JGaXhlZFBv
c2l0aW9uTGF5ZXJXaXRoQ29udGFpbmVyTGF5ZXJUaGF0SGFzU3VyZmFjZSkKK3sKKyAgICAvLyBU
aGlzIHRlc3QgY2hlY2tzIGZvciBjb3JyZWN0IHNjcm9sbCBjb21wZW5zYXRpb24gd2hlbiB0aGUg
Zml4ZWQtcG9zaXRpb24gY29udGFpbmVyCisgICAgLy8gaXRzZWxmIGhhcyBhIHJlbmRlclN1cmZh
Y2UuIEluIHRoaXMgY2FzZSwgdGhlIGNvbnRhaW5lciBsYXllciBzaG91bGQgYmUgdHJlYXRlZAor
ICAgIC8vIGxpa2UgYSBsYXllciB0aGF0IGNvbnRyaWJ1dGVzIHRvIGEgdGFyZ2V0UmVuZGVyU3Vy
ZmFjZSwgYW5kIHRoYXQgdGFyZ2V0UmVuZGVyU3VyZmFjZQorICAgIC8vIGlzIGNvbXBsZXRlbHkg
aXJyZWxldmFudDsgaXQgc2hvdWxkIG5vdCBhZmZlY3QgdGhlIHNjcm9sbCBjb21wZW5zYXRpb24u
CisgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIHNjb3BlZEltcGxUaHJlYWQ7CisKKyAgICBP
d25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBjcmVhdGVUcmVlRm9yRml4ZWRQb3NpdGlvblRlc3Rz
KCk7CisgICAgQ0NMYXllckltcGwqIGNoaWxkID0gcm9vdC0+Y2hpbGRyZW4oKVswXS5nZXQoKTsK
KyAgICBDQ0xheWVySW1wbCogZ3JhbmRDaGlsZCA9IGNoaWxkLT5jaGlsZHJlbigpWzBdLmdldCgp
OworCisgICAgY2hpbGQtPnNldElzQ29udGFpbmVyRm9yRml4ZWRQb3NpdGlvbkxheWVycyh0cnVl
KTsKKyAgICBjaGlsZC0+c2V0Rm9yY2VSZW5kZXJTdXJmYWNlKHRydWUpOworICAgIGdyYW5kQ2hp
bGQtPnNldEZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0KHRydWUpOworICAgIGdyYW5k
Q2hpbGQtPnNldERyYXdzQ29udGVudCh0cnVlKTsKKworICAgIC8vIENhc2UgMTogc2Nyb2xsRGVs
dGEgb2YgMCwgMAorICAgIGNoaWxkLT5zZXRTY3JvbGxEZWx0YShJbnRTaXplKDAsIDApKTsKKyAg
ICBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3QuZ2V0KCkp
OworCisgICAgLy8gVGhlIGV4cGVjdGVkIGRyYXcgdHJhbnNmb3JtcyB3aXRob3V0IGFueSBzY3Jv
bGwgc2hvdWxkIHN0aWxsIGluY2x1ZGUgYSB0cmFuc2xhdGlvbiB0byB0aGUgY2VudGVyIG9mIHRo
ZSBsYXllciAoaS5lLiB0cmFuc2xhdGlvbiBieSA1MCwgNTApLgorICAgIFdlYlRyYW5zZm9ybWF0
aW9uTWF0cml4IGV4cGVjdGVkU3VyZmFjZU9yaWdpblRyYW5zZm9ybTsKKyAgICBleHBlY3RlZFN1
cmZhY2VPcmlnaW5UcmFuc2Zvcm0udHJhbnNsYXRlKDAsIDApOworICAgIFdlYlRyYW5zZm9ybWF0
aW9uTWF0cml4IGV4cGVjdGVkQ2hpbGRUcmFuc2Zvcm07CisgICAgZXhwZWN0ZWRDaGlsZFRyYW5z
Zm9ybS50cmFuc2xhdGUoNTAsIDUwKTsKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBleHBl
Y3RlZEdyYW5kQ2hpbGRUcmFuc2Zvcm07CisgICAgZXhwZWN0ZWRHcmFuZENoaWxkVHJhbnNmb3Jt
LnRyYW5zbGF0ZSg1MCwgNTApOworICAgIEFTU0VSVF9UUlVFKGNoaWxkLT5yZW5kZXJTdXJmYWNl
KCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0ZWRTdXJmYWNl
T3JpZ2luVHJhbnNmb3JtLCBjaGlsZC0+cmVuZGVyU3VyZmFjZSgpLT5vcmlnaW5UcmFuc2Zvcm0o
KSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZENoaWxkVHJh
bnNmb3JtLCBjaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJ
T05fTUFUUklYX0VRKGV4cGVjdGVkR3JhbmRDaGlsZFRyYW5zZm9ybSwgZ3JhbmRDaGlsZC0+ZHJh
d1RyYW5zZm9ybSgpKTsKKworICAgIC8vIENhc2UgMjogc2Nyb2xsRGVsdGEgb2YgMTAsIDEwCisg
ICAgY2hpbGQtPnNldFNjcm9sbERlbHRhKEludFNpemUoMTAsIDEwKSk7CisgICAgZXhlY3V0ZUNh
bGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShyb290LmdldCgpKTsKKworICAgIC8v
IFRoZSBzdXJmYWNlIGlzIHRyYW5zbGF0ZWQgYnkgc2Nyb2xsRGVsdGEsIHRoZSBjaGlsZCB0cmFu
c2Zvcm0gZG9lc24ndCBjaGFuZ2UKKyAgICAvLyBiZWNhdXNlIGl0IHNjcm9sbHMgYWxvbmcgd2l0
aCB0aGUgc3VyZmFjZSwgYnV0IHRoZSBmaXhlZCBwb3NpdGlvbiBncmFuZENoaWxkCisgICAgLy8g
bmVlZHMgdG8gY29tcGVuc2F0ZSBmb3IgdGhlIHNjcm9sbCB0cmFuc2xhdGlvbi4KKyAgICBleHBl
Y3RlZFN1cmZhY2VPcmlnaW5UcmFuc2Zvcm0ubWFrZUlkZW50aXR5KCk7CisgICAgZXhwZWN0ZWRT
dXJmYWNlT3JpZ2luVHJhbnNmb3JtLnRyYW5zbGF0ZSgtMTAsIC0xMCk7CisgICAgZXhwZWN0ZWRH
cmFuZENoaWxkVHJhbnNmb3JtLm1ha2VJZGVudGl0eSgpOworICAgIGV4cGVjdGVkR3JhbmRDaGls
ZFRyYW5zZm9ybS50cmFuc2xhdGUoNjAsIDYwKTsKKyAgICBBU1NFUlRfVFJVRShjaGlsZC0+cmVu
ZGVyU3VyZmFjZSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVj
dGVkU3VyZmFjZU9yaWdpblRyYW5zZm9ybSwgY2hpbGQtPnJlbmRlclN1cmZhY2UoKS0+b3JpZ2lu
VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0
ZWRDaGlsZFRyYW5zZm9ybSwgY2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RS
QU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZEdyYW5kQ2hpbGRUcmFuc2Zvcm0sIGdyYW5k
Q2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7Cit9CisKK1RFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9u
VGVzdCwgdmVyaWZ5U2Nyb2xsQ29tcGVuc2F0aW9uRm9yRml4ZWRQb3NpdGlvbkxheWVyVGhhdElz
QWxzb0ZpeGVkUG9zaXRpb25Db250YWluZXIpCit7CisgICAgLy8gVGhpcyB0ZXN0IGNoZWNrcyB0
aGUgc2NlbmFyaW8gd2hlcmUgYSBmaXhlZC1wb3NpdGlvbiBsYXllciBhbHNvIGhhcHBlbnMgdG8g
YmUgYQorICAgIC8vIGNvbnRhaW5lciBpdHNlbGYgZm9yIGEgZGVzY2VuZGFudCBmaXhlZCBwb3Np
dGlvbiBsYXllci4gSW4gcGFydGljdWxhciwgdGhlIGxheWVyCisgICAgLy8gc2hvdWxkIG5vdCBh
Y2NpZGVudGFsbHkgYmUgZml4ZWQgdG8gaXRzZWxmLgorICAgIERlYnVnU2NvcGVkU2V0SW1wbFRo
cmVhZCBzY29wZWRJbXBsVGhyZWFkOworCisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0g
Y3JlYXRlVHJlZUZvckZpeGVkUG9zaXRpb25UZXN0cygpOworICAgIENDTGF5ZXJJbXBsKiBjaGls
ZCA9IHJvb3QtPmNoaWxkcmVuKClbMF0uZ2V0KCk7CisgICAgQ0NMYXllckltcGwqIGdyYW5kQ2hp
bGQgPSBjaGlsZC0+Y2hpbGRyZW4oKVswXS5nZXQoKTsKKworICAgIGNoaWxkLT5zZXRJc0NvbnRh
aW5lckZvckZpeGVkUG9zaXRpb25MYXllcnModHJ1ZSk7CisgICAgZ3JhbmRDaGlsZC0+c2V0Rml4
ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3QodHJ1ZSk7CisKKyAgICAvLyBUaGlzIHNob3Vs
ZCBub3QgY29uZnVzZSB0aGUgZ3JhbmRDaGlsZC4gSWYgY29ycmVjdCwgdGhlIGdyYW5kQ2hpbGQg
d291bGQgc3RpbGwgYmUgY29uc2lkZXJlZCBmaXhlZCB0byBpdHMgY29udGFpbmVyIChpLmUuICJj
aGlsZCIpLgorICAgIGdyYW5kQ2hpbGQtPnNldElzQ29udGFpbmVyRm9yRml4ZWRQb3NpdGlvbkxh
eWVycyh0cnVlKTsKKworICAgIC8vIENhc2UgMTogc2Nyb2xsRGVsdGEgb2YgMCwgMAorICAgIGNo
aWxkLT5zZXRTY3JvbGxEZWx0YShJbnRTaXplKDAsIDApKTsKKyAgICBleGVjdXRlQ2FsY3VsYXRl
RHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3QuZ2V0KCkpOworCisgICAgLy8gVGhlIGV4
cGVjdGVkIGRyYXcgdHJhbnNmb3JtcyB3aXRob3V0IGFueSBzY3JvbGwgc2hvdWxkIHN0aWxsIGlu
Y2x1ZGUgYSB0cmFuc2xhdGlvbiB0byB0aGUgY2VudGVyIG9mIHRoZSBsYXllciAoaS5lLiB0cmFu
c2xhdGlvbiBieSA1MCwgNTApLgorICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGV4cGVjdGVk
Q2hpbGRUcmFuc2Zvcm07CisgICAgZXhwZWN0ZWRDaGlsZFRyYW5zZm9ybS50cmFuc2xhdGUoNTAs
IDUwKTsKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBleHBlY3RlZEdyYW5kQ2hpbGRUcmFu
c2Zvcm07CisgICAgZXhwZWN0ZWRHcmFuZENoaWxkVHJhbnNmb3JtLnRyYW5zbGF0ZSg1MCwgNTAp
OworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0ZWRDaGlsZFRyYW5z
Zm9ybSwgY2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9O
X01BVFJJWF9FUShleHBlY3RlZEdyYW5kQ2hpbGRUcmFuc2Zvcm0sIGdyYW5kQ2hpbGQtPmRyYXdU
cmFuc2Zvcm0oKSk7CisKKyAgICAvLyBDYXNlIDI6IHNjcm9sbERlbHRhIG9mIDEwLCAxMAorICAg
IGNoaWxkLT5zZXRTY3JvbGxEZWx0YShJbnRTaXplKDEwLCAxMCkpOworICAgIGV4ZWN1dGVDYWxj
dWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocm9vdC5nZXQoKSk7CisKKyAgICAvLyBI
ZXJlIHRoZSBjaGlsZCBpcyBhZmZlY3RlZCBieSBzY3JvbGxEZWx0YSwgYnV0IHRoZSBmaXhlZCBw
b3NpdGlvbiBncmFuZENoaWxkIHNob3VsZCBub3QgYmUgYWZmZWN0ZWQuCisgICAgZXhwZWN0ZWRD
aGlsZFRyYW5zZm9ybS5tYWtlSWRlbnRpdHkoKTsKKyAgICBleHBlY3RlZENoaWxkVHJhbnNmb3Jt
LnRyYW5zbGF0ZSg0MCwgNDApOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEo
ZXhwZWN0ZWRDaGlsZFRyYW5zZm9ybSwgY2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQ
RUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZEdyYW5kQ2hpbGRUcmFuc2Zvcm0s
IGdyYW5kQ2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7Cit9CisKK1RFU1QoQ0NMYXllclRyZWVIb3N0
Q29tbW9uVGVzdCwgdmVyaWZ5U2Nyb2xsQ29tcGVuc2F0aW9uRm9yRml4ZWRQb3NpdGlvbkxheWVy
VGhhdEhhc05vQ29udGFpbmVyKQoreworICAgIC8vIFRoaXMgdGVzdCBjaGVja3Mgc2Nyb2xsIGNv
bXBlbnNhdGlvbiB3aGVuIGEgZml4ZWQtcG9zaXRpb24gbGF5ZXIgZG9lcyBub3QgZmluZCBhbnkK
KyAgICAvLyBhbmNlc3RvciB0aGF0IGlzIGEgImNvbnRhaW5lckZvckZpeGVkUG9zaXRpb25MYXll
cnMiLiBJbiB0aGlzIHNpdHVhdGlvbiwgdGhlIGxheWVyIHNob3VsZAorICAgIC8vIGJlIGZpeGVk
IHRvIHRoZSB2aWV3cG9ydCAtLSBub3QgdGhlIHJvb3RMYXllciwgd2hpY2ggbWF5IGhhdmUgdHJh
bnNmb3JtcyBvZiBpdHMgb3duLgorICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBzY29wZWRJ
bXBsVGhyZWFkOworCisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gY3JlYXRlVHJlZUZv
ckZpeGVkUG9zaXRpb25UZXN0cygpOworICAgIENDTGF5ZXJJbXBsKiBjaGlsZCA9IHJvb3QtPmNo
aWxkcmVuKClbMF0uZ2V0KCk7CisgICAgQ0NMYXllckltcGwqIGdyYW5kQ2hpbGQgPSBjaGlsZC0+
Y2hpbGRyZW4oKVswXS5nZXQoKTsKKworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHJvdGF0
aW9uQnlaOworICAgIHJvdGF0aW9uQnlaLnJvdGF0ZTNkKDAsIDAsIDkwKTsKKworICAgIHJvb3Qt
PnNldFRyYW5zZm9ybShyb3RhdGlvbkJ5Wik7CisgICAgZ3JhbmRDaGlsZC0+c2V0Rml4ZWRUb0Nv
bnRhaW5lckxheWVyVmlzaWJsZVJlY3QodHJ1ZSk7CisKKyAgICAvLyBDYXNlIDE6IHJvb3Qgc2Ny
b2xsRGVsdGEgb2YgMCwgMAorICAgIHJvb3QtPnNldFNjcm9sbERlbHRhKEludFNpemUoMCwgMCkp
OworICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocm9vdC5n
ZXQoKSk7CisKKyAgICAvLyBUaGUgZXhwZWN0ZWQgZHJhdyB0cmFuc2Zvcm1zIHdpdGhvdXQgYW55
IHNjcm9sbCBzaG91bGQgc3RpbGwgaW5jbHVkZSBhIHRyYW5zbGF0aW9uIHRvIHRoZSBjZW50ZXIg
b2YgdGhlIGxheWVyIChpLmUuIHRyYW5zbGF0aW9uIGJ5IDUwLCA1MCkuCisgICAgV2ViVHJhbnNm
b3JtYXRpb25NYXRyaXggZXhwZWN0ZWRDaGlsZFRyYW5zZm9ybTsKKyAgICBleHBlY3RlZENoaWxk
VHJhbnNmb3JtLm11bHRpcGx5KHJvdGF0aW9uQnlaKTsKKyAgICBleHBlY3RlZENoaWxkVHJhbnNm
b3JtLnRyYW5zbGF0ZSg1MCwgNTApOworCisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggZXhw
ZWN0ZWRHcmFuZENoaWxkVHJhbnNmb3JtOworICAgIGV4cGVjdGVkR3JhbmRDaGlsZFRyYW5zZm9y
bS5tdWx0aXBseShyb3RhdGlvbkJ5Wik7CisgICAgZXhwZWN0ZWRHcmFuZENoaWxkVHJhbnNmb3Jt
LnRyYW5zbGF0ZSg1MCwgNTApOworCisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9F
UShleHBlY3RlZENoaWxkVHJhbnNmb3JtLCBjaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBF
WFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVkR3JhbmRDaGlsZFRyYW5zZm9y
bSwgZ3JhbmRDaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKworICAgIC8vIENhc2UgMjogcm9vdCBz
Y3JvbGxEZWx0YSBvZiAxMCwgMTAKKyAgICByb290LT5zZXRTY3JvbGxEZWx0YShJbnRTaXplKDEw
LCAxMCkpOworICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHko
cm9vdC5nZXQoKSk7CisKKyAgICAvLyBIZXJlIHRoZSBjaGlsZCBpcyBhZmZlY3RlZCBieSBzY3Jv
bGxEZWx0YSwgYnV0IHRoZSBmaXhlZCBwb3NpdGlvbiBncmFuZENoaWxkIHNob3VsZCBub3QgYmUg
YWZmZWN0ZWQuCisgICAgZXhwZWN0ZWRDaGlsZFRyYW5zZm9ybS5tYWtlSWRlbnRpdHkoKTsKKyAg
ICBleHBlY3RlZENoaWxkVHJhbnNmb3JtLnRyYW5zbGF0ZSgtMTAsIC0xMCk7IC8vIHRoZSBzY3Jv
bGxEZWx0YQorICAgIGV4cGVjdGVkQ2hpbGRUcmFuc2Zvcm0ubXVsdGlwbHkocm90YXRpb25CeVop
OworICAgIGV4cGVjdGVkQ2hpbGRUcmFuc2Zvcm0udHJhbnNsYXRlKDUwLCA1MCk7CisKKyAgICBF
WFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVkQ2hpbGRUcmFuc2Zvcm0sIGNo
aWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhf
RVEoZXhwZWN0ZWRHcmFuZENoaWxkVHJhbnNmb3JtLCBncmFuZENoaWxkLT5kcmF3VHJhbnNmb3Jt
KCkpOworfQorCiBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUNsaXBSZWN0
Q3VsbHNSZW5kZXJTdXJmYWNlcykKIHsKICAgICAvLyBUaGUgZW50aXJlIHN1YnRyZWUgb2YgbGF5
ZXJzIHRoYXQgYXJlIG91dHNpZGUgdGhlIGNsaXBSZWN0IHNob3VsZCBiZSBjdWxsZWQgYXdheSwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>146659</attachid>
            <date>2012-06-08 16:07:46 -0700</date>
            <delta_ts>2012-06-11 14:23:23 -0700</delta_ts>
            <desc>Again from scratch, tested and still feels solid</desc>
            <filename>bug-70103-20120608160745.patch</filename>
            <type>text/plain</type>
            <size>53503</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5ODY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjQwOTA3OTQ4ZGE0Yjg0
ZjI1ZTUwZmNlYWY4ZGY1MDE2YzJkYzUzYi4uODY0Y2E5NGRjNjYyNDQ2ZWVkNzk5ZDJiZjc2M2Jm
MmNmYTZlYjRkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYzIEBACisyMDEyLTA2LTA4ICBTaGF3
biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
SW1wbGVtZW50IHBvc2l0aW9uOmZpeGVkIGluIGNvbXBvc2l0b3IgdGhyZWFkCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDEwMworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVuaXQgdGVzdHMgYWRkZWQgdG8g
Q0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdDoKKyAgICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21t
b25UZXN0LnZlcmlmeVNjcm9sbENvbXBlbnNhdGlvbkZvckZpeGVkUG9zaXRpb25MYXllcldpdGhE
aXJlY3RDb250YWluZXIKKyAgICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LnZlcmlm
eVNjcm9sbENvbXBlbnNhdGlvbkZvckZpeGVkUG9zaXRpb25MYXllcldpdGhUcmFuc2Zvcm1lZERp
cmVjdENvbnRhaW5lcgorICAgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QudmVyaWZ5
U2Nyb2xsQ29tcGVuc2F0aW9uRm9yRml4ZWRQb3NpdGlvbkxheWVyV2l0aERpc3RhbnRDb250YWlu
ZXIKKyAgICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LnZlcmlmeVNjcm9sbENvbXBl
bnNhdGlvbkZvckZpeGVkUG9zaXRpb25MYXllcldpdGhEaXN0YW50Q29udGFpbmVyQW5kVHJhbnNm
b3JtcworICAgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QudmVyaWZ5U2Nyb2xsQ29t
cGVuc2F0aW9uRm9yRml4ZWRQb3NpdGlvbkxheWVyV2l0aE11bHRpcGxlU2Nyb2xsRGVsdGFzCisg
ICAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC52ZXJpZnlTY3JvbGxDb21wZW5zYXRp
b25Gb3JGaXhlZFBvc2l0aW9uTGF5ZXJXaXRoSW50ZXJtZWRpYXRlU3VyZmFjZUFuZFRyYW5zZm9y
bXMKKyAgICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LnZlcmlmeVNjcm9sbENvbXBl
bnNhdGlvbkZvckZpeGVkUG9zaXRpb25MYXllcldpdGhDb250YWluZXJMYXllclRoYXRIYXNTdXJm
YWNlCisgICAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC52ZXJpZnlTY3JvbGxDb21w
ZW5zYXRpb25Gb3JGaXhlZFBvc2l0aW9uTGF5ZXJUaGF0SXNBbHNvRml4ZWRQb3NpdGlvbkNvbnRh
aW5lcgorICAgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QudmVyaWZ5U2Nyb2xsQ29t
cGVuc2F0aW9uRm9yRml4ZWRQb3NpdGlvbkxheWVyVGhhdEhhc05vQ29udGFpbmVyCisKKyAgICAg
ICAgU2lnbmlmaWNhbnQgY29udHJpYnV0aW9ucyB0byB0aGlzIHBhdGNoIGJ5IEFscGhhIExhbSBh
bmQgU2FtaSBLeW9zdGlsYS4KKworICAgICAgICBUaGlzIHBhdGNoIGlzIHRoZSBjb21wb3NpdG9y
LXNpZGUgY2hhbmdlIHRoYXQgYWRkcyBzdXBwb3J0IGZvcgorICAgICAgICBmaXhlZC1wb3NpdGlv
biBsYXllcnMgdG8gYmUgY29tcG9zaXRlZCBsYXllcnMuIEJlZm9yZSB0aGlzIHBhdGNoLAorICAg
ICAgICBmaXhlZC1wb3NpdGlvbiBlbGVtZW50cyB3ZXJlIHBvc2l0aW9uZWQgYnkgV2ViQ29yZSAo
aS5lLiBtYWluCisgICAgICAgIHRocmVhZCB3aGVuIHBhaW50aW5nKSwgYW5kIHRoZSBjb21wb3Np
dG9yIGRpZCBub3QgaGF2ZSBlbm91Z2gKKyAgICAgICAga25vd2xlZGdlIG9uIGl0cyBvd24gdG8g
cG9zaXRpb24gaXQgcHJvcGVybHkuIFRoaXMgcGF0Y2ggYWRkcyB0aGUKKyAgICAgICAgbmVjZXNz
YXJ5IG1hdGggYW5kIHBsdW1icyB0aGUgbmVjZXNzYXJ5IGxheWVyIGluZm9ybWF0aW9uIHNvIHRo
YXQKKyAgICAgICAgdGhlIGltcGwgdGhyZWFkIGNhbiBwcm9wZXJseSBwb3NpdGlvbiBmaXhlZC1w
b3NpdGlvbiBlbGVtZW50cyBvbgorICAgICAgICBpdHMgb3duLiBUaGlzIGFsbG93cyBmaXhlZC1w
b3NpdGlvbiBlbGVtZW50cyB0byBiZSBjb21wb3NpdGVkLAorICAgICAgICB3aGljaCBjYW4gZ3Jl
YXRseSBoZWxwIHRvIGF2b2lkIHJlcGFpbnRpbmcgY29udGFpbmVyIGxheWVycyB3aGVuCisgICAg
ICAgIHNjcm9sbGluZyB3aXRoIGEgZml4ZWQtcG9zaXRpb24gbGF5ZXIuCisKKyAgICAgICAgVGhl
cmUgYWxzbyBuZWVkcyB0byBiZSBXZWJDb3JlLXNpZGUgc3VwcG9ydCBmb3IgdGhpcywgd2hpY2gg
aXMKKyAgICAgICAgYWRkcmVzc2VkIGluIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD03ODg2NAorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpMYXllckNo
cm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVz
VG8pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0u
aDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnNldElzQ29udGFpbmVyRm9yRml4
ZWRQb3NpdGlvbkxheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjppc0Nv
bnRhaW5lckZvckZpeGVkUG9zaXRpb25MYXllcnMpOgorICAgICAgICAoTGF5ZXJDaHJvbWl1bSk6
CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXRGaXhlZFRvQ29udGFpbmVyTGF5
ZXJWaXNpYmxlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpmaXhlZFRv
Q29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllcklt
cGw6OkNDTGF5ZXJJbXBsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVySW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OnNldElzQ29u
dGFpbmVyRm9yRml4ZWRQb3NpdGlvbkxheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
SW1wbDo6aXNDb250YWluZXJGb3JGaXhlZFBvc2l0aW9uTGF5ZXJzKToKKyAgICAgICAgKENDTGF5
ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpzZXRGaXhlZFRvQ29udGFp
bmVyTGF5ZXJWaXNpYmxlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6Zml4
ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
ckltcGw6OnNjcm9sbERlbHRhU3BhY2VUb1N1cmZhY2VUcmFuc2Zvcm0pOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllckltcGw6OnNldFNjcm9sbERlbHRhU3BhY2VUb1N1cmZhY2VUcmFuc2Zvcm0p
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dENvbW1vbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlU2Nyb2xsQ29tcGVuc2F0aW9u
Rm9yVGhpc0xheWVyKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Y29t
cHV0ZVNjcm9sbENvbXBlbnNhdGlvbk1hdHJpeEZvckNoaWxkcmVuKToKKyAgICAgICAgKFdlYkNv
cmU6OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtcyk6CisKIDIwMTIt
MDYtMDggIERhdmlkIEdyb2dhbiAgPGRncm9nYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIElu
ZGV4ZWREQjogcmVuYW1lIHNvbWUgaW5zdGFuY2VzIG9mIG9wZW4gdG8gcmVnaXN0ZXJGcm9udGVu
ZENhbGxiYWNrcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA0NGUzM2I2NTMzM2FiNmQw
MDFlZmFlYWM3YTYyMWZmYzE0YmY3NDM0Li5mMTYwMjZjMmY5YTQwODgzZjk3M2YzZGQ1ZDBlMzJh
Y2RhMTQxMDBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisy
MDEyLTA2LTA4ICBTaGF3biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFtjaHJvbWl1bV0gSW1wbGVtZW50IHBvc2l0aW9uOmZpeGVkIGluIGNvbXBvc2l0b3IgdGhy
ZWFkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDEw
MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogdGVz
dHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHA6CisKIDIwMTItMDYtMDggIERhdmlkIEdy
b2dhbiAgPGRncm9nYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEluZGV4ZWREQjogcmVuYW1l
IHNvbWUgaW5zdGFuY2VzIG9mIG9wZW4gdG8gcmVnaXN0ZXJGcm9udGVuZENhbGxiYWNrcwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJD
aHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllckNocm9taXVtLmNwcAppbmRleCBkMzVmNTkyMTlmZjc0M2NmZDlkZTZiZDc5ZWJlNTkxY2Fj
OTIxYWE5Li5iYzgyZmViMGRmNDNmN2I0ODVmMDIxOTc2YjIyNzYxY2Q2MWQxODI1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9t
aXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllckNocm9taXVtLmNwcApAQCAtNzMsNiArNzMsOCBAQCBMYXllckNocm9taXVtOjpMYXllckNo
cm9taXVtKCkKICAgICAsIG1fZGVidWdCb3JkZXJXaWR0aCgwKQogICAgICwgbV9vcGFjaXR5KDEu
MCkKICAgICAsIG1fYW5jaG9yUG9pbnRaKDApCisgICAgLCBtX2lzQ29udGFpbmVyRm9yRml4ZWRQ
b3NpdGlvbkxheWVycyhmYWxzZSkKKyAgICAsIG1fZml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJs
ZVJlY3QoZmFsc2UpCiAgICAgLCBtX2lzRHJhd2FibGUoZmFsc2UpCiAgICAgLCBtX21hc2tzVG9C
b3VuZHMoZmFsc2UpCiAgICAgLCBtX29wYXF1ZShmYWxzZSkKQEAgLTUwNyw2ICs1MDksOCBAQCB2
b2lkIExheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8oQ0NMYXllckltcGwqIGxheWVyKQog
ICAgIGlmICghb3BhY2l0eUlzQW5pbWF0aW5nKCkpCiAgICAgICAgIGxheWVyLT5zZXRPcGFjaXR5
KG1fb3BhY2l0eSk7CiAgICAgbGF5ZXItPnNldFBvc2l0aW9uKG1fcG9zaXRpb24pOworICAgIGxh
eWVyLT5zZXRJc0NvbnRhaW5lckZvckZpeGVkUG9zaXRpb25MYXllcnMobV9pc0NvbnRhaW5lckZv
ckZpeGVkUG9zaXRpb25MYXllcnMpOworICAgIGxheWVyLT5zZXRGaXhlZFRvQ29udGFpbmVyTGF5
ZXJWaXNpYmxlUmVjdChtX2ZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0KTsKICAgICBs
YXllci0+c2V0UHJlc2VydmVzM0QocHJlc2VydmVzM0QoKSk7CiAgICAgbGF5ZXItPnNldFNjcm9s
bFBvc2l0aW9uKG1fc2Nyb2xsUG9zaXRpb24pOwogICAgIGxheWVyLT5zZXRTdWJsYXllclRyYW5z
Zm9ybShtX3N1YmxheWVyVHJhbnNmb3JtKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAppbmRleCAxMWViMjcy
ZWE4ZWY0ZWEyM2RjZDJhMzRiYWI3Njk1MWQzNzUzMDQ2Li5lMzNjMmZkYTg4YTc4NGY1NTMzNjFh
YmMzZjhlMTViZTk4NzVjMGE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCkBAIC0xMzAsNiArMTMwLDEy
IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKTsKICAg
ICBGbG9hdFBvaW50IHBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbjsgfQogCisg
ICAgdm9pZCBzZXRJc0NvbnRhaW5lckZvckZpeGVkUG9zaXRpb25MYXllcnMoYm9vbCBpc0NvbnRh
aW5lckZvckZpeGVkUG9zaXRpb25MYXllcnMpIHsgbV9pc0NvbnRhaW5lckZvckZpeGVkUG9zaXRp
b25MYXllcnMgPSBpc0NvbnRhaW5lckZvckZpeGVkUG9zaXRpb25MYXllcnM7IH0KKyAgICBib29s
IGlzQ29udGFpbmVyRm9yRml4ZWRQb3NpdGlvbkxheWVycygpIGNvbnN0IHsgcmV0dXJuIG1faXND
b250YWluZXJGb3JGaXhlZFBvc2l0aW9uTGF5ZXJzOyB9CisKKyAgICB2b2lkIHNldEZpeGVkVG9D
b250YWluZXJMYXllclZpc2libGVSZWN0KGJvb2wgZml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJs
ZVJlY3QpIHsgbV9maXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdCA9IGZpeGVkVG9Db250
YWluZXJMYXllclZpc2libGVSZWN0OyBzZXROZWVkc0NvbW1pdCgpOyB9CisgICAgYm9vbCBmaXhl
ZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZml4ZWRUb0Nv
bnRhaW5lckxheWVyVmlzaWJsZVJlY3Q7IH0KKwogICAgIHZvaWQgc2V0U3VibGF5ZXJUcmFuc2Zv
cm0oY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwogICAgIGNvbnN0IFdl
YktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHN1YmxheWVyVHJhbnNmb3JtKCkgY29uc3Qg
eyByZXR1cm4gbV9zdWJsYXllclRyYW5zZm9ybTsgfQogCkBAIC0zMzQsNiArMzQwLDggQEAgcHJp
dmF0ZToKICAgICBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMgbV9maWx0ZXJzOwogICAgIFdl
YktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyBtX2JhY2tncm91bmRGaWx0ZXJzOwogICAgIGZsb2F0
IG1fYW5jaG9yUG9pbnRaOworICAgIGJvb2wgbV9pc0NvbnRhaW5lckZvckZpeGVkUG9zaXRpb25M
YXllcnM7CisgICAgYm9vbCBtX2ZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0OwogICAg
IGJvb2wgbV9pc0RyYXdhYmxlOwogICAgIGJvb2wgbV9tYXNrc1RvQm91bmRzOwogICAgIGJvb2wg
bV9vcGFxdWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKaW5kZXggNzJjMGVhMmI3OWNlNzJiYTZh
ZTBmYzYyZWMxNzc2YjY5MmFjNWFmYy4uYzE1NWE0ODBiMTY3NGE1MmVhODJkZmQ2N2MwZGEyNWI4
ZTIzMGE5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcApAQCAtNjMsNiArNjMsOCBAQCBDQ0xh
eWVySW1wbDo6Q0NMYXllckltcGwoaW50IGlkKQogICAgICwgbV9pc05vbkNvbXBvc2l0ZWRDb250
ZW50KGZhbHNlKQogICAgICwgbV9kcmF3c0NvbnRlbnQoZmFsc2UpCiAgICAgLCBtX2ZvcmNlUmVu
ZGVyU3VyZmFjZShmYWxzZSkKKyAgICAsIG1faXNDb250YWluZXJGb3JGaXhlZFBvc2l0aW9uTGF5
ZXJzKGZhbHNlKQorICAgICwgbV9maXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdChmYWxz
ZSkKICAgICAsIG1fcGFnZVNjYWxlRGVsdGEoMSkKICAgICAsIG1fdGFyZ2V0UmVuZGVyU3VyZmFj
ZSgwKQogICAgICwgbV9kcmF3RGVwdGgoMCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCmluZGV4IGYwM2M1
YzNlYTMxZDliYjQ3MjUwMTkxNjMzOTk1YTQwYTkwZWVkZGQuLmUwMWYzNTAzYWM5M2MxYTNlZjM5
YmNmMzkzZjU1ZDI2YWIyNzNkYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaApAQCAtMTMxLDYgKzEz
MSwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50Jik7
CiAgICAgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0
aW9uOyB9CiAKKyAgICB2b2lkIHNldElzQ29udGFpbmVyRm9yRml4ZWRQb3NpdGlvbkxheWVycyhi
b29sIGlzQ29udGFpbmVyRm9yRml4ZWRQb3NpdGlvbkxheWVycykgeyBtX2lzQ29udGFpbmVyRm9y
Rml4ZWRQb3NpdGlvbkxheWVycyA9IGlzQ29udGFpbmVyRm9yRml4ZWRQb3NpdGlvbkxheWVyczsg
fQorICAgIGJvb2wgaXNDb250YWluZXJGb3JGaXhlZFBvc2l0aW9uTGF5ZXJzKCkgY29uc3QgeyBy
ZXR1cm4gbV9pc0NvbnRhaW5lckZvckZpeGVkUG9zaXRpb25MYXllcnM7IH0KKworICAgIHZvaWQg
c2V0Rml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3QoYm9vbCBmaXhlZFRvQ29udGFpbmVy
TGF5ZXJWaXNpYmxlUmVjdCA9IHRydWUpIHsgbV9maXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxl
UmVjdCA9IGZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0O30KKyAgICBib29sIGZpeGVk
VG9Db250YWluZXJMYXllclZpc2libGVSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9maXhlZFRvQ29u
dGFpbmVyTGF5ZXJWaXNpYmxlUmVjdDsgfQorCiAgICAgdm9pZCBzZXRQcmVzZXJ2ZXMzRChib29s
KTsKICAgICBib29sIHByZXNlcnZlczNEKCkgY29uc3QgeyByZXR1cm4gbV9wcmVzZXJ2ZXMzRDsg
fQogCkBAIC0yMjksNiArMjM1LDkgQEAgcHVibGljOgogICAgIGNvbnN0IFdlYktpdDo6V2ViVHJh
bnNmb3JtYXRpb25NYXRyaXgmIHNjcmVlblNwYWNlVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4g
bV9zY3JlZW5TcGFjZVRyYW5zZm9ybTsgfQogICAgIHZvaWQgc2V0U2NyZWVuU3BhY2VUcmFuc2Zv
cm0oY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4KSB7IG1fc2Ny
ZWVuU3BhY2VUcmFuc2Zvcm0gPSBtYXRyaXg7IH0KIAorICAgIGNvbnN0IFdlYktpdDo6V2ViVHJh
bnNmb3JtYXRpb25NYXRyaXgmIHNjcm9sbERlbHRhU3BhY2VUb1N1cmZhY2VUcmFuc2Zvcm0oKSB7
IHJldHVybiBtX3Njcm9sbERlbHRhU3BhY2VUb1N1cmZhY2VUcmFuc2Zvcm07IH0KKyAgICB2b2lk
IHNldFNjcm9sbERlbHRhU3BhY2VUb1N1cmZhY2VUcmFuc2Zvcm0oY29uc3QgV2ViS2l0OjpXZWJU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4KSB7IG1fc2Nyb2xsRGVsdGFTcGFjZVRvU3VyZmFj
ZVRyYW5zZm9ybSA9IG1hdHJpeDsgfQorCiAgICAgYm9vbCBkcmF3VHJhbnNmb3JtSXNBbmltYXRp
bmcoKSBjb25zdCB7IHJldHVybiBtX2RyYXdUcmFuc2Zvcm1Jc0FuaW1hdGluZzsgfQogICAgIHZv
aWQgc2V0RHJhd1RyYW5zZm9ybUlzQW5pbWF0aW5nKGJvb2wgYW5pbWF0aW5nKSB7IG1fZHJhd1Ry
YW5zZm9ybUlzQW5pbWF0aW5nID0gYW5pbWF0aW5nOyB9CiAgICAgYm9vbCBzY3JlZW5TcGFjZVRy
YW5zZm9ybUlzQW5pbWF0aW5nKCkgY29uc3QgeyByZXR1cm4gbV9zY3JlZW5TcGFjZVRyYW5zZm9y
bUlzQW5pbWF0aW5nOyB9CkBAIC0zMjMsNiArMzMyLDExIEBAIHByaXZhdGU6CiAgICAgYm9vbCBt
X2RyYXdzQ29udGVudDsKICAgICBib29sIG1fZm9yY2VSZW5kZXJTdXJmYWNlOwogCisgICAgLy8g
U2V0IGZvciB0aGUgbGF5ZXIgdGhhdCBvdGhlciBsYXllcnMgYXJlIGZpeGVkIHRvLgorICAgIGJv
b2wgbV9pc0NvbnRhaW5lckZvckZpeGVkUG9zaXRpb25MYXllcnM7CisgICAgLy8gU2V0IGZvciB0
aGUgbGF5ZXIgdGhhdCBoYXMgcG9zaXRpb24gZml4ZWQgdG8gdGhlIGNvbnRhaW5lciBsYXllcidz
IHZpc2libGUgcmVjdC4KKyAgICBib29sIG1fZml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJl
Y3Q7CisKICAgICBGbG9hdFNpemUgbV9zY3JvbGxEZWx0YTsKICAgICBJbnRTaXplIG1fc2VudFNj
cm9sbERlbHRhOwogICAgIEludFNpemUgbV9tYXhTY3JvbGxQb3NpdGlvbjsKQEAgLTM1Miw2ICsz
NjYsNyBAQCBwcml2YXRlOgogCiAgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBt
X2RyYXdUcmFuc2Zvcm07CiAgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3Nj
cmVlblNwYWNlVHJhbnNmb3JtOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgg
bV9zY3JvbGxEZWx0YVNwYWNlVG9TdXJmYWNlVHJhbnNmb3JtOyAvLyBOT1RFOiBvbmx5IHZhbGlk
IGZvciBmcmFtZXMgd2hlcmUgdGhpcyBsYXllcidzIHNjcm9sbERlbHRhIGlzIG5vbi16ZXJvLgog
ICAgIGJvb2wgbV9kcmF3VHJhbnNmb3JtSXNBbmltYXRpbmc7CiAgICAgYm9vbCBtX3NjcmVlblNw
YWNlVHJhbnNmb3JtSXNBbmltYXRpbmc7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3RDb21tb24uY3BwCmluZGV4IDA4OTgwNTY3ODQwY2QyZGFjZmEwNzU0NWM3YzFmNmU4YjM4NDVm
ZWUuLmU4Y2MwYjEzZTY4ODg0ODIyY2VkNDNlMDZlNmIwOGMzNGM0YTk4N2UgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdENvbW1vbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcApAQCAtMzEzLDEwICszMTMsOTggQEAg
c3RhdGljIGJvb2wgc3VidHJlZVNob3VsZFJlbmRlclRvU2VwYXJhdGVTdXJmYWNlKExheWVyVHlw
ZSogbGF5ZXIsIGJvb2wgYXhpc0FsaWcKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK1dlYlRyYW5z
Zm9ybWF0aW9uTWF0cml4IGNvbXB1dGVTY3JvbGxDb21wZW5zYXRpb25Gb3JUaGlzTGF5ZXIoTGF5
ZXJDaHJvbWl1bSogc2Nyb2xsaW5nTGF5ZXIsIGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4
JiBwYXJlbnRNYXRyaXgpCit7CisgICAgLy8gVGhlIG1haW4gdGhyZWFkIChpLmUuIExheWVyQ2hy
b21pdW0pIGRvZXMgbm90IG5lZWQgdG8gd29ycnkgYWJvdXQgc2Nyb2xsIGNvbXBlbnNhdGlvbi4K
KyAgICAvLyBTbyB3ZSBjYW4ganVzdCByZXR1cm4gYW4gaWRlbnRpdHkgbWF0cml4IGhlcmUuCisg
ICAgcmV0dXJuIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4KCk7Cit9CisKK1dlYlRyYW5zZm9ybWF0
aW9uTWF0cml4IGNvbXB1dGVTY3JvbGxDb21wZW5zYXRpb25Gb3JUaGlzTGF5ZXIoQ0NMYXllcklt
cGwqIHNjcm9sbGluZ0xheWVyLCBjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50
TWF0cml4KQoreworICAgIC8vIEZvciBldmVyeSBsYXllciB0aGF0IGhhcyBub24temVybyBzY3Jv
bGxEZWx0YSwgd2UgaGF2ZSB0byBjb21wdXRlIGEgdHJhbnNmb3JtIHRoYXQgY2FuIHVuZG8gdGhl
CisgICAgLy8gc2Nyb2xsRGVsdGEgdHJhbnNsYXRpb24uIEluIHBhcnRpY3VsYXIsIHdlIHdhbnQg
dGhpcyBtYXRyaXggdG8gcHJlbXVsdGlwbHkgYSBmaXhlZC1wb3NpdGlvbiBsYXllcidzCisgICAg
Ly8gcGFyZW50TWF0cml4LCBzbyB3ZSBkZXNpZ24gdGhpcyB0cmFuc2Zvcm0gaW4gdGhyZWUgc3Rl
cHMgYXMgZm9sbG93cy4gVGhlIHN0ZXBzIGRlc2NyaWJlZCBoZXJlIGFwcGx5CisgICAgLy8gZnJv
bSByaWdodC10by1sZWZ0LCBzbyBTdGVwIDEgd291bGQgYmUgdGhlIHJpZ2h0LW1vc3QgbWF0cml4
OgorICAgIC8vCisgICAgLy8gICAgIFN0ZXAgMS4gdHJhbnNmb3JtIGZyb20gdGFyZ2V0IHN1cmZh
Y2Ugc3BhY2UgdG8gdGhlIGV4YWN0IHNwYWNlIHdoZXJlIHNjcm9sbERlbHRhIGlzIGFjdHVhbGx5
IGFwcGxpZWQuCisgICAgLy8gICAgICAgICAgIC0tIHRoaXMgaXMgaW52ZXJzZSBvZiB0aGUgbWF0
cml4IGluIHN0ZXAgMworICAgIC8vICAgICBTdGVwIDIuIHVuZG8gdGhlIHNjcm9sbERlbHRhCisg
ICAgLy8gICAgICAgICAgIC0tIHRoaXMgaXMganVzdCBhIHRyYW5zbGF0aW9uIGJ5IHNjcm9sbERl
bHRhLgorICAgIC8vICAgICBTdGVwIDMuIHRyYW5zZm9ybSBiYWNrIHRvIHRhcmdldCBzdXJmYWNl
IHNwYWNlLgorICAgIC8vICAgICAgICAgICAtLSB0aGlzIHRyYW5zZm9ybSBpcyB0aGUgInBhcnRp
YWxMYXllck9yaWdpblRyYW5zZm9ybSIgPSAocGFyZW50TWF0cml4ICogc2NhbGUobGF5ZXItPnBh
Z2VTY2FsZURlbHRhKCkpKTsKKyAgICAvLworICAgIC8vIFRoZXNlIHN0ZXBzIGNyZWF0ZSBhIG1h
dHJpeCB0aGF0IGJvdGggc3RhcnQgYW5kIGVuZCBpbiB0YXJnZXRTdXJmYWNlU3BhY2UuIFNvIHRo
aXMgbWF0cml4IGNhbgorICAgIC8vIHByZS1tdWx0aXBseSBhbnkgZml4ZWQtcG9zaXRpb24gbGF5
ZXIncyBkcmF3VHJhbnNmb3JtIHRvIHVuZG8gdGhlIHNjcm9sbERlbHRhcyAtLSBhcyBsb25nIGFz
CisgICAgLy8gdGhhdCBmaXhlZCBwb3NpdGlvbiBsYXllciBpcyBmaXhlZCBvbnRvIHRoZSBzYW1l
IHRhcmdldFJlbmRlclN1cmZhY2UgYXMgdGhpcyBzY3JvbGxpbmdMYXllci4KKyAgICAvLworCisg
ICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggcGFydGlhbExheWVyT3JpZ2luVHJhbnNmb3JtID0g
cGFyZW50TWF0cml4OworICAgIHBhcnRpYWxMYXllck9yaWdpblRyYW5zZm9ybS5zY2FsZShzY3Jv
bGxpbmdMYXllci0+cGFnZVNjYWxlRGVsdGEoKSk7CisKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBzY3JvbGxDb21wZW5zYXRpb25Gb3JUaGlzTGF5ZXIgPSBwYXJ0aWFsTGF5ZXJPcmlnaW5U
cmFuc2Zvcm07IC8vIFN0ZXAgMworICAgIHNjcm9sbENvbXBlbnNhdGlvbkZvclRoaXNMYXllci50
cmFuc2xhdGUoc2Nyb2xsaW5nTGF5ZXItPnNjcm9sbERlbHRhKCkud2lkdGgoKSwgc2Nyb2xsaW5n
TGF5ZXItPnNjcm9sbERlbHRhKCkuaGVpZ2h0KCkpOyAvLyBTdGVwIDIKKyAgICBzY3JvbGxDb21w
ZW5zYXRpb25Gb3JUaGlzTGF5ZXIubXVsdGlwbHkocGFydGlhbExheWVyT3JpZ2luVHJhbnNmb3Jt
LmludmVyc2UoKSk7IC8vIFN0ZXAgMQorICAgIHJldHVybiBzY3JvbGxDb21wZW5zYXRpb25Gb3JU
aGlzTGF5ZXI7Cit9CisKK1dlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGNvbXB1dGVTY3JvbGxDb21w
ZW5zYXRpb25NYXRyaXhGb3JDaGlsZHJlbihMYXllckNocm9taXVtKiBjdXJyZW50TGF5ZXIsIGNv
bnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBjdXJyZW50UGFyZW50TWF0cml4LCBjb25zdCBX
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgY3VycmVudFNjcm9sbENvbXBlbnNhdGlvbikKK3sKKyAg
ICAvLyBUaGUgbWFpbiB0aHJlYWQgKGkuZS4gTGF5ZXJDaHJvbWl1bSkgZG9lcyBub3QgbmVlZCB0
byB3b3JyeSBhYm91dCBzY3JvbGwgY29tcGVuc2F0aW9uLgorICAgIC8vIFNvIHdlIGNhbiBqdXN0
IHJldHVybiBhbiBpZGVudGl0eSBtYXRyaXggaGVyZS4KKyAgICByZXR1cm4gV2ViVHJhbnNmb3Jt
YXRpb25NYXRyaXgoKTsKK30KKworV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggY29tcHV0ZVNjcm9s
bENvbXBlbnNhdGlvbk1hdHJpeEZvckNoaWxkcmVuKENDTGF5ZXJJbXBsKiBsYXllciwgY29uc3Qg
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwgY29uc3QgV2ViVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIGN1cnJlbnRTY3JvbGxDb21wZW5zYXRpb25NYXRyaXgpCit7CisgICAgLy8g
IlRvdGFsIHNjcm9sbCBjb21wZW5zYXRpb24iIGlzIHRoZSB0cmFuc2Zvcm0gbmVlZGVkIHRvIGNh
bmNlbCBvdXQgYWxsIHNjcm9sbERlbHRhIHRyYW5zbGF0aW9ucyB0aGF0CisgICAgLy8gb2NjdXJy
ZWQgc2luY2UgdGhlIG5lYXJlc3QgY29udGFpbmVyIGxheWVyLCBldmVuIGlmIHRoZXJlIGFyZSBy
ZW5kZXJTdXJmYWNlcyBpbi1iZXR3ZWVuLgorICAgIC8vCisgICAgLy8gVGhlcmUgYXJlIHNvbWUg
ZWRnZSBjYXNlcyB0byBiZSBhd2FyZSBvZiwgdGhhdCBhcmUgbm90IGV4cGxpY2l0IGluIHRoZSBj
b2RlOgorICAgIC8vICAtIEEgbGF5ZXIgdGhhdCBpcyBib3RoIGEgZml4ZWQtcG9zaXRpb24gYW5k
IGNvbnRhaW5lciBzaG91bGQgbm90IGJlIGl0cyBvd24gY29udGFpbmVyLCBpbnN0ZWFkLCB0aGF0
IG1lYW5zCisgICAgLy8gICAgaXQgaXMgZml4ZWQgdG8gYW4gYW5jc2VzdG9yLCBhbmQgaXMgYSBj
b250YWluZXIgZm9yIGFueSBmaXhlZC1wb3NpdGlvbiBkZXNjZW5kYW50cy4KKyAgICAvLyAgLSBB
IGxheWVyIHRoYXQgaXMgYSBmaXhlZC1wb3NpdGlvbiBjb250YWluZXIgYW5kIGhhcyBhIHJlbmRl
clN1cmZhY2Ugc2hvdWxkIGJlaGF2ZSB0aGUgc2FtZSBhcyBhIGNvbnRhaW5lcgorICAgIC8vICAg
IHdpdGhvdXQgYSByZW5kZXJTdXJmYWNlLCB0aGUgcmVuZGVyU3VyZmFjZSBpcyBpcnJlbGV2YW50
IGluIHRoYXQgY2FzZS4KKyAgICAvLyAgLSBBIGxheWVyIHRoYXQgZG9lcyBub3QgaGF2ZSBhbiBl
eHBsaWNpdCBjb250YWluZXIgaXMgc2ltcGx5IGZpeGVkIHRvIHRoZSB2aWV3cG9ydAorICAgIC8v
ICAgIChpLmUuIHRoZSByb290IHJlbmRlclN1cmZhY2UsIGFuZCBpdCB3b3VsZCBzdGlsbCBjb21w
ZW5zYXRlIGZvciByb290IGxheWVyJ3Mgc2Nyb2xsRGVsdGEpLgorICAgIC8vICAtIElmIHRoZSBm
aXhlZC1wb3NpdGlvbiBsYXllciBoYXMgaXRzIG93biByZW5kZXJTdXJmYWNlLCB0aGVuIHRoZSBy
ZW5kZXJTdXJmYWNlIGlzCisgICAgLy8gICAgdGhlIG9uZSB3aG8gZ2V0cyBmaXhlZC4KKyAgICAv
LworICAgIC8vIFRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gYmUgY2FsbGVkIEFGVEVSIGxheWVycyBj
cmVhdGUgdGhlaXIgb3duIHJlbmRlclN1cmZhY2VzLgorICAgIC8vCisKKyAgICAvLyBTdGFydCBh
cyBpZGVudGl0eSBtYXRyaXguCisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggbmV4dFNjcm9s
bENvbXBlbnNhdGlvbk1hdHJpeDsKKworICAgIC8vIElmIHRoaXMgbGF5ZXIgaXMgbm90IGEgY29u
dGFpbmVyLCB0aGVuIGl0IGluaGVyaXRzIHRoZSBleGlzdGluZyBzY3JvbGwgY29tcGVuc2F0aW9u
cy4KKyAgICBpZiAoIWxheWVyLT5pc0NvbnRhaW5lckZvckZpeGVkUG9zaXRpb25MYXllcnMoKSkK
KyAgICAgICAgbmV4dFNjcm9sbENvbXBlbnNhdGlvbk1hdHJpeCA9IGN1cnJlbnRTY3JvbGxDb21w
ZW5zYXRpb25NYXRyaXg7CisKKyAgICAvLyBJZiB0aGUgY3VycmVudCBsYXllciBoYXMgYSBub24t
emVybyBzY3JvbGxEZWx0YSwgdGhlbiB3ZSBzaG91bGQgY29tcHV0ZSBpdHMgbG9jYWwgc2Nyb2xs
Q29tcGVuc2F0aW9uCisgICAgLy8gYW5kIGFjY3VtdWxhdGUgaXQgdG8gdGhlIG5leHRTY3JvbGxD
b21wZW5zYXRpb25NYXRyaXguCisgICAgaWYgKCFsYXllci0+c2Nyb2xsRGVsdGEoKS5pc1plcm8o
KSkgeworICAgICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzY3JvbGxDb21wZW5zYXRpb25G
b3JUaGlzTGF5ZXIgPSBjb21wdXRlU2Nyb2xsQ29tcGVuc2F0aW9uRm9yVGhpc0xheWVyKGxheWVy
LCBwYXJlbnRNYXRyaXgpOworICAgICAgICBuZXh0U2Nyb2xsQ29tcGVuc2F0aW9uTWF0cml4Lm11
bHRpcGx5KHNjcm9sbENvbXBlbnNhdGlvbkZvclRoaXNMYXllcik7CisgICAgfQorCisgICAgLy8g
SWYgdGhlIGxheWVyIGNyZWF0ZWQgaXRzIG93biByZW5kZXJTdXJmYWNlLCB3ZSBoYXZlIHRvIGFk
anVzdCBuZXh0U2Nyb2xsQ29tcGVuc2F0aW9uTWF0cml4LgorICAgIC8vIFRoZSBhZGp1c3RtZW50
IGFsbG93cyB1cyB0byBjb250aW51ZSB1c2luZyB0aGUgc2Nyb2xsQ29tcGVuc2F0aW9uIG9uIHRo
ZSBuZXh0IHN1cmZhY2UuCisgICAgLy8gIFN0ZXAgMSAocmlnaHQtbW9zdCBpbiB0aGUgbWF0aCk6
IHRyYW5zZm9ybSBmcm9tIHRoZSBuZXcgc3VyZmFjZSB0byB0aGUgb3JpZ2luYWwgYW5jZXN0b3Ig
c3VyZmFjZQorICAgIC8vICBTdGVwIDI6IGFwcGx5IHRoZSBzY3JvbGwgY29tcGVuc2F0aW9uCisg
ICAgLy8gIFN0ZXAgMzogdHJhbnNmb3JtIGJhY2sgdG8gdGhlIG5ldyBzdXJmYWNlLgorICAgIGlm
IChsYXllci0+cmVuZGVyU3VyZmFjZSgpICYmICFuZXh0U2Nyb2xsQ29tcGVuc2F0aW9uTWF0cml4
LmlzSWRlbnRpdHkoKSkKKyAgICAgICAgbmV4dFNjcm9sbENvbXBlbnNhdGlvbk1hdHJpeCA9IGxh
eWVyLT5yZW5kZXJTdXJmYWNlKCktPm9yaWdpblRyYW5zZm9ybSgpLmludmVyc2UoKSAqIG5leHRT
Y3JvbGxDb21wZW5zYXRpb25NYXRyaXggKiBsYXllci0+cmVuZGVyU3VyZmFjZSgpLT5vcmlnaW5U
cmFuc2Zvcm0oKTsKKworICAgIHJldHVybiBuZXh0U2Nyb2xsQ29tcGVuc2F0aW9uTWF0cml4Owor
fQorCiAvLyBSZWN1cnNpdmVseSB3YWxrcyB0aGUgbGF5ZXIgdHJlZSBzdGFydGluZyBhdCB0aGUg
Z2l2ZW4gbm9kZSBhbmQgY29tcHV0ZXMgYWxsIHRoZQogLy8gbmVjZXNzYXJ5IHRyYW5zZm9ybWF0
aW9ucywgY2xpcFJlY3RzLCByZW5kZXIgc3VyZmFjZXMsIGV0Yy4KIHRlbXBsYXRlPHR5cGVuYW1l
IExheWVyVHlwZSwgdHlwZW5hbWUgTGF5ZXJMaXN0LCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlw
ZSwgdHlwZW5hbWUgTGF5ZXJTb3J0ZXI+Ci1zdGF0aWMgYm9vbCBjYWxjdWxhdGVEcmF3VHJhbnNm
b3Jtc0ludGVybmFsKExheWVyVHlwZSogbGF5ZXIsIExheWVyVHlwZSogcm9vdExheWVyLCBjb25z
dCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50TWF0cml4LCBjb25zdCBXZWJUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgZnVsbEhpZXJhcmNoeU1hdHJpeCwgUmVuZGVyU3VyZmFjZVR5cGUqIG5l
YXJlc3RBbmNlc3RvclRoYXRNb3Zlc1BpeGVscywgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0LCBMYXllckxpc3QmIGxheWVyTGlzdCwgTGF5ZXJTb3J0ZXIqIGxheWVyU29ydGVyLCBp
bnQgbWF4VGV4dHVyZVNpemUpCitzdGF0aWMgYm9vbCBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0lu
dGVybmFsKExheWVyVHlwZSogbGF5ZXIsIExheWVyVHlwZSogcm9vdExheWVyLCBjb25zdCBXZWJU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50TWF0cml4LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZnVs
bEhpZXJhcmNoeU1hdHJpeCwgY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGN1cnJlbnRT
Y3JvbGxDb21wZW5zYXRpb25NYXRyaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFJlbmRlclN1cmZhY2VUeXBlKiBuZWFyZXN0QW5jZXN0b3JUaGF0TW92ZXNQ
aXhlbHMsIExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgTGF5ZXJMaXN0JiBsYXll
ckxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheWVy
U29ydGVyKiBsYXllclNvcnRlciwgaW50IG1heFRleHR1cmVTaXplKQogewogICAgIC8vIFRoaXMg
ZnVuY3Rpb24gY29tcHV0ZXMgdGhlIG5ldyBtYXRyaXggdHJhbnNmb3JtYXRpb25zIHJlY3Vyc2l2
ZWx5IGZvciB0aGlzCiAgICAgLy8gbGF5ZXIgYW5kIGFsbCBpdHMgZGVzY2VuZGFudHMuIEl0IGFs
c28gY29tcHV0ZXMgdGhlIGFwcHJvcHJpYXRlIHJlbmRlciBzdXJmYWNlcy4KQEAgLTQ0Myw5ICs1
MzEsMTggQEAgc3RhdGljIGJvb2wgY2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNJbnRlcm5hbChMYXll
clR5cGUqIGxheWVyLCBMYXllclR5cGUqIHJvb3RMYXkKICAgICAvLyBMVCA9IFRyW29yaWdpbl0g
KiBTW3BhZ2VTY2FsZURlbHRhXSAqIFRyW29yaWdpbjJhbmNob3JdICogTVtsYXllcl0gKiBUclth
bmNob3IyY2VudGVyXQogICAgIGxheWVyTG9jYWxUcmFuc2Zvcm0udHJhbnNsYXRlM2QoY2VudGVy
T2Zmc2V0WCwgY2VudGVyT2Zmc2V0WSwgLWxheWVyLT5hbmNob3JQb2ludFooKSk7CiAKKyAgICAv
LyBUaGUgY29tYmluZWRUcmFuc2Zvcm0gdGhhdCBnZXRzIGNvbXB1dGVkIGJlbG93IGlzIGVmZmVj
dGl2ZWx5IHRoZSBsYXllcidzIGRyYXdUcmFuc2Zvcm0sIHVubGVzcworICAgIC8vIHRoZSBsYXll
ciBpdHNlbGYgY3JlYXRlcyBhIHJlbmRlclN1cmZhY2UuIEluIHRoYXQgY2FzZSwgdGhlIHJlbmRl
clN1cmZhY2UgcmUtcGFyZW50cyB0aGUgdHJhbnNmb3Jtcy4KICAgICBXZWJUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBjb21iaW5lZFRyYW5zZm9ybSA9IHBhcmVudE1hdHJpeDsKICAgICBjb21iaW5lZFRy
YW5zZm9ybS5tdWx0aXBseShsYXllckxvY2FsVHJhbnNmb3JtKTsKIAorICAgIGlmIChsYXllci0+
Zml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3QoKSkgeworICAgICAgICAvLyBTcGVjaWFs
IGNhc2U6IHRoaXMgbGF5ZXIgaXMgYSBjb21wb3NpdGVkIGZpeGVkLXBvc2l0aW9uIGVsZW1lbnQ7
IHdlIG5lZWQgdG8KKyAgICAgICAgLy8gZXhwbGljaXRseSBjb21wZW5zYXRlIGZvciBhbGwgYW5j
ZXN0b3JzIG5vbnplcm8gc2Nyb2xsRGVsdGFzIHRvIGtlZXAgdGhpcyBsYXllcgorICAgICAgICAv
LyBmaXhlZCBjb3JyZWN0bHkuCisgICAgICAgIGNvbWJpbmVkVHJhbnNmb3JtID0gY3VycmVudFNj
cm9sbENvbXBlbnNhdGlvbk1hdHJpeCAqIGNvbWJpbmVkVHJhbnNmb3JtOworICAgIH0KKwogICAg
IGJvb2wgYW5pbWF0aW5nVHJhbnNmb3JtVG9UYXJnZXQgPSBsYXllci0+dHJhbnNmb3JtSXNBbmlt
YXRpbmcoKTsKICAgICBib29sIGFuaW1hdGluZ1RyYW5zZm9ybVRvU2NyZWVuID0gYW5pbWF0aW5n
VHJhbnNmb3JtVG9UYXJnZXQ7CiAgICAgaWYgKGxheWVyLT5wYXJlbnQoKSkgewpAQCAtNTIzLDYg
KzYyMCw3IEBAIHN0YXRpYyBib29sIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zSW50ZXJuYWwoTGF5
ZXJUeXBlKiBsYXllciwgTGF5ZXJUeXBlKiByb290TGF5CiAgICAgICAgIHJlbmRlclN1cmZhY2Ut
PnNldEJhY2tncm91bmRGaWx0ZXJzKGxheWVyLT5iYWNrZ3JvdW5kRmlsdGVycygpKTsKIAogICAg
ICAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChsYXllcik7CisKICAgICB9IGVsc2Ug
ewogICAgICAgICBsYXllci0+c2V0RHJhd1RyYW5zZm9ybShjb21iaW5lZFRyYW5zZm9ybSk7CiAg
ICAgICAgIGxheWVyLT5zZXREcmF3VHJhbnNmb3JtSXNBbmltYXRpbmcoYW5pbWF0aW5nVHJhbnNm
b3JtVG9UYXJnZXQpOwpAQCAtNjAyLDkgKzcwMCwxNCBAQCBzdGF0aWMgYm9vbCBjYWxjdWxhdGVE
cmF3VHJhbnNmb3Jtc0ludGVybmFsKExheWVyVHlwZSogbGF5ZXIsIExheWVyVHlwZSogcm9vdExh
eQogICAgIGlmICghbGF5ZXJTaG91bGRCZVNraXBwZWQobGF5ZXIpKQogICAgICAgICBkZXNjZW5k
YW50cy5hcHBlbmQobGF5ZXIpOwogCisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggbmV4dFNj
cm9sbENvbXBlbnNhdGlvbk1hdHJpeCA9IGNvbXB1dGVTY3JvbGxDb21wZW5zYXRpb25NYXRyaXhG
b3JDaGlsZHJlbihsYXllciwgcGFyZW50TWF0cml4LCBjdXJyZW50U2Nyb2xsQ29tcGVuc2F0aW9u
TWF0cml4KTs7CisKKyAgICAvLworICAgIC8vIFJlY3Vyc2lvbiBoYXBwZW5zIGhlcmUuCisgICAg
Ly8KICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxheWVyLT5jaGlsZHJlbigpLnNpemUoKTsg
KytpKSB7CiAgICAgICAgIExheWVyVHlwZSogY2hpbGQgPSBsYXllci0+Y2hpbGRyZW4oKVtpXS5n
ZXQoKTsKLSAgICAgICAgYm9vbCBkcmF3c0NvbnRlbnQgPSBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jt
c0ludGVybmFsPExheWVyVHlwZSwgTGF5ZXJMaXN0LCBSZW5kZXJTdXJmYWNlVHlwZSwgTGF5ZXJT
b3J0ZXI+KGNoaWxkLCByb290TGF5ZXIsIHN1YmxheWVyTWF0cml4LCBuZXh0SGllcmFyY2h5TWF0
cml4LCBuZWFyZXN0QW5jZXN0b3JUaGF0TW92ZXNQaXhlbHMsIHJlbmRlclN1cmZhY2VMYXllckxp
c3QsIGRlc2NlbmRhbnRzLCBsYXllclNvcnRlciwgbWF4VGV4dHVyZVNpemUpOworICAgICAgICBi
b29sIGRyYXdzQ29udGVudCA9IGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zSW50ZXJuYWw8TGF5ZXJU
eXBlLCBMYXllckxpc3QsIFJlbmRlclN1cmZhY2VUeXBlLCBMYXllclNvcnRlcj4oY2hpbGQsIHJv
b3RMYXllciwgc3VibGF5ZXJNYXRyaXgsIG5leHRIaWVyYXJjaHlNYXRyaXgsIG5leHRTY3JvbGxD
b21wZW5zYXRpb25NYXRyaXgsIG5lYXJlc3RBbmNlc3RvclRoYXRNb3Zlc1BpeGVscywgcmVuZGVy
U3VyZmFjZUxheWVyTGlzdCwgZGVzY2VuZGFudHMsIGxheWVyU29ydGVyLCBtYXhUZXh0dXJlU2l6
ZSk7CiAKICAgICAgICAgaWYgKGRyYXdzQ29udGVudCkgewogICAgICAgICAgICAgaWYgKGNoaWxk
LT5yZW5kZXJTdXJmYWNlKCkpIHsKQEAgLTc1MCwxMiArODUzLDE0IEBAIHN0YXRpYyB2b2lkIGNh
bGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHNJbnRlcm5hbChjb25zdCBMYXllckxpc3QmIHJl
bmRlclN1cmZhCiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJh
bnNmb3JtcyhMYXllckNocm9taXVtKiBsYXllciwgTGF5ZXJDaHJvbWl1bSogcm9vdExheWVyLCBj
b25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50TWF0cml4LCBjb25zdCBXZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgZnVsbEhpZXJhcmNoeU1hdHJpeCwgVmVjdG9yPFJlZlB0cjxMYXll
ckNocm9taXVtPiA+JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBWZWN0b3I8UmVmUHRyPExheWVy
Q2hyb21pdW0+ID4mIGxheWVyTGlzdCwgaW50IG1heFRleHR1cmVTaXplKQogewotICAgIFdlYkNv
cmU6OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zSW50ZXJuYWw8TGF5ZXJDaHJvbWl1bSwgVmVjdG9y
PFJlZlB0cjxMYXllckNocm9taXVtPiA+LCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0sIHZvaWQ+KGxh
eWVyLCByb290TGF5ZXIsIHBhcmVudE1hdHJpeCwgZnVsbEhpZXJhcmNoeU1hdHJpeCwgMCwgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdCwgbGF5ZXJMaXN0LCAwLCBtYXhUZXh0dXJlU2l6ZSk7CisgICAg
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggc2Nyb2xsQ29tcGVuc2F0aW9uTWF0cml4OworICAgIFdl
YkNvcmU6OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zSW50ZXJuYWw8TGF5ZXJDaHJvbWl1bSwgVmVj
dG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+LCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0sIHZvaWQ+
KGxheWVyLCByb290TGF5ZXIsIHBhcmVudE1hdHJpeCwgZnVsbEhpZXJhcmNoeU1hdHJpeCwgc2Ny
b2xsQ29tcGVuc2F0aW9uTWF0cml4LCAwLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBsYXllckxp
c3QsIDAsIG1heFRleHR1cmVTaXplKTsKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RDb21tb246
OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKENDTGF5ZXJJbXBsKiBsYXllciwgQ0NMYXllckltcGwq
IHJvb3RMYXllciwgY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwg
Y29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGZ1bGxIaWVyYXJjaHlNYXRyaXgsIFZlY3Rv
cjxDQ0xheWVySW1wbCo+JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBWZWN0b3I8Q0NMYXllcklt
cGwqPiYgbGF5ZXJMaXN0LCBDQ0xheWVyU29ydGVyKiBsYXllclNvcnRlciwgaW50IG1heFRleHR1
cmVTaXplKQogewotICAgIFdlYkNvcmU6OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zSW50ZXJuYWw8
Q0NMYXllckltcGwsIFZlY3RvcjxDQ0xheWVySW1wbCo+LCBDQ1JlbmRlclN1cmZhY2UsIENDTGF5
ZXJTb3J0ZXI+KGxheWVyLCByb290TGF5ZXIsIHBhcmVudE1hdHJpeCwgZnVsbEhpZXJhcmNoeU1h
dHJpeCwgMCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgbGF5ZXJMaXN0LCBsYXllclNvcnRlciwg
bWF4VGV4dHVyZVNpemUpOworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHNjcm9sbENvbXBl
bnNhdGlvbk1hdHJpeDsKKyAgICBXZWJDb3JlOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0ludGVy
bmFsPENDTGF5ZXJJbXBsLCBWZWN0b3I8Q0NMYXllckltcGwqPiwgQ0NSZW5kZXJTdXJmYWNlLCBD
Q0xheWVyU29ydGVyPihsYXllciwgcm9vdExheWVyLCBwYXJlbnRNYXRyaXgsIGZ1bGxIaWVyYXJj
aHlNYXRyaXgsIHNjcm9sbENvbXBlbnNhdGlvbk1hdHJpeCwgMCwgcmVuZGVyU3VyZmFjZUxheWVy
TGlzdCwgbGF5ZXJMaXN0LCBsYXllclNvcnRlciwgbWF4VGV4dHVyZVNpemUpOwogfQogCiB2b2lk
IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhW
ZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGNv
bnN0IEZsb2F0UmVjdCYgcm9vdFNjaXNzb3JSZWN0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAKaW5kZXgg
MWQwNjlhNWJlM2FiNTQ5ZjBkZjE4NjE5MmRiYmVlOTk1NmM4M2UxOC4uNjdjNzFjMDQzNTZmOTA4
NDhkODFhZGFjMjIwOTliMTJmZTQxZTgzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwCkBAIC00OCw3
ICs0OCw4IEBAIHVzaW5nIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg7CiAKIG5hbWVz
cGFjZSB7CiAKLXZvaWQgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhMYXllckNocm9taXVt
KiBsYXllciwgY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgY29uc3Qg
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHN1YmxheWVyVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBv
aW50JiBhbmNob3IsIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBJbnRTaXplJiBi
b3VuZHMsIGJvb2wgcHJlc2VydmVzM0QpCit0ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5cGU+Cit2
b2lkIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoTGF5ZXJUeXBlKiBsYXllciwgY29uc3Qg
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgY29uc3QgV2ViVHJhbnNmb3JtYXRp
b25NYXRyaXgmIHN1YmxheWVyVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3IsIGNv
bnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBJbnRTaXplJiBib3VuZHMsIGJvb2wgcHJl
c2VydmVzM0QpCiB7CiAgICAgbGF5ZXItPnNldFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwogICAgIGxh
eWVyLT5zZXRTdWJsYXllclRyYW5zZm9ybShzdWJsYXllclRyYW5zZm9ybSk7CkBAIC01OCw2ICs1
OSwxNiBAQCB2b2lkIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoTGF5ZXJDaHJvbWl1bSog
bGF5ZXIsIGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTQogICAgIGxheWVyLT5zZXRQcmVzZXJ2ZXMz
RChwcmVzZXJ2ZXMzRCk7CiB9CiAKK3ZvaWQgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhM
YXllckNocm9taXVtKiBsYXllciwgY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5z
Zm9ybSwgY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHN1YmxheWVyVHJhbnNmb3JtLCBj
b25zdCBGbG9hdFBvaW50JiBhbmNob3IsIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uLCBjb25z
dCBJbnRTaXplJiBib3VuZHMsIGJvb2wgcHJlc2VydmVzM0QpCit7CisgICAgc2V0TGF5ZXJQcm9w
ZXJ0aWVzRm9yVGVzdGluZzxMYXllckNocm9taXVtPihsYXllciwgdHJhbnNmb3JtLCBzdWJsYXll
clRyYW5zZm9ybSwgYW5jaG9yLCBwb3NpdGlvbiwgYm91bmRzLCBwcmVzZXJ2ZXMzRCk7Cit9CisK
K3ZvaWQgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhDQ0xheWVySW1wbCogbGF5ZXIsIGNv
bnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0sIGNvbnN0IFdlYlRyYW5zZm9y
bWF0aW9uTWF0cml4JiBzdWJsYXllclRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgYW5jaG9y
LCBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbiwgY29uc3QgSW50U2l6ZSYgYm91bmRzLCBib29s
IHByZXNlcnZlczNEKQoreworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rpbmc8Q0NMYXll
ckltcGw+KGxheWVyLCB0cmFuc2Zvcm0sIHN1YmxheWVyVHJhbnNmb3JtLCBhbmNob3IsIHBvc2l0
aW9uLCBib3VuZHMsIHByZXNlcnZlczNEKTsKK30KKwogdm9pZCBleGVjdXRlQ2FsY3VsYXRlRHJh
d1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KExheWVyQ2hyb21pdW0qIHJvb3RMYXllcikKIHsKICAg
ICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKQEAgLTY4LDYgKzc5LDE3
IEBAIHZvaWQgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShMYXll
ckNocm9taXVtKiByb290TGF5ZXIpCiAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxh
dGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKGR1bW15UmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcm9v
dExheWVyLT5yZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCkpOwogfQogCit2b2lkIGV4ZWN1
dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkoQ0NMYXllckltcGwqIHJvb3RM
YXllcikKK3sKKyAgICAvLyBOb3RlOiB0aGlzIHZlcnNpb24gc2tpcHMgbGF5ZXIgc29ydGluZy4K
KyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICBWZWN0b3I8
Q0NMYXllckltcGwqPiBkdW1teVJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAgVmVjdG9yPEND
TGF5ZXJJbXBsKj4gZHVtbXlMYXllckxpc3Q7CisgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUg
PSA1MTI7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jt
cyhyb290TGF5ZXIsIHJvb3RMYXllciwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBk
dW1teVJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCAwLCBkdW1teU1heFRl
eHR1cmVTaXplKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVB
bmRTY2lzc29yUmVjdHMoZHVtbXlSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCByb290TGF5ZXItPnJl
bmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKSk7Cit9CisKIFdlYlRyYW5zZm9ybWF0aW9uTWF0
cml4IHJlbW92ZTNEQ29tcG9uZW50T2ZNYXRyaXgoY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRy
aXgmIG1hdCkKIHsKICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCByZXQgPSBtYXQ7CkBAIC04
MSw2ICsxMDMsMzAgQEAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggcmVtb3ZlM0RDb21wb25lbnRP
Zk1hdHJpeChjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYKICAgICByZXR1cm4gcmV0Owog
fQogCitQYXNzT3duUHRyPENDTGF5ZXJJbXBsPiBjcmVhdGVUcmVlRm9yRml4ZWRQb3NpdGlvblRl
c3RzKCkKK3sKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3Jl
YXRlKDEpOworICAgIE93blB0cjxDQ0xheWVySW1wbD4gY2hpbGQgPSBDQ0xheWVySW1wbDo6Y3Jl
YXRlKDIpOworICAgIE93blB0cjxDQ0xheWVySW1wbD4gZ3JhbmRDaGlsZCA9IENDTGF5ZXJJbXBs
OjpjcmVhdGUoMyk7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBncmVhdEdyYW5kQ2hpbGQgPSBD
Q0xheWVySW1wbDo6Y3JlYXRlKDQpOworCisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggSWRl
bnRpdHlNYXRyaXg7CisgICAgRmxvYXRQb2ludCBhbmNob3IoMCwgMCk7CisgICAgRmxvYXRQb2lu
dCBwb3NpdGlvbigwLCAwKTsKKyAgICBJbnRTaXplIGJvdW5kcygxMDAsIDEwMCk7CisgICAgc2V0
TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhyb290LmdldCgpLCBJZGVudGl0eU1hdHJpeCwgSWRl
bnRpdHlNYXRyaXgsIGFuY2hvciwgcG9zaXRpb24sIGJvdW5kcywgZmFsc2UpOworICAgIHNldExh
eWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGQuZ2V0KCksIElkZW50aXR5TWF0cml4LCBJZGVu
dGl0eU1hdHJpeCwgYW5jaG9yLCBwb3NpdGlvbiwgYm91bmRzLCBmYWxzZSk7CisgICAgc2V0TGF5
ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhncmFuZENoaWxkLmdldCgpLCBJZGVudGl0eU1hdHJpeCwg
SWRlbnRpdHlNYXRyaXgsIGFuY2hvciwgcG9zaXRpb24sIGJvdW5kcywgZmFsc2UpOworICAgIHNl
dExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoZ3JlYXRHcmFuZENoaWxkLmdldCgpLCBJZGVudGl0
eU1hdHJpeCwgSWRlbnRpdHlNYXRyaXgsIGFuY2hvciwgcG9zaXRpb24sIGJvdW5kcywgZmFsc2Up
OworCisgICAgZ3JhbmRDaGlsZC0+YWRkQ2hpbGQoZ3JlYXRHcmFuZENoaWxkLnJlbGVhc2UoKSk7
CisgICAgY2hpbGQtPmFkZENoaWxkKGdyYW5kQ2hpbGQucmVsZWFzZSgpKTsKKyAgICByb290LT5h
ZGRDaGlsZChjaGlsZC5yZWxlYXNlKCkpOworICAgIHJvb3QtPmNyZWF0ZVJlbmRlclN1cmZhY2Uo
KTsKKworICAgIHJldHVybiByb290LnJlbGVhc2UoKTsKK30KKwogY2xhc3MgTGF5ZXJDaHJvbWl1
bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQgOiBwdWJsaWMgTGF5ZXJDaHJvbWl1bSB7CiBwdWJsaWM6
CiAgICAgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKQpAQCAtMTE3Niw2ICsx
MjIyLDQ4NyBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUZvcmNlUmVu
ZGVyU3VyZmFjZSkKICAgICBFWFBFQ1RfRVEocmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCks
IDBVKTsKIH0KIAorVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlTY3JvbGxD
b21wZW5zYXRpb25Gb3JGaXhlZFBvc2l0aW9uTGF5ZXJXaXRoRGlyZWN0Q29udGFpbmVyKQorewor
ICAgIC8vIFRoaXMgdGVzdCBjaGVja3MgZm9yIGNvcnJlY3Qgc2Nyb2xsIGNvbXBlbnNhdGlvbiB3
aGVuIHRoZSBmaXhlZC1wb3NpdGlvbiBjb250YWluZXIKKyAgICAvLyBpcyB0aGUgZGlyZWN0IHBh
cmVudCBvZiB0aGUgZml4ZWQtcG9zaXRpb24gbGF5ZXIuCisKKyAgICBEZWJ1Z1Njb3BlZFNldElt
cGxUaHJlYWQgc2NvcGVkSW1wbFRocmVhZDsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3Qg
PSBjcmVhdGVUcmVlRm9yRml4ZWRQb3NpdGlvblRlc3RzKCk7CisgICAgQ0NMYXllckltcGwqIGNo
aWxkID0gcm9vdC0+Y2hpbGRyZW4oKVswXS5nZXQoKTsKKyAgICBDQ0xheWVySW1wbCogZ3JhbmRD
aGlsZCA9IGNoaWxkLT5jaGlsZHJlbigpWzBdLmdldCgpOworCisgICAgY2hpbGQtPnNldElzQ29u
dGFpbmVyRm9yRml4ZWRQb3NpdGlvbkxheWVycyh0cnVlKTsKKyAgICBncmFuZENoaWxkLT5zZXRG
aXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdCh0cnVlKTsKKworICAgIC8vIENhc2UgMTog
c2Nyb2xsRGVsdGEgb2YgMCwgMAorICAgIGNoaWxkLT5zZXRTY3JvbGxEZWx0YShJbnRTaXplKDAs
IDApKTsKKyAgICBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJv
b3QuZ2V0KCkpOworCisgICAgLy8gVGhlIGV4cGVjdGVkIGRyYXdUcmFuc2Zvcm1zIHdpdGhvdXQg
YW55IHNjcm9sbCBzaG91bGQgc3RpbGwgaW5jbHVkZSBhIHRyYW5zbGF0aW9uIHRvIHRoZSBjZW50
ZXIgb2YgdGhlIGxheWVyIChpLmUuIHRyYW5zbGF0aW9uIGJ5IDUwLCA1MCkuCisgICAgV2ViVHJh
bnNmb3JtYXRpb25NYXRyaXggZXhwZWN0ZWRDaGlsZFRyYW5zZm9ybTsKKyAgICBleHBlY3RlZENo
aWxkVHJhbnNmb3JtLnRyYW5zbGF0ZSg1MCwgNTApOworCisgICAgV2ViVHJhbnNmb3JtYXRpb25N
YXRyaXggZXhwZWN0ZWRHcmFuZENoaWxkVHJhbnNmb3JtID0gZXhwZWN0ZWRDaGlsZFRyYW5zZm9y
bTsKKworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0ZWRDaGlsZFRy
YW5zZm9ybSwgY2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFU
SU9OX01BVFJJWF9FUShleHBlY3RlZEdyYW5kQ2hpbGRUcmFuc2Zvcm0sIGdyYW5kQ2hpbGQtPmRy
YXdUcmFuc2Zvcm0oKSk7CisKKyAgICAvLyBDYXNlIDI6IHNjcm9sbERlbHRhIG9mIDEwLCAxMAor
ICAgIGNoaWxkLT5zZXRTY3JvbGxEZWx0YShJbnRTaXplKDEwLCAxMCkpOworICAgIGV4ZWN1dGVD
YWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocm9vdC5nZXQoKSk7CisKKyAgICAv
LyBIZXJlIHRoZSBjaGlsZCBpcyBhZmZlY3RlZCBieSBzY3JvbGxEZWx0YSwgYnV0IHRoZSBmaXhl
ZCBwb3NpdGlvbiBncmFuZENoaWxkIHNob3VsZCBub3QgYmUgYWZmZWN0ZWQuCisgICAgZXhwZWN0
ZWRDaGlsZFRyYW5zZm9ybS5tYWtlSWRlbnRpdHkoKTsKKyAgICBleHBlY3RlZENoaWxkVHJhbnNm
b3JtLnRyYW5zbGF0ZSg0MCwgNDApOworCisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJ
WF9FUShleHBlY3RlZENoaWxkVHJhbnNmb3JtLCBjaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAg
ICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVkR3JhbmRDaGlsZFRyYW5z
Zm9ybSwgZ3JhbmRDaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKK30KKworVEVTVChDQ0xheWVyVHJl
ZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlTY3JvbGxDb21wZW5zYXRpb25Gb3JGaXhlZFBvc2l0aW9u
TGF5ZXJXaXRoVHJhbnNmb3JtZWREaXJlY3RDb250YWluZXIpCit7CisgICAgLy8gVGhpcyB0ZXN0
IGNoZWNrcyBmb3IgY29ycmVjdCBzY3JvbGwgY29tcGVuc2F0aW9uIHdoZW4gdGhlIGZpeGVkLXBv
c2l0aW9uIGNvbnRhaW5lcgorICAgIC8vIGlzIHRoZSBkaXJlY3QgcGFyZW50IG9mIHRoZSBmaXhl
ZC1wb3NpdGlvbiBsYXllciwgYnV0IHRoYXQgY29udGFpbmVyIGlzIHRyYW5zZm9ybWVkLgorICAg
IC8vIEluIHRoaXMgY2FzZSwgdGhlIGZpeGVkIHBvc2l0aW9uIGVsZW1lbnQgaW5oZXJpdHMgdGhl
IGNvbnRhaW5lcidzIHRyYW5zZm9ybSwKKyAgICAvLyBidXQgdGhlIHNjcm9sbERlbHRhIHRoYXQg
aGFzIHRvIGJlIHVuZG9uZSBzaG91bGQgbm90IGJlIGFmZmVjdGVkIGJ5IHRoYXQgdHJhbnNmb3Jt
LgorICAgIC8vCisgICAgLy8gVHJhbnNmb3JtcyBhcmUgaW4gZ2VuZXJhbCBub24tY29tbXV0YXRp
dmU7IHVzaW5nIHNvbWV0aGluZyBsaWtlIGEgbm9uLXVuaWZvcm0gc2NhbGUKKyAgICAvLyBoZWxw
cyB0byB2ZXJpZnkgdGhhdCB0cmFuc2xhdGlvbnMgYW5kIG5vbi11bmlmb3JtIHNjYWxlcyBhcmUg
YXBwbGllZCBpbiB0aGUgY29ycmVjdAorICAgIC8vIG9yZGVyLgorCisgICAgRGVidWdTY29wZWRT
ZXRJbXBsVGhyZWFkIHNjb3BlZEltcGxUaHJlYWQ7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBy
b290ID0gY3JlYXRlVHJlZUZvckZpeGVkUG9zaXRpb25UZXN0cygpOworICAgIENDTGF5ZXJJbXBs
KiBjaGlsZCA9IHJvb3QtPmNoaWxkcmVuKClbMF0uZ2V0KCk7CisgICAgQ0NMYXllckltcGwqIGdy
YW5kQ2hpbGQgPSBjaGlsZC0+Y2hpbGRyZW4oKVswXS5nZXQoKTsKKworICAgIC8vIFRoaXMgc2Nh
bGUgd2lsbCBjYXVzZSBjaGlsZCBhbmQgZ3JhbmRDaGlsZCB0byBiZSBlZmZlY3RpdmVseSAyMDAg
eCA4MDAgd2l0aCByZXNwZWN0IHRvIHRoZSB0YXJnZXRSZW5kZXJTdXJmYWNlLgorICAgIFdlYlRy
YW5zZm9ybWF0aW9uTWF0cml4IG5vblVuaWZvcm1TY2FsZTsKKyAgICBub25Vbmlmb3JtU2NhbGUu
c2NhbGVOb25Vbmlmb3JtKDIsIDgpOworICAgIGNoaWxkLT5zZXRUcmFuc2Zvcm0obm9uVW5pZm9y
bVNjYWxlKTsKKworICAgIGNoaWxkLT5zZXRJc0NvbnRhaW5lckZvckZpeGVkUG9zaXRpb25MYXll
cnModHJ1ZSk7CisgICAgZ3JhbmRDaGlsZC0+c2V0Rml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJs
ZVJlY3QodHJ1ZSk7CisKKyAgICAvLyBDYXNlIDE6IHNjcm9sbERlbHRhIG9mIDAsIDAKKyAgICBj
aGlsZC0+c2V0U2Nyb2xsRGVsdGEoSW50U2l6ZSgwLCAwKSk7CisgICAgZXhlY3V0ZUNhbGN1bGF0
ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShyb290LmdldCgpKTsKKworICAgIC8vIFRoZSBl
eHBlY3RlZCBkcmF3VHJhbnNmb3JtcyB3aXRob3V0IGFueSBzY3JvbGwgc2hvdWxkIHN0aWxsIGlu
Y2x1ZGUgYSB0cmFuc2xhdGlvbiB0byB0aGUgY2VudGVyIG9mIHRoZSBsYXllciAoaS5lLiB0cmFu
c2xhdGlvbiBieSA1MCwgNTApLgorICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGV4cGVjdGVk
Q2hpbGRUcmFuc2Zvcm07CisgICAgZXhwZWN0ZWRDaGlsZFRyYW5zZm9ybS5tdWx0aXBseShub25V
bmlmb3JtU2NhbGUpOworICAgIGV4cGVjdGVkQ2hpbGRUcmFuc2Zvcm0udHJhbnNsYXRlKDUwLCA1
MCk7CisKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBleHBlY3RlZEdyYW5kQ2hpbGRUcmFu
c2Zvcm0gPSBleHBlY3RlZENoaWxkVHJhbnNmb3JtOworCisgICAgRVhQRUNUX1RSQU5TRk9STUFU
SU9OX01BVFJJWF9FUShleHBlY3RlZENoaWxkVHJhbnNmb3JtLCBjaGlsZC0+ZHJhd1RyYW5zZm9y
bSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVkR3JhbmRD
aGlsZFRyYW5zZm9ybSwgZ3JhbmRDaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKworICAgIC8vIENh
c2UgMjogc2Nyb2xsRGVsdGEgb2YgMTAsIDIwCisgICAgY2hpbGQtPnNldFNjcm9sbERlbHRhKElu
dFNpemUoMTAsIDIwKSk7CisgICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlz
aWJpbGl0eShyb290LmdldCgpKTsKKworICAgIC8vIFRoZSBjaGlsZCBzaG91bGQgYmUgYWZmZWN0
ZWQgYnkgc2Nyb2xsRGVsdGEsIGJ1dCB0aGUgZml4ZWQgcG9zaXRpb24gZ3JhbmRDaGlsZCBzaG91
bGQgbm90IGJlIGFmZmVjdGVkLgorICAgIGV4cGVjdGVkQ2hpbGRUcmFuc2Zvcm0ubWFrZUlkZW50
aXR5KCk7CisgICAgZXhwZWN0ZWRDaGlsZFRyYW5zZm9ybS50cmFuc2xhdGUoLTEwLCAtMjApOyAv
LyBzY3JvbGxEZWx0YQorICAgIGV4cGVjdGVkQ2hpbGRUcmFuc2Zvcm0ubXVsdGlwbHkobm9uVW5p
Zm9ybVNjYWxlKTsKKyAgICBleHBlY3RlZENoaWxkVHJhbnNmb3JtLnRyYW5zbGF0ZSg1MCwgNTAp
OworCisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZENoaWxkVHJh
bnNmb3JtLCBjaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJ
T05fTUFUUklYX0VRKGV4cGVjdGVkR3JhbmRDaGlsZFRyYW5zZm9ybSwgZ3JhbmRDaGlsZC0+ZHJh
d1RyYW5zZm9ybSgpKTsKK30KKworVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJp
ZnlTY3JvbGxDb21wZW5zYXRpb25Gb3JGaXhlZFBvc2l0aW9uTGF5ZXJXaXRoRGlzdGFudENvbnRh
aW5lcikKK3sKKyAgICAvLyBUaGlzIHRlc3QgY2hlY2tzIGZvciBjb3JyZWN0IHNjcm9sbCBjb21w
ZW5zYXRpb24gd2hlbiB0aGUgZml4ZWQtcG9zaXRpb24gY29udGFpbmVyCisgICAgLy8gaXMgTk9U
IHRoZSBkaXJlY3QgcGFyZW50IG9mIHRoZSBmaXhlZC1wb3NpdGlvbiBsYXllci4KKyAgICBEZWJ1
Z1Njb3BlZFNldEltcGxUaHJlYWQgc2NvcGVkSW1wbFRocmVhZDsKKworICAgIE93blB0cjxDQ0xh
eWVySW1wbD4gcm9vdCA9IGNyZWF0ZVRyZWVGb3JGaXhlZFBvc2l0aW9uVGVzdHMoKTsKKyAgICBD
Q0xheWVySW1wbCogY2hpbGQgPSByb290LT5jaGlsZHJlbigpWzBdLmdldCgpOworICAgIENDTGF5
ZXJJbXBsKiBncmFuZENoaWxkID0gY2hpbGQtPmNoaWxkcmVuKClbMF0uZ2V0KCk7CisgICAgQ0NM
YXllckltcGwqIGdyZWF0R3JhbmRDaGlsZCA9IGdyYW5kQ2hpbGQtPmNoaWxkcmVuKClbMF0uZ2V0
KCk7CisKKyAgICBjaGlsZC0+c2V0SXNDb250YWluZXJGb3JGaXhlZFBvc2l0aW9uTGF5ZXJzKHRy
dWUpOworICAgIGdyYW5kQ2hpbGQtPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoOCwgNikpOworICAg
IGdyZWF0R3JhbmRDaGlsZC0+c2V0Rml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3QodHJ1
ZSk7CisKKyAgICAvLyBDYXNlIDE6IHNjcm9sbERlbHRhIG9mIDAsIDAKKyAgICBjaGlsZC0+c2V0
U2Nyb2xsRGVsdGEoSW50U2l6ZSgwLCAwKSk7CisgICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFu
c2Zvcm1zQW5kVmlzaWJpbGl0eShyb290LmdldCgpKTsKKworICAgIFdlYlRyYW5zZm9ybWF0aW9u
TWF0cml4IGV4cGVjdGVkQ2hpbGRUcmFuc2Zvcm07CisgICAgZXhwZWN0ZWRDaGlsZFRyYW5zZm9y
bS50cmFuc2xhdGUoNTAsIDUwKTsKKworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGV4cGVj
dGVkR3JhbmRDaGlsZFRyYW5zZm9ybTsKKyAgICBleHBlY3RlZEdyYW5kQ2hpbGRUcmFuc2Zvcm0u
dHJhbnNsYXRlKDU4LCA1Nik7CisKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBleHBlY3Rl
ZEdyZWF0R3JhbmRDaGlsZFRyYW5zZm9ybSA9IGV4cGVjdGVkR3JhbmRDaGlsZFRyYW5zZm9ybTsK
KworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0ZWRDaGlsZFRyYW5z
Zm9ybSwgY2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9O
X01BVFJJWF9FUShleHBlY3RlZEdyYW5kQ2hpbGRUcmFuc2Zvcm0sIGdyYW5kQ2hpbGQtPmRyYXdU
cmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3Rl
ZEdyZWF0R3JhbmRDaGlsZFRyYW5zZm9ybSwgZ3JlYXRHcmFuZENoaWxkLT5kcmF3VHJhbnNmb3Jt
KCkpOworCisgICAgLy8gQ2FzZSAyOiBzY3JvbGxEZWx0YSBvZiAxMCwgMTAKKyAgICBjaGlsZC0+
c2V0U2Nyb2xsRGVsdGEoSW50U2l6ZSgxMCwgMTApKTsKKyAgICBleGVjdXRlQ2FsY3VsYXRlRHJh
d1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3QuZ2V0KCkpOworCisgICAgLy8gSGVyZSB0aGUg
Y2hpbGQgYW5kIGdyYW5kQ2hpbGQgYXJlIGFmZmVjdGVkIGJ5IHNjcm9sbERlbHRhLCBidXQgdGhl
IGZpeGVkIHBvc2l0aW9uIGdyZWF0R3JhbmRDaGlsZCBzaG91bGQgbm90IGJlIGFmZmVjdGVkLgor
ICAgIGV4cGVjdGVkQ2hpbGRUcmFuc2Zvcm0ubWFrZUlkZW50aXR5KCk7CisgICAgZXhwZWN0ZWRD
aGlsZFRyYW5zZm9ybS50cmFuc2xhdGUoNDAsIDQwKTsKKyAgICBleHBlY3RlZEdyYW5kQ2hpbGRU
cmFuc2Zvcm0ubWFrZUlkZW50aXR5KCk7CisgICAgZXhwZWN0ZWRHcmFuZENoaWxkVHJhbnNmb3Jt
LnRyYW5zbGF0ZSg0OCwgNDYpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEo
ZXhwZWN0ZWRDaGlsZFRyYW5zZm9ybSwgY2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQ
RUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZEdyYW5kQ2hpbGRUcmFuc2Zvcm0s
IGdyYW5kQ2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9O
X01BVFJJWF9FUShleHBlY3RlZEdyZWF0R3JhbmRDaGlsZFRyYW5zZm9ybSwgZ3JlYXRHcmFuZENo
aWxkLT5kcmF3VHJhbnNmb3JtKCkpOworfQorCitURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRl
c3QsIHZlcmlmeVNjcm9sbENvbXBlbnNhdGlvbkZvckZpeGVkUG9zaXRpb25MYXllcldpdGhEaXN0
YW50Q29udGFpbmVyQW5kVHJhbnNmb3JtcykKK3sKKyAgICAvLyBUaGlzIHRlc3QgY2hlY2tzIGZv
ciBjb3JyZWN0IHNjcm9sbCBjb21wZW5zYXRpb24gd2hlbiB0aGUgZml4ZWQtcG9zaXRpb24gY29u
dGFpbmVyCisgICAgLy8gaXMgTk9UIHRoZSBkaXJlY3QgcGFyZW50IG9mIHRoZSBmaXhlZC1wb3Np
dGlvbiBsYXllciwgYW5kIHRoZSBoaWVyYXJjaHkgaGFzIHZhcmlvdXMKKyAgICAvLyB0cmFuc2Zv
cm1zIHRoYXQgaGF2ZSB0byBiZSBwcm9jZXNzZWQgaW4gdGhlIGNvcnJlY3Qgb3JkZXIuCisgICAg
RGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIHNjb3BlZEltcGxUaHJlYWQ7CisKKyAgICBPd25QdHI8
Q0NMYXllckltcGw+IHJvb3QgPSBjcmVhdGVUcmVlRm9yRml4ZWRQb3NpdGlvblRlc3RzKCk7Cisg
ICAgQ0NMYXllckltcGwqIGNoaWxkID0gcm9vdC0+Y2hpbGRyZW4oKVswXS5nZXQoKTsKKyAgICBD
Q0xheWVySW1wbCogZ3JhbmRDaGlsZCA9IGNoaWxkLT5jaGlsZHJlbigpWzBdLmdldCgpOworICAg
IENDTGF5ZXJJbXBsKiBncmVhdEdyYW5kQ2hpbGQgPSBncmFuZENoaWxkLT5jaGlsZHJlbigpWzBd
LmdldCgpOworCisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggcm90YXRpb25BYm91dFo7Cisg
ICAgcm90YXRpb25BYm91dFoucm90YXRlM2QoMCwgMCwgOTApOworICAgIAorICAgIGNoaWxkLT5z
ZXRJc0NvbnRhaW5lckZvckZpeGVkUG9zaXRpb25MYXllcnModHJ1ZSk7CisgICAgY2hpbGQtPnNl
dFRyYW5zZm9ybShyb3RhdGlvbkFib3V0Wik7CisgICAgZ3JhbmRDaGlsZC0+c2V0UG9zaXRpb24o
RmxvYXRQb2ludCg4LCA2KSk7CisgICAgZ3JhbmRDaGlsZC0+c2V0VHJhbnNmb3JtKHJvdGF0aW9u
QWJvdXRaKTsKKyAgICBncmVhdEdyYW5kQ2hpbGQtPnNldEZpeGVkVG9Db250YWluZXJMYXllclZp
c2libGVSZWN0KHRydWUpOyAvLyBncmVhdEdyYW5kQ2hpbGQgaXMgcG9zaXRpb25lZCB1cHNpZGUt
ZG93biB3aXRoIHJlc3BlY3QgdG8gdGhlIHRhcmdldFJlbmRlclN1cmZhY2UKKworICAgIC8vIENh
c2UgMTogc2Nyb2xsRGVsdGEgb2YgMCwgMAorICAgIGNoaWxkLT5zZXRTY3JvbGxEZWx0YShJbnRT
aXplKDAsIDApKTsKKyAgICBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmls
aXR5KHJvb3QuZ2V0KCkpOworCisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggZXhwZWN0ZWRD
aGlsZFRyYW5zZm9ybTsKKyAgICBleHBlY3RlZENoaWxkVHJhbnNmb3JtLm11bHRpcGx5KHJvdGF0
aW9uQWJvdXRaKTsKKyAgICBleHBlY3RlZENoaWxkVHJhbnNmb3JtLnRyYW5zbGF0ZSg1MCwgNTAp
OworCisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggZXhwZWN0ZWRHcmFuZENoaWxkVHJhbnNm
b3JtOworICAgIGV4cGVjdGVkR3JhbmRDaGlsZFRyYW5zZm9ybS5tdWx0aXBseShyb3RhdGlvbkFi
b3V0Wik7IC8vIGNoaWxkJ3MgbG9jYWwgdHJhbnNmb3JtIGlzIGluaGVyaXRlZAorICAgIGV4cGVj
dGVkR3JhbmRDaGlsZFRyYW5zZm9ybS50cmFuc2xhdGUoOCwgNik7IC8vIHRyYW5zbGF0aW9uIGJl
Y2F1c2Ugb2YgcG9zaXRpb24gb2NjdXJzIGJlZm9yZSBsYXllcidzIGxvY2FsIHRyYW5zZm9ybS4K
KyAgICBleHBlY3RlZEdyYW5kQ2hpbGRUcmFuc2Zvcm0ubXVsdGlwbHkocm90YXRpb25BYm91dFop
OyAvLyBncmFuZENoaWxkJ3MgbG9jYWwgdHJhbnNmb3JtCisgICAgZXhwZWN0ZWRHcmFuZENoaWxk
VHJhbnNmb3JtLnRyYW5zbGF0ZSg1MCwgNTApOyAvLyB0cmFuc2xhdGlvbiBiZWNhdXNlIG9mIGhh
bGYtd2lkdGggaGFsZi1oZWlnaHQgb2NjdXJzIGFmdGVyIGxheWVyJ3MgbG9jYWwgdHJhbnNmb3Jt
CisKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBleHBlY3RlZEdyZWF0R3JhbmRDaGlsZFRy
YW5zZm9ybSA9IGV4cGVjdGVkR3JhbmRDaGlsZFRyYW5zZm9ybTsKKworICAgIEVYUEVDVF9UUkFO
U0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0ZWRDaGlsZFRyYW5zZm9ybSwgY2hpbGQtPmRyYXdU
cmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3Rl
ZEdyYW5kQ2hpbGRUcmFuc2Zvcm0sIGdyYW5kQ2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAg
RVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZEdyZWF0R3JhbmRDaGlsZFRy
YW5zZm9ybSwgZ3JlYXRHcmFuZENoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworCisgICAgLy8gQ2Fz
ZSAyOiBzY3JvbGxEZWx0YSBvZiAxMCwgMjAKKyAgICBjaGlsZC0+c2V0U2Nyb2xsRGVsdGEoSW50
U2l6ZSgxMCwgMjApKTsKKyAgICBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNp
YmlsaXR5KHJvb3QuZ2V0KCkpOworCisgICAgLy8gSGVyZSB0aGUgY2hpbGQgYW5kIGdyYW5kQ2hp
bGQgYXJlIGFmZmVjdGVkIGJ5IHNjcm9sbERlbHRhLCBidXQgdGhlIGZpeGVkIHBvc2l0aW9uIGdy
ZWF0R3JhbmRDaGlsZCBzaG91bGQgbm90IGJlIGFmZmVjdGVkLgorICAgIGV4cGVjdGVkQ2hpbGRU
cmFuc2Zvcm0ubWFrZUlkZW50aXR5KCk7CisgICAgZXhwZWN0ZWRDaGlsZFRyYW5zZm9ybS50cmFu
c2xhdGUoLTEwLCAtMjApOyAvLyBzY3JvbGxEZWx0YQorICAgIGV4cGVjdGVkQ2hpbGRUcmFuc2Zv
cm0ubXVsdGlwbHkocm90YXRpb25BYm91dFopOworICAgIGV4cGVjdGVkQ2hpbGRUcmFuc2Zvcm0u
dHJhbnNsYXRlKDUwLCA1MCk7CisKKyAgICBleHBlY3RlZEdyYW5kQ2hpbGRUcmFuc2Zvcm0ubWFr
ZUlkZW50aXR5KCk7CisgICAgZXhwZWN0ZWRHcmFuZENoaWxkVHJhbnNmb3JtLnRyYW5zbGF0ZSgt
MTAsIC0yMCk7IC8vIGNoaWxkJ3Mgc2Nyb2xsRGVsdGEgaXMgaW5oZXJpdGVkCisgICAgZXhwZWN0
ZWRHcmFuZENoaWxkVHJhbnNmb3JtLm11bHRpcGx5KHJvdGF0aW9uQWJvdXRaKTsgLy8gY2hpbGQn
cyBsb2NhbCB0cmFuc2Zvcm0gaXMgaW5oZXJpdGVkCisgICAgZXhwZWN0ZWRHcmFuZENoaWxkVHJh
bnNmb3JtLnRyYW5zbGF0ZSg4LCA2KTsgLy8gdHJhbnNsYXRpb24gYmVjYXVzZSBvZiBwb3NpdGlv
biBvY2N1cnMgYmVmb3JlIGxheWVyJ3MgbG9jYWwgdHJhbnNmb3JtLgorICAgIGV4cGVjdGVkR3Jh
bmRDaGlsZFRyYW5zZm9ybS5tdWx0aXBseShyb3RhdGlvbkFib3V0Wik7IC8vIGdyYW5kQ2hpbGQn
cyBsb2NhbCB0cmFuc2Zvcm0KKyAgICBleHBlY3RlZEdyYW5kQ2hpbGRUcmFuc2Zvcm0udHJhbnNs
YXRlKDUwLCA1MCk7IC8vIHRyYW5zbGF0aW9uIGJlY2F1c2Ugb2YgaGFsZi13aWR0aCBoYWxmLWhl
aWdodCBvY2N1cnMgYWZ0ZXIgbGF5ZXIncyBsb2NhbCB0cmFuc2Zvcm0KKworICAgIEVYUEVDVF9U
UkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0ZWRDaGlsZFRyYW5zZm9ybSwgY2hpbGQtPmRy
YXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBl
Y3RlZEdyYW5kQ2hpbGRUcmFuc2Zvcm0sIGdyYW5kQ2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7Cisg
ICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZEdyZWF0R3JhbmRDaGls
ZFRyYW5zZm9ybSwgZ3JlYXRHcmFuZENoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworfQorCitURVNU
KENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVNjcm9sbENvbXBlbnNhdGlvbkZvckZp
eGVkUG9zaXRpb25MYXllcldpdGhNdWx0aXBsZVNjcm9sbERlbHRhcykKK3sKKyAgICAvLyBUaGlz
IHRlc3QgY2hlY2tzIGZvciBjb3JyZWN0IHNjcm9sbCBjb21wZW5zYXRpb24gd2hlbiB0aGUgZml4
ZWQtcG9zaXRpb24gY29udGFpbmVyCisgICAgLy8gaGFzIG11bHRpcGxlIGFuY2VzdG9ycyB0aGF0
IGhhdmUgbm9uemVybyBzY3JvbGxEZWx0YSBiZWZvcmUgcmVhY2hpbmcgdGhlIHNwYWNlIHdoZXJl
IHRoZSBsYXllciBpcyBmaXhlZC4KKyAgICAvLyBJbiB0aGlzIHRlc3QsIGVhY2ggc2Nyb2xsRGVs
dGEgb2NjdXJzIGluIGEgZGlmZmVyZW50IHNwYWNlIGJlY2F1c2Ugb2YgZWFjaCBsYXllcidzIGxv
Y2FsIHRyYW5zZm9ybS4KKyAgICAvLyBUaGlzIHRlc3QgY2hlY2tzIGZvciBjb3JyZWN0IHNjcm9s
bCBjb21wZW5zYXRpb24gd2hlbiB0aGUgZml4ZWQtcG9zaXRpb24gY29udGFpbmVyCisgICAgLy8g
aXMgTk9UIHRoZSBkaXJlY3QgcGFyZW50IG9mIHRoZSBmaXhlZC1wb3NpdGlvbiBsYXllciwgYW5k
IHRoZSBoaWVyYXJjaHkgaGFzIHZhcmlvdXMKKyAgICAvLyB0cmFuc2Zvcm1zIHRoYXQgaGF2ZSB0
byBiZSBwcm9jZXNzZWQgaW4gdGhlIGNvcnJlY3Qgb3JkZXIuCisgICAgRGVidWdTY29wZWRTZXRJ
bXBsVGhyZWFkIHNjb3BlZEltcGxUaHJlYWQ7CisKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IHJv
b3QgPSBjcmVhdGVUcmVlRm9yRml4ZWRQb3NpdGlvblRlc3RzKCk7CisgICAgQ0NMYXllckltcGwq
IGNoaWxkID0gcm9vdC0+Y2hpbGRyZW4oKVswXS5nZXQoKTsKKyAgICBDQ0xheWVySW1wbCogZ3Jh
bmRDaGlsZCA9IGNoaWxkLT5jaGlsZHJlbigpWzBdLmdldCgpOworICAgIENDTGF5ZXJJbXBsKiBn
cmVhdEdyYW5kQ2hpbGQgPSBncmFuZENoaWxkLT5jaGlsZHJlbigpWzBdLmdldCgpOworCisgICAg
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggcm90YXRpb25BYm91dFo7CisgICAgcm90YXRpb25BYm91
dFoucm90YXRlM2QoMCwgMCwgOTApOworICAgIAorICAgIGNoaWxkLT5zZXRJc0NvbnRhaW5lckZv
ckZpeGVkUG9zaXRpb25MYXllcnModHJ1ZSk7CisgICAgY2hpbGQtPnNldFRyYW5zZm9ybShyb3Rh
dGlvbkFib3V0Wik7CisgICAgZ3JhbmRDaGlsZC0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCg4LCA2
KSk7CisgICAgZ3JhbmRDaGlsZC0+c2V0VHJhbnNmb3JtKHJvdGF0aW9uQWJvdXRaKTsKKyAgICBn
cmVhdEdyYW5kQ2hpbGQtPnNldEZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0KHRydWUp
OyAvLyBncmVhdEdyYW5kQ2hpbGQgaXMgcG9zaXRpb25lZCB1cHNpZGUtZG93biB3aXRoIHJlc3Bl
Y3QgdG8gdGhlIHRhcmdldFJlbmRlclN1cmZhY2UKKworICAgIC8vIENhc2UgMTogc2Nyb2xsRGVs
dGEgb2YgMCwgMAorICAgIGNoaWxkLT5zZXRTY3JvbGxEZWx0YShJbnRTaXplKDAsIDApKTsKKyAg
ICBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3QuZ2V0KCkp
OworCisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggZXhwZWN0ZWRDaGlsZFRyYW5zZm9ybTsK
KyAgICBleHBlY3RlZENoaWxkVHJhbnNmb3JtLm11bHRpcGx5KHJvdGF0aW9uQWJvdXRaKTsKKyAg
ICBleHBlY3RlZENoaWxkVHJhbnNmb3JtLnRyYW5zbGF0ZSg1MCwgNTApOworCisgICAgV2ViVHJh
bnNmb3JtYXRpb25NYXRyaXggZXhwZWN0ZWRHcmFuZENoaWxkVHJhbnNmb3JtOworICAgIGV4cGVj
dGVkR3JhbmRDaGlsZFRyYW5zZm9ybS5tdWx0aXBseShyb3RhdGlvbkFib3V0Wik7IC8vIGNoaWxk
J3MgbG9jYWwgdHJhbnNmb3JtIGlzIGluaGVyaXRlZAorICAgIGV4cGVjdGVkR3JhbmRDaGlsZFRy
YW5zZm9ybS50cmFuc2xhdGUoOCwgNik7IC8vIHRyYW5zbGF0aW9uIGJlY2F1c2Ugb2YgcG9zaXRp
b24gb2NjdXJzIGJlZm9yZSBsYXllcidzIGxvY2FsIHRyYW5zZm9ybS4KKyAgICBleHBlY3RlZEdy
YW5kQ2hpbGRUcmFuc2Zvcm0ubXVsdGlwbHkocm90YXRpb25BYm91dFopOyAvLyBncmFuZENoaWxk
J3MgbG9jYWwgdHJhbnNmb3JtCisgICAgZXhwZWN0ZWRHcmFuZENoaWxkVHJhbnNmb3JtLnRyYW5z
bGF0ZSg1MCwgNTApOyAvLyB0cmFuc2xhdGlvbiBiZWNhdXNlIG9mIGhhbGYtd2lkdGggaGFsZi1o
ZWlnaHQgb2NjdXJzIGFmdGVyIGxheWVyJ3MgbG9jYWwgdHJhbnNmb3JtCisKKyAgICBXZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBleHBlY3RlZEdyZWF0R3JhbmRDaGlsZFRyYW5zZm9ybSA9IGV4cGVj
dGVkR3JhbmRDaGlsZFRyYW5zZm9ybTsKKworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRS
SVhfRVEoZXhwZWN0ZWRDaGlsZFRyYW5zZm9ybSwgY2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7Cisg
ICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZEdyYW5kQ2hpbGRUcmFu
c2Zvcm0sIGdyYW5kQ2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9S
TUFUSU9OX01BVFJJWF9FUShleHBlY3RlZEdyZWF0R3JhbmRDaGlsZFRyYW5zZm9ybSwgZ3JlYXRH
cmFuZENoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworCisgICAgLy8gQ2FzZSAyOiBzY3JvbGxEZWx0
YSBvZiAxMCwgMjAKKyAgICBjaGlsZC0+c2V0U2Nyb2xsRGVsdGEoSW50U2l6ZSgxMCwgMCkpOwor
ICAgIGdyYW5kQ2hpbGQtPnNldFNjcm9sbERlbHRhKEludFNpemUoNSwgMCkpOworICAgIGV4ZWN1
dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocm9vdC5nZXQoKSk7CisKKyAg
ICAvLyBIZXJlIHRoZSBjaGlsZCBhbmQgZ3JhbmRDaGlsZCBhcmUgYWZmZWN0ZWQgYnkgc2Nyb2xs
RGVsdGEsIGJ1dCB0aGUgZml4ZWQgcG9zaXRpb24gZ3JlYXRHcmFuZENoaWxkIHNob3VsZCBub3Qg
YmUgYWZmZWN0ZWQuCisgICAgZXhwZWN0ZWRDaGlsZFRyYW5zZm9ybS5tYWtlSWRlbnRpdHkoKTsK
KyAgICBleHBlY3RlZENoaWxkVHJhbnNmb3JtLnRyYW5zbGF0ZSgtMTAsIDApOyAvLyBzY3JvbGxE
ZWx0YQorICAgIGV4cGVjdGVkQ2hpbGRUcmFuc2Zvcm0ubXVsdGlwbHkocm90YXRpb25BYm91dFop
OworICAgIGV4cGVjdGVkQ2hpbGRUcmFuc2Zvcm0udHJhbnNsYXRlKDUwLCA1MCk7CisKKyAgICBl
eHBlY3RlZEdyYW5kQ2hpbGRUcmFuc2Zvcm0ubWFrZUlkZW50aXR5KCk7CisgICAgZXhwZWN0ZWRH
cmFuZENoaWxkVHJhbnNmb3JtLnRyYW5zbGF0ZSgtMTAsIDApOyAvLyBjaGlsZCdzIHNjcm9sbERl
bHRhIGlzIGluaGVyaXRlZAorICAgIGV4cGVjdGVkR3JhbmRDaGlsZFRyYW5zZm9ybS5tdWx0aXBs
eShyb3RhdGlvbkFib3V0Wik7IC8vIGNoaWxkJ3MgbG9jYWwgdHJhbnNmb3JtIGlzIGluaGVyaXRl
ZAorICAgIGV4cGVjdGVkR3JhbmRDaGlsZFRyYW5zZm9ybS50cmFuc2xhdGUoLTUsIDApOyAvLyBn
cmFuZENoaWxkJ3Mgc2Nyb2xsRGVsdGEKKyAgICBleHBlY3RlZEdyYW5kQ2hpbGRUcmFuc2Zvcm0u
dHJhbnNsYXRlKDgsIDYpOyAvLyB0cmFuc2xhdGlvbiBiZWNhdXNlIG9mIHBvc2l0aW9uIG9jY3Vy
cyBiZWZvcmUgbGF5ZXIncyBsb2NhbCB0cmFuc2Zvcm0uCisgICAgZXhwZWN0ZWRHcmFuZENoaWxk
VHJhbnNmb3JtLm11bHRpcGx5KHJvdGF0aW9uQWJvdXRaKTsgLy8gZ3JhbmRDaGlsZCdzIGxvY2Fs
IHRyYW5zZm9ybQorICAgIGV4cGVjdGVkR3JhbmRDaGlsZFRyYW5zZm9ybS50cmFuc2xhdGUoNTAs
IDUwKTsgLy8gdHJhbnNsYXRpb24gYmVjYXVzZSBvZiBoYWxmLXdpZHRoIGhhbGYtaGVpZ2h0IG9j
Y3VycyBhZnRlciBsYXllcidzIGxvY2FsIHRyYW5zZm9ybQorCisgICAgRVhQRUNUX1RSQU5TRk9S
TUFUSU9OX01BVFJJWF9FUShleHBlY3RlZENoaWxkVHJhbnNmb3JtLCBjaGlsZC0+ZHJhd1RyYW5z
Zm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVkR3Jh
bmRDaGlsZFRyYW5zZm9ybSwgZ3JhbmRDaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBF
Q1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVkR3JlYXRHcmFuZENoaWxkVHJhbnNm
b3JtLCBncmVhdEdyYW5kQ2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7Cit9CisKK1RFU1QoQ0NMYXll
clRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5U2Nyb2xsQ29tcGVuc2F0aW9uRm9yRml4ZWRQb3Np
dGlvbkxheWVyV2l0aEludGVybWVkaWF0ZVN1cmZhY2VBbmRUcmFuc2Zvcm1zKQoreworICAgIC8v
IFRoaXMgdGVzdCBjaGVja3MgZm9yIGNvcnJlY3Qgc2Nyb2xsIGNvbXBlbnNhdGlvbiB3aGVuIHRo
ZSBmaXhlZC1wb3NpdGlvbiBjb250YWluZXIKKyAgICAvLyBjb250cmlidXRlcyB0byBhIGRpZmZl
cmVudCByZW5kZXJTdXJmYWNlIHRoYW4gdGhlIGZpeGVkLXBvc2l0aW9uIGxheWVyLiBJbiB0aGlz
CisgICAgLy8gY2FzZSwgdGhlIHN1cmZhY2Ugb3JpZ2luVHJhbnNmb3JtcyBhbHNvIGhhdmUgdG8g
YmUgYWNjb3VudGVkIGZvciB3aGVuIGNoZWNraW5nIHRoZQorICAgIC8vIHNjcm9sbERlbHRhLgor
ICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBzY29wZWRJbXBsVGhyZWFkOworCisgICAgT3du
UHRyPENDTGF5ZXJJbXBsPiByb290ID0gY3JlYXRlVHJlZUZvckZpeGVkUG9zaXRpb25UZXN0cygp
OworICAgIENDTGF5ZXJJbXBsKiBjaGlsZCA9IHJvb3QtPmNoaWxkcmVuKClbMF0uZ2V0KCk7Cisg
ICAgQ0NMYXllckltcGwqIGdyYW5kQ2hpbGQgPSBjaGlsZC0+Y2hpbGRyZW4oKVswXS5nZXQoKTsK
KyAgICBDQ0xheWVySW1wbCogZ3JlYXRHcmFuZENoaWxkID0gZ3JhbmRDaGlsZC0+Y2hpbGRyZW4o
KVswXS5nZXQoKTsKKworICAgIGNoaWxkLT5zZXRJc0NvbnRhaW5lckZvckZpeGVkUG9zaXRpb25M
YXllcnModHJ1ZSk7CisgICAgZ3JhbmRDaGlsZC0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCg4LCA2
KSk7CisgICAgZ3JhbmRDaGlsZC0+c2V0Rm9yY2VSZW5kZXJTdXJmYWNlKHRydWUpOworICAgIGdy
ZWF0R3JhbmRDaGlsZC0+c2V0Rml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3QodHJ1ZSk7
CisgICAgZ3JlYXRHcmFuZENoaWxkLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisKKyAgICBXZWJU
cmFuc2Zvcm1hdGlvbk1hdHJpeCByb3RhdGlvbkFib3V0WjsKKyAgICByb3RhdGlvbkFib3V0Wi5y
b3RhdGUzZCgwLCAwLCA5MCk7CisgICAgZ3JhbmRDaGlsZC0+c2V0VHJhbnNmb3JtKHJvdGF0aW9u
QWJvdXRaKTsKKyAgICAKKyAgICAvLyBDYXNlIDE6IHNjcm9sbERlbHRhIG9mIDAsIDAKKyAgICBj
aGlsZC0+c2V0U2Nyb2xsRGVsdGEoSW50U2l6ZSgwLCAwKSk7CisgICAgZXhlY3V0ZUNhbGN1bGF0
ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShyb290LmdldCgpKTsKKyAgICAgICAgCisgICAg
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggZXhwZWN0ZWRDaGlsZFRyYW5zZm9ybTsKKyAgICBleHBl
Y3RlZENoaWxkVHJhbnNmb3JtLnRyYW5zbGF0ZSg1MCwgNTApOworICAgIFdlYlRyYW5zZm9ybWF0
aW9uTWF0cml4IGV4cGVjdGVkU3VyZmFjZU9yaWdpblRyYW5zZm9ybTsKKyAgICBleHBlY3RlZFN1
cmZhY2VPcmlnaW5UcmFuc2Zvcm0udHJhbnNsYXRlKDgsIDYpOworICAgIGV4cGVjdGVkU3VyZmFj
ZU9yaWdpblRyYW5zZm9ybS5tdWx0aXBseShyb3RhdGlvbkFib3V0Wik7CisgICAgV2ViVHJhbnNm
b3JtYXRpb25NYXRyaXggZXhwZWN0ZWRHcmFuZENoaWxkVHJhbnNmb3JtOworICAgIGV4cGVjdGVk
R3JhbmRDaGlsZFRyYW5zZm9ybS50cmFuc2xhdGUoNTAsIDUwKTsKKyAgICBXZWJUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBleHBlY3RlZEdyZWF0R3JhbmRDaGlsZFRyYW5zZm9ybTsKKyAgICBleHBlY3Rl
ZEdyZWF0R3JhbmRDaGlsZFRyYW5zZm9ybS50cmFuc2xhdGUoNTAsIDUwKTsKKyAgICBBU1NFUlRf
VFJVRShncmFuZENoaWxkLT5yZW5kZXJTdXJmYWNlKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1B
VElPTl9NQVRSSVhfRVEoZXhwZWN0ZWRDaGlsZFRyYW5zZm9ybSwgY2hpbGQtPmRyYXdUcmFuc2Zv
cm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZFN1cmZh
Y2VPcmlnaW5UcmFuc2Zvcm0sIGdyYW5kQ2hpbGQtPnJlbmRlclN1cmZhY2UoKS0+b3JpZ2luVHJh
bnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0ZWRH
cmFuZENoaWxkVHJhbnNmb3JtLCBncmFuZENoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVY
UEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0ZWRHcmVhdEdyYW5kQ2hpbGRUcmFu
c2Zvcm0sIGdyZWF0R3JhbmRDaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKworICAgIC8vIENhc2Ug
Mjogc2Nyb2xsRGVsdGEgb2YgMTAsIDMwCisgICAgY2hpbGQtPnNldFNjcm9sbERlbHRhKEludFNp
emUoMTAsIDMwKSk7CisgICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJp
bGl0eShyb290LmdldCgpKTsKKyAgICAgICAgCisgICAgLy8gSGVyZSB0aGUgZ3JhbmRDaGlsZCBy
ZW1haW5zIHVuY2hhbmdlZCwgYmVjYXVzZSBpdCBzY3JvbGxzIGFsb25nIHdpdGggdGhlCisgICAg
Ly8gcmVuZGVyU3VyZmFjZSwgYW5kIHRoZSB0cmFuc2xhdGlvbiBpcyBhY3R1YWxseSBpbiB0aGUg
cmVuZGVyU3VyZmFjZS4gQnV0LCB0aGUgZml4ZWQKKyAgICAvLyBwb3NpdGlvbiBncmVhdEdyYW5k
Q2hpbGQgaXMgbW9yZSBhd2t3YXJkOiBpdHMgYWN0dWFsbHkgYmVpbmcgZHJhd24gd2l0aCByZXNw
ZWN0IHRvCisgICAgLy8gdGhlIHJlbmRlclN1cmZhY2UsIGJ1dCBpdCBuZWVkcyB0byByZW1haW4g
Zml4ZWQgd2l0aCByZXNlcGN0IHRvIGEgY29udGFpbmVyIGJleW9uZAorICAgIC8vIHRoYXQgc3Vy
ZmFjZS4gU28sIHRoZSBuZXQgcmVzdWx0IGlzIHRoYXQsIHVubGlrZSBwcmV2aW91cyB0ZXN0cyB3
aGVyZSB0aGUgZml4ZWQKKyAgICAvLyBwb3NpdGlvbiBsYXllcidzIHRyYW5zZm9ybSByZW1haW5z
IHVuY2hhbmdlZCwgaGVyZSB0aGUgZml4ZWQgcG9zaXRpb24gbGF5ZXIncworICAgIC8vIHRyYW5z
Zm9ybSBleHBsaWNpdGx5IGNvbnRhaW5zIHRoZSB0cmFuc2xhdGlvbiB0aGF0IGNhbmNlbHMgb3V0
IHRoZSBzY3JvbGwuCisgICAgZXhwZWN0ZWRDaGlsZFRyYW5zZm9ybS5tYWtlSWRlbnRpdHkoKTsK
KyAgICBleHBlY3RlZENoaWxkVHJhbnNmb3JtLnRyYW5zbGF0ZSgtMTAsIC0zMCk7IC8vIHNjcm9s
bERlbHRhCisgICAgZXhwZWN0ZWRDaGlsZFRyYW5zZm9ybS50cmFuc2xhdGUoNTAsIDUwKTsKKwor
ICAgIGV4cGVjdGVkU3VyZmFjZU9yaWdpblRyYW5zZm9ybS5tYWtlSWRlbnRpdHkoKTsKKyAgICBl
eHBlY3RlZFN1cmZhY2VPcmlnaW5UcmFuc2Zvcm0udHJhbnNsYXRlKC0xMCwgLTMwKTsgLy8gc2Ny
b2xsRGVsdGEKKyAgICBleHBlY3RlZFN1cmZhY2VPcmlnaW5UcmFuc2Zvcm0udHJhbnNsYXRlKDgs
IDYpOworICAgIGV4cGVjdGVkU3VyZmFjZU9yaWdpblRyYW5zZm9ybS5tdWx0aXBseShyb3RhdGlv
bkFib3V0Wik7CisKKyAgICAvLyBUaGUgcm90YXRpb24gYW5kIGl0cyBpbnZlcnNlIGFyZSBuZWVk
ZWQgdG8gcGxhY2UgdGhlIHNjcm9sbERlbHRhIGNvbXBlbnNhdGlvbiBpbgorICAgIC8vIHRoZSBj
b3JyZWN0IHNwYWNlLiBUaGlzIHRlc3Qgd2lsbCBmYWlsIGlmIHRoZSByb3RhdGlvbi9pbnZlcnNl
IGFyZSBiYWNrd2FyZHMsIHRvbywKKyAgICAvLyBzbyBpdCByZXF1aXJlcyBwZXJmZWN0IG9yZGVy
IG9mIG9wZXJhdGlvbnMuCisgICAgZXhwZWN0ZWRHcmVhdEdyYW5kQ2hpbGRUcmFuc2Zvcm0ubWFr
ZUlkZW50aXR5KCk7CisgICAgZXhwZWN0ZWRHcmVhdEdyYW5kQ2hpbGRUcmFuc2Zvcm0ubXVsdGlw
bHkocm90YXRpb25BYm91dFouaW52ZXJzZSgpKTsKKyAgICBleHBlY3RlZEdyZWF0R3JhbmRDaGls
ZFRyYW5zZm9ybS50cmFuc2xhdGUoMTAsIDMwKTsgLy8gZXhwbGljaXQgY2FuY2VsaW5nIG91dCB0
aGUgc2Nyb2xsRGVsdGEgdGhhdCBnZXRzIGVtYmVkZGVkIGluIHRoZSBmaXhlZCBwb3NpdGlvbiBs
YXllcidzIHN1cmZhY2UuCisgICAgZXhwZWN0ZWRHcmVhdEdyYW5kQ2hpbGRUcmFuc2Zvcm0ubXVs
dGlwbHkocm90YXRpb25BYm91dFopOworICAgIGV4cGVjdGVkR3JlYXRHcmFuZENoaWxkVHJhbnNm
b3JtLnRyYW5zbGF0ZSg1MCwgNTApOworCisgICAgQVNTRVJUX1RSVUUoZ3JhbmRDaGlsZC0+cmVu
ZGVyU3VyZmFjZSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVj
dGVkQ2hpbGRUcmFuc2Zvcm0sIGNoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9U
UkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0ZWRTdXJmYWNlT3JpZ2luVHJhbnNmb3JtLCBn
cmFuZENoaWxkLT5yZW5kZXJTdXJmYWNlKCktPm9yaWdpblRyYW5zZm9ybSgpKTsKKyAgICBFWFBF
Q1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVkR3JhbmRDaGlsZFRyYW5zZm9ybSwg
Z3JhbmRDaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05f
TUFUUklYX0VRKGV4cGVjdGVkR3JlYXRHcmFuZENoaWxkVHJhbnNmb3JtLCBncmVhdEdyYW5kQ2hp
bGQtPmRyYXdUcmFuc2Zvcm0oKSk7Cit9CisKK1RFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVz
dCwgdmVyaWZ5U2Nyb2xsQ29tcGVuc2F0aW9uRm9yRml4ZWRQb3NpdGlvbkxheWVyV2l0aENvbnRh
aW5lckxheWVyVGhhdEhhc1N1cmZhY2UpCit7CisgICAgLy8gVGhpcyB0ZXN0IGNoZWNrcyBmb3Ig
Y29ycmVjdCBzY3JvbGwgY29tcGVuc2F0aW9uIHdoZW4gdGhlIGZpeGVkLXBvc2l0aW9uIGNvbnRh
aW5lcgorICAgIC8vIGl0c2VsZiBoYXMgYSByZW5kZXJTdXJmYWNlLiBJbiB0aGlzIGNhc2UsIHRo
ZSBjb250YWluZXIgbGF5ZXIgc2hvdWxkIGJlIHRyZWF0ZWQKKyAgICAvLyBsaWtlIGEgbGF5ZXIg
dGhhdCBjb250cmlidXRlcyB0byBhIHRhcmdldFJlbmRlclN1cmZhY2UsIGFuZCB0aGF0IHRhcmdl
dFJlbmRlclN1cmZhY2UKKyAgICAvLyBpcyBjb21wbGV0ZWx5IGlycmVsZXZhbnQ7IGl0IHNob3Vs
ZCBub3QgYWZmZWN0IHRoZSBzY3JvbGwgY29tcGVuc2F0aW9uLgorICAgIERlYnVnU2NvcGVkU2V0
SW1wbFRocmVhZCBzY29wZWRJbXBsVGhyZWFkOworCisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBy
b290ID0gY3JlYXRlVHJlZUZvckZpeGVkUG9zaXRpb25UZXN0cygpOworICAgIENDTGF5ZXJJbXBs
KiBjaGlsZCA9IHJvb3QtPmNoaWxkcmVuKClbMF0uZ2V0KCk7CisgICAgQ0NMYXllckltcGwqIGdy
YW5kQ2hpbGQgPSBjaGlsZC0+Y2hpbGRyZW4oKVswXS5nZXQoKTsKKworICAgIGNoaWxkLT5zZXRJ
c0NvbnRhaW5lckZvckZpeGVkUG9zaXRpb25MYXllcnModHJ1ZSk7CisgICAgY2hpbGQtPnNldEZv
cmNlUmVuZGVyU3VyZmFjZSh0cnVlKTsKKyAgICBncmFuZENoaWxkLT5zZXRGaXhlZFRvQ29udGFp
bmVyTGF5ZXJWaXNpYmxlUmVjdCh0cnVlKTsKKyAgICBncmFuZENoaWxkLT5zZXREcmF3c0NvbnRl
bnQodHJ1ZSk7CisKKyAgICAvLyBDYXNlIDE6IHNjcm9sbERlbHRhIG9mIDAsIDAKKyAgICBjaGls
ZC0+c2V0U2Nyb2xsRGVsdGEoSW50U2l6ZSgwLCAwKSk7CisgICAgZXhlY3V0ZUNhbGN1bGF0ZURy
YXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShyb290LmdldCgpKTsKKworICAgIC8vIFRoZSBleHBl
Y3RlZCBkcmF3IHRyYW5zZm9ybXMgd2l0aG91dCBhbnkgc2Nyb2xsIHNob3VsZCBzdGlsbCBpbmNs
dWRlIGEgdHJhbnNsYXRpb24gdG8gdGhlIGNlbnRlciBvZiB0aGUgbGF5ZXIgKGkuZS4gdHJhbnNs
YXRpb24gYnkgNTAsIDUwKS4KKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBleHBlY3RlZFN1
cmZhY2VPcmlnaW5UcmFuc2Zvcm07CisgICAgZXhwZWN0ZWRTdXJmYWNlT3JpZ2luVHJhbnNmb3Jt
LnRyYW5zbGF0ZSgwLCAwKTsKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBleHBlY3RlZENo
aWxkVHJhbnNmb3JtOworICAgIGV4cGVjdGVkQ2hpbGRUcmFuc2Zvcm0udHJhbnNsYXRlKDUwLCA1
MCk7CisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggZXhwZWN0ZWRHcmFuZENoaWxkVHJhbnNm
b3JtOworICAgIGV4cGVjdGVkR3JhbmRDaGlsZFRyYW5zZm9ybS50cmFuc2xhdGUoNTAsIDUwKTsK
KyAgICBBU1NFUlRfVFJVRShjaGlsZC0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBFWFBFQ1RfVFJB
TlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVkU3VyZmFjZU9yaWdpblRyYW5zZm9ybSwgY2hp
bGQtPnJlbmRlclN1cmZhY2UoKS0+b3JpZ2luVHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFO
U0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0ZWRDaGlsZFRyYW5zZm9ybSwgY2hpbGQtPmRyYXdU
cmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3Rl
ZEdyYW5kQ2hpbGRUcmFuc2Zvcm0sIGdyYW5kQ2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisKKyAg
ICAvLyBDYXNlIDI6IHNjcm9sbERlbHRhIG9mIDEwLCAxMAorICAgIGNoaWxkLT5zZXRTY3JvbGxE
ZWx0YShJbnRTaXplKDEwLCAxMCkpOworICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jt
c0FuZFZpc2liaWxpdHkocm9vdC5nZXQoKSk7CisKKyAgICAvLyBUaGUgc3VyZmFjZSBpcyB0cmFu
c2xhdGVkIGJ5IHNjcm9sbERlbHRhLCB0aGUgY2hpbGQgdHJhbnNmb3JtIGRvZXNuJ3QgY2hhbmdl
CisgICAgLy8gYmVjYXVzZSBpdCBzY3JvbGxzIGFsb25nIHdpdGggdGhlIHN1cmZhY2UsIGJ1dCB0
aGUgZml4ZWQgcG9zaXRpb24gZ3JhbmRDaGlsZAorICAgIC8vIG5lZWRzIHRvIGNvbXBlbnNhdGUg
Zm9yIHRoZSBzY3JvbGwgdHJhbnNsYXRpb24uCisgICAgZXhwZWN0ZWRTdXJmYWNlT3JpZ2luVHJh
bnNmb3JtLm1ha2VJZGVudGl0eSgpOworICAgIGV4cGVjdGVkU3VyZmFjZU9yaWdpblRyYW5zZm9y
bS50cmFuc2xhdGUoLTEwLCAtMTApOworICAgIGV4cGVjdGVkR3JhbmRDaGlsZFRyYW5zZm9ybS5t
YWtlSWRlbnRpdHkoKTsKKyAgICBleHBlY3RlZEdyYW5kQ2hpbGRUcmFuc2Zvcm0udHJhbnNsYXRl
KDYwLCA2MCk7CisgICAgQVNTRVJUX1RSVUUoY2hpbGQtPnJlbmRlclN1cmZhY2UoKSk7CisgICAg
RVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZFN1cmZhY2VPcmlnaW5UcmFu
c2Zvcm0sIGNoaWxkLT5yZW5kZXJTdXJmYWNlKCktPm9yaWdpblRyYW5zZm9ybSgpKTsKKyAgICBF
WFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVkQ2hpbGRUcmFuc2Zvcm0sIGNo
aWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhf
RVEoZXhwZWN0ZWRHcmFuZENoaWxkVHJhbnNmb3JtLCBncmFuZENoaWxkLT5kcmF3VHJhbnNmb3Jt
KCkpOworfQorCitURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVNjcm9sbENv
bXBlbnNhdGlvbkZvckZpeGVkUG9zaXRpb25MYXllclRoYXRJc0Fsc29GaXhlZFBvc2l0aW9uQ29u
dGFpbmVyKQoreworICAgIC8vIFRoaXMgdGVzdCBjaGVja3MgdGhlIHNjZW5hcmlvIHdoZXJlIGEg
Zml4ZWQtcG9zaXRpb24gbGF5ZXIgYWxzbyBoYXBwZW5zIHRvIGJlIGEKKyAgICAvLyBjb250YWlu
ZXIgaXRzZWxmIGZvciBhIGRlc2NlbmRhbnQgZml4ZWQgcG9zaXRpb24gbGF5ZXIuIEluIHBhcnRp
Y3VsYXIsIHRoZSBsYXllcgorICAgIC8vIHNob3VsZCBub3QgYWNjaWRlbnRhbGx5IGJlIGZpeGVk
IHRvIGl0c2VsZi4KKyAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgc2NvcGVkSW1wbFRocmVh
ZDsKKworICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IGNyZWF0ZVRyZWVGb3JGaXhlZFBv
c2l0aW9uVGVzdHMoKTsKKyAgICBDQ0xheWVySW1wbCogY2hpbGQgPSByb290LT5jaGlsZHJlbigp
WzBdLmdldCgpOworICAgIENDTGF5ZXJJbXBsKiBncmFuZENoaWxkID0gY2hpbGQtPmNoaWxkcmVu
KClbMF0uZ2V0KCk7CisKKyAgICBjaGlsZC0+c2V0SXNDb250YWluZXJGb3JGaXhlZFBvc2l0aW9u
TGF5ZXJzKHRydWUpOworICAgIGdyYW5kQ2hpbGQtPnNldEZpeGVkVG9Db250YWluZXJMYXllclZp
c2libGVSZWN0KHRydWUpOworCisgICAgLy8gVGhpcyBzaG91bGQgbm90IGNvbmZ1c2UgdGhlIGdy
YW5kQ2hpbGQuIElmIGNvcnJlY3QsIHRoZSBncmFuZENoaWxkIHdvdWxkIHN0aWxsIGJlIGNvbnNp
ZGVyZWQgZml4ZWQgdG8gaXRzIGNvbnRhaW5lciAoaS5lLiAiY2hpbGQiKS4KKyAgICBncmFuZENo
aWxkLT5zZXRJc0NvbnRhaW5lckZvckZpeGVkUG9zaXRpb25MYXllcnModHJ1ZSk7CisKKyAgICAv
LyBDYXNlIDE6IHNjcm9sbERlbHRhIG9mIDAsIDAKKyAgICBjaGlsZC0+c2V0U2Nyb2xsRGVsdGEo
SW50U2l6ZSgwLCAwKSk7CisgICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlz
aWJpbGl0eShyb290LmdldCgpKTsKKworICAgIC8vIFRoZSBleHBlY3RlZCBkcmF3IHRyYW5zZm9y
bXMgd2l0aG91dCBhbnkgc2Nyb2xsIHNob3VsZCBzdGlsbCBpbmNsdWRlIGEgdHJhbnNsYXRpb24g
dG8gdGhlIGNlbnRlciBvZiB0aGUgbGF5ZXIgKGkuZS4gdHJhbnNsYXRpb24gYnkgNTAsIDUwKS4K
KyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBleHBlY3RlZENoaWxkVHJhbnNmb3JtOworICAg
IGV4cGVjdGVkQ2hpbGRUcmFuc2Zvcm0udHJhbnNsYXRlKDUwLCA1MCk7CisgICAgV2ViVHJhbnNm
b3JtYXRpb25NYXRyaXggZXhwZWN0ZWRHcmFuZENoaWxkVHJhbnNmb3JtOworICAgIGV4cGVjdGVk
R3JhbmRDaGlsZFRyYW5zZm9ybS50cmFuc2xhdGUoNTAsIDUwKTsKKyAgICBFWFBFQ1RfVFJBTlNG
T1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVkQ2hpbGRUcmFuc2Zvcm0sIGNoaWxkLT5kcmF3VHJh
bnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0ZWRH
cmFuZENoaWxkVHJhbnNmb3JtLCBncmFuZENoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworCisgICAg
Ly8gQ2FzZSAyOiBzY3JvbGxEZWx0YSBvZiAxMCwgMTAKKyAgICBjaGlsZC0+c2V0U2Nyb2xsRGVs
dGEoSW50U2l6ZSgxMCwgMTApKTsKKyAgICBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNB
bmRWaXNpYmlsaXR5KHJvb3QuZ2V0KCkpOworCisgICAgLy8gSGVyZSB0aGUgY2hpbGQgaXMgYWZm
ZWN0ZWQgYnkgc2Nyb2xsRGVsdGEsIGJ1dCB0aGUgZml4ZWQgcG9zaXRpb24gZ3JhbmRDaGlsZCBz
aG91bGQgbm90IGJlIGFmZmVjdGVkLgorICAgIGV4cGVjdGVkQ2hpbGRUcmFuc2Zvcm0ubWFrZUlk
ZW50aXR5KCk7CisgICAgZXhwZWN0ZWRDaGlsZFRyYW5zZm9ybS50cmFuc2xhdGUoNDAsIDQwKTsK
KyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVkQ2hpbGRUcmFuc2Zv
cm0sIGNoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9N
QVRSSVhfRVEoZXhwZWN0ZWRHcmFuZENoaWxkVHJhbnNmb3JtLCBncmFuZENoaWxkLT5kcmF3VHJh
bnNmb3JtKCkpOworfQorCitURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVNj
cm9sbENvbXBlbnNhdGlvbkZvckZpeGVkUG9zaXRpb25MYXllclRoYXRIYXNOb0NvbnRhaW5lcikK
K3sKKyAgICAvLyBUaGlzIHRlc3QgY2hlY2tzIHNjcm9sbCBjb21wZW5zYXRpb24gd2hlbiBhIGZp
eGVkLXBvc2l0aW9uIGxheWVyIGRvZXMgbm90IGZpbmQgYW55CisgICAgLy8gYW5jZXN0b3IgdGhh
dCBpcyBhICJjb250YWluZXJGb3JGaXhlZFBvc2l0aW9uTGF5ZXJzIi4gSW4gdGhpcyBzaXR1YXRp
b24sIHRoZSBsYXllciBzaG91bGQKKyAgICAvLyBiZSBmaXhlZCB0byB0aGUgdmlld3BvcnQgLS0g
bm90IHRoZSByb290TGF5ZXIsIHdoaWNoIG1heSBoYXZlIHRyYW5zZm9ybXMgb2YgaXRzIG93bi4K
KyAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgc2NvcGVkSW1wbFRocmVhZDsKKworICAgIE93
blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IGNyZWF0ZVRyZWVGb3JGaXhlZFBvc2l0aW9uVGVzdHMo
KTsKKyAgICBDQ0xheWVySW1wbCogY2hpbGQgPSByb290LT5jaGlsZHJlbigpWzBdLmdldCgpOwor
ICAgIENDTGF5ZXJJbXBsKiBncmFuZENoaWxkID0gY2hpbGQtPmNoaWxkcmVuKClbMF0uZ2V0KCk7
CisKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCByb3RhdGlvbkJ5WjsKKyAgICByb3RhdGlv
bkJ5Wi5yb3RhdGUzZCgwLCAwLCA5MCk7CisKKyAgICByb290LT5zZXRUcmFuc2Zvcm0ocm90YXRp
b25CeVopOworICAgIGdyYW5kQ2hpbGQtPnNldEZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVS
ZWN0KHRydWUpOworCisgICAgLy8gQ2FzZSAxOiByb290IHNjcm9sbERlbHRhIG9mIDAsIDAKKyAg
ICByb290LT5zZXRTY3JvbGxEZWx0YShJbnRTaXplKDAsIDApKTsKKyAgICBleGVjdXRlQ2FsY3Vs
YXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3QuZ2V0KCkpOworCisgICAgLy8gVGhl
IGV4cGVjdGVkIGRyYXcgdHJhbnNmb3JtcyB3aXRob3V0IGFueSBzY3JvbGwgc2hvdWxkIHN0aWxs
IGluY2x1ZGUgYSB0cmFuc2xhdGlvbiB0byB0aGUgY2VudGVyIG9mIHRoZSBsYXllciAoaS5lLiB0
cmFuc2xhdGlvbiBieSA1MCwgNTApLgorICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGV4cGVj
dGVkQ2hpbGRUcmFuc2Zvcm07CisgICAgZXhwZWN0ZWRDaGlsZFRyYW5zZm9ybS5tdWx0aXBseShy
b3RhdGlvbkJ5Wik7CisgICAgZXhwZWN0ZWRDaGlsZFRyYW5zZm9ybS50cmFuc2xhdGUoNTAsIDUw
KTsKKworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGV4cGVjdGVkR3JhbmRDaGlsZFRyYW5z
Zm9ybTsKKyAgICBleHBlY3RlZEdyYW5kQ2hpbGRUcmFuc2Zvcm0ubXVsdGlwbHkocm90YXRpb25C
eVopOworICAgIGV4cGVjdGVkR3JhbmRDaGlsZFRyYW5zZm9ybS50cmFuc2xhdGUoNTAsIDUwKTsK
KworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0ZWRDaGlsZFRyYW5z
Zm9ybSwgY2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9O
X01BVFJJWF9FUShleHBlY3RlZEdyYW5kQ2hpbGRUcmFuc2Zvcm0sIGdyYW5kQ2hpbGQtPmRyYXdU
cmFuc2Zvcm0oKSk7CisKKyAgICAvLyBDYXNlIDI6IHJvb3Qgc2Nyb2xsRGVsdGEgb2YgMTAsIDEw
CisgICAgcm9vdC0+c2V0U2Nyb2xsRGVsdGEoSW50U2l6ZSgxMCwgMTApKTsKKyAgICBleGVjdXRl
Q2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3QuZ2V0KCkpOworCisgICAg
Ly8gSGVyZSB0aGUgY2hpbGQgaXMgYWZmZWN0ZWQgYnkgc2Nyb2xsRGVsdGEsIGJ1dCB0aGUgZml4
ZWQgcG9zaXRpb24gZ3JhbmRDaGlsZCBzaG91bGQgbm90IGJlIGFmZmVjdGVkLgorICAgIGV4cGVj
dGVkQ2hpbGRUcmFuc2Zvcm0ubWFrZUlkZW50aXR5KCk7CisgICAgZXhwZWN0ZWRDaGlsZFRyYW5z
Zm9ybS50cmFuc2xhdGUoLTEwLCAtMTApOyAvLyB0aGUgc2Nyb2xsRGVsdGEKKyAgICBleHBlY3Rl
ZENoaWxkVHJhbnNmb3JtLm11bHRpcGx5KHJvdGF0aW9uQnlaKTsKKyAgICBleHBlY3RlZENoaWxk
VHJhbnNmb3JtLnRyYW5zbGF0ZSg1MCwgNTApOworCisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9O
X01BVFJJWF9FUShleHBlY3RlZENoaWxkVHJhbnNmb3JtLCBjaGlsZC0+ZHJhd1RyYW5zZm9ybSgp
KTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVkR3JhbmRDaGls
ZFRyYW5zZm9ybSwgZ3JhbmRDaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKK30KKwogVEVTVChDQ0xh
eWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlDbGlwUmVjdEN1bGxzUmVuZGVyU3VyZmFjZXMp
CiB7CiAgICAgLy8gVGhlIGVudGlyZSBzdWJ0cmVlIG9mIGxheWVycyB0aGF0IGFyZSBvdXRzaWRl
IHRoZSBjbGlwUmVjdCBzaG91bGQgYmUgY3VsbGVkIGF3YXksCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>146909</attachid>
            <date>2012-06-11 14:23:29 -0700</date>
            <delta_ts>2012-06-11 14:33:04 -0700</delta_ts>
            <desc>Addressed reviewers comments</desc>
            <filename>bug-70103-20120611142329.patch</filename>
            <type>text/plain</type>
            <size>58591</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIwMDA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTI5Y2U0YzcyNDQ2YWE0
ZGNlNjhkOGQ1YmQ2YzFmNmMzODk1NjU0Yi4uMjJjYTY2Yjk4ZTA2MGY2Yzk1NmUzODA0NmVhN2U4
ZTkwNzJjYTMxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYzIEBACisyMDEyLTA2LTExICBTaGF3
biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
SW1wbGVtZW50IHBvc2l0aW9uOmZpeGVkIGluIGNvbXBvc2l0b3IgdGhyZWFkCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDEwMworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNpZ25pZmljYW50IGNvbnRyaWJ1
dGlvbnMgdG8gdGhpcyBwYXRjaCBieSBBbHBoYSBMYW0gYW5kIFNhbWkgS3lvc3RpbGEuCisKKyAg
ICAgICAgVGhpcyBwYXRjaCBpcyB0aGUgY29tcG9zaXRvci1zaWRlIGNoYW5nZSB0aGF0IGFkZHMg
c3VwcG9ydCBmb3IKKyAgICAgICAgZml4ZWQtcG9zaXRpb24gbGF5ZXJzIHRvIGJlIGNvbXBvc2l0
ZWQgbGF5ZXJzLiBCZWZvcmUgdGhpcyBwYXRjaCwKKyAgICAgICAgZml4ZWQtcG9zaXRpb24gZWxl
bWVudHMgd2VyZSBwb3NpdGlvbmVkIG9ubHkgYnkgV2ViQ29yZSAoaS5lLiBtYWluCisgICAgICAg
IHRocmVhZCB3aGVuIHBhaW50aW5nKSwgYW5kIHRoZSBjb21wb3NpdG9yIGRpZCBub3QgaGF2ZSBl
bm91Z2gKKyAgICAgICAga25vd2xlZGdlIG9uIGl0cyBvd24gdG8gcG9zaXRpb24gaXQgcHJvcGVy
bHkuIFRoaXMgcGF0Y2ggYWRkcyB0aGUKKyAgICAgICAgbmVjZXNzYXJ5IG1hdGggYW5kIHBsdW1i
cyB0aGUgbmVjZXNzYXJ5IGxheWVyIGluZm9ybWF0aW9uIHNvIHRoYXQKKyAgICAgICAgdGhlIGlt
cGwgdGhyZWFkIGNhbiBwcm9wZXJseSBwb3NpdGlvbiBmaXhlZC1wb3NpdGlvbiBlbGVtZW50cyBv
bgorICAgICAgICBpdHMgb3duLiBUaGlzIHN1cHBvcnQgaXMgbmVjZXNzYXJ5IGZvciBjb3JyZWN0
bmVzcyBvZiBjb21wb3NpdGVkCisgICAgICAgIGZpeGVkLXBvc2l0aW9uIGVsZW1lbnRzLCB3aGlj
aCBjYW4gZ3JlYXRseSBoZWxwIHRvIGF2b2lkCisgICAgICAgIHJlcGFpbnRpbmcgY29udGFpbmVy
IGxheWVycyB3aGVuIHNjcm9sbGluZyB3aXRoIGEgZml4ZWQtcG9zaXRpb24KKyAgICAgICAgbGF5
ZXIuCisKKyAgICAgICAgVGhlcmUgYWxzbyBuZWVkcyB0byBiZSBXZWJDb3JlLXNpZGUgc3VwcG9y
dCBmb3IgdGhpcywgd2hpY2ggaXMKKyAgICAgICAgYWRkcmVzc2VkIGluIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODg2NAorCisgICAgICAgIFVuaXQgdGVzdHMgYWRk
ZWQgdG8gQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdDoKKyAgICAgICAgICBDQ0xheWVyVHJlZUhv
c3RDb21tb25UZXN0LnZlcmlmeVNjcm9sbENvbXBlbnNhdGlvbkZvckZpeGVkUG9zaXRpb25MYXll
cldpdGhEaXJlY3RDb250YWluZXIKKyAgICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0
LnZlcmlmeVNjcm9sbENvbXBlbnNhdGlvbkZvckZpeGVkUG9zaXRpb25MYXllcldpdGhUcmFuc2Zv
cm1lZERpcmVjdENvbnRhaW5lcgorICAgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3Qu
dmVyaWZ5U2Nyb2xsQ29tcGVuc2F0aW9uRm9yRml4ZWRQb3NpdGlvbkxheWVyV2l0aERpc3RhbnRD
b250YWluZXIKKyAgICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LnZlcmlmeVNjcm9s
bENvbXBlbnNhdGlvbkZvckZpeGVkUG9zaXRpb25MYXllcldpdGhEaXN0YW50Q29udGFpbmVyQW5k
VHJhbnNmb3JtcworICAgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QudmVyaWZ5U2Ny
b2xsQ29tcGVuc2F0aW9uRm9yRml4ZWRQb3NpdGlvbkxheWVyV2l0aE11bHRpcGxlU2Nyb2xsRGVs
dGFzCisgICAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC52ZXJpZnlTY3JvbGxDb21w
ZW5zYXRpb25Gb3JGaXhlZFBvc2l0aW9uTGF5ZXJXaXRoSW50ZXJtZWRpYXRlU3VyZmFjZUFuZFRy
YW5zZm9ybXMKKyAgICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LnZlcmlmeVNjcm9s
bENvbXBlbnNhdGlvbkZvckZpeGVkUG9zaXRpb25MYXllcldpdGhNdWx0aXBsZUludGVybWVkaWF0
ZVN1cmZhY2VzCisgICAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC52ZXJpZnlTY3Jv
bGxDb21wZW5zYXRpb25Gb3JGaXhlZFBvc2l0aW9uTGF5ZXJXaXRoQ29udGFpbmVyTGF5ZXJUaGF0
SGFzU3VyZmFjZQorICAgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QudmVyaWZ5U2Ny
b2xsQ29tcGVuc2F0aW9uRm9yRml4ZWRQb3NpdGlvbkxheWVyVGhhdElzQWxzb0ZpeGVkUG9zaXRp
b25Db250YWluZXIKKyAgICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LnZlcmlmeVNj
cm9sbENvbXBlbnNhdGlvbkZvckZpeGVkUG9zaXRpb25MYXllclRoYXRIYXNOb0NvbnRhaW5lcgor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpMYXllckNocm9taXVtKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8pOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyQ2hyb21pdW06OnNldElzQ29udGFpbmVyRm9yRml4ZWRQb3NpdGlvbkxheWVy
cyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjppc0NvbnRhaW5lckZvckZpeGVk
UG9zaXRpb25MYXllcnMpOgorICAgICAgICAoTGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJD
b3JlOjpMYXllckNocm9taXVtOjpzZXRGaXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpmaXhlZFRvQ29udGFpbmVyTGF5ZXJW
aXNpYmxlUmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllckltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OkNDTGF5ZXJJbXBs
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5o
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OnNldElzQ29udGFpbmVyRm9yRml4ZWRQ
b3NpdGlvbkxheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6aXNDb250YWlu
ZXJGb3JGaXhlZFBvc2l0aW9uTGF5ZXJzKToKKyAgICAgICAgKENDTGF5ZXJJbXBsKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpzZXRGaXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxl
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6Zml4ZWRUb0NvbnRhaW5lckxh
eWVyVmlzaWJsZVJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlU2Ny
b2xsQ29tcGVuc2F0aW9uRm9yVGhpc0xheWVyKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6Y29tcHV0ZVNjcm9sbENvbXBlbnNhdGlvbk1hdHJpeEZvckNoaWxkcmVuKToK
KyAgICAgICAgKFdlYkNvcmU6OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zSW50ZXJuYWwpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNm
b3Jtcyk6CisKIDIwMTItMDYtMTEgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAg
ICAgICBSZW1vdmUgc3VwcG9ydCBmb3IgZGlzY29ubmVjdGVkL2V4Y2x1ZGVkIGZyb20gc2VhcmNo
IGZyYW1lcywgdGhleSBhcmUgbm90IHVzZWQgYnkgU2FmYXJpIGFueW1vcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKaW5kZXggMGQ1Njc3ZDU2ZTM1MTNhOGM2YjIzMTVhNTNlOTU3MTU4YzAyZTJj
MS4uZWJhOGQ2YzgwNTIwOGQzMTY3ODI0NDk0ZjVhN2NiZjhkOGJhN2ZlZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAxMi0wNi0xMSAgU2hhd24gU2luZ2gg
IDxzaGF3bnNpbmdoQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIEltcGxlbWVu
dCBwb3NpdGlvbjpmaXhlZCBpbiBjb21wb3NpdG9yIHRocmVhZAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzAxMDMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1v
blRlc3QuY3BwOgorCiAyMDEyLTA2LTExICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgUmVtb3ZlIHN1cHBvcnQgZm9yIGRpc2Nvbm5lY3RlZC9leGNsdWRlZCBmcm9tIHNl
YXJjaCBmcmFtZXMsIHRoZXkgYXJlIG5vdCB1c2VkIGJ5IFNhZmFyaSBhbnltb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9t
aXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
Q2hyb21pdW0uY3BwCmluZGV4IGQzNWY1OTIxOWZmNzQzY2ZkOWRlNmJkNzllYmU1OTFjYWM5MjFh
YTkuLmJjODJmZWIwZGY0M2Y3YjQ4NWYwMjE5NzZiMjI3NjFjZDYxZDE4MjUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
Q2hyb21pdW0uY3BwCkBAIC03Myw2ICs3Myw4IEBAIExheWVyQ2hyb21pdW06OkxheWVyQ2hyb21p
dW0oKQogICAgICwgbV9kZWJ1Z0JvcmRlcldpZHRoKDApCiAgICAgLCBtX29wYWNpdHkoMS4wKQog
ICAgICwgbV9hbmNob3JQb2ludFooMCkKKyAgICAsIG1faXNDb250YWluZXJGb3JGaXhlZFBvc2l0
aW9uTGF5ZXJzKGZhbHNlKQorICAgICwgbV9maXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVj
dChmYWxzZSkKICAgICAsIG1faXNEcmF3YWJsZShmYWxzZSkKICAgICAsIG1fbWFza3NUb0JvdW5k
cyhmYWxzZSkKICAgICAsIG1fb3BhcXVlKGZhbHNlKQpAQCAtNTA3LDYgKzUwOSw4IEBAIHZvaWQg
TGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyhDQ0xheWVySW1wbCogbGF5ZXIpCiAgICAg
aWYgKCFvcGFjaXR5SXNBbmltYXRpbmcoKSkKICAgICAgICAgbGF5ZXItPnNldE9wYWNpdHkobV9v
cGFjaXR5KTsKICAgICBsYXllci0+c2V0UG9zaXRpb24obV9wb3NpdGlvbik7CisgICAgbGF5ZXIt
PnNldElzQ29udGFpbmVyRm9yRml4ZWRQb3NpdGlvbkxheWVycyhtX2lzQ29udGFpbmVyRm9yRml4
ZWRQb3NpdGlvbkxheWVycyk7CisgICAgbGF5ZXItPnNldEZpeGVkVG9Db250YWluZXJMYXllclZp
c2libGVSZWN0KG1fZml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3QpOwogICAgIGxheWVy
LT5zZXRQcmVzZXJ2ZXMzRChwcmVzZXJ2ZXMzRCgpKTsKICAgICBsYXllci0+c2V0U2Nyb2xsUG9z
aXRpb24obV9zY3JvbGxQb3NpdGlvbik7CiAgICAgbGF5ZXItPnNldFN1YmxheWVyVHJhbnNmb3Jt
KG1fc3VibGF5ZXJUcmFuc2Zvcm0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDExZWIyNzJlYThl
ZjRlYTIzZGNkMmEzNGJhYjc2OTUxZDM3NTMwNDYuLmUzM2MyZmRhODhhNzg0ZjU1MzM2MWFiYzNm
OGUxNWJlOTg3NWMwYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKQEAgLTEzMCw2ICsxMzAsMTIgQEAg
cHVibGljOgogICAgIHZvaWQgc2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYpOwogICAgIEZs
b2F0UG9pbnQgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9CiAKKyAgICB2
b2lkIHNldElzQ29udGFpbmVyRm9yRml4ZWRQb3NpdGlvbkxheWVycyhib29sIGlzQ29udGFpbmVy
Rm9yRml4ZWRQb3NpdGlvbkxheWVycykgeyBtX2lzQ29udGFpbmVyRm9yRml4ZWRQb3NpdGlvbkxh
eWVycyA9IGlzQ29udGFpbmVyRm9yRml4ZWRQb3NpdGlvbkxheWVyczsgfQorICAgIGJvb2wgaXND
b250YWluZXJGb3JGaXhlZFBvc2l0aW9uTGF5ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9pc0NvbnRh
aW5lckZvckZpeGVkUG9zaXRpb25MYXllcnM7IH0KKworICAgIHZvaWQgc2V0Rml4ZWRUb0NvbnRh
aW5lckxheWVyVmlzaWJsZVJlY3QoYm9vbCBmaXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVj
dCkgeyBtX2ZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0ID0gZml4ZWRUb0NvbnRhaW5l
ckxheWVyVmlzaWJsZVJlY3Q7IHNldE5lZWRzQ29tbWl0KCk7IH0KKyAgICBib29sIGZpeGVkVG9D
b250YWluZXJMYXllclZpc2libGVSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9maXhlZFRvQ29udGFp
bmVyTGF5ZXJWaXNpYmxlUmVjdDsgfQorCiAgICAgdm9pZCBzZXRTdWJsYXllclRyYW5zZm9ybShj
b25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CiAgICAgY29uc3QgV2ViS2l0
OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgc3VibGF5ZXJUcmFuc2Zvcm0oKSBjb25zdCB7IHJl
dHVybiBtX3N1YmxheWVyVHJhbnNmb3JtOyB9CiAKQEAgLTMzNCw2ICszNDAsOCBAQCBwcml2YXRl
OgogICAgIFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyBtX2ZpbHRlcnM7CiAgICAgV2ViS2l0
OjpXZWJGaWx0ZXJPcGVyYXRpb25zIG1fYmFja2dyb3VuZEZpbHRlcnM7CiAgICAgZmxvYXQgbV9h
bmNob3JQb2ludFo7CisgICAgYm9vbCBtX2lzQ29udGFpbmVyRm9yRml4ZWRQb3NpdGlvbkxheWVy
czsKKyAgICBib29sIG1fZml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3Q7CiAgICAgYm9v
bCBtX2lzRHJhd2FibGU7CiAgICAgYm9vbCBtX21hc2tzVG9Cb3VuZHM7CiAgICAgYm9vbCBtX29w
YXF1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAppbmRleCA3MmMwZWEyYjc5Y2U3MmJhNmFlMGZj
NjJlYzE3NzZiNjkyYWM1YWZjLi5jMTU1YTQ4MGIxNjc0YTUyZWE4MmRmZDY3YzBkYTI1YjhlMjMw
YTk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCkBAIC02Myw2ICs2Myw4IEBAIENDTGF5ZXJJ
bXBsOjpDQ0xheWVySW1wbChpbnQgaWQpCiAgICAgLCBtX2lzTm9uQ29tcG9zaXRlZENvbnRlbnQo
ZmFsc2UpCiAgICAgLCBtX2RyYXdzQ29udGVudChmYWxzZSkKICAgICAsIG1fZm9yY2VSZW5kZXJT
dXJmYWNlKGZhbHNlKQorICAgICwgbV9pc0NvbnRhaW5lckZvckZpeGVkUG9zaXRpb25MYXllcnMo
ZmFsc2UpCisgICAgLCBtX2ZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0KGZhbHNlKQog
ICAgICwgbV9wYWdlU2NhbGVEZWx0YSgxKQogICAgICwgbV90YXJnZXRSZW5kZXJTdXJmYWNlKDAp
CiAgICAgLCBtX2RyYXdEZXB0aCgwKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKaW5kZXggZjAzYzVjM2Vh
MzFkOWJiNDcyNTAxOTE2MzM5OTVhNDBhOTBlZWRkZC4uNzE4OTk2M2EwNDNmZjJhZTY4N2M4Yzcw
MTQ2YmI1NzNiYjBmOWY4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCkBAIC0xMzEsNiArMTMxLDEy
IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKTsKICAg
ICBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb247
IH0KIAorICAgIHZvaWQgc2V0SXNDb250YWluZXJGb3JGaXhlZFBvc2l0aW9uTGF5ZXJzKGJvb2wg
aXNDb250YWluZXJGb3JGaXhlZFBvc2l0aW9uTGF5ZXJzKSB7IG1faXNDb250YWluZXJGb3JGaXhl
ZFBvc2l0aW9uTGF5ZXJzID0gaXNDb250YWluZXJGb3JGaXhlZFBvc2l0aW9uTGF5ZXJzOyB9Cisg
ICAgYm9vbCBpc0NvbnRhaW5lckZvckZpeGVkUG9zaXRpb25MYXllcnMoKSBjb25zdCB7IHJldHVy
biBtX2lzQ29udGFpbmVyRm9yRml4ZWRQb3NpdGlvbkxheWVyczsgfQorCisgICAgdm9pZCBzZXRG
aXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdChib29sIGZpeGVkVG9Db250YWluZXJMYXll
clZpc2libGVSZWN0ID0gdHJ1ZSkgeyBtX2ZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0
ID0gZml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3Q7fQorICAgIGJvb2wgZml4ZWRUb0Nv
bnRhaW5lckxheWVyVmlzaWJsZVJlY3QoKSBjb25zdCB7IHJldHVybiBtX2ZpeGVkVG9Db250YWlu
ZXJMYXllclZpc2libGVSZWN0OyB9CisKICAgICB2b2lkIHNldFByZXNlcnZlczNEKGJvb2wpOwog
ICAgIGJvb2wgcHJlc2VydmVzM0QoKSBjb25zdCB7IHJldHVybiBtX3ByZXNlcnZlczNEOyB9CiAK
QEAgLTMyMyw2ICszMjksMTEgQEAgcHJpdmF0ZToKICAgICBib29sIG1fZHJhd3NDb250ZW50Owog
ICAgIGJvb2wgbV9mb3JjZVJlbmRlclN1cmZhY2U7CiAKKyAgICAvLyBTZXQgZm9yIHRoZSBsYXll
ciB0aGF0IG90aGVyIGxheWVycyBhcmUgZml4ZWQgdG8uCisgICAgYm9vbCBtX2lzQ29udGFpbmVy
Rm9yRml4ZWRQb3NpdGlvbkxheWVyczsKKyAgICAvLyBUaGlzIGlzIHRydWUgaWYgdGhlIGxheWVy
IHNob3VsZCBiZSBmaXhlZCB0byB0aGUgY2xvc2VzdCBhbmNlc3RvciBjb250YWluZXIuCisgICAg
Ym9vbCBtX2ZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0OworCiAgICAgRmxvYXRTaXpl
IG1fc2Nyb2xsRGVsdGE7CiAgICAgSW50U2l6ZSBtX3NlbnRTY3JvbGxEZWx0YTsKICAgICBJbnRT
aXplIG1fbWF4U2Nyb2xsUG9zaXRpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
Q29tbW9uLmNwcAppbmRleCAwODk4MDU2Nzg0MGNkMmRhY2ZhMDc1NDVjN2MxZjZlOGIzODQ1ZmVl
Li43ZGZjMjE2YzI4OGY5NTYwMjYxZGVkMGRhZDIzODdjZWUwMjgwMDEzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3RDb21tb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAKQEAgLTMxMywxMCArMzEzLDk1IEBAIHN0
YXRpYyBib29sIHN1YnRyZWVTaG91bGRSZW5kZXJUb1NlcGFyYXRlU3VyZmFjZShMYXllclR5cGUq
IGxheWVyLCBib29sIGF4aXNBbGlnCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitXZWJUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBjb21wdXRlU2Nyb2xsQ29tcGVuc2F0aW9uRm9yVGhpc0xheWVyKENDTGF5
ZXJJbXBsKiBzY3JvbGxpbmdMYXllciwgY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBh
cmVudE1hdHJpeCkKK3sKKyAgICAvLyBGb3IgZXZlcnkgbGF5ZXIgdGhhdCBoYXMgbm9uLXplcm8g
c2Nyb2xsRGVsdGEsIHdlIGhhdmUgdG8gY29tcHV0ZSBhIHRyYW5zZm9ybSB0aGF0IGNhbiB1bmRv
IHRoZQorICAgIC8vIHNjcm9sbERlbHRhIHRyYW5zbGF0aW9uLiBJbiBwYXJ0aWN1bGFyLCB3ZSB3
YW50IHRoaXMgbWF0cml4IHRvIHByZW11bHRpcGx5IGEgZml4ZWQtcG9zaXRpb24gbGF5ZXIncwor
ICAgIC8vIHBhcmVudE1hdHJpeCwgc28gd2UgZGVzaWduIHRoaXMgdHJhbnNmb3JtIGluIHRocmVl
IHN0ZXBzIGFzIGZvbGxvd3MuIFRoZSBzdGVwcyBkZXNjcmliZWQgaGVyZSBhcHBseQorICAgIC8v
IGZyb20gcmlnaHQtdG8tbGVmdCwgc28gU3RlcCAxIHdvdWxkIGJlIHRoZSByaWdodC1tb3N0IG1h
dHJpeDoKKyAgICAvLworICAgIC8vICAgICBTdGVwIDEuIHRyYW5zZm9ybSBmcm9tIHRhcmdldCBz
dXJmYWNlIHNwYWNlIHRvIHRoZSBleGFjdCBzcGFjZSB3aGVyZSBzY3JvbGxEZWx0YSBpcyBhY3R1
YWxseSBhcHBsaWVkLgorICAgIC8vICAgICAgICAgICAtLSB0aGlzIGlzIGludmVyc2Ugb2YgdGhl
IG1hdHJpeCBpbiBzdGVwIDMKKyAgICAvLyAgICAgU3RlcCAyLiB1bmRvIHRoZSBzY3JvbGxEZWx0
YQorICAgIC8vICAgICAgICAgICAtLSB0aGlzIGlzIGp1c3QgYSB0cmFuc2xhdGlvbiBieSBzY3Jv
bGxEZWx0YS4KKyAgICAvLyAgICAgU3RlcCAzLiB0cmFuc2Zvcm0gYmFjayB0byB0YXJnZXQgc3Vy
ZmFjZSBzcGFjZS4KKyAgICAvLyAgICAgICAgICAgLS0gdGhpcyB0cmFuc2Zvcm0gaXMgdGhlICJw
YXJ0aWFsTGF5ZXJPcmlnaW5UcmFuc2Zvcm0iID0gKHBhcmVudE1hdHJpeCAqIHNjYWxlKGxheWVy
LT5wYWdlU2NhbGVEZWx0YSgpKSk7CisgICAgLy8KKyAgICAvLyBUaGVzZSBzdGVwcyBjcmVhdGUg
YSBtYXRyaXggdGhhdCBib3RoIHN0YXJ0IGFuZCBlbmQgaW4gdGFyZ2V0U3VyZmFjZVNwYWNlLiBT
byB0aGlzIG1hdHJpeCBjYW4KKyAgICAvLyBwcmUtbXVsdGlwbHkgYW55IGZpeGVkLXBvc2l0aW9u
IGxheWVyJ3MgZHJhd1RyYW5zZm9ybSB0byB1bmRvIHRoZSBzY3JvbGxEZWx0YXMgLS0gYXMgbG9u
ZyBhcworICAgIC8vIHRoYXQgZml4ZWQgcG9zaXRpb24gbGF5ZXIgaXMgZml4ZWQgb250byB0aGUg
c2FtZSB0YXJnZXRSZW5kZXJTdXJmYWNlIGFzIHRoaXMgc2Nyb2xsaW5nTGF5ZXIuCisgICAgLy8K
KworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHBhcnRpYWxMYXllck9yaWdpblRyYW5zZm9y
bSA9IHBhcmVudE1hdHJpeDsKKyAgICBwYXJ0aWFsTGF5ZXJPcmlnaW5UcmFuc2Zvcm0uc2NhbGUo
c2Nyb2xsaW5nTGF5ZXItPnBhZ2VTY2FsZURlbHRhKCkpOworCisgICAgV2ViVHJhbnNmb3JtYXRp
b25NYXRyaXggc2Nyb2xsQ29tcGVuc2F0aW9uRm9yVGhpc0xheWVyID0gcGFydGlhbExheWVyT3Jp
Z2luVHJhbnNmb3JtOyAvLyBTdGVwIDMKKyAgICBzY3JvbGxDb21wZW5zYXRpb25Gb3JUaGlzTGF5
ZXIudHJhbnNsYXRlKHNjcm9sbGluZ0xheWVyLT5zY3JvbGxEZWx0YSgpLndpZHRoKCksIHNjcm9s
bGluZ0xheWVyLT5zY3JvbGxEZWx0YSgpLmhlaWdodCgpKTsgLy8gU3RlcCAyCisgICAgc2Nyb2xs
Q29tcGVuc2F0aW9uRm9yVGhpc0xheWVyLm11bHRpcGx5KHBhcnRpYWxMYXllck9yaWdpblRyYW5z
Zm9ybS5pbnZlcnNlKCkpOyAvLyBTdGVwIDEKKyAgICByZXR1cm4gc2Nyb2xsQ29tcGVuc2F0aW9u
Rm9yVGhpc0xheWVyOworfQorCitXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjb21wdXRlU2Nyb2xs
Q29tcGVuc2F0aW9uTWF0cml4Rm9yQ2hpbGRyZW4oTGF5ZXJDaHJvbWl1bSogY3VycmVudExheWVy
LCBjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgY3VycmVudFBhcmVudE1hdHJpeCwgY29u
c3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGN1cnJlbnRTY3JvbGxDb21wZW5zYXRpb24pCit7
CisgICAgLy8gVGhlIG1haW4gdGhyZWFkIChpLmUuIExheWVyQ2hyb21pdW0pIGRvZXMgbm90IG5l
ZWQgdG8gd29ycnkgYWJvdXQgc2Nyb2xsIGNvbXBlbnNhdGlvbi4KKyAgICAvLyBTbyB3ZSBjYW4g
anVzdCByZXR1cm4gYW4gaWRlbnRpdHkgbWF0cml4IGhlcmUuCisgICAgcmV0dXJuIFdlYlRyYW5z
Zm9ybWF0aW9uTWF0cml4KCk7Cit9CisKK1dlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGNvbXB1dGVT
Y3JvbGxDb21wZW5zYXRpb25NYXRyaXhGb3JDaGlsZHJlbihDQ0xheWVySW1wbCogbGF5ZXIsIGNv
bnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgsIGNvbnN0IFdlYlRyYW5z
Zm9ybWF0aW9uTWF0cml4JiBjdXJyZW50U2Nyb2xsQ29tcGVuc2F0aW9uTWF0cml4KQoreworICAg
IC8vICJUb3RhbCBzY3JvbGwgY29tcGVuc2F0aW9uIiBpcyB0aGUgdHJhbnNmb3JtIG5lZWRlZCB0
byBjYW5jZWwgb3V0IGFsbCBzY3JvbGxEZWx0YSB0cmFuc2xhdGlvbnMgdGhhdAorICAgIC8vIG9j
Y3VycmVkIHNpbmNlIHRoZSBuZWFyZXN0IGNvbnRhaW5lciBsYXllciwgZXZlbiBpZiB0aGVyZSBh
cmUgcmVuZGVyU3VyZmFjZXMgaW4tYmV0d2Vlbi4KKyAgICAvLworICAgIC8vIFRoZXJlIGFyZSBz
b21lIGVkZ2UgY2FzZXMgdG8gYmUgYXdhcmUgb2YsIHRoYXQgYXJlIG5vdCBleHBsaWNpdCBpbiB0
aGUgY29kZToKKyAgICAvLyAgLSBBIGxheWVyIHRoYXQgaXMgYm90aCBhIGZpeGVkLXBvc2l0aW9u
IGFuZCBjb250YWluZXIgc2hvdWxkIG5vdCBiZSBpdHMgb3duIGNvbnRhaW5lciwgaW5zdGVhZCwg
dGhhdCBtZWFucworICAgIC8vICAgIGl0IGlzIGZpeGVkIHRvIGFuIGFuY2VzdG9yLCBhbmQgaXMg
YSBjb250YWluZXIgZm9yIGFueSBmaXhlZC1wb3NpdGlvbiBkZXNjZW5kYW50cy4KKyAgICAvLyAg
LSBBIGxheWVyIHRoYXQgaXMgYSBmaXhlZC1wb3NpdGlvbiBjb250YWluZXIgYW5kIGhhcyBhIHJl
bmRlclN1cmZhY2Ugc2hvdWxkIGJlaGF2ZSB0aGUgc2FtZSBhcyBhIGNvbnRhaW5lcgorICAgIC8v
ICAgIHdpdGhvdXQgYSByZW5kZXJTdXJmYWNlLCB0aGUgcmVuZGVyU3VyZmFjZSBpcyBpcnJlbGV2
YW50IGluIHRoYXQgY2FzZS4KKyAgICAvLyAgLSBBIGxheWVyIHRoYXQgZG9lcyBub3QgaGF2ZSBh
biBleHBsaWNpdCBjb250YWluZXIgaXMgc2ltcGx5IGZpeGVkIHRvIHRoZSB2aWV3cG9ydAorICAg
IC8vICAgIChpLmUuIHRoZSByb290IHJlbmRlclN1cmZhY2UsIGFuZCBpdCB3b3VsZCBzdGlsbCBj
b21wZW5zYXRlIGZvciByb290IGxheWVyJ3Mgc2Nyb2xsRGVsdGEpLgorICAgIC8vICAtIElmIHRo
ZSBmaXhlZC1wb3NpdGlvbiBsYXllciBoYXMgaXRzIG93biByZW5kZXJTdXJmYWNlLCB0aGVuIHRo
ZSByZW5kZXJTdXJmYWNlIGlzCisgICAgLy8gICAgdGhlIG9uZSB3aG8gZ2V0cyBmaXhlZC4KKyAg
ICAvLworICAgIC8vIFRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gYmUgY2FsbGVkIEFGVEVSIGxheWVy
cyBjcmVhdGUgdGhlaXIgb3duIHJlbmRlclN1cmZhY2VzLgorICAgIC8vCisKKyAgICAvLyBBdm9p
ZCB0aGUgb3ZlcmhlYWRzIChpbmNsdWRpbmcgc3RhY2sgYWxsb2NhdGlvbiBhbmQgbWF0cml4IGlu
aXRpYWxpemF0aW9uL2NvcHkpIGlmIHdlIGtub3cgdGhhdCB0aGUgc2Nyb2xsIGNvbXBlbnNhdGlv
biBkb2Vzbid0IG5lZWQgdG8gYmUgcmVzZXQgb3IgYWRqdXN0ZWQuCisgICAgaWYgKCFsYXllci0+
aXNDb250YWluZXJGb3JGaXhlZFBvc2l0aW9uTGF5ZXJzKCkgJiYgbGF5ZXItPnNjcm9sbERlbHRh
KCkuaXNaZXJvKCkgJiYgIWxheWVyLT5yZW5kZXJTdXJmYWNlKCkpCisgICAgICAgIHJldHVybiBj
dXJyZW50U2Nyb2xsQ29tcGVuc2F0aW9uTWF0cml4OworCisgICAgLy8gU3RhcnQgYXMgaWRlbnRp
dHkgbWF0cml4LgorICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IG5leHRTY3JvbGxDb21wZW5z
YXRpb25NYXRyaXg7CisKKyAgICAvLyBJZiB0aGlzIGxheWVyIGlzIG5vdCBhIGNvbnRhaW5lciwg
dGhlbiBpdCBpbmhlcml0cyB0aGUgZXhpc3Rpbmcgc2Nyb2xsIGNvbXBlbnNhdGlvbnMuCisgICAg
aWYgKCFsYXllci0+aXNDb250YWluZXJGb3JGaXhlZFBvc2l0aW9uTGF5ZXJzKCkpCisgICAgICAg
IG5leHRTY3JvbGxDb21wZW5zYXRpb25NYXRyaXggPSBjdXJyZW50U2Nyb2xsQ29tcGVuc2F0aW9u
TWF0cml4OworCisgICAgLy8gSWYgdGhlIGN1cnJlbnQgbGF5ZXIgaGFzIGEgbm9uLXplcm8gc2Ny
b2xsRGVsdGEsIHRoZW4gd2Ugc2hvdWxkIGNvbXB1dGUgaXRzIGxvY2FsIHNjcm9sbENvbXBlbnNh
dGlvbgorICAgIC8vIGFuZCBhY2N1bXVsYXRlIGl0IHRvIHRoZSBuZXh0U2Nyb2xsQ29tcGVuc2F0
aW9uTWF0cml4LgorICAgIGlmICghbGF5ZXItPnNjcm9sbERlbHRhKCkuaXNaZXJvKCkpIHsKKyAg
ICAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggc2Nyb2xsQ29tcGVuc2F0aW9uRm9yVGhpc0xh
eWVyID0gY29tcHV0ZVNjcm9sbENvbXBlbnNhdGlvbkZvclRoaXNMYXllcihsYXllciwgcGFyZW50
TWF0cml4KTsKKyAgICAgICAgbmV4dFNjcm9sbENvbXBlbnNhdGlvbk1hdHJpeC5tdWx0aXBseShz
Y3JvbGxDb21wZW5zYXRpb25Gb3JUaGlzTGF5ZXIpOworICAgIH0KKworICAgIC8vIElmIHRoZSBs
YXllciBjcmVhdGVkIGl0cyBvd24gcmVuZGVyU3VyZmFjZSwgd2UgaGF2ZSB0byBhZGp1c3QgbmV4
dFNjcm9sbENvbXBlbnNhdGlvbk1hdHJpeC4KKyAgICAvLyBUaGUgYWRqdXN0bWVudCBhbGxvd3Mg
dXMgdG8gY29udGludWUgdXNpbmcgdGhlIHNjcm9sbENvbXBlbnNhdGlvbiBvbiB0aGUgbmV4dCBz
dXJmYWNlLgorICAgIC8vICBTdGVwIDEgKHJpZ2h0LW1vc3QgaW4gdGhlIG1hdGgpOiB0cmFuc2Zv
cm0gZnJvbSB0aGUgbmV3IHN1cmZhY2UgdG8gdGhlIG9yaWdpbmFsIGFuY2VzdG9yIHN1cmZhY2UK
KyAgICAvLyAgU3RlcCAyOiBhcHBseSB0aGUgc2Nyb2xsIGNvbXBlbnNhdGlvbgorICAgIC8vICBT
dGVwIDM6IHRyYW5zZm9ybSBiYWNrIHRvIHRoZSBuZXcgc3VyZmFjZS4KKyAgICBpZiAobGF5ZXIt
PnJlbmRlclN1cmZhY2UoKSAmJiAhbmV4dFNjcm9sbENvbXBlbnNhdGlvbk1hdHJpeC5pc0lkZW50
aXR5KCkpCisgICAgICAgIG5leHRTY3JvbGxDb21wZW5zYXRpb25NYXRyaXggPSBsYXllci0+cmVu
ZGVyU3VyZmFjZSgpLT5vcmlnaW5UcmFuc2Zvcm0oKS5pbnZlcnNlKCkgKiBuZXh0U2Nyb2xsQ29t
cGVuc2F0aW9uTWF0cml4ICogbGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+b3JpZ2luVHJhbnNmb3Jt
KCk7CisKKyAgICByZXR1cm4gbmV4dFNjcm9sbENvbXBlbnNhdGlvbk1hdHJpeDsKK30KKwogLy8g
UmVjdXJzaXZlbHkgd2Fsa3MgdGhlIGxheWVyIHRyZWUgc3RhcnRpbmcgYXQgdGhlIGdpdmVuIG5v
ZGUgYW5kIGNvbXB1dGVzIGFsbCB0aGUKIC8vIG5lY2Vzc2FyeSB0cmFuc2Zvcm1hdGlvbnMsIGNs
aXBSZWN0cywgcmVuZGVyIHN1cmZhY2VzLCBldGMuCiB0ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5
cGUsIHR5cGVuYW1lIExheWVyTGlzdCwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGUsIHR5cGVu
YW1lIExheWVyU29ydGVyPgotc3RhdGljIGJvb2wgY2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNJbnRl
cm5hbChMYXllclR5cGUqIGxheWVyLCBMYXllclR5cGUqIHJvb3RMYXllciwgY29uc3QgV2ViVHJh
bnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwgY29uc3QgV2ViVHJhbnNmb3JtYXRpb25N
YXRyaXgmIGZ1bGxIaWVyYXJjaHlNYXRyaXgsIFJlbmRlclN1cmZhY2VUeXBlKiBuZWFyZXN0QW5j
ZXN0b3JUaGF0TW92ZXNQaXhlbHMsIExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwg
TGF5ZXJMaXN0JiBsYXllckxpc3QsIExheWVyU29ydGVyKiBsYXllclNvcnRlciwgaW50IG1heFRl
eHR1cmVTaXplKQorc3RhdGljIGJvb2wgY2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNJbnRlcm5hbChM
YXllclR5cGUqIGxheWVyLCBMYXllclR5cGUqIHJvb3RMYXllciwgY29uc3QgV2ViVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGZ1bGxIaWVyYXJj
aHlNYXRyaXgsIGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBjdXJyZW50U2Nyb2xsQ29t
cGVuc2F0aW9uTWF0cml4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBSZW5kZXJTdXJmYWNlVHlwZSogbmVhcmVzdEFuY2VzdG9yVGhhdE1vdmVzUGl4ZWxzLCBM
YXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIExheWVyTGlzdCYgbGF5ZXJMaXN0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXllclNvcnRlciog
bGF5ZXJTb3J0ZXIsIGludCBtYXhUZXh0dXJlU2l6ZSkKIHsKICAgICAvLyBUaGlzIGZ1bmN0aW9u
IGNvbXB1dGVzIHRoZSBuZXcgbWF0cml4IHRyYW5zZm9ybWF0aW9ucyByZWN1cnNpdmVseSBmb3Ig
dGhpcwogICAgIC8vIGxheWVyIGFuZCBhbGwgaXRzIGRlc2NlbmRhbnRzLiBJdCBhbHNvIGNvbXB1
dGVzIHRoZSBhcHByb3ByaWF0ZSByZW5kZXIgc3VyZmFjZXMuCkBAIC00NDMsOSArNTI4LDE4IEBA
IHN0YXRpYyBib29sIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zSW50ZXJuYWwoTGF5ZXJUeXBlKiBs
YXllciwgTGF5ZXJUeXBlKiByb290TGF5CiAgICAgLy8gTFQgPSBUcltvcmlnaW5dICogU1twYWdl
U2NhbGVEZWx0YV0gKiBUcltvcmlnaW4yYW5jaG9yXSAqIE1bbGF5ZXJdICogVHJbYW5jaG9yMmNl
bnRlcl0KICAgICBsYXllckxvY2FsVHJhbnNmb3JtLnRyYW5zbGF0ZTNkKGNlbnRlck9mZnNldFgs
IGNlbnRlck9mZnNldFksIC1sYXllci0+YW5jaG9yUG9pbnRaKCkpOwogCisgICAgLy8gVGhlIGNv
bWJpbmVkVHJhbnNmb3JtIHRoYXQgZ2V0cyBjb21wdXRlZCBiZWxvdyBpcyBlZmZlY3RpdmVseSB0
aGUgbGF5ZXIncyBkcmF3VHJhbnNmb3JtLCB1bmxlc3MKKyAgICAvLyB0aGUgbGF5ZXIgaXRzZWxm
IGNyZWF0ZXMgYSByZW5kZXJTdXJmYWNlLiBJbiB0aGF0IGNhc2UsIHRoZSByZW5kZXJTdXJmYWNl
IHJlLXBhcmVudHMgdGhlIHRyYW5zZm9ybXMuCiAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgg
Y29tYmluZWRUcmFuc2Zvcm0gPSBwYXJlbnRNYXRyaXg7CiAgICAgY29tYmluZWRUcmFuc2Zvcm0u
bXVsdGlwbHkobGF5ZXJMb2NhbFRyYW5zZm9ybSk7CiAKKyAgICBpZiAobGF5ZXItPmZpeGVkVG9D
b250YWluZXJMYXllclZpc2libGVSZWN0KCkpIHsKKyAgICAgICAgLy8gU3BlY2lhbCBjYXNlOiB0
aGlzIGxheWVyIGlzIGEgY29tcG9zaXRlZCBmaXhlZC1wb3NpdGlvbiBsYXllcjsgd2UgbmVlZCB0
bworICAgICAgICAvLyBleHBsaWNpdGx5IGNvbXBlbnNhdGUgZm9yIGFsbCBhbmNlc3RvcnMnIG5v
bnplcm8gc2Nyb2xsRGVsdGFzIHRvIGtlZXAgdGhpcyBsYXllcgorICAgICAgICAvLyBmaXhlZCBj
b3JyZWN0bHkuCisgICAgICAgIGNvbWJpbmVkVHJhbnNmb3JtID0gY3VycmVudFNjcm9sbENvbXBl
bnNhdGlvbk1hdHJpeCAqIGNvbWJpbmVkVHJhbnNmb3JtOworICAgIH0KKwogICAgIGJvb2wgYW5p
bWF0aW5nVHJhbnNmb3JtVG9UYXJnZXQgPSBsYXllci0+dHJhbnNmb3JtSXNBbmltYXRpbmcoKTsK
ICAgICBib29sIGFuaW1hdGluZ1RyYW5zZm9ybVRvU2NyZWVuID0gYW5pbWF0aW5nVHJhbnNmb3Jt
VG9UYXJnZXQ7CiAgICAgaWYgKGxheWVyLT5wYXJlbnQoKSkgewpAQCAtNjAyLDkgKzY5NiwxMSBA
QCBzdGF0aWMgYm9vbCBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0ludGVybmFsKExheWVyVHlwZSog
bGF5ZXIsIExheWVyVHlwZSogcm9vdExheQogICAgIGlmICghbGF5ZXJTaG91bGRCZVNraXBwZWQo
bGF5ZXIpKQogICAgICAgICBkZXNjZW5kYW50cy5hcHBlbmQobGF5ZXIpOwogCisgICAgV2ViVHJh
bnNmb3JtYXRpb25NYXRyaXggbmV4dFNjcm9sbENvbXBlbnNhdGlvbk1hdHJpeCA9IGNvbXB1dGVT
Y3JvbGxDb21wZW5zYXRpb25NYXRyaXhGb3JDaGlsZHJlbihsYXllciwgcGFyZW50TWF0cml4LCBj
dXJyZW50U2Nyb2xsQ29tcGVuc2F0aW9uTWF0cml4KTs7CisKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGxheWVyLT5jaGlsZHJlbigpLnNpemUoKTsgKytpKSB7CiAgICAgICAgIExheWVyVHlw
ZSogY2hpbGQgPSBsYXllci0+Y2hpbGRyZW4oKVtpXS5nZXQoKTsKLSAgICAgICAgYm9vbCBkcmF3
c0NvbnRlbnQgPSBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0ludGVybmFsPExheWVyVHlwZSwgTGF5
ZXJMaXN0LCBSZW5kZXJTdXJmYWNlVHlwZSwgTGF5ZXJTb3J0ZXI+KGNoaWxkLCByb290TGF5ZXIs
IHN1YmxheWVyTWF0cml4LCBuZXh0SGllcmFyY2h5TWF0cml4LCBuZWFyZXN0QW5jZXN0b3JUaGF0
TW92ZXNQaXhlbHMsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGRlc2NlbmRhbnRzLCBsYXllclNv
cnRlciwgbWF4VGV4dHVyZVNpemUpOworICAgICAgICBib29sIGRyYXdzQ29udGVudCA9IGNhbGN1
bGF0ZURyYXdUcmFuc2Zvcm1zSW50ZXJuYWw8TGF5ZXJUeXBlLCBMYXllckxpc3QsIFJlbmRlclN1
cmZhY2VUeXBlLCBMYXllclNvcnRlcj4oY2hpbGQsIHJvb3RMYXllciwgc3VibGF5ZXJNYXRyaXgs
IG5leHRIaWVyYXJjaHlNYXRyaXgsIG5leHRTY3JvbGxDb21wZW5zYXRpb25NYXRyaXgsIG5lYXJl
c3RBbmNlc3RvclRoYXRNb3Zlc1BpeGVscywgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZGVzY2Vu
ZGFudHMsIGxheWVyU29ydGVyLCBtYXhUZXh0dXJlU2l6ZSk7CiAKICAgICAgICAgaWYgKGRyYXdz
Q29udGVudCkgewogICAgICAgICAgICAgaWYgKGNoaWxkLT5yZW5kZXJTdXJmYWNlKCkpIHsKQEAg
LTc1MCwxMiArODQ2LDE0IEBAIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29y
UmVjdHNJbnRlcm5hbChjb25zdCBMYXllckxpc3QmIHJlbmRlclN1cmZhCiAKIHZvaWQgQ0NMYXll
clRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3JtcyhMYXllckNocm9taXVtKiBs
YXllciwgTGF5ZXJDaHJvbWl1bSogcm9vdExheWVyLCBjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgcGFyZW50TWF0cml4LCBjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZnVsbEhp
ZXJhcmNoeU1hdHJpeCwgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIGxheWVyTGlzdCwg
aW50IG1heFRleHR1cmVTaXplKQogewotICAgIFdlYkNvcmU6OmNhbGN1bGF0ZURyYXdUcmFuc2Zv
cm1zSW50ZXJuYWw8TGF5ZXJDaHJvbWl1bSwgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+
LCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0sIHZvaWQ+KGxheWVyLCByb290TGF5ZXIsIHBhcmVudE1h
dHJpeCwgZnVsbEhpZXJhcmNoeU1hdHJpeCwgMCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgbGF5
ZXJMaXN0LCAwLCBtYXhUZXh0dXJlU2l6ZSk7CisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgg
c2Nyb2xsQ29tcGVuc2F0aW9uTWF0cml4OworICAgIFdlYkNvcmU6OmNhbGN1bGF0ZURyYXdUcmFu
c2Zvcm1zSW50ZXJuYWw8TGF5ZXJDaHJvbWl1bSwgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVt
PiA+LCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0sIHZvaWQ+KGxheWVyLCByb290TGF5ZXIsIHBhcmVu
dE1hdHJpeCwgZnVsbEhpZXJhcmNoeU1hdHJpeCwgc2Nyb2xsQ29tcGVuc2F0aW9uTWF0cml4LCAw
LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBsYXllckxpc3QsIDAsIG1heFRleHR1cmVTaXplKTsK
IH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1z
KENDTGF5ZXJJbXBsKiBsYXllciwgQ0NMYXllckltcGwqIHJvb3RMYXllciwgY29uc3QgV2ViVHJh
bnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwgY29uc3QgV2ViVHJhbnNmb3JtYXRpb25N
YXRyaXgmIGZ1bGxIaWVyYXJjaHlNYXRyaXgsIFZlY3RvcjxDQ0xheWVySW1wbCo+JiByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0LCBWZWN0b3I8Q0NMYXllckltcGwqPiYgbGF5ZXJMaXN0LCBDQ0xheWVy
U29ydGVyKiBsYXllclNvcnRlciwgaW50IG1heFRleHR1cmVTaXplKQogewotICAgIFdlYkNvcmU6
OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zSW50ZXJuYWw8Q0NMYXllckltcGwsIFZlY3RvcjxDQ0xh
eWVySW1wbCo+LCBDQ1JlbmRlclN1cmZhY2UsIENDTGF5ZXJTb3J0ZXI+KGxheWVyLCByb290TGF5
ZXIsIHBhcmVudE1hdHJpeCwgZnVsbEhpZXJhcmNoeU1hdHJpeCwgMCwgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdCwgbGF5ZXJMaXN0LCBsYXllclNvcnRlciwgbWF4VGV4dHVyZVNpemUpOworICAgIFdl
YlRyYW5zZm9ybWF0aW9uTWF0cml4IHNjcm9sbENvbXBlbnNhdGlvbk1hdHJpeDsKKyAgICBXZWJD
b3JlOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0ludGVybmFsPENDTGF5ZXJJbXBsLCBWZWN0b3I8
Q0NMYXllckltcGwqPiwgQ0NSZW5kZXJTdXJmYWNlLCBDQ0xheWVyU29ydGVyPihsYXllciwgcm9v
dExheWVyLCBwYXJlbnRNYXRyaXgsIGZ1bGxIaWVyYXJjaHlNYXRyaXgsIHNjcm9sbENvbXBlbnNh
dGlvbk1hdHJpeCwgMCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgbGF5ZXJMaXN0LCBsYXllclNv
cnRlciwgbWF4VGV4dHVyZVNpemUpOwogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6
Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21p
dW0+ID4mIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGNvbnN0IEZsb2F0UmVjdCYgcm9vdFNjaXNz
b3JSZWN0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVy
VHJlZUhvc3RDb21tb25UZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NM
YXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAKaW5kZXggMWQwNjlhNWJlM2FiNTQ5ZjBkZjE4NjE5
MmRiYmVlOTk1NmM4M2UxOC4uNjVkNjE3NmQ4NGJlZjc1NzUwNzI4OWJjODA1YmIwNGUyMjRkNTk5
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhv
c3RDb21tb25UZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5
ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwCkBAIC00OCw3ICs0OCw4IEBAIHVzaW5nIFdlYktpdDo6
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg7CiAKIG5hbWVzcGFjZSB7CiAKLXZvaWQgc2V0TGF5ZXJQ
cm9wZXJ0aWVzRm9yVGVzdGluZyhMYXllckNocm9taXVtKiBsYXllciwgY29uc3QgV2ViVHJhbnNm
b3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgm
IHN1YmxheWVyVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3IsIGNvbnN0IEZsb2F0
UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBJbnRTaXplJiBib3VuZHMsIGJvb2wgcHJlc2VydmVzM0Qp
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5cGU+Cit2b2lkIHNldExheWVyUHJvcGVydGllc0Zv
clRlc3RpbmcoTGF5ZXJUeXBlKiBsYXllciwgY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgm
IHRyYW5zZm9ybSwgY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHN1YmxheWVyVHJhbnNm
b3JtLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3IsIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9u
LCBjb25zdCBJbnRTaXplJiBib3VuZHMsIGJvb2wgcHJlc2VydmVzM0QpCiB7CiAgICAgbGF5ZXIt
PnNldFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwogICAgIGxheWVyLT5zZXRTdWJsYXllclRyYW5zZm9y
bShzdWJsYXllclRyYW5zZm9ybSk7CkBAIC01OCw2ICs1OSwxNiBAQCB2b2lkIHNldExheWVyUHJv
cGVydGllc0ZvclRlc3RpbmcoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIGNvbnN0IFdlYlRyYW5zZm9y
bWF0aW9uTQogICAgIGxheWVyLT5zZXRQcmVzZXJ2ZXMzRChwcmVzZXJ2ZXMzRCk7CiB9CiAKK3Zv
aWQgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhMYXllckNocm9taXVtKiBsYXllciwgY29u
c3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgY29uc3QgV2ViVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIHN1YmxheWVyVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3Is
IGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBJbnRTaXplJiBib3VuZHMsIGJvb2wg
cHJlc2VydmVzM0QpCit7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZzxMYXllckNo
cm9taXVtPihsYXllciwgdHJhbnNmb3JtLCBzdWJsYXllclRyYW5zZm9ybSwgYW5jaG9yLCBwb3Np
dGlvbiwgYm91bmRzLCBwcmVzZXJ2ZXMzRCk7Cit9CisKK3ZvaWQgc2V0TGF5ZXJQcm9wZXJ0aWVz
Rm9yVGVzdGluZyhDQ0xheWVySW1wbCogbGF5ZXIsIGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0
cml4JiB0cmFuc2Zvcm0sIGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBzdWJsYXllclRy
YW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgYW5jaG9yLCBjb25zdCBGbG9hdFBvaW50JiBwb3Np
dGlvbiwgY29uc3QgSW50U2l6ZSYgYm91bmRzLCBib29sIHByZXNlcnZlczNEKQoreworICAgIHNl
dExheWVyUHJvcGVydGllc0ZvclRlc3Rpbmc8Q0NMYXllckltcGw+KGxheWVyLCB0cmFuc2Zvcm0s
IHN1YmxheWVyVHJhbnNmb3JtLCBhbmNob3IsIHBvc2l0aW9uLCBib3VuZHMsIHByZXNlcnZlczNE
KTsKK30KKwogdm9pZCBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5
KExheWVyQ2hyb21pdW0qIHJvb3RMYXllcikKIHsKICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBpZGVudGl0eU1hdHJpeDsKQEAgLTY4LDYgKzc5LDE3IEBAIHZvaWQgZXhlY3V0ZUNhbGN1bGF0
ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShMYXllckNocm9taXVtKiByb290TGF5ZXIpCiAg
ICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3Rz
KGR1bW15UmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcm9vdExheWVyLT5yZW5kZXJTdXJmYWNlKCkt
PmNvbnRlbnRSZWN0KCkpOwogfQogCit2b2lkIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jt
c0FuZFZpc2liaWxpdHkoQ0NMYXllckltcGwqIHJvb3RMYXllcikKK3sKKyAgICAvLyBOb3RlOiB0
aGlzIHZlcnNpb24gc2tpcHMgbGF5ZXIgc29ydGluZy4KKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICBWZWN0b3I8Q0NMYXllckltcGwqPiBkdW1teVJlbmRl
clN1cmZhY2VMYXllckxpc3Q7CisgICAgVmVjdG9yPENDTGF5ZXJJbXBsKj4gZHVtbXlMYXllckxp
c3Q7CisgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CisgICAgQ0NMYXllclRyZWVI
b3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtcyhyb290TGF5ZXIsIHJvb3RMYXllciwg
aWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBkdW1teVJlbmRlclN1cmZhY2VMYXllckxp
c3QsIGR1bW15TGF5ZXJMaXN0LCAwLCBkdW1teU1heFRleHR1cmVTaXplKTsKKyAgICBDQ0xheWVy
VHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMoZHVtbXlSZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0LCByb290TGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJl
Y3QoKSk7Cit9CisKIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHJlbW92ZTNEQ29tcG9uZW50T2ZN
YXRyaXgoY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdCkKIHsKICAgICBXZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeCByZXQgPSBtYXQ7CkBAIC04MSw2ICsxMDMsMzAgQEAgV2ViVHJhbnNm
b3JtYXRpb25NYXRyaXggcmVtb3ZlM0RDb21wb25lbnRPZk1hdHJpeChjb25zdCBXZWJUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYKICAgICByZXR1cm4gcmV0OwogfQogCitQYXNzT3duUHRyPENDTGF5ZXJJ
bXBsPiBjcmVhdGVUcmVlRm9yRml4ZWRQb3NpdGlvblRlc3RzKCkKK3sKKyAgICBPd25QdHI8Q0NM
YXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDEpOworICAgIE93blB0cjxDQ0xh
eWVySW1wbD4gY2hpbGQgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDIpOworICAgIE93blB0cjxDQ0xh
eWVySW1wbD4gZ3JhbmRDaGlsZCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMyk7CisgICAgT3duUHRy
PENDTGF5ZXJJbXBsPiBncmVhdEdyYW5kQ2hpbGQgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDQpOwor
CisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggSWRlbnRpdHlNYXRyaXg7CisgICAgRmxvYXRQ
b2ludCBhbmNob3IoMCwgMCk7CisgICAgRmxvYXRQb2ludCBwb3NpdGlvbigwLCAwKTsKKyAgICBJ
bnRTaXplIGJvdW5kcygxMDAsIDEwMCk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGlu
Zyhyb290LmdldCgpLCBJZGVudGl0eU1hdHJpeCwgSWRlbnRpdHlNYXRyaXgsIGFuY2hvciwgcG9z
aXRpb24sIGJvdW5kcywgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rpbmco
Y2hpbGQuZ2V0KCksIElkZW50aXR5TWF0cml4LCBJZGVudGl0eU1hdHJpeCwgYW5jaG9yLCBwb3Np
dGlvbiwgYm91bmRzLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhn
cmFuZENoaWxkLmdldCgpLCBJZGVudGl0eU1hdHJpeCwgSWRlbnRpdHlNYXRyaXgsIGFuY2hvciwg
cG9zaXRpb24sIGJvdW5kcywgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rp
bmcoZ3JlYXRHcmFuZENoaWxkLmdldCgpLCBJZGVudGl0eU1hdHJpeCwgSWRlbnRpdHlNYXRyaXgs
IGFuY2hvciwgcG9zaXRpb24sIGJvdW5kcywgZmFsc2UpOworCisgICAgZ3JhbmRDaGlsZC0+YWRk
Q2hpbGQoZ3JlYXRHcmFuZENoaWxkLnJlbGVhc2UoKSk7CisgICAgY2hpbGQtPmFkZENoaWxkKGdy
YW5kQ2hpbGQucmVsZWFzZSgpKTsKKyAgICByb290LT5hZGRDaGlsZChjaGlsZC5yZWxlYXNlKCkp
OworICAgIHJvb3QtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKworICAgIHJldHVybiByb290LnJl
bGVhc2UoKTsKK30KKwogY2xhc3MgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQg
OiBwdWJsaWMgTGF5ZXJDaHJvbWl1bSB7CiBwdWJsaWM6CiAgICAgTGF5ZXJDaHJvbWl1bVdpdGhG
b3JjZWREcmF3c0NvbnRlbnQoKQpAQCAtMTE3Niw2ICsxMjIyLDYwMCBAQCBURVNUKENDTGF5ZXJU
cmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUZvcmNlUmVuZGVyU3VyZmFjZSkKICAgICBFWFBFQ1Rf
RVEocmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCksIDBVKTsKIH0KIAorVEVTVChDQ0xheWVy
VHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlTY3JvbGxDb21wZW5zYXRpb25Gb3JGaXhlZFBvc2l0
aW9uTGF5ZXJXaXRoRGlyZWN0Q29udGFpbmVyKQoreworICAgIC8vIFRoaXMgdGVzdCBjaGVja3Mg
Zm9yIGNvcnJlY3Qgc2Nyb2xsIGNvbXBlbnNhdGlvbiB3aGVuIHRoZSBmaXhlZC1wb3NpdGlvbiBj
b250YWluZXIKKyAgICAvLyBpcyB0aGUgZGlyZWN0IHBhcmVudCBvZiB0aGUgZml4ZWQtcG9zaXRp
b24gbGF5ZXIuCisKKyAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgc2NvcGVkSW1wbFRocmVh
ZDsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBjcmVhdGVUcmVlRm9yRml4ZWRQb3Np
dGlvblRlc3RzKCk7CisgICAgQ0NMYXllckltcGwqIGNoaWxkID0gcm9vdC0+Y2hpbGRyZW4oKVsw
XS5nZXQoKTsKKyAgICBDQ0xheWVySW1wbCogZ3JhbmRDaGlsZCA9IGNoaWxkLT5jaGlsZHJlbigp
WzBdLmdldCgpOworCisgICAgY2hpbGQtPnNldElzQ29udGFpbmVyRm9yRml4ZWRQb3NpdGlvbkxh
eWVycyh0cnVlKTsKKyAgICBncmFuZENoaWxkLT5zZXRGaXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNp
YmxlUmVjdCh0cnVlKTsKKworICAgIC8vIENhc2UgMTogc2Nyb2xsRGVsdGEgb2YgMCwgMAorICAg
IGNoaWxkLT5zZXRTY3JvbGxEZWx0YShJbnRTaXplKDAsIDApKTsKKyAgICBleGVjdXRlQ2FsY3Vs
YXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3QuZ2V0KCkpOworCisgICAgLy8gVGhl
IGV4cGVjdGVkIGRyYXdUcmFuc2Zvcm1zIHdpdGhvdXQgYW55IHNjcm9sbCBzaG91bGQgc3RpbGwg
aW5jbHVkZSBhIHRyYW5zbGF0aW9uIHRvIHRoZSBjZW50ZXIgb2YgdGhlIGxheWVyIChpLmUuIHRy
YW5zbGF0aW9uIGJ5IDUwLCA1MCkuCisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggZXhwZWN0
ZWRDaGlsZFRyYW5zZm9ybTsKKyAgICBleHBlY3RlZENoaWxkVHJhbnNmb3JtLnRyYW5zbGF0ZSg1
MCwgNTApOworCisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggZXhwZWN0ZWRHcmFuZENoaWxk
VHJhbnNmb3JtID0gZXhwZWN0ZWRDaGlsZFRyYW5zZm9ybTsKKworICAgIEVYUEVDVF9UUkFOU0ZP
Uk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0ZWRDaGlsZFRyYW5zZm9ybSwgY2hpbGQtPmRyYXdUcmFu
c2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZEdy
YW5kQ2hpbGRUcmFuc2Zvcm0sIGdyYW5kQ2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisKKyAgICAv
LyBDYXNlIDI6IHNjcm9sbERlbHRhIG9mIDEwLCAxMAorICAgIGNoaWxkLT5zZXRTY3JvbGxEZWx0
YShJbnRTaXplKDEwLCAxMCkpOworICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0Fu
ZFZpc2liaWxpdHkocm9vdC5nZXQoKSk7CisKKyAgICAvLyBIZXJlIHRoZSBjaGlsZCBpcyBhZmZl
Y3RlZCBieSBzY3JvbGxEZWx0YSwgYnV0IHRoZSBmaXhlZCBwb3NpdGlvbiBncmFuZENoaWxkIHNo
b3VsZCBub3QgYmUgYWZmZWN0ZWQuCisgICAgZXhwZWN0ZWRDaGlsZFRyYW5zZm9ybS5tYWtlSWRl
bnRpdHkoKTsKKyAgICBleHBlY3RlZENoaWxkVHJhbnNmb3JtLnRyYW5zbGF0ZSg0MCwgNDApOwor
CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZENoaWxkVHJhbnNm
b3JtLCBjaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05f
TUFUUklYX0VRKGV4cGVjdGVkR3JhbmRDaGlsZFRyYW5zZm9ybSwgZ3JhbmRDaGlsZC0+ZHJhd1Ry
YW5zZm9ybSgpKTsKK30KKworVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlT
Y3JvbGxDb21wZW5zYXRpb25Gb3JGaXhlZFBvc2l0aW9uTGF5ZXJXaXRoVHJhbnNmb3JtZWREaXJl
Y3RDb250YWluZXIpCit7CisgICAgLy8gVGhpcyB0ZXN0IGNoZWNrcyBmb3IgY29ycmVjdCBzY3Jv
bGwgY29tcGVuc2F0aW9uIHdoZW4gdGhlIGZpeGVkLXBvc2l0aW9uIGNvbnRhaW5lcgorICAgIC8v
IGlzIHRoZSBkaXJlY3QgcGFyZW50IG9mIHRoZSBmaXhlZC1wb3NpdGlvbiBsYXllciwgYnV0IHRo
YXQgY29udGFpbmVyIGlzIHRyYW5zZm9ybWVkLgorICAgIC8vIEluIHRoaXMgY2FzZSwgdGhlIGZp
eGVkIHBvc2l0aW9uIGVsZW1lbnQgaW5oZXJpdHMgdGhlIGNvbnRhaW5lcidzIHRyYW5zZm9ybSwK
KyAgICAvLyBidXQgdGhlIHNjcm9sbERlbHRhIHRoYXQgaGFzIHRvIGJlIHVuZG9uZSBzaG91bGQg
bm90IGJlIGFmZmVjdGVkIGJ5IHRoYXQgdHJhbnNmb3JtLgorICAgIC8vCisgICAgLy8gVHJhbnNm
b3JtcyBhcmUgaW4gZ2VuZXJhbCBub24tY29tbXV0YXRpdmU7IHVzaW5nIHNvbWV0aGluZyBsaWtl
IGEgbm9uLXVuaWZvcm0gc2NhbGUKKyAgICAvLyBoZWxwcyB0byB2ZXJpZnkgdGhhdCB0cmFuc2xh
dGlvbnMgYW5kIG5vbi11bmlmb3JtIHNjYWxlcyBhcmUgYXBwbGllZCBpbiB0aGUgY29ycmVjdAor
ICAgIC8vIG9yZGVyLgorCisgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIHNjb3BlZEltcGxU
aHJlYWQ7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gY3JlYXRlVHJlZUZvckZpeGVk
UG9zaXRpb25UZXN0cygpOworICAgIENDTGF5ZXJJbXBsKiBjaGlsZCA9IHJvb3QtPmNoaWxkcmVu
KClbMF0uZ2V0KCk7CisgICAgQ0NMYXllckltcGwqIGdyYW5kQ2hpbGQgPSBjaGlsZC0+Y2hpbGRy
ZW4oKVswXS5nZXQoKTsKKworICAgIC8vIFRoaXMgc2NhbGUgd2lsbCBjYXVzZSBjaGlsZCBhbmQg
Z3JhbmRDaGlsZCB0byBiZSBlZmZlY3RpdmVseSAyMDAgeCA4MDAgd2l0aCByZXNwZWN0IHRvIHRo
ZSB0YXJnZXRSZW5kZXJTdXJmYWNlLgorICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IG5vblVu
aWZvcm1TY2FsZTsKKyAgICBub25Vbmlmb3JtU2NhbGUuc2NhbGVOb25Vbmlmb3JtKDIsIDgpOwor
ICAgIGNoaWxkLT5zZXRUcmFuc2Zvcm0obm9uVW5pZm9ybVNjYWxlKTsKKworICAgIGNoaWxkLT5z
ZXRJc0NvbnRhaW5lckZvckZpeGVkUG9zaXRpb25MYXllcnModHJ1ZSk7CisgICAgZ3JhbmRDaGls
ZC0+c2V0Rml4ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3QodHJ1ZSk7CisKKyAgICAvLyBD
YXNlIDE6IHNjcm9sbERlbHRhIG9mIDAsIDAKKyAgICBjaGlsZC0+c2V0U2Nyb2xsRGVsdGEoSW50
U2l6ZSgwLCAwKSk7CisgICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJp
bGl0eShyb290LmdldCgpKTsKKworICAgIC8vIFRoZSBleHBlY3RlZCBkcmF3VHJhbnNmb3JtcyB3
aXRob3V0IGFueSBzY3JvbGwgc2hvdWxkIHN0aWxsIGluY2x1ZGUgYSB0cmFuc2xhdGlvbiB0byB0
aGUgY2VudGVyIG9mIHRoZSBsYXllciAoaS5lLiB0cmFuc2xhdGlvbiBieSA1MCwgNTApLgorICAg
IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGV4cGVjdGVkQ2hpbGRUcmFuc2Zvcm07CisgICAgZXhw
ZWN0ZWRDaGlsZFRyYW5zZm9ybS5tdWx0aXBseShub25Vbmlmb3JtU2NhbGUpOworICAgIGV4cGVj
dGVkQ2hpbGRUcmFuc2Zvcm0udHJhbnNsYXRlKDUwLCA1MCk7CisKKyAgICBXZWJUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBleHBlY3RlZEdyYW5kQ2hpbGRUcmFuc2Zvcm0gPSBleHBlY3RlZENoaWxkVHJh
bnNmb3JtOworCisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZENo
aWxkVHJhbnNmb3JtLCBjaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNG
T1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVkR3JhbmRDaGlsZFRyYW5zZm9ybSwgZ3JhbmRDaGls
ZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKworICAgIC8vIENhc2UgMjogc2Nyb2xsRGVsdGEgb2YgMTAs
IDIwCisgICAgY2hpbGQtPnNldFNjcm9sbERlbHRhKEludFNpemUoMTAsIDIwKSk7CisgICAgZXhl
Y3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShyb290LmdldCgpKTsKKwor
ICAgIC8vIFRoZSBjaGlsZCBzaG91bGQgYmUgYWZmZWN0ZWQgYnkgc2Nyb2xsRGVsdGEsIGJ1dCB0
aGUgZml4ZWQgcG9zaXRpb24gZ3JhbmRDaGlsZCBzaG91bGQgbm90IGJlIGFmZmVjdGVkLgorICAg
IGV4cGVjdGVkQ2hpbGRUcmFuc2Zvcm0ubWFrZUlkZW50aXR5KCk7CisgICAgZXhwZWN0ZWRDaGls
ZFRyYW5zZm9ybS50cmFuc2xhdGUoLTEwLCAtMjApOyAvLyBzY3JvbGxEZWx0YQorICAgIGV4cGVj
dGVkQ2hpbGRUcmFuc2Zvcm0ubXVsdGlwbHkobm9uVW5pZm9ybVNjYWxlKTsKKyAgICBleHBlY3Rl
ZENoaWxkVHJhbnNmb3JtLnRyYW5zbGF0ZSg1MCwgNTApOworCisgICAgRVhQRUNUX1RSQU5TRk9S
TUFUSU9OX01BVFJJWF9FUShleHBlY3RlZENoaWxkVHJhbnNmb3JtLCBjaGlsZC0+ZHJhd1RyYW5z
Zm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVkR3Jh
bmRDaGlsZFRyYW5zZm9ybSwgZ3JhbmRDaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKK30KKworVEVT
VChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlTY3JvbGxDb21wZW5zYXRpb25Gb3JG
aXhlZFBvc2l0aW9uTGF5ZXJXaXRoRGlzdGFudENvbnRhaW5lcikKK3sKKyAgICAvLyBUaGlzIHRl
c3QgY2hlY2tzIGZvciBjb3JyZWN0IHNjcm9sbCBjb21wZW5zYXRpb24gd2hlbiB0aGUgZml4ZWQt
cG9zaXRpb24gY29udGFpbmVyCisgICAgLy8gaXMgTk9UIHRoZSBkaXJlY3QgcGFyZW50IG9mIHRo
ZSBmaXhlZC1wb3NpdGlvbiBsYXllci4KKyAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgc2Nv
cGVkSW1wbFRocmVhZDsKKworICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IGNyZWF0ZVRy
ZWVGb3JGaXhlZFBvc2l0aW9uVGVzdHMoKTsKKyAgICBDQ0xheWVySW1wbCogY2hpbGQgPSByb290
LT5jaGlsZHJlbigpWzBdLmdldCgpOworICAgIENDTGF5ZXJJbXBsKiBncmFuZENoaWxkID0gY2hp
bGQtPmNoaWxkcmVuKClbMF0uZ2V0KCk7CisgICAgQ0NMYXllckltcGwqIGdyZWF0R3JhbmRDaGls
ZCA9IGdyYW5kQ2hpbGQtPmNoaWxkcmVuKClbMF0uZ2V0KCk7CisKKyAgICBjaGlsZC0+c2V0SXND
b250YWluZXJGb3JGaXhlZFBvc2l0aW9uTGF5ZXJzKHRydWUpOworICAgIGdyYW5kQ2hpbGQtPnNl
dFBvc2l0aW9uKEZsb2F0UG9pbnQoOCwgNikpOworICAgIGdyZWF0R3JhbmRDaGlsZC0+c2V0Rml4
ZWRUb0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3QodHJ1ZSk7CisKKyAgICAvLyBDYXNlIDE6IHNj
cm9sbERlbHRhIG9mIDAsIDAKKyAgICBjaGlsZC0+c2V0U2Nyb2xsRGVsdGEoSW50U2l6ZSgwLCAw
KSk7CisgICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShyb290
LmdldCgpKTsKKworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGV4cGVjdGVkQ2hpbGRUcmFu
c2Zvcm07CisgICAgZXhwZWN0ZWRDaGlsZFRyYW5zZm9ybS50cmFuc2xhdGUoNTAsIDUwKTsKKwor
ICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGV4cGVjdGVkR3JhbmRDaGlsZFRyYW5zZm9ybTsK
KyAgICBleHBlY3RlZEdyYW5kQ2hpbGRUcmFuc2Zvcm0udHJhbnNsYXRlKDU4LCA1Nik7CisKKyAg
ICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBleHBlY3RlZEdyZWF0R3JhbmRDaGlsZFRyYW5zZm9y
bSA9IGV4cGVjdGVkR3JhbmRDaGlsZFRyYW5zZm9ybTsKKworICAgIEVYUEVDVF9UUkFOU0ZPUk1B
VElPTl9NQVRSSVhfRVEoZXhwZWN0ZWRDaGlsZFRyYW5zZm9ybSwgY2hpbGQtPmRyYXdUcmFuc2Zv
cm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZEdyYW5k
Q2hpbGRUcmFuc2Zvcm0sIGdyYW5kQ2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNU
X1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZEdyZWF0R3JhbmRDaGlsZFRyYW5zZm9y
bSwgZ3JlYXRHcmFuZENoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworCisgICAgLy8gQ2FzZSAyOiBz
Y3JvbGxEZWx0YSBvZiAxMCwgMTAKKyAgICBjaGlsZC0+c2V0U2Nyb2xsRGVsdGEoSW50U2l6ZSgx
MCwgMTApKTsKKyAgICBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5
KHJvb3QuZ2V0KCkpOworCisgICAgLy8gSGVyZSB0aGUgY2hpbGQgYW5kIGdyYW5kQ2hpbGQgYXJl
IGFmZmVjdGVkIGJ5IHNjcm9sbERlbHRhLCBidXQgdGhlIGZpeGVkIHBvc2l0aW9uIGdyZWF0R3Jh
bmRDaGlsZCBzaG91bGQgbm90IGJlIGFmZmVjdGVkLgorICAgIGV4cGVjdGVkQ2hpbGRUcmFuc2Zv
cm0ubWFrZUlkZW50aXR5KCk7CisgICAgZXhwZWN0ZWRDaGlsZFRyYW5zZm9ybS50cmFuc2xhdGUo
NDAsIDQwKTsKKyAgICBleHBlY3RlZEdyYW5kQ2hpbGRUcmFuc2Zvcm0ubWFrZUlkZW50aXR5KCk7
CisgICAgZXhwZWN0ZWRHcmFuZENoaWxkVHJhbnNmb3JtLnRyYW5zbGF0ZSg0OCwgNDYpOworICAg
IEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0ZWRDaGlsZFRyYW5zZm9ybSwg
Y2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJ
WF9FUShleHBlY3RlZEdyYW5kQ2hpbGRUcmFuc2Zvcm0sIGdyYW5kQ2hpbGQtPmRyYXdUcmFuc2Zv
cm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZEdyZWF0
R3JhbmRDaGlsZFRyYW5zZm9ybSwgZ3JlYXRHcmFuZENoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOwor
fQorCitURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVNjcm9sbENvbXBlbnNh
dGlvbkZvckZpeGVkUG9zaXRpb25MYXllcldpdGhEaXN0YW50Q29udGFpbmVyQW5kVHJhbnNmb3Jt
cykKK3sKKyAgICAvLyBUaGlzIHRlc3QgY2hlY2tzIGZvciBjb3JyZWN0IHNjcm9sbCBjb21wZW5z
YXRpb24gd2hlbiB0aGUgZml4ZWQtcG9zaXRpb24gY29udGFpbmVyCisgICAgLy8gaXMgTk9UIHRo
ZSBkaXJlY3QgcGFyZW50IG9mIHRoZSBmaXhlZC1wb3NpdGlvbiBsYXllciwgYW5kIHRoZSBoaWVy
YXJjaHkgaGFzIHZhcmlvdXMKKyAgICAvLyB0cmFuc2Zvcm1zIHRoYXQgaGF2ZSB0byBiZSBwcm9j
ZXNzZWQgaW4gdGhlIGNvcnJlY3Qgb3JkZXIuCisgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFk
IHNjb3BlZEltcGxUaHJlYWQ7CisKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBjcmVh
dGVUcmVlRm9yRml4ZWRQb3NpdGlvblRlc3RzKCk7CisgICAgQ0NMYXllckltcGwqIGNoaWxkID0g
cm9vdC0+Y2hpbGRyZW4oKVswXS5nZXQoKTsKKyAgICBDQ0xheWVySW1wbCogZ3JhbmRDaGlsZCA9
IGNoaWxkLT5jaGlsZHJlbigpWzBdLmdldCgpOworICAgIENDTGF5ZXJJbXBsKiBncmVhdEdyYW5k
Q2hpbGQgPSBncmFuZENoaWxkLT5jaGlsZHJlbigpWzBdLmdldCgpOworCisgICAgV2ViVHJhbnNm
b3JtYXRpb25NYXRyaXggcm90YXRpb25BYm91dFo7CisgICAgcm90YXRpb25BYm91dFoucm90YXRl
M2QoMCwgMCwgOTApOworICAgIAorICAgIGNoaWxkLT5zZXRJc0NvbnRhaW5lckZvckZpeGVkUG9z
aXRpb25MYXllcnModHJ1ZSk7CisgICAgY2hpbGQtPnNldFRyYW5zZm9ybShyb3RhdGlvbkFib3V0
Wik7CisgICAgZ3JhbmRDaGlsZC0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCg4LCA2KSk7CisgICAg
Z3JhbmRDaGlsZC0+c2V0VHJhbnNmb3JtKHJvdGF0aW9uQWJvdXRaKTsKKyAgICBncmVhdEdyYW5k
Q2hpbGQtPnNldEZpeGVkVG9Db250YWluZXJMYXllclZpc2libGVSZWN0KHRydWUpOyAvLyBncmVh
dEdyYW5kQ2hpbGQgaXMgcG9zaXRpb25lZCB1cHNpZGUtZG93biB3aXRoIHJlc3BlY3QgdG8gdGhl
IHRhcmdldFJlbmRlclN1cmZhY2UKKworICAgIC8vIENhc2UgMTogc2Nyb2xsRGVsdGEgb2YgMCwg
MAorICAgIGNoaWxkLT5zZXRTY3JvbGxEZWx0YShJbnRTaXplKDAsIDApKTsKKyAgICBleGVjdXRl
Q2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3QuZ2V0KCkpOworCisgICAg
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggZXhwZWN0ZWRDaGlsZFRyYW5zZm9ybTsKKyAgICBleHBl
Y3RlZENoaWxkVHJhbnNmb3JtLm11bHRpcGx5KHJvdGF0aW9uQWJvdXRaKTsKKyAgICBleHBlY3Rl
ZENoaWxkVHJhbnNmb3JtLnRyYW5zbGF0ZSg1MCwgNTApOworCisgICAgV2ViVHJhbnNmb3JtYXRp
b25NYXRyaXggZXhwZWN0ZWRHcmFuZENoaWxkVHJhbnNmb3JtOworICAgIGV4cGVjdGVkR3JhbmRD
aGlsZFRyYW5zZm9ybS5tdWx0aXBseShyb3RhdGlvbkFib3V0Wik7IC8vIGNoaWxkJ3MgbG9jYWwg
dHJhbnNmb3JtIGlzIGluaGVyaXRlZAorICAgIGV4cGVjdGVkR3JhbmRDaGlsZFRyYW5zZm9ybS50
cmFuc2xhdGUoOCwgNik7IC8vIHRyYW5zbGF0aW9uIGJlY2F1c2Ugb2YgcG9zaXRpb24gb2NjdXJz
IGJlZm9yZSBsYXllcidzIGxvY2FsIHRyYW5zZm9ybS4KKyAgICBleHBlY3RlZEdyYW5kQ2hpbGRU
cmFuc2Zvcm0ubXVsdGlwbHkocm90YXRpb25BYm91dFopOyAvLyBncmFuZENoaWxkJ3MgbG9jYWwg
dHJhbnNmb3JtCisgICAgZXhwZWN0ZWRHcmFuZENoaWxkVHJhbnNmb3JtLnRyYW5zbGF0ZSg1MCwg
NTApOyAvLyB0cmFuc2xhdGlvbiBiZWNhdXNlIG9mIGhhbGYtd2lkdGggaGFsZi1oZWlnaHQgb2Nj
dXJzIGFmdGVyIGxheWVyJ3MgbG9jYWwgdHJhbnNmb3JtCisKKyAgICBXZWJUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBleHBlY3RlZEdyZWF0R3JhbmRDaGlsZFRyYW5zZm9ybSA9IGV4cGVjdGVkR3JhbmRD
aGlsZFRyYW5zZm9ybTsKKworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhw
ZWN0ZWRDaGlsZFRyYW5zZm9ybSwgY2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNU
X1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZEdyYW5kQ2hpbGRUcmFuc2Zvcm0sIGdy
YW5kQ2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01B
VFJJWF9FUShleHBlY3RlZEdyZWF0R3JhbmRDaGlsZFRyYW5zZm9ybSwgZ3JlYXRHcmFuZENoaWxk
LT5kcmF3VHJhbnNmb3JtKCkpOworCisgICAgLy8gQ2FzZSAyOiBzY3JvbGxEZWx0YSBvZiAxMCwg
MjAKKyAgICBjaGlsZC0+c2V0U2Nyb2xsRGVsdGEoSW50U2l6ZSgxMCwgMjApKTsKKyAgICBleGVj
dXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3QuZ2V0KCkpOworCisg
ICAgLy8gSGVyZSB0aGUgY2hpbGQgYW5kIGdyYW5kQ2hpbGQgYXJlIGFmZmVjdGVkIGJ5IHNjcm9s
bERlbHRhLCBidXQgdGhlIGZpeGVkIHBvc2l0aW9uIGdyZWF0R3JhbmRDaGlsZCBzaG91bGQgbm90
IGJlIGFmZmVjdGVkLgorICAgIGV4cGVjdGVkQ2hpbGRUcmFuc2Zvcm0ubWFrZUlkZW50aXR5KCk7
CisgICAgZXhwZWN0ZWRDaGlsZFRyYW5zZm9ybS50cmFuc2xhdGUoLTEwLCAtMjApOyAvLyBzY3Jv
bGxEZWx0YQorICAgIGV4cGVjdGVkQ2hpbGRUcmFuc2Zvcm0ubXVsdGlwbHkocm90YXRpb25BYm91
dFopOworICAgIGV4cGVjdGVkQ2hpbGRUcmFuc2Zvcm0udHJhbnNsYXRlKDUwLCA1MCk7CisKKyAg
ICBleHBlY3RlZEdyYW5kQ2hpbGRUcmFuc2Zvcm0ubWFrZUlkZW50aXR5KCk7CisgICAgZXhwZWN0
ZWRHcmFuZENoaWxkVHJhbnNmb3JtLnRyYW5zbGF0ZSgtMTAsIC0yMCk7IC8vIGNoaWxkJ3Mgc2Ny
b2xsRGVsdGEgaXMgaW5oZXJpdGVkCisgICAgZXhwZWN0ZWRHcmFuZENoaWxkVHJhbnNmb3JtLm11
bHRpcGx5KHJvdGF0aW9uQWJvdXRaKTsgLy8gY2hpbGQncyBsb2NhbCB0cmFuc2Zvcm0gaXMgaW5o
ZXJpdGVkCisgICAgZXhwZWN0ZWRHcmFuZENoaWxkVHJhbnNmb3JtLnRyYW5zbGF0ZSg4LCA2KTsg
Ly8gdHJhbnNsYXRpb24gYmVjYXVzZSBvZiBwb3NpdGlvbiBvY2N1cnMgYmVmb3JlIGxheWVyJ3Mg
bG9jYWwgdHJhbnNmb3JtLgorICAgIGV4cGVjdGVkR3JhbmRDaGlsZFRyYW5zZm9ybS5tdWx0aXBs
eShyb3RhdGlvbkFib3V0Wik7IC8vIGdyYW5kQ2hpbGQncyBsb2NhbCB0cmFuc2Zvcm0KKyAgICBl
eHBlY3RlZEdyYW5kQ2hpbGRUcmFuc2Zvcm0udHJhbnNsYXRlKDUwLCA1MCk7IC8vIHRyYW5zbGF0
aW9uIGJlY2F1c2Ugb2YgaGFsZi13aWR0aCBoYWxmLWhlaWdodCBvY2N1cnMgYWZ0ZXIgbGF5ZXIn
cyBsb2NhbCB0cmFuc2Zvcm0KKworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEo
ZXhwZWN0ZWRDaGlsZFRyYW5zZm9ybSwgY2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQ
RUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZEdyYW5kQ2hpbGRUcmFuc2Zvcm0s
IGdyYW5kQ2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9O
X01BVFJJWF9FUShleHBlY3RlZEdyZWF0R3JhbmRDaGlsZFRyYW5zZm9ybSwgZ3JlYXRHcmFuZENo
aWxkLT5kcmF3VHJhbnNmb3JtKCkpOworfQorCitURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRl
c3QsIHZlcmlmeVNjcm9sbENvbXBlbnNhdGlvbkZvckZpeGVkUG9zaXRpb25MYXllcldpdGhNdWx0
aXBsZVNjcm9sbERlbHRhcykKK3sKKyAgICAvLyBUaGlzIHRlc3QgY2hlY2tzIGZvciBjb3JyZWN0
IHNjcm9sbCBjb21wZW5zYXRpb24gd2hlbiB0aGUgZml4ZWQtcG9zaXRpb24gY29udGFpbmVyCisg
ICAgLy8gaGFzIG11bHRpcGxlIGFuY2VzdG9ycyB0aGF0IGhhdmUgbm9uemVybyBzY3JvbGxEZWx0
YSBiZWZvcmUgcmVhY2hpbmcgdGhlIHNwYWNlIHdoZXJlIHRoZSBsYXllciBpcyBmaXhlZC4KKyAg
ICAvLyBJbiB0aGlzIHRlc3QsIGVhY2ggc2Nyb2xsRGVsdGEgb2NjdXJzIGluIGEgZGlmZmVyZW50
IHNwYWNlIGJlY2F1c2Ugb2YgZWFjaCBsYXllcidzIGxvY2FsIHRyYW5zZm9ybS4KKyAgICAvLyBU
aGlzIHRlc3QgY2hlY2tzIGZvciBjb3JyZWN0IHNjcm9sbCBjb21wZW5zYXRpb24gd2hlbiB0aGUg
Zml4ZWQtcG9zaXRpb24gY29udGFpbmVyCisgICAgLy8gaXMgTk9UIHRoZSBkaXJlY3QgcGFyZW50
IG9mIHRoZSBmaXhlZC1wb3NpdGlvbiBsYXllciwgYW5kIHRoZSBoaWVyYXJjaHkgaGFzIHZhcmlv
dXMKKyAgICAvLyB0cmFuc2Zvcm1zIHRoYXQgaGF2ZSB0byBiZSBwcm9jZXNzZWQgaW4gdGhlIGNv
cnJlY3Qgb3JkZXIuCisgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIHNjb3BlZEltcGxUaHJl
YWQ7CisKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBjcmVhdGVUcmVlRm9yRml4ZWRQ
b3NpdGlvblRlc3RzKCk7CisgICAgQ0NMYXllckltcGwqIGNoaWxkID0gcm9vdC0+Y2hpbGRyZW4o
KVswXS5nZXQoKTsKKyAgICBDQ0xheWVySW1wbCogZ3JhbmRDaGlsZCA9IGNoaWxkLT5jaGlsZHJl
bigpWzBdLmdldCgpOworICAgIENDTGF5ZXJJbXBsKiBncmVhdEdyYW5kQ2hpbGQgPSBncmFuZENo
aWxkLT5jaGlsZHJlbigpWzBdLmdldCgpOworCisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgg
cm90YXRpb25BYm91dFo7CisgICAgcm90YXRpb25BYm91dFoucm90YXRlM2QoMCwgMCwgOTApOwor
ICAgIAorICAgIGNoaWxkLT5zZXRJc0NvbnRhaW5lckZvckZpeGVkUG9zaXRpb25MYXllcnModHJ1
ZSk7CisgICAgY2hpbGQtPnNldFRyYW5zZm9ybShyb3RhdGlvbkFib3V0Wik7CisgICAgZ3JhbmRD
aGlsZC0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCg4LCA2KSk7CisgICAgZ3JhbmRDaGlsZC0+c2V0
VHJhbnNmb3JtKHJvdGF0aW9uQWJvdXRaKTsKKyAgICBncmVhdEdyYW5kQ2hpbGQtPnNldEZpeGVk
VG9Db250YWluZXJMYXllclZpc2libGVSZWN0KHRydWUpOyAvLyBncmVhdEdyYW5kQ2hpbGQgaXMg
cG9zaXRpb25lZCB1cHNpZGUtZG93biB3aXRoIHJlc3BlY3QgdG8gdGhlIHRhcmdldFJlbmRlclN1
cmZhY2UKKworICAgIC8vIENhc2UgMTogc2Nyb2xsRGVsdGEgb2YgMCwgMAorICAgIGNoaWxkLT5z
ZXRTY3JvbGxEZWx0YShJbnRTaXplKDAsIDApKTsKKyAgICBleGVjdXRlQ2FsY3VsYXRlRHJhd1Ry
YW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3QuZ2V0KCkpOworCisgICAgV2ViVHJhbnNmb3JtYXRp
b25NYXRyaXggZXhwZWN0ZWRDaGlsZFRyYW5zZm9ybTsKKyAgICBleHBlY3RlZENoaWxkVHJhbnNm
b3JtLm11bHRpcGx5KHJvdGF0aW9uQWJvdXRaKTsKKyAgICBleHBlY3RlZENoaWxkVHJhbnNmb3Jt
LnRyYW5zbGF0ZSg1MCwgNTApOworCisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggZXhwZWN0
ZWRHcmFuZENoaWxkVHJhbnNmb3JtOworICAgIGV4cGVjdGVkR3JhbmRDaGlsZFRyYW5zZm9ybS5t
dWx0aXBseShyb3RhdGlvbkFib3V0Wik7IC8vIGNoaWxkJ3MgbG9jYWwgdHJhbnNmb3JtIGlzIGlu
aGVyaXRlZAorICAgIGV4cGVjdGVkR3JhbmRDaGlsZFRyYW5zZm9ybS50cmFuc2xhdGUoOCwgNik7
IC8vIHRyYW5zbGF0aW9uIGJlY2F1c2Ugb2YgcG9zaXRpb24gb2NjdXJzIGJlZm9yZSBsYXllcidz
IGxvY2FsIHRyYW5zZm9ybS4KKyAgICBleHBlY3RlZEdyYW5kQ2hpbGRUcmFuc2Zvcm0ubXVsdGlw
bHkocm90YXRpb25BYm91dFopOyAvLyBncmFuZENoaWxkJ3MgbG9jYWwgdHJhbnNmb3JtCisgICAg
ZXhwZWN0ZWRHcmFuZENoaWxkVHJhbnNmb3JtLnRyYW5zbGF0ZSg1MCwgNTApOyAvLyB0cmFuc2xh
dGlvbiBiZWNhdXNlIG9mIGhhbGYtd2lkdGggaGFsZi1oZWlnaHQgb2NjdXJzIGFmdGVyIGxheWVy
J3MgbG9jYWwgdHJhbnNmb3JtCisKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBleHBlY3Rl
ZEdyZWF0R3JhbmRDaGlsZFRyYW5zZm9ybSA9IGV4cGVjdGVkR3JhbmRDaGlsZFRyYW5zZm9ybTsK
KworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0ZWRDaGlsZFRyYW5z
Zm9ybSwgY2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9O
X01BVFJJWF9FUShleHBlY3RlZEdyYW5kQ2hpbGRUcmFuc2Zvcm0sIGdyYW5kQ2hpbGQtPmRyYXdU
cmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3Rl
ZEdyZWF0R3JhbmRDaGlsZFRyYW5zZm9ybSwgZ3JlYXRHcmFuZENoaWxkLT5kcmF3VHJhbnNmb3Jt
KCkpOworCisgICAgLy8gQ2FzZSAyOiBzY3JvbGxEZWx0YSBvZiAxMCwgMjAKKyAgICBjaGlsZC0+
c2V0U2Nyb2xsRGVsdGEoSW50U2l6ZSgxMCwgMCkpOworICAgIGdyYW5kQ2hpbGQtPnNldFNjcm9s
bERlbHRhKEludFNpemUoNSwgMCkpOworICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jt
c0FuZFZpc2liaWxpdHkocm9vdC5nZXQoKSk7CisKKyAgICAvLyBIZXJlIHRoZSBjaGlsZCBhbmQg
Z3JhbmRDaGlsZCBhcmUgYWZmZWN0ZWQgYnkgc2Nyb2xsRGVsdGEsIGJ1dCB0aGUgZml4ZWQgcG9z
aXRpb24gZ3JlYXRHcmFuZENoaWxkIHNob3VsZCBub3QgYmUgYWZmZWN0ZWQuCisgICAgZXhwZWN0
ZWRDaGlsZFRyYW5zZm9ybS5tYWtlSWRlbnRpdHkoKTsKKyAgICBleHBlY3RlZENoaWxkVHJhbnNm
b3JtLnRyYW5zbGF0ZSgtMTAsIDApOyAvLyBzY3JvbGxEZWx0YQorICAgIGV4cGVjdGVkQ2hpbGRU
cmFuc2Zvcm0ubXVsdGlwbHkocm90YXRpb25BYm91dFopOworICAgIGV4cGVjdGVkQ2hpbGRUcmFu
c2Zvcm0udHJhbnNsYXRlKDUwLCA1MCk7CisKKyAgICBleHBlY3RlZEdyYW5kQ2hpbGRUcmFuc2Zv
cm0ubWFrZUlkZW50aXR5KCk7CisgICAgZXhwZWN0ZWRHcmFuZENoaWxkVHJhbnNmb3JtLnRyYW5z
bGF0ZSgtMTAsIDApOyAvLyBjaGlsZCdzIHNjcm9sbERlbHRhIGlzIGluaGVyaXRlZAorICAgIGV4
cGVjdGVkR3JhbmRDaGlsZFRyYW5zZm9ybS5tdWx0aXBseShyb3RhdGlvbkFib3V0Wik7IC8vIGNo
aWxkJ3MgbG9jYWwgdHJhbnNmb3JtIGlzIGluaGVyaXRlZAorICAgIGV4cGVjdGVkR3JhbmRDaGls
ZFRyYW5zZm9ybS50cmFuc2xhdGUoLTUsIDApOyAvLyBncmFuZENoaWxkJ3Mgc2Nyb2xsRGVsdGEK
KyAgICBleHBlY3RlZEdyYW5kQ2hpbGRUcmFuc2Zvcm0udHJhbnNsYXRlKDgsIDYpOyAvLyB0cmFu
c2xhdGlvbiBiZWNhdXNlIG9mIHBvc2l0aW9uIG9jY3VycyBiZWZvcmUgbGF5ZXIncyBsb2NhbCB0
cmFuc2Zvcm0uCisgICAgZXhwZWN0ZWRHcmFuZENoaWxkVHJhbnNmb3JtLm11bHRpcGx5KHJvdGF0
aW9uQWJvdXRaKTsgLy8gZ3JhbmRDaGlsZCdzIGxvY2FsIHRyYW5zZm9ybQorICAgIGV4cGVjdGVk
R3JhbmRDaGlsZFRyYW5zZm9ybS50cmFuc2xhdGUoNTAsIDUwKTsgLy8gdHJhbnNsYXRpb24gYmVj
YXVzZSBvZiBoYWxmLXdpZHRoIGhhbGYtaGVpZ2h0IG9jY3VycyBhZnRlciBsYXllcidzIGxvY2Fs
IHRyYW5zZm9ybQorCisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3Rl
ZENoaWxkVHJhbnNmb3JtLCBjaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJB
TlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVkR3JhbmRDaGlsZFRyYW5zZm9ybSwgZ3JhbmRD
aGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklY
X0VRKGV4cGVjdGVkR3JlYXRHcmFuZENoaWxkVHJhbnNmb3JtLCBncmVhdEdyYW5kQ2hpbGQtPmRy
YXdUcmFuc2Zvcm0oKSk7Cit9CisKK1RFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVy
aWZ5U2Nyb2xsQ29tcGVuc2F0aW9uRm9yRml4ZWRQb3NpdGlvbkxheWVyV2l0aEludGVybWVkaWF0
ZVN1cmZhY2VBbmRUcmFuc2Zvcm1zKQoreworICAgIC8vIFRoaXMgdGVzdCBjaGVja3MgZm9yIGNv
cnJlY3Qgc2Nyb2xsIGNvbXBlbnNhdGlvbiB3aGVuIHRoZSBmaXhlZC1wb3NpdGlvbiBjb250YWlu
ZXIKKyAgICAvLyBjb250cmlidXRlcyB0byBhIGRpZmZlcmVudCByZW5kZXJTdXJmYWNlIHRoYW4g
dGhlIGZpeGVkLXBvc2l0aW9uIGxheWVyLiBJbiB0aGlzCisgICAgLy8gY2FzZSwgdGhlIHN1cmZh
Y2Ugb3JpZ2luVHJhbnNmb3JtcyBhbHNvIGhhdmUgdG8gYmUgYWNjb3VudGVkIGZvciB3aGVuIGNo
ZWNraW5nIHRoZQorICAgIC8vIHNjcm9sbERlbHRhLgorICAgIERlYnVnU2NvcGVkU2V0SW1wbFRo
cmVhZCBzY29wZWRJbXBsVGhyZWFkOworCisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0g
Y3JlYXRlVHJlZUZvckZpeGVkUG9zaXRpb25UZXN0cygpOworICAgIENDTGF5ZXJJbXBsKiBjaGls
ZCA9IHJvb3QtPmNoaWxkcmVuKClbMF0uZ2V0KCk7CisgICAgQ0NMYXllckltcGwqIGdyYW5kQ2hp
bGQgPSBjaGlsZC0+Y2hpbGRyZW4oKVswXS5nZXQoKTsKKyAgICBDQ0xheWVySW1wbCogZ3JlYXRH
cmFuZENoaWxkID0gZ3JhbmRDaGlsZC0+Y2hpbGRyZW4oKVswXS5nZXQoKTsKKworICAgIGNoaWxk
LT5zZXRJc0NvbnRhaW5lckZvckZpeGVkUG9zaXRpb25MYXllcnModHJ1ZSk7CisgICAgZ3JhbmRD
aGlsZC0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCg4LCA2KSk7CisgICAgZ3JhbmRDaGlsZC0+c2V0
Rm9yY2VSZW5kZXJTdXJmYWNlKHRydWUpOworICAgIGdyZWF0R3JhbmRDaGlsZC0+c2V0Rml4ZWRU
b0NvbnRhaW5lckxheWVyVmlzaWJsZVJlY3QodHJ1ZSk7CisgICAgZ3JlYXRHcmFuZENoaWxkLT5z
ZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCByb3Rh
dGlvbkFib3V0WjsKKyAgICByb3RhdGlvbkFib3V0Wi5yb3RhdGUzZCgwLCAwLCA5MCk7CisgICAg
Z3JhbmRDaGlsZC0+c2V0VHJhbnNmb3JtKHJvdGF0aW9uQWJvdXRaKTsKKyAgICAKKyAgICAvLyBD
YXNlIDE6IHNjcm9sbERlbHRhIG9mIDAsIDAKKyAgICBjaGlsZC0+c2V0U2Nyb2xsRGVsdGEoSW50
U2l6ZSgwLCAwKSk7CisgICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJp
bGl0eShyb290LmdldCgpKTsKKyAgICAgICAgCisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgg
ZXhwZWN0ZWRDaGlsZFRyYW5zZm9ybTsKKyAgICBleHBlY3RlZENoaWxkVHJhbnNmb3JtLnRyYW5z
bGF0ZSg1MCwgNTApOworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGV4cGVjdGVkU3VyZmFj
ZU9yaWdpblRyYW5zZm9ybTsKKyAgICBleHBlY3RlZFN1cmZhY2VPcmlnaW5UcmFuc2Zvcm0udHJh
bnNsYXRlKDgsIDYpOworICAgIGV4cGVjdGVkU3VyZmFjZU9yaWdpblRyYW5zZm9ybS5tdWx0aXBs
eShyb3RhdGlvbkFib3V0Wik7CisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggZXhwZWN0ZWRH
cmFuZENoaWxkVHJhbnNmb3JtOworICAgIGV4cGVjdGVkR3JhbmRDaGlsZFRyYW5zZm9ybS50cmFu
c2xhdGUoNTAsIDUwKTsKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBleHBlY3RlZEdyZWF0
R3JhbmRDaGlsZFRyYW5zZm9ybTsKKyAgICBleHBlY3RlZEdyZWF0R3JhbmRDaGlsZFRyYW5zZm9y
bS50cmFuc2xhdGUoNTAsIDUwKTsKKyAgICBBU1NFUlRfVFJVRShncmFuZENoaWxkLT5yZW5kZXJT
dXJmYWNlKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0ZWRD
aGlsZFRyYW5zZm9ybSwgY2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5T
Rk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZFN1cmZhY2VPcmlnaW5UcmFuc2Zvcm0sIGdyYW5k
Q2hpbGQtPnJlbmRlclN1cmZhY2UoKS0+b3JpZ2luVHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9U
UkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0ZWRHcmFuZENoaWxkVHJhbnNmb3JtLCBncmFu
ZENoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRS
SVhfRVEoZXhwZWN0ZWRHcmVhdEdyYW5kQ2hpbGRUcmFuc2Zvcm0sIGdyZWF0R3JhbmRDaGlsZC0+
ZHJhd1RyYW5zZm9ybSgpKTsKKworICAgIC8vIENhc2UgMjogc2Nyb2xsRGVsdGEgb2YgMTAsIDMw
CisgICAgY2hpbGQtPnNldFNjcm9sbERlbHRhKEludFNpemUoMTAsIDMwKSk7CisgICAgZXhlY3V0
ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShyb290LmdldCgpKTsKKyAgICAg
ICAgCisgICAgLy8gSGVyZSB0aGUgZ3JhbmRDaGlsZCByZW1haW5zIHVuY2hhbmdlZCwgYmVjYXVz
ZSBpdCBzY3JvbGxzIGFsb25nIHdpdGggdGhlCisgICAgLy8gcmVuZGVyU3VyZmFjZSwgYW5kIHRo
ZSB0cmFuc2xhdGlvbiBpcyBhY3R1YWxseSBpbiB0aGUgcmVuZGVyU3VyZmFjZS4gQnV0LCB0aGUg
Zml4ZWQKKyAgICAvLyBwb3NpdGlvbiBncmVhdEdyYW5kQ2hpbGQgaXMgbW9yZSBhd2t3YXJkOiBp
dHMgYWN0dWFsbHkgYmVpbmcgZHJhd24gd2l0aCByZXNwZWN0IHRvCisgICAgLy8gdGhlIHJlbmRl
clN1cmZhY2UsIGJ1dCBpdCBuZWVkcyB0byByZW1haW4gZml4ZWQgd2l0aCByZXNlcGN0IHRvIGEg
Y29udGFpbmVyIGJleW9uZAorICAgIC8vIHRoYXQgc3VyZmFjZS4gU28sIHRoZSBuZXQgcmVzdWx0
IGlzIHRoYXQsIHVubGlrZSBwcmV2aW91cyB0ZXN0cyB3aGVyZSB0aGUgZml4ZWQKKyAgICAvLyBw
b3NpdGlvbiBsYXllcidzIHRyYW5zZm9ybSByZW1haW5zIHVuY2hhbmdlZCwgaGVyZSB0aGUgZml4
ZWQgcG9zaXRpb24gbGF5ZXIncworICAgIC8vIHRyYW5zZm9ybSBleHBsaWNpdGx5IGNvbnRhaW5z
IHRoZSB0cmFuc2xhdGlvbiB0aGF0IGNhbmNlbHMgb3V0IHRoZSBzY3JvbGwuCisgICAgZXhwZWN0
ZWRDaGlsZFRyYW5zZm9ybS5tYWtlSWRlbnRpdHkoKTsKKyAgICBleHBlY3RlZENoaWxkVHJhbnNm
b3JtLnRyYW5zbGF0ZSgtMTAsIC0zMCk7IC8vIHNjcm9sbERlbHRhCisgICAgZXhwZWN0ZWRDaGls
ZFRyYW5zZm9ybS50cmFuc2xhdGUoNTAsIDUwKTsKKworICAgIGV4cGVjdGVkU3VyZmFjZU9yaWdp
blRyYW5zZm9ybS5tYWtlSWRlbnRpdHkoKTsKKyAgICBleHBlY3RlZFN1cmZhY2VPcmlnaW5UcmFu
c2Zvcm0udHJhbnNsYXRlKC0xMCwgLTMwKTsgLy8gc2Nyb2xsRGVsdGEKKyAgICBleHBlY3RlZFN1
cmZhY2VPcmlnaW5UcmFuc2Zvcm0udHJhbnNsYXRlKDgsIDYpOworICAgIGV4cGVjdGVkU3VyZmFj
ZU9yaWdpblRyYW5zZm9ybS5tdWx0aXBseShyb3RhdGlvbkFib3V0Wik7CisKKyAgICAvLyBUaGUg
cm90YXRpb24gYW5kIGl0cyBpbnZlcnNlIGFyZSBuZWVkZWQgdG8gcGxhY2UgdGhlIHNjcm9sbERl
bHRhIGNvbXBlbnNhdGlvbiBpbgorICAgIC8vIHRoZSBjb3JyZWN0IHNwYWNlLiBUaGlzIHRlc3Qg
d2lsbCBmYWlsIGlmIHRoZSByb3RhdGlvbi9pbnZlcnNlIGFyZSBiYWNrd2FyZHMsIHRvbywKKyAg
ICAvLyBzbyBpdCByZXF1aXJlcyBwZXJmZWN0IG9yZGVyIG9mIG9wZXJhdGlvbnMuCisgICAgZXhw
ZWN0ZWRHcmVhdEdyYW5kQ2hpbGRUcmFuc2Zvcm0ubWFrZUlkZW50aXR5KCk7CisgICAgZXhwZWN0
ZWRHcmVhdEdyYW5kQ2hpbGRUcmFuc2Zvcm0ubXVsdGlwbHkocm90YXRpb25BYm91dFouaW52ZXJz
ZSgpKTsKKyAgICBleHBlY3RlZEdyZWF0R3JhbmRDaGlsZFRyYW5zZm9ybS50cmFuc2xhdGUoMTAs
IDMwKTsgLy8gZXhwbGljaXQgY2FuY2VsaW5nIG91dCB0aGUgc2Nyb2xsRGVsdGEgdGhhdCBnZXRz
IGVtYmVkZGVkIGluIHRoZSBmaXhlZCBwb3NpdGlvbiBsYXllcidzIHN1cmZhY2UuCisgICAgZXhw
ZWN0ZWRHcmVhdEdyYW5kQ2hpbGRUcmFuc2Zvcm0ubXVsdGlwbHkocm90YXRpb25BYm91dFopOwor
ICAgIGV4cGVjdGVkR3JlYXRHcmFuZENoaWxkVHJhbnNmb3JtLnRyYW5zbGF0ZSg1MCwgNTApOwor
CisgICAgQVNTRVJUX1RSVUUoZ3JhbmRDaGlsZC0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBFWFBF
Q1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVkQ2hpbGRUcmFuc2Zvcm0sIGNoaWxk
LT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEo
ZXhwZWN0ZWRTdXJmYWNlT3JpZ2luVHJhbnNmb3JtLCBncmFuZENoaWxkLT5yZW5kZXJTdXJmYWNl
KCktPm9yaWdpblRyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklY
X0VRKGV4cGVjdGVkR3JhbmRDaGlsZFRyYW5zZm9ybSwgZ3JhbmRDaGlsZC0+ZHJhd1RyYW5zZm9y
bSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVkR3JlYXRH
cmFuZENoaWxkVHJhbnNmb3JtLCBncmVhdEdyYW5kQ2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7Cit9
CisKK1RFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5U2Nyb2xsQ29tcGVuc2F0
aW9uRm9yRml4ZWRQb3NpdGlvbkxheWVyV2l0aE11bHRpcGxlSW50ZXJtZWRpYXRlU3VyZmFjZXMp
Cit7CisgICAgLy8gVGhpcyB0ZXN0IGNoZWNrcyBmb3IgY29ycmVjdCBzY3JvbGwgY29tcGVuc2F0
aW9uIHdoZW4gdGhlIGZpeGVkLXBvc2l0aW9uIGNvbnRhaW5lcgorICAgIC8vIGNvbnRyaWJ1dGVz
IHRvIGEgZGlmZmVyZW50IHJlbmRlclN1cmZhY2UgdGhhbiB0aGUgZml4ZWQtcG9zaXRpb24gbGF5
ZXIsIHdpdGgKKyAgICAvLyBhZGRpdGlvbmFsIHJlbmRlclN1cmZhY2VzIGluLWJldHdlZW4uIFRo
aXMgY2hlY2tzIHRoYXQgdGhlIGNvbnZlcnNpb24gdG8gYW5jZXN0b3IKKyAgICAvLyBzdXJmYWNl
cyBpcyBhY2N1bXVsYXRlZCBwcm9wZXJseSBpbiB0aGUgZmluYWwgbWF0cml4IHRyYW5zZm9ybS4K
KyAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgc2NvcGVkSW1wbFRocmVhZDsKKworICAgIE93
blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IGNyZWF0ZVRyZWVGb3JGaXhlZFBvc2l0aW9uVGVzdHMo
KTsKKyAgICBDQ0xheWVySW1wbCogY2hpbGQgPSByb290LT5jaGlsZHJlbigpWzBdLmdldCgpOwor
ICAgIENDTGF5ZXJJbXBsKiBncmFuZENoaWxkID0gY2hpbGQtPmNoaWxkcmVuKClbMF0uZ2V0KCk7
CisgICAgQ0NMYXllckltcGwqIGdyZWF0R3JhbmRDaGlsZCA9IGdyYW5kQ2hpbGQtPmNoaWxkcmVu
KClbMF0uZ2V0KCk7CisKKyAgICAvLyBBZGQgb25lIG1vcmUgbGF5ZXIgdG8gdGhlIHRlc3QgdHJl
ZSBmb3IgdGhpcyBzY2VuYXJpby4KKyAgICB7CisgICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0
cml4IGlkZW50aXR5OworICAgICAgICBPd25QdHI8Q0NMYXllckltcGw+IGZpeGVkUG9zaXRpb25D
aGlsZCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoNSk7CisgICAgICAgIHNldExheWVyUHJvcGVydGll
c0ZvclRlc3RpbmcoZml4ZWRQb3NpdGlvbkNoaWxkLmdldCgpLCBpZGVudGl0eSwgaWRlbnRpdHks
IEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMTAwLCAxMDApLCBm
YWxzZSk7CisgICAgICAgIGdyZWF0R3JhbmRDaGlsZC0+YWRkQ2hpbGQoZml4ZWRQb3NpdGlvbkNo
aWxkLnJlbGVhc2UoKSk7CisgICAgfQorICAgIENDTGF5ZXJJbXBsKiBmaXhlZFBvc2l0aW9uQ2hp
bGQgPSBncmVhdEdyYW5kQ2hpbGQtPmNoaWxkcmVuKClbMF0uZ2V0KCk7CisKKyAgICAvLyBBY3R1
YWxseSBzZXQgdXAgdGhlIHNjZW5hcmlvIGhlcmUuCisgICAgY2hpbGQtPnNldElzQ29udGFpbmVy
Rm9yRml4ZWRQb3NpdGlvbkxheWVycyh0cnVlKTsKKyAgICBncmFuZENoaWxkLT5zZXRQb3NpdGlv
bihGbG9hdFBvaW50KDgsIDYpKTsKKyAgICBncmFuZENoaWxkLT5zZXRGb3JjZVJlbmRlclN1cmZh
Y2UodHJ1ZSk7CisgICAgZ3JlYXRHcmFuZENoaWxkLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KDE0
MCwgMTIwKSk7CisgICAgZ3JlYXRHcmFuZENoaWxkLT5zZXRGb3JjZVJlbmRlclN1cmZhY2UodHJ1
ZSk7CisgICAgZml4ZWRQb3NpdGlvbkNoaWxkLT5zZXRGaXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNp
YmxlUmVjdCh0cnVlKTsKKyAgICBmaXhlZFBvc2l0aW9uQ2hpbGQtPnNldERyYXdzQ29udGVudCh0
cnVlKTsKKworICAgIC8vIFRoZSBhZGRpdGlvbmFsIHJvdGF0aW9ucywgd2hpY2ggYXJlIG5vbi1j
b21tdXRhdGl2ZSB3aXRoIHRyYW5zbGF0aW9ucywgaGVscCB0bworICAgIC8vIHZlcmlmeSB0aGF0
IHdlIGhhdmUgY29ycmVjdCBvcmRlci1vZi1vcGVyYXRpb25zIGluIHRoZSBmaW5hbCBzY3JvbGwg
Y29tcGVuc2F0aW9uLgorICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHJvdGF0aW9uQWJvdXRa
OworICAgIHJvdGF0aW9uQWJvdXRaLnJvdGF0ZTNkKDAsIDAsIDkwKTsKKyAgICBncmFuZENoaWxk
LT5zZXRUcmFuc2Zvcm0ocm90YXRpb25BYm91dFopOworICAgIGdyZWF0R3JhbmRDaGlsZC0+c2V0
VHJhbnNmb3JtKHJvdGF0aW9uQWJvdXRaKTsKKworICAgIC8vIENhc2UgMTogc2Nyb2xsRGVsdGEg
b2YgMCwgMAorICAgIGNoaWxkLT5zZXRTY3JvbGxEZWx0YShJbnRTaXplKDAsIDApKTsKKyAgICBl
eGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3QuZ2V0KCkpOwor
CisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggZXhwZWN0ZWRDaGlsZFRyYW5zZm9ybTsKKyAg
ICBleHBlY3RlZENoaWxkVHJhbnNmb3JtLnRyYW5zbGF0ZSg1MCwgNTApOworCisgICAgV2ViVHJh
bnNmb3JtYXRpb25NYXRyaXggZXhwZWN0ZWRHcmFuZENoaWxkU3VyZmFjZU9yaWdpblRyYW5zZm9y
bTsKKyAgICBleHBlY3RlZEdyYW5kQ2hpbGRTdXJmYWNlT3JpZ2luVHJhbnNmb3JtLnRyYW5zbGF0
ZSg4LCA2KTsKKyAgICBleHBlY3RlZEdyYW5kQ2hpbGRTdXJmYWNlT3JpZ2luVHJhbnNmb3JtLm11
bHRpcGx5KHJvdGF0aW9uQWJvdXRaKTsKKworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGV4
cGVjdGVkR3JhbmRDaGlsZFRyYW5zZm9ybTsKKyAgICBleHBlY3RlZEdyYW5kQ2hpbGRUcmFuc2Zv
cm0udHJhbnNsYXRlKDUwLCA1MCk7CisKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBleHBl
Y3RlZEdyZWF0R3JhbmRDaGlsZFN1cmZhY2VPcmlnaW5UcmFuc2Zvcm07CisgICAgZXhwZWN0ZWRH
cmVhdEdyYW5kQ2hpbGRTdXJmYWNlT3JpZ2luVHJhbnNmb3JtLnRyYW5zbGF0ZSgxNDAsIDEyMCk7
CisgICAgZXhwZWN0ZWRHcmVhdEdyYW5kQ2hpbGRTdXJmYWNlT3JpZ2luVHJhbnNmb3JtLm11bHRp
cGx5KHJvdGF0aW9uQWJvdXRaKTsKKworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGV4cGVj
dGVkR3JlYXRHcmFuZENoaWxkVHJhbnNmb3JtOworICAgIGV4cGVjdGVkR3JlYXRHcmFuZENoaWxk
VHJhbnNmb3JtLnRyYW5zbGF0ZSg1MCwgNTApOworCisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRy
aXggZXhwZWN0ZWRGaXhlZFBvc2l0aW9uQ2hpbGRUcmFuc2Zvcm07CisgICAgZXhwZWN0ZWRGaXhl
ZFBvc2l0aW9uQ2hpbGRUcmFuc2Zvcm0udHJhbnNsYXRlKDUwLCA1MCk7CisKKyAgICBBU1NFUlRf
VFJVRShncmFuZENoaWxkLT5yZW5kZXJTdXJmYWNlKCkpOworICAgIEFTU0VSVF9UUlVFKGdyZWF0
R3JhbmRDaGlsZC0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05f
TUFUUklYX0VRKGV4cGVjdGVkQ2hpbGRUcmFuc2Zvcm0sIGNoaWxkLT5kcmF3VHJhbnNmb3JtKCkp
OworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0ZWRHcmFuZENoaWxk
U3VyZmFjZU9yaWdpblRyYW5zZm9ybSwgZ3JhbmRDaGlsZC0+cmVuZGVyU3VyZmFjZSgpLT5vcmln
aW5UcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBl
Y3RlZEdyYW5kQ2hpbGRUcmFuc2Zvcm0sIGdyYW5kQ2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7Cisg
ICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZEdyZWF0R3JhbmRDaGls
ZFN1cmZhY2VPcmlnaW5UcmFuc2Zvcm0sIGdyZWF0R3JhbmRDaGlsZC0+cmVuZGVyU3VyZmFjZSgp
LT5vcmlnaW5UcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9F
UShleHBlY3RlZEdyZWF0R3JhbmRDaGlsZFRyYW5zZm9ybSwgZ3JlYXRHcmFuZENoaWxkLT5kcmF3
VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0
ZWRGaXhlZFBvc2l0aW9uQ2hpbGRUcmFuc2Zvcm0sIGZpeGVkUG9zaXRpb25DaGlsZC0+ZHJhd1Ry
YW5zZm9ybSgpKTsKKworICAgIC8vIENhc2UgMjogc2Nyb2xsRGVsdGEgb2YgMTAsIDMwCisgICAg
Y2hpbGQtPnNldFNjcm9sbERlbHRhKEludFNpemUoMTAsIDMwKSk7CisgICAgZXhlY3V0ZUNhbGN1
bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShyb290LmdldCgpKTsKKworICAgIGV4cGVj
dGVkQ2hpbGRUcmFuc2Zvcm0ubWFrZUlkZW50aXR5KCk7CisgICAgZXhwZWN0ZWRDaGlsZFRyYW5z
Zm9ybS50cmFuc2xhdGUoLTEwLCAtMzApOyAvLyBzY3JvbGxEZWx0YQorICAgIGV4cGVjdGVkQ2hp
bGRUcmFuc2Zvcm0udHJhbnNsYXRlKDUwLCA1MCk7CisKKyAgICBleHBlY3RlZEdyYW5kQ2hpbGRT
dXJmYWNlT3JpZ2luVHJhbnNmb3JtLm1ha2VJZGVudGl0eSgpOworICAgIGV4cGVjdGVkR3JhbmRD
aGlsZFN1cmZhY2VPcmlnaW5UcmFuc2Zvcm0udHJhbnNsYXRlKC0xMCwgLTMwKTsgLy8gc2Nyb2xs
RGVsdGEKKyAgICBleHBlY3RlZEdyYW5kQ2hpbGRTdXJmYWNlT3JpZ2luVHJhbnNmb3JtLnRyYW5z
bGF0ZSg4LCA2KTsKKyAgICBleHBlY3RlZEdyYW5kQ2hpbGRTdXJmYWNlT3JpZ2luVHJhbnNmb3Jt
Lm11bHRpcGx5KHJvdGF0aW9uQWJvdXRaKTsKKworICAgIC8vIGdyYW5kQ2hpbGQsIGdyZWF0R3Jh
bmRDaGlsZCwgYW5kIGdyZWF0R3JhbmRDaGlsZCdzIHN1cmZhY2UgYXJlIG5vdCBleHBlY3RlZCB0
bworICAgIC8vIGNoYW5nZSwgc2luY2UgdGhleSBhcmUgYWxsIG5vdCBmaXhlZCwgYW5kIHRoZXkg
YXJlIGFsbCBkcmF3biB3aXRoIHJlc3BlY3QgdG8KKyAgICAvLyBncmFuZENoaWxkJ3Mgc3VyZmFj
ZSB0aGF0IGFscmVhZHkgaGFzIHRoZSBzY3JvbGxEZWx0YSBhY2NvdW50ZWQgZm9yLgorCisgICAg
Ly8gQnV0IHRoZSBncmVhdC1ncmVhdCBncmFuZGNoaWxkLCAiZml4ZWRQb3NpdGlvbkNoaWxkIiwg
c2hvdWxkIGhhdmUgYSB0cmFuc2Zvcm0gdGhhdCBleHBsaWNpdGx5IGNhbmNlbHMgb3V0IHRoZSBz
Y3JvbGxEZWx0YS4KKyAgICAvLyBUaGUgZXhwZWN0ZWQgdHJhbnNmb3JtIGlzOgorICAgIC8vICAg
Y29tcG91bmRPcmlnaW5UcmFuc2Zvcm0uaW52ZXJzZSgpICogdHJhbnNsYXRlKHBvc2l0aXZlIHNj
cm9sbERlbHRhKSAqIGNvbXBvdW5kT3JpZ2luVHJhbnNmb3JtICogaGFsZi13aWR0aC1oYWxmLWhl
aWdodCB0cmFuc2xhdGlvbgorICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGNvbXBvdW5kT3Jp
Z2luVHJhbnNmb3JtOyAvLyB0cmFuc2Zvcm0gZnJvbSBncmVhdEdyYW5kQ2hpbGRTdXJmYWNlJ3Mg
b3JpZ2luIHRvIHRoZSByb290IHN1cmZhY2UuCisgICAgY29tcG91bmRPcmlnaW5UcmFuc2Zvcm0u
dHJhbnNsYXRlKDgsIDYpOyAvLyBvcmlnaW4gdHJhbnNsYXRpb24gb2YgZ3JhbmRDaGlsZAorICAg
IGNvbXBvdW5kT3JpZ2luVHJhbnNmb3JtLm11bHRpcGx5KHJvdGF0aW9uQWJvdXRaKTsgLy8gcm90
YXRpb24gb2YgZ3JhbmRDaGlsZAorICAgIGNvbXBvdW5kT3JpZ2luVHJhbnNmb3JtLnRyYW5zbGF0
ZSgxNDAsIDEyMCk7IC8vIG9yaWdpbiB0cmFuc2xhdGlvbiBvZiBncmVhdEdyYW5kQ2hpbGQKKyAg
ICBjb21wb3VuZE9yaWdpblRyYW5zZm9ybS5tdWx0aXBseShyb3RhdGlvbkFib3V0Wik7IC8vIHJv
dGF0aW9uIG9mIGdyZWF0R3JhbmRDaGlsZAorCisgICAgZXhwZWN0ZWRGaXhlZFBvc2l0aW9uQ2hp
bGRUcmFuc2Zvcm0ubWFrZUlkZW50aXR5KCk7CisgICAgZXhwZWN0ZWRGaXhlZFBvc2l0aW9uQ2hp
bGRUcmFuc2Zvcm0ubXVsdGlwbHkoY29tcG91bmRPcmlnaW5UcmFuc2Zvcm0uaW52ZXJzZSgpKTsK
KyAgICBleHBlY3RlZEZpeGVkUG9zaXRpb25DaGlsZFRyYW5zZm9ybS50cmFuc2xhdGUoMTAsIDMw
KTsgLy8gZXhwbGljaXQgY2FuY2VsaW5nIG91dCB0aGUgc2Nyb2xsRGVsdGEgdGhhdCBnZXRzIGVt
YmVkZGVkIGluIHRoZSBmaXhlZCBwb3NpdGlvbiBsYXllcidzIHN1cmZhY2UuCisgICAgZXhwZWN0
ZWRGaXhlZFBvc2l0aW9uQ2hpbGRUcmFuc2Zvcm0ubXVsdGlwbHkoY29tcG91bmRPcmlnaW5UcmFu
c2Zvcm0pOworICAgIGV4cGVjdGVkRml4ZWRQb3NpdGlvbkNoaWxkVHJhbnNmb3JtLnRyYW5zbGF0
ZSg1MCwgNTApOworCisgICAgQVNTRVJUX1RSVUUoZ3JhbmRDaGlsZC0+cmVuZGVyU3VyZmFjZSgp
KTsKKyAgICBBU1NFUlRfVFJVRShncmVhdEdyYW5kQ2hpbGQtPnJlbmRlclN1cmZhY2UoKSk7Cisg
ICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZENoaWxkVHJhbnNmb3Jt
LCBjaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFU
UklYX0VRKGV4cGVjdGVkR3JhbmRDaGlsZFN1cmZhY2VPcmlnaW5UcmFuc2Zvcm0sIGdyYW5kQ2hp
bGQtPnJlbmRlclN1cmZhY2UoKS0+b3JpZ2luVHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFO
U0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0ZWRHcmFuZENoaWxkVHJhbnNmb3JtLCBncmFuZENo
aWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhf
RVEoZXhwZWN0ZWRHcmVhdEdyYW5kQ2hpbGRTdXJmYWNlT3JpZ2luVHJhbnNmb3JtLCBncmVhdEdy
YW5kQ2hpbGQtPnJlbmRlclN1cmZhY2UoKS0+b3JpZ2luVHJhbnNmb3JtKCkpOworICAgIEVYUEVD
VF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0ZWRHcmVhdEdyYW5kQ2hpbGRUcmFuc2Zv
cm0sIGdyZWF0R3JhbmRDaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNG
T1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVkRml4ZWRQb3NpdGlvbkNoaWxkVHJhbnNmb3JtLCBm
aXhlZFBvc2l0aW9uQ2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7Cit9CisKK1RFU1QoQ0NMYXllclRy
ZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5U2Nyb2xsQ29tcGVuc2F0aW9uRm9yRml4ZWRQb3NpdGlv
bkxheWVyV2l0aENvbnRhaW5lckxheWVyVGhhdEhhc1N1cmZhY2UpCit7CisgICAgLy8gVGhpcyB0
ZXN0IGNoZWNrcyBmb3IgY29ycmVjdCBzY3JvbGwgY29tcGVuc2F0aW9uIHdoZW4gdGhlIGZpeGVk
LXBvc2l0aW9uIGNvbnRhaW5lcgorICAgIC8vIGl0c2VsZiBoYXMgYSByZW5kZXJTdXJmYWNlLiBJ
biB0aGlzIGNhc2UsIHRoZSBjb250YWluZXIgbGF5ZXIgc2hvdWxkIGJlIHRyZWF0ZWQKKyAgICAv
LyBsaWtlIGEgbGF5ZXIgdGhhdCBjb250cmlidXRlcyB0byBhIHRhcmdldFJlbmRlclN1cmZhY2Us
IGFuZCB0aGF0IHRhcmdldFJlbmRlclN1cmZhY2UKKyAgICAvLyBpcyBjb21wbGV0ZWx5IGlycmVs
ZXZhbnQ7IGl0IHNob3VsZCBub3QgYWZmZWN0IHRoZSBzY3JvbGwgY29tcGVuc2F0aW9uLgorICAg
IERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBzY29wZWRJbXBsVGhyZWFkOworCisgICAgT3duUHRy
PENDTGF5ZXJJbXBsPiByb290ID0gY3JlYXRlVHJlZUZvckZpeGVkUG9zaXRpb25UZXN0cygpOwor
ICAgIENDTGF5ZXJJbXBsKiBjaGlsZCA9IHJvb3QtPmNoaWxkcmVuKClbMF0uZ2V0KCk7CisgICAg
Q0NMYXllckltcGwqIGdyYW5kQ2hpbGQgPSBjaGlsZC0+Y2hpbGRyZW4oKVswXS5nZXQoKTsKKwor
ICAgIGNoaWxkLT5zZXRJc0NvbnRhaW5lckZvckZpeGVkUG9zaXRpb25MYXllcnModHJ1ZSk7Cisg
ICAgY2hpbGQtPnNldEZvcmNlUmVuZGVyU3VyZmFjZSh0cnVlKTsKKyAgICBncmFuZENoaWxkLT5z
ZXRGaXhlZFRvQ29udGFpbmVyTGF5ZXJWaXNpYmxlUmVjdCh0cnVlKTsKKyAgICBncmFuZENoaWxk
LT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisKKyAgICAvLyBDYXNlIDE6IHNjcm9sbERlbHRhIG9m
IDAsIDAKKyAgICBjaGlsZC0+c2V0U2Nyb2xsRGVsdGEoSW50U2l6ZSgwLCAwKSk7CisgICAgZXhl
Y3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShyb290LmdldCgpKTsKKwor
ICAgIC8vIFRoZSBleHBlY3RlZCBkcmF3IHRyYW5zZm9ybXMgd2l0aG91dCBhbnkgc2Nyb2xsIHNo
b3VsZCBzdGlsbCBpbmNsdWRlIGEgdHJhbnNsYXRpb24gdG8gdGhlIGNlbnRlciBvZiB0aGUgbGF5
ZXIgKGkuZS4gdHJhbnNsYXRpb24gYnkgNTAsIDUwKS4KKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBleHBlY3RlZFN1cmZhY2VPcmlnaW5UcmFuc2Zvcm07CisgICAgZXhwZWN0ZWRTdXJmYWNl
T3JpZ2luVHJhbnNmb3JtLnRyYW5zbGF0ZSgwLCAwKTsKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBleHBlY3RlZENoaWxkVHJhbnNmb3JtOworICAgIGV4cGVjdGVkQ2hpbGRUcmFuc2Zvcm0u
dHJhbnNsYXRlKDUwLCA1MCk7CisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggZXhwZWN0ZWRH
cmFuZENoaWxkVHJhbnNmb3JtOworICAgIGV4cGVjdGVkR3JhbmRDaGlsZFRyYW5zZm9ybS50cmFu
c2xhdGUoNTAsIDUwKTsKKyAgICBBU1NFUlRfVFJVRShjaGlsZC0+cmVuZGVyU3VyZmFjZSgpKTsK
KyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVkU3VyZmFjZU9yaWdp
blRyYW5zZm9ybSwgY2hpbGQtPnJlbmRlclN1cmZhY2UoKS0+b3JpZ2luVHJhbnNmb3JtKCkpOwor
ICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0ZWRDaGlsZFRyYW5zZm9y
bSwgY2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01B
VFJJWF9FUShleHBlY3RlZEdyYW5kQ2hpbGRUcmFuc2Zvcm0sIGdyYW5kQ2hpbGQtPmRyYXdUcmFu
c2Zvcm0oKSk7CisKKyAgICAvLyBDYXNlIDI6IHNjcm9sbERlbHRhIG9mIDEwLCAxMAorICAgIGNo
aWxkLT5zZXRTY3JvbGxEZWx0YShJbnRTaXplKDEwLCAxMCkpOworICAgIGV4ZWN1dGVDYWxjdWxh
dGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocm9vdC5nZXQoKSk7CisKKyAgICAvLyBUaGUg
c3VyZmFjZSBpcyB0cmFuc2xhdGVkIGJ5IHNjcm9sbERlbHRhLCB0aGUgY2hpbGQgdHJhbnNmb3Jt
IGRvZXNuJ3QgY2hhbmdlCisgICAgLy8gYmVjYXVzZSBpdCBzY3JvbGxzIGFsb25nIHdpdGggdGhl
IHN1cmZhY2UsIGJ1dCB0aGUgZml4ZWQgcG9zaXRpb24gZ3JhbmRDaGlsZAorICAgIC8vIG5lZWRz
IHRvIGNvbXBlbnNhdGUgZm9yIHRoZSBzY3JvbGwgdHJhbnNsYXRpb24uCisgICAgZXhwZWN0ZWRT
dXJmYWNlT3JpZ2luVHJhbnNmb3JtLm1ha2VJZGVudGl0eSgpOworICAgIGV4cGVjdGVkU3VyZmFj
ZU9yaWdpblRyYW5zZm9ybS50cmFuc2xhdGUoLTEwLCAtMTApOworICAgIGV4cGVjdGVkR3JhbmRD
aGlsZFRyYW5zZm9ybS5tYWtlSWRlbnRpdHkoKTsKKyAgICBleHBlY3RlZEdyYW5kQ2hpbGRUcmFu
c2Zvcm0udHJhbnNsYXRlKDYwLCA2MCk7CisgICAgQVNTRVJUX1RSVUUoY2hpbGQtPnJlbmRlclN1
cmZhY2UoKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZFN1
cmZhY2VPcmlnaW5UcmFuc2Zvcm0sIGNoaWxkLT5yZW5kZXJTdXJmYWNlKCktPm9yaWdpblRyYW5z
Zm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVkQ2hp
bGRUcmFuc2Zvcm0sIGNoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZP
Uk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0ZWRHcmFuZENoaWxkVHJhbnNmb3JtLCBncmFuZENoaWxk
LT5kcmF3VHJhbnNmb3JtKCkpOworfQorCitURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3Qs
IHZlcmlmeVNjcm9sbENvbXBlbnNhdGlvbkZvckZpeGVkUG9zaXRpb25MYXllclRoYXRJc0Fsc29G
aXhlZFBvc2l0aW9uQ29udGFpbmVyKQoreworICAgIC8vIFRoaXMgdGVzdCBjaGVja3MgdGhlIHNj
ZW5hcmlvIHdoZXJlIGEgZml4ZWQtcG9zaXRpb24gbGF5ZXIgYWxzbyBoYXBwZW5zIHRvIGJlIGEK
KyAgICAvLyBjb250YWluZXIgaXRzZWxmIGZvciBhIGRlc2NlbmRhbnQgZml4ZWQgcG9zaXRpb24g
bGF5ZXIuIEluIHBhcnRpY3VsYXIsIHRoZSBsYXllcgorICAgIC8vIHNob3VsZCBub3QgYWNjaWRl
bnRhbGx5IGJlIGZpeGVkIHRvIGl0c2VsZi4KKyAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQg
c2NvcGVkSW1wbFRocmVhZDsKKworICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IGNyZWF0
ZVRyZWVGb3JGaXhlZFBvc2l0aW9uVGVzdHMoKTsKKyAgICBDQ0xheWVySW1wbCogY2hpbGQgPSBy
b290LT5jaGlsZHJlbigpWzBdLmdldCgpOworICAgIENDTGF5ZXJJbXBsKiBncmFuZENoaWxkID0g
Y2hpbGQtPmNoaWxkcmVuKClbMF0uZ2V0KCk7CisKKyAgICBjaGlsZC0+c2V0SXNDb250YWluZXJG
b3JGaXhlZFBvc2l0aW9uTGF5ZXJzKHRydWUpOworICAgIGdyYW5kQ2hpbGQtPnNldEZpeGVkVG9D
b250YWluZXJMYXllclZpc2libGVSZWN0KHRydWUpOworCisgICAgLy8gVGhpcyBzaG91bGQgbm90
IGNvbmZ1c2UgdGhlIGdyYW5kQ2hpbGQuIElmIGNvcnJlY3QsIHRoZSBncmFuZENoaWxkIHdvdWxk
IHN0aWxsIGJlIGNvbnNpZGVyZWQgZml4ZWQgdG8gaXRzIGNvbnRhaW5lciAoaS5lLiAiY2hpbGQi
KS4KKyAgICBncmFuZENoaWxkLT5zZXRJc0NvbnRhaW5lckZvckZpeGVkUG9zaXRpb25MYXllcnMo
dHJ1ZSk7CisKKyAgICAvLyBDYXNlIDE6IHNjcm9sbERlbHRhIG9mIDAsIDAKKyAgICBjaGlsZC0+
c2V0U2Nyb2xsRGVsdGEoSW50U2l6ZSgwLCAwKSk7CisgICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdU
cmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShyb290LmdldCgpKTsKKworICAgIC8vIFRoZSBleHBlY3Rl
ZCBkcmF3IHRyYW5zZm9ybXMgd2l0aG91dCBhbnkgc2Nyb2xsIHNob3VsZCBzdGlsbCBpbmNsdWRl
IGEgdHJhbnNsYXRpb24gdG8gdGhlIGNlbnRlciBvZiB0aGUgbGF5ZXIgKGkuZS4gdHJhbnNsYXRp
b24gYnkgNTAsIDUwKS4KKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBleHBlY3RlZENoaWxk
VHJhbnNmb3JtOworICAgIGV4cGVjdGVkQ2hpbGRUcmFuc2Zvcm0udHJhbnNsYXRlKDUwLCA1MCk7
CisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggZXhwZWN0ZWRHcmFuZENoaWxkVHJhbnNmb3Jt
OworICAgIGV4cGVjdGVkR3JhbmRDaGlsZFRyYW5zZm9ybS50cmFuc2xhdGUoNTAsIDUwKTsKKyAg
ICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVkQ2hpbGRUcmFuc2Zvcm0s
IGNoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRS
SVhfRVEoZXhwZWN0ZWRHcmFuZENoaWxkVHJhbnNmb3JtLCBncmFuZENoaWxkLT5kcmF3VHJhbnNm
b3JtKCkpOworCisgICAgLy8gQ2FzZSAyOiBzY3JvbGxEZWx0YSBvZiAxMCwgMTAKKyAgICBjaGls
ZC0+c2V0U2Nyb2xsRGVsdGEoSW50U2l6ZSgxMCwgMTApKTsKKyAgICBleGVjdXRlQ2FsY3VsYXRl
RHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3QuZ2V0KCkpOworCisgICAgLy8gSGVyZSB0
aGUgY2hpbGQgaXMgYWZmZWN0ZWQgYnkgc2Nyb2xsRGVsdGEsIGJ1dCB0aGUgZml4ZWQgcG9zaXRp
b24gZ3JhbmRDaGlsZCBzaG91bGQgbm90IGJlIGFmZmVjdGVkLgorICAgIGV4cGVjdGVkQ2hpbGRU
cmFuc2Zvcm0ubWFrZUlkZW50aXR5KCk7CisgICAgZXhwZWN0ZWRDaGlsZFRyYW5zZm9ybS50cmFu
c2xhdGUoNDAsIDQwKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVj
dGVkQ2hpbGRUcmFuc2Zvcm0sIGNoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9U
UkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0ZWRHcmFuZENoaWxkVHJhbnNmb3JtLCBncmFu
ZENoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworfQorCitURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1v
blRlc3QsIHZlcmlmeVNjcm9sbENvbXBlbnNhdGlvbkZvckZpeGVkUG9zaXRpb25MYXllclRoYXRI
YXNOb0NvbnRhaW5lcikKK3sKKyAgICAvLyBUaGlzIHRlc3QgY2hlY2tzIHNjcm9sbCBjb21wZW5z
YXRpb24gd2hlbiBhIGZpeGVkLXBvc2l0aW9uIGxheWVyIGRvZXMgbm90IGZpbmQgYW55CisgICAg
Ly8gYW5jZXN0b3IgdGhhdCBpcyBhICJjb250YWluZXJGb3JGaXhlZFBvc2l0aW9uTGF5ZXJzIi4g
SW4gdGhpcyBzaXR1YXRpb24sIHRoZSBsYXllciBzaG91bGQKKyAgICAvLyBiZSBmaXhlZCB0byB0
aGUgdmlld3BvcnQgLS0gbm90IHRoZSByb290TGF5ZXIsIHdoaWNoIG1heSBoYXZlIHRyYW5zZm9y
bXMgb2YgaXRzIG93bi4KKyAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgc2NvcGVkSW1wbFRo
cmVhZDsKKworICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IGNyZWF0ZVRyZWVGb3JGaXhl
ZFBvc2l0aW9uVGVzdHMoKTsKKyAgICBDQ0xheWVySW1wbCogY2hpbGQgPSByb290LT5jaGlsZHJl
bigpWzBdLmdldCgpOworICAgIENDTGF5ZXJJbXBsKiBncmFuZENoaWxkID0gY2hpbGQtPmNoaWxk
cmVuKClbMF0uZ2V0KCk7CisKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCByb3RhdGlvbkJ5
WjsKKyAgICByb3RhdGlvbkJ5Wi5yb3RhdGUzZCgwLCAwLCA5MCk7CisKKyAgICByb290LT5zZXRU
cmFuc2Zvcm0ocm90YXRpb25CeVopOworICAgIGdyYW5kQ2hpbGQtPnNldEZpeGVkVG9Db250YWlu
ZXJMYXllclZpc2libGVSZWN0KHRydWUpOworCisgICAgLy8gQ2FzZSAxOiByb290IHNjcm9sbERl
bHRhIG9mIDAsIDAKKyAgICByb290LT5zZXRTY3JvbGxEZWx0YShJbnRTaXplKDAsIDApKTsKKyAg
ICBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3QuZ2V0KCkp
OworCisgICAgLy8gVGhlIGV4cGVjdGVkIGRyYXcgdHJhbnNmb3JtcyB3aXRob3V0IGFueSBzY3Jv
bGwgc2hvdWxkIHN0aWxsIGluY2x1ZGUgYSB0cmFuc2xhdGlvbiB0byB0aGUgY2VudGVyIG9mIHRo
ZSBsYXllciAoaS5lLiB0cmFuc2xhdGlvbiBieSA1MCwgNTApLgorICAgIFdlYlRyYW5zZm9ybWF0
aW9uTWF0cml4IGV4cGVjdGVkQ2hpbGRUcmFuc2Zvcm07CisgICAgZXhwZWN0ZWRDaGlsZFRyYW5z
Zm9ybS5tdWx0aXBseShyb3RhdGlvbkJ5Wik7CisgICAgZXhwZWN0ZWRDaGlsZFRyYW5zZm9ybS50
cmFuc2xhdGUoNTAsIDUwKTsKKworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGV4cGVjdGVk
R3JhbmRDaGlsZFRyYW5zZm9ybTsKKyAgICBleHBlY3RlZEdyYW5kQ2hpbGRUcmFuc2Zvcm0ubXVs
dGlwbHkocm90YXRpb25CeVopOworICAgIGV4cGVjdGVkR3JhbmRDaGlsZFRyYW5zZm9ybS50cmFu
c2xhdGUoNTAsIDUwKTsKKworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhw
ZWN0ZWRDaGlsZFRyYW5zZm9ybSwgY2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNU
X1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZEdyYW5kQ2hpbGRUcmFuc2Zvcm0sIGdy
YW5kQ2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisKKyAgICAvLyBDYXNlIDI6IHJvb3Qgc2Nyb2xs
RGVsdGEgb2YgMTAsIDEwCisgICAgcm9vdC0+c2V0U2Nyb2xsRGVsdGEoSW50U2l6ZSgxMCwgMTAp
KTsKKyAgICBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3Qu
Z2V0KCkpOworCisgICAgLy8gSGVyZSB0aGUgY2hpbGQgaXMgYWZmZWN0ZWQgYnkgc2Nyb2xsRGVs
dGEsIGJ1dCB0aGUgZml4ZWQgcG9zaXRpb24gZ3JhbmRDaGlsZCBzaG91bGQgbm90IGJlIGFmZmVj
dGVkLgorICAgIGV4cGVjdGVkQ2hpbGRUcmFuc2Zvcm0ubWFrZUlkZW50aXR5KCk7CisgICAgZXhw
ZWN0ZWRDaGlsZFRyYW5zZm9ybS50cmFuc2xhdGUoLTEwLCAtMTApOyAvLyB0aGUgc2Nyb2xsRGVs
dGEKKyAgICBleHBlY3RlZENoaWxkVHJhbnNmb3JtLm11bHRpcGx5KHJvdGF0aW9uQnlaKTsKKyAg
ICBleHBlY3RlZENoaWxkVHJhbnNmb3JtLnRyYW5zbGF0ZSg1MCwgNTApOworCisgICAgRVhQRUNU
X1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZENoaWxkVHJhbnNmb3JtLCBjaGlsZC0+
ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4
cGVjdGVkR3JhbmRDaGlsZFRyYW5zZm9ybSwgZ3JhbmRDaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsK
K30KKwogVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlDbGlwUmVjdEN1bGxz
UmVuZGVyU3VyZmFjZXMpCiB7CiAgICAgLy8gVGhlIGVudGlyZSBzdWJ0cmVlIG9mIGxheWVycyB0
aGF0IGFyZSBvdXRzaWRlIHRoZSBjbGlwUmVjdCBzaG91bGQgYmUgY3VsbGVkIGF3YXksCg==
</data>
<flag name="review"
          id="154291"
          type_id="1"
          status="+"
          setter="enne"
    />
          </attachment>
      

    </bug>

</bugzilla>